.TITLE HPSPLR SPOOLER FOR HP 7221A PLOTTER .IDENT /X001.1/ .MCALL GET$,OFNB$R,FSRSZ$,FDBDF$ .MCALL FDOP$A,FDRC$A,RCVX$C .MCALL FINIT$,QIOW$C .mcall qio$s,mrkt$s,wtlo$s .MCALL CLEF$S .MCALL OPEN$M,PUT$R,GET$R,EXIT$S .MCALL ALUN$C .MCALL QIOW$S,CLOSE$,delet$ ; ; CHANNEL 1 TI ; CHANNEL 2 PLOTTER - tt10: for HP ; CHANNEL 3 SY: FSRSZ$ 1 .EVEN INFDB: FDBDF$ FDRC$A ,RECBUF,132. FDOP$A 3,,,FO.RD!FA.SHR RECBUF: .BLKB 132. ENDFLG: .WORD 0 RECLEN: .WORD 0 START: .WORD 0 END: .WORD 0 OBF1: .BLKB 132. OLEN1: .WORD 0 RCVBUF: .BLKW 15. OPTR: .WORD OBF1 ERR: .WORD 0 MSS5: .ASCIZ /HP.... -- NOT A PLOT FILE / .EVEN DX: .BLKW 2 REPBUF: .BLKB 8. FLAGS: .WORD 0 PENS: .WORD 0 PENPSN: .WORD 0 PX: .WORD 0 PY: .WORD 0 penvel: .word 0 RECNO: .WORD 0 RECPRI: .WORD 0 CFDB: FDBDF$ FDRC$A FD.RAN FDOP$A 3,CDSDS,,FO.MFY CDSDS: .WORD 4,CDEV,5,CUIC,12.,CFIL CDEV: .ASCII /SY0:/ CUIC: .ASCII /[1,7]/ CFIL: .ASCII /QUEUEMAN.SYS/ .EVEN .MCALL WTSE$S,MRKT$S BEGIN: FINIT$ ALUN$C 2,TT,10 ;CALL IT HP 0 QIOW$C IO.ATT,2,1 1$: OPEN$M #CFDB ;OPEN CONTROL BCC NXTFIL MRKT$S #1,#5,#1 WTSE$S #1 BR 1$ NXTFIL: CLR RECPRI CLR ENDFLG CLEF$S #54. CLR RECNO MOV #1,CFDB+F.RCNM+2 1$: GET$R #CFDB,#RECBUF,#64. BCS 10$ MOV CFDB+F.NRBD+2,R5 CMP (R5),#<^RHP.> BNE 1$ CMP 4(R5),RECPRI BLO 1$ MOV 4(R5),RECPRI MOV CFDB+F.RCNM+2,RECNO BR 1$ 10$: TST RECNO BNE 11$ ;NO WORK -- EXIT CLOSE$ #CFDB EXIT$S 11$: DEC RECNO MOV RECNO,CFDB+F.RCNM+2 GET$R #CFDB,#RECBUF,#64. DEC CFDB+F.RCNM+2 BIS #100000,RECBUF+4 PUT$R #CFDB,#RECBUF,#64. CLOSE$ ;HERE WITH DATA RECORD ;** HERE COPY FNB DATA TO INFDB+F.FNB MOV #INFDB+F.FNB,R0 MOV #RECBUF+14,R1 MOV #10,R2 12$: MOV (R1)+,(R0)+ SOB R2,12$ CLR (R0)+ CLR (R0)+ MOV #5,R2 13$: MOV (R1)+,(R0)+ SOB R2,13$ MOV RECBUF+10,FLAGS MOVB RECBUF+13,R0 BNE 111$ MOV #20.,R0 111$: MOV R0,PENVEL OFNB$R #INFDB ;READ ON SY: BCS EOFIL ;NO GOOD GO TO NEXT FILE CLR RECLEN CALL PRINTF ;PRINT THE FILE TST FLAGS BMI 14$ CLOSE$ #INFDB ;CLOSE BR EOFIL ;AND TO NEXT 14$: DELET$ #INFDB EOFIL: OPEN$M #CFDB BCC 2$ MRKT$S #1,#5,#1 WTSE$S #1 BR EOFIL 2$: ;NOW NULL OUT RECORD.... MOV #RECBUF,R5 MOV #32.,R4 1$: CLR (R5)+ SOB R4,1$ PUT$R #CFDB,#RECBUF,#64.,RECNO JMP NXTFIL PRINTF: ;ROUTINE TO PRINT FILE AND HEADER CALL HEADR CLR ERR 1$: CALL PRINTL call finit RTS PC CMBIT=40000 HEADR: MOV #RECBUF,START CLR END 90$: call gtc BCS 92$ cmpb r1,#177 bne 90$ call gtc cmpb r1,#'U beq 91$ cmpb r1,#'I bne 90$ 91$: call init RTS PC 92$: TST (SP)+ RTS PC GTC: mov r0,-(sp) 11$: TST ENDFLG BNE 12$ CMP START,END BLO 2$ CALL GETLIN BCC 11$ 12$: mov (sp)+,r0 SEC RTS PC 2$: ;HERE THERE IS A REAL CHARACTER IN THE BUFFER - PERHAPS ; RETURN IT IN R0 IF WE CAN ; MOVB @START,R1 mov (sp)+,r0 INC START CLC RTS PC GETLIN: CLR RECLEN CLEF$S #54. TST @#$DSW BNE 9$ GET$ #INFDB,#RECBUF,#132. BCS 1$ MOV INFDB+F.NRBD,RECLEN MOV #RECBUF,START MOV #RECBUF,END ADD RECLEN,END CLC 1$: RTS PC 9$: INC ENDFLG SEC RTS PC ;subroutines for hp plotter esc: movb #33,(r0)+ movb #56,(r0)+ movb r1,(r0)+ br chkop asc: clr r2 call $cbdmg chkop: cmp r0,#obf1+80. bge 1$ rts pc 1$: PUTLIN: movb #'B-100,(r0)+ sub #obf1,r0 QIOW$S #,#2,#2,,,,<#ERR,#1,,#OBF1,R0> mov #obf1,r0 rts pc mbn1: bis #140,r1 sbn: bit #40,r1 bne 1$ bis #100,r1 1$: movb r1,(r0)+ rts pc mbn: mov r1,r2 cmp r1,#16. blt mbn1 cmp r1,#1024. blt 2$ bic #107777,r1 asr r1 asr r1 asr r1 asr r1 swab r1 call mbn1 mov r2,r1 bic #170077,r1 asl r1 asl r1 swab r1 call sbn 3$: mov r2,r1 bic #177700,r1 call sbn br chkop 2$: bic #176077,r1 asl r1 asl r1 swab r1 call mbn1 br 3$ pmb: mov r2,-(sp) mov r1,r5 mov #100,r1 call pmb1 mov (sp)+,r5 mov #40,r1 call pmb1 br chkop pmb1: mov r5,r4 cmp r5,#511. bgt 1$ cmp r5,#-512. blt 1$ cmp r5,#16. bge 2$ cmp r5,#-15. blt 2$ br 3$ 1$: bic #101777,r4 asr r4 asr r4 swab r4 call pbyte mov r5,r4 2$: bic #176037,r4 asl r4 asl r4 asl r4 swab r4 call pbyte mov r5,r4 3$: bic #177740,r4 call pbyte rts pc pbyte: bis r1,r4 movb r4,(r0)+ rts pc .mcall cmkt$s init: mov #obf1,r0 mov #50,r1 call esc MOVB #126.,(R0)+ MOVB #95.,(R0)+ MOVB #'M,R1 CALL ESC MOVB #'2,(R0)+ MOVB #'0,(R0)+ MOVB #':,(R0)+ MOVB #'P+40,(R0)+ MOVB #140,(R0)+ MOV #'L,R1 CALL ESC MOVB #2,(r0)+ sub #obf1,r0 1$: qio$s #io.rpr!tf.rne!tf.bin,#2,#2,,,,<#err,#1,,#obf1,r0> mrkt$s #1,#10,#2 wtlo$s 0,#3 clef$s #1 tst @#$DSW ;timed out beq 2$ ;no qiow$S #io.kil,#2,#7 WTSE$S #2 br 1$ 2$: cmkt$s mov #obf1,r0 QIOW$S #IO.RLB,#2,#2,,,,<#RECBUF,#80.> MOVB #'D,R1 CALL ESC CALL PUTLIN QIOW$S #IO.RLB,#2,#2,,,,<#RECBUF,#80.> movb #176,(r0)+ movb #137,(r0)+ MOV #101,PENS MOVB #176,(R0)+ MOVB #'W,(R0)+ BIT #CMBIT,FLAGS BEQ 77$ MOVB #145,(R0)+ 77$: MOVB #175,(R0)+ CLR PX CLR PY CLR PENPSN movb #'V+40,(R0)+ movb #101,(r0)+ MOVB #176,(R0)+ MOVB #'S,(R0)+ MOVB #143,(R0)+ MOVB #055,(R0)+ MOVB #40,(R0)+ MOVB #047,(R0)+ MOVB #104,(R0)+ ; done plotter on, initialise,select pen 1 ;set grid set graph mov #'M,r1 call esc mov #20,r1 call asc movb #':,(r0)+ MOV #'I,R1 CALL ESC MOV #110.,R1 CALL ASC MOVB #';,(R0)+ MOVB #'2,(R0)+ ;^B MOVB #';,(R0)+ MOVB #'1,(R0)+ MOVB #'3,(R0)+ MOVB #':,(R0)+ movb #176,(r0)+ movb #'V,(r0)+ mov penvel,r1 call sbn movb #'p+40,(r0)+ movb #140,(r0)+ movb #'r+40,(R0)+ rts pc .MCALL QIOW$S finit: movb #'V+40,(r0)+ movb #100,(r0)+ CALL PUTLIN rts pc SHORT: CALL GTC MOV R1,R4 CALL GTC MOV R1,R5 ;Y IN R5 VEC: TST PENPSN BNE 1$ ADD R4,PX ADD R5,PY BR PRINTL 1$: ;**** PUT VECTOR DRAWER IN HERE**** MOV R4,R1 MOV R5,R2 call pmb BR PRINTL LONG: MOV #DX,R3 MOV #4,R2 1$: CALL GTC MOVB R1,(R3)+ SOB R2,1$ MOV DX,R4 MOV DX+2,R5 BR VEC PENUP: TST PENPSN BEQ 1$ CLR PENPSN clr px clr py MOVB #'R+40,(R0)+ 1$: BR PRINTL PENDWN: MOV #PX,R5 MOV (R5)+,R1 MOV (R5)+,R2 CLR -(R5) CLR -(R5) mov r0,-(r5) ;pen psn call pmb clr r1 clr r2 call pmb br printl PRINTL: CALL GTC BCC 4$ 3$: RTS PC 4$: CMP r1,#177 BNE PRINTE CLR ERR CALL GTC BCS 3$ BIC #177640,r1 CMP r1,#'L BEQ LONG CMP r1,#'S BEQ SHORT CMP r1,#'U BEQ PENUP CMP r1,#'D BEQ PENDWN CMP r1,#'C BEQ CHPENS CMP r1,#'M BEQ PRINTL ;NOT IMP CMP R1,#'I BNE PRINTE CALL INIT BR PRINTL PRINTE: INC ERR CMP ERR,#30 BNE PRINTL CLR OLEN1 MOV #OBF1,OPTR RTS PC CHPENS: movb #'V+40,(r0)+ CALL GTC ADD #100,R1 MOVB R1,(R0)+ MOVB #'R+40,(R0) TST PENPSN BEQ 1$ INCB (R0) 1$: INC R0 call chkop br printl .END BEGIN