; FORMS.LIT Hash Code 720-147-113-744 ; ; Have you ever wanted to know what forms were 'SET' on a printer, but ;upon typing a 'PRINT' command were stumped by the fact the queue was empty? ; ; Do you have a large variety of forms in frequent use or more than one ;printer? ; ; If you answered yes to either of the above questions then here's a ;short utility program for you. This program will display the forms currently ;'SET' on all printers in the line printer spooler queue. ; The procedure is simple, simply type 'FORMS' and the names of all ;printers in the LPTSPL with their associated forms will be displayed. This ;program will work whether your system has just one printer or a dozen. ; ; ; This program is written for the AMOS/L system. ; ; ; ; The TCRT calls I have used work on the Televideo 925/950. I'm not ;familiar with other terminals, adjustments may have to be made to get ;the desired half/normal intensity printing. ; ; ; ; ; 2/27/84 Steven G. McNaughton Quaker State Oil Refining Corp. ; Research Center ; 04/11/86 - Modified for use with AMOS/L 1.3 and above when spoolers ; run through task manager. Also added convenient TCRT ; macro. Dale Eichbauer - MBS Data Systems - Merrill, MI. ; (NOTE - Space could be conserved by making the display ; routine a callable subroutine rather than duplicating ; it all over the place.) SEARCH SYS.UNV SEARCH TRM.UNV SEARCH SYSSYM.UNV VMAJOR=1 VMINOR=1 VEDIT=100. .OFINI ;DEFINE IMPURE SPACE .OFDEF RADBUF,4 ;RAD50 BUFFER SPACE .OFDEF ASCBUF,6 ;ASCII STRING RESULT SPACE .OFDEF FLAG,2 ;END OF QUEUE FLAG .OFDEF BLOCK,224 ; STORAGE FOR RETURNED MESSAGES .OFSIZ IMPSIZ ; OFFSETS FOR ARGUMENT BLOCK USED BY THE OPEN MESSAGE SOCKET MONITOR CALL. ; ALL MAY BE SKIPPED FOR THOSE WITH AMOS/L 1.3 AND ABOVE. OM.FLG = 0 OM.LEN = 2 OM.MAX = 4 OM.MSR = 6 ; ERROR FLAG DEFINITIONS FOR MESSAGE SYSTEM FOR THOSE WITH EARLY AMOS/L. ; ALL MAY BE SKIPPED FOR THOSE WITH AMOS/L 1.3 AND ABOVE. M$EAOP = 12 M$EDNN = 4 M$EDSF = 13 M$EDSN = 14 M$EMTL = 15 M$ENMB = 10 M$ENMP = 2 M$ENMS = 3 M$ENNN = 5 M$ENQB = 11 M$ENSK = 1 M$ESAE = 7 M$ESNN = 6 ; FIELD DEFINITIONS FOR MESSAGE BLOCK FOR THOSE WITH EARLY AMOS/L. ; LAST TWO ARE NEEDED BY ALL DUE TO ERRORS AND OMISSIONS IN SYSSYM.UNV MS.FLG = 0 MS.SRC = 2 MS.DST = 10 MS.SIZ = 16 MS.PPN = 20 MS.PRV = 22 MS.COD = 24 MS.SPR = 26 ; CORRECTS OMISSION FROM SYSSYM.UNV MS.DAT = 36 ; CORRECTS ERROR IN SYSSYM.UNV DEFINE XY A,B ; A MACRO DEFINITION FOR X,Y CURSOR POSITIONING MOV #^D<A_8.+B>,D1 TCRT ENDM START: PHDR -1,0,PH$REE!PH$REU ;program header TOP: GETIMP IMPSIZ,A5,EXIT ;GET AN IMPURE SPACE CTRLC EXIT ;ON ABORT GO TO EXIT MOV LPTQUE,D2 ; GET BEGINNING OF SPOOLERS [1.1] JEQ TASK ; IF NOT FOUND, THEN RUNNING [1.1] ; UNDER TASK MANAGER FOR SPOOLERS [1.1] ; OR NO SPOOLERS AT ALL [1.1] MOV LPTQUE,A0 ;LOAD ADDRESS OF FIRST LP QUEUE BLOCK CRLF ; [1.1] XY -1,11 ;HALF INTENSITY [1.1] TYPECR <Printer Form> TYPECR <------- ----> ; [1.1] XY -1,12 ;RETURN TO NORMAL VIDEO [1.1] LOOP: MOV (A0),D0 ;GET ADDRESS OF NEXT LPTQUE BLOCK TST D0 ;IS IT A ZERO (NO MORE QUEUE BLOCKS) BNE NZFLG ;NO KEEP FLAG NON-ZERO ZFLG: LEA A1,FLAG(A5) MOVW #0,(A1) ;NO MORE QUEUE'S ZEROIZE FLAG BR CONTIN NZFLG: LEA A1,FLAG(A5) ;MORE LPTQUE'S SO MAKE FLAG NON-ZERO MOVW #1,(A1) CONTIN: CTRLC EXIT LEA A1,RADBUF(A5) ;UNPACK MACRO USES A1 AS THE RAD50 ADDRESS LEA A2,ASCBUF(A5) ;AND A2 AS THE ASCII STRING ADDRESS CTRLC EXIT MOV 10(A0),@A1 ;MOVE THE PRINTER NAME TO UNPACKED UNPACK UNPACK CTRLC EXIT LEA A2,ASCBUF(A5) ;REPOSITION THE ASCII BUFFER CRLF CTRLC EXIT TTYL (A2) ;TYPE THE ASCII STRING LEA A1,RADBUF(A5) ;RELOAD THE RAD50 BUFFER LEA A2,ASCBUF(A5) ;RELOAD THE ASCII BUFFER MOV 14(A0),@A1 ;MOVE THE FORMS NAME TO BE UNPACKED UNPACK UNPACK CTRLC EXIT LEA A2,ASCBUF(A5) ;REPOSITION THE ASCII BUFFER XY -1,11 ;HALF INTENSITY TYPESP <........> XY -1,12 ;NORMAL VIDEO CTRLC EXIT TTYL (A2) ;TYPE THE ASCII STRING CRLF LEA A1,FLAG(A5) ;GET THE END OF QUEUE FLAG MOVW (A1),D4 ;PUT IN A REGISTER TO CHECK IT TST D4 ;IS IT ZERO? JEQ EXIT ;IF SO ALL DONE - SO EXIT MOV D0,A0 ;NOT ZERO - MORE QUEUE BLOCKS - JMP LOOP ;GO GET THE NEXT ONE ; ; ALL OF FOLLOWING ADDED FOR TASK MANAGER IN [1.1] ; TASK: PUSH ; USE THE STACK [1.1] PUSH ; FOR THE ARGUMENT BLOCK [1.1] PUSH ; FOR THE OPEN SOCKET CALL [1.1] MOV SP,A6 ; POINT TO ARGUMENT BLOCK [1.1] MOVW #-100000,OM.FLG(A6) ; SET FLAGS TO ENABLE SOCKET [1.1] MOVW #2000,OM.LEN(A6) ; SET MAXIMUM MESSAGE LENGTH TO 1024 [1.1] MOVW #12,OM.MAX(A6) ; SET MAX # OF PENDING MESSAGES TO 10 [1.1] CLR OM.MSR(A6) ; CLEAR MESSAGE SERVICE ROUTINE ADDRESS [1.1] OPNMSG @A6,D6 ; OPEN MESSAGE SOCKET [1.1] POP ; NOW CLEAR THE STACK [1.1] POP ; BACK TO WHERE IT WAS [1.1] POP ; [1.1] TST D6 ; SEE WHAT STATUS WAS RETURNED [1.1] BEQ ITC.OK ; IF OK, THEN CONTINUE [1.1] CMP D6,#M$ENMS ; SEE IF OLD VERSION OF AMOS/L [1.1] JEQ EXIT ; IF SO, JUST GO BACK TO SYSTEM [1.1] JMP ERROR ; ELSE ERROR, SO DO ERROR ROUTINE [1.1] ITC.OK: CRLF ; [1.1] XY -1,11 ;HALF INTENSITY [1.1] TYPECR <Printer Form> ; [1.1] TYPECR <------- ----> ; [1.1] XY -1,12 ;RETURN TO NORMAL VIDEO [1.1] LEA A1,BLOCK(A5) ; NOW POINT TO MESSAGE BLOCK (IMPURE) [1.1] MOV #45,D6 ; LOOP COUNTER [1.1] NULLS: CLR (A1)+ ; CLEAR A WORD IN MESSAGE BLOCK [1.1] SOB D6,NULLS ; AND LOOP BACK TILL DONE [1.1] LEA A1,BLOCK(A5) ; POINT TO START OF MESSAGE BLOCK AGAIN [1.1] MOVW #-3,14(A1) ; SET FOR LPTSPL SOCKET [1.1] MOVW #224,MS.SIZ(A1) ; SET MESSAGE SIZE TO 148 BYTES TOTAL [1.1] CLRW MS.COD(A1) ; CLEAR THE MESSAGE CODE [1.1] MOVW #"UU,MS.SPR(A1) ; PUT UNIQUE ID ON MESSAGE [1.1] MOVW #1,MS.SPR+2(A1) ; [1.1] CLR MS.SPR+6(A1) ; [1.1] JOBIDX A6 ; [1.1] MOV JOBNAM(A6),MS.DAT+2(A1) ; SEND OUR JOB NAME [1.1] TST JOBTRM(A6) ; SEE IF JOB HAS TRMDEF [1.1] BEQ NOTRM ; IF NOT, DON'T LOOK FOR IT [1.1] MOV JOBTRM(A6),A6 ; POINT TO TRMDEF [1.1] SUB #4,A6 ; POINT TO TERMINAL NAME [1.1] MOV @A6,MS.SPR+6(A1) ; SAVE IT IN SPARE AREA [1.1] NOTRM: CLRW MS.FLG(A1) ; CLEAR THE FLAGS WORD [1.1] SNDMSG @A1,D6,0 ; SEND THE MESSAGE TO THE SPOOLER [1.1] TST D6 ; CHECK RETURN STATUS [1.1] BEQ CONT ; IF OK, GO AROUND [1.1] CMP D6,#M$EDSF ; SEE IF SOCKET FULL [1.1] BNE EXIST ; IF NOT, SEE IF IT DOESN'T EXIST [1.1] SLEEP #1000. ; SLEEP FOR 1/10 SECOND [1.1] BR NOTRM ; AND TRY AGAIN [1.1] EXIST: CMP D6,#M$ESNN ; SEE IF LPTSPL EXISTS [1.1] JEQ EXIT ; IF NOT, FINISH UP [1.1] JMP ERROR ; ELSE DO ERROR ROUTINE [1.1] CONT: WTMSG #10000. ; WAIT FOR NO MORE THAN 1 SECOND [1.1] JNE EXIT ; IF NO RESPONSE, EXIT [1.1] RCVMSG @A1,D6,0 ; RECEIVE THE MESSAGE [1.1] TST D6 ; TEST FOR VALID MESSAGE [1.1] BEQ C.1 ; AROUND IF OK [1.1] JMP ERROR ; IF NOT, PROCESS ERROR [1.1] C.1: CMPW MS.SPR(A1),#"UU ; CHECK FOR PROPER RESPONSE [1.1] BNE CONT ; IF NOT, WAIT FOR NEXT [1.1] TSTW 30(A1) ; SEE IF END OF LIST [1.1] JNE EXIT ; IF SO, FINISH UP [1.1] PUSH A1 ; [1.1] CTRLC EXIT.1 ; [1.1] LEA A1,32(A1) ;UNPACK MACRO USES A1 AS THE RAD50 ADDRESS [1.1] LEA A2,ASCBUF(A5) ;AND A2 AS THE ASCII STRING ADDRESS [1.1] CTRLC EXIT.1 ; [1.1] UNPACK ; [1.1] UNPACK ; [1.1] CTRLC EXIT.1 ; [1.1] LEA A2,ASCBUF(A5) ;REPOSITION THE ASCII BUFFER [1.1] CRLF ; [1.1] CTRLC EXIT.1 ; [1.1] TTYL (A2) ;TYPE THE ASCII STRING [1.1] ADD #10,A1 ; NOW POINT TO THE FORMS [1.1] LEA A2,ASCBUF(A5) ;RELOAD THE ASCII BUFFER [1.1] UNPACK ; [1.1] UNPACK ; [1.1] CTRLC EXIT.1 ; [1.1] LEA A2,ASCBUF(A5) ;REPOSITION THE ASCII BUFFER [1.1] XY -1,11 ;HALF INTENSITY [1.1] TYPESP <........> ; [1.1] XY -1,12 ;NORMAL VIDEO [1.1] CTRLC EXIT.1 ; [1.1] TTYL (A2) ;TYPE THE ASCII STRING [1.1] CRLF ; [1.1] POP A1 ; [1.1] PUSH A1 ; [1.1] TSTW 114(A1) ; SEE IF SECOND ONE [1.1] JNE CONT ; [1.1] LEA A1,116(A1) ; POINT TO SECOND PRINTER NAME [1.1] LEA A2,ASCBUF(A5) ;AND A2 AS THE ASCII STRING ADDRESS [1.1] CTRLC EXIT.1 ; [1.1] UNPACK ; [1.1] UNPACK ; [1.1] CTRLC EXIT.1 ; [1.1] LEA A2,ASCBUF(A5) ;REPOSITION THE ASCII BUFFER [1.1] CRLF ; [1.1] CTRLC EXIT.1 ; [1.1] TTYL (A2) ;TYPE THE ASCII STRING [1.1] ADD #10,A1 ; NOW POINT TO THE FORMS [1.1] LEA A2,ASCBUF(A5) ;RELOAD THE ASCII BUFFER [1.1] UNPACK ; [1.1] UNPACK ; [1.1] CTRLC EXIT.1 ; [1.1] LEA A2,ASCBUF(A5) ;REPOSITION THE ASCII BUFFER [1.1] XY -1,11 ;HALF INTENSITY [1.1] TYPESP <........> ; [1.1] XY -1,12 ;NORMAL VIDEO [1.1] CTRLC EXIT.1 ; [1.1] TTYL (A2) ;TYPE THE ASCII STRING [1.1] CRLF ; [1.1] POP A1 ; [1.1] JMP CONT ; AND WAIT FOR NEXT MESSAGE [1.1] EXIT.1: ; [1.1] POP A1 ; [1.1] EXIT: CRLF EXIT ERROR: XY 24,1 ; PUT MESSAGE AT BOTTOM OF SCREEN XY -1,9 XY -2,4 ; MAKE IT IN RED FOR COLOR TERMINALS TYPE <No Spoolers Allocated or Error in ITC While Reading Printer Names> XY -2,1 ; BACK TO WHITE TTYI ; RING BELL BYTE 7,0 EVEN EXIT END