Listing of file='MACROS.MAC;01' on disk='vmedia/taylor_5-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; MACROS - MACRO OPERATIONS (DEFINE, EXPAND, GET, PUT) ; TITLE MACROS ; EXTRN CO,OSTR,SAVE EXTRN ABORT EXTRN CI EXTRN DISCTL EXTRN READ EXTRN SEND EXTRN SETFIL ; FCS ROUTINES EXTRN EMESS,PFSPC,RESET,OPEN EXTRN CLSEQO,RWSEQI,INSEQO EXTRN GTBYT,PTBYT ; OFFSETS IN FILE PARAMETER BLOCK FOPT EQU 0 FATR EQU 1 FNAM EQU 2 FTYP EQU 8 FVER EQU 11 FSBK EQU 12 FSIZ EQU 14 FLBC EQU 16 FLAD EQU 17 FSAD EQU 19 FSPR EQU 21 FDBK EQU 22 FDEN EQU 23 FAUX EQU 24 FHAN EQU 26 FFCN EQU 28 FDRV EQU 29 FBLK EQU 30 FBUF EQU 32 FXBC EQU 34 FPTR EQU 36 ; SPECIAL CONTROL CHARACTERS CR EQU 13 LF EQU 10 FF EQU 12 TAB EQU 9 ESC EQU 27 ; PARAMETERS MACLEN EQU 64 ;MAXIMUM LENGTH OF A MACRO NUMMAC EQU 10 ;NUMBER OF MACROS AVAILABLE ;............................................................. ; ; CLRMAC - CLEAR THE MACROS TO ZERO ; ENTRY CLRMAC CLRMAC: LXI H,MACRO0 XRA A MVI C,NUMMAC CLRM10: MVI B,MACLEN CLRM20: MOV M,A INX H DCR B JNZ CLRM20 DCR C JNZ CLRM10 RET ;............................................................. ; ; CONTROL-D - DEFINE MACRO ; ENTRY DEFMAC DEFMAC: CALL DISCTL CALL MACNUM PUSH H MVI B,MACLEN XRA A DEF10: MOV M,A INX H DCR B JNZ DEF10 LXI H,MACMSG CALL OSTR LXI H,BUFFER CALL READ POP H LXI D,BUFFER DEF20: LDAX D ORA A JZ DEF30 CPI 0FFH JZ DEF30 MOV M,A INX D INX H JMP DEF20 DEF30: RET MACRO0: DS MACLEN MACRO1: DS MACLEN MACRO2: DS MACLEN MACRO3: DS MACLEN MACRO4: DS MACLEN MACRO5: DS MACLEN MACRO6: DS MACLEN MACRO7: DS MACLEN MACRO8: DS MACLEN MACRO9: DS MACLEN MACNUM: CALL CI CPI '0' JC MACNUM CPI '9'+1 JNC MACNUM SUI '0'-1 MACN10: LXI B,MACLEN LXI H,MACRO0-MACLEN MACN20: DAD B DCR A JNZ MACN20 RET ;............................................................. ; ; CONTROL-X - EXPAND MACRO ; ; ALTERNATE ENTRY POINT IS USED TO SIMPLY PRINT A ; MACRO, I.E. WITHOUT SENDING IT. THE ACCUM SHOULD ; CONTAIN THE NUMBER OF THE MACRO IN THIS CASE. ; ENTRY EXPMAC ENTRY PRTMAC EXPMAC: CALL DISCTL CALL MACNUM XRA A STA PRT JMP EXP5 PRTMAC: ADI 1 STA PRT CALL MACN10 EXP5: PUSH H MVI A,CR CALL CO MVI A,LF CALL CO POP H MVI B,MACLEN EXP10: PUSH B PUSH H LDA ABORT ORA A JZ EXP15 XRA A STA ABORT JMP EXP30 EXP15: MOV A,M ORA A JZ EXP30 PUSH PSW CALL CO LDA PRT ORA A JNZ EXP20 POP PSW CALL SEND JMP EXP25 EXP20: POP PSW EXP25: POP H INX H POP B DCR B JNZ EXP10 EXP30: POP H POP B MVI A,CR CALL CO MVI A,LF CALL CO RET PRT: DB 0 ;............................................................. ; ; CONTROL-G - GET MACROS FROM A FILE ; ENTRY GETMAC GETMAC: CALL DISCTL LXI B,MACTYP LXI D,IOBUF LXI H,FPB XRA A CALL SETFIL LXI H,MACRO0 PUSH H MVI C,NUMMAC GETM10: MVI B,MACLEN GETM20: LXI H,FPB CALL GTBYT JC FILERR POP H MOV M,A INX H PUSH H DCR B JNZ GETM20 DCR C JNZ GETM10 POP H RET FILERR: JZ EOF LXI H,ERRMSG CALL OSTR RET EOF: RET ;.............................................................. ; ; CONTROL-P - PUT MACROS INTO A FILE ; ENTRY PUTMAC PUTMAC: CALL DISCTL LXI B,MACTYP LXI D,IOBUF LXI H,FPB MVI A,1 CALL SETFIL LXI H,MACRO0 PUSH H MVI C,NUMMAC PUTM10: MVI B,MACLEN PUTM20: POP H MOV A,M INX H PUSH H LXI H,FPB CALL PTBYT JC FILERR DCR B JNZ PUTM20 DCR C JNZ PUTM10 CALL CLSEQO JC FILERR POP H RET ;.............................................................. ; ; MESSAGES ; MACMSG: DB 13,10,6,3,'ENTER MACRO (64 CHR MAX):',6,2 DB 13,10,239 ERRMSG: DB 17,'*** HARDWARE ERROR ***',13,10,239 MACTYP: DB 'ABV' ;DEFAULT FILE TYPE FOR MACROS ;.............................................................. ; ; DATA AREAS ; DB 0FFH BUFFER: DS MACLEN ;CONSOLE INPUT BUFFER DB 0FFH IOBUF: DS 1024 ;FILE I/O BUFFER FPB: DS 38 ;FILE PARAMETER BLOCK END