	.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.
;
;******************************************************************************
;
;	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$,OPEN$R,FINIT$
	.MCALL	CLOSE$,GET$,CSI$SW,CSI$ND,CSI$SV,NMBLK$
	.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,,,,<PRADR,PRBYT>
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
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.
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.
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
	.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$
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.
;
;******************************************************************************
TEL:	.ASCII	<12><15>
TELVUL:	.ASCII	%.....  %
TELCNT	=	.-TEL
;
ASK:	.ASCII	<12><15>%SRC>Enter string to search for or "HELP":%
ASKCN	=	.-ASK
;
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>%SRC - Text found in:%<12><15>
TEXTCN	=	.-TEXT
LFCR:	.ASCII	<12><15>
SRC:	.ASCII	<12><15>
	.ASCII	%SRC -- %
SRCC	=	.-SRC
;******************************************************************************
;
;	FOUTEN VAN GET COMMAND LINE.
;
;******************************************************************************
SRCCOM:	.ASCII	<12><15>
	.ASCII	%SRC -- Get Command Line - %
SRCCOC	=	.-SRCCOM
;
GEIOR:	.ASCII	%I/O Error%<12><12><15>
GEIORC	=	.-GEIOR
;
GEOPR:	.ASCII	%Failed to Open @ File%<12><12><15>
GEOPRC	=	.-GEOPR
;
DIROPE:	.ASCII	%Failed to Open Directory File%<12><12><15>
DIROPC	=	.-DIROPE
;
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	%SRC -- Command Syntax Error%<12><12><15>
SYNCOC	=	.-SYNCOM
;******************************************************************************
;
;	ERRORS FROM PARSE
;
;******************************************************************************
PARSE:	.ASCII	<12><15>
	.ASCII	%SRC -- Error from Parse - %
PARSEC	=	.-PARSE
;
MOREI:	.ASCII	%Too Ambiguous%<12><15>
MOREIC	=	.-MOREI
;
NOIN:	.ASCII	%No File Specified%<12><15>
NOINC	=	.-NOIN
;
BADFI:	.ASCII	%Bad file name%<12><15>
BADFIC	=	.-BADFI
;
ERUIC:	.ASCII	%UIC must be explicit or "*" (wildcards)%<12><15>
ERUICC	=	.-ERUIC
;
ERTYP:	.ASCII	%File type must be explicit or "*" (wildcards)%<12><15>
ERTYPC	=	.-ERTYP
	.PAGE
;******************************************************************************
;
;	FOUTEN TIJDENS DISK I/O
;
;******************************************************************************
INOPE:	.ASCII	<12><15>
	.ASCII	%SRC -- Failed to Open Input File - %
INOPEC	=	.-INOPE
;
NOTEXT:	.ASCII	<12><15>
	.ASCII	%SRC -- No text file - %
NOTEXC	=	.-NOTEXT
;
NOFIL:	.ASCII	<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>
	.ASCII	%SRC -- I/O error on Input File - %
INC	=	.-IN
	.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:	
	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	#SRC,#SRCC			;DISPLAY: SRC -- 
	PRINT	GCML+G.CMLD+2,GCML+G.CMLD+0	;DISPLAY INGETYPTE REGEL.
;
	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
	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
	BR	COMUIT
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	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
	BR	COMUIT
COM05:
	PRINT	#UNKNO,#UNKNOC			;DISPLAY: Undefined Error
	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
	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	#SRC,#SRCC			;DISPLAY: SRC --
	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 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 file specified
	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.
;
	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 (text) file(s)
COM80:
	CALL	INNAM				;DISPLAY FILE NAAM
	PRINT	#LFCR,#2			;EEN PAAR REGELS OVERSLAAN.
	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.
;
	PRINT	#LFCR,#2			;EEN PAAR REGELS OVERSLAAN.
	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	INNAM
;	=============
;	DEZE ROUTINE DISPLAYED DE NAAM VAN DE INPUT FILE
;
;*****************************************************************************
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.
;
	TST	DDPIN+4				;TEST OF UIC BEKEND IS.
	BNE	INNA1				;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	INNA2
INNA1:
	PRINT	DDPIN+6,DDPIN+4			;UIC
INNA2:
	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
	JMP	WILD				;UIC.
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.
	PRINT	#LFCR,#2			;EEN PAAR REGELS OVERSLAAN.
	PRINT	#LFCR,#2			;EEN PAAR REGELS OVERSLAAN.
	JMP	COMUIT				;WE GAAN NIET 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:
	OPEN$R	#FDBIN				;OPEN INPUT FILE.
	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		;BYTECOUNT 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
	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.
;
	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 "*".
;
	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			;SAVE 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 "*".
;
	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
;******************************************************************************
;
;	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 <ESC>
	BNE	1$				;BRANCH ALS GEEN <ESC> GETYPT.
	BR	2$
1$:
	TST	STATUS+2			;BYTECOUNT.
	BNE	BEG0				;BRANCH ALS IETS INGEVULD.
2$:
	JMP	UIT
;******************************************************************************
;
;	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.
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
;
	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.
	PRINT	#LFCR,#2
	PRINT	#LFCR,#2
;
	CLOSE$	#FDBIN				;CLOSE INPUT FILE.
	JMP	EXIT
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.
;
;******************************************************************************
	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:
	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				;ALTIJD PROGRAMMANAAM DISPLAYEN.
KLAAR1:
	CALL	WILD1				;GA VERDER MET ZOEKEN.
	BCS	EXIT				;BRANCH ALS KLAAR.
	JMP	ST1				;BEHANDEL VOLGENDE FILE.
EXIT:
	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	BEGIN
