REM ACSL SENIOR
PROGRAM 2
REM BY CHRISTIAN
CHIMENKO
DIM
search$(5),data$(10),checks(999)
DO
INPUT PROMPT "Data:
":data$(1),data$(2),data$(3),data$(4),data$(5),data$(6),data$(7),data$(8),data$(9),data$(10)
FOR i=1 to 5
PRINT "Search #";str$(i);
INPUT prompt ": ":search$(i)
NEXT i
PRINT
FOR i=1 to 5
LET pflag=0
PRINT "Output
#";str$(i);": ";
FOR j=1 to 10
MAT redim checks(999)
FOR k=1 to len(search$(i))
LET checks(k)=0
NEXT k
LET misflag=0
LET a=0
LET ba=0
LET start=0
LET last=0
CALL check(search$(i),data$(j))
IF misflag=0 then
PRINT data$(j);" ";
LET PFLAG=1
END IF
NEXT j
IF PFLAG=0 THEN PRINT "No
Match";
PRINT
NEXT i
PRINT
PRINT
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
PRINT
LOOP until
search$(4)="QUIT"
SUB
check(search$,data$)
MAT redim checks(len(search$))
FOR k=1 to len(search$)
IF search$[k:k]="*" then
CALL acheck(search$,data$)
EXIT SUB
ELSEIF search$[k:k]="[" then
CALL ncheck(search$,data$)
EXIT SUB
ELSEIF search$[k:k]="?" then
LET checks(k)=1
END IF
NEXT k
CALL finalcheck(search$,data$)
END SUB
SUB
ncheck(search$,data$)
LET start=val(search$[k+1:k+1])
LET
last=val(search$[k+3:k+3])
CALL
check(search$[1:k-1]&search$[k+4:len(search$)],data$)
END SUB
SUB
acheck(search$,data$)
IF search$[1:1]="*" then
LET a=1
CALL
check(search$[2:len(search$)],data$)
ELSE
IF
a=1 then
LET ba=1
ELSE
LET a=2
END IF
CALL
check(search$[1:len(search$)-1],data$)
END IF
END SUB
SUB
finalcheck(search$,data$)
IF ba=1 then
CALL baend(search$,data$)
ELSEIF a=1 then
CALL
end(search$,data$[len(data$)-len(search$)+1:len(data$)])
ELSEIF a=2 then
CALL end(search$,data$[1:len(search$)])
ELSE
IF len(data$)=len(search$) then CALL
end(search$,data$)
END IF
FOR l=1 to len(search$)
IF checks(l)=0 then LET misflag=1
NEXT l
END SUB
SUB
baend(search$,data$)
FOR o=1 to len(data$)-len(search$)+1
FOR n=1 to len(search$)
LET checks(n)=0
IF search$[n:n]="?" then
LET checks(n)=1
NEXT n
LET rflag=0
CALL
end(search$,data$[o:o+len(search$)-1])
FOR n=1 to len(search$)
IF checks(n)=0 then LET rflag=1
NEXT n
IF rflag=0 then EXIT SUB
NEXT o
END SUB
SUB
end(search$,data$)
FOR l=1 to len(search$)
IF search$[l:l]=data$[l:l] AND
search$<>"?" AND search$<>"]" then
LET checks(L)=1
ELSEIF search$[l:l]="]" then
FOR m=start to last
IF data$[l:l]=str$(m) then LET
checks(l)=1
NEXT m
END IF
NEXT l
END SUB
END