10 REM *********************************************** 20 REM R.A.M.P./F.M. - RAM PROGRAM FOR FILE MANAGEMENT 30 REM AUTHOR: ERIK DE RUIJTER - NOVEMBER 1983 40 REM *********************************************** 110 N.VELD=4 : N.REC=282 : N.CHAR=46 120 DIM VNAAM$(4),VLEN(4) 130 VNAAM$(1)="Plaatskode" : VLEN(1)=4 140 VNAAM$(2)="Trajektkode" : VLEN(2)=2 150 VNAAM$(3)="Plaatsnaam" : VLEN(3)=15 160 VNAAM$(4)="Halte" : VLEN(4)=25 1120 DIM VINH$(N.VELD), VZOEK$(N.VELD) 1130 DIM REC$(N.REC) 1140 PLEN=66 1150 DEF FNKAP$(L$)=LEFT$(L$,(INSTR(2,L$," ")-1)) 1160 DEF FNZK$(ZTAR)=LEFT$(REC$(ZTAR),VLEN(1)) 1240 ON ERROR GOTO 2000 1250 PRINT CLS$ : PRINT SSI$ : PRINT FNADR$(10,20);NAAMPROG$;SSO$ 1260 PRINT : PRINT FNADR$(12,20);"A program made with R.A.M.P./FM by ";NAAM.AUT$ 1280 PRINT FNADR$(21,20);"(NO! = start nieuwe file 'NIEUW.DAT')" 1285 PRINT FNADR$(20,20);"naam invoerbestand ?" 1290 ILEN=14 : IM=0 : IVER=20 : IHOR= 40 : GOSUB 15000 1295 IF LEFT$(INVOER$,3) = "NO!" THEN WB$= "NIEUW.DAT" : GOTO 1500 1300 IF RIGHT$(INVOER$,2) < > " " THEN IF MID$(INVOER$,2,1) < > ":" THEN 1290 1310 IF RIGHT$(INVOER$,1) = " " THEN INVOER$=FNKAP$(INVOER$) 1320 IF MID$(INVOER$,(LEN(INVOER$)-3),1) < > "." THEN 1290 1330 WB$=INVOER$ 1340 PRINT FNADR$(22,70);"busy..." 1350 GOSUB 3000 1500 PRINT CLS$ : PRINT "*****R.A.M.P./FM***** --- H O O F D M E N U --- *****";NAAMPROG$;"*****" 1505 SFLAG=0 1510 PRINT FNADR$(4,5) ;"1)...Uitdraaien lijst van bestandsinhoud" 1520 PRINT FNADR$(8,5) ;"2)...Opvragen / Muteren / Toevoegen" 1530 PRINT FNADR$(12,5);"3)...Zoeken m.b.v. waarde nevenvelden" 1540 PRINT FNADR$(16,5);"4)...Einde / Opbergen werkbestand" 1580 PRINT SSI$ : PRINT FNADR$(22,1);"===== ";WERKREC;" van de ";N.REC;" records in gebruik in bestand ";WB$;" =====" 1590 PRINT FNADR$(20,5);"K I E S : ";SSO$ 1600 ILEN=1 : IM=4 : IVER=20 : IHOR=15 : GOSUB 15000 1610 ON II GOSUB 5000, 7500, 10000, 4000 1620 GOTO 1500 2000 IF ERL < 3000 OR ERL > 3010 THEN 2200 2005 PRINT FNADR$(23,20);"invoerbestand ";WB$;" is niet te lezen" 2010 FOR L=1 TO 2000 : NEXT 2015 RESUME 1250 2200 ON ERROR GOTO 0 3000 OPEN "I", 1, WB$ 3010 INPUT #1, LI$ 3030 WERKREC = VAL (LI$) 3040 FOR L=1 TO WERKREC 3050 LINE INPUT #1, REC$(L) 3060 NEXT 3070 CLOSE #1 3080 RETURN 4000 WT$=LEFT$(WB$,(LEN(WB$)-4))+".TMP" 4010 OPEN "O", 1, WT$ 4020 LO$=STR$(WERKREC) 4030 LO$=LO$+SPACE$(N.CHAR-LEN(LO$)) 4040 PRINT #1, LO$ 4050 FOR L=1 TO WERKREC 4060 PRINT #1, REC$(L) 4070 NEXT 4080 CLOSE #1 4090 IF WB$ < > "NIEUW.DAT" THEN KILL WB$ 4095 NAME WT$ AS WB$ 4100 PRINT SSI$;FNADR$(22,70);"THE END..." 4110 PRINT SSO$ : END 5000 PRINT CLS$ : PRINT FNADR$(5,5);"start afdruk bij waarde van ";VNAAM$(1);":" 5010 ILEN=VLEN(1) : IM = VNUM(1) : IVER = 5 : IHOR = 60 : GOSUB 15000 5020 IF INVOER$ = SPACE$(ILEN) THEN PSTART = 1 : GOTO 5050 5030 GOSUB 14300 5040 IF ZVIND$="N" THEN 5010 ELSE PSTART=ZTAR 5050 PRINT FNADR$(10,10);"stop afdruk bij waarde ( = ";FNZK$(WERKREC);" ) :" 5060 IVER=10 : IHOR = 60 : GOSUB 15000 5070 IF INVOER$=SPACE$(ILEN) THEN PEND=WERKREC : GOTO 5100 5080 GOSUB 14300 5090 IF ZVIND$="N" THEN 5050 ELSE PEND=ZTAR 5100 IF PEND < PSTART THEN PRINT FNADR$(15,10);"beginveld is groter dan eindveld !!" : GOTO 5010 5110 PRINT FNADR$(20,10);"zet printerkop op scheurlijn en geef "; : INPUT INVOER$ 5120 GOSUB 14500 5130 FOR ZTAR = PSTART TO PEND 5140 GOSUB 14100 5150 IF PTEL < PLEN-8 THEN 5200 5160 FOR L=1 TO 3 : LPRINT : NEXT 5170 GOSUB 14500 5200 FOR L=1 TO N.VELD 5210 IF VPR.POS(L) < > 0 THEN LPRINT TAB(VPR.POS(L));VINH$(L); 5220 NEXT 5230 LPRINT : PTEL=PTEL+1 5250 NEXT ZTAR 5260 FOR L=1 TO PLEN-PTEL-5 : LPRINT : NEXT 5270 RETURN 7500 PRINT CLS$ : SFLAG=8500 7510 PRINT FNADR$(1,5);VNAAM$(1);" ?" 7515 PRINT FNADR$(2,30);STRING$(VLEN(1),"9");" = retour hoofdmenu" 7520 ILEN=VLEN(1) : IM=VNUM(1) : IHOR=30 : IVER=1 : GOSUB 15000 7530 IF WERKREC=0 THEN ZTAR=1 : GOSUB 8500 : GOTO 7600 7540 IF INVOER$=STRING$(ILEN,"9") THEN RETURN 7550 GOSUB 14300 7560 IF ZVIND$="N" THEN GOSUB 8500 ELSE GOSUB 8000 7600 IF ZTEL=WERKREC THEN RETURN ELSE GOTO 7500 8000 PRINT CLS$ 8010 GOSUB 14100 8020 SBAS = 1 8030 SFLAG=8000 8050 GOSUB 14000 8110 PRINT FNADR$(22,2);SBAS;" - ";LT;" = ";SSI$;"wijzigen velden";SSO$ 8120 PRINT FNADR$(23,2);"'98' = gereed / naar volgende ";TAB(40);"'99' = gereed / naar hoofdmenu";TAB(79);" 'K' = vernietigen ";TAB(120);"'S' = scroll"; 8125 PRINT FNADR$(20,30);"de keus ?" 8140 ILEN=3 : IM=0 : IVER=20 : IHOR=40 : GOSUB 15000 8150 IF INSTR(INVOER$,"K") < > 0 THEN GOSUB 9000 : RETURN 8160 IF INSTR(INVOER$,"S") = 0 THEN 8170 8162 IF N.VELD-SBAS < 10 THEN SBAS = 1 ELSE SBAS=SBAS+10 : IF N.VELD-SBAS < 9 THEN SBAS=N.VELD-9 8164 GOTO 8050 8170 II=VAL(INVOER$) 8180 IF II = 98 THEN RETURN 8190 IF II=99 THEN ZTEL=WERKREC : RETURN 8200 IF II < SBAS OR II > N.VELD THEN 8140 8210 IF II=1 THEN GOSUB 9500 : GOTO 8050 8220 SNR=II : GOSUB 14700 : GOSUB 14200: GOTO 8050 8500 IF WERKREC >= N.REC THEN PRINT FNADR$(5,30); "geheugen vol - niet meer toevoegen !!" : FOR L=1 TO 2000 : NEXT : RETURN 8503 GOSUB 8900 8505 REC$(ZTAR)=INVOER$+STRING$((N.CHAR-ILEN),".") : GOSUB 14100 8510 SBAS=1 : GOSUB 14000 8515 VINH$(1)=INVOER$ 8520 LT=10 : IF LT > N.VELD THEN LT=N.VELD 8540 FOR SNR=2 TO LT 8550 GOSUB 14700 8560 NEXT 8580 IF SBAS+9 >= N.VELD THEN 8630 8590 SBAS=SBAS+1 : SNR=SBAS+9 : GOSUB 14000 8600 GOSUB 14700 8610 GOTO 8580 8630 GOSUB 14200 8640 GOTO 8020 8900 IF INVOER$ > REC$(ZTAR) THEN ZTAR=ZTAR+1 : IF WERKREC < > 0 AND ZTAR <= WERKREC THEN 8900 8910 IF WERKREC = 0 THEN ZTAR = 1 8920 WERKREC=WERKREC+1 8925 IF ZTAR = WERKREC THEN 8960 8930 FOR L=WERKREC TO ZTAR+1 STEP -1 8940 REC$(L)=REC$(L-1) 8950 NEXT 8960 RETURN 9000 PRINT FNADR$(21,45);SSI$;"echt vernietigen (J/N) ?";SSO$ 9010 ILEN=1 : IM=0 : IHOR=65 : GOSUB 15000 9020 IF INVOER$ < > "J" THEN 8050 9030 GOSUB 9200 : RETURN 9200 FOR L=ZTAR TO WERKREC - 1 9210 REC$(L) = REC$(L+1) 9220 NEXT 9230 WERKREC=WERKREC - 1 9240 RETURN 9500 SNR=1 : GOSUB 14700 9505 GOSUB 9200 9510 GOSUB 14300 9520 IF VIND$="J" THEN PRINT FNADR$(21,45);"sleutel bestaat al!!" : GOTO 9500 9530 GOSUB 8900 9540 GOSUB 14200 9550 RETURN 10000 PRINT CLS$ 10010 FOR L=1 TO N.VELD : VZOEK$(L)="" : NEXT 10020 PRINT FNADR$(22,5);"hoeveel zoeksleutels ?" 10030 ILEN=2 : IM=N.VELD-1 : IVER=22 : IHOR=28 : GOSUB 15000 10040 IF INVOER$ = " " THEN II = 1 10050 IF II< 1 THEN 10030 10060 PRINT CLS$ : LZ=II : SBAS=0 10070 FOR ZTEL = 1 TO LZ 10075 IF ZTEL-SBAS > 10 THEN SBAS=SBAS+1 10077 GOSUB 14400 10080 PRINT FNADR$(23,5);"veldnummer van zoekveld ";ZTEL 10090 ILEN=2 : IM=N.VELD :IVER=23 : IHOR=25 : GOSUB 15000 10100 IF II < 2 OR II < LV OR VZOEK$(II) < > "" THEN 10090 10110 LV=II : IVER = 2*(ZTEL-SBAS) 10120 PRINT SSI$;FNADR$(IVER,5);VNAAM$(II);SSO$ 10130 ILEN=VLEN(II) : IM=VNUM(II) : IHOR=30 : GOSUB 15000 10140 IF INVOER$=STRING$(ILEN,"9") THEN 10080 10150 VZOEK$(II)=INVOER$ 10160 NEXT 10190 ZOEKT$="" : ZLAST=1 10200 FOR L=1 TO N.VELD 10210 IF VZOEK$(L)="" THEN ZOEKT$=ZOEKT$+STRING$(VLEN(L),7) ELSE ZOEKT$=ZOEKT$+VZOEK$(L) 10220 NEXT 10230 PRINT FNADR$(23,10);"zoeken gaat starten....." 10250 FOR ZTEL=1 TO WERKREC 10260 GOSUB 14600 10270 IF ZFL$="NOK" THEN 10300 10280 ZLAST=ZTEL : ZTAR = ZTEL 10290 GOSUB 8000 10300 NEXT 10310 PRINT CLS$ : PRINT FNADR$(22,10);"geen goede records gevonden tussen ";FNZK$(ZLAST);" en ";FNZK$(ZTEL-1) 10320 FOR L=1 TO 1500 : NEXT : RETURN 14000 PRINT CLS$ 14010 LT=SBAS+9 : IF LT > N.VELD THEN LT=N.VELD 14020 FOR L=SBAS TO LT 14030 SV=2*(L-SBAS)+1 14040 IF SFLAG=8000 THEN PRINT FNADR$(SV,2);L 14050 PRINT SSI$;FNADR$(SV,5);VNAAM$(L);SSO$ 14060 PRINT FNADR$(SV,30);VINH$(L) 14070 NEXT : RETURN 14100 LI=1 : LI$=REC$(ZTAR) 14110 FOR L=1 TO N.VELD 14120 VINH$(L)=MID$(LI$,LI,VLEN(L)) 14130 LI=LI+VLEN(L) 14140 NEXT 14150 RETURN 14200 LO$="" 14210 FOR L=1 TO N.VELD 14220 LO$=LO$+VINH$(L) 14230 NEXT 14240 REC$(ZTAR)=LO$ 14250 RETURN 14300 IF INVOER$=FNZK$(WERKREC) THEN ZTAR = WERKREC : ZVIND$="J" : RETURN 14310 ZL=1 : ZH=WERKREC 14320 ZTAR= INT ((ZL+ZH)/2) 14330 IF FNZK$(ZTAR) = INVOER$ THEN LET ZVIND$="J" : RETURN 14340 IF ZTAR=ZL OR ZTAR=ZH OR ZL=ZH THEN ZVIND$="N" : RETURN 14350 IF INVOER$ < FNZK$(ZTAR) THEN ZH=ZTAR ELSE ZL=ZTAR 14360 GOTO 14320 14400 PRINT CLS$ : LT=1 14410 LI=SBAS 14420 IF VZOEK$(LI) = "" THEN LI=LI+1 : IF LI < N.VELD THEN GOTO 14420 ELSE GOTO 14450 14430 PRINT FNADR$(2*LT,10);VNAAM$(LI);" ";VZOEK$(LI) 14440 IF LI < N.VELD AND LT < 10 AND LT < ZTEL THEN LT=LT+1 : LI=LI+1 : GOTO 14420 14450 RETURN 14500 LPRINT : LPRINT 14510 LPRINT NKOP$ 14520 LPRINT STRING$(80,"=") 14530 LPRINT : PTEL=0 14540 RETURN 14600 FOR L=VLEN(1)+1 TO N.CHAR 14610 LS$=MID$(ZOEKT$,L,1) 14620 IF LS$ = CHR$(7) THEN 14650 14630 LT$=MID$(REC$(ZTEL),L,1) 14640 IF LS$< >LT$ THEN ZFL$="NOK" : GOTO 14690 14650 NEXT 14660 ZFL$="OK" 14690 RETURN 14700 PRINT SSI$;FNADR$(21,1);"voer in voor ";VNAAM$(SNR);SSO$ 14705 IHOR=30 14710 ILEN=VLEN(SNR) : IM=VNUM(SNR) : IVER=2*(SNR-SBAS)+1 :GOSUB 15000 14720 IF VJUST(SNR) = 0 THEN 14750 14730 LO$=STR$(II) : LH=LEN(LO$)-1 14735 IF II < 0 THEN LET INVOER$=STRING$(ILEN-LH-1," ")+LO$ : GOTO 14750 14740 INVOER$=STRING$(ILEN-LH,"0")+RIGHT$(LO$,LH) 14750 VINH$(SNR)=INVOER$ 14760 RETURN 15000 IHOR=IHOR-1 15050 PRINT FNADR$(1,79);"" 15100 PRINT FNADR$(IVER, IHOR+1); : LI%=1 15150 FOR LJ%=1 TO ILEN : PRINT "."; : NEXT 15200 IF LI%=1 THEN INVOER$="" 15250 PRINT FNADR$(IVER, IHOR + LI%); : LV$=INPUT$(1) 15300 IF LV$=CHR$(13) AND LI%=1 THEN INVOER$=SPACE$(ILEN) : PRINT FNADR$(IVER,IHOR);INVOER$ : RETURN 15350 IF LV$=CHR$(13) THEN 16000 15400 IF LV$=CHR$(8) THEN LI%=LI%+(LI%>1) : PRINT FNADR$(IVER, IHOR+LI%);".";FNADR$(IVER, IHOR + LI%); : INVOER$=LEFT$(INVOER$,LI%+(LI%>1)) : GOTO 15200 15450 IF LV$= "" THEN LV$=" " 15500 IF LI% > ILEN THEN LI%=ILEN +1 : PRINT CHR$(7) : GOTO 15200 15550 PRINT LV$; 15600 LJ%=ASC(LV$) : IF LJ% < 32 OR LJ% > 126 THEN PRINT CHR$(7) : GOTO 15200 15650 IF IM=0 THEN 15900 15700 IF LJ% > 47 AND LJ% < 58 THEN 15900 15750 IF LJ% = 32 OR LJ%=45 THEN IF LI% < 4 THEN 15900 15800 IF LJ%=46 THEN 15900 15850 PRINT CHR$(7) : GOTO 15200 15900 INVOER$= INVOER$ + LV$ 15950 LI%=LI%+1 : GOTO 15200 16000 PRINT FNADR$(IVER, IHOR+LI%);SPACE$(ILEN-LI%+1) 16050 INVOER$=INVOER$+SPACE$(ILEN-LI%+1) 16100 IHOR=IHOR + 1 16150 IF IM=0 THEN RETURN 16200 II=VAL(INVOER$) 16250 IF ABS(II) > ABS(IM) THEN PRINT CHR$(7) : GOTO 15000 ELSE RETURN  1 16150 IF IM=0 THEN RETURN 16200 II=VAL(INVOER$) 16250 IF