* O$PI-O$PA-O$PS FEB 4 2006 - VERSION 1 * * PUNCH ASCII RECORD FROM HIGH SPEED PAPERTAPE PUNCH * * HONEYWELL X16 16 BIT COMPUTER SOFTWARE * * PROGRAM LENGTH: 114 WORDS * * THIS SOURCE IS RECREATED FROM THE EXISTING OBJECT FILE (WHICH ORIGINATES * FROM HONEYWELL) * * THE SOURCE IS RECREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) * * O$PI INITIALIZES O$PA; IF NOT INITIALIZED, O$PA PUNCHES WITH DEFAULT SETTING * CALLING SEQUENCE: * CALL O$PI * DEC NUMBER OF WORDS IN DATABUFFER * DEC NUMBER OF TABS IN FOLLOWING TABLE (IF ANY) * DEC TAB1 * DEC TAB2 * ... .... * (RETURN LOCATION) * * DEFAULTS FOR O$PA: * BUFFER IS 40 WORDS LONG (CARD IMAGE) * 3 TABS AT: 6, 12 AND 30 (DAP16 FORMAT) * * O$PS: PUNCH EOM (END OF MESSAGE) RECORD TO CLOSE A PAPERTAPE * CALLING SEQUENCE: * CALL O$PS * (NORMAL RETURN) * SUBR O$PA SUBR O$PI SUBR O$PS REL O$PI DAC *-* LDA* O$PI LGL 1 *2 = NBR OF CHARS STA BL IRS O$PI LDA* O$PI NBR OF TABS STA NTAB LDA O$PI AOA STA TTAB PTR TO TAB TABLE ADD NTAB STA O$PI RETURN ADDRESS JMP* O$PI * O$PA DAC *-* STX SVX LDA* O$PA PTR TO BUFFER IRS O$PA LGL 1 *2 STA CPTR = CHAR POINTER LDA RUB OUT RECORD START JST OUT LDA LF JST OUT CRA STA AL ACTUAL LENGTH = 0 STA TRS SPACE COUNTER = 0 NEXT LDA AL IRS AL ACTUAL RECORD LENGTH ADD CPTR + CHAR POINTER LGR 1 \2 => SET C STA WPTR = WORD POINTER LDA* WPTR LOAD WORD TO OUTPUT SSC WHERE TO START? ICA C=0 EVEN, PRINT LEFT FIRST CAL C=1 ODD, PRINT RIGTH FIRST CAS SPAC SPACE ? SKP NO JMP SKTP YES; MORE SPACES? LRL '010 A=0 B-LEFT IS CHAR TO OUTPUT SUB TRS PENDING COUNTED SPACES STA TRS TRS = - TRS SNZ JMP P1 ZERO PENDING SPACES LDA SPAC PRINT COUNTED PENDING SPACES JST OUT IRS TRS JMP *-2 P1 LLL '010 GET CHAR TO OUTPUT FROM B JST OUT AND OUTPUT P2 LDA BL BUFFER COMPLETE ? CAS AL JMP NEXT BL>ACTUAL => OUTPUT NEXT CHAR LDA CR BL=ACTUAL => BUFFER COMPLETE JST OUT OUTPUT CLOSING RECORD CHARS LDA XOFF JST OUT LDA RUB JST OUT LDX SVX RESTORE X JMP* O$PA SKTP IRS TRS CRA ON TAB POSITION ? SUB NTAB NUMBER OF TABS SNZ JMP P2 NO TABS AT ALL STA 0 X = - NBR OF TABS LDA TTAB A = PTR TO TAB TABLE STA WPTR SAVE LDA AL IS ACTUAL LENGTH + 1 AOA ON THIS TAB POSITION ? P3 CAS* WPTR SKP AL+1 > TAB POS JMP P4 AL+1 = TAB POS => OUTPUT TAB IRS WPTR CHECK NEXT TAB POS IRS 0 JMP P3 JMP P2 NO TABS ANYMORE P4 LDA TAB OUTPUT A TAB JST OUT CRA RESET SPACE COUNTER JMP NEXT-1 THEN NEXT CHAR OUT DAC *-* OUTPUT CHAR SKS '0102 ENABLED ? OCP '2 ENABLE OTA '2 JMP *-1 JMP* OUT * O$PS DAC *-* LDA EOM JST OUT LDA XOFF JST OUT LDA RUB JST OUT JMP* O$PS * * WORKSPACE * SVX OCT 0 SAVE X CPTR OCT 0 ACTUAL BUFFER PTR *2 (CHARPTR) AL OCT 0 ACTUAL BUFFER LENGTH TRS OCT 0 NBR OF TRAILING SPACES COUNTED WPTR OCT 0 ACTUAL WORD PTR IN BUFFER BL OCT 120 BUFFER LENGTH (CHARS) NTAB OCT 4 NBR OF TABS TTAB DAC *+1 PTR TO TAB TABLE OCT 6 TAB TABLE OCT 14 OCT 36 OCT 111 EOM OCT 203 TAB OCT 334 XOFF OCT 223 CR OCT 215 SPAC OCT 240 LF OCT 212 RUB OCT 377 END