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 >
Commodore BASIC  |  2022-10-26  |  6KB  |  228 lines

  1. 100 rem indexsequentielle adressdatei
  2. 110 rem idee:1985 martin hecht,stgt
  3. 120 rem geaendert f. exbasic level 2
  4. 130 rem 64'er sonderheft 62/h.beiler
  5. 140 rem -------------------------------
  6. 150 rem dimensionierungen
  7. 160 fori=1to5:readdx$(i):next
  8. 170 dm=300:rem maximale datensatzanzahl
  9. 190 dim id$(dm):rem indexfeld (enthaelt nachnamen)
  10. 200 dim in(dm):rem enthaelt zugehoerige recordnummern
  11. 210 dim ds$(5):rem datenfelder
  12. 240 gosub490:print"[147]":gosub5000
  13. 241 rem *************
  14. 250 rem * hauptmenue*
  15. 251 rem *************
  16. 260 1:(NULL)1:2:poke650,128
  17. 270 wl=0:print"[147]":xy=2:gosub5100
  18. 272 x=10:y=2:gosub3000
  19. 280 print" [193]dressenverwaltung "
  20. 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
  21. 290 xy=10:gosub5100
  22. 292 x=7:y=6:gosub3000
  23. 295 print"<[204]> [204]iste der [211]uchbegriffe"
  24. 310 printtab(7)"<1> [193]dressen eingeben"
  25. 320 printtab(7)"<2> [193]dressen ausgeben"
  26. 330 printtab(7)"<3> [196]atei schliessen/[197][206][196][197]"
  27. 340 gett$:ift$="l"then2500
  28. 341 ift$="1"then710
  29. 342 ift$="2"then1110
  30. 343 ift$="3"then1480
  31. 430 goto340:rem warteschleife tastendruck
  32. 440 :
  33. 460 rem ********************
  34. 470 rem * datei eroeffnen  *
  35. 480 rem ********************
  36. 490 lf=1:sa=2:dn$="reladr":rl=115:gosub1800:rem relative datei 'reladr' oeffnen
  37. 500 :
  38. 510 open2,8,3,"seqadr,s,r":rem sequentielle datei 'seqadr' zum lesen oeffnen
  39. 520 :
  40. 530 gosub 1620:rem floppy-fehlerkanal auslesen
  41. 540 if er<>0 then ad=0:goto 590:rem datei ist noch nicht angelegt
  42. 550 :
  43. 560 input#2,ad:rem anzahl der datensaetze
  44. 570 for i=1 to ad:input#2,id$(i),in(i):next i:rem indexdatei einlesen
  45. 580 :
  46. 590 fl=1:rem kennzeichnung fuer 'datei im rechner'
  47. 600 :
  48. 610 close 2:rem sequentielle datei schliessen
  49. 620 x=4:y=17:gosub3000:xy=1:gosub5100:x=7:y=18:gosub3000
  50. 630 printtab(9)"[196]aten eingeben/lesen"
  51. 640 :
  52. 650 return
  53. 660 :
  54. 680 rem *********************
  55. 690 rem * adressen eingeben *
  56. 700 rem *********************
  57. 710 iffl=0thenx=7:y=23:gosub3000:print" [196]atei nicht geoeffnet  ! "
  58. 712 iffl=0then(NULL)2:x=0:y=23:gosub3000:printle$:goto340
  59. 720 print"[147]":xy=1:gosub5100:x=7:y=2:gosub3000:print" [193]dressdaten eingeben"
  60. 730 rem adresse eingeben
  61. 740 gosub5200
  62. 742 x=12:y=4
  63. 745 fori=1to4:y=y+2:gosub3000:(NULL)"";ds$(i),25:next
  64. 746 y=y+2:gosub3000:(NULL)"";ds$(5),15
  65. 800 :
  66. 810 rem adresse in indexdatei vermerken
  67. 820 ad=ad+1:rem anzahl der adressen um 1 erhoehen
  68. 830 id$(ad)=ds$(1):rem nachname
  69. 840 in(ad)=rn:rem recordnummer
  70. 850 :
  71. 860 rem adressfelder auf richtige laenge
  72. 880 ds$(1)=left$(ds$(1)+left$(le$,abs(25-len(ds$(1)))),25)
  73. 890 ds$(2)=left$(ds$(2)+left$(le$,abs(25-len(ds$(2)))),25)
  74. 900 ds$(3)=left$(ds$(3)+left$(le$,abs(25-len(ds$(3)))),25)
  75. 910 ds$(4)=left$(ds$(4)+left$(le$,abs(25-len(ds$(4)))),25)
  76. 920 ds$(5)=left$(ds$(5)+left$(le$,abs(15-len(ds$(5)))),15)
  77. 930 :
  78. 940 rem adresse fuer speicherung zusammenfassen
  79. 950 rc$=""
  80. 960 for i=1 to 5:rc$=rc$+ds$(i):next i
  81. 970 :
  82. 980 rem adresse speichern
  83. 990 rn=ad:rp=1:gosub 1930:rem auf record (nr.=ad) positionieren
  84. 1000 print#lf,rc$:rem adresse in record schreiben
  85. 1010 gosub 1600:rem floppy-fehlerkanal auslesen
  86. 1020 :
  87. 1030 x=7:y=23:gosub3000:print" [193]dresse ist gespeichert ! ":(NULL)2
  88. 1040 x=0:y=23:gosub3000:printle$
  89. 1050 goto260
  90. 1080 rem *********************
  91. 1090 rem * adressen ausgeben *
  92. 1100 rem *********************
  93. 1110 iffl=0thenx=7:y=23:gosub3000:print" [196]atei nicht geoeffnet  ! "
  94. 1111 iffl=0then(NULL)2:x=0:y=23:gosub3000:printle$:goto340
  95. 1112 print"[147]":xy=1:gosub5100:x=7:y=2:gosub3000:print" [193]dressdaten ausgeben"
  96. 1113 gosub5200
  97. 1114 x=12:y=6:gosub3000
  98. 1130 (NULL)"";nn$,25:rem index erfragen
  99. 1140 :
  100. 1150 for i=1 to ad:rem indexdatei durchsuchen
  101. 1160 ifnn$=id$(i)thengn=i:i=ad:nexti:goto1220:rem index gefunden
  102. 1170 nexti
  103. 1180 :
  104. 1190 x=4:y=23:gosub3000:print"  [193]dresse ist nicht vorhanden ! "
  105. 1200 (NULL)2:x=0:y=23:gosub3000:printle$:goto1114
  106. 1210 :
  107. 1220 rn=gn:rp=1:gosub1930:rem auf record (nr. = in(i)) positionieren
  108. 1222 rc$="":fori=1torl
  109. 1230 get#lf,rt$:rc$=rc$+rt$:rem record einlesen
  110. 1240 next
  111. 1250 rem record aufteilen
  112. 1260 ds$(1)=mid$(rc$,1,25):rem nachname
  113. 1270 ds$(2)=mid$(rc$,26,25):rem vorname
  114. 1280 ds$(3)=mid$(rc$,51,25):rem strasse
  115. 1290 ds$(4)=mid$(rc$,76,25):rem wohnort
  116. 1300 ds$(5)=mid$(rc$,101,15):rem telefon
  117. 1310 :
  118. 1320 rem record ausgeben
  119. 1330 x=12:y=6:fori=2to5:y=y+2:gosub3000:printds$(i):next
  120. 1340 x=4:y=17:gosub3000:xy=3:gosub5100
  121. 1350 x=7:y=18:gosub3000
  122. 1352 print"<[196]> [193]dresse drucken"
  123. 1354 printtab(7)"<[206]> [206]eue [193]dresse suchen"
  124. 1356 printtab(7)"<[200]> [200]auptmenue"
  125. 1360 gett$
  126. 1362 ift$="d"thengosub4000:rem zur druckerroutine
  127. 1364 ift$="n"then3100:rem neuer datensatz
  128. 1366 ift$="h"then260:rem hauptmenue
  129. 1430 goto1360
  130. 1440 :
  131. 1460 rem ***********************
  132. 1470 rem * dateiarbeit beenden *
  133. 1471 rem ***********************
  134. 1480 iffl=0thenx=7:y=23:gosub3000:print" [203]eine [196]atei im [211]peicher! "
  135. 1482 iffl=0then(NULL)2:x=0:y=23:gosub3000:printle$:goto340
  136. 1489 print#15,"s:seqadr":rem indexdatei auf diskette loeschen
  137. 1490 :
  138. 1500 open 2,8,3,"seqadr,s,w":rem seq. datei 'seqadr' zum schreiben oeffnen
  139. 1510 print#2,ad:rem anzahl der datensaetze
  140. 1520 for i=1 to ad:print#2,id$(i)","in(i):next i:rem indexdatei speichern
  141. 1530 :
  142. 1540 gosub2040:rem relative datei schliessen
  143. 1550 :
  144. 1560 print"[147]":end:rem programm beenden
  145. 1570 :
  146. 1580 :
  147. 1590 rem ******************************
  148. 1600 rem *floppy-fehlerkanal auslesen *
  149. 1610 rem ******************************
  150. 1620 input#15,er,er$,tr,sk
  151. 1640 return
  152. 1670 :
  153. 1680 rem unterprogramme zur verwaltung von relativen dateien
  154. 1700 :
  155. 1730 rem oeffnen einer relativen datei
  156. 1740 rem -----------------------------
  157. 1750 rem  lf = logische filenummer
  158. 1760 rem  sa = sekundaeradresse
  159. 1770 rem  dn$= dateiname
  160. 1780 rem  rl = recordlaenge
  161. 1790 :
  162. 1800 open 15,8,15:rem floppy-kommandokanal oeffnen
  163. 1810 open lf,8,sa,dn$+",l,"+chr$(rl):rem datei oeffnen
  164. 1820 :
  165. 1830 return
  166. 1840 :
  167. 1870 rem positionieren auf einen record
  168. 1880 rem ------------------------------
  169. 1890 rem  sa = sekundaeradresse
  170. 1900 rem  rn = recordnummer
  171. 1910 rem  rp = position innerhalb des records
  172. 1920 :
  173. 1930 hb=int(rn/256):lb=rn-256*hb:rem recordnummer in low/high aufteilen
  174. 1940 print#15,"p"+chr$(sa)+chr$(lb)+chr$(hb)+chr$(rp)
  175. 1950 :
  176. 1960 return
  177. 1970 :
  178. 2000 rem schliessen einer (relativen) datei
  179. 2010 rem ----------------------------------
  180. 2020 rem  lf = logische filenummer
  181. 2030 :
  182. 2040 close lf:rem relative datei schliessen
  183. 2050 close15:rem floppy-fehlerkanal schliessen
  184. 2060 :
  185. 2070 return
  186. 2500 iffl=0thenx=7:y=23:gosub3000:print" [196]atei nicht geoeffnet  ! "
  187. 2510 iffl=0then(NULL)2:x=0:y=23:gosub3000:printle$:goto340
  188. 2520 print"[147]"
  189. 2530 fori=1toad
  190. 2540 printid$(i)
  191. 2550 next
  192. 2560 poke198,0:wait198,1:goto260
  193. 3000 poke211,x:poke214,y:sys58640:return
  194. 3095 rem **************************
  195. 3096 rem * neuen datensatz suchen *
  196. 3097 rem **************************
  197. 3100 x=12:y=4:fori=1to5:y=y+2:gosub3000
  198. 3102 printleft$(le$,25):next
  199. 3110 goto1114
  200. 3995 rem ***********************
  201. 3996 rem * adressen ausdrucken *
  202. 3997 rem ***********************
  203. 3999 rem adressen drucken
  204. 4000 open4,4,7
  205. 4010 fori=1to5
  206. 4020 print#4,dx$(i);ds$(i)
  207. 4030 next
  208. 4040 print#4:close4
  209. 4050 return
  210. 4999 rem window
  211. 5000 ol$="":ol$=ol$+"[176][146]"
  212. 5002 le$="                                      ":rem leerstring
  213. 5010 fori=1to30:mo$=mo$+"[192]":ml$=ml$+" ":next
  214. 5030 ol$=ol$+""+mo$+"[146]":ol$=ol$+"[174][146]"
  215. 5040 mm$="[221][146]"+""+ml$+"[146]"+"[221][146]"
  216. 5042 ul$="":ul$=ul$+"[173][146]"
  217. 5043 ul$=ul$+""+mo$+"[146]":ul$=ul$+"[189][146]"
  218. 5050 return
  219. 5100 printtab(4)ol$
  220. 5110 fori=1toxy:printtab(4)mm$:next
  221. 5120 printtab(4)ul$
  222. 5130 return
  223. 5200 mb$=""+left$(ml$,12)+"[146]"
  224. 5210 print:print:fori=1to12:printmb$:next
  225. 5212 y=4:fori=1to5:x=2:y=y+2:gosub3000:print""+dx$(i):next
  226. 5220 return
  227. 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].."
  228.