|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2176 (0x880) Types: TextFile Names: »FILEXT.SRC«
└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80) └─ ⟦this⟧ »FILEXT.SRC«
;ROUTINES SUPPORT RESETTING AN INPUT FILE AND REWRITING AN OUTPUT FILE ; NAME FILEXT ENTRY SCAN,MOVNAM EXT TIN,TOUT,FILNAM,MXOUT1 INCLUDE DEFLT.SRC ;SCAN CHECKS THE OUTPUT FILE LIST FOR THE CONTENTS ;OF HL. Y POINTS TO THE START OF THE LIST ;SCAN SETS THE CARRY AND RETURNS THE ELEMENTS ADDRESS IN BC SCAN: INX Y MOV A,L LXI B,MXOUT1 ;NUMBER OF BYTES OF OUTPUT FILE ADDRS. CONTLK: CMP 0(Y) JRZ FNDLOW ;LOW BYTE MATCH INX Y INX Y ;NEXT OUTPUT FILE ADDRESS DCR B DJNZ CONTLK XRA A ;ELEMENT NOT FOUND RET ;FOUND LOW BYTE ;CHECK HIGH BYTE FNDLOW: MOV A,H INX Y DCR B CMP 0(Y) JRZ FNDIT ;HIGH BYTE MATCH MOV A,L INX Y DJNZ CONTLK XRA A ;ELEMENT NOT FOUND RET ;FOUND ELEMENT IN LIST FNDIT: PUSH Y POP B XRA A STC RET ;MOVNAM MOVES THE FILENAME FROM TI BUFFER ;STACK INTO THE FILE BUFFER AREA ;MOVNAM IS CALLED WITH A ZERO. ;DE CONTAINING THE FIRST RETURN ADDRESS ;HL CONTAINING THE FILE CONTROL BLOCK ;AND THE FILENAME ON THE STACK ;MOVNAM MUST RETURN THESE REGISTERS UNCHANGED ;AND THE FILENAME REMOVED FROM THE STACK ;THE LENGTH OF THE STRING TO BE MOVED IS IN C STAKSP EQU 3 MOVNAM: CALL TIN ;EXHAUST TI BUFFER JRNC MOVNAM PUSH H ;FILE CONTROL BLOCK LXI H,STAKSP;GET DISPLACEMENT DAD S XRA A MOV B,A DAD B ;ADD LENGTH PUSH H ;NEW STACK POINTER ;MOVE FILENAME TO THE TI BUFFER MOV B,C TOTI: MOV C,M CALL TOUT DCX H DJNZ TOTI ;MOVE A CARRIAGE RETURN INTO TI BUFFER MVI C,CR CALL TOUT ;PARSE FILENAME AND MOVE IT INTO BUFFER AREA POP B ;NEW STACK POINTER POP H ;FILE CONTROL BLOCK CALL FILNAM EXAF EMPBUF: CALL TIN CPI CR JRNZ EMPBUF EXAF PUSH B ;NEW SP XTHL ;HL <- NEW SP POP B ;GET FILE CONTROL BLOCK MOV M,D ;HIGH BYTE OF FIRST RETURN ADDRESS DCX H ;DECR. NEW SP MOV A,E ;LOW BYTE OF FIRST RETURN ADDRESS MOV D,B ;FILE CONTROL BLOCK INTO DE MOV E,C POP B ;SECOND RETURN ADDRESS SPHL ;REMOVE FILENAME FROM STACK XCHG ;FILE CONTROL BLOCK POP D ;HIGH BYTE OF FIRST RETURN ADDRESS MOV E,A ;LOW BYTE PUSH B ;SECOND RETURN ADDRESS MVI A,0 ;CLEAR ACC WITHOUT DISTURBING CARRY RET «eof»