INX H CALL LODM GET NEW LINE NUMBER LXI H,MAXL+3 CALL STOM MAKE IT MAXIMUM LINE NUMBER LHLD SAVL GET STARTING ADDRESS XCHG LHLD EOFP END OF FILE POSITION MVI C,1 CALL LMOV PLACE LINE IN FILE SEOF MOV M,1 END OF FILE INDICATOR SHLD EOFP END OF FILE ADDRESS JMP EORNS * GET HERE IF NEW LINE MUST BE INSERTED INTO ALREADY EXISTING * FILE AREA INSR CALL FIN1 FIND LINE IN FILE MVI C,2 JZ EQUL DCR C NEW LN NOT EQUAL TO SOME OLD LN EQUL MOV B,M DCX H MVI M,2 MOVE LINE INDICATOR SHLD INSP INSERT LINE POSITION LDA CCNT DCR C JZ LT NEW LN NOT = OLD LN SUB B COUNT DIFFERENCE JZ ZERO LINE LENGTHS EQUAL JC GT * GET HERE IF NO OF CHARS IN OLD LINE < NO OF CHARS IN NEW LINE * OR NEW LINE NUMBER WAS NOT EQUAL TO SOME OLD LINE NUMBER LT LHLD EOFP END OF FILE ADDRESS MOV D,H MOV E,L CALL ADR MOVE TO ADDRESS SHLD EOFP NEW END OF FILE ADDRESS MVI C,2 CALL RMOV OPEN UP FILE AREA JMP ZERO * GET HERE IF NO OF CHARS IN OLD LINE > NO OF CHARS IN NEW LINE GT CMA INR A COUNT DIFFERENCE MOV D,H MOV E,L CALL ADR XCHG CALL LMOV DELETE EXCESS CHARACTERS IN FILE MVI M,1 E-O-F INDICATOR SHLD EOFP E-O-F ADDRESS * GET HERE TO INSERT CURRENT LINE INTO FILE AREA ZERO LHLD SAVL XCHG LHLD INSP MVI M,ASCR INX H MVI C,1 CHECK VALUE CALL LMOV PLACE LINE IN FILE JMP EORNS * ONLY LINE NUMBER WAS ENTERED - DELETE LINE LINE5 INX H POINT TO LINE NUMBER CALL LODM LXI H,ABUF+3 CALL STOM LXI H,ABUF+10 CALL STOM CALL DELL+3 JMP EORNS * * * THIS ROUTINE IS USED TO FIND A LN IN THE FILE AREA * WHICH IS GREATER THAN OR EQUAL TO THE CURRENT LINE NUMBER * FIND LXI H,ABUF+3 BUFFER ADDRESS SHLD ADDS SAVE ADDRESS FIN1 LHLD BOFP BEGIN FILE ADDRESS FI1 CALL EO1 CHECK FOR END OF FILE XCHG LHLD ADDS FETCH FIND ADDRESS XCHG MVI A,4 CALL ADR LN ADDRESS CALL COM0 COMPARE LINE NUMBERS RC RZ FI2 MOV A,M CALL ADR NEXT LINE ADDRESS JMP FI1 * * * THIS ROUTINE CHECKS IF THE CURRENT ADDRESS * WHEN SEARCHING THROUGH THE FILE AREA IS THE END OF FILE * EOF INX H EO1 MVI A,1 E-O-F INDICATOR CMP M RNZ JMP EORNS * * * THIS ROUTINE IS USED TO ADD A VALUE TO AN ADDRESS * CONTAINED IN REGISTER H,L * ADR ADD L MOV L,A RNC INR H RET * * * THIS ROUTINE WILL MOVE CHARACTER STRINGS FROM ONE LOCATION * OF MEMORY TO ANOTHER * CHARACTERS ARE MOVED FROM LOCATION ADDRESSED BY D,E TO LOCATION * ADDRESSED BY H,L. ADDITIONAL CHARACTERS ARE MOVED BY * INCREMENTING MEMORY UNTIL THE CHARACTER IN REGISTER C IS FETCHED * LMOV LDAX D FETCH CHARACTER INX D INCREMENT FETCH ADDRESS CMP C TERMINATION CHARACTER RZ MOV M,A STORE CHARACTER INX H INCREMENT STORE ADDRESS JMP LMOV * * * THIS ROUTINE IS SMMILAR TO ABOVE EXCEPT THAT THE CHARACTER ADDRESS * IS DECREMENTED AFTER EACH FETCH AND STORE * RMOV LDAX D FETCH CHARACTER DCX D DECREMENT FETCH ADDRESS CMP C TERMINATION CHARACTER RZ MOV M,A STORE CHARACTER DCX H DECREMENT STORE ADDRESS JMP RMOV * * * THIS ROUTINE IS USED TO LOAD FOUR CHARACTERS FROM * MEMORY INTO REGISTERS * LODM MOV B,M FETCH CHARACTER INX H MOV C,M FETCH CHARACTER INX H MOV D,M FETCH CHARACTER INX H MOV E,M FETCH CHARACTER RET * * * THIS ROUTINE STORES FOUR CHARACTERS FROM REGISTERS * INTO MEMORY * STOM MOV M,E STORE CHARACTER DCX H MOV M,D STORE CHARACTER DCX H MOV M,C STORE CHARACTER DCX H MOV M,B STORE CHARACTER RET * * * THIS ROUTINE IS USED TO COMPARE TWO CHARACTER STRINGS * OF LENGTH 4. ON RETURN ZERO FLAG SET MEANS BOTH * STRINGS ARE EQUAL. CARRY FLAG = 0 MEANS STRING ADDRESSED * BY D,E WAS GREATER THAN OR EQUAL TO CHARACTER STRING * ADDRESSED BY H,L * COM0 MVI C,4 STRING LENGTH MVI B,1 EQUAL COUNTER ORA A CLEAR CARRY CO1 LDAX D FETCH CHARACTER SBB M COMPARE CHARACTERS JZ CO2 INR B INCREMENT EQUAL COUNTER CO2 DCX D DCX H DCR C JNZ CO1 DCR B RET * * * THIS ROUTINE WILL TAKE ASCII CHARACTERS AND ADD ANY * NECESSARY ASCII ZEROS SO THE RESULT IS A 4 CHARACTER * ASCII VALUE * NORM CALL LODM LOAD CHARACTERS XRA A FETCH A ZERO CMP B RZ NOR1 CMP E CNZ STOM STORE VALUES RNZ MOV E,D NORMALIZE VALUE MOV D,C MOV C,B MVI B,'0' JMP NOR1 * * THIS ROUTINE IS USED TO MOVE A LINE FROM THE FILE AREA INTO * THE INPUT BUFFER * MOVEL LHLD APNT NEXT LINE ADDRESS MOV A,M CPI 1 END OF FILE RZ XCHG MOV L,A MVI H,0 DAD D NEXT ADDRESS DCX H MOV A,M CPI ASCR JNZ FLERR FILE FORMAT ERROR INX D LXI H,IBUF-5 MVI C,ASCR CALL LMOV MOV M,C XCHG SHLD APNT SAVE ADDRESS ORA A CLEAR Z FLAG RET * * * THIS ROUTINE IS USED TO LIST THE CONTENTS OF THE FILE * AREA STARTING AT THE LINE NUMBER GIVEN IN THE COMMAND * LIST CMA TEXT STA NOLIN LIS3 CALL CRLF LXI H,ABUF CALL LODM XRA A CMP B JNZ LIS2 MVI B,-1 LIS2 LXI H,ABUF+10 CMP M JNZ LISS CALL STOM LISS CALL FIND SHLD APNT LIS1 CALL MOVEL JZ EOR LXI H,IBUF-2 LXI D,ABUF+10 CALL COM0 RC LDA LFMT ORA A FORMAT LINE CNZ FORMT LXI H,IBUF-5 LDA NOLIN LIST ORA A JNZ LIS4 LXI H,IBUF NO LINE NUMBERS LIS4 CALL SCRN OUTPUT LINE CALL CRLF JMP LIS1 * * * THIS ROUTINE IS USED TO DELETE LINES FROM THE FILE AREA * THE REMAINING FILE AREA IS THEN MOVED IN MEMORY SO THAT * THERE IS NO EXCESS SPACE IN MEMORY * DELL CALL VCHK CHECK FOR PARAMETER CALL FIND FIND LINE IN FILE AREA SHLD DELP SAVE DELETE POSITION LXI H,ABUF+10 MOV A,M CHECK FOR 2ND PARAMETER ORA A SET FLAGS JNZ DEL1 LXI H,ABUF+3 USE FIRST PARAMETER DEL1 SHLD ADDS SAVE FIND ADDRESS XCHG LXI H,MAXL+3 CALL COM0 COMPARE LINE NUMBERS LHLD DELP LOAD DELETE POSITION JC NOVR * GET HERE IF DELETION DELETION INVOLVES END OF FILE DELF SHLD EOFP CHANGE EOF POSITION MVI M,1 SET E-O-F INDICATOR MOV B,M XCHG LHLD BOFP GET BEGIN FILE ADDRESS XCHG DCX H DECREMENT FILE ADDRESS DEL2 MOV A,L CHECK FOR BOF SUB E MOV A,H SBB D MVI A,ASCR LOOK FOR CR JC DEL4 DECREMENTED PAST BOF DCX H CMP M FIND NEW MAX LN JNZ DEL2 DCX H MOV A,L SUB E MOV A,H SBB D JC DEL4 MVI A,ASCR NEED A CR CMP M END OF PREVIOUS LINE INX H INX H JZ DEL3 INX H DEL3 CALL LODM LOAD NEW MAX LN LXI H,MAXL+3 SET ADDRESS CALL STOM STORE NEW MAX LN RET DEL4 XCHG DCR B JNZ DEL3-1 STA MAXL MAKE MAX LN A SMALL NUMBER RET * GET HERE IF DELETION IS IN MIDDLE OF FILE AREA NOVR CALL FI1 FIND END OF DELETE AREA CZ FI2 NEXT LINE IF THIS LN IS EQUAL NOV1 XCHG LHLD DELP CHAR MOVE TO POSITION MVI C,1 MOVE TERMINATOR CALL LMOV COMPACT FILE AREA SHLD EOFP SET EOF POSITION MVI M,1 SET EOF INDICATOR RET * * THIS ROUTINE SETS THE STARTING ADDRESS OF THE SYMBOL TABLE * SYMBL CALL VCHK LHLD BBUF SHLD SYMADD JMP EORMS