home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0671.ZIP / CCE_0671.PD / SHARP / EXPANDER.GFA (.txt) next >
GFA-BASIC Atari  |  1989-04-06  |  58KB  |  2,399 lines

  1. @vB_0
  2. '
  3. DO
  4.   ON MENU
  5. LOOP
  6. '
  7. > PROCEDURE vB_1 ! angeklickt
  8.   MENU OFF
  9.   IF v5_0$(MENU(0))=" Text drucken"
  10.     @vB_2(1,v2_0%)
  11.   ENDIF
  12.   IF v5_0$(MENU(0))=" EOF - EOL"
  13.     @vB_3
  14.   ENDIF
  15.   IF v5_0$(MENU(0))=" Schnittstelle"
  16.     @vB_4
  17.   ENDIF
  18.   IF v5_0$(MENU(0))=" Rechnertyp"
  19.     @vB_5
  20.   ENDIF
  21.   IF v5_0$(MENU(0))=" Anfang Block"
  22.     @vB_6(1)
  23.   ENDIF
  24.   IF v5_0$(MENU(0))=" Ende Block"
  25.     @vB_6(2)
  26.   ENDIF
  27.   IF v5_0$(MENU(0))=" Löschen"
  28.     @vB_6(4)
  29.   ENDIF
  30.   IF v5_0$(MENU(0))=" Kopieren"
  31.     @vB_6(6)
  32.   ENDIF
  33.   IF v5_0$(MENU(0))=" Verschieben"
  34.     @vB_6(5)
  35.   ENDIF
  36.   IF v5_0$(MENU(0))=" Block drucken"
  37.     @vB_2(v2_1%,v2_2%)
  38.   ENDIF
  39.   IF v5_0$(MENU(0))=" Marken löschen"
  40.     @vB_6(3)
  41.   ENDIF
  42.   IF v5_0$(MENU(0))=" Isolieren"
  43.     @vB_6(7)
  44.   ENDIF
  45.   IF v5_0$(MENU(0))=" Block schreiben"
  46.     @vB_7(v2_1%,v2_2%)
  47.   ENDIF
  48.   IF v5_0$(MENU(0))=" Block senden"
  49.     @vB_8(v2_1%,v2_2%)
  50.   ENDIF
  51.   IF v5_0$(MENU(0))=" -> Blockanfang"
  52.     @vB_6(8)
  53.   ENDIF
  54.   IF v5_0$(MENU(0))=" -> Blockende"
  55.     @vB_6(9)
  56.   ENDIF
  57.   IF v5_0$(MENU(0))=" Suchen"
  58.     @vB_9(0)
  59.   ENDIF
  60.   IF v5_0$(MENU(0))=" Weitersuchen "
  61.     @vB_9(1)
  62.   ENDIF
  63.   IF v5_0$(MENU(0))=" Kompressor"
  64.     @vB_A
  65.   ENDIF
  66.   IF v5_0$(MENU(0))=" Alles neu"
  67.     @vB_B(0)
  68.   ENDIF
  69.   IF v5_0$(MENU(0))=" Datei schreiben"
  70.     @vB_7(1,v2_0%)
  71.   ENDIF
  72.   IF v5_0$(MENU(0))=" Datei lesen"
  73.     @vB_C(1)
  74.   ENDIF
  75.   IF v5_0$(MENU(0))=" Datei anhängen"
  76.     @vB_C(2)
  77.   ENDIF
  78.   IF v5_0$(MENU(0))=" Datei senden"
  79.     @vB_8(1,v2_0%)
  80.   ENDIF
  81.   IF v5_0$(MENU(0))=" Datei holen"
  82.     @vB_D(1)
  83.   ENDIF
  84.   IF v5_0$(MENU(0))=" Datei mergen"
  85.     @vB_D(2)
  86.   ENDIF
  87.   IF v5_0$(MENU(0))=" Säubern"
  88.     @vB_E
  89.   ENDIF
  90.   IF v5_0$(MENU(0))=" Drucker"
  91.     @vB_F
  92.   ENDIF
  93.   IF v5_0$(MENU(0))=" REM-Killer"
  94.     @vB_10
  95.   ENDIF
  96.   IF v5_0$(MENU(0))=" Space"
  97.     @vB_11
  98.   ENDIF
  99.   IF v5_0$(MENU(0))=" Einfügen"
  100.     v2_3%=NOT v2_3%
  101.     IF v2_3%=TRUE
  102.       MENU 28,1
  103.     ELSE
  104.       MENU 28,0
  105.     ENDIF
  106.   ENDIF
  107.   IF v5_0$(MENU(0))=" Ende"
  108.     GOSUB vB_12
  109.   ENDIF
  110.   IF v5_0$(MENU(0))=" Information"
  111.     GOSUB vB_13
  112.   ENDIF
  113.   IF v5_0$(MENU(0))=" Statistik"
  114.     @vB_14
  115.   ENDIF
  116. RETURN
  117. > PROCEDURE vB_4 ! Parameter DFÜ
  118.   '  Auslesen der Werte unbekannt (Schnittstelle direkt)
  119.   '  Benutzen und Macken der Schittstelle erkennen sind noch nicht möglich
  120.   '  Weitere Infos unter INPAUX$ und XBIOS 14 (RS232 empfangen)
  121.   OPENW 0
  122.   @vB_15(110,82,520,266,"RS 232 Parameter")
  123.   @vB_16(208,236,350)
  124.   TEXT 138,140,"Baudrate:    300     1200     2400     4800"
  125.   TEXT 138,160,"Databits:     5        6        7        8"
  126.   TEXT 146,180,"Parität:    none     even     odd"
  127.   TEXT 138,200,"Stopbits:"
  128.   TEXT 322,200,"1       1.5       2"
  129.   TEXT 130,220,"Handshake:    ---    XONXOFF  RTS/CTS  RTS+XON"
  130.   FOR v2_4%=125 TO 225 STEP 20
  131.     LINE 216,v2_4%,504,v2_4%
  132.   NEXT v2_4%
  133.   FOR v2_4%=216 TO 504 STEP 72 ! alles durch 72 teilbar
  134.     LINE v2_4%,125,v2_4%,225
  135.   NEXT v2_4%
  136.   GRAPHMODE 3
  137.   DEFFILL 1,1
  138.   LINE 504,166,504,184
  139.   LINE 216,186,216,204
  140.   FOR v9_0|=1 TO 5    ! vorgabeparameter setzen
  141.     FOR v9_1|=1 TO 4
  142.       IF vD_0|(v9_0|,v9_1|)=1
  143.         PBOX (v9_1|+2)*72,((v9_0|+5)*20)+5,(v9_1|+2)*72+72,((v9_0|+5)*20+20)+5
  144.       ENDIF
  145.     NEXT v9_1| ! die pbox-zeile könnte in ein eigenes subprog
  146.   NEXT v9_0|
  147.   DEFMOUSE 3
  148.   GRAPHMODE 1
  149.   '
  150.   v3_0!=FALSE
  151.   REPEAT
  152.     REPEAT
  153.       MOUSE v2_5%,v2_6%,v2_7%  ! ab hier einstellen
  154.     UNTIL v2_7%=1
  155.     v2_8%=v2_5%/72 ! bildschirm auf felder umrechnen
  156.     SUB v2_6%,5
  157.     v2_9%=v2_6%/20
  158.     SUB v2_8%,2
  159.     SUB v2_9%,5
  160.     '
  161.     IF v2_8%>0 AND v2_8%<5 AND v2_9%>0 AND v2_9%<6  ! innerhalb klickbereich?
  162.       IF NOT (v2_8%=4 AND v2_9%=3)
  163.         IF NOT (v2_8%=1 AND v2_9%=4)
  164.           FOR v2_4%=1 TO 4
  165.             IF vD_0|(v2_9%,v2_4%)=1  ! altes feld löschen
  166.               vD_0|(v2_9%,v2_4%)=0
  167.               GRAPHMODE 3
  168.               PBOX (v2_4%+2)*72,((v2_9%+5)*20)+5,(v2_4%+2)*72+72,((v2_9%+5)*20+20)+5
  169.               GRAPHMODE 1
  170.             ENDIF
  171.           NEXT v2_4%
  172.           vD_0|(v2_9%,v2_8%)=1 ! angeklicktes feld setzen
  173.           GRAPHMODE 3
  174.           PBOX (v2_8%+2)*72,((v2_9%+5)*20)+5,(v2_8%+2)*72+72,((v2_9%+5)*20+20)+5
  175.           GRAPHMODE 1
  176.         ENDIF
  177.       ENDIF
  178.     ENDIF
  179.     '
  180.     IF v2_6%>236 AND v2_6%<262
  181.       IF v2_5%>208 AND v2_5%<290 ! Abbruch-Button
  182.         GRAPHMODE 3
  183.         PBOX 208,236,280,256
  184.         GRAPHMODE 1
  185.         v3_0!=TRUE
  186.       ENDIF
  187.       IF v2_5%>351 AND v2_5%<423 ! OK-Button
  188.         GRAPHMODE 3
  189.         PBOX 351,237,421,255
  190.         GRAPHMODE 1
  191.         FOR v2_4%=1 TO 4
  192.           IF vD_0|(1,v2_4%)=1
  193.             v2_A%=v6_0%(1,v2_4%) ! baudrate
  194.           ENDIF
  195.           IF vD_0|(5,v2_4%)=1
  196.             v2_B%=v6_0%(5,v2_4%) ! handshake
  197.           ENDIF
  198.         NEXT v2_4%
  199.         v2_C%=0
  200.         FOR v2_8%=2 TO 4
  201.           FOR v2_9%=1 TO 4
  202.             IF vD_0|(v2_8%,v2_9%)=1
  203.               ADD v2_C%,v6_0%(v2_8%,v2_9%) ! "rest"
  204.             ENDIF
  205.           NEXT v2_9% ! letzte drei werte nicht verstellen
  206.         NEXT v2_8%   ! var% liefert tolle Ergebnisse (Fehler?)
  207.         VOID XBIOS(15,v2_A%,v2_B%,v2_C%+128,-1,-1,-1) ! void=fehlercode
  208.         v3_0!=TRUE ! nach omikron.basic ist usart um 128 zu erhöhen
  209.       ENDIF
  210.     ENDIF
  211.     WHILE MOUSEK>0 ! kein autorepeat
  212.     WEND
  213.   UNTIL v3_0!=TRUE ! vielleicht noch eine huschbox
  214.   @vB_17
  215.   DEFMOUSE 0
  216.   CLOSEW 0
  217.   OPENW 1
  218. RETURN
  219. > PROCEDURE vB_3  ! Parameter EOF
  220.   OPENW 0
  221.   @vB_15(180,112,460,240,"File- Endkennungen")
  222.   @vB_16(200,210,368)
  223.   TEXT 200,170,"Zeilenende:   CR    LF   CR/LF"
  224.   TEXT 216,190,"Fileende:   $1A"
  225.   TEXT 297,191,CHR$(4)
  226.   TEXT 342,191,CHR$(3)
  227.   TEXT 385,170,CHR$(8) ! CR-LF
  228.   BOX 294,156,308,173
  229.   BOX 342,156,356,173
  230.   BOX 382,156,396,173
  231.   BOX 294,176,308,193
  232.   BOX 338,176,352,193
  233.   v2_D%=FALSE
  234.   v3_1!=FALSE
  235.   LET v2_E%=ASC(v1_0$)
  236.   DEFMOUSE 3
  237.   '
  238.   REPEAT
  239.     MOUSE v2_F%,v2_10%,v2_11%
  240.     v1_1$=INKEY$
  241.     IF v2_11%=1
  242.       IF v2_10%>156 AND v2_10%<173 ! obere Zeile
  243.         v9_2|=0
  244.         IF v2_F%>294 AND v2_F%<308
  245.           v9_2|=1
  246.         ENDIF
  247.         IF v2_F%>342 AND v2_F%<356
  248.           v9_2|=2
  249.         ENDIF
  250.         IF v2_F%>382 AND v2_F%<396
  251.           v9_2|=3
  252.         ENDIF
  253.         IF v9_2|>0
  254.           BOUNDARY 0
  255.           PBOX 295,157,307,172
  256.           PBOX 343,157,355,172
  257.           PBOX 383,157,395,172
  258.           BOUNDARY 1
  259.           SELECT v9_2|
  260.           CASE 1
  261.             TEXT 297,170,CHR$(8)
  262.           CASE 2
  263.             TEXT 345,170,CHR$(8)
  264.           CASE 3
  265.             TEXT 385,170,CHR$(8)
  266.           ENDSELECT
  267.         ENDIF
  268.       ENDIF
  269.       '
  270.       IF v2_10%>176 AND v2_10%<193 ! untere Zeile
  271.         IF v2_F%>294 AND v2_F%<308
  272.           DEC v2_E%
  273.           IF v2_E%<0
  274.             LET v2_E%=255
  275.           ENDIF
  276.           IF v2_E%<16
  277.             TEXT 320,190,"0"+HEX$(v2_E%)
  278.           ELSE
  279.             TEXT 320,190,HEX$(v2_E%)
  280.           ENDIF
  281.         ENDIF
  282.         IF v2_F%>338 AND v2_F%<352
  283.           INC v2_E%
  284.           IF v2_E%>255
  285.             LET v2_E%=0
  286.           ENDIF
  287.           IF v2_E%<16
  288.             TEXT 320,190,"0"+HEX$(v2_E%)
  289.           ELSE
  290.             TEXT 320,190,HEX$(v2_E%)
  291.           ENDIF
  292.         ENDIF
  293.         PAUSE 5
  294.       ENDIF
  295.       '
  296.       IF v2_10%>210 AND v2_10%<230
  297.         IF v2_F%>368 AND v2_F%<440 ! OK-Button
  298.           GRAPHMODE 3
  299.           DEFFILL 1,1
  300.           PBOX 369,211,439,229
  301.           DEFFILL 1,0
  302.           GRAPHMODE 1
  303.           v2_D%=TRUE
  304.           v3_1!=TRUE
  305.         ENDIF
  306.         IF v2_F%>200 AND v2_F%<272 ! Abbruch
  307.           GRAPHMODE 3
  308.           DEFFILL 1,1
  309.           PBOX 200,210,272,230
  310.           DEFFILL 1,0
  311.           GRAPHMODE 1
  312.           v2_D%=TRUE
  313.         ENDIF
  314.       ENDIF
  315.     ENDIF
  316.     IF v1_1$=CHR$(13)
  317.       GRAPHMODE 3
  318.       DEFFILL 1,1
  319.       PBOX 369,211,439,229
  320.       DEFFILL 1,0
  321.       GRAPHMODE 1
  322.       v2_D%=TRUE
  323.     ENDIF
  324.   UNTIL v2_D%=TRUE
  325.   IF v3_1!=TRUE
  326.     LET v1_0$=CHR$(v2_E%)
  327.     SELECT v9_2|
  328.     CASE 1
  329.       LET v1_2$=CHR$(13)
  330.     CASE 2
  331.       LET v1_2$=CHR$(10)
  332.     CASE 3
  333.       LET v1_2$=CHR$(13)+CHR$(10)
  334.     ENDSELECT
  335.   ENDIF
  336.   @vB_17
  337.   DEFMOUSE 0
  338.   CLOSEW 0
  339.   OPENW 1
  340. RETURN
  341. > PROCEDURE vB_F ! Dialog Druck
  342.   OPENW 0
  343.   @vB_15(180,112,460,250,"Druckerparameter")
  344.   @vB_16(210,220,356)
  345.   TEXT 200,168,"PICA  ELITE  Linker Rand "+CHR$(4)+"    "+CHR$(3)
  346.   TEXT 208,188,"CQ   Draft  Papierlänge "+CHR$(4)+"    "+CHR$(3)
  347.   TEXT 248,208,"Epson     bedruckt "+CHR$(4)+"    "+CHR$(3)
  348.   TEXT 204,208,"IBM"
  349.   BOX 190,152,292,214 ! Pica...
  350.   LINE 190,172,292,172
  351.   LINE 190,192,292,192
  352.   BOX 396,154,412,171 ! up dwn
  353.   BOX 436,174,451,191
  354.   BOX 396,174,412,191
  355.   BOX 436,154,451,171
  356.   BOX 396,194,412,211
  357.   BOX 436,194,451,211
  358.   '
  359.   GRAPHMODE 3
  360.   DEFMOUSE 3
  361.   DEFFILL 1,1
  362.   IF v6_1%(1)=1
  363.     PBOX 190,152,241,172
  364.     IF v6_1%(3)=1
  365.       v5_1$(1)=CHR$(18)
  366.     ELSE
  367.       v5_1$(1)=v1_3$+"P"
  368.     ENDIF
  369.   ELSE
  370.     PBOX 240,152,292,172
  371.     IF v6_1%(3)=1
  372.       v5_1$(1)=v1_3$+":"
  373.     ELSE
  374.       v5_1$(1)=v1_3$+"M"
  375.     ENDIF
  376.   ENDIF
  377.   IF v6_1%(2)=1
  378.     PBOX 190,172,241,192
  379.     IF v6_1%(3)=1
  380.       v5_1$(2)=v1_3$+"G"
  381.     ELSE
  382.       v5_1$(2)=v1_3$+"x1"
  383.     ENDIF
  384.   ELSE
  385.     PBOX 240,172,292,192
  386.     IF v6_1%(3)=1
  387.       v5_1$(2)=v1_3$+"H"
  388.     ELSE
  389.       v5_1$(2)=v1_3$+"x0"
  390.     ENDIF
  391.   ENDIF
  392.   IF v6_1%(3)=1
  393.     PBOX 190,192,241,214
  394.   ELSE
  395.     PBOX 240,192,292,214
  396.   ENDIF
  397.   IF v6_1%(4)<10
  398.     TEXT 416,168,"0"+STR$(v6_1%(4))
  399.   ELSE
  400.     TEXT 416,168,STR$(v6_1%(4))
  401.   ENDIF
  402.   TEXT 416,188,STR$(v6_1%(5))
  403.   TEXT 416,208,STR$(v6_1%(6))
  404.   '
  405.   v9_3|=0
  406.   REPEAT
  407.     MOUSE v2_12%,v2_13%,v2_14%
  408.     v1_4$=INKEY$
  409.     IF v1_4$=CHR$(13)
  410.       v9_3|=2
  411.     ENDIF
  412.     IF v2_14%=1
  413.       IF v2_12%>190 AND v2_12%<240 ! Pica & co
  414.         GRAPHMODE 3
  415.         IF v2_13%>152 AND v2_13%<172
  416.           IF v6_1%(1)=0
  417.             PBOX 190,152,292,172
  418.             v6_1%(1)=1
  419.           ENDIF
  420.         ENDIF
  421.         IF v2_13%>172 AND v2_13%<192
  422.           IF v6_1%(2)=0
  423.             PBOX 190,172,292,192
  424.             v6_1%(2)=1
  425.           ENDIF
  426.         ENDIF
  427.         IF v2_13%>192 AND v2_13%<212
  428.           IF v6_1%(3)=0
  429.             PBOX 190,192,292,214
  430.             v6_1%(3)=1
  431.           ENDIF
  432.         ENDIF
  433.       ENDIF
  434.       IF v2_12%>240 AND v2_12%<292 ! Elite & co
  435.         GRAPHMODE 3
  436.         IF v2_13%>152 AND v2_13%<172
  437.           IF v6_1%(1)=1
  438.             PBOX 190,152,292,172
  439.             v6_1%(1)=0
  440.           ENDIF
  441.         ENDIF
  442.         IF v2_13%>172 AND v2_13%<192
  443.           IF v6_1%(2)=1
  444.             PBOX 190,172,292,192
  445.             v6_1%(2)=0
  446.           ENDIF
  447.         ENDIF
  448.         IF v2_13%>192 AND v2_13%<212
  449.           IF v6_1%(3)=1
  450.             PBOX 190,192,292,214
  451.             v6_1%(3)=0
  452.           ENDIF
  453.         ENDIF
  454.       ENDIF
  455.       IF v2_13%>220 AND v2_13%<240
  456.         IF v2_12%>356 AND v2_12%<430 ! OK
  457.           v9_3|=1
  458.         ENDIF
  459.         IF v2_12%>210 AND v2_12%<282
  460.           v9_3|=3
  461.         ENDIF
  462.       ENDIF
  463.       '
  464.       IF v2_12%>396 AND v2_12%<412 ! down
  465.         GRAPHMODE 1
  466.         IF v2_13%>154 AND v2_13%<171 AND v6_1%(4)>0
  467.           DEC v6_1%(4)
  468.           IF v6_1%(4)<10
  469.             TEXT 416,168,"0"+STR$(v6_1%(4))
  470.           ELSE
  471.             TEXT 416,168,STR$(v6_1%(4))
  472.           ENDIF
  473.         ENDIF
  474.         IF v2_13%>172 AND v2_13%<191 AND v6_1%(5)>10 AND v6_1%(5)>v6_1%(6)
  475.           DEC v6_1%(5)
  476.           TEXT 416,188,STR$(v6_1%(5))
  477.         ENDIF
  478.         IF v2_13%>192 AND v2_13%<211 AND v6_1%(6)>10
  479.           DEC v6_1%(6)
  480.           TEXT 416,208,STR$(v6_1%(6))
  481.         ENDIF
  482.       ENDIF
  483.       IF v2_12%>436 AND v2_12%<451 ! up
  484.         GRAPHMODE 1
  485.         IF v2_13%>154 AND v2_13%<171 AND v6_1%(4)<40
  486.           INC v6_1%(4)
  487.           IF v6_1%(4)<10
  488.             TEXT 416,168,"0"+STR$(v6_1%(4))
  489.           ELSE
  490.             TEXT 416,168,STR$(v6_1%(4))
  491.           ENDIF
  492.         ENDIF
  493.         IF v2_13%>172 AND v2_13%<191 AND v6_1%(5)<99
  494.           INC v6_1%(5)
  495.           TEXT 416,188,STR$(v6_1%(5))
  496.         ENDIF
  497.         IF v2_13%>192 AND v2_13%<211 AND v6_1%(6)<99 AND v6_1%(5)>v6_1%(6)
  498.           INC v6_1%(6)
  499.           TEXT 416,208,STR$(v6_1%(6))
  500.         ENDIF
  501.       ENDIF
  502.       PAUSE 5
  503.     ENDIF ! mousek
  504.   UNTIL v9_3|>0
  505.   GRAPHMODE 3
  506.   BOUNDARY 0
  507.   DEFFILL 1,1
  508.   IF v9_3|<3 ! OK oder ENTER
  509.     PBOX 358,222,426,238
  510.     IF v6_1%(1)=1
  511.       IF v6_1%(3)=1
  512.         v5_1$(1)=CHR$(18)
  513.       ELSE
  514.         v5_1$(1)=v1_3$+"P"
  515.       ENDIF
  516.     ELSE
  517.       IF v6_1%(3)=1
  518.         v5_1$(1)=v1_3$+":"
  519.       ELSE
  520.         v5_1$(1)=v1_3$+"M"
  521.       ENDIF
  522.     ENDIF
  523.     IF v6_1%(2)=1
  524.       IF v6_1%(3)=1
  525.         v5_1$(2)=v1_3$+"G"
  526.       ELSE
  527.         v5_1$(2)=v1_3$+"x1"
  528.       ENDIF
  529.     ELSE
  530.       IF v6_1%(3)=1
  531.         v5_1$(2)=v1_3$+"H"
  532.       ELSE
  533.         v5_1$(2)=v1_3$+"x0"
  534.       ENDIF
  535.     ENDIF
  536.   ELSE
  537.     PBOX 210,220,282,240
  538.   ENDIF
  539.   BOUNDARY 1
  540.   GRAPHMODE 1
  541.   DEFFILL 1,0
  542.   @vB_17
  543.   DEFMOUSE 0
  544.   CLOSEW 0
  545.   OPENW 1
  546. RETURN
  547. > PROCEDURE vB_C(v2_15%) ! from disk
  548.   ' d_r 1=kill 2=anhängen
  549.   v9_4|=1
  550.   IF v2_15%=1
  551.     v9_4|=3
  552.   ENDIF
  553.   IF v2_0%>1 AND v2_15%=1
  554.     ALERT 1,"|Achtung: Noch Text im Speicher",1,"Löschen|Abbruch",v9_4|
  555.     IF v9_4|=1
  556.       @vB_B(1) ! Löschen 1=alles ohne Rückfrage
  557.     ENDIF
  558.   ENDIF
  559.   v1_27$=RIGHT$(v1_6$,LEN(v1_6$)-RINSTR(v1_6$,"\"))
  560.   IF v2_0%=1 OR v9_4|=1
  561.     v1_5$=v1_6$
  562.     v3_2!=FALSE
  563.     v2_16%=v2_0%
  564.     v2_17%=v2_0%
  565.   ENDIF
  566.   IF v2_0%<v2_18% AND v9_4|<>2
  567.     @vB_18
  568.     DO
  569.       FILESELECT v1_7$,v1_27$,v1_6$
  570.       EXIT IF v1_6$="" OR v1_6$="\" OR RIGHT$(v1_6$,1)="\"
  571.       v2_19%=FALSE
  572.       IF EXIST(v1_6$)
  573.         OPEN "U",#11,v1_6$   ! READ & write
  574.         WHILE NOT EOF(#11)
  575.           LINE INPUT #11,v5_2$(v2_0%)
  576.           INFOW #1," Datei einlesen: Zeile "+STR$(v2_0%)
  577.           INC v2_0%
  578.           IF v2_0%=v2_18%+1
  579.             v2_19%=TRUE
  580.             DEC v2_0%
  581.           ENDIF
  582.           v3_2!=TRUE
  583.           EXIT IF v2_19%=TRUE
  584.         WEND
  585.         CLOSE #11
  586.         v2_1A%=0
  587.         FOR v2_1B%=1 TO v2_0%
  588.           IF LEN(v5_2$(v2_1B%))>v2_1C%
  589.             v5_2$(v2_1B%)=LEFT$(v5_2$(v2_1B%),v2_1C%) ! zu lange Zeilen eingelesen?
  590.             INC v2_1A%
  591.           ENDIF
  592.         NEXT v2_1B%
  593.         OPENW 1
  594.         CLS
  595.         @vB_19
  596.         @vB_18
  597.         MENU 20,3 ! RS
  598.         MENU 23,3 ! Druck
  599.         IF v2_1A%>0
  600.           ALERT 2,"|"+STR$(v2_1A%)+" Zeilen wurden auf die  | |Länge "+STR$(v2_1C%)+" gekürzt.",1,v1_8$,v2_1B%
  601.         ENDIF
  602.         IF v2_19%=TRUE
  603.           ALERT 2,"|Einlesen abgebrochen:| |Textbereich voll.",1,v1_8$,v2_1D%
  604.         ENDIF
  605.       ENDIF
  606.       EXIT IF v3_2!=TRUE
  607.     LOOP
  608.     IF LEN(v1_6$)>3 AND RIGHT$(v1_6$,1)<>"\"
  609.       IF v2_15%=1
  610.         TITLEW #1," "+v1_6$+" "
  611.         v2_1E%=RINSTR(v1_6$,"\")
  612.         v1_7$=LEFT$(v1_6$,v2_1E%)+"*.*"
  613.       ENDIF
  614.     ELSE
  615.       v1_6$=v1_5$
  616.     ENDIF
  617.     IF v2_0%>1
  618.       @vB_1A(1)
  619.     ENDIF
  620.     @vB_18
  621.   ENDIF
  622. RETURN
  623. > PROCEDURE vB_7(v2_1F%,v2_20%)
  624.   IF v2_0%=1
  625.     ALERT 2,"|Kein Text im Speicher.",1,v1_8$,v2_1D%
  626.   ELSE
  627.     @vB_18
  628.     v1_27$=RIGHT$(v1_6$,LEN(v1_6$)-RINSTR(v1_6$,"\"))
  629.     v3_2!=FALSE
  630.     v1_5$=v1_6$
  631.     v2_21%=0
  632.     DO
  633.       FILESELECT v1_7$,v1_27$,v1_6$
  634.       EXIT IF v1_6$="" OR v1_6$="\" OR RIGHT$(v1_6$,1)="\"
  635.       v1_9$=LEFT$(v1_6$,1)
  636.       IF v1_9$="A" OR v1_9$="B"
  637.         v2_A8%=DFREE(ASC(v1_9$)-64)
  638.         @vB_1D
  639.         ADD v2_53%,2*v2_0%
  640.         IF v2_A8%<v2_53%
  641.           ALERT 2,"|Diskettenplatz knapp: noch|"+STR$(v2_A8%)+" Bytes frei,|"+STR$(v2_53%)+" Bytes benötigt.",1,v1_8$,v2_A7%
  642.           EXIT IF v2_A7%=1
  643.         ENDIF
  644.       ENDIF
  645.       IF INSTR(v1_6$,".")<2
  646.         v1_6$=v1_6$+".SRP"  ! Extender anhängen
  647.       ENDIF
  648.       IF EXIST(v1_6$)
  649.         ALERT 3,"|Datei existiert schon!",2,"Löschen|*.BAK|Abbruch",v2_21%
  650.         IF v2_21%=1
  651.           KILL v1_6$
  652.         ENDIF
  653.         IF v2_21%=2
  654.           v1_9$=LEFT$(v1_6$,RINSTR(v1_6$,".")-1)+".BAK"
  655.           IF EXIST(v1_9$)
  656.             KILL v1_9$
  657.           ENDIF
  658.           RENAME v1_6$ AS v1_9$
  659.         ENDIF
  660.         EXIT IF v2_21%=3
  661.       ENDIF
  662.       OPEN "O",#1,v1_6$     !Öffnen für Schreiben, evtl. erstellen
  663.       FOR v2_22%=v2_1F% TO v2_20%  ! oder 1
  664.         PRINT #1,v5_2$(v2_22%)
  665.         v3_2!=TRUE
  666.       NEXT v2_22%
  667.       CLOSE #1
  668.       EXIT IF v3_2!=TRUE
  669.     LOOP
  670.     IF v2_21%<3
  671.       IF LEN(v1_6$)>3 AND RIGHT$(v1_6$,1)<>"\"
  672.         TITLEW #1," "+v1_6$+" "
  673.         v2_1E%=RINSTR(v1_6$,"\")
  674.         v1_7$=LEFT$(v1_6$,v2_1E%)+"*.*"
  675.       ELSE
  676.         v1_6$=v1_5$
  677.       ENDIF
  678.     ENDIF
  679.     @vB_18
  680.   ENDIF
  681. RETURN
  682. > PROCEDURE vB_8(v2_23%,v2_24%)
  683.   ' eol$ als Zeilenende mitverwenden (nur bei <> CR/LF eingreifen)
  684.   IF v2_0%>1
  685.     v9_5|=2
  686.     IF OUT?(1)=FALSE
  687.       ALERT 2,"|RS232-Empfänger|nicht bereit.",1,v1_8$,v2_1D%
  688.     ELSE
  689.       DEFMOUSE 2
  690.       FOR v2_25%=v2_23% TO v2_24%
  691.         INFOW #1,"Daten ausgeben: Zeile "+STR$(v2_25%)
  692.         FOR v2_26%=1 TO LEN(v5_2$(v2_25%))
  693.           IF OUT?(1)=FALSE
  694.             PAUSE 1
  695.           ENDIF
  696.           IF OUT?(1)=FALSE
  697.             ALERT 2,"RS232-Übertragung|wurde unterbrochen.",v9_5|,v1_A$,v9_5|
  698.           ELSE
  699.             OUT 1,ASC(MID$(v5_2$(v2_25%),v2_26%,1))
  700.           ENDIF
  701.           EXIT IF v9_5|=1
  702.         NEXT v2_26%
  703.         EXIT IF v9_5|=1
  704.         OUT 1,ASC(v1_2$)
  705.         IF LEN(v1_2$)>1
  706.           OUT 1,ASC(RIGHT$(v1_2$,1))
  707.         ENDIF
  708.       NEXT v2_25%
  709.       IF v9_5|<>1
  710.         OUT 1,v2_E% ! chr$(eof%)=code für fileende
  711.       ENDIF
  712.       OPENW 1
  713.       DEFMOUSE 0
  714.       @vB_18
  715.     ENDIF
  716.   ELSE
  717.     ALERT 2,"|Kein Text vorhanden.",1,v1_8$,v2_1D%
  718.   ENDIF
  719. RETURN
  720. > PROCEDURE vB_D(v2_27%)
  721.   ' 1=alles neu, 2=anhängen
  722.   IF v2_0%>1 AND v2_27%=1
  723.     ALERT 2,"| -=≡=- ACHTUNG -=≡=-| |Noch Text im Speicher !  ",1,"Löschen|Abbruch",v2_28%
  724.     IF v2_28%=2
  725.       GOTO vA_0
  726.     ENDIF
  727.     IF v2_28%=1
  728.       @vB_B(1)
  729.     ENDIF
  730.   ENDIF
  731.   v2_29%=1 ! 1.zeile
  732.   IF v2_27%=2
  733.     v2_29%=v2_0%
  734.   ENDIF
  735.   v2_2B%=LEN(v1_2$)
  736.   v2_2A%=1
  737.   IF INP?(1)=FALSE
  738.     OPENW 0
  739.     @vB_1B(210,150,430,190)
  740.     TEXT 236,175,"RS-232 Timeout: _ sec"
  741.     WHILE INP?(1)=FALSE AND v2_2A%<400 !  ca. 10 sec
  742.       PAUSE 1
  743.       TEXT 364,175,STR$(INT((400-v2_2A%)/40))
  744.       INC v2_2A%
  745.     WEND
  746.     @vB_17
  747.     CLOSEW 0
  748.     OPENW 1
  749.   ENDIF
  750.   IF INP?(1)=FALSE
  751.     ALERT 2,"| Keine Daten an der| |RS232-Schnittstelle.  ",1,v1_8$,v2_1D%
  752.   ELSE
  753.     DEFMOUSE 2
  754.     v2_19%=FALSE
  755.     REPEAT
  756.       WHILE INP?(1)=TRUE
  757.         v1_B$=CHR$(INP(1))
  758.         IF v1_B$>CHR$(0)
  759.           v5_2$(v2_29%)=v5_2$(v2_29%)+v1_B$
  760.         ENDIF
  761.         IF RIGHT$(v5_2$(v2_29%),v2_2B%)=v1_2$
  762.           v5_2$(v2_29%)=LEFT$(v5_2$(v2_29%),LEN(v5_2$(v2_29%))-2) ! CRLF beseitigen
  763.           INC v2_29% ! nächste Zeile
  764.           INFOW #1," Daten einlesen: Zeile "+STR$(v2_29%)
  765.           IF v2_29%>v2_18%
  766.             v2_19%=TRUE ! maxzeilen voll?
  767.             DEC v2_29%
  768.           ENDIF
  769.           EXIT IF v2_19%=TRUE
  770.         ENDIF
  771.       WEND
  772.       v2_2C%=0
  773.       IF vD_0|(1,4)=0
  774.         WHILE INP?(1)=FALSE AND v2_2C%<4
  775.           IF vD_0|(1,1)=1
  776.             PAUSE 1 ! Minipuse bei 300 Baud
  777.           ENDIF
  778.           INC v2_2C% ! Minipause <4800 Baud
  779.         WEND
  780.       ENDIF
  781.     UNTIL INP?(1)=FALSE OR v5_2$(v2_29%)=v1_0$ ! OR v_242%=lines%
  782.     IF RIGHT$(v5_2$(v2_29%),1)=v1_0$
  783.       v2_0%=v2_29%-1 ! eof ist keine Zeile wert
  784.     ELSE
  785.       IF v2_19%=TRUE
  786.         ALERT 2,"|Übertragung abgebrochen:| |Textbereich ist voll.",1,v1_8$,v2_19%
  787.         v2_0%=v2_18%
  788.       ELSE
  789.         ALERT 2,"|Übertragung wurde unterbrochen",1,v1_8$,v2_1D%
  790.         v2_0%=v2_29%
  791.       ENDIF
  792.     ENDIF
  793.     v5_2$(1)=RIGHT$(v5_2$(1),LEN(v5_2$(1))-1)
  794.     IF LEN(v5_2$(v2_0%))<3 AND v2_0%>1 ! letzte Zeile zufällig leer?
  795.       v5_2$(v2_0%)=""
  796.       DEC v2_0%
  797.     ENDIF
  798.     IF v2_0%<v2_18%
  799.       IF LEN(v5_2$(v2_0%+1))>0  ! etwas hängengeblieben?
  800.         v5_2$(v2_0%+1)=""
  801.       ENDIF
  802.     ENDIF
  803.     OPENW 1
  804.     DEFMOUSE 0
  805.     v2_2D%=1
  806.     v2_17%=1
  807.     IF v2_0%>1
  808.       @vB_1A(1)
  809.     ENDIF
  810.     @vB_19
  811.   ENDIF
  812. vA_0:
  813. RETURN
  814. > PROCEDURE vB_1C(v1_C$,v2_2E%)
  815.   ' Rückgabe in dialog$
  816.   OPENW 0
  817.   LOCAL v1_D$,v1_E$,v1_F$,v2_2F%,v2_30%,v2_31%
  818.   LOCAL v2_32%,v2_33%,v2_34%,v2_35%,v2_36%,v3_3!,v3_4!
  819.   '
  820.   v2_2F%=XBIOS(4)   ! Nicht LowRes
  821.   v2_30%=90*v2_2F%
  822.   v2_31%=98*v2_2F%
  823.   '
  824.   v2_36%=v2_2E%*4  ! geanugenommen halbe breite
  825.   v2_37%=320-v2_36%
  826.   IF (LEN(v1_C$)*4)<(320-v2_36%)
  827.     v2_36%=LEN(v1_C$)*4 ! mindestgröβe bei überlangem Titel
  828.   ENDIF
  829.   IF v2_36%<v2_2E%*4
  830.     v2_36%=v2_2E%*4
  831.   ENDIF
  832.   IF v2_36%<100  !absolute Mindestbreite
  833.     v2_36%=100
  834.   ENDIF
  835.   ADD v2_36%,8
  836.   GRAPHMODE 1
  837.   DEFTEXT 1,0,0,13
  838.   DEFLINE 1
  839.   DEFFILL 0,2,8
  840.   GET 316-v2_36%,75*v2_2F%+18,320+v2_36%,117*v2_2F%+20,v1_F$
  841.   PBOX 316-v2_36%,75*v2_2F%,320+v2_36%,117*v2_2F%
  842.   BOX 316-v2_36%,75*v2_2F%+1,320+v2_36%,117*v2_2F%-1
  843.   BOX 318-v2_36%,76*v2_2F%+1,318+v2_36%,116*v2_2F%-1
  844.   BOX 319-v2_36%,76*v2_2F%+2,317+v2_36%,116*v2_2F%-2
  845.   TEXT 320-LEN(v1_C$)*4,170,v1_C$
  846.   TEXT v2_37%,96*v2_2F%,STRING$(v2_2E%,"_")
  847.   TEXT 240,110*v2_2F%,"OK"
  848.   FOR v2_35%=1 TO 3
  849.     BOX 219-v2_35%,103*v2_2F%-v2_35%,277+v2_35%,112*v2_2F%+v2_35%
  850.   NEXT v2_35%
  851.   BOX 358,102*v2_2F%,418,112*v2_2F%
  852.   BOX 357,102*v2_2F%-1,419,112*v2_2F%+1
  853.   TEXT 360,110*v2_2F%,"Abbruch"
  854.   LINE v2_37%,v2_30%,v2_37%,v2_31%
  855.   REPEAT
  856.     v1_D$=INKEY$
  857.     IF v1_D$<>CHR$(13)
  858.       IF v1_D$=CHR$(8) OR v1_D$=CHR$(127) ! Delete oder Backspace
  859.         IF LEN(v1_E$)>0
  860.           v1_E$=LEFT$(v1_E$,LEN(v1_E$)-1)
  861.           GRAPHMODE 3
  862.           LINE v2_37%,v2_30%,v2_37%,v2_31%
  863.           GRAPHMODE 1
  864.           SUB v2_37%,8
  865.           TEXT v2_37%,96*v2_2F%,"_"
  866.           LINE v2_37%,v2_30%,v2_37%,v2_31%
  867.         ENDIF
  868.       ENDIF
  869.       IF v1_D$="ä" OR v1_D$="ö" OR v1_D$="ü" OR v1_D$="ß" OR v1_D$="Ä" OR v1_D$="Ö" OR v1_D$="Ü"
  870.         v3_4!=TRUE
  871.       ENDIF
  872.       IF (v1_D$=>" " AND v1_D$<="~") OR v3_4!=TRUE
  873.         IF LEN(v1_E$)<v2_2E%
  874.           v1_E$=v1_E$+v1_D$
  875.           v3_4!=FALSE
  876.           GRAPHMODE 3
  877.           LINE v2_37%,v2_30%,v2_37%,v2_31%
  878.           GRAPHMODE 1
  879.           TEXT v2_37%,96*v2_2F%,v1_D$
  880.           ADD v2_37%,8
  881.           LINE v2_37%,v2_30%,v2_37%,v2_31%
  882.           v1_D$=""
  883.         ENDIF
  884.       ENDIF
  885.     ENDIF
  886.     '
  887.     MOUSE v2_33%,v2_34%,v2_35%
  888.     IF v2_35%=1 AND v2_34%>103*v2_2F% AND v2_34%<112*v2_2F%
  889.       IF v2_33%>220 AND v2_33%<276  !OK-Box
  890.         v3_3!=TRUE
  891.       ENDIF
  892.       IF v2_33%>363 AND v2_33%<421  ! Abbruch-Box
  893.         v3_3!=TRUE
  894.         CLR v1_E$
  895.       ENDIF
  896.     ENDIF
  897.   UNTIL v3_3!=TRUE OR v1_D$=CHR$(13)
  898.   '
  899.   v1_10$=v1_E$
  900.   GRAPHMODE 3
  901.   LINE v2_37%,v2_30%,v2_37%,v2_31%
  902.   GRAPHMODE 1
  903.   PUT 316-v2_36%,75*v2_2F%+18,v1_F$
  904.   CLR v1_F$,v1_E$
  905.   CLOSEW 0
  906.   OPENW 1
  907. RETURN
  908. > PROCEDURE vB_9(v2_38%)
  909.   IF v2_0%>1
  910.     @vB_18
  911.     IF v2_38%=0 ! suchen
  912.       @vB_1C("Suchstring eingeben:",30)
  913.       IF LEN(v1_10$)>0
  914.         MENU 31,3 ! weitersuchen möglich
  915.         v2_A4%=TRUE
  916.         v1_11$=v1_10$
  917.         v2_39%=FALSE ! noch nix gefunden
  918.         v2_3A%=1    ! zeile, ab der gesucht wird
  919.       ENDIF
  920.     ELSE           ! weitersuchen
  921.       IF v2_3B%<v2_0%
  922.         v2_3A%=v2_3B%+1 ! ab nächster Zeile
  923.         v2_39%=FALSE !
  924.       ENDIF
  925.     ENDIF
  926.     FOR v2_3B%=v2_3A% TO v2_0% ! hier wird gesucht
  927.       IF INSTR(v5_2$(v2_3B%),v1_11$)>1
  928.         v2_2D%=INSTR(v5_2$(v2_3B%),v1_11$)
  929.         v2_17%=v2_3B%
  930.         v2_39%=TRUE
  931.         EXIT IF v2_39%=TRUE ! gefunden
  932.       ENDIF
  933.     NEXT v2_3B%
  934.     IF v2_39%=TRUE
  935.       v2_16%=v2_17%-v2_3C%/2
  936.       IF v2_16%<1
  937.         v2_16%=1
  938.       ENDIF
  939.       IF v2_16%>v2_0%-v2_3C%
  940.         v2_16%=v2_0%-v2_3C%
  941.       ENDIF
  942.       IF v2_2D%>=v2_3D%-v2_3E%
  943.         v2_3E%=v2_2D%-v2_3D%*3/2
  944.         IF v2_3E%>=v2_1C%-v2_3D%
  945.           v2_3E%=v2_1C%-v2_3D%
  946.         ENDIF
  947.       ENDIF
  948.       @vB_19
  949.       @vB_18
  950.     ENDIF
  951.     @vB_18
  952.   ENDIF
  953. RETURN
  954. > PROCEDURE vB_15(v2_3F%,v2_40%,v2_41%,v2_42%,v1_12$)
  955.   ' bo1-4=äußerer Rahmen, bot$=Titelzeile
  956.   ' openw 0
  957.   BOUNDARY 1
  958.   GRAPHMODE 1
  959.   DEFLINE 1,1
  960.   DEFFILL 1,0
  961.   v2_43%=v2_3F%
  962.   v2_44%=v2_40%+19
  963.   GET v2_3F%,v2_44%,v2_41%,v2_42%+20,v1_13$
  964.   PBOX v2_3F%,v2_40%,v2_41%,v2_42%
  965.   BOX v2_3F%+2,v2_40%+2,v2_41%-2,v2_42%-2
  966.   BOX v2_3F%+3,v2_40%+3,v2_41%-3,v2_42%-3
  967.   v2_45%=LEN(v1_12$)*4
  968.   BOX 310-v2_45%,v2_40%+7,329+v2_45%,v2_40%+32
  969.   ' BOX 309-bo5%,bo2%+8,329+bo5%,bo2%+31
  970.   TEXT 320-v2_45%,v2_40%+25,v1_12$
  971.   GRAPHMODE 3
  972.   BOUNDARY 0
  973.   DEFFILL 1,1
  974.   PBOX 313-v2_45%,v2_40%+10,326+v2_45%,v2_40%+29
  975.   GRAPHMODE 1
  976.   BOUNDARY 1
  977.   DEFFILL 1,0
  978. RETURN
  979. > PROCEDURE vB_1B(v2_46%,v2_47%,v2_48%,v2_49%)
  980.   GRAPHMODE 1
  981.   DEFLINE 1,1
  982.   DEFFILL 1,0
  983.   v2_43%=v2_46%
  984.   v2_44%=v2_47%+19
  985.   ' openw 0
  986.   GET v2_46%,v2_44%,v2_48%,v2_49%+20,v1_13$
  987.   PBOX v2_46%,v2_47%,v2_48%,v2_49%
  988.   BOX v2_46%+2,v2_47%+2,v2_48%-2,v2_49%-2
  989.   BOX v2_46%+3,v2_47%+3,v2_48%-3,v2_49%-3
  990. RETURN
  991. > PROCEDURE vB_16(v2_4A%,v2_4B%,v2_4C%)
  992.   ' bu1=x1, bu2=y bu3=x2
  993.   TEXT v2_4A%+8,v2_4B%+16,"Abbruch"
  994.   TEXT v2_4C%+28,v2_4B%+16,"OK"
  995.   BOX v2_4A%,v2_4B%,v2_4A%+72,v2_4B%+20 ! Abbruch
  996.   BOX v2_4C%,v2_4B%,v2_4C%+72,v2_4B%+20 ! OK
  997.   BOX v2_4C%+1,v2_4B%+1,v2_4C%+71,v2_4B%+19
  998.   BOX v2_4C%-1,v2_4B%-1,v2_4C%+73,v2_4B%+21
  999. RETURN
  1000. > PROCEDURE vB_2(v2_4D%,v2_4E%) ! aufbereiten
  1001.   ' drucken% 1=Elite/Pica 2=Draft/CQ 3=Epson/IBM 4=Rand_li 5=Pap.länge 6=Zeilen
  1002.   IF v2_0%>0
  1003.     v2_4F%=2
  1004.     WHILE GEMDOS(17)=FALSE AND v2_4F%=2
  1005.       ALERT 2,"|Drucker nicht bereit.",v2_4F%,v1_A$,v2_4F%
  1006.     WEND
  1007.     IF GEMDOS(17)=TRUE
  1008.       DEFMOUSE 2
  1009.       INFOW #1," Daten drucken  ESC = Abbruch"
  1010.       @vB_1D(v2_4D%,v2_4E%)
  1011.       LPRINT v1_3$;"C";CHR$(v6_1%(5));
  1012.       IF v6_1%(1)=1 ! Pica
  1013.         v2_50%=79
  1014.         v2_51%=v6_1%(4) ! linker Rand
  1015.       ELSE
  1016.         v2_50%=95 ! zeichen/zeile
  1017.         v2_51%=v6_1%(4)*1.2
  1018.       ENDIF
  1019.       v2_52%=1 ! Name und Länge = Zeile 1
  1020.       v2_4F%=v6_1%(5)-v6_1%(6) ! drd=unbedruckte Zeilen
  1021.       v1_14$=SPACE$(v2_51%)+RIGHT$(v1_6$,LEN(v1_6$)-3)+"   "+STR$(v2_53%)+" Bytes Text in "+STR$(v2_4E%-v2_4D%+1)+" Zeilen"
  1022.       IF v2_4D%>1 OR v2_4E%<v2_0%
  1023.         v1_14$=v1_14$+" (Block)"
  1024.       ENDIF
  1025.       @vB_1E(v1_14$)
  1026.       FOR v2_54%=v2_4D% TO v2_4E%
  1027.         v1_14$=v5_2$(v2_54%)
  1028.         v2_55%=LEN(v1_14$)
  1029.         v1_15$=INKEY$
  1030.         EXIT IF v1_15$=CHR$(27)
  1031.         '
  1032.         WHILE v2_55%+v2_51%>v2_50% ! Zeile zu lang?
  1033.           v1_16$=LEFT$(v1_14$,v2_50%-v2_51%) ! Hilfsstring
  1034.           v2_56%=LEN(v1_16$)
  1035.           @vB_1E(SPACE$(v2_51%)+v1_16$) ! Teil drucken
  1036.           INC v2_52% ! Zeilenzähler
  1037.           IF (v2_52% MOD v6_1%(6)=0) AND v2_4F%>0
  1038.             LPRINT CHR$(12); ! Zeilenumbruch=Seitenende nächste Seite
  1039.           ENDIF
  1040.           v1_14$=RIGHT$(v1_14$,v2_55%-v2_56%) ! noch was zu kürzen?
  1041.           v2_55%=LEN(v1_14$)
  1042.         WEND
  1043.         @vB_1E(SPACE$(v2_51%)+v1_14$)
  1044.         INC v2_52%
  1045.         ' IF (dr_c% MOD drucken%(6)=0) AND dr_d%>0 ! zusätzliches LineFeed
  1046.         ' LPRINT STRING$(dr_d%,CHR$(10));  ! x-mal y ausgeben
  1047.         ' ENDIF
  1048.         ' LPRINT CHR$(12); ! nächste Seite
  1049.       NEXT v2_54%
  1050.       @vB_18
  1051.       @vB_18 ! Infozeile wiederherstellen
  1052.     ENDIF
  1053.     LPRINT CHR$(12); ! Papier auswerfen
  1054.     DEFMOUSE 0
  1055.   ELSE
  1056.     ALERT 2,"|Kein Text vorhanden.",1,v1_8$,v2_1D%
  1057.   ENDIF
  1058. RETURN
  1059. > PROCEDURE vB_1D(v2_A9%,v2_AA%) ! info Textlänge
  1060.   v2_53%=0
  1061.   FOR v2_86%=v2_A9% TO v2_AA%
  1062.     ADD v2_53%,LEN(v5_2$(v2_86%))
  1063.   NEXT v2_86%
  1064. RETURN
  1065. > PROCEDURE vB_6(v2_57%) ! fast alles
  1066.   IF v2_57%=1
  1067.     v2_1%=v2_17% !         Startmarke
  1068.     MENU 48,3 ! zum anfang möglich
  1069.     MENU 41,3 ! Ende freigeben
  1070.     IF v2_1%>=v2_2%
  1071.       v2_2%=0
  1072.     ENDIF
  1073.   ENDIF
  1074.   '
  1075.   IF v2_57%=2 AND v2_17%>=v2_1% ! endmarke
  1076.     IF v2_2%>v2_17%
  1077.       v2_2%=v2_17%
  1078.       @vB_19
  1079.     ENDIF
  1080.     v2_2%=v2_17%
  1081.   ENDIF
  1082.   v2_58%=v2_2%-v2_1%+1 ! c= anzahl Zeilen im Block
  1083.   '
  1084.   IF v2_57%=3
  1085.     v2_1%=0 ! marken löschen
  1086.     v2_2%=0
  1087.     v2_59%=FALSE
  1088.     @vB_19 ! block visible?
  1089.     GOTO vA_1
  1090.   ENDIF
  1091.   '
  1092.   IF v2_57%=4 !              Block löschen
  1093.     IF v2_0%>1
  1094.       FOR v2_5A%=1 TO v2_58%
  1095.         DELETE v5_2$(v2_1%)
  1096.       NEXT v2_5A%
  1097.       v2_1%=0
  1098.       v2_2%=0
  1099.       v2_59%=FALSE
  1100.       SUB v2_0%,v2_58% ! neues ende
  1101.       @vB_19 ! block invisible
  1102.       GOTO vA_1
  1103.     ENDIF
  1104.   ENDIF
  1105.   '
  1106.   IF v2_57%=5 AND v2_17%>v2_2% ! verschieben nach unten
  1107.     @vB_18
  1108.     FOR v2_5A%=1 TO v2_58%
  1109.       INSERT v5_2$(v2_17%)=v5_2$(v2_1%)
  1110.       DELETE v5_2$(v2_1%)
  1111.     NEXT v2_5A%
  1112.     v2_1%=v2_17%-v2_58%
  1113.     v2_2%=v2_1%+v2_58%-1
  1114.     @vB_19
  1115.     ' schluss%=ADD(schluss%,block_c%)
  1116.     GOTO vA_1
  1117.   ENDIF
  1118.   '
  1119.   IF v2_57%=5 AND v2_17%<v2_1% ! verschieben nach oben
  1120.     @vB_18
  1121.     v2_5B%=v2_1%
  1122.     FOR v2_5A%=1 TO v2_58%
  1123.       INSERT v5_2$(v2_17%)=v5_2$(v2_1%+v2_5A%)
  1124.       DELETE v5_2$(v2_5B%+v2_5A%)
  1125.     NEXT v2_5A%
  1126.     v2_1%=v2_17%
  1127.     v2_2%=v2_1%+v2_58%-1
  1128.     '
  1129.     @vB_19
  1130.     ' schluss%=ADD(schluss%,block_c%)
  1131.     GOTO vA_1
  1132.   ENDIF
  1133.   '
  1134.   IF v2_57%=6 AND v2_0%+v2_58%>v2_18%
  1135.     ALERT 2,"|Blockoperation: Block zu groß | |Text würde zu lang|",1,v1_8$,v2_5B%
  1136.     GOTO vA_1
  1137.   ENDIF
  1138.   '
  1139.   IF v2_57%=6 AND v2_17%<v2_1% ! copy nach oben
  1140.     @vB_18
  1141.     v2_5B%=v2_1%-1
  1142.     v2_5C%=v2_17%
  1143.     FOR v2_5A%=1 TO v2_58%
  1144.       INSERT v5_2$(v2_5C%)=v5_2$(v2_5B%+v2_5A%+1)
  1145.       INC v2_5C%
  1146.       INC v2_5B%
  1147.     NEXT v2_5A%
  1148.     v2_1%=ADD(v2_1%,v2_58%)
  1149.     v2_2%=ADD(v2_2%,v2_58%)
  1150.     v2_0%=ADD(v2_0%,v2_58%)
  1151.     @vB_19
  1152.     GOTO vA_1
  1153.   ENDIF
  1154.   '
  1155.   IF v2_57%=6 AND v2_17%>v2_2% ! copy nach unten
  1156.     @vB_18
  1157.     FOR v2_5A%=1 TO v2_58%
  1158.       INSERT v5_2$(v2_17%)=v5_2$(v2_2%-v2_5A%+1)
  1159.     NEXT v2_5A%
  1160.     v2_0%=ADD(v2_0%,v2_58%)
  1161.     @vB_19
  1162.     GOTO vA_1
  1163.   ENDIF
  1164.   '
  1165.   IF v2_57%=7 ! isolieren
  1166.     @vB_18
  1167.     FOR v2_5A%=v2_2%+1 TO v2_0% ! hinten löschen
  1168.       DELETE v5_2$(v2_2%+1)
  1169.     NEXT v2_5A%
  1170.     v2_5C%=v2_1%-1
  1171.     IF v2_5C%>1
  1172.       FOR v2_5A%=1 TO v2_5C% ! vorne löschen
  1173.         DELETE v5_2$(1)
  1174.       NEXT v2_5A%
  1175.       v2_1%=SUB(v2_1%,v2_5C%) ! zeiger neu setzen
  1176.       v2_2%=SUB(v2_2%,v2_5C%)
  1177.     ENDIF
  1178.     v2_0%=v2_2%
  1179.     v2_3E%=0
  1180.     v2_2D%=1
  1181.     v2_17%=1
  1182.     v2_16%=1
  1183.     @vB_19
  1184.     GOTO vA_1
  1185.   ENDIF
  1186.   '
  1187.   IF v2_57%=8 ! zum anfang
  1188.     IF v2_1%>0
  1189.       @vB_18
  1190.       v2_17%=v2_1%
  1191.       v2_2D%=1
  1192.       v2_3E%=0
  1193.       v2_16%=v2_1%
  1194.       IF v2_16%>v2_0%-v2_3C%
  1195.         v2_16%=v2_0%-v2_3C% ! obacht textende
  1196.       ENDIF
  1197.       @vB_19
  1198.       GOTO vA_1
  1199.     ENDIF
  1200.   ENDIF
  1201.   '
  1202.   IF v2_57%=9 ! zum ende
  1203.     IF v2_2%>0
  1204.       @vB_18
  1205.       v2_17%=v2_2%
  1206.       v2_16%=v2_17%-v2_3C%
  1207.       IF v2_16%<1
  1208.         v2_16%=1 ! nicht zu hoch
  1209.       ENDIF
  1210.       IF v2_16%>v2_0%-v2_3C%
  1211.         v2_16%=v2_0%-v2_3C% ! nicht zu tief
  1212.       ENDIF
  1213.       @vB_19
  1214.     ENDIF
  1215.   ENDIF
  1216.   '
  1217. vA_1:
  1218.   IF v2_1%>0 AND v2_2%>0 ! Block selektiert
  1219.     MENU 16,3 ! disk
  1220.     MENU 21,3 ! RS
  1221.     MENU 24,3 ! druck
  1222.     MENU 43,3 ! löschen
  1223.     MENU 44,3 ! isol
  1224.     MENU 45,3 ! copy
  1225.     MENU 46,3 ! move
  1226.     MENU 47,3 ! mark
  1227.     MENU 48,3 ! >anf
  1228.     MENU 49,3 ! >end
  1229.     v2_59%=TRUE
  1230.   ENDIF
  1231.   IF v2_59%=FALSE
  1232.     MENU 16,2 ! disk
  1233.     MENU 21,2 ! RS
  1234.     MENU 24,2 ! druck
  1235.     ' MENU 41,2 ! end
  1236.     MENU 43,2 ! del
  1237.     MENU 44,2 ! isol
  1238.     MENU 45,2 ! copy
  1239.     MENU 46,2 ! move
  1240.     MENU 47,2 ! mark off
  1241.     ' MENU 48,2 ! >anf
  1242.     MENU 49,2 ! >end
  1243.   ENDIF
  1244.   @vB_1F
  1245. RETURN
  1246. > PROCEDURE vB_B(v2_5D%) ! kill Text
  1247.   IF v2_5D%=0
  1248.     ALERT 3,"|Wirklich alles löschen ?",1,v1_17$,v2_5E%
  1249.   ENDIF
  1250.   IF v2_5E%=2 OR v2_5D%>0
  1251.     FOR v2_5E%=0 TO v2_18%
  1252.       v5_2$(v2_5E%)=""
  1253.     NEXT v2_5E%
  1254.     v2_0%=1
  1255.     v2_3E%=0
  1256.     v2_16%=1
  1257.     v2_2D%=1
  1258.     v2_17%=1
  1259.     @vB_6(3) ! marken löschen
  1260.     v2_59%=FALSE
  1261.     MENU 13,2 ! schreiben
  1262.     MENU 15,2 ! anhängen
  1263.     MENU 16,2 ! -> Disk
  1264.     MENU 18,2 ! D send
  1265.     MENU 20,2 ! -> RS
  1266.     MENU 21,2 ! B send
  1267.     MENU 22,2 ! senden
  1268.     MENU 24,2 ! -> Druck
  1269.     IF v2_5D%=0
  1270.       @vB_19
  1271.     ENDIF
  1272.     CLS
  1273.     @vB_18
  1274.   ENDIF
  1275. RETURN
  1276. > PROCEDURE vB_1E(v1_18$) ! an Drucker
  1277.   v1_19$=v1_3$+"R"+CHR$(3)
  1278.   v1_1A$=v1_3$+"R"+CHR$(0)
  1279.   v2_5F%=LEN(v1_18$)
  1280.   IF v2_60%=1
  1281.     IF v6_1%(3)=0
  1282.       LPRINT v1_1A$;
  1283.     ENDIF
  1284.     LPRINT v5_1$(1);v5_1$(2);
  1285.     FOR v2_61%=1 TO v2_5F%
  1286.       v1_1B$=MID$(v1_18$,v2_61%,1)  ! einzelzeichen
  1287.       IF v1_1B$<"!"
  1288.         LPRINT " ";  ! hier werden nur spaces ausgegeben
  1289.       ENDIF
  1290.       IF v1_1B$>" " AND v1_1B$<"@" ! Ziffern & co
  1291.         LPRINT v1_1B$;
  1292.       ENDIF
  1293.       IF v1_1B$>"@" AND v1_1B$<"[" ! großbuchstaben
  1294.         LPRINT v1_1B$;
  1295.       ENDIF
  1296.       IF v1_1B$>"_" AND v1_1B$<"{" ! kleinbuchstaben
  1297.         LPRINT v1_1B$;
  1298.       ENDIF
  1299.       IF v1_1B$="@" OR (v1_1B$>"Z" AND v1_1B$<"`") OR (v1_1B$>"z" AND v1_1B$<CHR$(127))
  1300.         LPRINT v1_1B$;  ! Epson-Font!
  1301.       ENDIF
  1302.       IF ASC(v1_1B$)>128 THEN
  1303.         v2_62%=ASC(v1_1B$)-128
  1304.         IF LEN(v5_3$(v2_62%))>2
  1305.           FOR v2_63%=1 TO LEN(v5_3$(v2_62%)) STEP 2
  1306.             v1_1C$="&H"+MID$(v5_3$(v2_62%),v2_63%,2)
  1307.             LPRINT CHR$(VAL(v1_1C$));
  1308.           NEXT v2_63%
  1309.         ELSE
  1310.           LPRINT CHR$(VAL("&H"+v5_3$(v2_62%)));
  1311.         ENDIF
  1312.       ENDIF
  1313.     NEXT v2_61%
  1314.     IF v6_1%(3)=0
  1315.       LPRINT v1_19$;
  1316.     ENDIF
  1317.   ELSE ! DRUCKERFONT=IBM
  1318.     LPRINT v1_18$;
  1319.   ENDIF
  1320.   LPRINT
  1321. RETURN
  1322. > PROCEDURE vB_1A(v2_64%)
  1323.   IF v2_64%=0
  1324.     MENU 13,2 ! datei schreiben
  1325.     MENU 15,2 ! datei anhängen
  1326.     MENU 16,2 ! block schreiben
  1327.     MENU 18,2 ! datei senden
  1328.     MENU 20,2 ! datei anhängen
  1329.     MENU 21,2 ! block senden
  1330.     ' MENU 23,2 ! text drucken
  1331.     MENU 24,2 ! block drucken
  1332.   ENDIF
  1333.   IF v2_64%=1
  1334.     MENU 13,3 ! wenn text vorhanden ist, auch ein/ausgabe
  1335.     MENU 15,3
  1336.     MENU 18,3
  1337.     MENU 20,3
  1338.     MENU 23,3
  1339.     ' MENU 24,3
  1340.   ENDIF
  1341. RETURN
  1342. > PROCEDURE vB_17 ! NOT box()
  1343.   PUT v2_43%,v2_44%,v1_13$
  1344.   CLR v1_13$
  1345.   ' closew 0
  1346. RETURN
  1347. > PROCEDURE vB_A ! abkürzungen bilden
  1348.   IF v2_0%>1 ! überhaupt was da?
  1349.     @vB_1D(1,v2_0%) ! für Statistik merken
  1350.     v2_65%=v2_53% ! Packrate bestimen
  1351.     DEFMOUSE 2  ! sieht etwas besser aus
  1352.     FOR v2_66%=1 TO v2_0% ! comp%= nummer bearb Zeile
  1353.       v2_AB%=0 ! nicht alles kann komprimiert werden
  1354.       INFOW #1," Kompression in "+STR$(v2_66%)
  1355.       IF LEN(v5_2$(v2_66%))<2 ! Zeile enthält nichts  WHILE?
  1356.         DELETE v5_2$(v2_66%) ! Leere Zeilen beseitigen
  1357.       ENDIF ! nächste Zeile sollte was enthalten... WEND?
  1358.       IF LEN(v5_2$(v2_66%))>2 ! wg. Bombendrohungen
  1359.         v5_2$(v2_66%)=v5_2$(v2_66%)+" " ! für einfacheres kürzen
  1360.         FOR v2_67%=1 TO v2_68%  ! coml%= nummer versuchtes Token
  1361.           EXIT IF v2_AB%=1 ! Ausstieg aus dieser Zeile falls DATA
  1362.           WHILE INSTR(v5_2$(v2_66%),v5_4$(v2_67%))>0 ! gefunden?
  1363.             v2_69%=INSTR(v5_2$(v2_66%),v5_4$(v2_67%)) ! comx%=position gefunden
  1364.             v1_1D$=RIGHT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-v2_69%-LEN(v5_4$(v2_67%))+1)
  1365.             v1_24$=MID$(v5_2$(v2_66%),v2_69%-2,1) ! wenn sich vor dem Token ein
  1366.             v1_25$=MID$(v5_2$(v2_66%),v2_69%-1,1) ! Space befindet (sicher), dann
  1367.             IF v1_25$=" " AND v1_24$<"A" ! testen, ob es killed werden kann.
  1368.               v5_2$(v2_66%)=LEFT$(v5_2$(v2_66%),v2_69%-2)+v5_5$(v2_67%)+v1_1D$
  1369.             ELSE  !  IF links vom Token etwas <"A" THEN Space killen
  1370.               v5_2$(v2_66%)=LEFT$(v5_2$(v2_66%),v2_69%-1)+v5_5$(v2_67%)+v1_1D$ ! original
  1371.             ENDIF ! effektive spaces killed
  1372.             IF INSTR(v5_4$(v2_67%),"DATA ")>0
  1373.               v2_AB%=1 ! Zeichen nach DATA werden nicht komprimiert
  1374.             ENDIF     ! (dahinter können keine weiteren Befehle kommen)
  1375.             EXIT IF v2_AB%=1 ! Ausstieg aus dieser Testreihe
  1376.           WEND ! eigentliche Kompression beendet (diese zeile)
  1377.         NEXT v2_67% ! ende der Tokenabkürzungen dieser Zeile
  1378.         WHILE LEFT$(v5_2$(v2_66%),1)=" "  ! TRIM täte es auch, aber...
  1379.           v5_2$(v2_66%)=RIGHT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-1) ! gegen Bomben
  1380.         WEND ! Space vor zeilennummer?
  1381.         WHILE RIGHT$(v5_2$(v2_66%),1)=" "
  1382.           v5_2$(v2_66%)=LEFT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-1)
  1383.         WEND ! space am Zeilenende? (sicher)
  1384.         v2_69%=VAL(v5_2$(v2_66%)) ! Zeilennummer feststellen
  1385.         v1_1E$=STR$(v2_69%) ! Nummer als Text
  1386.         v2_67%=LEN(v1_1E$) ! Länge der Nummer
  1387.         v5_2$(v2_66%)=RIGHT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-v2_67%) ! Nummer abschneiden
  1388.         WHILE LEFT$(v5_2$(v2_66%),1)=" "  ! falls mehr als ein space kommt
  1389.           v5_2$(v2_66%)=RIGHT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-1)
  1390.         WEND ! zwischen Nummer und Zeile Spaces?
  1391.         v5_2$(v2_66%)=v1_1E$+v5_2$(v2_66%) ! nummer wieder anfügen
  1392.       ENDIF ! Nummer wieder komplett
  1393.     NEXT v2_66% ! Ende der Kompression
  1394.     WHILE LEN(v5_2$(v2_0%))<2 ! letzte zeile ist leer
  1395.       DEC v2_0% ! Zeileende korrigieren
  1396.       DEC v2_17% ! heraufholen
  1397.     WEND ! ende endkorrketur
  1398.     @vB_1D(1,v2_0%) ! etwas Statistik
  1399.     PRINT CHR$(7); ! aufwachen...
  1400.     v2_6A%=(v2_65%-v2_53%)*1000/v2_65%
  1401.     INFOW #1," "+STR$(v2_65%-v2_53%)+" Bytes weniger ("+STR$(v2_6A%/10)+"%)."
  1402.     INC v2_17% ! sonst F10
  1403.     PAUSE 80 ! zeit zum Lesen
  1404.     DEFMOUSE 0 ! Normalzustand
  1405.     OPENW 1  ! falls Probleme auftreten
  1406.     @vB_19 ! ergebnis zeigen
  1407.   ENDIF
  1408. RETURN
  1409. > PROCEDURE vB_5 ! rechnertyp E220/500
  1410.   IF v2_1D%<>999
  1411.     ALERT 0,"|  Rechnertyp einstellen    |",v2_60%,"E 220| E 500 ",v2_60%
  1412.   ENDIF
  1413.   ERASE v5_4$()
  1414.   ERASE v5_5$()
  1415.   IF v2_60%=1 ! E220
  1416.     DIM v5_4$(104) ! bei neueintrag aktualisieren
  1417.     DIM v5_5$(104)
  1418.     RESTORE vA_2
  1419.     v2_1D%=0
  1420.     REPEAT
  1421.       INC v2_1D%
  1422.       READ v5_4$(v2_1D%),v5_5$(v2_1D%)
  1423.     UNTIL v5_4$(v2_1D%)="****"
  1424.     v5_4$(v2_1D%)=CHR$(34)+"; "
  1425.     v5_5$(v2_1D%)=CHR$(34)+";"
  1426.     v2_68%=v2_1D%
  1427.   ENDIF
  1428.   IF v2_60%=2 ! E500
  1429.     DIM v5_4$(138)
  1430.     DIM v5_5$(138)
  1431.     RESTORE vA_3
  1432.     v2_1D%=0
  1433.     REPEAT
  1434.       INC v2_1D%
  1435.       READ v5_4$(v2_1D%),v5_5$(v2_1D%)
  1436.     UNTIL v5_4$(v2_1D%)="****"
  1437.     v2_68%=v2_1D%-1  ! &Hx in &x ?
  1438.   ENDIF
  1439. RETURN
  1440. > PROCEDURE vB_1F ! gitter auf text
  1441.   v2_6B%=TRUE
  1442.   IF v2_1%<=v2_16% ! blockmarke ab über sichtb. Bereich
  1443.     v2_6C%=0
  1444.   ENDIF
  1445.   IF v2_1%>v2_16% AND v2_1%<=v2_16%+v2_3C% ! top visible
  1446.     v2_6C%=(v2_1%-v2_16%)*16
  1447.   ENDIF
  1448.   IF v2_2%=>v2_16% AND v2_2%<v2_16%+v2_3C% ! bot visible
  1449.     v2_6D%=(v2_2%-v2_16%)*16+16
  1450.   ENDIF
  1451.   IF v2_2%>=v2_16%+v2_3C% ! blockmarke bis unterste Zeile
  1452.     v2_6D%=v2_3C%*16+16
  1453.   ENDIF
  1454.   IF v2_16%>v2_2%
  1455.     v2_6B%=FALSE
  1456.   ENDIF
  1457.   IF v2_16%+v2_3C%<=v2_1%
  1458.     v2_6B%=FALSE
  1459.   ENDIF
  1460.   '
  1461.   IF v2_59%=TRUE AND v2_6B%=TRUE
  1462.     ' IF cur_y%>topline% AND cur_y%<topline%-win_hoch%
  1463.     GRAPHMODE 2
  1464.     BOUNDARY 0
  1465.     DEFFILL 1,2,1
  1466.     PBOX 0,v2_6C%+3,v2_6E%,v2_6D%+3
  1467.     DEFFILL 1,0
  1468.     BOUNDARY 1
  1469.     GRAPHMODE 1
  1470.     ' ENDIF
  1471.   ENDIF
  1472. RETURN
  1473. > PROCEDURE vB_20 ! einzelzeile neu
  1474.   TEXT 1,(v2_17%-v2_16%)*16+16,MID$(v5_2$(v2_17%),v2_3E%+1,v2_3D%)+SPACE$(v2_1C%-LEN(v5_2$(v2_17%)))
  1475. RETURN
  1476. > PROCEDURE vB_19 ! Text ins Fenster
  1477.   OPENW 1
  1478.   CLS
  1479.   v2_6F%=v2_16%
  1480.   v2_70%=WINDTAB(1,4)+1 ! Breite window
  1481.   v2_71%=WINDTAB(1,5)+4 ! Höhe  "
  1482.   v2_72%=INT(v2_70%/8)-3 ! nutzbare Breite in Zeichen
  1483.   v2_73%=INT(v2_71%/16)-4 ! nutzbare Höhe in Zeilen
  1484.   v2_3D%=v2_72%
  1485.   v2_3C%=v2_73%
  1486.   v2_74%=0  ! interner Zähler
  1487.   v2_75%=v2_16%+v2_3C%-1  ! schluss%
  1488.   IF v2_6F%>v2_0%-v2_73%
  1489.     v2_6F%=v2_0%-v2_73%+1
  1490.     v2_16%=v2_0%-v2_73%+1
  1491.   ENDIF
  1492.   IF v2_6F%<1
  1493.     v2_6F%=1
  1494.     v2_16%=1
  1495.   ENDIF
  1496.   IF v2_3E%<0
  1497.     v2_3E%=0
  1498.   ENDIF
  1499.   '
  1500.   FOR v2_76%=v2_6F% TO v2_75% ! Text ausgeben
  1501.     ' wt_ls%=LEN(t$(wt_z%))  ! fehler ???
  1502.     TEXT 1,v2_74%*16+16,MID$(v5_2$(v2_76%),v2_3E%+1,v2_72%)
  1503.     INC v2_74% ! wievielte Zeile im Fenster
  1504.   NEXT v2_76%  ! wt_ol%= Nummer der obersten Zeile im Fenster
  1505.   '
  1506.   IF v2_0%=1
  1507.     v2_77%=1000
  1508.   ELSE
  1509.     v2_77%=v2_73%*1000/v2_0% ! Slider für Zeilenanwahl
  1510.   ENDIF
  1511.   v2_78%=v2_72%*1000/v2_1C% ! Slider für waagerechtes Verschieben
  1512.   IF v2_78%=0
  1513.     v2_78%=1
  1514.   ENDIF
  1515.   IF v2_77%=0
  1516.     v2_77%=1
  1517.   ENDIF
  1518.   IF v2_0%=v2_3C% ! div 0
  1519.     INC v2_3C%
  1520.   ENDIF
  1521.   v2_79%=(v2_16%-1)/(v2_0%-v2_3C%)*1000
  1522.   v2_7A%=v2_3E%/(255-v2_3D%)*1000
  1523.   v2_7B%=WIND_SET(1,15,v2_78%,-1,-1,-1) ! Hslider Größe absolut
  1524.   v2_7C%=WIND_SET(1,16,v2_77%,-1,-1,-1) ! Vslider Größe absolut [Buch S.578]
  1525.   v2_7D%=WIND_SET(1,9,v2_79%,-1,-1,-1) ! Position Vslider
  1526.   v2_7E%=WIND_SET(1,8,v2_7A%,-1,-1,-1) ! Position Hslider
  1527.   IF v2_59%=TRUE !wt_6-9=fehlercode
  1528.     @vB_1F
  1529.   ENDIF
  1530.   @vB_18
  1531. RETURN
  1532. > PROCEDURE vB_21 ! Element angewählt
  1533.   INC v2_7F% ! trouble bei menu1=24
  1534.   v3_5!=FALSE ! true wenn neu aufbauen
  1535.   IF MENU(1)=22 ! Closer
  1536.     GOSUB vB_12
  1537.   ENDIF
  1538.   IF MENU(1)=23 ! Fuller
  1539.     CLOSEW 1
  1540.     DPOKE WINDTAB+4+(MENU(4)-1)*12,0  ! X
  1541.     DPOKE WINDTAB+6+(MENU(4)-1)*12,19  ! Y
  1542.     DPOKE WINDTAB+8+(MENU(4)-1)*12,639  ! B
  1543.     DPOKE WINDTAB+10+(MENU(4)-1)*12,380  ! H
  1544.     v2_6E%=623
  1545.     v2_80%=336
  1546.     OPENW 1
  1547.     v3_5!=TRUE
  1548.   ENDIF
  1549.   IF MENU(1)=24 AND v2_7F%>0 ! scrollen ___ Seite 491
  1550.     v2_81%=MENU(5) ! siehe auch Buch Seite 577 WIND_GET()
  1551.     SELECT v2_81%  ! Seite 578 WIND_SET Mode 8,9
  1552.     CASE 0
  1553.       INC v2_82%
  1554.       IF v2_82%=0
  1555.         @vB_18
  1556.         v2_16%=SUB(v2_16%,v2_3C%) ! Seite nach oben
  1557.         IF v2_16%<1
  1558.           v2_16%=1
  1559.           v3_5!=TRUE
  1560.         ENDIF
  1561.         SUB v2_17%,v2_3C%
  1562.         IF v2_17%<1
  1563.           v2_17%=1
  1564.           v3_5!=TRUE
  1565.         ENDIF
  1566.         IF v2_16%+v2_3C%<v2_17%
  1567.           v2_17%=v2_16%+1
  1568.         ENDIF
  1569.         @vB_19
  1570.       ELSE
  1571.         v2_82%=-1  !  nix als Ärger!!!
  1572.       ENDIF
  1573.     CASE 1
  1574.       @vB_18
  1575.       IF v2_16%+v2_3C%<=v2_0%
  1576.         ADD v2_16%,v2_3C% ! Seite nach unten
  1577.         v3_5!=TRUE
  1578.       ELSE
  1579.         v2_16%=v2_0%-v2_3C%
  1580.         v3_5!=TRUE
  1581.       ENDIF
  1582.       ADD v2_17%,v2_3C%
  1583.       IF v2_17%>v2_0%
  1584.         v2_17%=v2_0%
  1585.       ENDIF
  1586.     CASE 2
  1587.       IF v2_16%>1 !  Zeile nach oben
  1588.         DEC v2_16%
  1589.         IF v2_17%>v2_16%+v2_3C%-1
  1590.           @vB_18
  1591.           DEC v2_17% ! falls cursor unten herausrutschen würde
  1592.           @vB_18
  1593.         ENDIF
  1594.         v3_5!=TRUE
  1595.       ENDIF
  1596.     CASE 3
  1597.       IF v2_16%+v2_3C%<=v2_0% ! Zeile nach unten
  1598.         INC v2_16%
  1599.         IF v2_17%<v2_16% ! falls cursor in oberster zeile
  1600.           @vB_18
  1601.           INC v2_17% ! cursor nach unten bewegen
  1602.           @vB_18
  1603.         ENDIF
  1604.         v3_5!=TRUE
  1605.       ENDIF
  1606.     CASE 4
  1607.       IF v2_3E%>v2_3D% ! Seite nach links
  1608.         SUB v2_3E%,v2_3D%
  1609.         v3_5!=TRUE
  1610.       ELSE
  1611.         v2_3E%=0
  1612.         v3_5!=TRUE
  1613.       ENDIF
  1614.     CASE 5
  1615.       IF v2_3E%+v2_3D%<v2_1C% ! Seite nach rechts
  1616.         ADD v2_3E%,v2_3D%
  1617.         v3_5!=TRUE
  1618.       ELSE
  1619.         v2_3E%=v2_1C%-v2_3D%
  1620.         v3_5!=TRUE
  1621.       ENDIF
  1622.     CASE 6
  1623.       IF v2_3E%>0
  1624.         DEC v2_3E%
  1625.         v3_5!=TRUE
  1626.       ENDIF
  1627.     CASE 7
  1628.       IF v2_3E%<v2_1C%-v2_3D% ! Zeichen nach links
  1629.         INC v2_3E%
  1630.         v3_5!=TRUE
  1631.       ENDIF
  1632.     ENDSELECT
  1633.   ENDIF
  1634.   IF MENU(1)=25 ! hor verschieben -> neue Spalte
  1635.     v2_83%=MENU(5)
  1636.     v2_3E%=v2_83%/(1000/(v2_1C%-v2_3D%))
  1637.     ' IF links%>=cur_x%
  1638.     ' links%=cur_x%-1
  1639.     ' ENDIF
  1640.     IF LEN(v5_2$(v2_17%))<v2_3E%
  1641.       v2_3E%=LEN(v5_2$(v2_17%))
  1642.       v2_2D%=v2_3E%+1
  1643.     ENDIF
  1644.     v3_5!=TRUE
  1645.   ENDIF
  1646.   IF MENU(1)=26 ! vert schieben -> neue Zeile
  1647.     v2_84%=MENU(5)
  1648.     v2_16%=v2_84%/(1000/(v2_0%-v2_3C%))
  1649.     INC v2_16%
  1650.     IF v2_17%>v2_16%+v2_3C%
  1651.       v2_17%=v2_16%-v2_3C%+1
  1652.     ENDIF
  1653.     IF v2_17%<v2_16%
  1654.       v2_17%=v2_16%
  1655.     ENDIF
  1656.     v3_5!=TRUE
  1657.   ENDIF
  1658.   IF MENU(1)=27 ! Sizer andere Größe
  1659.     CLOSEW 1
  1660.     v2_85%=MENU(7) ! neue Breite holen
  1661.     v2_85%=INT(v2_85%/8)*8 ! auf Zeichen anpassen
  1662.     DPOKE WINDTAB+8+(MENU(4)-1)*12,v2_85%-1 ! neue Breite
  1663.     v2_3D%=v2_85%
  1664.     v2_85%=MENU(8) ! neue Höhe holen
  1665.     v2_85%=INT(v2_85%/16)*16 ! auf Zeilen anpassen
  1666.     DPOKE WINDTAB+10+(MENU(4)-1)*12,v2_85%-4 ! neue Höhe
  1667.     v2_3C%=v2_85%
  1668.     OPENW 1
  1669.     WHILE v2_2D%<=v2_3E%+1
  1670.       DEC v2_3E% ! cursor zu weit rechts
  1671.     WEND
  1672.     v3_5!=TRUE
  1673.     IF v2_17%>v2_16%+v2_3C%
  1674.       @vB_18
  1675.       v2_17%=v2_16%+v2_3C%-1 ! cursor wäre nicht mehr zu sehen
  1676.       @vB_18
  1677.     ENDIF
  1678.   ENDIF
  1679.   '
  1680.   IF MENU(1)=28 ! Move_Balken
  1681.     v2_A1%=MENU(7) ! x-breit
  1682.     v2_A2%=MENU(8) ! y-breit
  1683.     v2_9F%=MENU(5) ! x-pos
  1684.     v2_A0%=MENU(6) ! y-pos
  1685.     IF v2_9F%+v2_A1%>639
  1686.       v2_9F%=639-v2_A1%
  1687.     ENDIF
  1688.     IF v2_A0%+v2_A2%>380
  1689.       v2_A0%=380-v2_A2%
  1690.     ENDIF
  1691.     VOID WIND_SET(1,5,v2_9F%,v2_A0%,v2_A1%,v2_A2%)
  1692.     DPOKE WINDTAB+4,v2_9F%
  1693.     DPOKE WINDTAB+6,v2_A0%
  1694.     DPOKE WINDTAB+8,v2_A1%
  1695.     DPOKE WINDTAB+10,v2_A2%
  1696.     @vB_19
  1697.   ENDIF
  1698.   '
  1699.   IF v3_5!=TRUE
  1700.     IF v2_2D%>LEN(v5_2$(v2_17%))+1
  1701.       v2_2D%=LEN(v5_2$(v2_17%))+1
  1702.     ENDIF
  1703.     IF v2_17%>v2_16%+v2_3C%
  1704.       v2_17%=SUB(v2_17%,v2_17%-v2_16%)
  1705.     ENDIF
  1706.     WHILE v2_2D%>v2_3E%+v2_3D%
  1707.       ADD v2_3E%,v2_3D%
  1708.     WEND
  1709.     IF v2_3E%>v2_2D%+v2_3D%
  1710.       v2_3E%=v2_3D%-v2_2D%
  1711.     ENDIF
  1712.     @vB_19
  1713.     v3_5!=FALSE
  1714.     '
  1715.     IF MENU(1)=24 ! nix als Ärger
  1716.       v2_7F%=-1 ! sonst double trouble
  1717.     ENDIF
  1718.   ENDIF
  1719. RETURN
  1720. > PROCEDURE vB_22 ! Fenster einschalten
  1721.   HIDEM
  1722.   DPOKE WINDTAB+2,&X111111111111
  1723.   DPOKE WINDTAB+4,7 ! X-Koordinate
  1724.   DPOKE WINDTAB+6,30 ! Y
  1725.   DPOKE WINDTAB+8,632 ! Breite X
  1726.   DPOKE WINDTAB+10,364 ! Höhe
  1727.   TITLEW #1," "+v1_6$+" "
  1728.   INFOW #1," Don't Panic."
  1729.   VOID GRAF_GROWBOX(315,185,10,10,0,20,639,380)
  1730.   ' wind_x%=wind_onx%-16
  1731.   ' wind_y%=wind_ony%-44
  1732.   v2_6E%=614
  1733.   v2_80%=320
  1734.   OPENW 1
  1735.   CLEARW 1
  1736.   CLS
  1737.   PAUSE 5
  1738.   SHOWM
  1739. RETURN
  1740. > PROCEDURE vB_14 ! Statistik info
  1741.   @vB_1D(1,v2_0%)
  1742.   v1_20$=" ------ STATISTIK ------   |"+RIGHT$("       "+STR$(v2_0%),8)
  1743.   v1_20$=v1_20$+" Zeilen|"+RIGHT$("       "+STR$(v2_53%),8)+" Bytes Text|"
  1744.   v1_20$=v1_20$+RIGHT$("       "+STR$(FRE(0)),8)+" Bytes frei"
  1745.   ALERT 0,v1_20$,1,v1_8$,v2_1D%
  1746. RETURN
  1747. > PROCEDURE vB_E ! reinen ASCII erzeugen
  1748.   IF v2_0%>1
  1749.     @vB_18   ! Texte in >"< werden nicht verändert
  1750.     DEFMOUSE 2
  1751.     INFOW #1," Text-Vollreinigung"
  1752.     FOR v2_87%=1 TO v2_0%
  1753.       v5_2$(v2_87%)=v5_2$(v2_87%)+" "
  1754.       v2_A5%=LEN(v5_2$(v2_87%))
  1755.       FOR v2_88%=1 TO v2_A5%
  1756.         IF MID$(v5_2$(v2_87%),v2_88%,1)=CHR$(34) ! Text in >"< überspringen
  1757.           IF INSTR(v2_88%+1,v5_2$(v2_87%),CHR$(34))>v2_88% ! zweites >"< suchen
  1758.             v2_88%=INSTR(v2_88%+1,v5_2$(v2_87%),CHR$(34)) ! Zähler neu setzen
  1759.             GOTO vA_7 ! auf Textende setzen
  1760.           ENDIF
  1761.         ENDIF
  1762.         v1_21$=MID$(v5_2$(v2_87%),v2_88%,1) ! alles kleiner Space
  1763.         IF ASC(v1_21$)=27
  1764.           v5_2$(v2_87%)=LEFT$(v5_2$(v2_87%),v2_88%-1)+" "+RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-v2_88%-1)
  1765.         ENDIF
  1766.         IF ASC(v1_21$)<32
  1767.           MID$(v5_2$(v2_87%),v2_88%,1)=" "
  1768.         ENDIF
  1769.         IF ASC(v1_21$)>127 AND LEN(v5_2$(v2_87%))<v2_1C%-1  ! Umlaut?
  1770.           SELECT v1_21$
  1771.           CASE "Ä"
  1772.             v5_2$(v2_87%)=LEFT$(v5_2$(v2_87%),v2_88%-1)+"AE"+RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-v2_88%)
  1773.           CASE "Ö"
  1774.             v5_2$(v2_87%)=LEFT$(v5_2$(v2_87%),v2_88%-1)+"OE"+RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-v2_88%)
  1775.           CASE "Ü"
  1776.             v5_2$(v2_87%)=LEFT$(v5_2$(v2_87%),v2_88%-1)+"UE"+RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-v2_88%)
  1777.           CASE "ä"
  1778.             v5_2$(v2_87%)=LEFT$(v5_2$(v2_87%),v2_88%-1)+"ae"+RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-v2_88%)
  1779.           CASE "ö"
  1780.             v5_2$(v2_87%)=LEFT$(v5_2$(v2_87%),v2_88%-1)+"oe"+RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-v2_88%)
  1781.           CASE "ü"
  1782.             v5_2$(v2_87%)=LEFT$(v5_2$(v2_87%),v2_88%-1)+"ue"+RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-v2_88%)
  1783.           CASE "ß"
  1784.             v5_2$(v2_87%)=LEFT$(v5_2$(v2_87%),v2_88%-1)+"ss"+RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-v2_88%)
  1785.           ENDSELECT
  1786.           v1_21$=MID$(v5_2$(v2_87%),v2_88%,1)
  1787.           IF ASC(v1_21$)>126
  1788.             MID$(v5_2$(v2_87%),v2_88%,1)=" " ! >Rest< beseitigen
  1789.           ENDIF
  1790.         ENDIF
  1791.       vA_7:
  1792.       NEXT v2_88%
  1793.       WHILE LEFT$(v5_2$(v2_87%),1)=" "
  1794.         v5_2$(v2_87%)=RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-1) ! gegen Bombendrohungen
  1795.       WEND
  1796.       v5_2$(v2_87%)=TRIM$(v5_2$(v2_87%)) ! Abschlußreinigung
  1797.     NEXT v2_87%
  1798.     WHILE LEN(v5_2$(v2_0%))<2 ! Leere Zeilen am Textende?
  1799.       v5_2$(v2_0%)=""
  1800.       DEC v2_0%
  1801.     WEND
  1802.     OPENW 1
  1803.     v2_2D%=1
  1804.     v2_3E%=0
  1805.     @vB_19
  1806.     DEFMOUSE 0
  1807.   ENDIF
  1808. RETURN
  1809. > PROCEDURE vB_23 ! cursor per mausknopf
  1810.   VOID WIND_GET(1,10,v2_89%,v2_8A%,v2_8B%,v2_8C%) ! void=fehlercode
  1811.   MOUSE v2_8A%,v2_8B%,v2_8C%
  1812.   IF v2_8A%>0 AND v2_8B%>0
  1813.     IF v2_8A%<v2_6E% AND v2_8B%<v2_80% ! maus im Arbeitsbereich
  1814.       @vB_18
  1815.       v2_2D%=(v2_8A%+7)/8
  1816.       v2_17%=(v2_8B%+14)/16+v2_16%-1 ! point5%
  1817.       ADD v2_2D%,v2_3E%
  1818.       IF v2_17%>v2_0%
  1819.         v2_17%=v2_0%
  1820.       ENDIF
  1821.       IF v2_2D%>LEN(v5_2$(v2_17%))+1
  1822.         v2_2D%=LEN(v5_2$(v2_17%))+1
  1823.       ENDIF
  1824.       @vB_18
  1825.     ENDIF
  1826.   ENDIF
  1827. RETURN
  1828. > PROCEDURE vB_10 ! Rem's beseitigen
  1829.   IF v2_0%>1
  1830.     DEFMOUSE 2
  1831.     INFOW #1," REM-Killer in Progress"
  1832.     LET v2_8D%=0
  1833.     FOR v2_8E%=1 TO v2_0%
  1834.       LET v2_8F%=0 ! Zeilenanfang
  1835.       IF LEN(v5_2$(v2_8E%))>2 ! wg. Bombendrohungen
  1836.         IF INSTR(UPPER$(v5_2$(v2_8E%)),"REM ")>0
  1837.           v2_8F%=INSTR(UPPER$(v5_2$(v2_8E%)),"REM ") ! >REM< gefunden?
  1838.         ENDIF
  1839.         IF INSTR(v5_2$(v2_8E%),"'")>0
  1840.           v2_8F%=INSTR(v5_2$(v2_8E%),"'") ! >'< gefunden?
  1841.         ENDIF
  1842.         IF v2_8F%>1
  1843.           IF MID$(v5_2$(v2_8E%),v2_8F%-1,1)=":"
  1844.             DEC v2_8F%
  1845.           ENDIF
  1846.           DEC v2_8F% ! wirklich alles
  1847.           LET v2_8D%=ADD(v2_8D%,LEN(v5_2$(v2_8E%)))
  1848.           v5_2$(v2_8E%)=LEFT$(v5_2$(v2_8E%),v2_8F%)
  1849.           LET v2_8D%=SUB(v2_8D%,LEN(v5_2$(v2_8E%)))
  1850.         ENDIF ! pos>0
  1851.       ENDIF ! len
  1852.     NEXT v2_8E%
  1853.     INFOW #1," "+STR$(v2_8D%)+" Bytes killed."
  1854.     v2_3E%=0
  1855.     v2_17%=1
  1856.     @vB_19
  1857.     DEFMOUSE 0
  1858.   ENDIF
  1859. RETURN
  1860. > PROCEDURE vB_18 ! setzen/löschen
  1861.   BOUNDARY 0
  1862.   GRAPHMODE 3
  1863.   DEFFILL 1,1
  1864.   PBOX (v2_2D%-v2_3E%)*8-7,(v2_17%-v2_16%+1)*16-13,(v2_2D%-v2_3E%)*8,(v2_17%-v2_16%+1)*16+3
  1865.   BOUNDARY 1
  1866.   GRAPHMODE 1
  1867.   DEFFILL 1,0
  1868.   INFOW #1," Zeile "+STR$(v2_17%)+"  Spalte "+STR$(v2_2D%)
  1869. RETURN
  1870. > PROCEDURE vB_11 ! nach Zeilennummer einfügen/löschen
  1871.   IF v2_0%>1
  1872.     INFOW #1," Spacer an der Arbeit."
  1873.     v2_90%=INSTR(v5_2$(1)," ") ! wo ist das erste Space
  1874.     v2_91%=VAL(v5_2$(1)) ! Wert 1. Zeilennummer
  1875.     v2_92%=LEN(STR$(v2_91%))
  1876.     IF v2_90%>0 AND v2_90%<=v2_92%+1 ! Zeilen enthalten Spaces (=löschen)
  1877.       FOR v2_93%=1 TO v2_0%
  1878.         v2_91%=VAL(v5_2$(v2_93%)) ! Nummer festellen
  1879.         IF v2_91%>0         ! leere Zeilen nicht bearbeiten
  1880.           v1_22$=STR$(v2_91%) ! Nummer als Text
  1881.           v2_92%=LEN(v1_22$) ! Länge Zeilennummer
  1882.           v5_2$(v2_93%)=RIGHT$(v5_2$(v2_93%),LEN(v5_2$(v2_93%))-v2_92%) ! Nummer löschen
  1883.           WHILE LEFT$(v5_2$(v2_93%),1)=" " ! noch ein space
  1884.             v5_2$(v2_93%)=RIGHT$(v5_2$(v2_93%),LEN(v5_2$(v2_93%))-1)
  1885.           WEND
  1886.           v5_2$(v2_93%)=v1_22$+v5_2$(v2_93%) ! Nummer wieder anfügen
  1887.         ENDIF
  1888.       NEXT v2_93%
  1889.     ELSE
  1890.       FOR v2_93%=1 TO v2_0% ! Spaces müssen eingefügt werden
  1891.         v2_94%=LEN(v5_2$(v2_93%))
  1892.         IF v2_94%>1 AND v2_94%<v2_1C%-1
  1893.           v2_91%=VAL(v5_2$(v2_93%))
  1894.           v1_22$=STR$(v2_91%)
  1895.           v2_92%=LEN(v1_22$)
  1896.           v5_2$(v2_93%)=v1_22$+" "+RIGHT$(v5_2$(v2_93%),LEN(v5_2$(v2_93%))-v2_92%)
  1897.         ENDIF
  1898.       NEXT v2_93%
  1899.     ENDIF
  1900.     @vB_19 ! Bild resaturieren
  1901.   ENDIF
  1902. RETURN
  1903. > PROCEDURE vB_24 ! was gedrückt
  1904.   v2_95%=MENU(14) ! Zeichen holen
  1905.   LPOKE XBIOS(14,1)+6,0 !Tastaturpuffer leeren
  1906.   v2_96%=v2_95% AND 255 ! ASCII
  1907.   v2_97%=v2_95%/256 ! Scancode
  1908.   v2_98%=0 ! 1=curset 2=neuer Fensterinhalt
  1909.   '
  1910.   IF LEN(v5_2$(v2_17%))>=v2_1C%-1 ! maximale Zeilenbreite erreicht
  1911.     IF v2_96%>31 AND v2_96%<>127
  1912.       v2_96%=0
  1913.       v2_97%=0
  1914.       GOTO vA_4
  1915.     ENDIF
  1916.   ENDIF
  1917.   '
  1918.   IF v2_96%>31 AND v2_96%<>127 ! normales Zeichen
  1919.     @vB_18
  1920.     v2_98%=1
  1921.     IF v2_3%=TRUE ! Einfügen aktiv
  1922.       IF LEN(v5_2$(v2_17%))<v2_1C%+1
  1923.         v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)+CHR$(v2_96%)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1)
  1924.         @vB_20
  1925.       ENDIF
  1926.     ELSE
  1927.       TEXT (v2_2D%-1-v2_3E%)*8+1,(v2_17%-v2_16%)*16+16,CHR$(v2_96%)
  1928.       IF v2_2D%<=LEN(v5_2$(v2_17%))
  1929.         MID$(v5_2$(v2_17%),v2_2D%,1)=CHR$(v2_96%)
  1930.       ELSE
  1931.         v5_2$(v2_17%)=v5_2$(v2_17%)+CHR$(v2_96%)
  1932.       ENDIF
  1933.     ENDIF
  1934.     INC v2_2D%
  1935.     IF v2_2D%>v2_3E%+v2_3D% ! zu weit?
  1936.       ADD v2_3E%,v2_3D%-1  ! nach rechts
  1937.       IF v2_3E%>v2_1C%-v2_3D% ! zu weit rechts?
  1938.         v2_3E%=v2_1C%-v2_3D% ! rechter anschlag
  1939.         v2_98%=2
  1940.       ENDIF
  1941.       v2_98%=2
  1942.     ENDIF
  1943.     GOTO vA_5
  1944.   ENDIF
  1945.   '
  1946.   IF (v2_97%=60 OR v2_96%=13) AND v2_0%<v2_18% ! neue Zeile (einfügen)
  1947.     @vB_18
  1948.     v2_98%=2
  1949.     v2_2D%=1
  1950.     IF v2_96%=13 ! <ENTER> = neue Zeile unter Cursor + Cur-down
  1951.       INC v2_17% ! F2 = neue leere Zeile an Cur-pos
  1952.     ENDIF
  1953.     INC v2_0%
  1954.     INSERT v5_2$(v2_17%)=" "
  1955.     IF v2_17%>v2_16%+v2_3C%
  1956.       ADD v2_16%,v2_3C%
  1957.       IF v2_16%>v2_17%-v2_3C%
  1958.         v2_16%=v2_17%-v2_3C%
  1959.       ENDIF
  1960.     ENDIF
  1961.     IF v2_59%=TRUE
  1962.       IF v2_1%<=v2_17% AND v2_2%>=v2_17%
  1963.         INC v2_2%
  1964.       ENDIF
  1965.     ENDIF
  1966.     INC v2_16%
  1967.     IF v2_0%>1
  1968.       @vB_1A(1)
  1969.     ENDIF
  1970.     GOTO vA_5
  1971.   ENDIF
  1972.   '
  1973.   IF v2_97%=71 ! CLR/Home
  1974.     @vB_18
  1975.     v2_2D%=1
  1976.     v2_17%=v2_16%
  1977.     IF v2_3E%>0
  1978.       v2_3E%=0
  1979.       v2_98%=2
  1980.     ENDIF
  1981.     @vB_18
  1982.   ENDIF
  1983.   '
  1984.   IF v2_97%=80 ! cursor down
  1985.     IF v2_17%<v2_0% ! nur bis vorletzte zeile
  1986.       @vB_18
  1987.       v2_98%=1
  1988.       INC v2_17%
  1989.       IF v2_17%>=v2_16%+v2_3C% ! 1 Seite tiefer
  1990.         ADD v2_16%,v2_3C% ! +1
  1991.         IF v2_16%>v2_0%-v2_3C%+1 ! zuweit unten?
  1992.           v2_16%=v2_0%-v2_3C%+1
  1993.         ENDIF
  1994.         v2_98%=2
  1995.       ENDIF
  1996.       GOTO vA_5
  1997.     ENDIF
  1998.   ENDIF
  1999.   '
  2000.   IF v2_97%=72 ! cursor up
  2001.     @vB_18 ! cur löschen
  2002.     v2_98%=1
  2003.     IF v2_17%>1
  2004.       DEC v2_17% ! 1 aufwärts
  2005.       IF v2_17%<v2_16% AND v2_16%>1 ! noch nicht ganz oben?
  2006.         v2_98%=2
  2007.         SUB v2_16%,v2_3C% ! fenster 1 Seite nach oben
  2008.         IF v2_16%<1
  2009.           v2_16%=1 ! falls weniger als 1 Seite bis ganz oben
  2010.         ENDIF
  2011.       ENDIF
  2012.     ENDIF
  2013.     GOTO vA_5
  2014.   ENDIF
  2015.   '
  2016.   IF v2_97%=77 ! cursor rechts
  2017.     IF v2_2D%<=LEN(v5_2$(v2_17%)) ! noch nicht ganz rechts
  2018.       @vB_18 ! cur sichern
  2019.       v2_98%=1
  2020.       INC v2_2D% ! eins weiter
  2021.       IF v2_2D%<=v2_3E%
  2022.         v2_3E%=v2_2D%-1
  2023.         v2_98%=1
  2024.       ENDIF
  2025.       IF v2_2D%>v2_3E%+v2_3D% ! zu weit?
  2026.         ADD v2_3E%,v2_3D%-1 ! nach rechts
  2027.         IF v2_3E%>v2_1C%-v2_3D% ! zu weit rechts?
  2028.           v2_3E%=v2_1C%-v2_3D% ! rechter anschlag
  2029.           v2_98%=2
  2030.         ENDIF
  2031.         v2_98%=2
  2032.       ENDIF
  2033.     ENDIF
  2034.     GOTO vA_5
  2035.   ENDIF
  2036.   '
  2037.   IF v2_97%=75 ! cursor links
  2038.     IF v2_2D%>1
  2039.       v2_98%=1
  2040.       @vB_18
  2041.       DEC v2_2D%
  2042.       IF v2_2D%<=v2_3E%
  2043.         SUB v2_3E%,v2_3D%-1 !*3/2
  2044.         IF v2_3E%<0
  2045.           v2_3E%=0
  2046.           v2_98%=2
  2047.         ENDIF
  2048.         v2_98%=2
  2049.       ENDIF
  2050.     ENDIF
  2051.     GOTO vA_5
  2052.   ENDIF
  2053.   '
  2054.   IF v2_97%=82 AND LEN(v5_2$(v2_17%))<v2_1C% ! insert
  2055.   ENDIF
  2056.   '
  2057.   IF v2_96%=9 ! TAB
  2058.     IF v2_2D%<=LEN(v5_2$(v2_17%))-8
  2059.       @vB_18
  2060.       v2_98%=1
  2061.       INC v2_2D%
  2062.       v2_2D%=INT(v2_2D%/8+1)*8
  2063.       IF v2_2D%>v2_3E%+v2_3D% ! wie cur_rechts
  2064.         ADD v2_3E%,v2_3D%-1
  2065.         IF v2_3E%>v2_1C%-v2_3D%
  2066.           v2_3E%=v2_1C%-v2_3D%
  2067.         ENDIF
  2068.         INC v2_98%
  2069.       ENDIF
  2070.     ENDIF
  2071.     GOTO vA_5
  2072.   ENDIF
  2073.   '
  2074.   IF v2_96%=8 AND v2_2D%>1 ! Backspace
  2075.     @vB_18
  2076.     v2_98%=1
  2077.     DEC v2_2D%
  2078.     IF v2_2D%<=v2_3E%
  2079.       SUB v2_3E%,v2_3D%-1 !  scrolling?
  2080.       IF v2_3E%<0
  2081.         v2_3E%=0 ! nicht zu weit
  2082.       ENDIF
  2083.       v2_98%=2
  2084.     ENDIF
  2085.     v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%)
  2086.     @vB_20
  2087.     GOTO vA_5
  2088.   ENDIF
  2089.   '
  2090.   IF v2_96%=127 ! Delete
  2091.     IF v2_17%=v2_0% AND LEN(v5_2$(v2_0%))<2 AND v2_0%>1
  2092.       v5_2$(v2_0%)=""
  2093.       DEC v2_0%
  2094.       DEC v2_17%
  2095.       @vB_19
  2096.       GOTO vA_5
  2097.     ENDIF
  2098.   ENDIF
  2099.   '
  2100.   IF v2_96%=127 AND LEN(v5_2$(v2_17%))>0 ! DEL einzelzeichen
  2101.     @vB_18
  2102.     v2_98%=1
  2103.     IF v2_2D%<LEN(v5_2$(v2_17%))
  2104.       v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%)
  2105.     ELSE
  2106.       v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-1)
  2107.     ENDIF
  2108.     @vB_20
  2109.     GOTO vA_5
  2110.   ENDIF
  2111.   '
  2112.   IF v2_97%=61   ! F3=Zeile gesamt hochziehen
  2113.     IF v2_17%>1 ! Ende des Textes
  2114.       IF LEN(v5_2$(v2_17%))+LEN(v5_2$(v2_17%-1))<v2_1C% ! override?
  2115.         v5_2$(v2_17%-1)=v5_2$(v2_17%-1)+v5_2$(v2_17%)
  2116.         DELETE v5_2$(v2_17%)
  2117.         DEC v2_17%
  2118.         DEC v2_0%
  2119.         v2_98%=2
  2120.         GOTO vA_5
  2121.       ENDIF
  2122.     ENDIF
  2123.   ENDIF
  2124.   '
  2125.   IF v2_97%=62   ! F4 Rest ab Cursor in obere Zeile
  2126.     IF v2_17%>1 ! Ende der Welt
  2127.       IF LEN(v5_2$(v2_17%-1))+LEN(RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1))<v2_1C%
  2128.         v5_2$(v2_17%-1)=v5_2$(v2_17%-1)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1)
  2129.         v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)
  2130.         v2_98%=2
  2131.         GOTO vA_5
  2132.       ENDIF
  2133.     ENDIF
  2134.   ENDIF
  2135.   '
  2136.   IF v2_97%=63 ! F5 Rest ab Cursor in untere Zeile
  2137.     IF v2_17%<v2_0% ! nichts mehr darunter
  2138.       IF LEN(v5_2$(v2_17%+1))+LEN(RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1))<v2_1C%
  2139.         v5_2$(v2_17%+1)=v5_2$(v2_17%+1)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1)
  2140.         v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)
  2141.         v2_98%=2
  2142.         GOTO vA_5
  2143.       ENDIF
  2144.     ENDIF
  2145.   ENDIF
  2146.   '
  2147.   IF (v2_97%=64) OR (v2_96%=127 AND LEN(v5_2$(v2_17%))=0) ! DEL Line
  2148.     @vB_18
  2149.     v2_98%=2
  2150.     IF v2_17%<v2_0% ! gibt Ärger
  2151.       DELETE v5_2$(v2_17%)
  2152.       IF v2_59%=TRUE
  2153.         IF v2_17%=v2_1%
  2154.           ' INC block_start%
  2155.         ENDIF
  2156.         DEC v2_2%
  2157.       ENDIF
  2158.       DEC v2_0%
  2159.     ENDIF
  2160.   ENDIF
  2161.   '
  2162.   IF v2_97%=65 AND v2_A4%=TRUE ! F7 weitersuchen
  2163.     @vB_9(1)
  2164.   ENDIF
  2165.   '
  2166.   IF v2_97%=68 ! F10=Don't Panic
  2167.     v2_2D%=1
  2168.     v2_17%=1
  2169.     v2_3E%=0
  2170.     v2_98%=2
  2171.   ENDIF
  2172.   '
  2173. vA_5:
  2174.   IF v2_2D%>v2_3E%+v2_3D% ! rechtsaußen?
  2175.     ADD v2_3E%,v2_3D%-1
  2176.     IF v2_3E%>v2_1C%-v2_3D%
  2177.       v2_3E%=v2_1C%-v2_3E%
  2178.     ENDIF
  2179.     v2_98%=2
  2180.   ENDIF
  2181.   IF LEN(v5_2$(v2_17%))<v2_2D%
  2182.     v2_2D%=LEN(v5_2$(v2_17%))+1 ! falls neue Zeile kürzer
  2183.   ENDIF
  2184.   IF v2_2D%<=v2_3E%
  2185.     v2_3E%=v2_2D%-v2_3D%-1 ! mehr info
  2186.     IF v2_3E%<0 ! aber nicht zu weit
  2187.       v2_3E%=0
  2188.     ENDIF
  2189.     v2_98%=2
  2190.   ENDIF
  2191.   IF v2_98%=2
  2192.     @vB_19
  2193.     @vB_18
  2194.   ENDIF
  2195.   IF v2_98%>0
  2196.     @vB_18
  2197.   ENDIF
  2198. vA_4:
  2199. RETURN
  2200. > PROCEDURE vB_0
  2201.   IF XBIOS(4)<>2
  2202.     ALERT 3,"|ST-High only",1," Sorry. ",v2_1D%
  2203.     EDIT
  2204.   ENDIF
  2205.   ' IF memory1%>100000
  2206.   ' RESERVE 99999
  2207.   ' ENDIF
  2208.   LET v2_18%=999
  2209.   v1_3$=CHR$(27)
  2210.   DIM v5_0$(63) ! menue
  2211.   DIM v5_2$(v2_18%)  ! text
  2212.   DIM vD_0|(5,4) ! rs232
  2213.   DIM v6_0%(5,4) ! rs232
  2214.   DIM v5_3$(127)
  2215.   DIM v6_2%(6)
  2216.   DIM v6_1%(6)
  2217.   DIM v5_1$(3) ! Pica-CQ-Links
  2218.   ARRAYFILL vD_0|(),FALSE
  2219.   vD_0|(1,3)=1 ! baudrate 2400
  2220.   vD_0|(2,4)=1 ! databits 8
  2221.   vD_0|(3,1)=1 ! parity   N
  2222.   vD_0|(4,2)=1 ! stopbits 1
  2223.   vD_0|(5,3)=1 ! handshak -
  2224.   VOID XBIOS(15,4,5,136,-1,-1,-1) ! RS232
  2225.   v6_1%(1)=1 ! Pica
  2226.   v6_1%(2)=1 ! CQ
  2227.   v6_1%(3)=0 ! Epson
  2228.   v6_1%(4)=3 ! linker Rand
  2229.   v6_1%(5)=72 ! Papierlänge
  2230.   v6_1%(6)=60 ! Drucklänge
  2231.   v5_1$(1)=CHR$(18) ! default
  2232.   v5_1$(2)=v1_3$+"H"
  2233.   KEYDEF 1,"openw 0"+CHR$(13)
  2234.   KEYDEF 2,"cls"+CHR$(13)
  2235.   LET v1_0$=CHR$(26) ! end of File
  2236.   LET v2_E%=26 ! end of file
  2237.   LET v1_2$=CHR$(13)+CHR$(10) !end of line
  2238.   LET v1_7$=CHR$(GEMDOS(25)+65)+":\*.SRP"
  2239.   LET v1_6$=CHR$(GEMDOS(25)+65)+":\PROJECT.SRP"
  2240.   v1_8$="   "+CHR$(14)+CHR$(15)+"   "
  2241.   v1_A$="Abbruch| Weiter "
  2242.   v1_17$="  Nein  |Ja"
  2243.   v2_16%=1 ! oberste darzustellende Zeile
  2244.   v2_3E%=0 ! 1. linkes Zeichen im Fenster
  2245.   v2_1C%=253 ! max zeichen pro zeile
  2246.   v2_0%=1 ! letzte Zeile in T$()
  2247.   v2_A4%=FALSE
  2248.   v2_2D%=1 ! cursor default start
  2249.   v2_17%=1
  2250.   v2_60%=1 ! E220
  2251.   v2_59%=FALSE ! kein block markiert
  2252.   v2_3%=TRUE ! Einfügemodus
  2253.   '
  2254.   OPENW 0
  2255.   RESTORE
  2256.   v2_1D%=0
  2257.   DO
  2258.     READ v5_0$(v2_1D%)
  2259.     EXIT IF v5_0$(v2_1D%)="****"
  2260.     INC v2_1D%
  2261.   LOOP
  2262.   v5_0$(0)=" "+CHR$(14)+CHR$(15)+" "
  2263.   v5_0$(v2_1D%)=""
  2264.   v5_0$(v2_1D%+1)=""
  2265.   FOR v2_1D%=1 TO 5
  2266.     FOR v2_99%=1 TO 4
  2267.       READ v6_0%(v2_1D%,v2_99%)
  2268.     NEXT v2_99%
  2269.   NEXT v2_1D%
  2270.   v2_1D%=999
  2271.   RESTORE vA_6
  2272.   FOR v2_9A%=1 TO 127
  2273.     READ v5_3$(v2_9A%)
  2274.   NEXT v2_9A%
  2275.   MENU v5_0$()
  2276.   MENU 28,1 ! insert
  2277.   MENU 31,2 ! weitersuchen
  2278.   MENU 37,2 ! R1
  2279.   MENU 41,2 ! B end
  2280.   MENU 43,2 ! B del
  2281.   MENU 44,2 ! B isol
  2282.   MENU 45,2 ! B copy
  2283.   MENU 46,2 ! B move
  2284.   MENU 47,2 ! B mark
  2285.   MENU 48,2 ! B >anf
  2286.   MENU 49,2 ! B >end
  2287.   @vB_1A(0)
  2288.   BOUNDARY 0
  2289.   DEFFILL 1,2,4
  2290.   PBOX 0,0,639,399
  2291.   BOUNDARY 0
  2292.   ON BREAK GOSUB vB_12
  2293.   ON MENU GOSUB vB_1
  2294.   ON MENU MESSAGE GOSUB vB_21
  2295.   ON MENU KEY GOSUB vB_24
  2296.   ON MENU BUTTON 1,1,1 GOSUB vB_23
  2297.   @vB_5
  2298.   GOSUB vB_22
  2299.   WHILE INP?(1)=TRUE ! RS232-Puffer leeren,
  2300.     VOID INP(1) ! falls noch Zeichen anliegen
  2301.   WEND ! oder beim Einschalten erzeugt wurden
  2302.   GOSUB vB_19
  2303. RETURN
  2304. > PROCEDURE vB_13
  2305.   v1_23$="| SHARP PC-E220/500 Expander   | |  (C) 1993 by Alfred Jäger"
  2306.   ALERT 0,v1_23$,1,v1_8$,v2_1D%
  2307. RETURN
  2308. > PROCEDURE vB_12
  2309.   IF v2_0%>1
  2310.     v1_26$="|  Programm beenden?   | |  Daten gesichert?"
  2311.   ELSE
  2312.     v1_26$="|Wollen Sie das Programm|   wirklich beenden?"
  2313.   ENDIF
  2314.   ALERT 2,v1_26$,1,v1_17$,v2_A6%
  2315.   IF v2_A6%=2
  2316.     CLOSEW 1
  2317.     VOID WIND_GET(1,6,v2_9B%,v2_9C%,v2_9D%,v2_9E%)
  2318.     VOID GRAF_SHRINKBOX(315,175,10,10,v2_9B%,v2_9C%,v2_9D%,v2_9E%)
  2319.     MENU KILL
  2320.     CLOSE
  2321.     OPENW 0
  2322.     EDIT
  2323.   ENDIF
  2324. RETURN
  2325. > PROCEDURE vB_25
  2326.   DATA  + , Information,---------------------,1,2,3,4,5,6,""
  2327.   DATA " Disk ", Alles neu
  2328.   DATA - Disk ----------, Datei schreiben, Datei lesen, Datei anhängen, Block schreiben
  2329.   DATA - RS 232 --------, Datei senden, Datei holen, Datei mergen, Block senden
  2330.   DATA - Druck ---------, Text drucken, Block drucken
  2331.   DATA -----------------, Ende,""
  2332.   '
  2333.   DATA " Werken "
  2334.   DATA  Einfügen, Suchen, Weitersuchen , Kompressor, Säubern
  2335.   DATA  REM-Killer, Space, Rechnertyp, Reserve,""
  2336.   '
  2337.   DATA " Block "
  2338.   DATA  Anfang Block, Ende Block,----------------, Löschen, Isolieren, Kopieren
  2339.   DATA  Verschieben, Marken löschen, -> Blockanfang, -> Blockende,""
  2340.   '
  2341.   DATA " Parameter "
  2342.   DATA  Drucker, Schnittstelle, EOF - EOL
  2343.   DATA ----------------, Statistik,""
  2344.   '
  2345.   DATA ****
  2346.   DATA 9,7,4,2,96,64,32,0,0,4,6,0,0,8,16,24,0,1,2,3
  2347.   REM  |bauds | datas    |parity| stopbits| handsh
  2348. vA_6:
  2349.   ' aufbau:1b-4c-0c-00-bitmuster 12 spalten (120dpi 8pin)  ges. 127 daten (fix)
  2350.   DATA 20,41,42,E2,1B4C0C0002060E1A326262321A0E0602,45,5A,48
  2351.   DATA E9,49,4B,1B4C0C0002060C1830606030180C0602,4D,4E
  2352.   DATA 1B4C0C0000C6C68292929282C6C60000,4F
  2353.   DATA 1B4C0C0000007E7E404040407E7E0000,50,E4,54
  2354.   DATA 1B4C0C00008080C07E7EC080C0400000,E8,58,1B4C0C0000E0F01008FEFE0810F0E000
  2355.   DATA EA,1B53314E1B54,1B53316E1B54,1B5331481B54,1B5331E61B54
  2356.   DATA 2E,2E
  2357.   DATA 20,E0,E1,1B4C0C0000008080DC5E22225E5C0000,EB,EE
  2358.   DATA 2E,1B4C0C0000203E3E1020203E1F010100,2E,2E,2E
  2359.   DATA 1B4C0C000040C2C66C38380C06020000
  2360.   DATA E6,2E,2E,6F
  2361.   DATA E3,2E,E5,E7,2E,ED,2E,1B4C0C000030380C043F3F040C383000
  2362.   DATA 1B4C0C0000001C2E220E0E222E1C0000,1B53315E1B54,2E
  2363.   DATA 2E,2E,2E,AB,1B4C0C0080A2A2949488889494A2A280,2E
  2364.   DATA 1B5330301B54,1B5330311B54,1B5330321B54,1B5330331B54,1B5330341B54
  2365.   DATA 1B5330351B54,1B5330361B54,1B5330371B54,1B5330381B54,1B5330391B54
  2366.   DATA 1B53302D1B54,1B53302B1B54,EC,F1
  2367.   DATA 2E,1B4C0C00000101033E7CC0808000000
  2368.   DATA 1B5331301B54,1B5331311B54,1B5331321B54,1B5331331B54,1B5331341B54
  2369.   DATA 1B5331351B54,1B5331361B54,1B5331371B54,1B5331381B54,1B5331391B54,8F
  2370.   DATA 1B5330611B54,1B5330621B54,1B5330651B54,1B53306D1B54,FC,1B5330741B54
  2371.   DATA 2E,B3,1B4C0C0000FEFE7C7C38381010000000,F3,F2,2E
  2372.   DATA 5B,5D,FE,FB,2E,1B5331411B54,1B5331421B54,1B5331651B54
  2373.   DATA 1B5331431B54,1B5331501B54,2E,2E
  2374.   DATA 1B4C0C0000101038387C7CFEFE000000,1B4C0C0000FEFE7C7C38381010000000,F8
  2375.   DATA 1B4C0C0000FEFEFEFEFEFEFEFEFEFE00,2E
  2376.   DATA 2E,5E,1B4C0C0000080808082A2A3E3E1C080000
  2377.   DATA 1B4C0C0000242E2E2424747424000000,1B4C0C00001030207E7E203010000000
  2378.   DATA 1B4C0C0000080C047E7E040C08000000,1B4C0C00081C1C3E2A08080808F8F800
  2379.   '
  2380. vA_2:
  2381.   ' bei neueinträgen DIM ändern, ca. Zeile 1400
  2382.   DATA "DATA ","DA.","FOR ","F.","NEXT ","N.","STEP ","STE."
  2383.   DATA "THEN PRINT ","P.","PRINT ","P."
  2384.   DATA "THEN LET ","LE.","LET ","LE."
  2385.   DATA "THEN GOTO ","G.","GOTO ","G."
  2386.   DATA "THEN BEEP ","B.","BEEP ","B."
  2387.   DATA "THEN GOSUB ","GOS.","GOSUB ","GOS."
  2388.   DATA "THEN RETURN ","RE.","RETURN ","RE."
  2389.   DATA "THEN INPUT ","I.","INPUT ","I."
  2390.   DATA "THEN LPRINT ","LP.","LPRINT ","LP."
  2391.   DATA "DEGREE ","DE.","RADIAN ","RAD.","GRAD ","GR.","DEG ","DEG"
  2392.   DATA "RESTORE ","RES.","RANDOMIZE ","RA.","REM","'","INP ","INP"
  2393.   DATA "LOCATE ","LOC.","USING ","U.","WAIT ","W.","LOG ","LOG"
  2394.   DATA "STOP ","S.","END ","E.","TRON","TR.","RND ","RN.","TROFF ","TROF."
  2395.   DATA "CHR$ ","CH.","ASC ","AS.","STR$ ","STR.","OUT ","OUT","TO ","TO"
  2396.   DATA "SIN ","SI.","TAN ","TA.","ATN ","AT.","DMS ","DM.","COS ","COS"
  2397.   DATA "HCS ","HC.","HTN ","HT.","AHS ","AH.","ACS ","AC.","HSN ","H."
  2398.   DATA "RCP ","RC.","NCR ","NC.","NPR ","NP.","ROT ","RO.","SQR ","SQ."
  2399.   DATA "AND ","AN.","NOT ","NO.","ABS ","A.","SGN ","SG.","FRE