4 * PROGRAM TITLE: O$LA (O$LA,O$LE,O$LH,O$LC,O$LF)
5 * LINE PRINTER ROUTINES
17 * THESE ARE THE LIBRARY ROUTINES FOR HACHTI'S LINE PRINTER INTERFACE
22 * DEPENDS ON HACHTI'S HARDWARE AND FORTRAN IV COMPILER TAPE
34 * DAC (BUFFER ADDRESS)
37 * THIS PRINTS ONE LINE OF LISING TEXT
38 * (60 2-CHAR WORDS MAX) TO THE LINE PRINTER.
42 * DAC (HEADING ADDRESS)
45 * SETUP THE LISTING HEADER
46 * RESETS THE PAGE COUNTER AND SPACES TO THE BEGINNING OF
51 * DAC (BUFFER ADDRESS)
54 * PRINT TEXT FROM BUFFER. NO CR OR LF IS OUTPUT.
59 * PRODUCE A CARRIAGE RETURN ON THE LINE PRINTER.
65 * SEND A LINE FEED COMMAND TO THE PRINTER.
72 * SPACES TO THE BEGINNING OF THE NEXT PAGE BY SENDING
73 * A FF CHARACTER TO THE PRINTER.
75 ********************************************************************************
77 SUBR O$LA TYPE A COMPLETE LINE WITH CR/LF, HEADING ETC.
78 SUBR O$LH INITIALISE HEADING
79 SUBR O$LP,T1 TYPE A LINE, NO CR
80 SUBR O$LC,T20 RETURN THE CARRIAGE
81 SUBR O$LF,T30 ADVANCE TO NEXT LINE
82 SUBR O$LE,FF EJECT PAGE
84 SUBR O$LSK1,SKP1 EMPTY LINES BETWEEN TOP OF PAGE AND HEADING
85 SUBR O$LSK2,SKP2 EMPTY LINES BETWEEN HEADING AND MAIN TEXT
86 SUBR O$LLPP,LPP PURE TEXT LINES PER PAGE
87 SUBR O$LRS,RS DISTANCE FROM PAGE NUMBERING TO RIGHT MARGIN
89 ********************************************************************************
94 SKP1 DEC 1 EMPTY LINES BEFORE HEADING
95 SKP2 DEC 3 EMPTY LINES BETWEEN HEADING AND TEXT
96 LPP DEC 60 DATA LINES PER PAGE (WITHOUT HEADING ETC.)
97 LNW DEC 60 LINE LENGTH IN 2-CHAR WORDS
98 RS DEC 1 RIGHT DISTANCE FOR PAGE NUMBERING (2-CHAR WORDS)
102 LDA* O$LA BUFFER ADDRESS
104 LDA LINE LEFT LINE COUNTER
105 SZE LINES LEFT ON PAGE?
106 JMP PGOK YES, JUMP AWAY
107 JST FF CALL FORM FEED ROUTINE
108 PGOK LDA LPP LINES PER PAGE
110 CAS LINES ARE WE ON THE FIRST LINE?
111 JMP *+2 NO, WE ARE NOT.
112 JST NP MAKE HEADER, SPACING ETC.
114 IRS LINE BUMP COUNTER
115 NOP WE DON'T CONTROL THAT HERE ANYMORE
116 JST T1 PRINT THE LINE
117 LBUF DAC ** ADDRESS OF LINE BUFFER
118 JST T20 CARRIAGE RETURN
120 IRS O$LA MAKE RETURN ADDRESS
124 O$LH DAC ** INIT HEADING
126 STA P1 POINTER TO SOURCE
128 STA P2 POINTER TO TARGET
138 LDA LPP LINES PER PAGE
140 STA LINE THE LINE COUNTER
141 IRS O$LH ADJUST ADDRESS
143 STA LN1 CLEAR PAGE NUMBERING
144 STA LN2 CLEAR PAGE NUMBERING
145 STA LN3 CLEAR PAGE NUMBERING
150 NP DAC ** PREPARE NEW PAGE
151 LDA SKP1 SPACES BEFORE HEADING
152 SNZ SPACING REQUIRED?
153 JMP NHDS NO SPACE BEFORE HEADING
159 NHDS JST LNNR PREPARE LINE NUMBERING
161 HBUP DAC HBUF ADDRESS OF HEADER BUFFER
162 JST T20 CARRIAGE RETURN
164 LDA SKP2 NUMBER OF SPACES BEFORE TEXT
165 SNZ SPACING REQUIRED?
166 JMP NSPC NO, IT'S NOT.
169 SP1 JST T30 LINE FEED
170 IRS CNT DEC COUNTER, SKIP IF READY
178 STA LINE LINE COUNTER
187 XR DEC 0 THE CALLER'S X REGISTER
195 LINE DEC -40 NEG LINES LEFT ON PAGE
197 PGSP DAC PGS POINTER TO PGS
200 ************************************************************
204 STX XR SAVE CALLER'S INDEX REGISTER
221 LDX XR RESTORE CALLER'S INDEX REGISTER
266 * PRINT LINE NUMBER TO BUFFER
267 LNNR DAC ** INCREMENT LINE NUMBER, PUT TO BUFFER
268 JST LNR INCREMENT DIGIT
269 LN1 DEC 0 LEAST SIGNIFICAND DIGIT
270 JMP RDY NO CARRY, COUNTING READY
271 JST LNR INCREMENT DIGIT
272 LN2 DEC 0 SECOND DIGIT
273 JMP RDY NO CARRY, COUNTING READY
274 JST LNR INCREMENT DIGIT
275 LN3 DEC 0 THIRT DIGIT
277 RDY NOP OVERFLOW, BUT WHAT SHOULD WE DO?
280 LDA LN3 LEFTMOST VALUE (100)
287 LDA LN1 RIGHTMOST DIGIT (1)
288 ADD =48 ZERO CHARACTER
290 LDA LN2 MIDDLE VALUE (10)
293 STA PGS+4 STORE INTO POSITION
296 LDA HBP HEADER BUFFER ADDRESS
299 ADD ='40000 SET INDEX BIT
301 LDA PGSP PAGE NUMBER BUFFER ADDRESS
302 ADD =5 ADD PAGE NUMBERING LENGTH
303 ADD ='40000 SET INDEX BIT
314 MDG DAC ** MAKE DIGIT FROM A
317 LDA =32 IS ZERO->SPACE
319 NZ ADD =48 THE ZERO CHARACTER
323 LNR DAC ** DIGIT SERVICE
324 IRS* LNR INCREMENT DIGIT
325 LDA* LNR LOAD NEW VALUE OF DIGIT
326 SUB =10 TEST IF OVERFLOW
328 JMP NOFL NO, TAKE FIRST RETURN
329 STA* LNR YES, CLEAR DIGIT (A WAS ZERO)
330 IRS LNR TALLY RETURN ADDRESS
331 NOFL IRS LNR TALLY RETURN ADDRESS
334 FIN WRITE OUT LITERALS