.TITLE SEARCH .IDENT /DASFLEX/ .ENABLE LC .NLIST BEX ;****************************************************************************** ; ; PROGRAMMA SEARCH ; ================ ; ; DIT PROGRAMMA ZOEKT STRINGS IN TEXT FILES (R.VAR/FD.CR). ; ; VOOR DE OPBOUW VAN DE COMMAND LINE WORDT VERWEZEN NAAR HET LABEL ; "HELP". ; ;****************************************************************************** ; ; ONTWORPEN EN GEPROGRAMMEERD DOOR: ; ; P. VERGEER ; F. LANGEZAAL ; ; DATUM: APRIL 1983 ; ;****************************************************************************** ; ; WIJZIGINGEN + DATUM: ; ; NOVEMBER 1986: WILDCARDS GEIMPLEMENTEERD. ; JANUARI 1990: NOG ENIGE UITBREIDINGEN. ; ;****************************************************************************** ; ; ASSEMBLEER INFORMATIE: ; --------------------- ; MAC SEARCH=SEARCH ; ; TASKBUILD INFORMATIE: ; -------------------- ; ; SEARCH/PR:0/CP=SEARCH ; / ; LIBR=FCSRES:RO ; ASG=TI:1 ; TASK=...SRC ; // ; ;****************************************************************************** .MCALL GCMLB$,GCMLD$,GCML$,CSI$,CSI$1,CSI$2,EXIT$S,QIOW$S .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,FSRSZ$,OPNS$R,FINIT$ .MCALL CLOSE$,GET$,CSI$SW,CSI$ND,CSI$SV,NMBLK$,GTIM$S .PAGE ;****************************************************************************** ; ; 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 .PAGE ;****************************************************************************** ; DATA-GEBIEDEN. ;****************************************************************************** PRADR: .WORD .-. ;ADRESSEN TBV MACRO "PRINT". PRBYT: .WORD .-. ASTRIX: .WORD .-. ;HULPWOORD ROUTINE "TSTNAM". SAVR2: .WORD .-. SAVR4: .WORD .-. NEXTIN: .WORD .-. ;N.STAT UIT FDBIN VOOR VOLGENDE .WORD .-. ;.FIND OPERATION EN OOK N.NEXT. NEXTDI: .WORD .-. ;N.STAT UIT FDBDIR VOOR VOLGENDE .WORD .-. ;.FIND OPERATION EN OOK N.NEXT. IETS: .WORD .-. DIREER: .WORD .-. ;IVM WILDCARDS UIC. VERBYT: .WORD .-. ;BYTECOUNT VERSIENUMMER (INCL ;). VERGEB: .BLKB 10. ;VERSIENUMMER. VERGCN = .-VERGEB FILBYT: .WORD .-. ;BYTECOUNT FILE NAAM + TYPE. WILNBY: .WORD .-. ;BYTECOUNT FILE NAAM. WILTBY: .WORD .-. ;BYTECOUNT TYPE FILE. WILGBY: .WORD .-. ;BYTECOUNT GROUP UIC. WILOBY: .WORD .-. ;BYTECOUNT OWNER UIC. WILNGB: .BLKB 9. ;FILE NAAM. WILTGB: .BLKB 3. ;TYPE FILE. WILGGB: .BLKB 3. ;GROUP UIC. WILOGB: .BLKB 3. ;OWNER UIC. DRUIC: .BLKB 9. .EVEN INPUT: .BLKB 40. ;INTYPGEBIED VOOR TE ZOEKEN STRING. INPCN = .-INPUT PINPUT: .BLKB INPCN ;SAVE-GEBIED INGETYPTE. .EVEN STATUS: .BLKW 2 ;STATUS-WOORDEN. INLEES: .BLKB 255. ;RECORD INLEESGEBIED .EVEN FOUND: .WORD .-. ;1 = WE HEBBEN DE TEXT GEVONDEN. FIRST: .WORD .-. ;GEEFT AAN DAT FILE NAAM GEPRINT IS. TELLER: .WORD .-. ;RECORDTELLER VOOR FILE. .WORD .-. EERST: .WORD .-. ;GEEFT AAN OF FILE NAAM AL IS GEDISPLAYED. UICSKP: .WORD .-. ;IVM BLANKO REGEL TUSSEN VERSCHILLENDE ;UICs. DDPIN: .BLKW 6 ;DATASET-DESCRIPTOR INFO INPUT FILE WILCAR: .WORD .-. ;WILDCARDS INDIKATIE. ;BIT 0: WILDCARDS IN NAAM. ;BIT 1: WILDCARDS IN TYPE. ;BIT 2: WILDCARDS IN GROUP UIC. ;BIT 3: WILDCARDS IN OWNER UIC. UNIT: .ASCII / :/ UIC: .BLKB 9. ;HIER KOMT UIC IN ASCII. LOWCAS: .BYTE .-. ;HULPBYTE. .EVEN DDPDIR: .WORD DIRDVT,DIRDEV ;DDP TBV [0,0]*.DIR .WORD DIRUIT,DIRUIC .WORD DIRNAT,DIRNAM DIRDEV: .ASCII /SY:/ DIRDVT = .-DIRDEV DIRUIC: .ASCII /[0,0]/ DIRUIT = .-DIRUIC DIRNAM: .ASCII /*.DIR;*/ DIRNAT = .-DIRNAM FILSP: .ASCII /123456789.ABC/ ;RUIMTE VOOR SPECIFIEKE NAAM FILSC = .-FILSP .EVEN CONTAB: .WORD 8.,64.,512.,4096.,32768. CONTCN = .-CONTAB UICGEB: .BLKB 7. .EVEN DATTYD: .BLKW 8. .PAGE ;****************************************************************************** ; ; COMMAND LINE PROCESSING GEDEELTE ; ;****************************************************************************** ; ; DEFINIEER GCML OFFSETS ; ;****************************************************************************** GCMLD$ ;****************************************************************************** ; ; FCS DEFINITIES ; ;****************************************************************************** FSRSZ$ 3 FDBIN: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,INLEES,255. FDOP$A 2,DDPIN,INDEF,,FA.ENB!FA.DLK ; FDBDIR: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,INLEES,255. FDOP$A 3,DDPDIR,OUDEF,,FA.ENB!FA.DLK ; INDEF: NMBLK$ ,,,SY,0 OUDEF: NMBLK$ ,,,SY,0 .PAGE ;****************************************************************************** ; ; GCML CONTROL BLOCK DEFEFINITIES ; ;****************************************************************************** GCML: GCMLB$ 1,SRC,,1 ;****************************************************************************** ; ; CSI CONTROL BLOCK DEFINITIES ; ;****************************************************************************** CSI$ .EVEN CSIBLK: .BLKB C.SIZE .EVEN SWTAB: CSI$SW LI,LIMSK,SWMASK,SET,NEG,VATAB ;DEFINIEER DE /LI SWITCH CSI$ND .EVEN VATAB: CSI$SV ASCII,SWVAL,1. CSI$ND LIMSK = 1 ;/LI SWITCH BIT SWVAL: .BLKW 1. SWMASK: .WORD .-. ;MASKWOORD VOOR EVT OPGEGEVEN .PAGE ;****************************************************************************** ; ; DISPLAY TEKSTEN. ; ;****************************************************************************** SCRKOP: .ASCII <12><15><12><15>%SRC -- % SCRDAT: .ASCII %..-% SCRMND: .ASCII %...-% SCRJAR: .ASCII %.. % SCRUUR: .ASCII %..:% SCRMIN: .ASCII %..% SCRKOC = .-SCRKOP DATMND: .ASCII %JanFebMarAprMayJunJulAugSepOctNovDec% ; TEL: .ASCII <12><15> TELVUL: .ASCII %..... % TELCNT = .-TEL ; ASK: .ASCII <12><15>%SRC>Enter string to search for or "HELP": % ASKCN = .-ASK ; ALTPRT: .ASCII <12><15>%SRC>Enter file specification: % ALTPRC = .-ALTPRT ; HELTEK: .ASCII /help/ HELTEC = .-HELTEK ; HELP: .ASCII <12><12><12><12><15><12><12><12><12><15> .ASCII % The SRC command searches for a specified string in TEXT files.%<12><15><12><15> .ASCII % The general formats of the SRC command are:%<12><15><12><15> .ASCII % [Dev][Uic]File Name.Type[;Version][/LI]%<12><15> .ASCII % @indirect%<12><15><12><15> .ASCII % SRC provides the same wildcard features as PIP for the File Name:%<12><15><12><15> .ASCII % The UIC must be explicit or "*" (wildcard(s)).%<12><15> .ASCII % The File Type must be explicit or "*" (wildcard(s)).%<12><15> .ASCII % The Version must be explicit or "*" (wildcard(s)).%<12><15><12><15> .ASCII % Default the program name(s) will be displayed%<12><15> .ASCII % With the /LI-switch defined also the line + record number%<12><15> .ASCII % will be displayed.%<12><15><12><15> HELPCN = .-HELP ; TEXT: .ASCII <12><15><12><15> .ASCII %Text found in:%<12><15> .ASCII %--------------% TEXTCN = .-TEXT LFCR: .ASCII <12><15> SRC: .ASCII <12><15> .ASCII %SRC -- % SRCC = .-SRC ;****************************************************************************** ; ; FOUTEN VAN GET COMMAND LINE. ; ;****************************************************************************** SRCCOM: .ASCII <12><15><12><15> .ASCII %SRC -- Get Command Line - % SRCCOC = .-SRCCOM ; GEIOR: .ASCII %I/O Error% GEIORC = .-GEIOR ; GEOPR: .ASCII %Failed to Open @ File% GEOPRC = .-GEOPR ; DIROPE: .ASCII %Failed to Open Directory File% DIROPC = .-DIROPE ; GEBIF: .ASCII %Syntax Error% GEBIFC = .-GEBIF ; GEMDE: .ASCII %Nesting-level Exceeded% GEMDEC = .-GEMDE ; GERBG: .ASCII %Input Buffer too Small% GERBGC = .-GERBG ; UNKNO: .ASCII %Undefined Error% UNKNOC = .-UNKNO ;****************************************************************************** ; ; COMMAND SYNTAX ERROR ; ;****************************************************************************** SYNCOM: .ASCII <12><15><12><15> .ASCII %SRC -- Command Syntax Error% SYNCOC = .-SYNCOM ;****************************************************************************** ; ; ERRORS FROM PARSE ; ;****************************************************************************** PARSE: .ASCII <12><15><12><15> .ASCII %SRC -- Error from Parse - % PARSEC = .-PARSE ; MOREI: .ASCII %Too Ambiguous% MOREIC = .-MOREI ; NOIN: .ASCII %No File Specified% NOINC = .-NOIN ; BADFI: .ASCII %Bad file name% BADFIC = .-BADFI ; ERUIC: .ASCII %UIC must be explicit or "*" (wildcards)% ERUICC = .-ERUIC ; ERTYP: .ASCII %File type must be explicit or "*" (wildcards)% ERTYPC = .-ERTYP .PAGE ;****************************************************************************** ; ; FOUTEN TIJDENS DISK I/O ; ;****************************************************************************** INOPE: .ASCII <12><15><12><15>%SRC -- Failed to Open Input File - % INOPEC = .-INOPE ; NOTEXT: .ASCII <12><15><12><15>%SRC -- No text file - % NOTEXC = .-NOTEXT ; NOFIL: .ASCII <12><15><12><15> .ASCII %SRC -- No such (text) file(s)%<12><15> NOFILC = .-NOFIL ; ERRCO: .ASCII %Error code -% ERRVUL: .ASCII /../<12><15> ERRCOC = .-ERRCO ; IN: .ASCII <12><15><12><15>%SRC -- I/O error on Input File - % INC = .-IN ; NOFON: .ASCII <12><15> .ASCII %SRC -- Text not found% NOFONC = .-NOFON ENDP: .ASCII <12><15><12><15> .ASCII %SRC -- End of program%<12><15> ENDPCN = .-ENDP .EVEN .PAGE ;****************************************************************************** ; ; ROUTINE COMMAN ; ; DEZE ROUTINE ONTRAFELT DE COMMAND LINE EN CONTROLEERT OP EVENTUEEL ; INGETYPTE FOUTEN. ; ; INDIEN ALLES GOED -> EEN GE-OPENDE INPUT FILE. ; ;****************************************************************************** COMMAN: MOV R0,-(SP) ;SAVE REGISTERS MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) ; FINIT$ COMOPN: CLR UICSKP ;IVM BLANKO REGEL NA NIEUWE UIC. ; GCML$ #GCML,#ALTPRT,#ALTPRC ;LEES COMMAND LINE IN. BCS 2$ ;BRANCH ALS MISLUKT. ; CALL DATUM ;DISPLAY DATUM/TIJD. CALL INPSTR ;INPUT-STRING NAAR INTERNE BUFFER. ; BITB GCML+F.RCTL,#FD.TTY ;TEST OF AANGEROEPEN DOOR @FILE BNE 1$ ;BRANCH ALS NIET. ; CALL DISCOM ;DISPLAY REGEL UIT @FILE. 1$: JMP COM1 2$: CALL DATUM ;DISPLAY DATUM/TIJD. CALL INPSTR ;INPUT-STRING NAAR INTERNE BUFFER. ; 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: PRINT #ENDP,#ENDPCN ;PRINT DAT WE KLAAR ZIJN. EXIT$S ;EINDE VAN HET PROGRAMMA. .PAGE ;****************************************************************************** ; ; GET COMMAND LINE FOUTEN. ; ;****************************************************************************** COM0: PRINT #SRCCOM,#SRCCOC ;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 CALL DISCOM ;DISPLAY INGETYPTE STRING. BR COMUIT 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 CALL DISCOM ;DISPLAY INGETYPTE STRING. BR COMUIT COM02: CMPB GCML+G.ERR,#GE.BIF ;TEST OP SYNTAX ERROR. BNE COM03 ;BRANCH ALS NIET. ; PRINT #GEBIF,#GEBIFC ;DISPLAY: Syntax Error CALL DISCOM ;DISPLAY INGETYPTE STRING. 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 CALL DISCOM ;DISPLAY INGETYPTE STRING. BR COMUIT 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 CALL DISCOM ;DISPLAY INGETYPTE STRING. BR COMUIT COM05: PRINT #UNKNO,#UNKNOC ;DISPLAY: Undefined Error CALL DISCOM ;DISPLAY INGETYPTE STRING. BR COMUIT .PAGE ;****************************************************************************** ; ; GA TESTEN OF ER SYNTAX ERRORS ZIJN. ; ;****************************************************************************** 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: CSI$1 #CSIBLK ;TEST OP SYNTAX ERRORS. BCC COM12 ;BRANCH ALS GEEN FOUTEN. COM11: PRINT #SYNCOM,#SYNCOC ;DISPLAY: Command Syntax Error CALL DISCOM ;DISPLAY INGETYPTE STRING. JMP COMEXT COM12: BITB CSIBLK+C.STAT,#CS.EQU ;TEST OP = AANWEZIG IN STRING. BNE COM11 ;BRANCH ALS AANWEZIG. .PAGE ;****************************************************************************** ; ; CONTROLEER INPUT SPECIFICATIE ; ;****************************************************************************** COM2: CSI$2 #CSIBLK,OUTPUT,#SWTAB ;COMMAND SEMANTIC PARSER VOOR BCC COM21 ;INPUT FILE. BRANCH ALS GELUKT. COM20: PRINT #PARSE,#PARSEC-3 ;DISPLAY: Error from Parse CALL DISCOM ;DISPLAY INGETYPTE STRING. 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 File CALL DISCOM ;DISPLAY INGETYPTE STRING. 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 file specified CALL DISCOM ;DISPLAY INGETYPTE STRING. JMP COMEXT COM40: BITB CSIBLK+C.STAT,#CS.DVF ;TEST OF DEVICE OPGEGEVEN. BNE COM400 ;BRANCH ALS JA. ; MOV #DIRDVT,DDPIN+0 ;BYTECOUNT DEFAULT DEVICE NAAM. MOV #DIRDEV,DDPIN+2 ;ADRES DEFAULT DEVICE NAAM. COM400: CALL CHKNAM ;KONTROLEER DE NAAM. BCC COM41 ;BRANCH ALS GOED. JMP COMEXT COM41: BITB CSIBLK+C.STAT,#CS.WLD ;TEST OP WILDCARDS * IN STRING. BEQ COM8 ;BRANCH ALS NIET AANWEZIG. .PAGE ;****************************************************************************** ; WE GAAN NU EVEN KIJKEN WAAR DE * STAAT. ;****************************************************************************** ; ONDERZOEK EERST DE NAAM. BIT 0 IN "WILCAR" GEEFT AAN OF WILDCARDS ; IN NAAM. ;****************************************************************************** CALL WILNAM ;TEST OF WILDCARDS IN NAAM. ;****************************************************************************** ; ONDERZOEK OF * IN TYPE. BIT 1 IN "WILCAR" GEEFT AAN OF WILDCARDS ; IN FILE TYPE ;****************************************************************************** CALL WILTYP ;TEST OF WILDCARDS IN FILE TYPE. BCC COM410 ;BRANCH ALS GELUKT. JMP COMEXT ;****************************************************************************** ; ONDERZOEK OF * IN UIC. BIT 2 IN "WILCAR" GEEFT AAN OF WILDCARDS ; IN GROUP EN BIT 3 IN "WILCAR" OF WILDCARDS IN OWNER. ;****************************************************************************** COM410: CALL WILUIC ;TEST OF WILDCARDS IN UIC. BCC COM411 ;BRANCH ALS GELUKT. JMP COMEXT .PAGE ;****************************************************************************** ; WE MOETEN NU ENIGE STRINGS AANPASSEN IN HET DATA DESCRIPTOR BLOCK. ;****************************************************************************** COM411: MOV DDPIN+10.,R3 ;ADRES WAAR FILE NAAM STAAT. MOV R3,R2 ;SAVE VOOR LATER OM BYETCOUNT ;TE BEPALEN. BIT #1,WILCAR ;TEST OF * IN FILE NAAM. BEQ COM42 ;BRANCH ALS NIET. ;****************************************************************************** ; FILE NAAM MET WILDCARDS. VUL * IN NAAM IN. ;****************************************************************************** MOVB #'*,(R3)+ ;FILE NAAM *. MOVB #'.,(R3)+ ;SCHEIDINGSTEKEN. BR COM43 ;****************************************************************************** ; FILE NAAM ZONDER WILDCARDS. LAAT STAAN WAT ER STAAT. ;****************************************************************************** COM42: ADD WILNBY,R3 ;VERHOOG MET BYTECOUNT NAAM. INC R3 ;VERHOOG MET 1 VOOR . ;****************************************************************************** ; TEST OF WILDCARDS IN FILE TYPE ;****************************************************************************** COM43: BIT #2,WILCAR ;TEST OP WILDCARDS. BEQ COM44 ;BRANCH ALS NIET. ;****************************************************************************** ; FILE TYPE MET WILDCARDS. VUL * IN TYPE IN. ;****************************************************************************** MOVB #'*,(R3)+ ;VUL * IN. BR COM46 ;****************************************************************************** ; FILE TYPE ZONDER WILDCARDS. LAAT STAAN WAT ER STAAT. ;****************************************************************************** COM44: MOV WILTBY,R5 ;BYTECOUNT FILE TYPE. MOV #WILTGB,R4 ;ADRES WAAR TYPE STAAT. COM45: MOVB (R4)+,(R3)+ ;ZET ACHTER DE NAAM. SOB R5,COM45 .PAGE ;****************************************************************************** ; ; WE GAAN NU EVEN KIJKEN OF HET VERSIENUMMER IS INGEVULD. ; ALS ER EEN EXPLICIET VERSIENUMMER IS INGEVULD, MOGEN WE ALLEEN ; FILES MET DIT SPECIFIEKE VERSIENUMMER BEHANDELEN. ; ANDERS NEMEN WE ALLE FILES VAN HET SPECIFIEKE TYPE OVER. ; ;****************************************************************************** COM46: TST VERBYT ;TEST OF VERSIENUMMER INGEVULD. BNE COM47 ;BRANCH ALS JA. ; MOVB #';,(R3)+ ;ZET ER ;* ACHTER. MOVB #'*,(R3)+ BR COM49 COM47: MOV VERBYT,R5 ;BYTECOUNT VERSIENUMMER INCL ; MOV #VERGEB,R4 ;ADRES WAAR VERSIESTAAT. COM48: MOVB (R4)+,(R3)+ ;ZET ACHTER FILE NAAM + TYPE. SOB R5,COM48 ;TEST OF KLAAR. COM49: SUB R2,R3 ;BEPAAL BYTECOUNT. MOV R3,DDPIN+8. ;ZET IN DATA DESCRIPTOR BLOCK. .PAGE ;****************************************************************************** ; ; ALLES IS GELUKT. ; OPEN DE TE ONDERZOEKEN FILE VOOR ALLEEN READ. ; HET MOET EEN TEXT FILE ZIJN, DWZ R.VAR EN FD.CR MOETEN ZIJN ; GEDEFINIEERD ; ;****************************************************************************** COM8: TST WILCAR ;TEST OF WILDCARDS AANWEZIG. BNE COMWIL ;BRANCH ALS JA. ; OPNS$R #FDBIN ;OPEN INPUT FILE VOOR SHARED 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 (text) file(s) COM80: CALL INNAM ;DISPLAY FILE NAAM CALL VERSIE ;EN DE VERSIE. PRINT #LFCR,#2 ;EEN PAAR REGELS OVERSLAAN. JMP COMEXT COM81: PRINT #INOPE,#INOPEC ;DISPLAY: Failed to Open Input File CALL ERRCOD ;VUL ERRORCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE BR COM80 COM9: CMPB FDBIN+F.RTYP,#R.VAR ;TEST RECORD TYPE. BNE COM9A ;BRANCH ALS GEEN TEXT FILE. ; BITB #FD.CR,FDBIN+F.RATT ;TEST RECORD ATTRIBUTES. BNE COM9B ;BRANCH ALS GOEDE FILE. COM9A: PRINT #NOTEXT,#NOTEXC ;DISPLAY: No text file CALL INNAM ;DISPLAY FILE NAAM. CALL VERSIE ;EN DE VERSIE. PRINT #LFCR,#2 ;EEN PAAR REGELS OVERSLAAN. JMP COMEXT COM9B: CLC ;GOEDE FILE. 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 ;CARRY KAN GEZET ZIJN (KLAAR). .PAGE ;****************************************************************************** ; ; 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 ;****************************************************************************** ; ; ROUTINE INPSTR ; ============== ; DEZE ROUTINE VERPLAATST HET ORGINELE INGETYPTE COMMANDO NAAR EEN ; INTERNE BUFFER, ZODAT WE GEEN LAST HEBBEN VAN "PARSEN". ; ;****************************************************************************** INPSTR: MOV R3,-(SP) ;SAVE REGISTERS. MOV R4,-(SP) MOV R5,-(SP) ; CMP GCML+G.CMLD+0,#80. ;TEST OP INPUTBUFFER TE KLEIN. BLOS INPST0 ;BRANCH ALS JA. ; MOVB #GE.RBG,GCML+G.ERR ;SIMULEER ZELF DE FOUT. MOV #80.,GCML+G.CMLD+0 ;MAXIMALE GROOTTE. INPST0: MOV GCML+G.CMLD+2,R3 ;VAN-ADRES. MOV #DISINP,R4 ;NAAR-ADRES. MOV GCML+G.CMLD+0,R5 ;BYTECOUNT INPUT-STRING. BEQ INPST2 ;BRANCH ALS GEEN INPUT-STRING. INPST1: MOVB (R3)+,(R4)+ SOB R5,INPST1 ;TEST OF KLAAR. INPST2: MOV GCML+G.CMLD+0,DISBYT ;BYTECOUNT INPUT-STRING. ; MOV (SP)+,R5 ;RESTORE REGISTERS. MOV (SP)+,R4 MOV (SP)+,R3 RETURN ;****************************************************************************** ; ; ROUTINE DISCOM ; ============== ; DEZE ROUTINE DISPLAYED HET ORGINELE INGETYPTE COMMANDO. ; ;****************************************************************************** DISCOM: PRINT #SRC,#SRCC ;SRC -- ; TST DISBYT ;TEST OF IETS INGEVUL. BEQ DISCO1 ;BRANCH ALS NIET. ; PRINT #DISINP,DISBYT ;DISPLAY INGETYPTE STRING. DISCO1: RETURN DISINP: .BLKB 80. ;INTERNE BUFFER. BIJ DE GCMLB$ HEBBEN DISBYT: .WORD .-. ;WE NIETS INGEVULD, DWZ 80. BYTES ;TBV HET COMMANDO. .PAGE ;***************************************************************************** ; ; ROUTINE INNAM ; ============= ; DEZE ROUTINE DISPLAYED DE NAAM VAN DE INPUT FILE ; ;***************************************************************************** ; EERST DE DEVICE-NAAM. ;***************************************************************************** INNAM: 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. ;***************************************************************************** ; BEPAAL DE UIC. ;***************************************************************************** MOV #9.,R5 ;MAAK GEBIED UIC SCHOON. 1$: CLRB UIC-1(R5) SOB R5,1$ ;BRANCH ALS NOG NIET KLAAR. ; TST DDPIN+4 ;TEST OF UIC BEKEND IS. BNE INNA1 ;BRANCH ALS BEKEND. ;***************************************************************************** ; BEPAAL ZELF EVEN DE UIC. ;***************************************************************************** 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. MOV R2,R5 ;BYTECOUNT IN R5 TBV ONDERDRUKKEN BR INNA2 ;VOOROPLOPENDE NULLEN. ;***************************************************************************** ; DE UIC IS AL BEKEND. ZET IN DISPLAYGEBIED. ;***************************************************************************** INNA1: MOV DDPIN+4,R5 ;BYTECOUNT UIC. MOV DDPIN+6,R2 ;VAN-ADRES. MOV #UIC,R3 ;NAAR-ADRES. 1$: MOVB (R2)+,(R3)+ ;ZET IN DISPLAY-GEBIED. SOB R5,1$ ;TEST OF KLAAR. ; MOV DDPIN+4,R5 ;BYTECOUNT UIC IVM ONDERDRUKKEN ;VOOROPLOPENDE NULLEN. .PAGE ;***************************************************************************** ; ONDERDRUK VOOROPLOPENDE NULLEN. ;***************************************************************************** INNA2: MOV #UIC+1,R2 ;GA VOORBIJ DE [ STAAN. 1$: CMPB (R2),#'0 ;TEST OF IN GROUP VOOROPLOPENDE NULLEN. BNE 2$ ;BRANCH ALS NIET (MEER). ; CMPB 1(R2),#', ;DE NUL VOOR DE KOMMA. BEQ 2$ ;BRANCH ALS JA. ; CLRB (R2)+ ;MAAK BINAIRE 0, WORDT NIET GEDISPLAYED. SOB R5,1$ ;TEST OF KLAAR. ; CLR R0 ;MAG NIET VOORKOMEN. HALT 2$: ;ZOEK NU NAAR , IN [xxx,yyy]. CMPB (R2)+,#', BEQ 3$ ;BRANCH ALS GEVONDEN. SOB R5,2$ ;NOG NIET GEVONDEN. ; MOV #1,R0 ;MAG NIET VOORKOMEN. HALT 3$: ;TEST OF IN ,yyy] VOOROPLOPENDE NULLEN. CMPB (R2),#'0 BNE 4$ ;BRANCH ALS NIET (MEER). ; CMPB 1(R2),#'] ;DE NUL VOOR DE ]? BEQ 4$ ;BRANCH ALS JA. ; CLRB (R2)+ ;MAAK BINAIRE 0, WORDT NIET GEDISPLAYED. SOB R5,3$ ;TEST OF KLAAR. ; MOV #2,R0 ;MAG NIET VOORKOMEN. HALT 4$: PRINT #UIC,#9. ;DISPLAY DE UIC. ;****************************************************************************** ; KONVERTEER DE NAAM EN DISPLAY DEZE. ;****************************************************************************** CALL CONVER PRINT #FILSP,R5 ;NAAM RETURN .PAGE ;****************************************************************************** ; ; 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 .PAGE ;**************************************************************************** ; ; ROUTINE WILD ; ============ ; ONDERZOEKEN VAN *.TYP FILES. ; ; ALS ER WILDCARDS IN DE UIC ZITTEN, MOETEN WE EERST ALLE UIC'S BEPALEN ; OP HET DEVICE. BEPAAL DAAROM ALLE *.DIR FILES VAN UIC [0,0], ZODAT ; WE WETEN WELKE UIC'S ER ZIJN. ; ;**************************************************************************** WILD: BIT #14,WILCAR ;TEST OF WILDCARDS IN UIC. BEQ WILD0 ;BRANCH ALS NIET. ; CALL DIRNUL ;HAAL *.DIR ONDER [0,0] VOOR BCC WILD0 ;BRANCH ALS IETS GEVONDEN. RETURN WILD0: TST EERST ;TEST OF EENS EERDER AANGEROEPEN. BNE WILD1 ;BRANCH ALS JA. ; CLR R5 ;INDIKATIE VOOR HET EERST BR WILD2 ;AANROEPEN. WILD1: MOV NEXTIN+0,FDBIN+F.FNB+N.STAT;VOOR VOLGENDE .FIND MOV NEXTIN+2,FDBIN+F.FNB+N.NEXT MOV #1,R5 ;INDIKATIE HERHAALD OPVRAGEN. WILD2: MOV #FDBIN,R0 ;FDB ADRES CALL FLETSR ;ZOEK FILES. BCC WILD6 ;BRANCH ALS EEN FILE GEVONDEN ; CMPB FDBIN+F.ERR,#IE.NSF ;TEST OP NO SUCH FILES BNE WILD5 ;BRANCH ALS WEL FILES. ; TST EERST ;TEST OF OPHALEN EERSTE FILE NAAM. BEQ WILD3 ;BRANCH ALS JA. ;****************************************************************************** ; IN DEZE UIC ZIJN ER GEEN FILES MEER DIE VOLDOEN. ALS ER WILDCARDS IN ; DE UIC ZIJN OPGEGEVEN, MOETEN WE DE VOLGENDE UIC GAAN ONDERZOEKEN. ;****************************************************************************** BIT #14,WILCAR ;TEST OF WILDCARDS IN UIC. BEQ WILD20 ;BRANCH ALS NIET. ; CLR EERST ;MAAK WEER SCHOON VOOR VOLGENDE TST FIRST ;HEBBEN WE EEN FILE GEVONDEN IN DE UIC? BEQ 1$ ;BRANCH ALS NIET. ; MOV #1,UICSKP ;IVM BLANKO REGEL TUSSEN UICs. 1$: JMP WILD WILD20: TST IETS ;TEST OF EEN FILE GEVONDEN. BEQ WILD4 ;BRANCH ALS NIET. ; SEC ;WE ZIJN KLAAR. RETURN WILD3: BIT #14,WILCAR ;TEST OF WILDCARDS IN UIC. BNE WILD ;BRANCH ALS JA. VOLGENDE UIC. WILD4: PRINT #NOFIL,#NOFILC ;DISPLAY: No such (text) file(s) ; SEC ;WE ZIJN KLAAR. RETURN ;****************************************************************************** ; WE HEBBEN EEN HARDWARE FOUT ONTDEKT. ;****************************************************************************** WILD5: PRINT #INOPE,#INOPEC ;DISPLAY: Failed to Open Input File CALL ERRCOD ;VUL ERRORCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE CALL INNAM ;DISPLAY FILE NAAM. CALL VERSIE ;EN DE VERSIE. PRINT #LFCR,#2 ;EEN PAAR REGELS OVERSLAAN. JMP WILD1 ;GA RUSTIG VERDER. .PAGE ;****************************************************************************** ; ; WE HEBBEN EEN FILE NAAM GEVONDEN. ; ;****************************************************************************** WILD6: MOV #1,EERST MOV FDBIN+F.FNB+N.STAT,NEXTIN+0;SAVE VOOR VOLGENDE .FIND MOV FDBIN+F.FNB+N.NEXT,NEXTIN+2 ; CALL CONVER ;KONVERTEER FILENAAM ;****************************************************************************** ; TEST OF DE FILE VOLDOET ;****************************************************************************** CALL TSTNAM ;TEST OF NAAM VOLDOET. BCC WILOPE ;BRANCH ALS JA. JMP WILD1 ;FILE VOLDOET NIET. VOLGENDE. WILOPE: OPNS$R #FDBIN ;OPEN FILE VOOR SHARED READ. BCC WILOP1 ;BRANCH ALS GELUKT. ; CMPB FDBIN+F.ERR,#IE.NSF ;TEST OF FILE NU WEG. BNE WILD5 BR WILD3 WILOP1: CMPB FDBIN+F.RTYP,#R.VAR ;TEST RECORD TYPE. BNE WILOP2 ;BRANCH ALS GEEN TEXT FILE. ; BITB #FD.CR,FDBIN+F.RATT ;TEST RECORD ATTRIBUTES. BNE WILOP3 ;BRANCH ALS GOEDE FILE. WILOP2: CLOSE$ #FDBIN ;SLUIT DE FILE WEER. JMP WILD1 WILOP3: MOV #1,IETS ;WE HEBBEN EEN FILE GEVONDEN. .PAGE ;****************************************************************************** ; EINDELIJK. WE KUNNEN BEGINNEN MET HET ZOEKEN VAN DE STRING. ;****************************************************************************** WILRET: RETURN .PAGE ;****************************************************************************** ; ; ROUTINE DIRNUL ; ============== ; DEZE ROUTINE LEEST DE NAMEN VAN DE UIC IN DOOR EEN SEARCH TE DOEN ; NAAR ALLE *.DIR FILES ONDER UIC [0,0] ; ;****************************************************************************** DIRNUL: MOV #DIRDVT,DDPDIR+0 ;DEFAULT DEVICE NAAM. MOV #DIRDEV,DDPDIR+2 ;ADRES DEFAULT DEVICE NAAM. ; BITB CSIBLK+C.STAT,#CS.DVF ;TEST OF DEVICE OPGEGEVEN. BEQ DIRNU0 ;BRANCH ALS NIET. ; MOV CSIBLK+C.DEVD+0,DDPDIR+0;BYTECOUNT DEVICE NAAM. MOV CSIBLK+C.DEVD+2,DDPDIR+2;ADRES DEVICE NAAM. DIRNU0: TST DIREER ;TEST OF AL EERDER AANGEROEPEN. BNE DIRNU1 ;BRANCH ALS JA. ; CLR R5 ;TBV "FLETSR" EERSTE AANROEP. BR DIRN1A DIRNU1: MOV NEXTDI+0,FDBDIR+F.FNB+N.STAT;VOOR VOLGENDE .FIND MOV NEXTDI+2,FDBDIR+F.FNB+N.NEXT MOV #1,R5 ;TBV "FLETSR" VOLGENDE AANROEP. DIRN1A: MOV #FDBDIR,R0 ;FDB ADRES TBV DIRECTORY. ; CALL FLETSR ;ZOEK FILES. BCC DIRNU3 ;BRANCH ALS EEN FILE GEVONDEN ; CMPB FDBDIR+F.ERR,#IE.NSF ;TEST OP NO SUCH FILES BNE DIRNU2 ;BRANCH ALS WEL FILES. ; TST DIREER ;TEST OF 1STE MAAL. BEQ DIRN2A ;BRANCH ALS JA. ; TST IETS ;TEST OF FILE GEVONDEN. BEQ DIRN2A ;BRANCH ALS NIET. ; SEC RETURN DIRNU2: PRINT #DIROPE,#DIROPC ;DISPLAY: Failed to Open Directory File PRINT #ENDP,#ENDPCN ;PRINT DAT WE KLAAR ZIJN. EXIT$S DIRN2A: PRINT #NOFIL,#NOFILC ;DISPLAY: No such (text) file(s) ; SEC RETURN ;****************************************************************************** ; DIRECTORY FILE GEVONDEN. UIC [0,0] DOET NIET MEE. ;****************************************************************************** DIRNU3: MOV #1,DIREER MOV FDBDIR+F.FNB+N.STAT,NEXTDI+0;SAVE VOOR VOLGENDE .FIND MOV FDBDIR+F.FNB+N.NEXT,NEXTDI+2 ; CALL CONVER ;KONVERTEER FILENAAM ; MOV #6,R5 ;TEST OF UIC [0,0] DIRNU4: ;FILE NAAM: 000000.DIR CMPB FILSP-1(R5),#'0 BNE DIRNU5 ;BRANCH ALS GEEN [0,0] SOB R5,DIRNU4 ;ZOEK VERDER. BR DIRNU0 ;VOLGENDE .DIR FILE. .PAGE ;****************************************************************************** ; ; HET IS NIET UIC [0,0]. TEST OF OPGEGEVEN UIC OVEREENKOMT. ; ;****************************************************************************** DIRNU5: BIT #4,WILCAR ;TEST OF WILDCARD ONDER GROUP. BNE DIRNU7 ;BRANCH ALS JA. GROUP VOLDOET. ;****************************************************************************** ; VERGELIJK GROUP. DE GROUP VAN DE .DIR FILE BESTAAT ALTIJD UIC 3 CIJFERS. ;****************************************************************************** MOV #FILSP,R4 ;ADRES WAAR *.DIR NAAM STAAT. MOV WILGBY,R5 ;BYTECOUNT OPGEGEVEN GROUP UIC. SUB #3,R5 ;BEPAAL ADRES WAAR TE BEGINNEN NEG R5 ;MET ZOEKEN. ADD R5,R4 ; MOV WILGBY,R5 MOV #WILGGB,R3 ;ADRES OPGEGEVEN GROUP. DIRNU6: CMPB (R3)+,(R4)+ ;VERGELIJK. BNE DIRNU0 ;BRANCH ALS UIC NIET VOLDOET. SOB R5,DIRNU6 ;TEST VERDER. DIRNU7: BIT #10,WILCAR ;TEST OF WILDCARD ONDER OWNER. BNE DIRNUA ;BRANCH ALS JA. OWNER VOLDOET. ;****************************************************************************** ; VERGELIJK OWNER. DE OWNER VAN DE .DIR FILE BESTAAT ALTIJD UIC 3 CIJFERS. ;****************************************************************************** MOV #FILSP+3,R4 ;ADRES WAAR *.DIR NAAM STAAT. MOV WILOBY,R5 ;BYTECOUNT OPGEGEVEN OWNER UIC. SUB #3,R5 ;BEPAAL ADRES WAAR TE BEGINNEN NEG R5 ;MET ZOEKEN. ADD R5,R4 ; MOV WILOBY,R5 MOV #WILOGB,R3 ;ADRES OPGEGEVEN OWNER. DIRNU8: CMPB (R3)+,(R4)+ ;VERGELIJK. BNE DIRNU9 ;BRANCH ALS UIC NIET VOLDOET. SOB R5,DIRNU8 ;TEST VERDER. BR DIRNUA ;UIC VOLDOET. DIRNU9: JMP DIRNU0 .PAGE ;****************************************************************************** ; ; DEZE UIC VOLDOET. ; ;****************************************************************************** DIRNUA: MOV #9.,DDPIN+4 ;VUL ADRESSEN UIC IN DATA MOV #DRUIC,DDPIN+6 ;DESCRIPTOR BLOK IN. ; MOVB #'[,DRUIC+0 ;VUL UIC IN. MOVB FILSP+0,DRUIC+1 MOVB FILSP+1,DRUIC+2 MOVB FILSP+2,DRUIC+3 MOVB #',,DRUIC+4 MOVB FILSP+3,DRUIC+5 MOVB FILSP+4,DRUIC+6 MOVB FILSP+5,DRUIC+7 MOVB #'],DRUIC+8. ; CLC RETURN .PAGE ;****************************************************************************** ; ; ROUTINE TEKST ; ============= ; DEZE ROUTINE CONTROLEERT OF IN HET RECORD VAN DE INPUT FILE DE ; TE ONDERZOEKEN STRING VOORKOMT. ; INPUT : IN R5 BYTECOUNT VAN RECORD. ; OUTPUT: CARRY SET -> STRING NIET GEVONDEN. ; CARRY CLEAR -> STRING GEVONDEN. ; ;****************************************************************************** TEKST: CMP R5,STATUS+2 ;TEST OF RECORD KLEINER DAN ;TE ZOEKEN STRING. BPL TK0 ;BRANCH ALS NIET KLEINER. ; SEC ;HET KAN NOOIT DE TE ZOEKEN RETURN ;STRING ZIJN. TK0: CLR R4 ;POINTER NAAR RECORD. TK1: CLR R3 ;INITIALISEER STRING TELLER. MOV #INPUT,R1 ;IN R1 ADRES VAN TE ZOEKEN STRING. TK2: MOVB INLEES(R4),LOWCAS CMPB LOWCAS,#'A ;MAAK VAN HOOFDLETTERS KLEINE BLT TK20 ;LETTERS. CMPB LOWCAS,#'Z BGT TK20 ; BISB #40,LOWCAS TK20: CMPB LOWCAS,(R1) ;VERGELIJK MET TE ZOEKEN TEKST. BNE TK3 ;BRANCH ALS NIET GELIJK. ; INC R1 ;UPDATE POINTER VAN TE ZOEKEN STRING. INC R3 ;UPDATE STRING TELLER. INC R4 ;UPDATE POINTER VAN INPUT RECORD. ; CMP R3,STATUS+2 ;TEST OF STRING GEVONDEN IS. BEQ TK4 ;GEVONDEN. SOB R5,TK2 ;ZOEK VERDER. ; SEC ;STRING NIET GEVONDEN. RETURN ;KLAAR. STRING NIET (MEER) GEVONDEN. ;****************************************************************************** ; ; ALS R3 HIER 0 IS, HEBBEN WE NOG NIETS VAN DE STRING GEVONDEN EN ; MOETEN GEWOON DOORZOEKEN. ; ALS R3 HIER #0 IS, HEBBEN WE EEN GEDEELTE VAN DE STRING GEVONDEN, ; EN MOETEN WE TERUG ALSOF ER NIETS GEVONDEN WAS. ; ;****************************************************************************** TK3: TST R3 ;TEST OF WAT GEVONDEN. BEQ TK3A ;BRANCH ALS NIETS GEVONDEN. ; SUB R3,R4 ;UPDATE ZOEKPOINTERS. ADD R3,R5 TK3A: INC R4 ;UPDATE POINTERS. SOB R5,TK1 ; SEC ;STRING NIET GEVONDEN. RETURN TK4: CLC ;STRING IS GEVONDEN. RETURN .PAGE ;****************************************************************************** ; ; ROUTINE CHKNAM ; ============== ; DEZE ROUTINE KONTROLEERT DE FILE NAAM OP SYNTAX ERRORS. ; ; CARRY SET -> FOUT. ; ;****************************************************************************** CHKNAM: MOV CSIBLK+C.FILD+0,R5 ;BYTECOUNT FILE NAAM MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. ;****************************************************************************** ; TEST EERST OF ER EEN VERSIENUMMER IS INGEVULD. ;****************************************************************************** CHKNV1: CMPB (R4),#'; ;TEST OP SCHEIDINGTEKEN. BEQ CHKNV2 ;BRANCH ALS GEVONDEN. ; INC R4 ;VOLGEND ADRES. SOB R5,CHKNV1 ;TEST VERDER. ; CLR VERBYT ;GEEN VERSIENUMMER. BR CHKNV4 CHKNV2: MOV R5,VERBYT ;BYTECOUNT VERSIENUMMER INCL ; MOV #VERGEB,R1 ;SAVE VERSIENUMMER. CHKNV3: MOVB (R4)+,(R1)+ ;ZET IN HULPGEBIED. SOB R5,CHKNV3 CHKNV4: MOV CSIBLK+C.FILD+0,R5 ;BYTECOUNT FILE NAAM SUB VERBYT,R5 ;WE HEBBEN NU DE BYTECOUNT MOV R5,FILBYT ;VAN DE FILE NAAM + TYPE. ;****************************************************************************** ; TEST OF NAAM MAXIMAAL UIT 9 TEKENS EN MINIMAAL 1 TEKEN BESTAAT EN ; OF TYPE UIT MAXIMAAL 3 TEKENS EN MINIMAAL 1 TEKEN BESTAAT. ;****************************************************************************** MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. ;R5 STAAT NOG OP LENGTE FILE ;NAAM + TYPE. CLR R3 ;COUNTER. CHKNA0: CMPB (R4)+,#'. ;ZOEK NAAR SCHEIDING NAAM/TYPE. BEQ CHKNA1 ;BRANCH ALS GEVONDEN. ; INC R3 ;NAAM MAG MAXIMAAL 9 TEKENS ZIJN. SOB R5,CHKNA0 ;ZOEK VERDER. BR CHKNAF ;FILE NAAM IS FOUT. CHKNA1: TST R3 ;TEST OF ER IETS VOOR DE . STAAT. BEQ CHKNAF ;BRANCH ALS NIET. ; CMP R3,#9. ;TEST OF GROTER DAN 9 TEKENS. BHI CHKNAF ;BRANCH ALS FOUT. ; MOV R3,WILNBY ;VUL BYTECOUNT FILE NAAM IN. ; DEC R5 ;1 MINDER VANWEGE DE PUNT. BEQ CHKNAF ;BRANCH ALS GEEN "TYP" INGEVULD. ; CMP R5,#3 ;"TYP" MAG MAXIMAAL 3 ZIJN. BHI CHKNAF ;BRANCH ALS FOUT. ;****************************************************************************** ; IN DE HELE FILE NAAM MAG MAAR 1 . STAAN. ;****************************************************************************** MOV FILBYT,R5 ;BYTECOUNT FILE NAAM MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. CLR R3 ;COUNTER. CHKNA5: CMPB (R4)+,#'. ;ZOEK . BNE CHKNA6 ;BRANCH GEEN . ; INC R3 ;NAAM MAG MAXIMAAL 9 TEKENS ZIJN. CHKNA6: SOB R5,CHKNA5 ;ZOEK VERDER. ; CMP R3,#2 ;TEST HOEVEEL . BLO CHKNAO ;BRANCH ALS GOED. CHKNAF: PRINT #PARSE,#PARSEC ;DISPLAY: Error from Parse. PRINT #BADFI,#BADFIC ;DISPLAY: Bad file name. CALL DISCOM ;DISPLAY INGETYPTE STRING. ; SEC RETURN CHKNAO: CLC RETURN .PAGE ;****************************************************************************** ; ; ROUTINE WILNAM ; ============== ; DEZE ROUTINE KONTROLEERT OF IN DE FILE NAAM WILDCARDS VOORKOMEN. ; ;****************************************************************************** WILNAM: MOV WILNBY,R3 ;HAAL BYTECOUNT FILE NAAM OP. ;****************************************************************************** ; DE GROOTTE VAN DE FILE NAAM STAAT NU IN R3. TEST OF WILDCARDS IN ; NAAM, DWZ TEL HET AANTAL * EN %. ;****************************************************************************** WILNA1: CLR R5 ;* TELLER. MOV #WILNGB,R1 ;ADRES OM NAAM TE SAVEN. MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. WILNA2: MOVB (R4),(R1)+ ;SAVE FILE NAAM. CMPB (R4),#'* ;TEST OF *. BEQ WILN20 ;BRANCH ALS *. ; CMPB (R4),#'% ;TEST OP %. BNE WILNA3 ;BRANCH ALS NIET. WILN20: INC R5 ;VERHOOG * TELLER. WILNA3: INC R4 ;VOLGEND TEKEN. SOB R3,WILNA2 ;ZOEK VERDER. ; TST R5 ;TEST OF * IN FILE NAAM. BEQ WILNAO ;BRANCH ALS NIET. ; BIS #1,WILCAR ;GEEF AAN DAT ER * IN NAAM ZIT. WILNAO: RETURN .PAGE ;****************************************************************************** ; ; ROUTINE WILTYP ; ============== ; DEZE ROUTINE KONTROLEERT OF ER EEN * IN DE FILE TYPE VOORKOMT. ; ; CARRY SET -> FOUT. ; ;****************************************************************************** WILTYP: MOV FILBYT,R5 ;BYTECOUNT FILE NAAM + TYPE. MOV CSIBLK+C.FILD+2,R4 ;ADRES FILE NAAM. SUB WILNBY,R5 ;BEPAAL BYTECOUNT TYPE. DEC R5 ;-1 VANWEGE PUNT. MOV R5,WILTBY ;SAVE BYTECOUNT. ; ADD WILNBY,R4 ;BEPAAL ADRES WAAR TYPE BEGINT. INC R4 ;+1 VANWEGE PUNT. ; CLR R3 ;* TELLER. MOV #WILTGB,R1 ;ADRES OM TYPE TE SAVEN. WILTY0: MOVB (R4),(R1)+ ;SAVE FILE NAAM. CMPB (R4)+,#'* ;TEST OF *. BNE WILTY1 ;BRANCH ALS GEEN *. ; INC R3 ;VERHOOG * TELLER. WILTY1: SOB R5,WILTY0 ;ZOEK VERDER. ; TST R3 ;TEST OF * IN FILE TYPE. BEQ WILTYO ;BRANCH ALS NIET. ; CMP R3,WILTBY ;TEST OF ALLEMAAL *. BNE WILTYF ;BRANCH ALS NIET. ; BIS #2,WILCAR ;GEEF AAN DAT ER * IN TYPE ZIT. WILTYO: CLC RETURN WILTYF: PRINT #PARSE,#PARSEC ;DISPLAY: Error from parse. PRINT #ERTYP,#ERTYPC ;DISPLAY: Type must be explicit or "*". CALL DISCOM ;DISPLAY INGETYPTE STRING. ; SEC RETURN .PAGE ;****************************************************************************** ; ; ROUTINE WILUIC ; ============== ; DEZE ROUTINE KONTROLEERT OF ER EEN * IN DE DIRECTORY STRING (UIC) ZIT. ; ; EVT FOUTEN ZIJN ER AL DOOR DE COMMAND SEMANTIC PARSER UITGEHAALD. ; ;****************************************************************************** WILUIC: BITB CSIBLK+C.STAT,#CS.DIF ;TEST OF DIRECTORY INGEVULD IS. BEQ WILDIO ;BRANCH ALS NIET AANWEZIG. ; MOV CSIBLK+C.DIRD+0,R5 ;BYTECOUNT DIRECTORY STRING. BEQ WILDIO ;BRANCH ALS NIET INGEVULD. ; MOV CSIBLK+C.DIRD+2,R4 ;ADRES DIRECTORY STRING. WILUI1: CMPB (R4)+,#'* ;TEST OP * IN DIRECTORY STRING. BEQ WILUI2 ;BRANCH ALS * IN STRING. SOB R5,WILUI1 ;ZOEK VERDER. BR WILDIO ;GEEN * IN DIRECTORY STRING. ;****************************************************************************** ; ER ZIT EEN * IN DE UIC DEFINITIE. ONDERZOEK EERST GROUP. ;****************************************************************************** WILUI2: MOV CSIBLK+C.DIRD+0,R5 ;BYTECOUNT DIRECTORY STRING. SUB #2,R5 ;-2 VANWEGE []. MOV R5,WILGBY ;SAVE BYTECOUNT. MOV CSIBLK+C.DIRD+2,R4 ;ADRES DIRECTORY STRING. INC R4 ;+1 VANWEGE [. ; CLR R3 ;* TELLER. MOV #WILGGB,R1 ;ADRES SAVE GEBIED GROUP. WILUI3: CMPB (R4),#', ;ZOEK SCHEIDING TUSSEN GROUP/OWNER OP. BEQ WILUI5 ;BRANCH ALS GEVONDEN. ; MOVB (R4),(R1)+ ;ZET IN SAVE GEBIED. ; CMPB (R4),#'* ;TEST OF * IN GROUP. BNE WILUI4 ;BRANCH ALS NIET. ; INC R3 ;VERHOOG * TELLER GROUP. WILUI4: INC R4 ;VOLGEND ADRES. SOB R5,WILUI3 ;TEST OF KLAAR. BR WILDIF ;BRANCH ALS FOUT. WILUI5: SUB R5,WILGBY ;BYTECOUNT GROUP. BEQ WILDIF ;BRANCH ALS FOUT. ; TST R3 ;TEST 0F * IN GROUP. BEQ WILUI6 ;BRANCH ALS NIET. ; CMP R3,WILGBY ;TEST OF ALLEMAAL *. BNE WILDIF ;BRANCH ALS NIET. FOUT. ; BIS #4,WILCAR ;GEEF AAN DAT ER EEN * IN GROUP ZIT. WILUI6: DEC R5 ;-1 VANWEGE , BEQ WILDIF ;BRANCH ALS GEEN OWNER AANWEZIG. ;****************************************************************************** ; GA OWNER ONDERZOEKEN. ;****************************************************************************** MOV R5,WILOBY ;BYTECOUNT. INC R4 ;+1 VANWEGE , ; CLR R3 ;* TELLER. MOV #WILOGB,R1 ;ADRES SAVE GEBIED OWNER. WILUI7: MOVB (R4),(R1)+ ;ZET IN SAVE GEBIED. ; CMPB (R4),#'* ;TEST OF * IN OWNER. BNE WILUI8 ;BRANCH ALS NIET. ; INC R3 ;VERHOOG * TELLER OWNER. WILUI8: INC R4 ;VOLGEND ADRES. SOB R5,WILUI7 ;TEST OF KLAAR. ; SUB R5,WILOBY ;BYTECOUNT OWNER. ; TST R3 ;TEST 0F * IN OWNER. BEQ WILDIO ;BRANCH ALS NIET. ; CMP R3,WILOBY ;TEST OF ALLEMAAL *. BNE WILDIF ;BRANCH ALS NIET. FOUT. ; BIS #10,WILCAR ;GEEF AAN DAT ER EEN * IN OWNER ZIT. WILDIO: CLC ;UIC IS GOED. RETURN WILDIF: PRINT #PARSE,#PARSEC ;DISPLAY: Error from parse PRINT #ERUIC,#ERUICC ;DISPLAY: UIC must be explicit or "*". CALL DISCOM ;DISPLAY INGETYPTE STRING. ; SEC RETURN .PAGE ;****************************************************************************** ; ; ROUTINE TSTNAM ; ============== ; DEZE ROUTINE BEPAALT OF DE FILE NAAM VOLDOET AAN EVT WILDCARDS ; KRITERIA. IN R5 STAAT BYTECOUNT FILE NAAM. ; ; WILDCARD KRITERIA ; ----------------- ; EEN % VERTEGENWOORDIGT 1 TEKEN, WELKE NIET VAN BELANG IS. ; EEN * VERTEGENWOORDIGT MINSTENS 1 TEKEN, WELKE NIET VAN BELANG ZIJN. ; ; CARRY SET -> SLA FILE OVER. ; ;****************************************************************************** TSTNAM: BIT #1,WILCAR ;TEST OF WILDCARDS IN NAAM. BNE TSTN0 ;BRANCH ALS JA. JMP TSTNAO ;BRANCH ALS GEEN WILDCARDS IN NAAM. ;****************************************************************************** ; ; BEPAAL EERST BYTECOUNT NAAM. IN R5 STAAT BYTECOUNT NAAM + TYPE. ; ;****************************************************************************** TSTN0: CMPB FILSP-1(R5),#'. ;ZOEK NAAR SCHEIDING NAAM/TYPE. BEQ TSTN1 ;BRANCH ALS GEVONDEN. SOB R5,TSTN0 ;TEST OF KLAAR. JMP TSTNAF ;FOUT. ER ZIT GEEN . IN. TSTN1: DEC R5 ;-1 VANWEGE PUNT. BEQ TSTNAF ;BRANCH ALS GEEN NAAM. ;****************************************************************************** ; EERST EVEN AAN DE ACHTERKANT KIJKEN WAT ER STAAT. ;****************************************************************************** MOV #FILSP,R1 ;ADRES NAAM. ADD R5,R1 DEC R1 ;ZET OP LAATSTE TEKEN. ; MOV WILNBY,R4 ;BYTECOUNT ZOEKGEBIED. MOV #WILNGB,R2 ;ADRES INGETYPTE WILDCARDS. ADD R4,R2 DEC R2 ;ZET OP LAATSTE TEKEN. TSTN10: CMPB (R2),#'* ;TEST OF * GEVONDEN. BEQ TSTN17 ;BRANCH ALS *. TSTN11: CMPB (R2),#'% ;ALS %, TEKEN NIET VAN BELANG. BEQ TSTN13 ;BRANCH ALS %. TSTN12: CMPB (R2),(R1) ;TEKENS MOETEN GELIJK ZIJN. BNE TSTNAF ;BRANCH ALS ONGELIJK. TSTN13: DEC R1 ;VERLAAG POINTERS. DEC R2 DEC R4 DEC R5 ; TST R4 ;TEST OF KLAAR IN ZOEKGEBIED. BNE TSTN15 ;BRANCH ALS NIET. ; TST R5 ;TEST OF KLAAR MET NAAM. BEQ TSTNAO ;BRANCH ALS KLAAR. TSTN14: JMP TSTNAF ;FOUT. NAAM VOLDOET NIET. TSTN15: TST R5 ;TEST OF KLAAR IN NAAM. BNE TSTN10 ;BRANCH ALS NIET. TSTN16: CMPB (R2),#'* ;ER MOGEN NU ALLEEN * VOOR STAAN. BNE TSTNAF ;BRANCH ALS GEEN *. FOUT. ; DEC R2 ;VOLGEND TEKEN. DEC R4 ;TEST OF KLAAR. BNE TSTN16 ;BRANCH ALS NIET. JMP TSTNAO ;ER STAAN ALLEEN * VOOR. .PAGE ;****************************************************************************** ; WE GAAN NU VANAF HET BEGIN VERGELIJKEN ;****************************************************************************** TSTN17: CLR ASTRIX ;WIS INDIKATIE *. ; MOV #FILSP,R1 ;ADRES NAAM. MOV #WILNGB,R2 ;ADRES INGETYPTE WILDCARDS. TSTN2: CMPB (R2),#'* ;TEST OF *. BNE TSTN4 ;BRANCH ALS NIET. ; INC ASTRIX ;GEEN AAN DAT * GEVONDEN. TSTN3: INC R2 ;VERHOOG ALLEEN ZOEK-POINTER. DEC R4 ;TEST OF AAN HET EINDE ZOEKGEBIED. BNE TSTN2 ;BRANCH ALS NIET. BR TSTNAO ;EINDE ZOEKGEBIED. NAAM VOLDOET. ;****************************************************************************** ; TEST OF % IN ZOEKGEBIED. ;****************************************************************************** TSTN4: CMPB (R2),#'% BNE TSTN8 ;BRANCH ALS GEEN %. TSTN5: INC R1 ;VERHOOG POINTER NAAM. DEC R5 ;TEST OF AAN EINDE NAAM. BNE TSTN7 ;BRANCH ALS NIET. ;****************************************************************************** ; EINDE NAAM. IN HET ZOEKGEBIED MOGEN NU ALLEEN NOG * STAAN. ;****************************************************************************** TSTN6: INC R2 ;VERHOOG ZOEKPOINTER. DEC R4 ;TEST OF AAN EINDE ZOEKGEBIED. BEQ TSTNAO ;BRANCH ALS AAN EINDE. NAAM VOLDOET. ; CMPB (R2),#'* ;TEST OF *. BEQ TSTN6 ;BRANCH ALS *. ZOEK VERDER. BR TSTNAF ;GEEN *. NAAM VOLDOET NIET. ;****************************************************************************** ; NOG NIET AAN EINDE NAAM. TEST OF AAN EINDE ZOEKGEBIED. ;****************************************************************************** TSTN7: INC R2 ;VERHOOG ZOEKPOINTER. DEC R4 ;TEST OF AAN EINDE ZOEKGEBIED. BNE TSTN2 ;BRANCH ALS NIET. ;****************************************************************************** ; TEST OF ER VOOR DE % EEN * STOND. ALLEEN DAN IS HET GOED. ;****************************************************************************** TST ASTRIX ;TEST OF * VOOR %. BNE TSTNAO ;BRANCH ALS JA. GOED. BR TSTNAF ;ER ZAT GEEN * VOOR. NAAM ;VOLDOET NIET. ;****************************************************************************** ; GEEN % OF *. HET MOET EEN GEWOON TEKEN ZIJN. ;****************************************************************************** TSTN8: CMPB (R2),(R1) ;VERGELIJK TEKENS. BNE TSTN9 ;BRANCH ALS ONGELIJK. ;****************************************************************************** ; DE TEKENS ZIJN GELIJK. ALS ER EEN * VOOR STOND, MOETEN WE ECHTER EVEN ; VERDER KIJKEN. ;****************************************************************************** TST ASTRIX ;STOND ER EEN * VOOR? BEQ TSTN5 ;BRANCH ALS NIET. ; CMP R4,#1 ;TEST OF LAATSTE UIT ZOEKGEBIED. BNE TSTN82 ;BRANCH ALS NIET. ;****************************************************************************** ; WE MOETEN NU TESTEN OF HET LAATSTE TEKEN VAN DE NAAM GELIJK IS AAN ; HET LAATSTE TEKEN IN HET ZOEKGEBIED. ;****************************************************************************** TSTN80: CMP R5,#1 ;TEST OF OOK LAATSTE VAN NAAM. BEQ TSTNAO ;BRANCH ALS JA. GOED. TSTN81: INC R1 ;VOLGENDE UIT NAAM. DEC R5 ;TEST OF KLAAR. BEQ TSTNAF ;BRANCH ALS KLAAR. NIET GEVONDEN. ; CMPB (R2),(R1) ;VERGELIJK TEKENS. BNE TSTN81 ;BRANCH ALS ONGELIJK. ZOEK VERDER. BR TSTN80 ;****************************************************************************** ; WE MOETEN NU KIJKEN OF ER NA HET ZOJUIST VERGELEKEN TEKEN ALLEEN NOG ; * VOLGEN. ALS JA -> NAAM VOLDOET. ;****************************************************************************** TSTN82: MOV R2,SAVR2 ;SAVE POINTERS ZOEKGEBIED. MOV R4,SAVR4 TSTN83: INC R2 ;VOLGENDE UIT ZOEKGEBIED. DEC R4 ;TEST OF KLAAR. BEQ TSTNAO ;BRANCH ALS KLAAR. GOED. ; CMPB (R2),#'* ;TEST OF *. BEQ TSTN83 ;BRANCH ALS JA. ; MOV SAVR2,R2 ;RESTORE POINTERS EN GA VERDER MOV SAVR4,R4 ;NORMALE PROCEDURE. ; CLR ASTRIX ;GEEN * MEER. BR TSTN5 ;****************************************************************************** ; TEKENS ONGELIJK. ALLEEN ALS ER VOOR HET TEKEN EEN * STOND MOGEN WE ; VERDER GAAN. ;****************************************************************************** TSTN9: TST ASTRIX ;STOND ER EEN * VOOR? BEQ TSTNAF ;BRANCH ALS NIET. NAAM VOLDOET NIET. ; INC R1 ;VERHOOG ALLEEN NAAM POINTER. DEC R5 ;TEST OF AAN EINDE NAAM. BNE TSTN2 ;BRANCH ALS NIET. VERDER ZOEKEN. TSTNAF: SEC ;NAAM OVERSLAAN. RETURN TSTNAO: CLC ;NAAM NIET OVERSLAAN. RETURN .PAGE ;****************************************************************************** ; ; ROUTINE VERSIE ; ============== ; DEZE ROUTINE KONVERTEERT HET VERSIENUMMER. ; ;****************************************************************************** VERSIE: MOV R5,-(SP) ; MOV #VERGCN,R5 VERS0: CLRB VERGEB-1(R5) ;MAAK GEBIED SCHOON. SOB R5,VERS0 ; MOV FDBIN+F.FNB+N.FVER,R5 ;VERSIENUMMER IN R5. MOV #VERGEB,R3 ;ADRES OUTPUTGEBIED. ; MOVB #';,(R3)+ ;SCHEIDINGSTEKEN. ; MOV #CONTCN,R2 ;AANTAL MACHTEN VAN 8. CLR R1 ;NULONDERDRUKKING INDIKATIE. VERS1: CLR R4 ;DEEL DOOR MACHT VAN 8. DIV CONTAB-2(R2),R4 ; TST R1 ;TEST OF ER NULLEN MOGEN WORDEN ;ONDERDRUKT. BNE VERS2 ;BRANCH ALS NIET. ; TST R4 ;ONDERDRUK NULLEN. BEQ VERS3 ;BRANCH ALS 0. VERS2: MOVB R4,(R3) ;ZET IN OUTPUT GEBIED. BISB #60,(R3)+ ; INC R1 ;INDIKATIE NULONDERDRUKKING. VERS3: SUB #2,R2 ;VOLGEND CIJFER. BNE VERS1 ;BRANCH ALS NOG NIET KLAAR. ; MOVB R5,(R3) ;HET LAATSTE CIJFER DOEN WE BISB #60,(R3) ;APART. ; PRINT #VERGEB,#7 ;DISPLAY VERSIENUMMER. ; MOV (SP)+,R5 RETURN .PAGE ;****************************************************************************** ; ; ROUTINE DATUM ; ============= ; DEZE ROUTINE DISPLAYED DE DATUM/TIJD. ; ;****************************************************************************** DATUM: GTIM$S #DATTYD ;HAAL DATUM/TIJD OP. ; MOV DATTYD+G.TIDA,R5 ;KONVERTEER DATUM. CALL BINASC MOVB ASCII+0,SCRDAT+0 ;ZET IN TEXT. MOVB ASCII+1,SCRDAT+1 ; CMPB SCRDAT+0,#'0 ;VOORLOPENDE NUL VERWIJDEREN. BNE 1$ ;BRANCH ALS GEEN NUL. ; MOVB #' ,SCRDAT+0 ;MAAK ER EEN BLANK VAN. 1$: MOV DATTYD+G.TIMO,R5 ;MAAND. DEC R5 MUL #3,R5 ADD #DATMND,R5 ;IN R5 NU START-ADRES GEWENSTE MAAND. MOVB (R5)+,SCRMND+0 ;ZET IN TEXT. MOVB (R5)+,SCRMND+1 MOVB (R5)+,SCRMND+2 ; MOV DATTYD+G.TIYR,R5 ;JAARTAL. CLR R4 DIV #100.,R4 CALL BINASC ;KONVERTEER JAARTAL. MOVB ASCII+0,SCRJAR+0 ;ZET IN TEXT. MOVB ASCII+1,SCRJAR+1 ; MOV DATTYD+G.TIHR,R5 ;UREN. CALL BINASC ;KONVERTEER. MOVB ASCII+0,SCRUUR+0 ;ZET IN TEXT. MOVB ASCII+1,SCRUUR+1 ; CMPB SCRUUR+0,#'0 ;VOORLOPENDE NUL VERWIJDEREN. BNE 2$ ;BRANCH ALS GEEN NUL. ; MOVB #' ,SCRUUR+0 ;MAAK ER EEN BLANK VAN. 2$: MOV DATTYD+G.TIMI,R5 ;MINUTEN. CALL BINASC ;KONVERTEER. MOVB ASCII+0,SCRMIN+0 ;ZET IN TEXT. MOVB ASCII+1,SCRMIN+1 ; PRINT #SCRKOP,#SCRKOC ;DISPLAY DATUM/TIJD. RETURN .PAGE ;****************************************************************************** ; ; START VAN HET PROGRAMMA. ; VRAAG EERST OM DE TE ZOEKEN STRING. ; ;****************************************************************************** BEGIN: QIOW$S #IO.RPR,#5,#1,,#STATUS,,<#INPUT,#INPCN,,#ASK,#ASKCN> CMPB STATUS+1,#33 ;TEST OP BNE 1$ ;BRANCH ALS GEEN GETYPT. BR 2$ 1$: TST STATUS+2 ;BYTECOUNT. BNE BEG0 ;BRANCH ALS IETS INGEVULD. 2$: JMP EXIT2 ;****************************************************************************** ; ; MAAK VAN INTYPGBIED LOWER CASE LETTERS. ; ;****************************************************************************** BEG0: MOV STATUS+2,R5 ;AANTAL TEKENS. BEG00: MOVB INPUT-1(R5),PINPUT-1(R5);SAVE INGETYPTE TEKST. SOB R5,BEG00 ; MOV STATUS+2,R5 ;AANTAL TEKENS. BEG01: CMPB INPUT-1(R5),#'A ;GRENS LETTER A. BLT BEG02 ;GEEN LETTER. ; CMPB INPUT-1(R5),#'Z ;GRENS Z. BGT BEG02 ;GEEN LETTER. ; BISB #40,INPUT-1(R5) ;MAAK LOWER CASE LETTER. BEG02: SOB R5,BEG01 ;TEST OF KLAAR. ;****************************************************************************** ; ; TEST OF ER "HELP" IS INGETYPT. ; ;****************************************************************************** CMP STATUS+2,#4 ;TEST OF ER "HELP" IS INGETYPT BNE START ;BRANCH ALS NIET. ; MOV #INPUT,R4 ;ADRES WAAR TEKST STAAT. MOV #HELTEK,R3 ;TEKST "HELP" MOV #HELTEC,R5 ;BYTECOUNT. BEG1: CMPB (R4)+,(R3)+ ;VERGELIJK TEKSTEN. BNE START ;BRANCH ALS GEEN "HELP" SOB R5,BEG1 ;GA VERDER. ; PRINT #HELP,#HELPCN ;GEEF VERKLARENDE TEKST. JMP BEGIN ;OPNIEUW. .PAGE ;****************************************************************************** ; WE KUNNEN NU BEGINNEN. INITIALISEER E.E.A. ;****************************************************************************** START: CLR FIRST CLR TELLER+0 ;WIS RECORDTELLER. CLR TELLER+2 CLR WILNBY ;WILDCARD INDIKATIES. CLR WILTBY CLR WILGBY CLR WILOBY CLR WILCAR CLR DIREER CLR EERST CLR IETS CLR SWMASK CLR FOUND ; CALL COMMAN ;BEHANDEL COMMAND LINE. BCC ST1 ;BRANCH ALS IETS GEVONDEN. JMP EXIT ;****************************************************************************** ; ; DE INPUT FILE BESTAAT EN IS GE-OPEND. ; GA RECORD VOOR RECORD LEZEN UIT DE TE ONDERZOEKEN FILE. ; ;****************************************************************************** ST1: INC TELLER ;VERHOOG RECORDTELLER. ; GET$ #FDBIN ;LEES RECORD UIT INPUT FILE BCC ST2 ;BRANCH ALS GELUKT. ; CMPB FDBIN+F.ERR,#IE.EOF ;TEST OP END-OF-FILE BNE ST1A ;BRANCH ALS NIET. JMP KLAAR ST1A: PRINT #IN,#INC ;DISPLAY: I/O Error on Input File CALL ERRCOD ;VUL FOUTCODE IN. PRINT #ERRCO,#ERRCOC ;DISPLAY FOUTCODE. ; CALL INNAM ;DISPLAY FILE NAAM. CALL VERSIE ;EN DE VERSIE. PRINT #LFCR,#2 JMP KLAAR ;WE GAAN GEWOON VERDER. ST2: MOV FDBIN+F.NRBD,R5 ;SAVE BYTECOUNT REGEL. BEQ ST1 ;BRANCH ALS LEEG RECORD. ST3: CALL TEKST ;ZOEK STRING. BCS ST1 ;STRING NOG NIET GEVONDEN. ;****************************************************************************** ; ; STRING IS GEVONDEN. DISPLAY DE NAAM VAN DE FILE. ; ;****************************************************************************** MOV #1,FOUND ;WE HEBBEN DE TEXT GEVONDEN. ; BIT #LIMSK,SWMASK ;TEST OF ALLEEN PROGRAMMA NAAM GEWENST. BEQ ST7 ;BRANCH ALS JA. ;****************************************************************************** ; FILE NAAM DISPLAYEN EN REGEL(S). ;****************************************************************************** TST FIRST ;TEST OF NAAM AL GEPRINT. BNE ST4 ;BRANCH ALS AL GEPRINT. ; PRINT #LFCR,#2 ;NIEUWE REGEL. PRINT #LFCR,#2 ;NIEUWE REGEL. CALL INNAM ;DISPLAY FILE NAAM. CALL VERSIE ;EN DE VERSIE. ; MOV #1,FIRST ;GEEF AAN DAT FILE NAAM GEPRINT IS. ST4: MOV #TELLER,R3 ;KONVERTEER RECORD-NUMMER NAAR ASCII. MOV #TELVUL,R4 MOV #5,R5 CALL BIDASC ; MOV #5,R5 MOV #TELVUL,R4 ST5: CMPB (R4),#'0 ;ONDERDRUK NULLEN. BNE ST6 ;BRANCH ALS GEEN 0. ; MOVB #' ,(R4)+ SOB R5,ST5 ST6: PRINT #TEL,#TELCNT ;DISPLAY RECORDNUMMER. ; PRINT #INLEES,FDBIN+F.NRBD ;BYTECOUNT REGEL. JMP ST1 ;VOLGEND RECORD. ;****************************************************************************** ; ALLEEN DE FILE NAAM DISPLAYEN. ;****************************************************************************** ST7: TST FIRST ;TEST OF KOPREGEL DISPLAYEN. BNE ST8 ;BRANCH ALS NIET. ; PRINT #TEXT,#TEXTCN ;DISPLAY KOPREGEL. ST8: TST UICSKP ;BLANKO REGEL IVM NIEUWE UIC? BEQ ST8A ;BRANCH ALS NIET. ; PRINT #LFCR,#2 ;NIEUWE REGEL. CLR UICSKP ;NU NIET MEER. ST8A: PRINT #LFCR,#2 ;NIEUWE REGEL. CALL INNAM ;DISPLAY FILE NAAM. CALL VERSIE ;EN DE VERSIE. ; MOV #1,FIRST ;GEEF AAN DAT FILE NAAM GEPRINT IS. .PAGE ;****************************************************************************** ; ; EXIT-GEDEELTE. CLOSE DE FILE. ; ;****************************************************************************** KLAAR: CLOSE$ #FDBIN ;CLOSE INPUT FILE ; TST WILCAR ;TEST OF WILDCARDS IN HET SPEL. BEQ EXIT ;BRANCH ALS NIET. ; CLR TELLER+0 CLR TELLER+2 ; BIT #LIMSK,SWMASK ;TEST OF ALLEEN PROGRAMMA NAAM GEWENST. BEQ KLAAR1 ;BRANCH ALS JA. ; CLR FIRST KLAAR1: CALL WILD1 ;GA VERDER MET ZOEKEN. BCS EXIT ;BRANCH ALS KLAAR. JMP ST1 ;BEHANDEL VOLGENDE FILE. EXIT: TST FOUND ;TEXT GEVONDEN? BNE EXIT1 ;BRANCH ALS JA. ; PRINT #NOFON,#NOFONC ;TEXT NIET KUNNEN VINDEN. EXIT1: BITB GCML+F.RCTL,#FD.TTY ;BRANCH ALS AANGEROEPEN VIA @FILE BNE EXIT2 ;BRANCH ALS NIET. JMP START ;VOLGENDE COMMAND LINE UIT @FILE. EXIT2: PRINT #ENDP,#ENDPCN ;PRINT DAT WE KLAAR ZIJN. EXIT$S .END BEGIN