home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 03 / heimwerk / brdgen.bas < prev    next >
Encoding:
BASIC Source File  |  1988-12-23  |  7.7 KB  |  258 lines

  1. '* ------------------------------------------------------- *
  2. '*                     BRDGEN.BAS                          *
  3. '*   Datei-Generator erzeugt aus den eingelesenen Werten   *
  4. '*       Unterprogramme zum Lesen und Schreiben von        *
  5. '*                    Random-Dateien                       *
  6. '*            (c) 1989 Gerd Kraus & TOOLBOX                *
  7. '* ------------------------------------------------------- *
  8.  
  9. $INCLUDE "EINGABE.INC"
  10. '* SUB EINGABE(FELDLEN%, SPOS%, ZPOS%, VARTYP$, ANTWORT$)
  11.  
  12. %Max = 10               ' max. 10 Variablen
  13. DIM Eingabe$(0 : %Max)  ' Eingabe$(0) enthält den Namen der
  14.                         ' späteren Random-Datei
  15. DIM Laenge$ (1 : %Max)
  16.  
  17. '* ------------------------------------------------------- *
  18. '*  Hauptprogramm
  19. CALL Bild
  20. CALL Eingaben(DateiName$, IncludeName$)
  21. CALL Einlesen(DateiName$, Eingabe$(), Laenge%(), Vorh%)
  22. CALL GENERATOR (DateiName$, IncludeName$, Eingabe$(), _
  23.                 Laenge% (), Vorh%)
  24. END
  25.  
  26. '* ------------------------------------------------------- *
  27. SUB Bild
  28.  
  29. LOCAL Titel$, CO$, Spalte%
  30.  
  31. Titel$ = "RANDOM-Datei-Code-Generator"
  32. CO$ = "(c) 1989 Gerd Kraus & TOOLBOX"
  33. Hilf$ = "Dieses Programm erzeugt ein Include-File " + _
  34.         "für RANDOM-Dateien"
  35.  
  36. CLS
  37. LOCATE 1,1 : COLOR 1,3 : PRINT SPACE$ (80);
  38. Spalte% = INT ((80 - LEN (Titel$))/2)
  39. LOCATE 1, Spalte% : PRINT Titel$
  40. LOCATE 1, 60      : PRINT CO$
  41.  
  42. LOCATE 25,1 : COLOR 15,1 : PRINT SPACE$ (80);
  43. Spalte% = INT ((80 - LEN (Hilf$))/2)
  44. LOCATE 25, Spalte% : PRINT Hilf$;
  45.  
  46. COLOR 14,0
  47. LOCATE 5, 5
  48. PRINT "Name der Datei mit den Variablen-Namen  (*.Var)   : "
  49. LOCATE 7, 5
  50. PRINT "Name des zu erzeugenden Include-Files (*.Inc)     : "
  51.  
  52. END SUB
  53.  
  54. '* ---------------------------------------------------------
  55. SUB Eingaben (DatNam$, IncName$)
  56.  
  57.   CALL EINGABE(8, 60, 5, "t", DatNam$)
  58.   IF DatNam$ = "" THEN STOP
  59.   DatNam$ = DatNam$ + ".Var"
  60.   CALL EINGABE(8, 60, 7, "t", IncNam$)
  61.   IF IncName$ = "" THEN STOP
  62.   IncName$ = IncName$ + ".INC"
  63. PRINT : PRINT
  64. END SUB
  65.  
  66. '* ---------------------------------------------------------
  67. SUB Generator(DatNam$,IncName$,Eingabe$(1),Laenge%(1),Vorh%)
  68.  
  69. LOCAL Trenn$, Linie$, Leer$, LogNr$, i%
  70.  
  71. Trenn$ = CHR$(34)                     ' Anführungszeichen
  72. Linie$ = CHR$(39) + STRING$ (49, 45)  ' Trennlinie zwischen
  73.                                       ' den Prozeduren
  74. Leer$  = STRING$(3, 32)               ' für's Einrücken
  75.  
  76. '* 1. Ermittlung der Gesamtlänge des Feldes sowie der
  77. '*    Länge der einzelnen Variablen.
  78. '*    Das Ergebnis wird auf dem Bildschirm angezeigt
  79.  
  80. LogNr$ = STR$ (Laenge% (0))            ' Dateinummer # ..
  81. Laenge% (0) = 0                        ' Feldlänge
  82.  
  83. FOR i% = 1 TO Vorh%
  84.   SELECT CASE RIGHT$ (Eingabe$ (i%), 1)
  85.      CASE "$"  : PRINT "String",
  86.      CASE "%"  : PRINT "Integer",       : Laenge% (i%) = 2
  87.      CASE "&"  : PRINT "Long-Integer",  : Laenge% (i%) = 4
  88.      CASE "!"  : PRINT "Real",          : Laenge% (i%) = 4
  89.      CASE "#"  : PRINT "Double",        : Laenge% (i%) = 8
  90.      CASE ""   : PRINT "keine Eingabe", : Laenge% (i%) = 0
  91.      CASE ELSE : PRINT "REAL",          : Laenge% (i%) = 4
  92.   END SELECT
  93.   Laenge% (0) = Laenge% (0) + Laenge% (i%)
  94.   PRINT Eingabe$ (i%), Laenge% (i%)
  95. NEXT i%
  96.  
  97. PRINT : PRINT "Gesamtlänge : "; Laenge% (0)
  98.  
  99. '* 2. Include-Datei mit einer sequentielle Datei erzeugen
  100. '*    WRITE #1 liefert Anführungszeichen, deshalb PRINT #1 !
  101.   OPEN IncName$ FOR OUTPUT AS #1
  102.  
  103. '* jetzt werden die einzelnen Prozeduren erzeugt :
  104. '* SCHRITT 1 :
  105. '* immer nützlich : ein Header für das Include-File
  106. PRINT #1, "' Include-File für RANDOM-Dateien"
  107. PRINT #1, "' Version 1.03 vom 18.12.1988 "
  108. PRINT #1, ""
  109. PRINT #1, "' globale Variable  Puffer$ () = Puffervariable"
  110. PRINT #1, Linie$
  111.  
  112. '* SCHRITT 2 :
  113. '* die Puffervariable wird als globales,
  114. '* dynamisches Feld angelegt
  115. PRINT #1, "SUB PufferDimensionieren"
  116. PRINT #1, "' diese Prozedur darf nur beim Programmstart"
  117. PRINT #1, "' aufgerufen werden !
  118. PRINT #1, ""
  119. PRINT #1, "LOCAL  Max%"
  120. PRINT #1, "SHARED Puffer$ ()"
  121. PRINT #1, ""
  122. PRINT #1, Leer$ + "Max% = " + STR$ (Vorh%)
  123. PRINT #1, Leer$ + "DIM Puffer$ (1 : Max%)"
  124. PRINT #1, ""
  125. PRINT #1, "END SUB    ' PufferDimensionieren"
  126. PRINT #1, Linie$
  127.  
  128. '* SCHRITT 3 :
  129. '* die Prozedur zum Öffnen der Random-Datei :
  130.  
  131. '*  a. Prozedurnamen und -variable
  132. PRINT #1, "SUB DateiOeffnen"
  133. PRINT #1, ""
  134. PRINT #1, "SHARED Puffer$ ()"
  135. PRINT #1, ""
  136.  
  137. '*  b. Feldbezeichner eintragen
  138. PRINT #1, Leer$ + "OPEN " + Trenn$ + Eingabe$ (0) + _
  139.           Trenn$ + " FOR RANDOM AS #" + LogNr$ + _
  140.           " LEN = " + STR$ (Laenge% (0))
  141.  
  142. PRINT #1, Leer$ + "FIELD #" + LogNr$ + ",_"
  143.  
  144. FOR i% = 1 TO Vorh% - 1
  145.    PRINT #1, Leer$ + STR$ (Laenge% (i%)) + " AS Puffer$ (" _
  146.              + STR$ (i%) + "),_"
  147. NEXT i%
  148. PRINT #1, Leer$ + STR$ (Laenge% (i%)) + _
  149.           " AS Puffer$ ("  + STR$ (i%) + ")"
  150. PRINT #1, ""
  151. PRINT #1, "END SUB    ' DateiOeffnen"
  152. PRINT #1, Linie$
  153.  
  154. '* SCHRITT 4 :
  155. '* die Prozedur zum Schreiben eines Datensatzes
  156. '*  a. Prozedurnamen und -variable
  157.   PRINT #1, "SUB DatenSchreiben (SatzNr%)"
  158.   PRINT #1, ""
  159.   PRINT #1, "SHARED_"
  160.   PRINT #1, Leer$ + "Puffer$ (),_"
  161.   FOR i% = 1 TO Vorh% - 1
  162.     PRINT #1, Leer$ + Eingabe$ (i%) + ",_"
  163.   NEXT i%
  164.   PRINT #1, Leer$ + Eingabe$ (i%)
  165.   PRINT #1, ""
  166.  
  167. '*  b. numerische Werte in (Datei-)Zeichenketten umwandeln
  168. '*     und ...
  169. '*  c. Daten mit LSET in den Puffer schreiben
  170.   FOR i% = 1 TO Vorh%
  171.     PRINT #1, Leer$ + "LSet Puffer$ (" + STR$ (i%) + ") = ";
  172.  
  173.     SELECT CASE RIGHT$ (Eingabe$ (i%), 1)
  174.       CASE "$"  : PRINT #1, "(";
  175.          ' String : keine Umwandlung erforderlich !
  176.       CASE "%"  : PRINT #1, "MKI$ (";
  177.       CASE "&"  : PRINT #1, "MKL$ (";
  178.       CASE "!"  : PRINT #1, "MKS$ (";
  179.       CASE "#"  : PRINT #1, "MKD$ (";
  180.       CASE ELSE : PRINT #1, "MKS$ (";
  181.     END SELECT
  182.     PRINT #1, Eingabe$ (i%) + ")"
  183.   NEXT i%
  184.   PRINT #1, ""
  185.  
  186. '*  d. und jetzt noch vom Puffer mit "PUT " auf Diskette
  187.   PRINT #1, Leer$ + "PUT #" + LogNr$ + ", SatzNr%"
  188.   PRINT #1, ""
  189.   PRINT #1, "END SUB"   ' DatenSchreiben
  190.   PRINT #1, Linie$
  191.  
  192. '* SCHRITT 5 :
  193. '* die Prozedur zum Lesen eines Datensatzes :
  194.  
  195. '*  a. Prozedurnamen und -variable
  196.   PRINT #1, "SUB DatenLesen (SatzNr%)"
  197.   PRINT #1, ""
  198.   PRINT #1, "SHARED_"
  199.   PRINT #1, Leer$ + "Puffer$ (),_"
  200.   FOR i% = 1 TO Vorh% - 1
  201.     PRINT #1, Leer$ + Eingabe$ (i%) + ",_"
  202.   NEXT i%
  203.   PRINT #1, Leer$ + Eingabe$ (i%)
  204.   PRINT #1, ""
  205.  
  206. '*  b. Daten mit GET in den Puffer einlesen
  207.   PRINT #1, Leer$ + "GET #" + LogNr$ + ", SatzNr%"
  208.   PRINT #1, ""
  209.  
  210. '*  c. Puffervariable in Feldvariable umwandeln
  211.   FOR i% = 1 TO Vorh%
  212.     PRINT #1, Leer$ + Eingabe$ (i%) + " = ";
  213.  
  214.     SELECT CASE RIGHT$ (Eingabe$ (i%), 1)
  215.       CASE "$"  : PRINT #1, "(";
  216.          ' String : keine Umwandlung erforderlich !
  217.       CASE "%"  : PRINT #1, "CVI (";
  218.       CASE "&"  : PRINT #1, "CVL (";
  219.       CASE "!"  : PRINT #1, "CVS (";
  220.       CASE "#"  : PRINT #1, "CVD (";
  221.       CASE ELSE : PRINT #1, "CVS (";
  222.     END SELECT
  223.     PRINT #1, "Puffer$ (" + STR$ (i%) + "))"
  224.   NEXT i%
  225.   PRINT #1, "END SUB"   ' DatenLesen
  226.   PRINT #1, Linie$
  227.  
  228. '* SCHRITT 6 :
  229. '*  Datei schliessen
  230.   PRINT #1, "SUB DateiSchliessen"
  231.   PRINT #1, Leer$ + "CLOSE #" + LogNr$
  232.   PRINT #1, "END SUB"    ' DateiSchliessen
  233.   PRINT #1, Linie$
  234.  
  235. '*  damit ist unser Include-File fertig
  236.  
  237.   CLOSE #1
  238. END SUB
  239. '* ------------------------------------------------------- *
  240. SUB Einlesen (DatNam$, Eingabe$ (1), Laenge% (1), Vorh% )
  241. '* die Variablennamen werden eingelesen
  242.  
  243. LOCAL i%
  244.  
  245.   OPEN DatNam$ FOR INPUT AS #1
  246.   INPUT #1, Eingabe$ (0), Laenge% (0)
  247.  
  248.   i% = 1
  249.   WHILE NOT EOF (1)
  250.      INPUT #1, Eingabe$ (i%), Laenge% (i%)
  251.      INCR i%
  252.   WEND
  253.   CLOSE #1
  254.   Vorh% = i% - 1
  255.  
  256. END SUB
  257. '* ------------------------------------------------------- *
  258. '*                  Ende von BRDGEN.BAS                    *