; PRI.MAC ; ; A PROGRAM TO SET CERTAIN PARAMETERS ON THE LA120 PRINTER. THE ; FOLLOWING COMMANDS CAN BE USED: ; ; PRI PA ADVANCE TO NEXT PAGE ; PRI CS n SET THE CHARACTER SIZE AT SIZE n. n = 1 IS THE ; SMALLEST. n = 8 IS THE LARGEST. IF n = 0 OR NO ; CHARACTER, SETS TO THE DEFAULT (12 CHAR/INCH, SAME ; AS 3) ; PRI LM n SETS LEFT MARGIN AT VALUE n. ; Change the 5 in the ALUN$ macro to correspond to the terminal ; number of your LA120 printer. ; When task building, use the option ; TASK=...PRI ; After taskbuilding, install the task. ; Author: Raymond Willis, U. S. Forest Service, Berea, KY ; .MCALL GMCR$,QIOW$S,EXIT$S,DIR$,QIOW$C,ALUN$S GMCR: GMCR$ OPT: .ASCII /PACSLM/ ; PG ADV, CHAR SIZE, LEFT MAR, R MAR START: ALUN$S #4,#"TT,#5 ; LOG UNIT 4 IS THE PRINTER DIR$ #GMCR ; GET COMMAND LINE MOV #GMCR+6,R0 ; BEGINNING OF CHOICES MOV R0,R1 ; SAVE IT IN R1 MOV #OPT,R2 ; GET BEGINNING OF OPTIONS CLR R4 LET1: CMPB (R1)+,(R2)+ ; IS FIRST LETTER ENTERED = 1ST LET ; ; THIS CHOICE? BEQ LET2 ; IT IS. INC R2 ; SET FOR NEXT OPTION BR NEXOPT LET2: CMPB (R1)+,(R2)+ ; IS 2ND LETTER O.K.? BEQ CHOI ; IT IS, SUCCESS. NEXOPT: INC R4 ; LOOK AT NEXT OPTION. CMP R4,#3 ; LOOKED AT ALL? BEQ ERR ; WE HAVE MOV R0,R1 ; GET BEGINNING OF BUFFER BACK BR LET1 CHOI: ADD R4,R4 ; DOUBLE R4 INC R1 ; R1 NOW POINTS TO 1ST CHAR OF SIZE JMP @TABLE(R4) ; GO TO THE RIGHT CHOICE ERR: QIOW$S #IO.WVB,#5,#1,,,,<#MES1,#LM1,#40> ; SYNTAX ERROR JMP STOP SIZER: QIOW$C IO.WVB,5,1,,,, ; WRONG SIZE JMP STOP ; ; CHOICE 1: SEND A FORMFEED ; CHO1: QIOW$C IO.WVB,4,1,,,, ; PUT A FORMFEED TO PRINTER JMP STOP ; ; CHOICE 2: SET THE CHARACTER SIZE ; CHO2: MOVB (R1),R1 ; SIZE SHOULD NOW BE IN R1 CMPB R1,#60 BLE S3 CMPB R1,#71 BGE SIZER SUB #61,R1 ADD R1,R1 ; DOUBLE R1 JMP @SIZE(R1) S1: MOVB #64,SIZSTR+2 BR SIZGO S2: MOVB #63,SIZSTR+2 BR SIZGO S3: MOVB #62,SIZSTR+2 BR SIZGO S4: MOVB #60,SIZSTR+2 BR SIZGO S5: MOVB #70,SIZSTR+2 BR SIZGO S6: MOVB #67,SIZSTR+2 BR SIZGO S7: MOVB #66,SIZSTR+2 BR SIZGO S8: MOVB #65,SIZSTR+2 BR SIZGO SIZGO: QIOW$C IO.WVB,4,1,,,, BR STOP ; ; CHOICE 3: SET THE LEFT MARGIN ; CHO3: MOV #SIZSTR,R2 ADD #2,R2 C32: MOVB (R1)+,(R2)+ CMPB (R1),#60 BGE C32 MOVB #163,(R2)+ MOVB #15,(R2)+ SUB #SIZSTR,R2 QIOW$S #IO.WVB,#4,#1,,,,<#SIZSTR,R2> ; ; STOP: EXIT$S TABLE: .WORD CHO1,CHO2,CHO3 SIZE: .WORD S1,S2,S3,S4,S5,S6,S7,S8 MES1: .ASCII /SYNTAX ERROR/ LM1=.-MES1 MES2: .ASCII /THIS IS AN ILLEGAL CHAR SIZE/ LM2=.-MES2 FF: .BYTE 14 ; THE FORMFEED SIZSTR: .BYTE 33,133,60,167,15 ; ESC, [, 0, w,CR .END START The following example illustrates the use of the two subroutines. In this case the version of CSIZE that allows the print size to be changed in the middle of a line was used.  C C TEST.FTN C BYTE NULL DATA NULL/0/ CALL ASSIGN(2,'JUNK.DMP;1') CALL CSIZE(2,3,6) WRITE(2,100) 100 FORMAT(/,' THIS TEXT IS SIZE 3 WITH A MARGIN OF 6',/, 1' THE LINE THAT FOLLOWS SHOWS THE EFFECT OF REPLACING THE 2 PLUS CHARACTER',/,' WITH THE NULL CHARACTER IN THE CSIZE 3 SUBROUTINE.') CALL CSIZE(2,1,6) WRITE(2,110) ! SEND A LINE FEED AT THE BEGINNING 110 FORMAT('$SIZE 1') ! BUT NO CARRIAGE RETURN CALL CSIZE(2,3,6) WRITE(2,120)NULL 120 FORMAT(A1,' SIZE 3') CALL CSIZE(2,5,6) WRITE(2,130)NULL 130 FORMAT(A1,' SIZE 5') CALL CSIZE(2,7,6) WRITE(2,140)NULL 140 FORMAT(A1,' SIZE 7') CALL CSIZE(2,8,9) WRITE(2,150) ! A CR IS SENT AT END OF THIS LINE 150 FORMAT('+ SIZE 8') ! WHICH CAUSES NEXT LINE TO HAVE MARGIN 9 CALL CSIZE(2,3,9) WRITE(2,160) 160 FORMAT(' THIS IS ON A NEW LINE AND BACK TO SIZE 1 3 WITH MARGIN 9') CALL SPOOL(2,IERR) C IERR WILL CONTAIN ANY ERROR CODE FROM THE SPOOLING CALL EXIT END Here is the output from the program.