.TITLE LABEL .GLOBL .LBS,.LBL,LBS,LBL,.SI,SI,.W,.H,.DI,DI,.LBF .MCALL .XMTB,.XMTS,.CVIS,.COS,.SIN,.DI,.LBS,.LBL,.SI,.CVFS A0=R0 ;LABEL STRING, NO CR-LF. CALLED BY FORTRAN & PASCAL LBS: MOV #25.,R0 ;CALL LBS(S) LBS(S); MOV 2(R5),R1 ;=ADDRESS OF STRING MOV #B,R2 ;PASCAL: STRING MUST BE EXACTLY 25 CHAR L1: MOVB (R1)+,(R2)+ ;FORTRAN: STRING MUST BE <=25 CHAR BEQ LL SOB R0,L1 CLRB B+25. LL: .LBS #B RETURN ;LABEL LINE WITH CR-LF. CALLED BY FORTRAN & PASCAL LBL: MOV #25.,R0 MOV 2(R5),R1 MOV #B,R2 L2: MOVB (R1)+,(R2)+ BEQ LLL SOB R0,L2 CLRB B+25. LLL: .LBL #B RETURN ; .MACRO .LBL S ;LABEL S ON PLOTTER SS: .BLKW 1 .LBL: .LBS SS .LBS #CRLF RETURN CRLF: .BYTE 12,15,0,0 ; .MACRO .LBS S S: .BLKW 1 .LBS: MOV R0,-(SP) .XMTB #'L .XMTB #'B CLR COUNT LOOP: TSTB @S ;END OF STRING? BEQ ENDSTR Q1: CMPB @S,#15 ;END OF LINE? BEQ EOL Q2: CMPB @S,#11 ;TAB? BEQ TAB XMT: .XMTB @S INC S INC COUNT BR LOOP ;PROCESS THE END OF LINE EOL: CLR COUNT .XMTB #15 INC S BR LOOP ;PROCESS THE TAB TAB: BIC #177770,COUNT ;CONVERT TAB INTO SPACES MOV #8.,R0 ;TAB = 8 SPACES SUB COUNT,R0 LOOPSP: .XMTB #40 ;SEND SPACE SOB R0,LOOPSP CLR COUNT INC S BR LOOP ;END OF STRING ENDSTR: .XMTB #3 ;3 = HP'S STRING TERMINATOR MOV (SP)+,R0 RETURN ;************ ;.MACRO .SI W,H ;SETS WIDTH & HEIGHT OF LETTERS IN cm SI: .SI @2(R5),@4(R5) ;CALL SI(0.2,0.4) SI(W,H) RETURN .H: .FLT2 0.27 ;DEFAULT SIZE .W: .FLT2 0.19 .SI: STF A0,-(SP) .XMTB #'S .XMTB #'I LDF .W,A0 CALL DECIML .XMTB #54 ;54=COMMA LDF .H,A0 CALL DECIML .XMTB #73 ;73=SEMICOLON LDF (SP)+,A0 RETURN DECIML: MOV R0,-(SP) MULF #100,A0 ;TRANSMIT DECIMAL NUMBER * 100.0 IN cm STCFI A0,R0 .CVIS R0,#B,#10. .XMTB B+2 .XMTB B+3 .XMTB #56 ;56=PERIOD .XMTB B+4 .XMTB B+5 MOV (SP)+,R0 RETURN ;*************** ; .MACRO .DI ANGLE ROTATES LETTERS BY ANGLE RADIANS DI: .DI @2(R5) ;CALL DI(23.0) ;DI(ANGLE) RETURN ANGLE: .BLKW 2 .DI: MOV R0,-(SP) STF A0,-(SP) ;POSITIVE ANGLE IS COUNTERCLOCKWISE .XMTB #'D .XMTB #'I .COS ANGLE,A0 MULF #120,A0 STCFI A0,R0 .CVIS R0,#B,#10. .XMTS #B .XMTB #54 ;54=COMMA .SIN ANGLE,A0 MULF #120,A0 STCFI A0,R0 .CVIS R0,#B,#10. .XMTS #B .XMTB #73 ;73=SEMICOLON LDF (SP)+,A0 MOV (SP)+,R0 RETURN ; .MACRO .LBF X ;LABEL REAL X X: .BLKW 2 .LBF: .CVFS X,#B .LBS #B RETURN COUNT: .BLKW 1 B: .BLKB 26. .END