10 REM *** KAARTENBAK -SELECTIE- ****
20 DATA <,>,<=,=>,=,<>,/
30 DIM A$(10),A(10),B$(200,10),B(200),P(10),P$(10),R$(7)
40 GOTO 2380
50 :
60 REM ** INITIALISEREN **
70 T=0 : G=-1
80 REM ** MAT B VULLEN VAN 1 T/M 200 **
90 FOR I= 1 TO 200 : B(I) = I : NEXT I : REM INDEXEN
100 FOR I= 1 TO 7 : READ R$(I) :NEXT I :REM REL-OPERATOR
110 RETURN
120 :
130 REM ** KOP VAN HET SCHERM AFDRUKKEN ***
140 PRINT CHR$(27)"E"          :REM SCHERM WISSEN
150 PRINT"*** KAARTENBAK ***                    -- SELECTIE --"
160 PRINT F$;TAB(40)"BESTAND    :";N$
170 PRINT
180 RETURN
190 :
200 REM ** OPSLAAN OP SOURCE DISK**
210 REM ** STRINGS MET RUBRIEKEN OPBOUWEN **
220 F$= "- OPSLAAN - ":GOSUB 140     :REM KOP
225 PRINT:PRINT
230 B$="OPSLAAN OP SOURCE DISK ?":GOSUB 740
240 IF S=2 THEN 470
270 REM ** FEITELIJK WEGSCHRIJVEN **
280 REM ** STUURFILE **
290 OPEN "O",1,N$
300 PRINT #1,BEWOORD$                :REM NAAM BESTAND
310 PRINT #1,R;",";Z;",";W;",";Y;",";E;",";X;",";X
320 REM RUBRIEKSNAMEN WEGGESCHREVEN *
330 FOR I= 1 TO R
340 PRINT #1,A$(I);",";A(I)    :REM RUBRIEKSNAAM
350 NEXT I
360 S=INT (R/2 +.005 )*2
370 FOR I= 1 TO N
380 IF B(I) > 0 THEN 440
390 A=ABS(B(I)) 
400 FOR J= 1 TO S STEP 2
410 PRINT #1,B$(A,J);",";B$(A,J+1)        :REM RUBR INH.
420 NEXT J
430 IF S  <R THEN PRINT #1,B$(A,J)
440 NEXT I
450 G=0                 :REM WEGGESCHREVEN
460 CLOSE
470 RETURN
480 :
490 REM *** INLEZEN VAN SOURCE DISK **
500 F$="- LEZEN -":GOSUB 140
510 PRINT:PRINT
520 IF S=2 THEN 710
525 ON ERROR GOTO 5000
530 OPEN "I",1,N$
540 INPUT #1,BEWOORD$
550 INPUT #1,R,N,W,Y,E,X,X                 :REM STUURVARIABELEN
560 G=0 : GOSUB 140
570 REM ** RUBRIEKSNAMEN INGELEZEN **
580 FOR I=1 TO R
590 INPUT #1,A$(I),A(I)           :REM RUBRIEKSNAAM
600 NEXT I
610 IF N=0 THEN 700
620 REM ** RUBRIEKSINHOUD LEZEN **
630 S= INT(R/2 +.005) * 2
640 FOR I=1 TO N
650 FOR J=1 TO S STEP 2
660 INPUT #1,B$(I,J),B$(I,J+1) :REM INH.RUBR
670 NEXT J
680 IF S < R THEN INPUT #1,B$(I,R)
690 NEXT I
700 CLOSE
710 RETURN
720 :
730 REM ** JA/NEE **
740 PRINT B$ + " <JA/NEE> ";
750 INPUT L$:L$=LEFT$(L$,1) :S=0
760 IF L$= "J" THEN S=1
770 IF L$= "N" THEN S=2
780 IF S=0 THEN 740
790 RETURN
800 :
810 REM ** RUBRIEKEN **
820 PRINT"TE SELECTEREN RUBRIEKEN." : A=INT((R +1)/2)
825 PRINT
830 FOR I=1 TO A
840 PRINT I;TAB(5)A$(I);
850 IF I+A >R THEN 870
860 PRINT TAB(22)I+A;TAB(25)A$(I+A)
870 NEXT I
880 IF A+A >R THEN PRINT
890 PRINT"--------------------------------------------------------------"
900 PRINT"WELKE RUBRIEK ? GEEF <NUMMER/STOP=0>   ";
910 INPUT J
920 IF J<0 OR J>R THEN 900
930 RETURN 
940 :
950 REM ** SELECTIE - KEUZE **
960 B=1 :T=0
970 F$="- SELECTIE-KEUZE -":GOSUB 140
975 PRINT:PRINT
980 IF T=0 THEN 1150
990 REM ** LAATSTE 5 SELECTIES **
1000 L=1 :IF T >5 THEN L=T-5
1010 FOR I= L TO T
1020 A$="EN" :IF P(I) > 0 THEN A$="OF"
1030 B=ABS(P(I)) :J=INT (B/10 +.0005)
1040 S=B-J *10
1050 PRINT I; :IF I <> 1 THEN PRINT TAB(5)A$;
1060 PRINT TAB(9)A$(J);TAB(17)R$(S);TAB(20)P$(I)
1070 NEXT I
1080 REM ** KEUZE **
1090 PRINT"UW KEUZE  <EN/OF/STOP>  ";
1100 INPUT B$ :B$=LEFT$(B$,1) :B=0
1110 IF B$="S" THEN 1290
1120 IF B$="E" THEN B=-1
1130 IF B$="O" THEN B=1
1140 IF B=0 THEN 1090
1150 GOSUB 820              :REM RUBRIEK
1160 IF J=0 THEN 1290
1170 REM ** RELATIE-OPERATOR **
1191 PRINT
1192 PRINT"  <  = Kleiner dan               >  = Groter dan
1193 PRINT" <=  = Kleiner of gelijk        =>  = Groter of gelijk 
1194 PRINT" <>  = Ongelijk                  =  = Gelijk 
1195 PRINT"  /  = Dit symbool is zelf gekozen, en is geen officiele"
1196 PRINT" relatationele operator. Met dit symbool kan men het selectie-"
1197 PRINT" mechanisme opdracht geven om in een gekozen rubriek te zoeken."
1198 PRINT:PRINT"RELATIES  < , > , <= , => , = , <> , /  <UW KEUZE>  ";
1199 INPUT B$ :S=0
1200 IF LEFT$(B$,1) = "S" THEN 970
1210 FOR I= 1 TO 7
1220 IF B$ =R$(I) THEN S= I : I=7
1230 NEXT I
1240 IF S=0 THEN 1198
1250 PRINT A$(J) + " " + B$; " VOORWAARDE ";
1260 INPUT P$(T+1)
1270 T=T +1 :P(T) = B * (J * 10 + S)
1280 IF T + 1 < 10 THEN 970
1290 RETURN
1300 :
1310 REM ** SELECTIE-BEWERKING **
1320 IF T=0 THEN 1500
1330 F$= "- SELECTIE-BEWERKING -" : GOSUB 140
1335 PRINT:PRINT
1340 PRINT"EVEN GEDULD A.U.B. " :Z=0
1350 FOR I=1 TO N          :REM AANTAL RECORDS
1360 L=0 : B(I) =ABS(B(I))
1370 FOR K= 1 TO T
1380 V=0 : H= LEN(P$(K))
1390 A=1 : IF P(K) < 0 THEN A=2 :REM 1= OF/ 2= EN
1400 REM * J= RUBRIEK / S= RELATIE-OPERATOR *
1410 B=ABS(P(K)) :J = INT(B/10 +.0005)
1420 S=B -J *10
1430 IF ABS(A(J)) < H THEN H=ABS(A(J))
1440 ON S GOSUB 1530 ,1570,1610,1650,1690,1730,1770                   
1450 B=L+V :L=1 :IF B< A THEN L=0
1460 NEXT K
1470 IF L=0 THEN 1490
1480 B(I) = B(I) * -1 : Z=Z +1 : K= 1 : G= 1
1490 NEXT I
1500 RETURN
1510 :
1520 REM ** SELECTIE =1  / KLEINER DAN ***
1530 IF A(J) < 0 AND VAL(B$(I,J)) < VAL(P$(K)) THEN V=1
1540 IF A(J) > 0 AND LEFT$(B$(I,J),H) < P$(K) THEN V=1
1550 RETURN
1560 :
1570 IF A(J) < 0 AND VAL(B$(I,J)) > VAL (P$(K)) THEN V=1
1580 IF A(J) >0 AND LEFT$(B$(I,J),H) > P$(K) THEN V=1
1590 RETURN
1600 REM *** SELECTIE = 3 / KLEINER OF GELIJK **
1610 IF A(J) <0 AND VAL(B$(I,J)) <= VAL(P$(K)) THEN V=1
1620 IF A(J) >0 AND LEFT$(B$(I,J),H) <= P$(K) THEN V=1
1630 RETURN
1640 REM ** SELECTIE =4 / GROTER OF GELIJK ***
1650 IF A(J) <0 AND VAL(B$(I,J)) => VAL (P$(K)) THEN V=1
1660 IF A(J) >0 AND LEFT$(B$(I,J),H) => P$(K) THEN V=1
1670 RETURN
1680 REM ** SELECTIE =5  / GELIJK **
1690 IF A(J) < 0 AND VAL(B$(I,J)) = VAL(P$(K)) THEN V=1
1700 IF A(J) >0  AND LEFT$(B$(I,J),H) = P$(K) THEN V=1
1710 RETURN
1720 REM ** SELECTIE =6 / ONGELIJK **
1730 IF A(J) <0 AND VAL(B$(I,J)) <> VAL(P$(K)) THEN V=1
1740 IF A(J) > 0 AND LEFT$(B$(I,J),H) <> P$(K) THEN V=1
1750 RETURN
1760 REM ** SELECTIE = 7 SUBSTRING BEPALING ***
1770 B=ABS(A(J))
1780 FOR F=0 TO B-H
1790 B$=LEFT$(B$(I,J),F+H)
1800 IF P$(K) = RIGHT$(B$,H) THEN V=1 : F=B
1810 NEXT F
1820 RETURN
1830 :
1840 REM ** DISPLAY **
1850 P=N :F$="- DISPLAY -"
1855 PRINT:PRINT
1860 Q=1 :K=-1
1870 IF G<>1 OR Z<=0 THEN K=-1
1880 IF K=1 AND B(P) >0 THEN 2080
1890 GOSUB 140 :REM KOP
1900 A$ = "TOTAAL" : IF K=1 THEN A$ ="SELECTIE "
1910 PRINT A$ +"-BESTAND";
1920 PRINT TAB(30)"TOTAAL     :"N;"SELECTIE  :";Z
1925 PRINT:PRINT
1930 PRINT"RUBRIEKSNAAM";TAB(25)"RUBRIEKSINHOUD ";
1940 IF B(P) <0 THEN PRINT " >>GESELECTEERD<<";
1945 PRINT:PRINT
1950 PRINT
1960 FOR J=1 TO R
1970 PRINT A$(J);
1980 IF A(J) <0 THEN PRINT TAB(25)VAL(B$(P,J))
1990 IF A(J) >0 THEN PRINT TAB(25) B$(P,J)
2000 NEXT J
2010 PRINT"-----------------------------------------------------------"
2020 PRINT" 0 = STOP                3 = SELECTIE AFVOEREN"
2030 PRINT" 1 = VOORUIT             4 = SELCTIE OPVOEREN"
2040 PRINT" 2 = ACHTERUIT           5 = SELECTIE - TOTAAL "
2045 PRINT:PRINT
2050 PRINT"WAT IS UW KEUZE  ";
2060 INPUT Q
2070 IF Q< 0 OR Q> 5 THEN 1870
2080 IF Q=1 THEN P=P +1
2090 IF P>N THEN P=1
2100 IF Q=2 THEN P=P-1
2110 IF P=0 THEN P=N
2120 IF Q<> 3 OR B(P) >0 THEN 2140
2130 Z=Z-1 :B(P) = ABS(B(P)) :Q=1
2140 IF Q <> 4 OR B(P) <0 THEN 2160
2150 Z=Z +1 : B(P) = ABS(B(P)) * -1 :Q=1
2160 IF Q=5 THEN K= K* -1 : Q=1
2170 IF Q <> 0 THEN 1870
2180 RETURN
2190 :
2200 REM ** MENU **
2210 F$="- MENU -":GOSUB 140
2214 PRINT TAB(40)"TOTAAL     :"N
2215 PRINT:PRINT
2220 IF G= -1 THEN PRINT "BESTAND NIET INGELEZEN ! "
2230 IF G=1 THEN PRINT"SELECTIE NIET WEGGESCHREVEN !"
2240 PRINT
2250 PRINT " 0 = STOPPEN VERLAAT PROGAMMA "
2260 PRINT" 1 = INLEZEN VAN SOURCE DISK "
2270 PRINT" 2 = SELECTIEKRITERIA OPBOUWEN"
2280 PRINT" 3 = SELECTIE UITVOEREN"
2290 PRINT" 4 = DISPLAY"
2300 PRINT" 5 = OPSLAAN VAN SELECTIE"
2305 PRINT:PRINT
2310 PRINT"WAT IS UW KEUZE ";
2320 INPUT M
2330 IF G <> -1 THEN 2350
2340 IF M <> 0 AND M<> 1 THEN 2210
2350 RETURN
2360 :
2370 REM ** STUURMODULE **
2380 GOSUB 70                        :REM INITIALISEREN **
2390 GOSUB 2210
2400 IF M= 1 THEN GOSUB 2470         :REM INLEZEN
2410 IF M=2 THEN GOSUB 960           :REM SELECTIE
2420 IF M=3 THEN GOSUB 1320          :REM SEL.-BEWERKING
2430 IF M=4 THEN GOSUB 1850          :REM ** DISPLAY
2440 IF M=5 THEN GOSUB 2540          :REM OPSLAAN
2450 IF M<> 0 THEN 2390
2460 IF M=0 THEN CHAIN "ADMIN"
2470 REM ** BESTAND OPVRAGEN **
2480 F$="- BESTAND OPVRAGEN - ":GOSUB 140
2490 B$="BESTAND OPVRAGEN " :GOSUB 730
2500 PRINT:PRINT
2510 PRINT"WELK BESTAND WILT U SELECTEREN ";
2520 INPUT N$
2530 GOTO 500
2540 F$="-WIJZIGING-BESTAND-":GOSUB 140
2550 PRINT:PRINT
2555 PRINT"INFO. Bij het saven wordt het geselecteerd bestand onder " N$
2556 PRINT"Weggeschreven. om dit te voorkomen moet men eerst het bestand wijzigen.
2557 PRINT:PRINT
2560 B$="GESELECTEERD-BESTAND WIJZIGEN ! ":GOSUB 730
2567 PRINT:PRINT
2570 IF S=2 THEN 200    
2580 PRINT:
2590 PRINT TAB(5)"GESELECTEERD-BESTAND = ";N$
2600 PRINT TAB(5)"HET BESTAND ";N$; " IS GESELECTEERD ! "                   
2610 PRINT TAB(5)"NOEM NAAM VOOR SELECTIE BESTAND !";             
2620 INPUT O$
2630 N$=O$
2640 GOTO 200
5000 CLOSE
5005 PRINT"BESTANDSNAAM ";"<<< "; N$ ;" >>>";" IS NIET IN TE LEZEN ! 
5015 PRINT"DRUK < OP 0 > VOOR OPNIEUW ";
5025 INPUT A$
5035 CHAIN"KARTSEL"   
;"<<< "; N$ ;" >>>";" IS NIET IN TE