.TITLE STRAP .IDENT /DASFLEX/ .ENABLE LC .NLIST BEX ;****************************************************************************** ; ; PROGRAMMA STRAP ; =============== ; ; DIT PROGRAMMA ONTDOET PROGRAMMA'S VAN COMMENTAAR, ZODAT ER WAT ; MINDER GE..... IN HET DESBETREFFENDE PROGRAMMA VOORKOMT. ; ; DE NAAM VAN HET TE "STRAPPEN" PROGRAMMA WORDT GEHAALD UIT DE ; AAN DIT PROGRAMMA AANGEBODEN COMMAND LINE. ; ; HET RESULTAAT VAN DE BEWERKING IS DAT DE OUDE INPUT FILE NOG ; NORMAAL BESTAAT. ER IS ECHTER EEN "GESTRAPTE" VERSIE VAN DE ; DE INPUT FILE ALS OUTPUT FILE GECREEERD. ; ; DE PROGRAMMA'S WORDEN OP DE VOLGENDE MANIER "GESTRAPPED": ; ; - ALLE REGELS DIE MET ; BEGINNEN WORDEN NIET NAAR DE ; OUTPUT FILE GECOPIEERD ; - ALLE REGELS WORDEN VANAF ACHTER DOORLOPEN. ALS ER EEN ; WORDT ; GEVONDEN EN HET TEKEN DAARVOOR IS EEN , WORDT VANAF DIT ; PUNT TOT AAN HET EIND VAN DE REGEL ALLES ALS COMMENTAAR BESCHOUWD ; EN NIET GECOPIEERD NAAR DE OUTPUT FILE. ; ALS VOOR VOORNOEMDE ALLEEN MAAR EN BLANKS VOORKOMEN, ; WORDT DE REGEL IN Z'N GEHEEL NIET GECOPIEERD. ; ; VOOR DE OPBOUW VAN DE COMMAND LINE WORDT VERWEZEN NAAR HET LABEL ; "HELP". ; ;****************************************************************************** ; ; ONTWORPEN EN GEPROGRAMMEERD DOOR: ; ; P. VERGEER + F. LANGEZAAL ; ; DATUM: 17 MAART 1983 ; ;****************************************************************************** ; ; WIJZIGINGEN + DATUM: ; ;****************************************************************************** .MCALL GCMLB$,GCMLD$,GCML$,CSI$,CSI$1,CSI$2,EXIT$S,QIOW$S .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,FSRSZ$,OPEN$R,FINIT$ .MCALL OPEN$W,CLOSE$,GET$,PUT$,DELET$ .PAGE .SBTTL PROGRAMMA MACRO'S ;****************************************************************************** ; ; PROGRAMMA MACRO'S ; ;****************************************************************************** .MACRO PRINT X,Y MOV 'X,PRADR ;ADRES. MOV 'Y,PRBYT ;BYTECOUNT. ; CALL WRITE ;DISPLAY BERICHT. .ENDM PRINT ; WRITE: TST PRBYT ;TEST OF BYTECOUNT AANWEZIG. BEQ WRIRET ;BRANCH ALS NIET. ; QIOW$S #IO.WVB,#5,#1,,,, WRIRET: RETURN ; PRADR: .WORD .-. ;ADRES. PRBYT: .WORD .-. ;BYTECOUNT. .PAGE .SBTTL COMMAND LINE PROCESSING GEDEELTE ;****************************************************************************** ; ; COMMAND LINE PROCESSING GEDEELTE ; ;****************************************************************************** ; ; DEFINIEER GCML OFFSETS ; ;****************************************************************************** GCMLD$ ;****************************************************************************** ; ; FCS DEFINITIES ; ;****************************************************************************** FSRSZ$ 3 FDBIN: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,INLEES,132. FDOP$A 2,DDPIN,,,FA.ENB!FA.DLK FDBOUT: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,INLEES FDOP$A 3,DDPOUT,,,FA.ENB!FA.DLK ; INLEES: .BLKB 132. ;RECORD INLEESGEBIED DDPIN: .BLKW 6 ;DATASET-DESCRIPTOR INFO INPUT FILE DDPOUT: .BLKW 6 ;DATASET-DESCRIPTOR INFO OUTPUT FILE. WILCAR: .WORD .-. EERST: .WORD .-. UNIT: .ASCII / :/ UIC: .BLKB 9. .EVEN .PAGE ;****************************************************************************** ; ; GCML CONTROL BLOCK DEFEFINITIES ; ;****************************************************************************** GCML: GCMLB$ 1,STR,,1 ;****************************************************************************** ; ; CSI CONTROL BLOCK DEFINITIES ; ;****************************************************************************** CSI$ CSIBLK: .BLKB C.SIZE .EVEN .PAGE .SBTTL DISPLAY TEKSTEN ;****************************************************************************** ; ; DISPLAY TEKSTEN. ; ;****************************************************************************** HELTEK: .ASCII /HELP/ HELTEC = .-HELTEK ; HELP: .ASCII <12><12><12><12><15> .ASCII % The STR command creates a "strapped" output file, which is%<12><15> .ASCII % a copy of the specified input file. All comments are removed%<12><15> .ASCII % in the output file.%<12><15><12><15> .ASCII % The general formats of the STR command are:%<12><15><12><15> .ASCII % [dev][uic][outfile]=[dev][uic]infile%<12><15> .ASCII % @indirect%<12><15><12><15> .ASCII % The parameters that STR allows are:%<12><15><12><15> .ASCII % outfile - if filename.typ are null, input%<12><15> .ASCII % parameters are preserved.%<12><15> .ASCII % Wildcards (*) are not allowed.%<12><15> .ASCII % Filename.typ must be null when wildcards%<12><15> .ASCII % (*) on infile%<12><15><12><15> .ASCII % infile - filename.typ must be specified.%<12><15> .ASCII % Wildcards (*) are only allowed for filename.%<12><15><12><15><12><15> HELPCN = .-HELP ; LFCR: .ASCII <12><15> STR: .ASCII <12><15> .ASCII %STR -- % STRC = .-STR ;****************************************************************************** ; ; FOUTEN VAN GET COMMAND LINE. ; ;****************************************************************************** STRCOM: .ASCII <12><15> .ASCII %STR -- Get Command Line - % STRCOC = .-STRCOM ; GEIOR: .ASCII %I/O Error%<12><12><15> GEIORC = .-GEIOR ; GEOPR: .ASCII %Failed to Open @ File%<12><12><15> GEOPRC = .-GEOPR ; GEBIF: .ASCII %Syntax Error%<12><12><15> GEBIFC = .-GEBIF ; GEMDE: .ASCII %Nesting-level Exceeded%<12><12><15> GEMDEC = .-GEMDE ; GERBG: .ASCII %Input Buffer too Small%<12><12><15> GERBGC = .-GERBG ; UNKNO: .ASCII %Undefined Error%<12><12><15> UNKNOC = .-UNKNO ;****************************************************************************** ; ; COMMAND SYNTAX ERROR ; ;****************************************************************************** SYNCOM: .ASCII <12><15> .ASCII %STR -- Command Syntax Error%<12><12><15> SYNCOC = .-SYNCOM ;****************************************************************************** ; ; ERRORS FROM PARSE ; ;****************************************************************************** PARSE: .ASCII <12><15> .ASCII %STR -- Error from Parse - % PARSEC = .-PARSE ; WILDIR: .ASCII %Wildcards (*) on Input UIC%<12><12><15> WILDC = .-WILDIR ; MOREI: .ASCII %Too Ambiguous on Input File%<12><15> MOREIC = .-MOREI ; NOIN: .ASCII %No Input File Specified%<12><15> NOINC = .-NOIN ; WILDO: .ASCII %Wildcards (*) on Output File%<12><12><15> WILDOC = .-WILDO ; MOREO: .ASCII %Too Ambiguous on Output File%<12><15> MOREOC = .-MOREO ; AMB: .ASCII %Too Ambiguous on Output File. Wildcards on Input File%<12><15> AMBC = .-AMB .PAGE ;****************************************************************************** ; ; FOUTEN TIJDENS DISK I/O ; ;****************************************************************************** INOPE: .ASCII <12><15> .ASCII %STR -- Failed to Open Input File - % INOPEC = .-INOPE ; NOFIL: .ASCII <12><15> .ASCII %STR -- No such File(s)%<12><15> NOFILC = .-NOFIL ; OUTOP: .ASCII <12><15> .ASCII %STR -- Failed to Open Output File - % OUTOPC = .-OUTOP ; ERRCO: .ASCII %Error code -% ERRVUL: .ASCII /../<12><15> ERRCOC = .-ERRCO ; IN: .ASCII <12><15> .ASCII %STR -- I/O-Error on Input File - % INC = .-IN ; OUT: .ASCII <12><15> .ASCII %STR -- I/O-Error on Output File - % OUTC = .-OUT .EVEN .PAGE .SBTTL ROUTINE COMMAN ;****************************************************************************** ; ; ROUTINE COMMAN ; ; DEZE ROUTINE ONTRAFELT DE COMMAND LINE EN CONTROLEERT OP EVENTUEEL ; INGETYPTE FOUTEN. ; ; INDIEN ALLES GOED -> EEN GE-OPENDE INPUT EN OUTPUT FILE ; ;****************************************************************************** COMMAN: MOV R0,-(SP) ;SAVE REGISTERS MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) ; FINIT$ COMOPN: GCML$ #GCML ;LEES COMMAND LINE IN. BCC COM1 ;BRANCH ALS GELUKT. ; CMPB GCML+G.ERR,#GE.EOF ;TEST OP END-OF-FILE. BNE COM0 ;BRANCH ALS GEEN END-OF-FILE. BR COMUIT COMEXT: BITB GCML+F.RCTL,#FD.TTY ;TEST OF AANGEROEPEN DOOR @FILE BEQ COMOPN ;BRANCH ALS JA. COMUIT: EXIT$S ;EINDE VAN HET PROGRAMMA. .PAGE ;****************************************************************************** ; ; ONDERZOEK FOUTSOORT ; ;****************************************************************************** COM0: PRINT #STR,#STRC ;DISPLAY: STR -- PRINT GCML+G.CMLD+2,GCML+G.CMLD+0 ;DISPLAY INGETYPTE REGEL. ; PRINT #STRCOM,#STRCOC ;DISPLAY: Get Command Line - ; CMPB GCML+G.ERR,#GE.IOR ;TEST OP I/O-ERROR BNE COM01 ;BRANCH ALS NIET. ; PRINT #GEIOR,#GEIORC ;DISPLAY: I/O Error BR COMEXT COM01: CMPB GCML+G.ERR,#GE.OPR ;TEST OF FILE GE-OPEND KON WORDEN. BNE COM02 ;BRANCH ALS NIET. ; PRINT #GEOPR,#GEOPRC ;DISPLAY: Failed to Open @ File BR COMEXT COM02: CMPB GCML+G.ERR,#GE.BIF ;TEST OP SYNTAX ERROR. BNE COM03 ;BRANCH ALS NIET. ; PRINT #GEBIF,#GEBIFC ;DISPLAY: Syntax Error BR COMEXT COM03: CMPB GCML+G.ERR,#GE.MDE ;TEST OP NESTING DIEPTE. BNE COM04 ;BRANCH ALS NIET. ; PRINT #GEMDE,#GEMDEC ;DISPLAY: Nesting-level exceeded BR COMEXT COM04: CMPB GCML+G.ERR,#GE.RBG ;TEST OP INPUTBUFFER TE KLEIN. BNE COM05 ;BRANCH ALS NIET. ; PRINT #GERBG,#GERBG ;DISPLAY: Input Buffer too Small BR COMEXT COM05: PRINT #UNKNO,#UNKNOC ;DISPLAY: Undefined Error BR COMEXT .PAGE ;****************************************************************************** ; ; GA TESTEN OF ER "HELP" IS INGEVULD. ; ;****************************************************************************** COM1: MOV GCML+G.CMLD+2,CSIBLK+C.CMLD+2 ;ADRES VAN INGETYPTE STRING. MOV GCML+G.CMLD+0,CSIBLK+C.CMLD+0 ;BYTECOUNT ERVAN. BNE COM10 ;BRANCH ALS INGEVULD. JMP COMOPN ;BEGIN OPNIEUW. COM10: CMP CSIBLK+C.CMLD,#4 ;TEST OF ER "HELP" IS INGETYPT BNE COM110 ;BRANCH ALS NIET. ; MOV CSIBLK+C.CMLD+2,R4 ;ADRES WAAR TEKST STAAT. MOV #HELTEK,R3 ;TEKST "HELP" MOV #HELTEC,R5 ;BYTECOUNT. COM100: CMPB (R4)+,(R3)+ ;VERGELIJK TEKSTEN. BNE COM110 ;BRANCH ALS GEEN "HELP" SOB R5,COM100 ;GA VERDER. ; PRINT #HELP,#HELPCN ;GEEF VERKLARENDE TEKST. JMP COMOPN ;OPNIEUW. COM110: CSI$1 #CSIBLK ;TEST OP SYNTAX ERRORS. BCC COM12 ;BRANCH ALS GEEN FOUTEN. COM11: PRINT #SYNCOM,#SYNCOC ;DISPLAY: Command Syntax Error JMP COMEXT COM12: BITB CSIBLK+C.STAT,#CS.EQU ;TEST OP = AANWEZIG IN STRING. BEQ COM11 ;BRANCH ALS NIET AANWEZIG. .PAGE ;****************************************************************************** ; ; CONTROLEER INPUT SPECIFICATIE ; ;****************************************************************************** COM2: CLR WILCAR ;INITIALISEER. ; CSI$2 #CSIBLK,INPUT ;COMMAND SEMANTIC PARSER VOOR BCC COM21 ;INPUT FILE. BRANCH ALS GELUKT. COM20: PRINT #STR,#STRC ;DISPLAY: STR -- PRINT GCML+G.CMLD+2,GCML+G.CMLD ;DISPLAY INGETYPTE REGEL. PRINT #PARSE,#PARSEC-3 ;DISPLAY: Error from Parse PRINT #LFCR,#2 ;NIEUWE REGEL. PRINT #LFCR,#2 ;NIEUWE REGEL. JMP COMEXT COM21: BITB CSIBLK+C.STAT,#CS.MOR ;TEST OF MEERDERE FILES , BEQ COM3 ;BRANCH ALS NIET. ; PRINT #PARSE,#PARSEC ;DISPLAY: Error from Parse PRINT #MOREI,#MOREIC ;DISPLAY: Too Ambiguous on Input File JMP COMEXT COM3: MOV #12.,R5 ;SAVE ADRESSEN VAN DATASET- MOV #CSIBLK+C.DSDS,R4 ;DESCRIPTOR BLOCK UIT MOV #DDPIN,R3 ;CSI CONTROL BLOCK. COM4: MOVB (R4)+,(R3)+ ;MOVE DE ADRESSEN. SOB R5,COM4 ; BITB CSIBLK+C.STAT,#CS.NMF ;TEST OF INPUT FILE INGEVULD. BNE COM40 ;BRANCH ALS INGEVULD. ; PRINT #PARSE,#PARSEC ;DISPLAY: Error from Parse PRINT #NOIN,#NOINC ;DISPLAY: No Input file specified JMP COMEXT COM40: BITB CSIBLK+C.STAT,#CS.WLD ;TEST OP WILDCARDS * IN STRING. BEQ COM5 ;BRANCH ALS NIET AANWEZIG. .PAGE ;****************************************************************************** ; ; WE GAAN NU EVEN KIJKEN WAAR DE * STAAT ; ;****************************************************************************** MOV CSIBLK+C.DIRD,R5 ;BYTECOUNT DIRECTORY STRING. BEQ COM43 ;BRANCH ALS NIET INGEVULD. ; MOV CSIBLK+C.DIRD+2,R4 ;ADRES DIRECTORY STRING. COM41: CMPB (R4)+,#'* ;TEST OP * IN DIRECTORY STRING. BEQ COM42 ;BRANCH ALS * IN STRING. SOB R5,COM41 ;ZOEK VERDER. BR COM43 ;GEEN * IN DIRECTORY STRING. COM42: PRINT #PARSE,#PARSEC ;DISPLAY: Error from Parse PRINT #WILDIR,#WILDC ;DISPLAY: Wildcards (*) on Input UIC JMP COMEXT COM43: MOV CSIBLK+C.FILD,R5 ;BYTECOUNT FILE NAAM MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. CLR R3 ;* TELLER. COM44: CMPB (R4)+,#'* ;ER MAG MAAR EEN * IN VOORKOMEN. BNE COM45 ;BRANCH ALS GEEN *. ; INC R3 ;* TELLER +1. COM45: SOB R5,COM44 ;ZOEK VERDER. ; TST R3 ;TEST OF * IN FILE NAAM. BEQ COM5 ;BRANCH ALS NIET. ; CMP R3,#1 ;TEST OF EEN *. BNE COM47 ;ER ZITTEN ER TEVEEL IN. ;***************************************************************************** ; ; ER ZIT MAAR EEN * IN DE FILE NAAM. WE MOETEN NU EVEN NAGAAN WAAR DIE ; * ZICH BEVINDT. ALLEEN "*.TYP" IS TOEGESTAAN. ; ;****************************************************************************** COM46: MOV CSIBLK+C.FILD,R5 ;BYTECOUNT FILE NAAM MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. ; CMPB (R4),#'* ;TEST OF 1STE TEKEN * IS. BEQ COM48 ;BRANCH ALS JA. COM47: PRINT #PARSE,#PARSEC ;DISPLAY: Error from Parse PRINT #MOREI,#MOREIC ;DISPLAY: Too Ambiguous on Input File JMP COMEXT .PAGE ;****************************************************************************** ; ; WE GAAN NU EVEN KIJKEN OF HET VERSIENUMMER IS INGEVULD. ; ALS ER EEN EXPLICIET VERSIENUMMER IS INGEVULD, MOGEN WE ALLEEN ; FILE MET DIT SPECIFIEKE VERSIENUMMER COPIEREN. ; ANDERS NEMEN WE ALLE FILES VAN HET SPECIFIEKE TYPE OVER. ; ;****************************************************************************** COM48: MOV CSIBLK+C.FILD,R5 ;BYTECOUNT FILE NAAM MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. COM49: CMPB (R4)+,#'; ;TEST OP SCHEIDINGSTEKEN. BEQ COM4B ;BRANCH ALS GEVONDEN. SOB R5,COM49 ;ZOEK EN GIJ ZULT VINDEN. COM4A: MOV CSIBLK+C.FILD,R5 ;BYTECOUNT FILE NAAM MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. ; MOV R4,R3 ;GA ER ;* ACHTER ZETTEN. ADD R5,R3 ;IN R3 ADRES WAAR ;* MOET KOMEN. ; MOVB #';,(R3)+ MOVB #'*,(R3) ;VERHOOG BYTECOUNT IN ADD #2,DDPIN+8. ;DATA-SET DESCRIPTOR BLOCK. COM4B: MOV #1,WILCAR ;WILDCARDS AANWEZIG IN FILE NAAM. .PAGE ;****************************************************************************** ; ; CONTROLEER OUTPUT SPECIFICATIE ; ;****************************************************************************** COM5: CSI$2 #CSIBLK,OUTPUT ;COMMAND SEMANTIC PARSER VOOR BCC COM51 ;OUTPUT FILE. BRANCH ALS GELUKT. JMP COM20 COM51: BITB CSIBLK+C.STAT,#CS.WLD ;TEST OP WILDCARDS * IN STRING. BEQ COM52 ;BRANCH ALS NIET AANWEZIG. ; PRINT #PARSE,#PARSEC ;DISPLAY: Error from Parse PRINT #WILDO,#WILDOC ;DISPLAY: Wildcards (*) on Output File JMP COMEXT COM52: BITB CSIBLK+C.STAT,#CS.MOR ;TEST OF MEERDERE FILES , BEQ COM6 ;BRANCH ALS NIET. ; PRINT #PARSE,#PARSEC ;DISPLAY: Error from Parse PRINT #MOREO,#MOREOC ;DISPLAY: Too Ambiguous on Output File JMP COMEXT COM6: MOV #12.,R5 ;SAVE ADRESSEN VAN DATASET- MOV #CSIBLK+C.DSDS,R4 ;DESCRIPTOR BLOCK VAN OUTPUT MOV #DDPOUT,R3 ;FILE UIT CSI CONTROL BLOCK. COM7: MOVB (R4)+,(R3)+ ;MOVE DE ADRESSEN. SOB R5,COM7 ; BITB CSIBLK+C.STAT,#CS.NMF ;TEST OF OUTPUT FILE NAAM INGEVULD. BEQ COM70 ;BRANCH ALS NIET INGEVULD. ; TST WILCAR ;TEST OF WILDCARDS IN INPUT STRING. BEQ COM8 ;BRANCH ALS NIET. ; PRINT #PARSE,#PARSEC ;DISPLAY: Error from Parse PRINT #MOREO,#MOREOC ;DISPLAY: Too Ambiguous on Output File JMP COMEXT COM70: MOV DDPIN+8.,DDPOUT+8. ;NEEM NAAM VAN INPUT FILE OVER. MOV DDPIN+10.,DDPOUT+10. .PAGE ;****************************************************************************** ; ; ALLES IS GELUKT. ; OPEN DE INPUT FILE VOOR ALLEEN READ. ; ;****************************************************************************** COM8: TST WILCAR ;TEST OF WILDCARDS AANWEZIG. BNE COMWIL ;BRANCH ALS JA. ; OPEN$R #FDBIN ;OPEN INPUT FILE VOOR READ. BCC COM9 ;BRANCH ALS GELUKT. ; CMPB FDBIN+F.ERR,#IE.NSF ;TEST OP NO SUCH FILE(S) BNE COM81 ;BRANCH ALS IETS ANDERS. ; PRINT #NOFIL,#NOFILC ;DISPLAY: No such File(s) COM80: CALL INERR ;DISPLAY FILE NAAM INPUT FILE JMP COMEXT COM81: PRINT #INOPE,#INOPEC ;DISPLAY: Failed to Open Input File CALL ERRCOD ;VUL ERRORCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE BR COM80 ;****************************************************************************** ; ; CREEER DE OUTPUT FILE ; ;****************************************************************************** COM9: OPEN$W #FDBOUT ;CREEER DE OUTPUT FILE. BCC COMRET ;BRANCH ALS GELUKT. ; PRINT #OUTOP,#OUTOPC ;DISPLAY: Failed to Open Output File CALL ERRCOD ;VUL ERRORCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE ; CALL OUTERR ;DISPLAY OUTPUT FILE NAAM. ; CLOSE$ #FDBIN ;CLOSE EERST DE INPUT FILE. JMP COMEXT COMRET: MOV (SP)+,R5 ;RESTORE REGISTERS MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN .PAGE ;****************************************************************************** ; ; ER ZIJN WILDCARDS GESPECIFICEERD. ; ;****************************************************************************** COMWIL: CALL WILD ;BEHANDEL WILDCARDS. BR COMRET .PAGE .SBTTL ROUTINE ERRCOD ;****************************************************************************** ; ; DEZE ROUTINE KONVERTEERT DE FCS ERRRORCODE NAAR ASCII. ; ;****************************************************************************** ERRCOD: MOV R4,-(SP) ;SAVE R4 EN R5 MOV R5,-(SP) ; MOVB F.ERR(R0),R5 ;FOUTCODE. NEG R5 ;MAAK POSITEF. ; CLR R4 DIV #10.,R4 ;BEPAAL 10-TAL + REST. BISB #60,R4 ;MAAK ASCII VAN 10-TAL. MOVB R4,ERRVUL ;VUL IN. ; BISB #60,R5 ;MAAK ASCII REST. MOVB R5,ERRVUL+1 ;VUL IN. ; MOV (SP)+,R5 ;RESTORE R4 EN R5. MOV (SP)+,R4 RETURN .PAGE .SBTTL ROUTINE INERR ;***************************************************************************** ; ; DEZE ROUTINE DISPLAYED DE NAAM VAN DE INPUT FILE ; ;***************************************************************************** INERR: PRINT #FDBIN+F.FNB+N.DVNM,#2 ;DEVICE NAAM. MOVB FDBIN+F.FNB+N.UNIT,UNIT ;UNIT NUMMER. BISB #60,UNIT ;MAAK ER ASCII VAN. PRINT #UNIT,#2 ;DISPLAY HET. ; TST DDPIN+4 ;TEST OF UIC BEKEND IS. BNE IN1 ;BRANCH ALS BEKEND. ; CALL .RDFUI ;LEES DEFAULT UIC MOV R1,R3 ;IN R3 BINAIRE UIC. CLR R4 MOV #UIC,R2 ;ADRES WAAR STRING KOMT. MOV R2,R5 ;OM BYTECOUNT TE BEPALEN. CALL .PPASC ;KONVERTEER. SUB R5,R2 ;BEPAAL BYTECOUNT. PRINT #UIC,R2 BR IN2 IN1: PRINT DDPIN+6,DDPIN+4 ;UIC IN2: CALL CONVER ;KONVERTEER NAAM. PRINT #FILSP,R5 ;DISPLAY NAAM ; PRINT #LFCR,#2 ;EEN PAAR REGELS OVERSLAAN. PRINT #LFCR,#2 ;EEN PAAR REGELS OVERSLAAN. RETURN .PAGE .SBTTL ROUTINE OUTERR ;***************************************************************************** ; ; DEZE ROUTINE DISPLAYED DE NAAM VAN DE OUTPUT FILE ; ;***************************************************************************** OUTERR: PRINT #FDBOUT+F.FNB+N.DVNM,#2 ;DEVICE NAAM. MOVB FDBOUT+F.FNB+N.UNIT,UNIT ;UNIT NUMMER. BISB #60,UNIT ;MAAK ER ASCII VAN. PRINT #UNIT,#2 ;DISPLAY HET. ; TST DDPOUT+4 ;TEST OF UIC BEKEND IS. BNE OUT1 ;BRANCH ALS BEKEND. ; CALL .RDFUI ;LEES DEFAULT UIC MOV R1,R3 ;IN R3 BINAIRE UIC. CLR R4 MOV #UIC,R2 ;ADRES WAAR STRING KOMT. MOV R2,R5 ;OM BYTECOUNT TE BEPALEN. CALL .PPASC ;KONVERTEER. SUB R5,R2 ;BEPAAL BYTECOUNT. PRINT #UIC,R2 BR OUT2 OUT1: PRINT DDPOUT+6,DDPOUT+4 ;UIC OUT2: PRINT DDPOUT+10.,DDPOUT+8. ;NAAM ; PRINT #LFCR,#2 ;EEN PAAR REGELS OVERSLAAN. PRINT #LFCR,#2 ;EEN PAAR REGELS OVERSLAAN. RETURN .PAGE .SBTTL ROUTINE CONVER ;****************************************************************************** ; ; DEZE ROUTINE CONVERTEERT DE NAAM WELKE IN RAD50 IN DE FDB ; GENOEMD IN R0 STAAT,NAAR ASCII IN HET GEBIED FILSP ; EN KOMT TERUG MET IN R5 DE BYTECOUNT VAN DE TOTALE FILENAAM. ; ; EVENTUELE BLANKS, DIE WE VAN FCS TERUG KRIJGEN, WORDEN ; NIET IN DE BYTECOUNT OPGENOMEN. TEVENS WORDT DE NAAM ; ZONDER BLANKS IN FILSP GEZET. ; ;****************************************************************************** CONVER: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) ; MOV R0,R3 ;VAN-ADRES ADD #F.FNB+N.FNAM,R3 MOV (R3),R1 ;TE CONVERTEREN WAARDE ; MOV #FILSP,R0 ;NAAR ADRES CALL $C5TA ; MOV #3,R4 ;TEST OP BLANKS SUB R4,R0 1$: CMPB (R0),#' ;TEST OF BLANK BEQ 10$ ;BRANCH ALS BLANK ; INC R0 SOB R4,1$ ;TEST VOLGEND BYTE ; MOV 2(R3),R1 ;VOLGENDE RADIX CONVERSIE CALL $C5TA ; MOV #3,R4 SUB R4,R0 2$: CMPB (R0),#' ;TEST OF BLANK BEQ 10$ ;BRANCH ALS BLANK ; INC R0 SOB R4,2$ ;TEST VOLGEND BYTE ; MOV 4(R3),R1 ;LAATSTE RADIX CONVERSIE NAAM CALL $C5TA ; MOV #3,R4 SUB R4,R0 ;GA OP 1STE BYTE STAAN 3$: CMPB (R0),#' ;TEST OP BLANK BEQ 10$ ;BRANCH ALS BLANK ; INC R0 SOB R4,3$ ;TEST VOLGEND BYTE .PAGE 10$: MOVB #'.,(R0)+ ;ZET ER EEN PUNT ACHTER ; MOV 6(R3),R1 ;CONVERTEER FILE TYPE CALL $C5TA ; MOV #3,R4 ;DOE BLANK TEST SUB R4,R0 ;GA OP EERSTE BYTE STAAN 11$: CMPB (R0),#' ;TEST OP BLANK BEQ 12$ ;BRANCH ALS KLAAR ; INC R0 SOB R4,11$ ;TEST OF KLAAR 12$: SUB #FILSP,R0 ;BEPAAL BYTECOUNT MOV R0,R5 ;EN ZET IN R5. ; MOV (SP)+,R4 ;RESTORE REGISTERS MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN FILSP: .ASCII /123456789.ABC/ ;RUIMTE VOOR SPECIFIEKE NAAM FILSC = .-FILSP .EVEN NEXTFI: .WORD .-. ;N.STAT UIT FDB VOOR VOLGENDE .WORD .-. ;.FIND OPERATION EN OOK N.NEXT. .PAGE .SBTTL COPIEREN *.TYP FILES ;**************************************************************************** ; ; COPIEREN VAN *.TYP FILES. ; ;**************************************************************************** WILD: CLR EERST CLR R5 ;R5 = 0 VOOR AANROEP FLETSR MOV #FDBIN,R0 ;FDB ADRES WILD1: CALL FLETSR ;ZOEK FILES. BCC WILD10 ;BRANCH ALS EEN FILE GEVONDEN ; CMPB FDBIN+F.ERR,#IE.NSF ;TEST OP NO SUCH FILES BNE WILD2 ;BRANCH ALS WEL FILES. ; TST EERST ;TEST OF 1STE MAAL. BEQ WILD01 ;BRANCH ALS JA. ; TST (SP)+ ;UPDATE STACK. JMP EXIT1 ;EINDE PROGRAMMA. WILD01: PRINT #NOFIL,#NOFILC ;DISPLAY: No such File(s) WILD02: CALL INERR ;DISPLAY FILE NAAM INPUT FILE JMP COMUIT ;WE GAAN NIET VERDER. ;****************************************************************************** ; ; WE HEBBEN EEN HARDWARE FOUT ONTDEKT. ; ;****************************************************************************** WILD2: PRINT #INOPE,#INOPEC ;DISPLAY: Failed to Open Input File CALL ERRCOD ;VUL ERRORCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE BR WILD02 .PAGE ;****************************************************************************** ; ; WE HEBBEN EEN FILE GEVONDEN. ; ;****************************************************************************** WILD10: MOV FDBIN+F.FNB+N.STAT,NEXTFI ;SAVE VOOR VOLGENDE .FIND MOV FDBIN+F.FNB+N.NEXT,NEXTFI+2 ; OPEN$R #FDBIN ;OPEN INPUT FILE. BCC WILD11 ;BRANCH ALS OK ; CMPB FDBIN+F.ERR,#IE.NSF ;TEST OF FILE NU WEG BNE WILD2 BR WILD01 WILD11: CALL CONVER ;KONVERTEER FILENAAM ; MOV R5,DDPOUT+8. ;VUL BYTECOUNT IN MOV #FILSP,DDPOUT+10. ; OPEN$W #FDBOUT ;PROBEER DE FILE TE CREEREN. BCC WILRET ;BRANCH ALS GELUKT. ; PRINT #OUTOP,#OUTOPC ;DISPLAY: Failed to Open Output File CALL ERRCOD ;VUL ERRORCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE ; CALL OUTERR ;DISPLAY OUTPUT FILE NAAM. ; CLOSE$ #FDBIN ;CLOSE EERST DE INPUT FILE. ;****************************************************************************** ; ; WE GAAN NU VERDER ZOEKEN. ; ;****************************************************************************** WILD20: MOV NEXTFI,FDBIN+F.FNB+N.STAT ;RESTORE WAARDEN VOOR .FIND MOV NEXTFI+2,FDBIN+F.FNB+N.NEXT ; MOV #1,R5 ;R5 OP DOORZOEKEN FLETSR MOV #FDBIN,R0 ;FDB ADRES JMP WILD1 ;****************************************************************************** ; ; EINDELIJK. WE KUNNEN BEGINNEN MET HET COPIEREN VAN DE FILE ; ;****************************************************************************** WILRET: RETURN .PAGE .SBTTL ROUTINE COPY ;****************************************************************************** ; ; ROUTINE COPY ; ; DEZE ROUTINE CONTROLEERT OP IN HET RECORD VAN DE INPUT FILE DE ; VOLGENDE STATEMENTS VOORKOMEN: ; ; .ASCII ; .ASCIZ ; .ERROR ; #' ; #' ; #'; ; #" ; = ; ; TEVENS OM OOK PROBLEMEN BIJ INTELFILES TE VOORKOMEN ; ; DB ; DW ; ; ALS EEN VAN DEZE STATEMENTS VOORKOMT, MOET DE GEHELE REGEL NAAR ; DE OUTPUT FILE WORDEN GECOPIEERD,DAAR WE BIJ DIT SOORT STATEMENTS ; NIET EXACT KUNNEN KUNNEN ZEGGEN OF ; COMMENTAAR IS OF NIET. ; ;****************************************************************************** COPY: CLR R2 ;POINTER NAAR STATEMENT-TABEL. COP1: MOV FDBIN+F.NRBD,R5 ;BYTECOUNT RECORD. CLR R4 ;POINTER NAAR RECORD. COP2: CLR R3 ;STRING TELLER. MOV NIET(R2),R1 ;IN R1 ADRES VAN STRING. COP3: CMPB INLEES(R4),(R1)+ ;VERGELIJK TEKENS. BNE COP4 ;BRANCH ALS NIET GELIJK. ; INC R4 INC R3 ;UPDATE POINTERS. CMP R3,NIET+2(R2) ;TEST OF STRING GEVONDEN IS. BEQ COP6 ;GEVONDEN. ; SOB R5,COP3 ;ZOEK VERDER. BR COP5 ;STRING NIET GEVONDEN. COP4: INC R4 ;UPDATE POINTERS. SOB R5,COP2 COP5: ADD #4,R2 ;VOLGENDE IN STRING TABEL. CMP R2,#NIETCN ;TEST OF KLAAR. BMI COP1 ;JAMMER, NOG NIET KLAAR. ; SEC ;STRING NIET GEVONDEN. RETURN COP6: CLC ;STRING GEVONDEN. RETURN ; ASCII: .ASCII /.ASCII/ ASCIC = .-ASCII ASCIZ: .ASCII /.ASCIZ/ ASCZC = .-ASCIZ HEK1A: .ASCII /#' / HEK1AC = .-HEK1A HEK1B: .ASCII /#' / HEK1BC = .-HEK1B HEK1C: .ASCII /#';/ HEK1CC = .-HEK1C HEK2: .ASCII /#"/ HEK2CN = .-HEK2 IS: .ASCII /=/ ISCN = .-IS ERROR: .ASCII /.ERROR/ ERRORC = .-ERROR DB: .ASCII /DB/ ;VOOR INTEL MNEMONICS. DBCN = .-DB DW: .ASCII /DW/ ;VOOR INTEL MNEMONICS. DWCN = .-DW .EVEN NIET: .WORD ASCII,ASCIC .WORD ASCIZ,ASCZC .WORD HEK1A,HEK1AC .WORD HEK1B,HEK1BC .WORD HEK1C,HEK1CC .WORD HEK2,HEK2CN .WORD IS,ISCN .WORD ERROR,ERRORC .WORD DB,DBCN .WORD DW,DWCN NIETCN = .-NIET .PAGE .SBTTL ROUTINE WEG ;****************************************************************************** ; ; ROUTINE WEG ; ; DEZE ROUTINE CONTROLEERT OP IN HET RECORD VAN DE INPUT FILE DE ; VOLGENDE STATEMENTS VOORKOMEN: ; ; .PAGE ; .SBTTL ; ; ALS EEN VAN DEZE STATEMENTS VOORKOMT, WORDT DE REGEL NIET NAAR ; DE OUTPUT FILE GECOPIEERD. ; ; VOORAFGAANDE AAN BOVENGENOEMDE STATEMENTS MOGEN ALLEEN OF ; BLANKS VOORKOMEN, EN ZE MOETEN ALTIJD MET EEN . BEGINNEN. ; ================================ ; ;****************************************************************************** WEG: MOV FDBIN+F.NRBD,R5 ;BYTECOUNT RECORD. CLR R4 ;POINTER NAAR RECORD. WEG0: CMPB INLEES(R4),#11 ;TEST OF BEQ WEG0A ;BRANCH ALS ; CMPB INLEES(R4),#' ;TEST OP BLANK. BEQ WEG0A ;BRANCH ALS BLANK. ; CMPB INLEES(R4),#'. ;HET MAG ALLEEN NOG EEN . ZIJN. BNE WEG5A ;BRANCH ALS HET STATEMENT NIET ;VOORKOMT. BR WEG0B ;STATEMENT KAN VOORKOMEN. WEG0A: INC R4 ;VOLGEND TEKEN. SOB R5,WEG0 ;TEST OF KLAAR. BR WEG5A ;STRING KOMT NIET VOOR. ;****************************************************************************** ; ; ALLES WIJST EROP DAT EEN VAN DE STRINGS VOORKOMT. WE ONDERZOEKEN DIT ; NU EVEN. ; ;****************************************************************************** WEG0B: CLR R2 ;POINTER NAAR STATEMENT-TABEL. WEG1: MOV FDBIN+F.NRBD,R5 ;BYTECOUNT RECORD. CLR R4 ;POINTER NAAR RECORD. WEG2: CLR R3 ;STRING TELLER. MOV WEL(R2),R1 ;IN R1 ADRES VAN STRING. WEG3: CMPB INLEES(R4),(R1)+ ;VERGELIJK TEKENS. BNE WEG4 ;BRANCH ALS NIET GELIJK. ; INC R4 INC R3 ;UPDATE POINTERS. CMP R3,WEL+2(R2) ;TEST OF STRING GEVONDEN IS. BEQ WEG6 ;GEVONDEN. ; SOB R5,WEG3 ;ZOEK VERDER. BR WEG5 ;STRING NIET GEVONDEN. WEG4: INC R4 ;UPDATE POINTERS. SOB R5,WEG2 WEG5: ADD #4,R2 ;VOLGENDE IN STRING TABEL. CMP R2,#WELCN ;TEST OF KLAAR. BMI WEG1 ;JAMMER, NOG NIET KLAAR. WEG5A: SEC ;STRING NIET GEVONDEN. RETURN WEG6: CLC ;STRING GEVONDEN. RETURN ; PAGE: .ASCII /.PAGE/ PAGEC = .-PAGE SBTTL: .ASCII /.SBTTL/ SBTTLC = .-SBTTL .EVEN WEL: .WORD PAGE,PAGEC .WORD SBTTL,SBTTLC WELCN = .-WEL .PAGE .SBTTL START VAN HET PROGRAMMA ;****************************************************************************** ; ; START VAN HET PROGRAMMA ; ;****************************************************************************** START: CALL COMMAN ;BEHANDEL COMMAND LINE. ;****************************************************************************** ; ; DE INPUT FILE BESTAAT EN IS GE-OPEND EN DE OUTPUT FILE IS OP EEN ; JUISTE WIJZE GECREEERD. ; GA RECORD VOOR RECORD LEZEN UIT DE INPUT FILE. VERRICHT BOVENSTAAND ; "STRAPPEN" EN SCHRIJF HET EVT BEWERKTE RECORD NAAR DE OUTPUT FILE. ; ;****************************************************************************** ST1: GET$ #FDBIN ;LEES RECORD UIT INPUT FILE BCC ST2 ;BRANCH ALS GELUKT. ; CMPB FDBIN+F.ERR,#IE.EOF ;TEST OP END-OF-FILE BEQ KLAAR ;BRANCH ALS END-OF-FILE. ; PRINT #IN,#INC ;DISPLAY: I/O Error on Input File CALL ERRCOD ;VUL FOUTCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE. ; CLOSE$ #FDBIN ;CLOSE INPUT FILE. ; DELET$ #FDBOUT ;DELETE OUTPUT FILE. JMP EXIT ST2: MOV FDBIN+F.NRBD,R5 ;SAVE BYTECOUNT REGEL. BEQ ST1 ;BRANCH ALS LEEG RECORD. ; CMPB INLEES,#'; ;TEST OF REGEL MET ; BEGINT. BEQ ST1 ;BRANCH ALS JA. ;****************************************************************************** ; ; NU GAAN WE CONTROLEREN OF DE VOLGENDE STATEMENTS VOORKOMEN: ; BV. .ASCII ; ER ZOU BEST EEN ; IN DE ASCII-STRING KUNNEN STAAN. ; ALS ZO'N STATEMENT VOORKOMT MOGEN WE NIETS MET DE REGEL DOEN. ; ; ZIE VOOR ALLE STATEMENTS WAAR OP GEKONTROLEERD WORDT DE ROUTINE COPY ; ;****************************************************************************** CALL COPY ;KIJK OF ER EEN "GEVAARLIJK" ;STATEMENT VOORKOMT. BCC BEG00 ;BRANCH ALS JA. ;****************************************************************************** ; ; NU GAAN WE CONTROLEREN OF DE VOLGENDE STATEMENTS VOORKOMEN: ; BV. .PAGE ; DEZE STATEMENTS HOEVEN HELEMAAL NIET GECOPIEERD TE WORDEN. ; ; ZIE VOOR ALLE STATEMENTS WAAR OP GEKONTROLEERD WORDT DE ROUTINE WEG ; ;****************************************************************************** CALL WEG ;KIJK OF ER EEN "ONNUTTIG" ;STATEMENT VOORKOMT. BCC ST1 ;BRANCH ALS JA. ;****************************************************************************** ; ; WE KUNNEN NU "RUSTIG" DE STRING VAN ACHTER AF AAN ONDERZOEKEN. ; ; ZODRA WE EEN ; VINDEN COPIEREN WE DE REGEL TOTAAN DEZE POSITIE. ; DE ; EN VERDER GAAT DUS NIET MEE. ; ; ;****************************************************************************** MOV FDBIN+F.NRBD,R5 ;IN R5 BYTECOUNT REGEL. BEG0: CMPB INLEES-1(R5),#'; ;GA VANACHTER AF ; ZOEKEN. BEQ BEG2 ;BRANCH ALS GEVONDEN. SOB R5,BEG0 ;BRANCH ALS NIET KLAAR. .PAGE ;****************************************************************************** ; ; WE HEBBEN GEEN ; GEVONDEN. ; DE REGEL MOET IN Z'N GEHEEL WORDEN WEGGESCHREVEN NAAR DE OUTPUT FILE. ; ;****************************************************************************** BEG00: MOV FDBIN+F.NRBD,R3 ;BYTECOUNT REGEL. ;****************************************************************************** ; ; SCHRIJF RECORD NAAR DE OUTPUT FILE. ; ;****************************************************************************** BEG1: PUT$ #FDBOUT,#INLEES,R3 ;SCHRIJF REGEL IN OUTPUT FILE BCC ST1 ;BRANCH ALS GELUKT. ; PRINT #OUT,#OUTC ;DISPLAY: I/O Error on Output File CALL ERRCOD ;VUL FOUTCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE. ; CALL OUTERR ;DISPLAY OUTPUT FILE NAAM. ; CLOSE$ #FDBIN ;CLOSE INPUT FILE. DELET$ #FDBOUT ;DELETE OUTPUT FILE. JMP EXIT ;****************************************************************************** ; ; WE HEBBEN EEN ; GEVONDEN. ; SCHRIJF RECORD NAAR OUTPUT FILE ZONDER ;BLA ; ;****************************************************************************** BEG2: DEC R5 ;VERLAAG BYTECOUNT. BEQ ST1 ;NIET COPIEREN ALS 0. ; MOV R5,R3 ;UPDATE BYTECOUNT. GAAT NAAR R3. JMP BEG1 .PAGE ;****************************************************************************** ; ; EXIT-GEDEELTE ; CLOSE DE BEIDE FILES ; ;****************************************************************************** KLAAR: CLOSE$ #FDBIN ;CLOSE INPUT FILE CLOSE$ #FDBOUT ;CLOSE OUTPUT FILE EXIT: TST WILCAR ;TEST OF WILDCARDS IN HET SPEL. BEQ EXIT1 ;BRANCH ALS NIET. ; MOV #1,EERST MOV #1,R5 ;R5 OP DOORZOEKEN FLETSR MOV #FDBIN,R0 ;FDB ADRES ; CALL WILD1 ;GA VERDER MET ZOEKEN. JMP ST1 ;EN BEHANDEL VOLGENDE FILE. EXIT1: BITB GCML+F.RCTL,#FD.TTY ;BRANCH ALS AANGEROEPEN VIA @FILE BNE UIT ;BRANCH ALS NIET. JMP START ;VOLGENDE COMMAND LINE UIT @FILE. UIT: EXIT$S .END START