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 ********************************************************************************
96 LPP DEC 60 DATA LINES PER PAGE (WITHOUT HEADING ETC.)
97 LNW DEC 60 LINE LENGTH IN 2-CHAR WORDS
101 LDA* O$LA BUFFER ADDRESS
103 LDA LINE LEFT LINE COUNTER
104 SZE LINES LEFT ON PAGE?
105 JMP PGOK YES, JUMP AWAY
106 JST FF CALL FORM FEED ROUTINE
107 PGOK LDA LPP LINES PER PAGE
109 CAS LINES ARE WE ON THE FIRST LINE?
110 JMP *+2 NO, WE ARE NOT.
111 JST NP MAKE HEADER, SPACING ETC.
113 IRS LINE BUMP COUNTER
114 NOP WE DON'T CONTROL THAT HERE ANYMORE
115 JST T1 PRINT THE LINE
116 LBUF DAC ** ADDRESS OF LINE BUFFER
117 JST T20 CARRIAGE RETURN
119 IRS O$LA MAKE RETURN ADDRESS
123 O$LH DAC ** INIT HEADING
125 STA P1 POINTER TO SOURCE
127 STA P2 POINTER TO TARGET
137 LDA LPP LINES PER PAGE
139 STA LINE THE LINE COUNTER
140 IRS O$LH ADJUST ADDRESS
142 STA LN1 CLEAR PAGE NUMBERING
143 STA LN2 CLEAR PAGE NUMBERING
144 STA LN3 CLEAR PAGE NUMBERING
149 SKP1 DEC 0 EMPTY LINES BEFORE HEADING
150 SKP2 DEC 3 EMPTY LINES BETWEEN HEADING AND TEXT
151 NP DAC ** PREPARE NEW PAGE
152 LDA SKP1 SPACES BEFORE HEADING
153 SNZ SPACING REQUIRED?
154 JMP NHDS NO SPACE BEFORE HEADING
160 NHDS JST LNNR PREPARE LINE NUMBERING
162 HBUP DAC HBUF ADDRESS OF HEADER BUFFER
163 JST T20 CARRIAGE RETURN
165 LDA SKP2 NUMBER OF SPACES BEFORE TEXT
166 SNZ SPACING REQUIRED?
167 JMP NSPC NO, IT'S NOT.
170 SP1 JST T30 LINE FEED
171 IRS CNT DEC COUNTER, SKIP IF READY
179 STA LINE LINE COUNTER
188 XR DEC 0 THE CALLER'S X REGISTER
193 LINE DEC -40 NEG LINES LEFT ON PAGE
195 PGSP DAC PGS POINTER TO PGS
198 ************************************************************
202 STX XR SAVE CALLER'S INDEX REGISTER
219 LDX XR RESTORE CALLER'S INDEX REGISTER
264 * PRINT LINE NUMBER TO BUFFER
265 LNNR DAC ** INCREMENT LINE NUMBER, PUT TO BUFFER
266 JST LNR INCREMENT DIGIT
267 LN1 DEC 0 LEAST SIGNIFICAND DIGIT
268 JMP RDY NO CARRY, COUNTING READY
269 JST LNR INCREMENT DIGIT
270 LN2 DEC 0 SECOND DIGIT
271 JMP RDY NO CARRY, COUNTING READY
272 JST LNR INCREMENT DIGIT
273 LN3 DEC 0 THIRT DIGIT
275 RDY NOP OVERFLOW, BUT WHAT SHOULD WE DO?
278 LDA LN3 LEFTMOST VALUE (100)
285 LDA LN1 RIGHTMOST DIGIT (1)
286 ADD =48 ZERO CHARACTER
288 LDA LN2 MIDDLE VALUE (10)
291 STA PGS+4 STORE INTO POSITION
294 LDA HBP HEADER BUFFER ADDRESS
297 ADD ='40000 SET INDEX BIT
299 LDA PGSP PAGE NUMBER BUFFER ADDRESS
300 ADD =5 ADD PAGE NUMBERING LENGTH
301 ADD ='40000 SET INDEX BIT
310 RS DEC 1 RIGHT DISTANCE FOR PAGE NUMBERING (2-CHAR WORDS)
313 MDG DAC ** MAKE DIGIT FROM A
316 LDA =32 IS ZERO->SPACE
318 NZ ADD =48 THE ZERO CHARACTER
322 LNR DAC ** DIGIT SERVICE
323 IRS* LNR INCREMENT DIGIT
324 LDA* LNR LOAD NEW VALUE OF DIGIT
325 SUB =10 TEST IF OVERFLOW
327 JMP NOFL NO, TAKE FIRST RETURN
328 STA* LNR YES, CLEAR DIGIT (A WAS ZERO)
329 IRS LNR TALLY RETURN ADDRESS
330 NOFL IRS LNR TALLY RETURN ADDRESS
337 FIN WRITE OUT LITERALS