home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 11 / einsteig / tools1.bas < prev    next >
Encoding:
BASIC Source File  |  1990-08-10  |  19.4 KB  |  597 lines

  1. ' *********************************************************
  2. '                         Tools1.Bas
  3. '            (c) 1990 W.Kehr/Th.Frins & toolbox
  4. '
  5. '            enthält diverse SUBs und Functions
  6. '       komplette Version nur auf DATABOX - nicht im Heft
  7. '                   "MERGEN" mit T1test.bas
  8. ' *********************************************************
  9.  
  10. DECLARE SUB Normal ()
  11. DECLARE SUB Invers ()
  12. DECLARE SUB Pruefuebergabe (zeile%, spalte%, typ$, laenge%, nachkomma%, gueltig$, vorgabe$, vorzeichen%, komma%, fehler%)
  13. DECLARE SUB Warten (ZeilenNr%)
  14. DECLARE SUB Numerisch (komma%, vorzeichen%, einfmerker%, eingabe$, laenge%, position%, v$)
  15. DECLARE SUB Zeichen (einfmerker%, eingabe$, laenge%, position%, v$)
  16. DECLARE SUB Sonder (typ$, vorzeichen%, komma%, cursor%, einfmerker%, eingabe$, laenge%, position%, v$)
  17. DECLARE SUB Fehlmeld (ZeilenNr%, Fehlertext$)
  18. DECLARE FUNCTION BalkenMenue% (ZeilenNr%, SpaltenNr%, Elemente%, ErsteWahl%, abstand%, Optionen$())
  19. DECLARE FUNCTION ZeilenMenue% (ZeilenNr%, SpaltenNr%, Elemente%, ErsteWahl%, Optionen$())
  20.  
  21. FUNCTION BalkenMenue% (ZeilenNr%, SpaltenNr%, Elemente%, ErsteWahl%, abstand%, Optionen$())
  22.     FOR I% = 1 TO Elemente%
  23.         differenz% = abstand% * (I% - 1)
  24.         LOCATE ZeilenNr% + differenz%, SpaltenNr%, 0
  25.         IF I% = ErsteWahl% THEN
  26.             Invers
  27.             PRINT "["; I%; "]"; SPACE$(3); Optionen$(I% - 1); " ";
  28.             Normal
  29.         ELSE
  30.             PRINT "["; I%; "]"; SPACE$(3); Optionen$(I% - 1); " ";
  31.         END IF
  32.     NEXT I%
  33.     differenz% = abstand% * (ErsteWahl% - 1)
  34.     taste$ = CHR$(255)
  35.     WHILE taste$ <> CHR$(13)
  36.         taste$ = INKEY$
  37.         IF (LEN(taste$) = 2 AND (RIGHT$(taste$, 1) = CHR$(72) OR RIGHT$(taste$, 1) = CHR$(80))) OR taste$ = CHR$(27) THEN
  38.             LOCATE ZeilenNr% + differenz%, SpaltenNr%, 0
  39.             PRINT "["; ErsteWahl%; "]"; SPACE$(3); Optionen$(ErsteWahl% - 1); " ";
  40.             IF RIGHT$(taste$, 1) = CHR$(72) THEN
  41.                 ErsteWahl% = ErsteWahl% - 1
  42.                 IF ErsteWahl% < 1 THEN ErsteWahl% = Elemente%
  43.             END IF
  44.             IF RIGHT$(taste$, 1) = CHR$(80) THEN
  45.                 ErsteWahl% = ErsteWahl% + 1
  46.                 IF ErsteWahl% > Elemente% THEN ErsteWahl% = 1
  47.             END IF
  48.             IF taste$ = CHR$(27) THEN
  49.                 ErsteWahl% = Elemente%
  50.             END IF
  51.             differenz% = abstand% * (ErsteWahl% - 1)
  52.             Invers
  53.             LOCATE ZeilenNr% + differenz%, SpaltenNr%, 0
  54.             PRINT "["; ErsteWahl%; "]"; SPACE$(3); Optionen$(ErsteWahl% - 1); " ";
  55.             Normal
  56.         END IF
  57.     WEND
  58.     IF taste$ = CHR$(27) THEN
  59.         BalkenMenue% = Elemente%
  60.     ELSE
  61.         BalkenMenue% = ErsteWahl%
  62.     END IF
  63. END FUNCTION
  64.  
  65. SUB BildLoeschen (ZeileLinksOben%, SpalteLinksOben%, ZeileRechtsUnten%, SpalteRechtsUnten%, LoeschZeichen$)
  66.     IF LoeschZeichen$ = "" THEN LoeschZeichen$ = " "
  67.     FOR I% = ZeileLinksOben% TO ZeileRechtsUnten%
  68.         LOCATE I%, SpalteLinksOben%
  69.         PRINT STRING$(SpalteRechtsUnten% - SpalteLinksOben% + 1, LoeschZeichen$);
  70.     NEXT I%
  71.     LOCATE 1, 1, 0
  72. END SUB
  73.  
  74. SUB Blinken
  75.     COLOR 18, 0
  76. END SUB
  77.  
  78. SUB Fehlmeld (ZeilenNr%, Fehlertext$)
  79.     LOCATE ZeilenNr%, 2, 0
  80.     PRINT Fehlertext$;
  81.     IF LEN(Fehlertext$) > 50 THEN
  82.         CALL Warten(ZeilenNr% + 1)
  83.     ELSE
  84.         CALL Warten(ZeilenNr%)
  85.     END IF
  86. END SUB
  87.  
  88. SUB Hell
  89.     COLOR 10, 0
  90. END SUB
  91.  
  92. SUB HellBlinken
  93.     COLOR 26, 0
  94. END SUB
  95.  
  96. SUB InputNeu (vorgabe$, gueltig$, typ$, laenge%, nachkomma%, zeile%, spalte%)
  97.  
  98. 'eingaberoutine als ersatz für input
  99. 'benötigt Zeilen- und Spaltenposition und Gesamtlänge des Eingabefeldes
  100. 'typ der Eingabe: (n)umerisch, nur (c)haracter oder (a)lphanumerisch
  101. 'anzahl der nachkommastellen
  102. 'string mit den gültigen zeichen, kann leer sein und wird dann mit
  103. 'default-zeichen belegt
  104. 'vorgabewert, kann auch leer sein
  105.  
  106.     'initialisierungen und prüfungen
  107.     '-------------------------------
  108.  
  109.     CONST ESC = 27
  110.     CONST ENTER = 13
  111.     CONST UEBER = 7
  112.     CONST EINF = 12
  113.     CONST BACKSPACE = 8
  114.  
  115.     steuerzeichen% = 0
  116.     cursor% = UEBER
  117.     position% = 1
  118.     vorzeichen% = 0
  119.     komma% = 0
  120.     einfmerker% = 0
  121.  
  122.     CALL Pruefuebergabe(zeile%, spalte%, typ$, laenge%, nachkomma%, gueltig$, vorgabe$, vorzeichen%, komma%, fehler%)
  123.  
  124.     'Abbruch, falls Übergabefehler entdeckt
  125.     '--------------------------------------
  126.                        
  127.     IF fehler% THEN
  128.         EXIT SUB
  129.     END IF
  130.  
  131.     'eingabe$ mit blanks bis laenge füllen
  132.     '--------------------------------------------------
  133.  
  134.     eingabe$ = vorgabe$ + SPACE$(laenge% - LEN(vorgabe$))
  135.  
  136.     'eingabeschleife
  137.     '---------------
  138.  
  139.     LOCATE zeile%, spalte%, 1, 6, UEBER
  140.     Invers
  141.     PRINT eingabe$
  142.     Normal
  143.     LOCATE zeile%, spalte%, 1, 6, UEBER
  144.  
  145.     DO
  146.         fehler% = 0
  147.         A$ = ""
  148.         WHILE A$ = ""
  149.             A$ = INKEY$
  150.         WEND
  151.  
  152.         IF LEN(A$) = 1 THEN
  153.             SONDERZEICHEN% = 0
  154.             v$ = A$
  155.         ELSE
  156.             SONDERZEICHEN% = 1
  157.             v$ = RIGHT$(A$, 1)
  158.         END IF
  159.  
  160.         IF SONDERZEICHEN% = 0 AND ASC(v$) <> BACKSPACE THEN
  161.             SELECT CASE ASC(v$)
  162.             CASE ESC
  163.                 EXIT DO
  164.             CASE ENTER
  165.                 IF INSTR(eingabe$, ".") THEN
  166.                     vor$ = LEFT$(eingabe$, INSTR(eingabe$, ".") - 1)
  167.                     nach$ = RTRIM$(RIGHT$(eingabe$, laenge% - INSTR(eingabe$, ".")))
  168.                 ELSE
  169.                     vor$ = RTRIM$(eingabe$)
  170.                     nach$ = ""
  171.                 END IF
  172.                 IF LEN(vor$) > laenge% - nachkomma% - 1 AND typ$ = "N" THEN
  173.                     CALL Fehlmeld(23, "Zu viele Vorkommastellen in der Eingabe")
  174.                     fehler% = 1
  175.                 END IF
  176.                 IF LEN(nach$) > nachkomma% AND typ$ = "N" THEN
  177.                     CALL Fehlmeld(23, "Zu viele Nachkommastellen in der Eingabe")
  178.                     fehler% = 1
  179.                 END IF
  180.                 IF fehler% = 0 THEN
  181.                     EXIT DO
  182.                 END IF
  183.             CASE ELSE
  184.                 IF INSTR(gueltig$, v$) THEN
  185.                     SELECT CASE typ$
  186.                     CASE "C", "A"
  187.                         CALL Zeichen(einfmerker%, eingabe$, laenge%, position%, v$)
  188.                     CASE "N"
  189.                         CALL Numerisch(komma%, vorzeichen%, einfmerker%, eingabe$, laenge%, position%, v$)
  190.                     END SELECT
  191.                 ELSE
  192.                     CALL Fehlmeld(23, "Kein gültiges Zeichen")
  193.                     fehler% = 1
  194.                 END IF
  195.             END SELECT
  196.         ELSE
  197.             CALL Sonder(typ$, vorzeichen%, komma%, cursor%, einfmerker%, eingabe$, laenge%, position%, v$)
  198.         END IF
  199.       
  200.         LOCATE zeile%, spalte%, 1, 6, cursor%
  201.         Invers
  202.         PRINT eingabe$
  203.         Normal
  204.         LOCATE zeile%, spalte% + position% - 1, 1, 6, cursor%
  205.  
  206.     LOOP
  207.  
  208.     'Rechtsbündige BLANKS entfernen, falls ENTER
  209.     'bei ESC bleibt vorgabe$ unverändert
  210.     '--------------------------------------------
  211.  
  212.     IF ASC(v$) = ENTER THEN
  213.         vorgabe$ = RTRIM$(eingabe$)
  214.     END IF
  215.  
  216. END SUB
  217.  
  218. SUB Invers
  219.     COLOR 0, 7
  220. END SUB
  221.  
  222. SUB Normal
  223.     COLOR 7, 0
  224. END SUB
  225.  
  226. SUB Numerisch (komma%, vorzeichen%, einfmerker%, eingabe$, laenge%, position%, v$)
  227.  
  228.     IF v$ = "," THEN v$ = "."
  229.     IF v$ = "." THEN
  230.         SELECT CASE einfmerker%
  231.         CASE 0
  232.             IF komma% = 1 AND INSTR(eingabe$, ".") <> position% THEN
  233.                 CALL Fehlmeld(23, "Dezimalpunkt bereits vorhanden")
  234.                 EXIT SUB
  235.             END IF
  236.             IF komma% = 0 THEN
  237.                 komma% = 1
  238.             END IF
  239.         CASE 1
  240.             IF komma% = 1 THEN
  241.                 CALL Fehlmeld(23, "Dezimalpunkt bereits vorhanden")
  242.                 EXIT SUB
  243.             END IF
  244.             IF LEN(RTRIM$(eingabe$)) < laenge% THEN
  245.                 komma% = 1
  246.             END IF
  247.         END SELECT
  248.     END IF
  249.     IF v$ <> "." AND INSTR(eingabe$, ".") = position% AND einfmerker% = 0 THEN
  250.         komma% = 0
  251.     END IF
  252.     IF (v$ = "+" OR v$ = "-") AND position% <> 1 THEN
  253.         CALL Fehlmeld(23, "Vorzeichen nur am Anfang des Feldes möglich")
  254.         EXIT SUB
  255.     END IF
  256.     IF (v$ = "+" OR v$ = "-") AND position% = 1 AND einfmerker% = 1 AND vorzeichen% = 1 THEN
  257.         CALL Fehlmeld(23, "Einfügen eines weiteren Vorzeichens unmöglich")
  258.         EXIT SUB
  259.     END IF
  260.     IF v$ = "+" OR v$ = "-" THEN
  261.         vorzeichen% = 1
  262.     END IF
  263.   
  264.     CALL Zeichen(einfmerker%, eingabe$, laenge%, position%, v$)
  265.  
  266.  
  267. END SUB
  268.  
  269. SUB Pruefuebergabe (zeile%, spalte%, typ$, laenge%, nachkomma%, gueltig$, vorgabe$, vorzeichen%, komma%, fehler%)
  270.   
  271.     IF LEN(vorgabe$) > laenge% THEN
  272.         CALL Fehlmeld(23, "Vorgabe ist zu lang")
  273.         fehler% = 1
  274.     END IF
  275.     SELECT CASE typ$
  276.     CASE "c", "C"
  277.         typ$ = "C"
  278.         nachkomma% = 0
  279.         IF LEN(gueltig$) = 0 THEN
  280.             gueltig$ = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZäöüÄÖÜß"
  281.         END IF
  282.     CASE "a", "A"
  283.         typ$ = "A"
  284.         nachkomma% = 0
  285.         IF gueltig$ = "" THEN
  286.             FOR I = 1 TO 255
  287.                 gueltig$ = gueltig$ + CHR$(I)
  288.             NEXT I
  289.         END IF
  290.     CASE "n", "N"
  291.         typ$ = "N"
  292.         IF LEN(gueltig$) = 0 THEN
  293.             gueltig$ = "0123456789+-.,"
  294.         END IF
  295.         IF laenge% - nachkomma% < 2 THEN
  296.             CALL Fehlmeld(23, "Gesamtlaenge des Feldes nicht ausreichend")
  297.             fehler% = 1
  298.         END IF
  299.         SELECT CASE INSTR(vorgabe$, "+")
  300.         CASE 0
  301.             vorzeichen% = 0
  302.         CASE 1
  303.             vorzeichen% = 1
  304.         CASE IS > 1
  305.             CALL Fehlmeld(23, "Pluszeichen nur an der ersten Position erlaubt")
  306.             fehler% = 1
  307.         END SELECT
  308.         SELECT CASE INSTR(vorgabe$, "-")
  309.         CASE 0
  310.             vorzeichen% = 0
  311.         CASE 1
  312.             vorzeichen% = 1
  313.         CASE IS > 1
  314.             CALL Fehlmeld(23, "Minuszeichen nur an der ersten Position erlaubt")
  315.             fehler% = 1
  316.         END SELECT
  317.         komma% = 0
  318.         FOR I = 1 TO LEN(vorgabe$)
  319.             IF MID$(vorgabe$, I, 1) = "." OR MID$(vorgabe$, I, 1) = "," THEN
  320.                 komma% = komma% + 1
  321.             END IF
  322.             IF komma% > 1 THEN
  323.                 CALL Fehlmeld(23, "Mehr als ein Dezimalpunkt in der Vorgabe")
  324.                 fehler% = 1
  325.             END IF
  326.         NEXT I
  327.         IF INSTR(vorgabe$, ",") <> 0 THEN
  328.             vorgabe$ = LEFT$(vorgabe$, INSTR(vorgabe$, ",") - 1) + "." + RIGHT$(vorgabe$, LEN(vorgabe$) - INSTR(vorgabe$, ","))
  329.         END IF
  330.         FOR I = 1 TO LEN(vorgabe$)
  331.             SELECT CASE MID$(vorgabe$, I, 1)
  332.             CASE "0" TO "9", "+", "-", "."
  333.             CASE ELSE
  334.                 CALL Fehlmeld(23, "Ungültige Zeichen in der numerischen Vorgabe")
  335.                 fehler% = 1
  336.                 EXIT FOR
  337.             END SELECT
  338.         NEXT I
  339.     CASE ELSE
  340.         CALL Fehlmeld(23, "Falsches Typkennzeichen gewählt, nur 'c', 'a' und 'n' erlaubt")
  341.         fehler% = 1
  342.     END SELECT
  343.     SELECT CASE zeile%
  344.     CASE IS < 1, IS > 25
  345.         CALL Fehlmeld(23, "Zeilenposition außerhalb des Bereichs")
  346.         fehler% = 1
  347.     END SELECT
  348.     SELECT CASE spalte%
  349.     CASE IS < 1, IS > 80
  350.         CALL Fehlmeld(23, "Spaltenposition außerhalb des Bereichs")
  351.         fehler% = 1
  352.     END SELECT
  353.     IF INSTR(vorgabe$, ".") THEN
  354.         vor$ = LEFT$(vorgabe$, INSTR(vorgabe$, ".") - 1)
  355.         nach$ = MID$(vorgabe$, INSTR(vorgabe$, ".") + 1)
  356.     ELSE
  357.         vor$ = RTRIM$(vorgabe$)
  358.         nach$ = ""
  359.     END IF
  360.     IF LEN(vor$) > laenge% - nachkomma% - 1 AND typ$ = "N" THEN
  361.         CALL Fehlmeld(23, "Zu viele Vorkommastellen in der Vorgabe")
  362.         fehler% = 1
  363.     END IF
  364.     IF LEN(nach$) > nachkomma% AND typ$ = "N" THEN
  365.         CALL Fehlmeld(23, "Zu viele Nachkommastellen in der Vorgabe")
  366.         fehler% = 1
  367.     END IF
  368.  
  369. END SUB
  370.  
  371. SUB Rahmen (ZeileLinksOben%, SpalteLinksOben%, ZeileRechtsUnten%, SpalteRechtsUnten%, RahmenZeichen$)
  372.     SELECT CASE RahmenZeichen$
  373.         CASE CHR$(201)
  374.             ZeichenLinksOben$ = CHR$(201)
  375.             ZeichenLinksUnten$ = CHR$(200)
  376.             ZeichenRechtsOben$ = CHR$(187)
  377.             ZeichenRechtsUnten$ = CHR$(188)
  378.             ZeichenWaagrecht$ = CHR$(205)
  379.             ZeichenSenkrecht$ = CHR$(186)
  380.         CASE CHR$(218)
  381.             ZeichenLinksOben$ = CHR$(218)
  382.             ZeichenLinksUnten$ = CHR$(192)
  383.             ZeichenRechtsOben$ = CHR$(191)
  384.             ZeichenRechtsUnten$ = CHR$(217)
  385.             ZeichenWaagrecht$ = CHR$(196)
  386.             ZeichenSenkrecht$ = CHR$(179)
  387.         CASE CHR$(213)
  388.             ZeichenLinksOben$ = CHR$(213)
  389.             ZeichenLinksUnten$ = CHR$(212)
  390.             ZeichenRechtsOben$ = CHR$(184)
  391.             ZeichenRechtsUnten$ = CHR$(190)
  392.             ZeichenWaagrecht$ = CHR$(205)
  393.             ZeichenSenkrecht$ = CHR$(179)
  394.         CASE CHR$(214)
  395.             ZeichenLinksOben$ = CHR$(214)
  396.             ZeichenLinksUnten$ = CHR$(211)
  397.             ZeichenRechtsOben$ = CHR$(183)
  398.             ZeichenRechtsUnten$ = CHR$(189)
  399.             ZeichenWaagrecht$ = CHR$(196)
  400.             ZeichenSenkrecht$ = CHR$(186)
  401.         CASE ELSE
  402.             ZeichenLinksOben$ = RahmenZeichen$
  403.             ZeichenLinksUnten$ = RahmenZeichen$
  404.             ZeichenRechtsOben$ = RahmenZeichen$
  405.             ZeichenRechtsUnten$ = RahmenZeichen$
  406.             ZeichenWaagrecht$ = RahmenZeichen$
  407.             ZeichenSenkrecht$ = RahmenZeichen$
  408.     END SELECT
  409.     LOCATE ZeileLinksOben%, SpalteLinksOben%
  410.     PRINT ZeichenLinksOben$; STRING$(SpalteRechtsUnten% - SpalteLinksOben% - 1, ZeichenWaagrecht$); ZeichenRechtsOben$;
  411.     FOR I% = ZeileLinksOben% + 1 TO ZeileRechtsUnten% - 1
  412.         LOCATE I%, SpalteLinksOben%
  413.         PRINT ZeichenSenkrecht$;
  414.         LOCATE I%, SpalteRechtsUnten%
  415.         PRINT ZeichenSenkrecht$;
  416.     NEXT I%
  417.     LOCATE ZeileRechtsUnten%, SpalteLinksOben%
  418.     PRINT ZeichenLinksUnten$; STRING$(SpalteRechtsUnten% - SpalteLinksOben% - 1, ZeichenWaagrecht$); ZeichenRechtsUnten$;
  419. END SUB
  420.  
  421. SUB Sonder (typ$, vorzeichen%, komma%, cursor%, einfmerker%, eingabe$, laenge%, position%, v$)
  422.   
  423.     CONST UEBER = 7
  424.     CONST EINF = 12
  425.     CONST BACKSPACE = 8
  426.     CONST BLANK = " "
  427.     CONST CURLINKS = 75
  428.     CONST CURRECHTS = 77
  429.     CONST CURHOCH = 72
  430.     CONST CURRUNTER = 80
  431.     CONST HOME = 71
  432.     CONST ENDE = 79
  433.     CONST DEL = 83
  434.     CONST INS = 82
  435.  
  436.     'DEL
  437.     '---
  438.     IF ASC(v$) = DEL THEN
  439.         loesch$ = MID$(eingabe$, position%, 1)
  440.         IF typ$ = "N" AND loesch$ = "." THEN komma% = 0
  441.         IF typ$ = "N" AND (loesch$ = "+" OR loesch$ = "-") THEN vorzeichen% = 0
  442.         eingabe$ = LEFT$(eingabe$, position% - 1) + RIGHT$(eingabe$, laenge% - position%) + BLANK
  443.         EXIT SUB
  444.     END IF
  445.              
  446.     'BACKSPACE
  447.     '---------
  448.     IF ASC(v$) = BACKSPACE THEN
  449.         IF position% = 1 THEN
  450.             BEEP
  451.             EXIT SUB
  452.         ELSE
  453.             IF position% = laenge% THEN
  454.                 loesch$ = MID$(eingabe$, position%, 1)
  455.                 IF MID$(eingabe$, laenge%, 1) = BLANK THEN
  456.                     position% = position% - 1
  457.                     eingabe$ = LEFT$(eingabe$, position% - 1) + RIGHT$(eingabe$, laenge% - position%) + BLANK
  458.                 ELSE
  459.                     eingabe$ = LEFT$(eingabe$, position% - 1) + BLANK
  460.                 END IF
  461.             ELSE
  462.                 loesch$ = MID$(eingabe$, position% - 1, 1)
  463.                 position% = position% - 1
  464.                 eingabe$ = LEFT$(eingabe$, position% - 1) + RIGHT$(eingabe$, laenge% - position%) + BLANK
  465.             END IF
  466.         END IF
  467.         IF typ$ = "N" AND loesch$ = "." THEN komma% = 0
  468.         IF typ$ = "N" AND (loesch$ = "+" OR loesch$ = "-") THEN vorzeichen% = 0
  469.         EXIT SUB
  470.     END IF
  471.  
  472.     'Sonderzeichen
  473.     '-------------
  474.  
  475.         SELECT CASE ASC(v$)
  476.         CASE CURHOCH, CURRUNTER
  477.             BEEP
  478.         CASE CURLINKS
  479.             IF position% > 1 THEN
  480.                 position% = position% - 1
  481.             ELSE
  482.                 BEEP
  483.             END IF
  484.         CASE CURRECHTS
  485.             IF typ$ <> "N" THEN
  486.                 IF position% < laenge% THEN
  487.                     position% = position% + 1
  488.                 ELSE
  489.                     BEEP
  490.                 END IF
  491.             ELSE
  492.                 IF MID$(eingabe$, position%, 1) <> BLANK THEN
  493.                     position% = position% + 1
  494.                 ELSE
  495.                     BEEP
  496.                 END IF
  497.             END IF
  498.         CASE HOME
  499.             position% = 1
  500.         CASE ENDE
  501.             IF typ$ <> "N" THEN
  502.                 position% = laenge%
  503.             ELSE
  504.                 position% = LEN(RTRIM$(eingabe$)) + 1
  505.             END IF
  506.         CASE INS
  507.             IF einfmerker% THEN
  508.                 einfmerker% = 0
  509.                 cursor% = 7
  510.             ELSE
  511.                 einfmerker% = 1
  512.                 cursor% = 12
  513.             END IF
  514.         END SELECT
  515.  
  516. END SUB
  517.  
  518. SUB Unterstrichen
  519.     COLOR 1, 0
  520. END SUB
  521.  
  522. SUB Warten (ZeilenNr%)
  523.     LOCATE ZeilenNr%, 55, 0
  524.     PRINT " Weiter mit ";
  525.     Invers
  526.     PRINT "<TASTE>";
  527.     Normal
  528.     dummy$ = INPUT$(1)
  529.     LOCATE ZeilenNr%, 2, 0
  530.     PRINT SPACE$(78);
  531. END SUB
  532.  
  533. SUB Zeichen (einfmerker%, eingabe$, laenge%, position%, v$)
  534.  
  535.     IF einfmerker% = 1 THEN
  536.         IF LEN(RTRIM$(eingabe$)) < laenge% THEN
  537.             eingabe$ = LEFT$(eingabe$, position% - 1) + v$ + MID$(eingabe$, position%, laenge% - position%)
  538.         ELSE
  539.             CALL Fehlmeld(23, "Einfügen unmöglich, Feld bereits gefüllt")
  540.             position% = position% - 1
  541.         END IF
  542.     ELSE
  543.         eingabe$ = LEFT$(eingabe$, position% - 1) + v$ + MID$(eingabe$, position% + 1, laenge% - position%)
  544.     END IF
  545.     IF position% < laenge% THEN
  546.         position% = position% + 1
  547.     END IF
  548.  
  549. END SUB
  550.  
  551. FUNCTION ZeilenMenue% (ZeilenNr%, SpaltenNr%, Elemente%, ErsteWahl%, Optionen$())
  552.     DIM OptionsLaenge%(Elemente% - 1)
  553.     OptionsLaenge%(0) = 0
  554.     LOCATE ZeilenNr%, SpaltenNr%, 0
  555.     FOR I% = 1 TO Elemente%
  556.         IF I% = ErsteWahl% THEN
  557.             Invers
  558.             PRINT " "; Optionen$(I% - 1); " ";
  559.             Normal
  560.         ELSE
  561.             PRINT " "; Optionen$(I% - 1); " ";
  562.         END IF
  563.         IF I% > 1 THEN
  564.             OptionsLaenge%(I% - 1) = OptionsLaenge%(I% - 2) + (LEN(Optionen$(I% - 2)) + 2)
  565.         END IF
  566.     NEXT I%
  567.     taste$ = CHR$(255)
  568.     WHILE taste$ <> CHR$(13)
  569.         taste$ = INKEY$
  570.         IF (LEN(taste$) = 2 AND (RIGHT$(taste$, 1) = CHR$(75) OR RIGHT$(taste$, 1) = CHR$(77))) OR taste$ = CHR$(27) THEN
  571.             LOCATE ZeilenNr%, SpaltenNr% + OptionsLaenge%(ErsteWahl% - 1), 0
  572.             PRINT " "; Optionen$(ErsteWahl% - 1); " ";
  573.             IF RIGHT$(taste$, 1) = CHR$(75) THEN
  574.                 ErsteWahl% = ErsteWahl% - 1
  575.                 IF ErsteWahl% < 1 THEN ErsteWahl% = Elemente%
  576.             END IF
  577.             IF RIGHT$(taste$, 1) = CHR$(77) THEN
  578.                 ErsteWahl% = ErsteWahl% + 1
  579.                 IF ErsteWahl% > Elemente% THEN ErsteWahl% = 1
  580.             END IF
  581.             IF taste$ = CHR$(27) THEN
  582.                 ErsteWahl% = Elemente%
  583.             END IF
  584.             LOCATE ZeilenNr%, SpaltenNr% + OptionsLaenge%(ErsteWahl% - 1), 0
  585.             Invers
  586.             PRINT " "; Optionen$(ErsteWahl% - 1); " ";
  587.             Normal
  588.         END IF
  589.     WEND
  590.     IF taste$ = CHR$(27) THEN
  591.         ZeilenMenue% = Elemente%
  592.     ELSE
  593.         ZeilenMenue% = ErsteWahl%
  594.     END IF
  595. END FUNCTION
  596.  
  597.