home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 62
/
64er_Magazin_Sonderheft_62_19xx_Markt__Technik_de_Side_A.d64
/
adressdatei
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
6KB
|
228 lines
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].."