* I$PI-I$PA -- MARCH 15 2006 -- VERSION 1 * * READ ASCII RECORD FROM HIGH SPEED PAPERTAPE READER * * HONEYWELL X16 16 BIT COMPUTER SOFTWARE * * PROGRAM LENGTH: 117 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) * * I$PI INITIALIZES I$PA; IF NOT INITIALIZED, I$PA READS WITH DEFAULT SETTING * CALLING SEQUENCE: * CALL I$PI * DEC NUMBER OF WORDS IN DATABUFFER * DEC NUMBER OF TABS IN FOLLOWING TABLE (IF ANY) * DEC TAB1 * DEC TAB2 * ... .... * (RETURN LOCATION) * * DEFAULTS FOR I$PA: * BUFFER IS 40 WORDS LONG (CARD IMAGE) * 3 TABS AT: 6, 12 AND 30 (DAP16 FORMAT) * SUBR I$PI SUBR I$PA REL I$PI DAC ** LDA* I$PI GET BUFFER LENGTH (WORDS) LGL 1 *2 STA BL INIT BUFFER LENGTH (BYTES) IRS I$PI LDA* I$PI GET NUMBER OF TABS STA NTBS SET NUMBER OF TABS ADD I$PI + POINTER NUMBER OF TABS AOA + 1 = POINTER TO WORD AFTER TAB TABLE STA I$PI = RETURN ADDRESS ADD IFL + INDEX BIT STA TPTR SET INDEXED TAB TABLE POINTER JMP* I$PI RETURN * * I$PA * READ ASCII RECORD FROM HIGH SPEED PAPERTAPE READER * I$PI INITIALIZES I$PA; IF NOT INITIALIZED, I$PA READS WITH DEFAULT SETTING * CALLING SEQUENCE: * CALL I$PA * DAC ADDRESS DATABUFFER * (END OF MESSAGE RETURN) * (NORMAL RETURN) * * DEFAULTS FOR I$PA: * BUFFER IS 40 WORDS LONG (CARD IMAGE) * 3 TABS AT: 6, 12 AND 30 (DAP16 FORMAT) * I$PA DAC ** LDA 0 STA SX SAVE X LDA* I$PA BUFFER ADDRESS ADD IFL + INDEX BIT STA IBPR INDEXED BUFFER POINTER R LDA N1 A=1 STA BLEN ACTUAL BUFFER LENGTH LDA SPAC INIT BUFFER WITH BLANKS JST STOR CHAR TO BUFFER JMP *-2 LDA N1 A=1 R0 STA BLEN ACTUAL BUFFER LENGTH NEXT OCP 1 START READER R1 LDA M4 STA 0 X = -4 INA '1001 READ NEXT BYTE JMP *-1 CAS DEL SKIP THIS RECORD JMP *+2 JMP REND READ TO END OF BUFFER R2 CAS STBL+4,1 SKIP CHAR? JMP *+2 JMP R1 YES, SKIP IRS 0 JMP R2 CHECK NEXT CHAR IN TABLE OCP '101 STOP READER CAS CR JMP *+2 JMP EXIT CAS TAB JMP *+2 JMP RTAB TAB! CAS EOM JMP *+2 JMP EXIT+1 R3 JST STOR PUT CHAR IN BUFFER JMP NEXT NORMAL RETURN JMP NEXT EOR RETRUN RTAB LDA NTBS TAB READ, A=NBR OF DEFINED TABS SNZ JMP R5 ZERO TABS DEFINED TCA STA 0 X = - NBR OF TABS R4 LDA* TPTR LOAD TAB POSITION CAS BLEN < ACTUAL LENGTH? JMP R0 YES, MOVE ACTUAL LENGTH TO TAB POS NOP IRS 0 JMP R4 R5 LDA SPAC REPLACE TAB BY SPACE JMP R3 AND PROCEED STOR DAC ** LRR '10 TO B LDA BLEN ACTUAL BUFFER LENGTH CAS BL RECORD COMPLETE? JMP EOR END OF RECORD NOP SUB N1 -1 LGR 1 /2 STA 0 X = ACTUAL WORD COUNT LDA* IBPR CURRENT WORD SSC IAB LGR '10 LLR '10 INSERT NEW BYTE STA* IBPR IRS BLEN JMP* STOR EOR IRS STOR EOR RETURN JMP* STOR REND INA '1001 READ TO END OF BUFFER OF SKIPPED RECORD JMP *-1 ERA CR SZE JMP REND OCP '101 STOP READER JMP R AND READ NEXT RECORD EXIT IRS I$PA NORMAL RETURN IRS I$PA EOM RETURN LDA SX RESTORE X STA 0 JMP* I$PA * * WORKSPACE * BL OCT 120 DEFAULT (OR INITIALIZED) BUFFER LENGTH NTBS OCT 3 NUMBER OF TABS (DEFAULT OR INITIALIZED) TPTR DAC TTBL+3,1 INDEXED POINTER TO TAB TABLE TTBL OCT 6 TAB TABLE OCT 14 OCT 36 SX OCT 0 SAVED X IBPR OCT 0 INDEXED BUFFER POINTER BLEN OCT 0 ACTUAL READ BUFFER LENGTH (CHARS) STBL OCT 0 TABLE WITH CHARS TO SKIP OCT 212 OCT 223 OCT 377 EOM OCT 203 TAB OCT 334 CR OCT 215 DEL OCT 337 CHAR TO INDICATE THAT RECORD MUST BE SKIPPED M4 OCT 177774 SPAC OCT 240 N1 OCT 1 IFL OCT 40000 END