; ; FORMS.M68 ; Copyright (c) 1983,1984,1985 by Creed A. Erickson, Lancaster, PA ; Copyright (c) 1986 by Computer Systems Plus, Inc., Lancaster, PA ; All Rights Reserved ; ; Computer Systems Plus, Inc. hereby gives permission to any individual or ; group to use, reproduce, and/or distribute this software in either source ; or binary format provided that: ; ; A. Such use, reproduction, and/or distribution is not for ; explicitly commercial purposes. ; AND ; B. All copyright notices are preserved. ; ; Computer Systems Plus, Inc. assumes no responsiblity for the use, abuse, ; or nonuse of this software. ; ; If you should find that you have critisms or kudos for this program ; you may direct them to the author at the address below. ; ; Computer Systems Plus, Inc. has written a small library of spooler ; routines that are oriented toward multiple printer installations. ; If you have need for such software please contact: ; ; Creed Erickson ; Computer Systems Plus, Inc. ; 1630 Manheim Pike ; Lancaster, PA 17601 ; (717)-560-0140 ; ; ; Supplied to AMUS to update/replace program of same name/function written ; by Steven G. McNaughton of Quaker State Oil Refining Corp. Research Center ; ; AMUS release version - 2.0(18) ; assembles to .LIT file with hash 775-455-375-770 ; SEARCH SYS SEARCH SYSSYM ; edit history (last edit listed first) : ; ***** Version 2.0 **** ; [018] clean up for release to AMUS public domain. 9-Jun-86 / CAE ; [017] change to print form name first. 7-Jun-86 / CAE ; [016] merge old spooler support in. 30-Apr-86 / CAE ; [015] hacked up 1.1(14) for itc spooler support. 29-Apr-86 / CAE ; ***** Version 1.1 **** fancier display version 2-Jan-84 / CAE ; ***** version 1.0 **** Conversion from "T" 22-Nov-83 / CAE VMAJOR = 2 VMINOR = 0 VEDIT = 18. PHDR -1,PV$RSM,PH$REU!PH$REE ; reads system memory ; is reusable ; is reentrant BR START ; ; BINARY COPYRIGHT NOTICE ; ASCIZ /FORMS.LIT Copyright (C) 1986, Computer Systems Plus, Inc./ ; ; handy little macro for doing tcrt's ; DEFINE XY ROW,COL MOVW #'ROW'.*256.+'COL'.,D1 TCRT ENDM ; ; ITC system equates to get around errors 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 MS.DAT = 36 ; ; do pretty underlined header ; START: CRLF TYPE < > ; space out XY -1,31 ; end underline XY -1,2 ; back to beginning of line XY -1,30 ; begin underline TYPE ; message ; ; determine spooler type ; MOV #LPTQUE,A0 ; get old spooler chain MOV @A0,D7 ; test for zero BEQ NEWSPL ; yep - use ITC spooler OLDSPL: MOV @A0,A0 ; get next link MOV A0,D7 ; is it zero? BEQ OLDXIT ; yep - all done MOV #4,D1 ; preset offset to form LEA A1,10(A0) ; index spooler name CALL PRTLIN ; do it BR OLDSPL ; and loop OLDXIT: JMP DONE NEWSPL: PUSH ; make a socket data area PUSH ; on our stack PUSH MOV SP,A6 ; get the index MOVW #-100000,OM.FLG(A6) ; load it up MOVW #2000,OM.LEN(A6) MOVW #12,OM.MAX(A6) CLRW OM.MSR(A6) OPNMSG @A6,D6 ; open socket JNE SCKERR ; handle any errors POP ; remove socket data area POP ; from stack POP GETIMP 224,A0 ; get ITC header/message memory CLR MS.DST(A0) MOVW #65533.,14(A0) ; set dest to spooler MOVW #224,MS.SIZ(A0) ; set msg size MOVW #0,MS.COD(A0) MOVW #52525,MS.SPR(A0) ; ITC spooler flag MOVW #1,MS.SPR+2(A0) ; I think this is an opcode JOBIDX MOV JOBNAM(A6),MS.DAT+2(A0) ; tell my name LEA A6,JOBTRM(A6) ; and my terminal MOV @A6,D7 BEQ NOTRM MOV D7,A6 MOV -4(A6),34(A0) NOTRM: CLRW MS.FLG(A0) SNDMSG @A0,D6,0 ; ship request off to ITC splr BNE MSGERR ; handle error WL: CTRLC XSIT ; allow user abort WTMSG #20000. ; wait for a message BNE DONE ; timed out - finished RCVMSG @A0,D6,0 ; woke up - get msg BNE RCVERR ; somethings rotten !! CMPW MS.SPR(A0),#52525 ; test spooler flg BNE WL ; not what we want - retry MOV #1,D0 ; loop counter - 1 MOV #14,D1 ; preset offset to form LEA A1,32(A0) ; index spooler name AGAIN: TSTW -2(A1) ; end of spoolers ?? BNE DONE ; yes - finished CALL PRTLIN ; otherwise display LEA A1,116(A0) ; bump to second of pair DBF D0,AGAIN ; loop if second not done BR WL ; otherwise see if more DONE: CRLF EXIT ; ; error handleing/recovery needs work ; SCKERR: TYPE XSIT: EXIT MSGERR: TYPE EXIT RCVERR: TYPE EXIT ; ; PRTLIN ... display form-name/spool-name ; ; PASSED: ; A1 points to spooler name ; D1 contains offset from A1 to get to form name ; PRTLIN: CRLF PUSH d1 ; xy macro destroys d1 so save it XY -1,11 ; lo intensity TYPESP < Form> XY -1,12 ; normal intensity POP D1 ; restore offset PUSH ; create ascii buffer on stack PUSH ; ; print form name first ; MOV A1,D5 ; D5 gets saved pointer to spool-name ADD D1,A1 ; add in offset to form-name MOV SP,A2 ; set a2 to ascii buffer UNPACK UNPACK TTYL @SP ; print form name XY -1,11 ; lo TYPESP < on> XY -1,12 ; hi MOV SP,A2 ; reset a2 MOV D5,A1 ; restore ptr to spool-name UNPACK UNPACK TTYL @SP ; print spool-name POP ; relinquish ascii buffer POP RTN ; back to caller END .