* * MATCH EQU $ * PRIN2 EQU $ LDA LISTF CHECK IF WE LIST FILES GOTTEN ORA A JNZ REPTS IF FLAG SET SKIP PRINT * * PRINT FILE INFO * MVI C,63 INITIALIZE OUTPUT BUFFER TO BLANKS LXI H,OBUFF * BLOOP MVI M,' ' INX H DCR C JNZ BLOOP * LXI D,OBUFF+1 WHERE NAME GOES LXI H,BUFR WHERE NAME IS MVI C,8 CHAR COUNT * NMLOP MOV A,M GET A CHAR ORA A TEST IF IT'S ZERO JZ TYPE IF SO THEN NEXT FIELD STAX D STORE CHAR IN OUTPUT BUFFER INX H INX D DCR C JNZ NMLOP IF 8 CHARS OUT THEN NAME MUST BE DONE * * TYPE * TYPE LXI H,OBUFF+14 WHERE TYPE GOES LDA BUFR+8 WHERE TYPE IS ORA A CHECK IF IMAGE JP IMG IF HIGH BIT CLEAR THEN IMAGE CPI -1 CHECK IF DEVICE FILE JZ DEVF ANI 7FH CLEAR HIGH BIT * TYPIN CPI 5FH CHECK FOR AN UNDER LINE (SPACES BACKWARD) JZ NOPR CPI 20H CHECK FOR A NONPRINTING CHAR (ASCII < BLANK) JC NOPR MOV M,A JMP BLCKS * IMG MVI M,'I' PRINT 'I' 1ST INX H JMP TYPIN * DEVF MVI M,'D' DEVICE FILE JMP BLCKS * NOPR MOV B,A CONVERT CHAR TO 2 ASCII DIGITS CALL HEX2A MOV M,D STORE 2 DIGITS IN OUTPUT BUFFER INX H MOV M,E * * BLOCK SIZE * BLCKS LHLD BUFR+9 BLOCK SIZE INTO HL MOV B,H CONVERT HIGH BYTE TO ASCII IN DE CALL HEX2A LXI B,OBUFF+22 WHERE SIZE GOES MOV A,D PUT 1ST DIGIT IN STAX B INX B MOV A,E 2ND DIGIT STAX B INX B PUSH B SAVE ADDR FOR NEXT 2 DIGITS MOV B,L CONVERT LOW BYTE TO ASCII CALL HEX2A POP B GET BACK ADDR TO PUT CHARS AT MOV A,D PLACE 3RD DIGIT STAX B INX B MOV A,E PLACE 4TH DIGIT STAX B * * ATTRIBUTES * MVI C,8 ATTRIBUTE COUNT FOR ROTATE LXI H,OBUFF+37 WHERE ATTRIBUTES GO LXI D,ATTRS ATTRIBUTE STRING LDA BUFR+11 GET ATTRIBUTES MOV B,A PLACE THEM IN B * ALOOP MOV A,B GET ATTRIBS RRC . CHECK IF CURRENT ATTRIBUTE IS SET MOV B,A REPLACE ROTATED ATTRIBUTES JNC NEXT IF BIT 0 THEN NO ATTRIBUTE LDAX D GET ATTRIBUTE CHAR MOV M,A PUT IN OUTPUT BUFFER INX H * NEXT INX D GO TO NEXT ATTRIBUTE CHAR DCR C ATTRIBUTE COUNT JNZ ALOOP LOOP UNTIL ALL 8 TESTED * * OUTPUT DATE SAVED * LDA ITNUM NO SAVE DATE IF NOT FROM LIBRARY FILE CPI 0FFH JZ LINEO LDA BUFR+14 GET MONTH MOV B,A CONVERT TO ASCII CALL HEX2A LXI H,OBUFF+49 WHERE DATE GOES MOV M,D 2 MONTH DIGITS OUT INX H MOV M,E INX H MVI M,'/' INX H PUSH H SAVE CURRENT OUTPUT ADDR LDA BUFR+15 GET DAY MOV B,A ASCII-IZE CALL HEX2A POP H GET OBUFF ADDR BACK MOV M,D 2 DAY DIGITS OUT INX H MOV M,E INX H MVI M,'/' INX H PUSH H SAVE OBUFF ADDR LDA BUFR+16 GET YEAR MOV B,A ASCII-IZE CALL HEX2A POP H GET ADDR BACK MOV M,D 2 YEAR DIGITS OUT INX H MOV M,E * * OUTPUT LINE NOW * LINEO LDA OFNUM CONSOLE OUTPUT NUMBER LXI B,63 # OF CHARS IN OUTPUT BUFFER TO WRITE LXI D,OBUFF POINTER TO BUFFER CALL SYS WRITE DIRECTORY LINE DB WBLOP CALL PTDER CALL CRLF * * CHECK FOR REPORT ONLY * REPTS LDA REPF ORA A JZ ENDPR * * POSSIBLY CREATE AND OPEN OUTPUT FILE * * SET UP NAME MVI C,8 FIND END OF NAME IN ENTRY TO ADD UNIT LXI D,BUFR BEGINNING OF NAME LXI H,FNAM1 CONVENIENT PLACE TO PUT NAME * OLOOP LDAX D GET NAME CHAR ORA A TEST IT FOR POSSIBLE END (0) JZ PUTUN MOV M,A STORE NAME CHAR INX H MOVE TO NEXT CHAR INX D DCR C JNZ OLOOP IF C=0 NAME IS DONE * PUTUN MVI M,'/' ADD UNIT AFTER NAME INX H SHLD UNADR SAVE ADDRESS OF UNIT LDA OUTUN GET OUTPUT UNIT # MOV M,A PUT INTO NAME INX H MVI M,0 TERMINATE WITH 0 * * DO FINFO ON POSSIBLE OUTPUT FILE * XRA A CLEAR FILE EXISTED BEFORE FLAG STA EXSTF STA DDOUT LXI D,FNAM1 ADDRESS OF NAME LXI H,OBUFF CONVENIENT PLACE FOR FINFO INFO CALL SYS DB INFOP CALL EXTST ON ERROR CHECK FOR NONEXISTENT FILE * * SEE IF THE OUTPUT FILE IS A DEVICE FILE * LDA OBUFF+11 FILE TYPE CPI -1 DEVICE FILE? JNZ NDEV NO * * MUST CHECK THE ATTRIBUTES ON THE FILE * LDA OBUFF+14 ANI PNAT TYPE PROTECTED DEVICE FILE? JZ CHOTY NO LDA OBUFF+14 AGAIN ANI PATR ATTRIBUTE PROTECTED? JZ CHOAT NO LXI H,DEV1 MVI E,1 CALL SPAC2 CANNOT DO IT RET . FILE NOT GOTTEN * * CHANGE THE FILE ATTRIBUTES * CHOAT MVI H,0 NONE LXI D,FNAM1 CALL SYS DB CHAOP REMOVE THEM CALL PTDER * * CHANGE THE FILE TYPE * CHOTY MVI A,-1 REMEMBER WE'VE MADE A CHANGE, IN CASE OF ERROR STA RTPO MVI H,0 TYPE=0 LXI D,FNAM1 CALL SYS DB CHTOP RESET THE TYPE CALL PTDER MVI A,-1 STA DDOUT OUTPUT FILE WAS A DEVICE FILE * NDEV MVI A,-1 SET FILE EXISTED BEFORE FLAG (FINFO SUCCESFUL) STA EXSTF LDA NOOWF CHECK IF WE CAN OVERWRITE ORA A JNZ ATRTS YES WE CAN LXI H,FEXST ERROR MESSAGE CALL MESG PRINT IT CALL RTYPE RESTORE TYPE AND ATTRIBUTES OF FILES JMP ENDPR SKIP TO END OF COPY * * FEXST DW 1F03H LETTER AND SPACE COUNT ASC "File not gotten: already exists" * EXTST CPI ERNEX CHECK IF FINFO ERROR WAS FILE DON'T EXIST JNZ PTDER IF NOT, A REAL LIVE BOO-BOO POP H GET RID OF RETURN ADDRESS JMP CREE8 CONTINUE NORMALLY * ATRTS LDA OBUFF+0EH GET ATTRIBUTES OF OUTPUT FILE ANI 42H MASK ALL BUT WRITE AND EXTEND PROTECT JZ OPEN IF NOT SET THEN OK LXI H,WEPRT ERROR MESSAGE CALL MESG PRINT IT CALL RTYPE RESTORE TYPE AND ATTRIBUTES OF FILES JMP ENDPR * * WEPRT DW 3A03H LETTER AND SPACE COUNT ASC "Can't write: destination file is EXTEND or WRITE " ASC "protected" * * SET UP CREATE HEADER * CREE8 LHLD BUFR+9 GET BLOCK SIZE SHLD FBSIZ INTO HEADER XRA A START WITH NO ATTRIBUTES STA FATRS HEADER MVI A,-1 SET 'CREATED' FLAG STA CREFLG * * OPEN OUTPUT FILE * OPEN MVI A,PSCO+40H CREATE IF NONE EXIST AND OPEN LXI H,FNAM1 HL POINTS TO NAME LXI D,FBUF SCRATCH BUFFER WITH CREATE HEADER CALL PSCAN OPEN OUTPUT FILE CC PSCER IF ERROR MOV D,A CHECK IF FILE # IS SMALL ENOUGH ORA A CNZ FBIG MOV A,E CPI 0FFH MAKE SURE A FILE WAS OPENED CZ ILFNM STA OTNUM SAVE FILE # * * SPLIT ON WHERE FILE IS COMING FROM * LDA ITNUM GET POSSIBLE INPUT FILE NUMBER CPI 0FFH JNZ GET1F IF NOT FF THEN ALL FILES FROM 1 LIB FILE * * GET NON-LIBRARY FILE * LHLD UNADR GET UNIT ADDR TO CHANGE NAME FOR INPUT OPEN LDA SRUNT SEARCH UNIT # MOV M,A MOVE INTO NAME LDA BUFR+8 FILE TYPE * * CHECK FOR DEVICE FILE * CPI -1 DEVICE FILE? JNZ NOTDV NO, PROCESS NORMALLY * * NOW CHECK FOR FILE'S ATTRIBUTES * LDA BUFR+11 ATTRIBUTES ANI PNAT TYPE/NAME JZ NOCAT DON'T HAVE TO CHANGE ATTRIBUTES LDA BUFR+11 AGAIN ANI PATR ATTRIBUTE PROTECTED ALSO? JZ NOATR NO * * FILE IS BOTH TYPE/NAME AND ATTRIBUTE PROTECTED * CANNOT GET THIS ONE. * LXI H,DEVMS MVI E,1 CALL SPAC2 OUTPUT THE MESSAGE LDA OTNUM OUTPUT FILE NUMBER CALL FCLOS CLOSE IT LDA DDOUT WAS IT A DEVICE FILE? ORA A CHECK RZ . NO JMP OALEX RESET OUTPUT FILE TYPE AND ATTR * * MUST CHANGE THE FILE ATTRIBUTES * NOATR LXI D,FNAM1 MVI H,0 NO ATTRIBUTES CALL SYS DB CHAOP CHANGE THEM CALL PTDER * * MUST CHANGE THE FILE TYPE * NOCAT MVI A,-1 REMEMBER WE'VE MADE A CHANGE, IN CASE OF ERROR STA RTPI LXI D,FNAM1 MVI H,0 NO TYPE CALL SYS DB CHTOP CALL PTDER * * AND FINNALLY THE FILE MUST BE REOPENED * NOTDV LXI D,FNAM1 POINT TO IT AGAIN CALL FOPEN OPEN IT STA IFNUM STORE THE FILE NUMBER * * COPY INPUT FILE TO OUTPUT * LXI H,0FFFH GET BLOCK SIZE (AMOUNT OF DATA READ IN) * WLOOP LXI D,CBUFF WHERE DATA GETS READ INTO MOV B,H BLOCK SIZE INTO BC FOR TRANSFER COUNT MOV C,L LDA IFNUM INPUT FILE # CALL SYS READ DB RBLOP CALL EOFTS EXIT FROM COPY LOOP ON EOF * LXI D,CBUFF ADDRESS TO WRITE FROM MOV B,H PUT BLOCK SIZE INTO BC MOV C,L LDA OTNUM OUPUT FILE # CALL SYS WRITE DB WBLOP CALL PTDER JMP WLOOP LOOP UNTIL EOF ON READ * EOFTS CPI EREOF CHECK IF ERROR WAS EOF JNZ PTDER IF NOT THEN ERROR MOV A,L SUBTACT BC FROM BLOCK SIZE TO GET BYTES READ SUB C LOW BYTE MOV C,A MOV A,H SBB B MOV B,A POP D GET RID OF RETURN ADDRESS LXI D,CBUFF ADDRESS TO WRITE FROM LDA OTNUM OUTPUT FILE # CALL SYS WRITE OUT LAST BLOCK DB WBLOP CALL PTDER * LDA IFNUM CLOSE INPUT FILE CALL FCLOS * * IF THE INPUT FILE IS A DEVICE FILE, MUST RESET * ATRIBUTES AND TYPE ON THE FILE. * LDA BUFR+8 TYPE CPI -1 DEVICE FILE? JNZ RANDD NO MVI H,-1 LXI D,FNAM1 POINT TO INPUT FILENAME CALL SYS DB CHTOP SET BACK TO DEVICE FILE CALL PTDER LDA BUFR+11 ATTRIBUTES MOV H,A CALL SYS DB CHAOP CHANGE ATTRIBUTES CALL PTDER XRA A RESET TYPE CHANGE FLAG STA RTPI * * RANDOMIZE FILE IF NECESSARY * RANDD LHLD BUFR+14 GET RANDOM INDEX MOV A,H CHECK FOR 0 ORA L JZ SUCES NOT RANDOM LDA OTNUM GET FILE # TO RANDOMIZE CALL SYS DO IT DB RNDOP CALL PTDER * * JMP SUCES * * * * GET FILE FROM LIB FILE * * * COPY IT * GET1F EQU $ * CPLOP LXI D,BSIZE FIRST READ BLOCK SIZE LXI B,2 2 BYTES LONG LDA ITNUM FILE # CALL SYS DB RBLOP CALL TSEOF * LHLD BSIZE NOW READ DATA BLOCK MOV A,H TAKE OFF POSSIBLE LAST BLOCK BIT ANI 7FH MOV B,A PUT BLOCK SIZE IN BC FOR TRANSFER COUNT MOV C,L PUSH B SAVE COUNT LXI D,CBUFF WHERE DATA GOES LDA ITNUM FILE # CALL SYS DB RBLOP CALL TSEOF * LXI D,CBUFF WRITE DATA TO OUTPUT FILE POP B GET TRANSFER COUNT BACK LDA OTNUM OUTPUT FILE # CALL SYS DB WBLOP CALL PTDER * LDA BSIZE+1 CHECK IF LAST BLOCK WAS WRITTEN ANI 80H JZ CPLOP IF NOT THEN GO READ ANOTHER * * RANDOMIZE OUTPUT FILE IF NECESSARY * LDA BUFR+13 GET FLAG BYTE THAT INDICATES RANDOM RLC . PUT HIGH BIT INTO CARRY FOR TEST JNC SUCES IF NOT TO BE RANDOM... LDA OTNUM GET FILE # FOR RANDOMIZATION CALL SYS DO IT DB RNDOP CALL PTDER * * * SUCES LDA OTNUM EOF AND CLOSE OUTPUT FILE CALL SYS DB EOFOP CALL PTDER CALL FCLOS * XRA A RESET 'CREATED' FLAG STA CREFLG MVI A,-1 INDICATE THAT A FILE WAS GOTTEN STA GETF JMP ENDPR * * ENDPR LDA GETF CHECK IF A FILE WAS GOTTEN ORA A RZ . NOPE * LDA DDOUT OUTPUT FILE WAS A DEVICE FILE ORA A WAS IT? JNZ OALEX YES, RESET THE TYPE AND ATTRIBUTES * LDA EXSTF CHECK IF OUTPUT FILE EXISTED BEFORE ORA A JNZ INCR IF SO THEN LEAVE ATTRIBUTES ALONE LXI D,FNAM1 WHERE FILE NAME IS LHLD UNADR SET UNIT ADDRESS BACK TO OUTPUT UNIT LDA OUTUN MOV M,A LDA BUFR+8 FILE TYPE MOV H,A INTO H CALL SYS DB CHTOP SET THE ACTUAL FILE TYPE CALL PTDER LDA BUFR+11 GET DESIRED ATTRIBUTES MOV H,A INTO H CALL SYS CHANGE THE ATTRIBUTES DB CHAOP CALL PTDER JMP INCR INCREMENT COUNT * * OUTPUT FILE ALREADY EXISTED AND WAS A DEVICE FILE * RESET THE TYPE AND ATTRIBUTES * OALEX LXI D,FNAM1 POINT TO FILENAME LHLD UNADR SET UNIT ADDRESS BACK TO OUTPUT UNIT LDA OUTUN GET THE UNIT MOV M,A SET IT MVI H,-1 DEVICE FILE CALL SYS DB CHTOP CHANGE TYPE CALL PTDER LDA OBUFF+14 ATTRIBUTES MOV H,A CALL SYS DB CHAOP CALL PTDER * INCR LDA GOTTN INCREMENT # OF FILES GOTTEN ADI 1 DO DECIMAL INCREMENT DAA STA GOTTN XRA A RESET TYPE CHANGE FLAG STA RTPO RET * * TSEOF * TSEOF CPI EREOF IF NOT EOF THEN REGULAR PTDOS ERROR JNZ PTDER JMP FBAD EOF MEANS NON-LIBRARY FILE * * HSPAC - SPACE TO NEXT HEADER IN LIB FILE * HSPAC LDA ITNUM GET LIB FILE # LXI D,BSIZE READ IN # OF BYTES OF DATA IN THIS BLOCK LXI B,2 2 BYTES CALL SYS DB RBLOP CALL TSEOF LDA BSIZE GET LOW BYTE MOV C,A INTO C LDA BSIZE+1 GET HIGH BYTE ANI 7FH REMOVE POSSIBLE LAST BLOCK INDICATOR MOV B,A INTO B ORA C CHECK FOR ZERO COUNT JZ LSTCH LXI D,CBUFF USE READ TO SPACE FORWARD (SEQUENTIAL FILES) LDA ITNUM FILE # CALL SYS SPACE TO NEXT HEADER DB RBLOP CALL ENDTS * LSTCH LDA BSIZE+1 CHECK IF THAT WAS LAST BLOCK ANI 80H JZ HSPAC IF NOT THEN DO ANOTHER RET . OTHERWISE, ALL DONE * ENDTS CPI EREOF IF NOT EOF ERROR, TOO BAD JNZ PTDER MOV A,B CHECK IF COMPLETE SPACE WAS DONE ORA C I.E. TRANSFER COUNT IS 0 JNZ FBAD IF NOT, NON-LIB FILE RET . GOOD EOF SO ACT LIKE NOTHING HAPPENED * * MESG * MESG MVI E,1 PRINT ONE STRING ON A LINE CALL SPAC2 CALL CRLF RET * * SPAC2 * SPAC2 INR E FUDGE E FOR 1ST DCR * LOOP DCR E THIS IS THE WORD LOOP RZ . ALL DONE WHEN E IS 0 MOV D,M GET SPACE COUNT INX H CALL TAB PRINT SPACES MOV C,M GET LETTER COUNT INX H * LOOP2 MVI B,0 ZAP HIGH BYTE OF LETTER COUNT XCHG . WORD ADDR INTO DE LDA OFNUM OUTPUT FILE # CALL SYS WRITE WORD DB WBLOP CALL PTDER XCHG . ADDR OF NEXT COUNT/WORD BACK TO HL JMP LOOP * * TAB * TAB MOV A,D CHECK IF COUNT IS 0 ORA A SET FLAGS RZ . IF SO THEN WE ARE DONE MVI B,' ' OUTPUT BLANK CALL WRITB DCR D DECREMENT BLANK COUNT JMP TAB * * * * CRLF * CRLF MVI B,CR 1ST PRINT LINE FEED CALL WRITB MVI B,LF THEN CARRIAGE RETURN CALL WRITB RET * * * * WRITB * WRITB PUSH PSW SAVE ALL REGISTERS PUSH B PUSH D PUSH H LDA OFNUM GET OUTPUT FILE # CALL WB PRINT CHAR IN B CALL GENER POP H RESTORE REGISTERS POP D POP B POP PSW RET * * * * FOPEN * FOPEN LXI H,0 STATIC BUFFERING CALL SYS OPEN FILE DB OPEOP CALL PTDER RET * * * FCLOS * FCLOS CALL SYS CLOSE FILE DB CLOOP CALL PTDER RET * * * HEX2A * HEX2A MVI A,0F0H HIGH DIGIT MASK ANA B RRC . PUT DIGIT IN LOW BYTE RRC RRC RRC CALL ASCII MOV D,A MVI A,0FH LOW DIGIT MASK ANA B CALL ASCII MOV E,A DIGITS NOW IN DE RET * ASCII CPI 0AH SEE IF DIGIT IS TO LETTER OR NUMBER JNC LTTR ORI 30H MAKE NUMBER DIGIT ASCII RET * LTTR SBI 9 DIGIT INTO ASCII LETTER ORI 40H RET * * * INTST * INTST CALL CONTST CHECK IF KEY PRESSED RZ . IF NOT CONTINUE CALL CONIN GET CHAR ORA A CHECK FOR QUIT CHAR (00H) JZ EOF IF SO FINISH UP RET . OTHERWISE CONTINUE * * Map lower case letters into upper case. Letter comes in * A and leaves in A. Only A and flags are affected. * MAP CPI 'a' 'a'<=A ? RM . Nope. No map necessary. CPI 'z'+1 A<='z' ? RP . Nope. No map necessary. SUI 32 'a'=>'A', etc. RET * DEV1 DB 3,DEVM2-$-1 ASC "Can't write: destination is a TYPE" ASC "/ATTRIBUTE protected file" DB 0DH DEVM2 EQU $ * DEVMS DB 3,DEVM1-$-1 ASC "File not gotten: it is a TYPE/" ASC "ATTRIBUTE protected device file" DB 0DH DEVM1 EQU $ * * * HEADER * HMSG DB 22 DB 19 *ASC "+-+ DIRECTORY +-+" ASC "+-+ NEW FILES +-+" * HMSG1 DW 0403H ASC "NAME" DW 0406H ASC "TYPE" DW 0A02H ASC "BLOCK SIZE" DW 0A06H ASC "ATTRIBUTES" DW 0A03H ASC "DATE SAVED" * ATTRS ASC 'KWRIANEU' ATTRIBUTE CHARS FOR OUTPUT * * DIRECTRY FILE NAME * DMSG ASC "DIRECTRY" DIRECTRY FILE NAME SLASH DB '/' SRUNT DB 0 REMEMBER TO GET DEFAULT UNIT HERE DB 0 END OF NAME * * FNAM1 DW 0 DW 0 DW 0 DW 0 DW 0 * * NAME SEARCH PARAMETERS * NALNG DB 0 GTSYM DB 0 LTSYM DB 0 ENLNG DB 0 LPTR DS 2 * * PARAMETER STORAGE * DELMT DB 0 LATEST DELIMITER TYPPR DB 0 TYPE PROCESSED FLAG OPFLG DB 0 OPTIONS PROCESSED FLAG ITSET DB 0 OUTPUT SET FLAG IPRTF DB 0 INFO PROTECTED FLAG HEADF DB 0 SUPRESS HEADER FLAG LISTF DB 0 LIST SAVED FILES FLAG NOOWF DB 1 DON'T OVERWRITE EXISTING FILES(INIT OVERWRITE) REPF DB 1 REPORT ONLY, DON'T WRITE AT ALL(INIT TO WRITE) FTYPE DB 0 TYPE SEARCH FLAG IMAGF DB 0 TYPE IMAGE FLAG EXSTF DB 0 OUTPUT FILE EXISTED BEFORE FLAG DDOUT DB 0 OUTPUT FILE EXISTED AND WAS A DEVICE FILE GETF DB 0 INDICATES PRINT JUST GOT A FILE RTPO DB 0 OUTFILE'S BEEN RETYPED FLAG RTPI DB 0 INFILE'S BEEN RETYPED FLAG CREFLG DB 0 OUTFILE WAS JUST CREATED FLAG GOTTN DB 0 # OF FILES GOTTEN SRCNT DB 0 FILES SEARCHED COUNT OUCNT DB 0 FILES OUTPUT COUNT * NBRNA DB 0 NUMBER OF NAMES FOR SEARCH NBPTR DW NABUF NAME BUFFER POINTER DRPTR DW DABUF DIRECTORY BUFFER POINTER ENPNT DW DABUF CURRENT ENTRY POINTER * OFNUM DS 1 CONSOLE OUTPUT FILE NUMBER ITNUM DB 0FFH GET INPUT FILE NUMBER (FF MEANS NOT SET) OTNUM DS 1 CURRENT OUTPUT FILE NUMBER IFNUM DS 1 CURRENT INPUT FILE # (NON-LIB GET) ECOUNT DS 1 OUTUN DS 1 UNIT FILES ARE WRITTEN TO UNADR DS 2 TEMP ADDR OF UNIT IN OUTPUT NAME FILEN DB 8 FILENUM * * THE BUFFERS COME NEXT * NABUF DS 13*11 UP TO TEN NAMES FOR EACH ENTRY BUFR DS DRESZ+1 FOR EACH DIRECTORY ENTRY DABUF DS 256*16 WE READ THE DIRECTORY HERE DIEND EQU $ THE END OF THE BUFFER OBUFF DS 63 OUTPUT BUFFER BSIZE DS 2 BLOCK SIZE FOR READ CBUFF DS 1000H 4K BUFFER FOR FILE COPYING(MAX BLK SIZ) HBUFF DS 17 * * HEADER FOR POSSIBLE OUTPUT FILE CREATE * FLTYP DB '.'+80H INITIAL TYPE FBSIZ DS 2 BLOCK SIZE FATRS DS 1 ATTRIBUTES FBUF DS 20 BUFFER FOR PSCAN USE * * EQUATES * NMLEN EQU 8 NAME LENGTH FLEN1 EQU 4 FLEN2 EQU 6 BLKNM EQU BUFR+18 BLKSZ EQU BUFR+9 BLOCK SIZE POINTER FID EQU BUFR+12 * * END