100 REM INDEXSEQUENTIELLE ADRESSDATEI 110 REM IDEE:1985 MARTIN HECHT,STGT 120 REM GEAENDERT F. EXBASIC LEVEL 2 130 REM 64'ER SONDERHEFT 62/H.BEILER 140 REM ------------------------------- 150 REM DIMENSIONIERUNGEN 160 FORI=1TO5:READDX$(I):NEXT 170 DM=300:REM MAXIMALE DATENSATZANZAHL 190 DIM ID$(DM):REM INDEXFELD (ENTHAELT NACHNAMEN) 200 DIM IN(DM):REM ENTHAELT ZUGEHOERIGE RECORDNUMMERN 210 DIM DS$(5):REM DATENFELDER 240 GOSUB490:PRINT"[147]":GOSUB5000 241 REM ************* 250 REM * HAUPTMENUE* 251 REM ************* 260 1:(null)1:2:POKE650,128 270 WL=0:PRINT"[147]":XY=2:GOSUB5100 272 X=10:Y=2:GOSUB3000 280 PRINT" [193]DRESSENVERWALTUNG " 282 PRINTTAB(7)"MIT [197][216][208][193][206][196][197][196] [194][193][211][201][195] [204][197][214][197][204] [201][201]":PRINT 290 XY=10:GOSUB5100 292 X=7:Y=6:GOSUB3000 295 PRINT"<[204]> [204]ISTE DER [211]UCHBEGRIFFE" 310 PRINTTAB(7)"<1> [193]DRESSEN EINGEBEN" 320 PRINTTAB(7)"<2> [193]DRESSEN AUSGEBEN" 330 PRINTTAB(7)"<3> [196]ATEI SCHLIESSEN/[197][206][196][197]" 340 GETT$:IFT$="L"THEN2500 341 IFT$="1"THEN710 342 IFT$="2"THEN1110 343 IFT$="3"THEN1480 430 GOTO340:REM WARTESCHLEIFE TASTENDRUCK 440 : 460 REM ******************** 470 REM * DATEI EROEFFNEN * 480 REM ******************** 490 LF=1:SA=2:DN$="RELADR":RL=115:GOSUB1800:REM RELATIVE DATEI 'RELADR' OEFFNEN 500 : 510 OPEN2,8,3,"SEQADR,S,R":REM SEQUENTIELLE DATEI 'SEQADR' ZUM LESEN OEFFNEN 520 : 530 GOSUB 1620:REM FLOPPY-FEHLERKANAL AUSLESEN 540 IF ER<>0 THEN AD=0:GOTO 590:REM DATEI IST NOCH NICHT ANGELEGT 550 : 560 INPUT#2,AD:REM ANZAHL DER DATENSAETZE 570 FOR I=1 TO AD:INPUT#2,ID$(I),IN(I):NEXT I:REM INDEXDATEI EINLESEN 580 : 590 FL=1:REM KENNZEICHNUNG FUER 'DATEI IM RECHNER' 600 : 610 CLOSE 2:REM SEQUENTIELLE DATEI SCHLIESSEN 620 X=4:Y=17:GOSUB3000:XY=1:GOSUB5100:X=7:Y=18:GOSUB3000 630 PRINTTAB(9)"[196]ATEN EINGEBEN/LESEN" 640 : 650 RETURN 660 : 680 REM ********************* 690 REM * ADRESSEN EINGEBEN * 700 REM ********************* 710 IFFL=0THENX=7:Y=23:GOSUB3000:PRINT" [196]ATEI NICHT GEOEFFNET ! " 712 IFFL=0THEN(null)2:X=0:Y=23:GOSUB3000:PRINTLE$:GOTO340 720 PRINT"[147]":XY=1:GOSUB5100:X=7:Y=2:GOSUB3000:PRINT" [193]DRESSDATEN EINGEBEN" 730 REM ADRESSE EINGEBEN 740 GOSUB5200 742 X=12:Y=4 745 FORI=1TO4:Y=Y+2:GOSUB3000:(null)"";DS$(I),25:NEXT 746 Y=Y+2:GOSUB3000:(null)"";DS$(5),15 800 : 810 REM ADRESSE IN INDEXDATEI VERMERKEN 820 AD=AD+1:REM ANZAHL DER ADRESSEN UM 1 ERHOEHEN 830 ID$(AD)=DS$(1):REM NACHNAME 840 IN(AD)=RN:REM RECORDNUMMER 850 : 860 REM ADRESSFELDER AUF RICHTIGE LAENGE 880 DS$(1)=LEFT$(DS$(1)+LEFT$(LE$,ABS(25-LEN(DS$(1)))),25) 890 DS$(2)=LEFT$(DS$(2)+LEFT$(LE$,ABS(25-LEN(DS$(2)))),25) 900 DS$(3)=LEFT$(DS$(3)+LEFT$(LE$,ABS(25-LEN(DS$(3)))),25) 910 DS$(4)=LEFT$(DS$(4)+LEFT$(LE$,ABS(25-LEN(DS$(4)))),25) 920 DS$(5)=LEFT$(DS$(5)+LEFT$(LE$,ABS(15-LEN(DS$(5)))),15) 930 : 940 REM ADRESSE FUER SPEICHERUNG ZUSAMMENFASSEN 950 RC$="" 960 FOR I=1 TO 5:RC$=RC$+DS$(I):NEXT I 970 : 980 REM ADRESSE SPEICHERN 990 RN=AD:RP=1:GOSUB 1930:REM AUF RECORD (NR.=AD) POSITIONIEREN 1000 PRINT#LF,RC$:REM ADRESSE IN RECORD SCHREIBEN 1010 GOSUB 1600:REM FLOPPY-FEHLERKANAL AUSLESEN 1020 : 1030 X=7:Y=23:GOSUB3000:PRINT" [193]DRESSE IST GESPEICHERT ! ":(null)2 1040 X=0:Y=23:GOSUB3000:PRINTLE$ 1050 GOTO260 1080 REM ********************* 1090 REM * ADRESSEN AUSGEBEN * 1100 REM ********************* 1110 IFFL=0THENX=7:Y=23:GOSUB3000:PRINT" [196]ATEI NICHT GEOEFFNET ! " 1111 IFFL=0THEN(null)2:X=0:Y=23:GOSUB3000:PRINTLE$:GOTO340 1112 PRINT"[147]":XY=1:GOSUB5100:X=7:Y=2:GOSUB3000:PRINT" [193]DRESSDATEN AUSGEBEN" 1113 GOSUB5200 1114 X=12:Y=6:GOSUB3000 1130 (null)"";NN$,25:REM INDEX ERFRAGEN 1140 : 1150 FOR I=1 TO AD:REM INDEXDATEI DURCHSUCHEN 1160 IFNN$=ID$(I)THENGN=I:I=AD:NEXTI:GOTO1220:REM INDEX GEFUNDEN 1170 NEXTI 1180 : 1190 X=4:Y=23:GOSUB3000:PRINT" [193]DRESSE IST NICHT VORHANDEN ! " 1200 (null)2:X=0:Y=23:GOSUB3000:PRINTLE$:GOTO1114 1210 : 1220 RN=GN:RP=1:GOSUB1930:REM AUF RECORD (NR. = IN(I)) POSITIONIEREN 1222 RC$="":FORI=1TORL 1230 GET#LF,RT$:RC$=RC$+RT$:REM RECORD EINLESEN 1240 NEXT 1250 REM RECORD AUFTEILEN 1260 DS$(1)=MID$(RC$,1,25):REM NACHNAME 1270 DS$(2)=MID$(RC$,26,25):REM VORNAME 1280 DS$(3)=MID$(RC$,51,25):REM STRASSE 1290 DS$(4)=MID$(RC$,76,25):REM WOHNORT 1300 DS$(5)=MID$(RC$,101,15):REM TELEFON 1310 : 1320 REM RECORD AUSGEBEN 1330 X=12:Y=6:FORI=2TO5:Y=Y+2:GOSUB3000:PRINTDS$(I):NEXT 1340 X=4:Y=17:GOSUB3000:XY=3:GOSUB5100 1350 X=7:Y=18:GOSUB3000 1352 PRINT"<[196]> [193]DRESSE DRUCKEN" 1354 PRINTTAB(7)"<[206]> [206]EUE [193]DRESSE SUCHEN" 1356 PRINTTAB(7)"<[200]> [200]AUPTMENUE" 1360 GETT$ 1362 IFT$="D"THENGOSUB4000:REM ZUR DRUCKERROUTINE 1364 IFT$="N"THEN3100:REM NEUER DATENSATZ 1366 IFT$="H"THEN260:REM HAUPTMENUE 1430 GOTO1360 1440 : 1460 REM *********************** 1470 REM * DATEIARBEIT BEENDEN * 1471 REM *********************** 1480 IFFL=0THENX=7:Y=23:GOSUB3000:PRINT" [203]EINE [196]ATEI IM [211]PEICHER! " 1482 IFFL=0THEN(null)2:X=0:Y=23:GOSUB3000:PRINTLE$:GOTO340 1489 PRINT#15,"S:SEQADR":REM INDEXDATEI AUF DISKETTE LOESCHEN 1490 : 1500 OPEN 2,8,3,"SEQADR,S,W":REM SEQ. DATEI 'SEQADR' ZUM SCHREIBEN OEFFNEN 1510 PRINT#2,AD:REM ANZAHL DER DATENSAETZE 1520 FOR I=1 TO AD:PRINT#2,ID$(I)","IN(I):NEXT I:REM INDEXDATEI SPEICHERN 1530 : 1540 GOSUB2040:REM RELATIVE DATEI SCHLIESSEN 1550 : 1560 PRINT"[147]":END:REM PROGRAMM BEENDEN 1570 : 1580 : 1590 REM ****************************** 1600 REM *FLOPPY-FEHLERKANAL AUSLESEN * 1610 REM ****************************** 1620 INPUT#15,ER,ER$,TR,SK 1640 RETURN 1670 : 1680 REM UNTERPROGRAMME ZUR VERWALTUNG VON RELATIVEN DATEIEN 1700 : 1730 REM OEFFNEN EINER RELATIVEN DATEI 1740 REM ----------------------------- 1750 REM LF = LOGISCHE FILENUMMER 1760 REM SA = SEKUNDAERADRESSE 1770 REM DN$= DATEINAME 1780 REM RL = RECORDLAENGE 1790 : 1800 OPEN 15,8,15:REM FLOPPY-KOMMANDOKANAL OEFFNEN 1810 OPEN LF,8,SA,DN$+",L,"+CHR$(RL):REM DATEI OEFFNEN 1820 : 1830 RETURN 1840 : 1870 REM POSITIONIEREN AUF EINEN RECORD 1880 REM ------------------------------ 1890 REM SA = SEKUNDAERADRESSE 1900 REM RN = RECORDNUMMER 1910 REM RP = POSITION INNERHALB DES RECORDS 1920 : 1930 HB=INT(RN/256):LB=RN-256*HB:REM RECORDNUMMER IN LOW/HIGH AUFTEILEN 1940 PRINT#15,"P"+CHR$(SA)+CHR$(LB)+CHR$(HB)+CHR$(RP) 1950 : 1960 RETURN 1970 : 2000 REM SCHLIESSEN EINER (RELATIVEN) DATEI 2010 REM ---------------------------------- 2020 REM LF = LOGISCHE FILENUMMER 2030 : 2040 CLOSE LF:REM RELATIVE DATEI SCHLIESSEN 2050 CLOSE15:REM FLOPPY-FEHLERKANAL SCHLIESSEN 2060 : 2070 RETURN 2500 IFFL=0THENX=7:Y=23:GOSUB3000:PRINT" [196]ATEI NICHT GEOEFFNET ! " 2510 IFFL=0THEN(null)2:X=0:Y=23:GOSUB3000:PRINTLE$:GOTO340 2520 PRINT"[147]" 2530 FORI=1TOAD 2540 PRINTID$(I) 2550 NEXT 2560 POKE198,0:WAIT198,1:GOTO260 3000 POKE211,X:POKE214,Y:SYS58640:RETURN 3095 REM ************************** 3096 REM * NEUEN DATENSATZ SUCHEN * 3097 REM ************************** 3100 X=12:Y=4:FORI=1TO5:Y=Y+2:GOSUB3000 3102 PRINTLEFT$(LE$,25):NEXT 3110 GOTO1114 3995 REM *********************** 3996 REM * ADRESSEN AUSDRUCKEN * 3997 REM *********************** 3999 REM ADRESSEN DRUCKEN 4000 OPEN4,4,7 4010 FORI=1TO5 4020 PRINT#4,DX$(I);DS$(I) 4030 NEXT 4040 PRINT#4:CLOSE4 4050 RETURN 4999 REM WINDOW 5000 OL$="":OL$=OL$+"[176][146]" 5002 LE$=" ":REM LEERSTRING 5010 FORI=1TO30:MO$=MO$+"[192]":ML$=ML$+" ":NEXT 5030 OL$=OL$+""+MO$+"[146]":OL$=OL$+"[174][146]" 5040 MM$="[221][146]"+""+ML$+"[146]"+"[221][146]" 5042 UL$="":UL$=UL$+"[173][146]" 5043 UL$=UL$+""+MO$+"[146]":UL$=UL$+"[189][146]" 5050 RETURN 5100 PRINTTAB(4)OL$ 5110 FORI=1TOXY:PRINTTAB(4)MM$:NEXT 5120 PRINTTAB(4)UL$ 5130 RETURN 5200 MB$=""+LEFT$(ML$,12)+"[146]" 5210 PRINT:PRINT:FORI=1TO12:PRINTMB$:NEXT 5212 Y=4:FORI=1TO5:X=2:Y=Y+2:GOSUB3000:PRINT""+DX$(I):NEXT 5220 RETURN 50000 DATA"[206][193][205][197] 1...","[206][193][205][197] 2...","[211][212][210][193][211][211][197]..","[215][207][200][206][207][210][212]..","[212][197][204][197][198][207][206].."