4 * PROGRAM TITLE: O$LA (O$LA,O$LE,O$LH,O$LC,O$LF)
5 * LINE PRINTER ROUTINES
9 * 1.1 (2006-04-03) - GET IT SMALLER
18 * THESE ARE THE LIBRARY ROUTINES FOR HACHTI'S LINE PRINTER INTERFACE
23 * DEPENDS ON HACHTI'S HARDWARE AND FORTRAN IV COMPILER TAPE
35 * DAC (BUFFER ADDRESS)
38 * THIS PRINTS ONE LINE OF LISING TEXT
39 * (60 2-CHAR WORDS MAX) TO THE LINE PRINTER.
43 * DAC (HEADING ADDRESS)
46 * SETUP THE LISTING HEADER
47 * RESETS THE PAGE COUNTER AND SPACES TO THE BEGINNING OF
52 * DAC (BUFFER ADDRESS)
55 * PRINT TEXT FROM BUFFER. NO CR OR LF IS OUTPUT.
60 * PRODUCE A CARRIAGE RETURN ON THE LINE PRINTER.
66 * SEND A LINE FEED COMMAND TO THE PRINTER.
73 * SPACES TO THE BEGINNING OF THE NEXT PAGE BY SENDING
74 * A FF CHARACTER TO THE PRINTER.
76 ********************************************************************************
78 SUBR O$LA TYPE A COMPLETE LINE WITH CR/LF, HEADING ETC.
79 SUBR O$LH INITIALISE HEADING
80 SUBR O$LP,T1 TYPE A LINE, NO CR
81 SUBR O$LC,T20 RETURN THE CARRIAGE
82 SUBR O$LF,T30 ADVANCE TO NEXT LINE
83 SUBR O$LE,FF EJECT PAGE
85 SUBR O$LSK1,SKP1 EMPTY LINES BETWEEN TOP OF PAGE AND HEADING
86 SUBR O$LSK2,SKP2 EMPTY LINES BETWEEN HEADING AND MAIN TEXT
87 SUBR O$LLPP,LPP PURE TEXT LINES PER PAGE
88 SUBR O$LRS,RS DISTANCE FROM PAGE NUMBERING TO RIGHT MARGIN
90 ********************************************************************************
95 LPP DEC 60 DATA LINES PER PAGE (WITHOUT HEADING ETC.)
96 LNW DEC 60 LINE LENGTH IN 2-CHAR WORDS
100 LDA* O$LA BUFFER ADDRESS
102 LDA LINE LEFT LINE COUNTER
103 SZE LINES LEFT ON PAGE?
104 JMP PGOK YES, JUMP AWAY
105 JST FF CALL FORM FEED ROUTINE
106 PGOK LDA LPP LINES PER PAGE
108 CAS LINES ARE WE ON THE FIRST LINE?
109 JMP *+2 NO, WE ARE NOT.
110 JST NP MAKE HEADER, SPACING ETC.
112 IRS LINE BUMP COUNTER
113 NOP WE DON'T CONTROL THAT HERE ANYMORE
114 JST T1 PRINT THE LINE
115 LBUF DAC ** ADDRESS OF LINE BUFFER
116 JST T20 CARRIAGE RETURN
118 IRS O$LA MAKE RETURN ADDRESS
122 O$LH DAC ** INIT HEADING
124 STA P1 POINTER TO SOURCE
126 STA P2 POINTER TO TARGET
136 LDA LPP LINES PER PAGE
138 STA LINE THE LINE COUNTER
139 IRS O$LH ADJUST ADDRESS
141 STA LN1 CLEAR PAGE NUMBERING
142 STA LN2 CLEAR PAGE NUMBERING
143 STA LN3 CLEAR PAGE NUMBERING
148 SKP1 DEC 1 EMPTY LINES BEFORE HEADING
149 SKP2 DEC 3 EMPTY LINES BETWEEN HEADING AND TEXT
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
192 LINE DEC -40 NEG LINES LEFT ON PAGE
194 PGSP DAC PGS POINTER TO PGS
197 ************************************************************
201 STX XR SAVE CALLER'S INDEX REGISTER
218 LDX XR RESTORE CALLER'S INDEX REGISTER
263 * PRINT LINE NUMBER TO BUFFER
264 LNNR DAC ** INCREMENT LINE NUMBER, PUT TO BUFFER
265 JST LNR INCREMENT DIGIT
266 LN1 DEC 0 LEAST SIGNIFICAND DIGIT
267 JMP RDY NO CARRY, COUNTING READY
268 JST LNR INCREMENT DIGIT
269 LN2 DEC 0 SECOND DIGIT
270 JMP RDY NO CARRY, COUNTING READY
271 JST LNR INCREMENT DIGIT
272 LN3 DEC 0 THIRT DIGIT
274 RDY NOP OVERFLOW, BUT WHAT SHOULD WE DO?
277 LDA LN3 LEFTMOST VALUE (100)
284 LDA LN1 RIGHTMOST DIGIT (1)
285 ADD =48 ZERO CHARACTER
287 LDA LN2 MIDDLE VALUE (10)
290 STA PGS+4 STORE INTO POSITION
293 LDA HBP HEADER BUFFER ADDRESS
296 ADD ='40000 SET INDEX BIT
298 LDA PGSP PAGE NUMBER BUFFER ADDRESS
299 ADD =5 ADD PAGE NUMBERING LENGTH
300 ADD ='40000 SET INDEX BIT
309 RS DEC 1 RIGHT DISTANCE FOR PAGE NUMBERING (2-CHAR WORDS)
312 MDG DAC ** MAKE DIGIT FROM A
315 LDA =32 IS ZERO->SPACE
317 NZ ADD =48 THE ZERO CHARACTER
321 LNR DAC ** DIGIT SERVICE
322 IRS* LNR INCREMENT DIGIT
323 LDA* LNR LOAD NEW VALUE OF DIGIT
324 SUB =10 TEST IF OVERFLOW
326 JMP NOFL NO, TAKE FIRST RETURN
327 STA* LNR YES, CLEAR DIGIT (A WAS ZERO)
328 IRS LNR TALLY RETURN ADDRESS
329 NOFL IRS LNR TALLY RETURN ADDRESS
336 FIN WRITE OUT LITERALS