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 >
Wrap
GFA-BASIC Atari
|
1989-04-06
|
58KB
|
2,399 lines
@vB_0
'
DO
ON MENU
LOOP
'
> PROCEDURE vB_1 ! angeklickt
MENU OFF
IF v5_0$(MENU(0))=" Text drucken"
@vB_2(1,v2_0%)
ENDIF
IF v5_0$(MENU(0))=" EOF - EOL"
@vB_3
ENDIF
IF v5_0$(MENU(0))=" Schnittstelle"
@vB_4
ENDIF
IF v5_0$(MENU(0))=" Rechnertyp"
@vB_5
ENDIF
IF v5_0$(MENU(0))=" Anfang Block"
@vB_6(1)
ENDIF
IF v5_0$(MENU(0))=" Ende Block"
@vB_6(2)
ENDIF
IF v5_0$(MENU(0))=" Löschen"
@vB_6(4)
ENDIF
IF v5_0$(MENU(0))=" Kopieren"
@vB_6(6)
ENDIF
IF v5_0$(MENU(0))=" Verschieben"
@vB_6(5)
ENDIF
IF v5_0$(MENU(0))=" Block drucken"
@vB_2(v2_1%,v2_2%)
ENDIF
IF v5_0$(MENU(0))=" Marken löschen"
@vB_6(3)
ENDIF
IF v5_0$(MENU(0))=" Isolieren"
@vB_6(7)
ENDIF
IF v5_0$(MENU(0))=" Block schreiben"
@vB_7(v2_1%,v2_2%)
ENDIF
IF v5_0$(MENU(0))=" Block senden"
@vB_8(v2_1%,v2_2%)
ENDIF
IF v5_0$(MENU(0))=" -> Blockanfang"
@vB_6(8)
ENDIF
IF v5_0$(MENU(0))=" -> Blockende"
@vB_6(9)
ENDIF
IF v5_0$(MENU(0))=" Suchen"
@vB_9(0)
ENDIF
IF v5_0$(MENU(0))=" Weitersuchen "
@vB_9(1)
ENDIF
IF v5_0$(MENU(0))=" Kompressor"
@vB_A
ENDIF
IF v5_0$(MENU(0))=" Alles neu"
@vB_B(0)
ENDIF
IF v5_0$(MENU(0))=" Datei schreiben"
@vB_7(1,v2_0%)
ENDIF
IF v5_0$(MENU(0))=" Datei lesen"
@vB_C(1)
ENDIF
IF v5_0$(MENU(0))=" Datei anhängen"
@vB_C(2)
ENDIF
IF v5_0$(MENU(0))=" Datei senden"
@vB_8(1,v2_0%)
ENDIF
IF v5_0$(MENU(0))=" Datei holen"
@vB_D(1)
ENDIF
IF v5_0$(MENU(0))=" Datei mergen"
@vB_D(2)
ENDIF
IF v5_0$(MENU(0))=" Säubern"
@vB_E
ENDIF
IF v5_0$(MENU(0))=" Drucker"
@vB_F
ENDIF
IF v5_0$(MENU(0))=" REM-Killer"
@vB_10
ENDIF
IF v5_0$(MENU(0))=" Space"
@vB_11
ENDIF
IF v5_0$(MENU(0))=" Einfügen"
v2_3%=NOT v2_3%
IF v2_3%=TRUE
MENU 28,1
ELSE
MENU 28,0
ENDIF
ENDIF
IF v5_0$(MENU(0))=" Ende"
GOSUB vB_12
ENDIF
IF v5_0$(MENU(0))=" Information"
GOSUB vB_13
ENDIF
IF v5_0$(MENU(0))=" Statistik"
@vB_14
ENDIF
RETURN
> PROCEDURE vB_4 ! Parameter DFÜ
' Auslesen der Werte unbekannt (Schnittstelle direkt)
' Benutzen und Macken der Schittstelle erkennen sind noch nicht möglich
' Weitere Infos unter INPAUX$ und XBIOS 14 (RS232 empfangen)
OPENW 0
@vB_15(110,82,520,266,"RS 232 Parameter")
@vB_16(208,236,350)
TEXT 138,140,"Baudrate: 300 1200 2400 4800"
TEXT 138,160,"Databits: 5 6 7 8"
TEXT 146,180,"Parität: none even odd"
TEXT 138,200,"Stopbits:"
TEXT 322,200,"1 1.5 2"
TEXT 130,220,"Handshake: --- XONXOFF RTS/CTS RTS+XON"
FOR v2_4%=125 TO 225 STEP 20
LINE 216,v2_4%,504,v2_4%
NEXT v2_4%
FOR v2_4%=216 TO 504 STEP 72 ! alles durch 72 teilbar
LINE v2_4%,125,v2_4%,225
NEXT v2_4%
GRAPHMODE 3
DEFFILL 1,1
LINE 504,166,504,184
LINE 216,186,216,204
FOR v9_0|=1 TO 5 ! vorgabeparameter setzen
FOR v9_1|=1 TO 4
IF vD_0|(v9_0|,v9_1|)=1
PBOX (v9_1|+2)*72,((v9_0|+5)*20)+5,(v9_1|+2)*72+72,((v9_0|+5)*20+20)+5
ENDIF
NEXT v9_1| ! die pbox-zeile könnte in ein eigenes subprog
NEXT v9_0|
DEFMOUSE 3
GRAPHMODE 1
'
v3_0!=FALSE
REPEAT
REPEAT
MOUSE v2_5%,v2_6%,v2_7% ! ab hier einstellen
UNTIL v2_7%=1
v2_8%=v2_5%/72 ! bildschirm auf felder umrechnen
SUB v2_6%,5
v2_9%=v2_6%/20
SUB v2_8%,2
SUB v2_9%,5
'
IF v2_8%>0 AND v2_8%<5 AND v2_9%>0 AND v2_9%<6 ! innerhalb klickbereich?
IF NOT (v2_8%=4 AND v2_9%=3)
IF NOT (v2_8%=1 AND v2_9%=4)
FOR v2_4%=1 TO 4
IF vD_0|(v2_9%,v2_4%)=1 ! altes feld löschen
vD_0|(v2_9%,v2_4%)=0
GRAPHMODE 3
PBOX (v2_4%+2)*72,((v2_9%+5)*20)+5,(v2_4%+2)*72+72,((v2_9%+5)*20+20)+5
GRAPHMODE 1
ENDIF
NEXT v2_4%
vD_0|(v2_9%,v2_8%)=1 ! angeklicktes feld setzen
GRAPHMODE 3
PBOX (v2_8%+2)*72,((v2_9%+5)*20)+5,(v2_8%+2)*72+72,((v2_9%+5)*20+20)+5
GRAPHMODE 1
ENDIF
ENDIF
ENDIF
'
IF v2_6%>236 AND v2_6%<262
IF v2_5%>208 AND v2_5%<290 ! Abbruch-Button
GRAPHMODE 3
PBOX 208,236,280,256
GRAPHMODE 1
v3_0!=TRUE
ENDIF
IF v2_5%>351 AND v2_5%<423 ! OK-Button
GRAPHMODE 3
PBOX 351,237,421,255
GRAPHMODE 1
FOR v2_4%=1 TO 4
IF vD_0|(1,v2_4%)=1
v2_A%=v6_0%(1,v2_4%) ! baudrate
ENDIF
IF vD_0|(5,v2_4%)=1
v2_B%=v6_0%(5,v2_4%) ! handshake
ENDIF
NEXT v2_4%
v2_C%=0
FOR v2_8%=2 TO 4
FOR v2_9%=1 TO 4
IF vD_0|(v2_8%,v2_9%)=1
ADD v2_C%,v6_0%(v2_8%,v2_9%) ! "rest"
ENDIF
NEXT v2_9% ! letzte drei werte nicht verstellen
NEXT v2_8% ! var% liefert tolle Ergebnisse (Fehler?)
VOID XBIOS(15,v2_A%,v2_B%,v2_C%+128,-1,-1,-1) ! void=fehlercode
v3_0!=TRUE ! nach omikron.basic ist usart um 128 zu erhöhen
ENDIF
ENDIF
WHILE MOUSEK>0 ! kein autorepeat
WEND
UNTIL v3_0!=TRUE ! vielleicht noch eine huschbox
@vB_17
DEFMOUSE 0
CLOSEW 0
OPENW 1
RETURN
> PROCEDURE vB_3 ! Parameter EOF
OPENW 0
@vB_15(180,112,460,240,"File- Endkennungen")
@vB_16(200,210,368)
TEXT 200,170,"Zeilenende: CR LF CR/LF"
TEXT 216,190,"Fileende: $1A"
TEXT 297,191,CHR$(4)
TEXT 342,191,CHR$(3)
TEXT 385,170,CHR$(8) ! CR-LF
BOX 294,156,308,173
BOX 342,156,356,173
BOX 382,156,396,173
BOX 294,176,308,193
BOX 338,176,352,193
v2_D%=FALSE
v3_1!=FALSE
LET v2_E%=ASC(v1_0$)
DEFMOUSE 3
'
REPEAT
MOUSE v2_F%,v2_10%,v2_11%
v1_1$=INKEY$
IF v2_11%=1
IF v2_10%>156 AND v2_10%<173 ! obere Zeile
v9_2|=0
IF v2_F%>294 AND v2_F%<308
v9_2|=1
ENDIF
IF v2_F%>342 AND v2_F%<356
v9_2|=2
ENDIF
IF v2_F%>382 AND v2_F%<396
v9_2|=3
ENDIF
IF v9_2|>0
BOUNDARY 0
PBOX 295,157,307,172
PBOX 343,157,355,172
PBOX 383,157,395,172
BOUNDARY 1
SELECT v9_2|
CASE 1
TEXT 297,170,CHR$(8)
CASE 2
TEXT 345,170,CHR$(8)
CASE 3
TEXT 385,170,CHR$(8)
ENDSELECT
ENDIF
ENDIF
'
IF v2_10%>176 AND v2_10%<193 ! untere Zeile
IF v2_F%>294 AND v2_F%<308
DEC v2_E%
IF v2_E%<0
LET v2_E%=255
ENDIF
IF v2_E%<16
TEXT 320,190,"0"+HEX$(v2_E%)
ELSE
TEXT 320,190,HEX$(v2_E%)
ENDIF
ENDIF
IF v2_F%>338 AND v2_F%<352
INC v2_E%
IF v2_E%>255
LET v2_E%=0
ENDIF
IF v2_E%<16
TEXT 320,190,"0"+HEX$(v2_E%)
ELSE
TEXT 320,190,HEX$(v2_E%)
ENDIF
ENDIF
PAUSE 5
ENDIF
'
IF v2_10%>210 AND v2_10%<230
IF v2_F%>368 AND v2_F%<440 ! OK-Button
GRAPHMODE 3
DEFFILL 1,1
PBOX 369,211,439,229
DEFFILL 1,0
GRAPHMODE 1
v2_D%=TRUE
v3_1!=TRUE
ENDIF
IF v2_F%>200 AND v2_F%<272 ! Abbruch
GRAPHMODE 3
DEFFILL 1,1
PBOX 200,210,272,230
DEFFILL 1,0
GRAPHMODE 1
v2_D%=TRUE
ENDIF
ENDIF
ENDIF
IF v1_1$=CHR$(13)
GRAPHMODE 3
DEFFILL 1,1
PBOX 369,211,439,229
DEFFILL 1,0
GRAPHMODE 1
v2_D%=TRUE
ENDIF
UNTIL v2_D%=TRUE
IF v3_1!=TRUE
LET v1_0$=CHR$(v2_E%)
SELECT v9_2|
CASE 1
LET v1_2$=CHR$(13)
CASE 2
LET v1_2$=CHR$(10)
CASE 3
LET v1_2$=CHR$(13)+CHR$(10)
ENDSELECT
ENDIF
@vB_17
DEFMOUSE 0
CLOSEW 0
OPENW 1
RETURN
> PROCEDURE vB_F ! Dialog Druck
OPENW 0
@vB_15(180,112,460,250,"Druckerparameter")
@vB_16(210,220,356)
TEXT 200,168,"PICA ELITE Linker Rand "+CHR$(4)+" "+CHR$(3)
TEXT 208,188,"CQ Draft Papierlänge "+CHR$(4)+" "+CHR$(3)
TEXT 248,208,"Epson bedruckt "+CHR$(4)+" "+CHR$(3)
TEXT 204,208,"IBM"
BOX 190,152,292,214 ! Pica...
LINE 190,172,292,172
LINE 190,192,292,192
BOX 396,154,412,171 ! up dwn
BOX 436,174,451,191
BOX 396,174,412,191
BOX 436,154,451,171
BOX 396,194,412,211
BOX 436,194,451,211
'
GRAPHMODE 3
DEFMOUSE 3
DEFFILL 1,1
IF v6_1%(1)=1
PBOX 190,152,241,172
IF v6_1%(3)=1
v5_1$(1)=CHR$(18)
ELSE
v5_1$(1)=v1_3$+"P"
ENDIF
ELSE
PBOX 240,152,292,172
IF v6_1%(3)=1
v5_1$(1)=v1_3$+":"
ELSE
v5_1$(1)=v1_3$+"M"
ENDIF
ENDIF
IF v6_1%(2)=1
PBOX 190,172,241,192
IF v6_1%(3)=1
v5_1$(2)=v1_3$+"G"
ELSE
v5_1$(2)=v1_3$+"x1"
ENDIF
ELSE
PBOX 240,172,292,192
IF v6_1%(3)=1
v5_1$(2)=v1_3$+"H"
ELSE
v5_1$(2)=v1_3$+"x0"
ENDIF
ENDIF
IF v6_1%(3)=1
PBOX 190,192,241,214
ELSE
PBOX 240,192,292,214
ENDIF
IF v6_1%(4)<10
TEXT 416,168,"0"+STR$(v6_1%(4))
ELSE
TEXT 416,168,STR$(v6_1%(4))
ENDIF
TEXT 416,188,STR$(v6_1%(5))
TEXT 416,208,STR$(v6_1%(6))
'
v9_3|=0
REPEAT
MOUSE v2_12%,v2_13%,v2_14%
v1_4$=INKEY$
IF v1_4$=CHR$(13)
v9_3|=2
ENDIF
IF v2_14%=1
IF v2_12%>190 AND v2_12%<240 ! Pica & co
GRAPHMODE 3
IF v2_13%>152 AND v2_13%<172
IF v6_1%(1)=0
PBOX 190,152,292,172
v6_1%(1)=1
ENDIF
ENDIF
IF v2_13%>172 AND v2_13%<192
IF v6_1%(2)=0
PBOX 190,172,292,192
v6_1%(2)=1
ENDIF
ENDIF
IF v2_13%>192 AND v2_13%<212
IF v6_1%(3)=0
PBOX 190,192,292,214
v6_1%(3)=1
ENDIF
ENDIF
ENDIF
IF v2_12%>240 AND v2_12%<292 ! Elite & co
GRAPHMODE 3
IF v2_13%>152 AND v2_13%<172
IF v6_1%(1)=1
PBOX 190,152,292,172
v6_1%(1)=0
ENDIF
ENDIF
IF v2_13%>172 AND v2_13%<192
IF v6_1%(2)=1
PBOX 190,172,292,192
v6_1%(2)=0
ENDIF
ENDIF
IF v2_13%>192 AND v2_13%<212
IF v6_1%(3)=1
PBOX 190,192,292,214
v6_1%(3)=0
ENDIF
ENDIF
ENDIF
IF v2_13%>220 AND v2_13%<240
IF v2_12%>356 AND v2_12%<430 ! OK
v9_3|=1
ENDIF
IF v2_12%>210 AND v2_12%<282
v9_3|=3
ENDIF
ENDIF
'
IF v2_12%>396 AND v2_12%<412 ! down
GRAPHMODE 1
IF v2_13%>154 AND v2_13%<171 AND v6_1%(4)>0
DEC v6_1%(4)
IF v6_1%(4)<10
TEXT 416,168,"0"+STR$(v6_1%(4))
ELSE
TEXT 416,168,STR$(v6_1%(4))
ENDIF
ENDIF
IF v2_13%>172 AND v2_13%<191 AND v6_1%(5)>10 AND v6_1%(5)>v6_1%(6)
DEC v6_1%(5)
TEXT 416,188,STR$(v6_1%(5))
ENDIF
IF v2_13%>192 AND v2_13%<211 AND v6_1%(6)>10
DEC v6_1%(6)
TEXT 416,208,STR$(v6_1%(6))
ENDIF
ENDIF
IF v2_12%>436 AND v2_12%<451 ! up
GRAPHMODE 1
IF v2_13%>154 AND v2_13%<171 AND v6_1%(4)<40
INC v6_1%(4)
IF v6_1%(4)<10
TEXT 416,168,"0"+STR$(v6_1%(4))
ELSE
TEXT 416,168,STR$(v6_1%(4))
ENDIF
ENDIF
IF v2_13%>172 AND v2_13%<191 AND v6_1%(5)<99
INC v6_1%(5)
TEXT 416,188,STR$(v6_1%(5))
ENDIF
IF v2_13%>192 AND v2_13%<211 AND v6_1%(6)<99 AND v6_1%(5)>v6_1%(6)
INC v6_1%(6)
TEXT 416,208,STR$(v6_1%(6))
ENDIF
ENDIF
PAUSE 5
ENDIF ! mousek
UNTIL v9_3|>0
GRAPHMODE 3
BOUNDARY 0
DEFFILL 1,1
IF v9_3|<3 ! OK oder ENTER
PBOX 358,222,426,238
IF v6_1%(1)=1
IF v6_1%(3)=1
v5_1$(1)=CHR$(18)
ELSE
v5_1$(1)=v1_3$+"P"
ENDIF
ELSE
IF v6_1%(3)=1
v5_1$(1)=v1_3$+":"
ELSE
v5_1$(1)=v1_3$+"M"
ENDIF
ENDIF
IF v6_1%(2)=1
IF v6_1%(3)=1
v5_1$(2)=v1_3$+"G"
ELSE
v5_1$(2)=v1_3$+"x1"
ENDIF
ELSE
IF v6_1%(3)=1
v5_1$(2)=v1_3$+"H"
ELSE
v5_1$(2)=v1_3$+"x0"
ENDIF
ENDIF
ELSE
PBOX 210,220,282,240
ENDIF
BOUNDARY 1
GRAPHMODE 1
DEFFILL 1,0
@vB_17
DEFMOUSE 0
CLOSEW 0
OPENW 1
RETURN
> PROCEDURE vB_C(v2_15%) ! from disk
' d_r 1=kill 2=anhängen
v9_4|=1
IF v2_15%=1
v9_4|=3
ENDIF
IF v2_0%>1 AND v2_15%=1
ALERT 1,"|Achtung: Noch Text im Speicher",1,"Löschen|Abbruch",v9_4|
IF v9_4|=1
@vB_B(1) ! Löschen 1=alles ohne Rückfrage
ENDIF
ENDIF
v1_27$=RIGHT$(v1_6$,LEN(v1_6$)-RINSTR(v1_6$,"\"))
IF v2_0%=1 OR v9_4|=1
v1_5$=v1_6$
v3_2!=FALSE
v2_16%=v2_0%
v2_17%=v2_0%
ENDIF
IF v2_0%<v2_18% AND v9_4|<>2
@vB_18
DO
FILESELECT v1_7$,v1_27$,v1_6$
EXIT IF v1_6$="" OR v1_6$="\" OR RIGHT$(v1_6$,1)="\"
v2_19%=FALSE
IF EXIST(v1_6$)
OPEN "U",#11,v1_6$ ! READ & write
WHILE NOT EOF(#11)
LINE INPUT #11,v5_2$(v2_0%)
INFOW #1," Datei einlesen: Zeile "+STR$(v2_0%)
INC v2_0%
IF v2_0%=v2_18%+1
v2_19%=TRUE
DEC v2_0%
ENDIF
v3_2!=TRUE
EXIT IF v2_19%=TRUE
WEND
CLOSE #11
v2_1A%=0
FOR v2_1B%=1 TO v2_0%
IF LEN(v5_2$(v2_1B%))>v2_1C%
v5_2$(v2_1B%)=LEFT$(v5_2$(v2_1B%),v2_1C%) ! zu lange Zeilen eingelesen?
INC v2_1A%
ENDIF
NEXT v2_1B%
OPENW 1
CLS
@vB_19
@vB_18
MENU 20,3 ! RS
MENU 23,3 ! Druck
IF v2_1A%>0
ALERT 2,"|"+STR$(v2_1A%)+" Zeilen wurden auf die | |Länge "+STR$(v2_1C%)+" gekürzt.",1,v1_8$,v2_1B%
ENDIF
IF v2_19%=TRUE
ALERT 2,"|Einlesen abgebrochen:| |Textbereich voll.",1,v1_8$,v2_1D%
ENDIF
ENDIF
EXIT IF v3_2!=TRUE
LOOP
IF LEN(v1_6$)>3 AND RIGHT$(v1_6$,1)<>"\"
IF v2_15%=1
TITLEW #1," "+v1_6$+" "
v2_1E%=RINSTR(v1_6$,"\")
v1_7$=LEFT$(v1_6$,v2_1E%)+"*.*"
ENDIF
ELSE
v1_6$=v1_5$
ENDIF
IF v2_0%>1
@vB_1A(1)
ENDIF
@vB_18
ENDIF
RETURN
> PROCEDURE vB_7(v2_1F%,v2_20%)
IF v2_0%=1
ALERT 2,"|Kein Text im Speicher.",1,v1_8$,v2_1D%
ELSE
@vB_18
v1_27$=RIGHT$(v1_6$,LEN(v1_6$)-RINSTR(v1_6$,"\"))
v3_2!=FALSE
v1_5$=v1_6$
v2_21%=0
DO
FILESELECT v1_7$,v1_27$,v1_6$
EXIT IF v1_6$="" OR v1_6$="\" OR RIGHT$(v1_6$,1)="\"
v1_9$=LEFT$(v1_6$,1)
IF v1_9$="A" OR v1_9$="B"
v2_A8%=DFREE(ASC(v1_9$)-64)
@vB_1D
ADD v2_53%,2*v2_0%
IF v2_A8%<v2_53%
ALERT 2,"|Diskettenplatz knapp: noch|"+STR$(v2_A8%)+" Bytes frei,|"+STR$(v2_53%)+" Bytes benötigt.",1,v1_8$,v2_A7%
EXIT IF v2_A7%=1
ENDIF
ENDIF
IF INSTR(v1_6$,".")<2
v1_6$=v1_6$+".SRP" ! Extender anhängen
ENDIF
IF EXIST(v1_6$)
ALERT 3,"|Datei existiert schon!",2,"Löschen|*.BAK|Abbruch",v2_21%
IF v2_21%=1
KILL v1_6$
ENDIF
IF v2_21%=2
v1_9$=LEFT$(v1_6$,RINSTR(v1_6$,".")-1)+".BAK"
IF EXIST(v1_9$)
KILL v1_9$
ENDIF
RENAME v1_6$ AS v1_9$
ENDIF
EXIT IF v2_21%=3
ENDIF
OPEN "O",#1,v1_6$ !Öffnen für Schreiben, evtl. erstellen
FOR v2_22%=v2_1F% TO v2_20% ! oder 1
PRINT #1,v5_2$(v2_22%)
v3_2!=TRUE
NEXT v2_22%
CLOSE #1
EXIT IF v3_2!=TRUE
LOOP
IF v2_21%<3
IF LEN(v1_6$)>3 AND RIGHT$(v1_6$,1)<>"\"
TITLEW #1," "+v1_6$+" "
v2_1E%=RINSTR(v1_6$,"\")
v1_7$=LEFT$(v1_6$,v2_1E%)+"*.*"
ELSE
v1_6$=v1_5$
ENDIF
ENDIF
@vB_18
ENDIF
RETURN
> PROCEDURE vB_8(v2_23%,v2_24%)
' eol$ als Zeilenende mitverwenden (nur bei <> CR/LF eingreifen)
IF v2_0%>1
v9_5|=2
IF OUT?(1)=FALSE
ALERT 2,"|RS232-Empfänger|nicht bereit.",1,v1_8$,v2_1D%
ELSE
DEFMOUSE 2
FOR v2_25%=v2_23% TO v2_24%
INFOW #1,"Daten ausgeben: Zeile "+STR$(v2_25%)
FOR v2_26%=1 TO LEN(v5_2$(v2_25%))
IF OUT?(1)=FALSE
PAUSE 1
ENDIF
IF OUT?(1)=FALSE
ALERT 2,"RS232-Übertragung|wurde unterbrochen.",v9_5|,v1_A$,v9_5|
ELSE
OUT 1,ASC(MID$(v5_2$(v2_25%),v2_26%,1))
ENDIF
EXIT IF v9_5|=1
NEXT v2_26%
EXIT IF v9_5|=1
OUT 1,ASC(v1_2$)
IF LEN(v1_2$)>1
OUT 1,ASC(RIGHT$(v1_2$,1))
ENDIF
NEXT v2_25%
IF v9_5|<>1
OUT 1,v2_E% ! chr$(eof%)=code für fileende
ENDIF
OPENW 1
DEFMOUSE 0
@vB_18
ENDIF
ELSE
ALERT 2,"|Kein Text vorhanden.",1,v1_8$,v2_1D%
ENDIF
RETURN
> PROCEDURE vB_D(v2_27%)
' 1=alles neu, 2=anhängen
IF v2_0%>1 AND v2_27%=1
ALERT 2,"| -=≡=- ACHTUNG -=≡=-| |Noch Text im Speicher ! ",1,"Löschen|Abbruch",v2_28%
IF v2_28%=2
GOTO vA_0
ENDIF
IF v2_28%=1
@vB_B(1)
ENDIF
ENDIF
v2_29%=1 ! 1.zeile
IF v2_27%=2
v2_29%=v2_0%
ENDIF
v2_2B%=LEN(v1_2$)
v2_2A%=1
IF INP?(1)=FALSE
OPENW 0
@vB_1B(210,150,430,190)
TEXT 236,175,"RS-232 Timeout: _ sec"
WHILE INP?(1)=FALSE AND v2_2A%<400 ! ca. 10 sec
PAUSE 1
TEXT 364,175,STR$(INT((400-v2_2A%)/40))
INC v2_2A%
WEND
@vB_17
CLOSEW 0
OPENW 1
ENDIF
IF INP?(1)=FALSE
ALERT 2,"| Keine Daten an der| |RS232-Schnittstelle. ",1,v1_8$,v2_1D%
ELSE
DEFMOUSE 2
v2_19%=FALSE
REPEAT
WHILE INP?(1)=TRUE
v1_B$=CHR$(INP(1))
IF v1_B$>CHR$(0)
v5_2$(v2_29%)=v5_2$(v2_29%)+v1_B$
ENDIF
IF RIGHT$(v5_2$(v2_29%),v2_2B%)=v1_2$
v5_2$(v2_29%)=LEFT$(v5_2$(v2_29%),LEN(v5_2$(v2_29%))-2) ! CRLF beseitigen
INC v2_29% ! nächste Zeile
INFOW #1," Daten einlesen: Zeile "+STR$(v2_29%)
IF v2_29%>v2_18%
v2_19%=TRUE ! maxzeilen voll?
DEC v2_29%
ENDIF
EXIT IF v2_19%=TRUE
ENDIF
WEND
v2_2C%=0
IF vD_0|(1,4)=0
WHILE INP?(1)=FALSE AND v2_2C%<4
IF vD_0|(1,1)=1
PAUSE 1 ! Minipuse bei 300 Baud
ENDIF
INC v2_2C% ! Minipause <4800 Baud
WEND
ENDIF
UNTIL INP?(1)=FALSE OR v5_2$(v2_29%)=v1_0$ ! OR v_242%=lines%
IF RIGHT$(v5_2$(v2_29%),1)=v1_0$
v2_0%=v2_29%-1 ! eof ist keine Zeile wert
ELSE
IF v2_19%=TRUE
ALERT 2,"|Übertragung abgebrochen:| |Textbereich ist voll.",1,v1_8$,v2_19%
v2_0%=v2_18%
ELSE
ALERT 2,"|Übertragung wurde unterbrochen",1,v1_8$,v2_1D%
v2_0%=v2_29%
ENDIF
ENDIF
v5_2$(1)=RIGHT$(v5_2$(1),LEN(v5_2$(1))-1)
IF LEN(v5_2$(v2_0%))<3 AND v2_0%>1 ! letzte Zeile zufällig leer?
v5_2$(v2_0%)=""
DEC v2_0%
ENDIF
IF v2_0%<v2_18%
IF LEN(v5_2$(v2_0%+1))>0 ! etwas hängengeblieben?
v5_2$(v2_0%+1)=""
ENDIF
ENDIF
OPENW 1
DEFMOUSE 0
v2_2D%=1
v2_17%=1
IF v2_0%>1
@vB_1A(1)
ENDIF
@vB_19
ENDIF
vA_0:
RETURN
> PROCEDURE vB_1C(v1_C$,v2_2E%)
' Rückgabe in dialog$
OPENW 0
LOCAL v1_D$,v1_E$,v1_F$,v2_2F%,v2_30%,v2_31%
LOCAL v2_32%,v2_33%,v2_34%,v2_35%,v2_36%,v3_3!,v3_4!
'
v2_2F%=XBIOS(4) ! Nicht LowRes
v2_30%=90*v2_2F%
v2_31%=98*v2_2F%
'
v2_36%=v2_2E%*4 ! geanugenommen halbe breite
v2_37%=320-v2_36%
IF (LEN(v1_C$)*4)<(320-v2_36%)
v2_36%=LEN(v1_C$)*4 ! mindestgröβe bei überlangem Titel
ENDIF
IF v2_36%<v2_2E%*4
v2_36%=v2_2E%*4
ENDIF
IF v2_36%<100 !absolute Mindestbreite
v2_36%=100
ENDIF
ADD v2_36%,8
GRAPHMODE 1
DEFTEXT 1,0,0,13
DEFLINE 1
DEFFILL 0,2,8
GET 316-v2_36%,75*v2_2F%+18,320+v2_36%,117*v2_2F%+20,v1_F$
PBOX 316-v2_36%,75*v2_2F%,320+v2_36%,117*v2_2F%
BOX 316-v2_36%,75*v2_2F%+1,320+v2_36%,117*v2_2F%-1
BOX 318-v2_36%,76*v2_2F%+1,318+v2_36%,116*v2_2F%-1
BOX 319-v2_36%,76*v2_2F%+2,317+v2_36%,116*v2_2F%-2
TEXT 320-LEN(v1_C$)*4,170,v1_C$
TEXT v2_37%,96*v2_2F%,STRING$(v2_2E%,"_")
TEXT 240,110*v2_2F%,"OK"
FOR v2_35%=1 TO 3
BOX 219-v2_35%,103*v2_2F%-v2_35%,277+v2_35%,112*v2_2F%+v2_35%
NEXT v2_35%
BOX 358,102*v2_2F%,418,112*v2_2F%
BOX 357,102*v2_2F%-1,419,112*v2_2F%+1
TEXT 360,110*v2_2F%,"Abbruch"
LINE v2_37%,v2_30%,v2_37%,v2_31%
REPEAT
v1_D$=INKEY$
IF v1_D$<>CHR$(13)
IF v1_D$=CHR$(8) OR v1_D$=CHR$(127) ! Delete oder Backspace
IF LEN(v1_E$)>0
v1_E$=LEFT$(v1_E$,LEN(v1_E$)-1)
GRAPHMODE 3
LINE v2_37%,v2_30%,v2_37%,v2_31%
GRAPHMODE 1
SUB v2_37%,8
TEXT v2_37%,96*v2_2F%,"_"
LINE v2_37%,v2_30%,v2_37%,v2_31%
ENDIF
ENDIF
IF v1_D$="ä" OR v1_D$="ö" OR v1_D$="ü" OR v1_D$="ß" OR v1_D$="Ä" OR v1_D$="Ö" OR v1_D$="Ü"
v3_4!=TRUE
ENDIF
IF (v1_D$=>" " AND v1_D$<="~") OR v3_4!=TRUE
IF LEN(v1_E$)<v2_2E%
v1_E$=v1_E$+v1_D$
v3_4!=FALSE
GRAPHMODE 3
LINE v2_37%,v2_30%,v2_37%,v2_31%
GRAPHMODE 1
TEXT v2_37%,96*v2_2F%,v1_D$
ADD v2_37%,8
LINE v2_37%,v2_30%,v2_37%,v2_31%
v1_D$=""
ENDIF
ENDIF
ENDIF
'
MOUSE v2_33%,v2_34%,v2_35%
IF v2_35%=1 AND v2_34%>103*v2_2F% AND v2_34%<112*v2_2F%
IF v2_33%>220 AND v2_33%<276 !OK-Box
v3_3!=TRUE
ENDIF
IF v2_33%>363 AND v2_33%<421 ! Abbruch-Box
v3_3!=TRUE
CLR v1_E$
ENDIF
ENDIF
UNTIL v3_3!=TRUE OR v1_D$=CHR$(13)
'
v1_10$=v1_E$
GRAPHMODE 3
LINE v2_37%,v2_30%,v2_37%,v2_31%
GRAPHMODE 1
PUT 316-v2_36%,75*v2_2F%+18,v1_F$
CLR v1_F$,v1_E$
CLOSEW 0
OPENW 1
RETURN
> PROCEDURE vB_9(v2_38%)
IF v2_0%>1
@vB_18
IF v2_38%=0 ! suchen
@vB_1C("Suchstring eingeben:",30)
IF LEN(v1_10$)>0
MENU 31,3 ! weitersuchen möglich
v2_A4%=TRUE
v1_11$=v1_10$
v2_39%=FALSE ! noch nix gefunden
v2_3A%=1 ! zeile, ab der gesucht wird
ENDIF
ELSE ! weitersuchen
IF v2_3B%<v2_0%
v2_3A%=v2_3B%+1 ! ab nächster Zeile
v2_39%=FALSE !
ENDIF
ENDIF
FOR v2_3B%=v2_3A% TO v2_0% ! hier wird gesucht
IF INSTR(v5_2$(v2_3B%),v1_11$)>1
v2_2D%=INSTR(v5_2$(v2_3B%),v1_11$)
v2_17%=v2_3B%
v2_39%=TRUE
EXIT IF v2_39%=TRUE ! gefunden
ENDIF
NEXT v2_3B%
IF v2_39%=TRUE
v2_16%=v2_17%-v2_3C%/2
IF v2_16%<1
v2_16%=1
ENDIF
IF v2_16%>v2_0%-v2_3C%
v2_16%=v2_0%-v2_3C%
ENDIF
IF v2_2D%>=v2_3D%-v2_3E%
v2_3E%=v2_2D%-v2_3D%*3/2
IF v2_3E%>=v2_1C%-v2_3D%
v2_3E%=v2_1C%-v2_3D%
ENDIF
ENDIF
@vB_19
@vB_18
ENDIF
@vB_18
ENDIF
RETURN
> PROCEDURE vB_15(v2_3F%,v2_40%,v2_41%,v2_42%,v1_12$)
' bo1-4=äußerer Rahmen, bot$=Titelzeile
' openw 0
BOUNDARY 1
GRAPHMODE 1
DEFLINE 1,1
DEFFILL 1,0
v2_43%=v2_3F%
v2_44%=v2_40%+19
GET v2_3F%,v2_44%,v2_41%,v2_42%+20,v1_13$
PBOX v2_3F%,v2_40%,v2_41%,v2_42%
BOX v2_3F%+2,v2_40%+2,v2_41%-2,v2_42%-2
BOX v2_3F%+3,v2_40%+3,v2_41%-3,v2_42%-3
v2_45%=LEN(v1_12$)*4
BOX 310-v2_45%,v2_40%+7,329+v2_45%,v2_40%+32
' BOX 309-bo5%,bo2%+8,329+bo5%,bo2%+31
TEXT 320-v2_45%,v2_40%+25,v1_12$
GRAPHMODE 3
BOUNDARY 0
DEFFILL 1,1
PBOX 313-v2_45%,v2_40%+10,326+v2_45%,v2_40%+29
GRAPHMODE 1
BOUNDARY 1
DEFFILL 1,0
RETURN
> PROCEDURE vB_1B(v2_46%,v2_47%,v2_48%,v2_49%)
GRAPHMODE 1
DEFLINE 1,1
DEFFILL 1,0
v2_43%=v2_46%
v2_44%=v2_47%+19
' openw 0
GET v2_46%,v2_44%,v2_48%,v2_49%+20,v1_13$
PBOX v2_46%,v2_47%,v2_48%,v2_49%
BOX v2_46%+2,v2_47%+2,v2_48%-2,v2_49%-2
BOX v2_46%+3,v2_47%+3,v2_48%-3,v2_49%-3
RETURN
> PROCEDURE vB_16(v2_4A%,v2_4B%,v2_4C%)
' bu1=x1, bu2=y bu3=x2
TEXT v2_4A%+8,v2_4B%+16,"Abbruch"
TEXT v2_4C%+28,v2_4B%+16,"OK"
BOX v2_4A%,v2_4B%,v2_4A%+72,v2_4B%+20 ! Abbruch
BOX v2_4C%,v2_4B%,v2_4C%+72,v2_4B%+20 ! OK
BOX v2_4C%+1,v2_4B%+1,v2_4C%+71,v2_4B%+19
BOX v2_4C%-1,v2_4B%-1,v2_4C%+73,v2_4B%+21
RETURN
> PROCEDURE vB_2(v2_4D%,v2_4E%) ! aufbereiten
' drucken% 1=Elite/Pica 2=Draft/CQ 3=Epson/IBM 4=Rand_li 5=Pap.länge 6=Zeilen
IF v2_0%>0
v2_4F%=2
WHILE GEMDOS(17)=FALSE AND v2_4F%=2
ALERT 2,"|Drucker nicht bereit.",v2_4F%,v1_A$,v2_4F%
WEND
IF GEMDOS(17)=TRUE
DEFMOUSE 2
INFOW #1," Daten drucken ESC = Abbruch"
@vB_1D(v2_4D%,v2_4E%)
LPRINT v1_3$;"C";CHR$(v6_1%(5));
IF v6_1%(1)=1 ! Pica
v2_50%=79
v2_51%=v6_1%(4) ! linker Rand
ELSE
v2_50%=95 ! zeichen/zeile
v2_51%=v6_1%(4)*1.2
ENDIF
v2_52%=1 ! Name und Länge = Zeile 1
v2_4F%=v6_1%(5)-v6_1%(6) ! drd=unbedruckte Zeilen
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"
IF v2_4D%>1 OR v2_4E%<v2_0%
v1_14$=v1_14$+" (Block)"
ENDIF
@vB_1E(v1_14$)
FOR v2_54%=v2_4D% TO v2_4E%
v1_14$=v5_2$(v2_54%)
v2_55%=LEN(v1_14$)
v1_15$=INKEY$
EXIT IF v1_15$=CHR$(27)
'
WHILE v2_55%+v2_51%>v2_50% ! Zeile zu lang?
v1_16$=LEFT$(v1_14$,v2_50%-v2_51%) ! Hilfsstring
v2_56%=LEN(v1_16$)
@vB_1E(SPACE$(v2_51%)+v1_16$) ! Teil drucken
INC v2_52% ! Zeilenzähler
IF (v2_52% MOD v6_1%(6)=0) AND v2_4F%>0
LPRINT CHR$(12); ! Zeilenumbruch=Seitenende nächste Seite
ENDIF
v1_14$=RIGHT$(v1_14$,v2_55%-v2_56%) ! noch was zu kürzen?
v2_55%=LEN(v1_14$)
WEND
@vB_1E(SPACE$(v2_51%)+v1_14$)
INC v2_52%
' IF (dr_c% MOD drucken%(6)=0) AND dr_d%>0 ! zusätzliches LineFeed
' LPRINT STRING$(dr_d%,CHR$(10)); ! x-mal y ausgeben
' ENDIF
' LPRINT CHR$(12); ! nächste Seite
NEXT v2_54%
@vB_18
@vB_18 ! Infozeile wiederherstellen
ENDIF
LPRINT CHR$(12); ! Papier auswerfen
DEFMOUSE 0
ELSE
ALERT 2,"|Kein Text vorhanden.",1,v1_8$,v2_1D%
ENDIF
RETURN
> PROCEDURE vB_1D(v2_A9%,v2_AA%) ! info Textlänge
v2_53%=0
FOR v2_86%=v2_A9% TO v2_AA%
ADD v2_53%,LEN(v5_2$(v2_86%))
NEXT v2_86%
RETURN
> PROCEDURE vB_6(v2_57%) ! fast alles
IF v2_57%=1
v2_1%=v2_17% ! Startmarke
MENU 48,3 ! zum anfang möglich
MENU 41,3 ! Ende freigeben
IF v2_1%>=v2_2%
v2_2%=0
ENDIF
ENDIF
'
IF v2_57%=2 AND v2_17%>=v2_1% ! endmarke
IF v2_2%>v2_17%
v2_2%=v2_17%
@vB_19
ENDIF
v2_2%=v2_17%
ENDIF
v2_58%=v2_2%-v2_1%+1 ! c= anzahl Zeilen im Block
'
IF v2_57%=3
v2_1%=0 ! marken löschen
v2_2%=0
v2_59%=FALSE
@vB_19 ! block visible?
GOTO vA_1
ENDIF
'
IF v2_57%=4 ! Block löschen
IF v2_0%>1
FOR v2_5A%=1 TO v2_58%
DELETE v5_2$(v2_1%)
NEXT v2_5A%
v2_1%=0
v2_2%=0
v2_59%=FALSE
SUB v2_0%,v2_58% ! neues ende
@vB_19 ! block invisible
GOTO vA_1
ENDIF
ENDIF
'
IF v2_57%=5 AND v2_17%>v2_2% ! verschieben nach unten
@vB_18
FOR v2_5A%=1 TO v2_58%
INSERT v5_2$(v2_17%)=v5_2$(v2_1%)
DELETE v5_2$(v2_1%)
NEXT v2_5A%
v2_1%=v2_17%-v2_58%
v2_2%=v2_1%+v2_58%-1
@vB_19
' schluss%=ADD(schluss%,block_c%)
GOTO vA_1
ENDIF
'
IF v2_57%=5 AND v2_17%<v2_1% ! verschieben nach oben
@vB_18
v2_5B%=v2_1%
FOR v2_5A%=1 TO v2_58%
INSERT v5_2$(v2_17%)=v5_2$(v2_1%+v2_5A%)
DELETE v5_2$(v2_5B%+v2_5A%)
NEXT v2_5A%
v2_1%=v2_17%
v2_2%=v2_1%+v2_58%-1
'
@vB_19
' schluss%=ADD(schluss%,block_c%)
GOTO vA_1
ENDIF
'
IF v2_57%=6 AND v2_0%+v2_58%>v2_18%
ALERT 2,"|Blockoperation: Block zu groß | |Text würde zu lang|",1,v1_8$,v2_5B%
GOTO vA_1
ENDIF
'
IF v2_57%=6 AND v2_17%<v2_1% ! copy nach oben
@vB_18
v2_5B%=v2_1%-1
v2_5C%=v2_17%
FOR v2_5A%=1 TO v2_58%
INSERT v5_2$(v2_5C%)=v5_2$(v2_5B%+v2_5A%+1)
INC v2_5C%
INC v2_5B%
NEXT v2_5A%
v2_1%=ADD(v2_1%,v2_58%)
v2_2%=ADD(v2_2%,v2_58%)
v2_0%=ADD(v2_0%,v2_58%)
@vB_19
GOTO vA_1
ENDIF
'
IF v2_57%=6 AND v2_17%>v2_2% ! copy nach unten
@vB_18
FOR v2_5A%=1 TO v2_58%
INSERT v5_2$(v2_17%)=v5_2$(v2_2%-v2_5A%+1)
NEXT v2_5A%
v2_0%=ADD(v2_0%,v2_58%)
@vB_19
GOTO vA_1
ENDIF
'
IF v2_57%=7 ! isolieren
@vB_18
FOR v2_5A%=v2_2%+1 TO v2_0% ! hinten löschen
DELETE v5_2$(v2_2%+1)
NEXT v2_5A%
v2_5C%=v2_1%-1
IF v2_5C%>1
FOR v2_5A%=1 TO v2_5C% ! vorne löschen
DELETE v5_2$(1)
NEXT v2_5A%
v2_1%=SUB(v2_1%,v2_5C%) ! zeiger neu setzen
v2_2%=SUB(v2_2%,v2_5C%)
ENDIF
v2_0%=v2_2%
v2_3E%=0
v2_2D%=1
v2_17%=1
v2_16%=1
@vB_19
GOTO vA_1
ENDIF
'
IF v2_57%=8 ! zum anfang
IF v2_1%>0
@vB_18
v2_17%=v2_1%
v2_2D%=1
v2_3E%=0
v2_16%=v2_1%
IF v2_16%>v2_0%-v2_3C%
v2_16%=v2_0%-v2_3C% ! obacht textende
ENDIF
@vB_19
GOTO vA_1
ENDIF
ENDIF
'
IF v2_57%=9 ! zum ende
IF v2_2%>0
@vB_18
v2_17%=v2_2%
v2_16%=v2_17%-v2_3C%
IF v2_16%<1
v2_16%=1 ! nicht zu hoch
ENDIF
IF v2_16%>v2_0%-v2_3C%
v2_16%=v2_0%-v2_3C% ! nicht zu tief
ENDIF
@vB_19
ENDIF
ENDIF
'
vA_1:
IF v2_1%>0 AND v2_2%>0 ! Block selektiert
MENU 16,3 ! disk
MENU 21,3 ! RS
MENU 24,3 ! druck
MENU 43,3 ! löschen
MENU 44,3 ! isol
MENU 45,3 ! copy
MENU 46,3 ! move
MENU 47,3 ! mark
MENU 48,3 ! >anf
MENU 49,3 ! >end
v2_59%=TRUE
ENDIF
IF v2_59%=FALSE
MENU 16,2 ! disk
MENU 21,2 ! RS
MENU 24,2 ! druck
' MENU 41,2 ! end
MENU 43,2 ! del
MENU 44,2 ! isol
MENU 45,2 ! copy
MENU 46,2 ! move
MENU 47,2 ! mark off
' MENU 48,2 ! >anf
MENU 49,2 ! >end
ENDIF
@vB_1F
RETURN
> PROCEDURE vB_B(v2_5D%) ! kill Text
IF v2_5D%=0
ALERT 3,"|Wirklich alles löschen ?",1,v1_17$,v2_5E%
ENDIF
IF v2_5E%=2 OR v2_5D%>0
FOR v2_5E%=0 TO v2_18%
v5_2$(v2_5E%)=""
NEXT v2_5E%
v2_0%=1
v2_3E%=0
v2_16%=1
v2_2D%=1
v2_17%=1
@vB_6(3) ! marken löschen
v2_59%=FALSE
MENU 13,2 ! schreiben
MENU 15,2 ! anhängen
MENU 16,2 ! -> Disk
MENU 18,2 ! D send
MENU 20,2 ! -> RS
MENU 21,2 ! B send
MENU 22,2 ! senden
MENU 24,2 ! -> Druck
IF v2_5D%=0
@vB_19
ENDIF
CLS
@vB_18
ENDIF
RETURN
> PROCEDURE vB_1E(v1_18$) ! an Drucker
v1_19$=v1_3$+"R"+CHR$(3)
v1_1A$=v1_3$+"R"+CHR$(0)
v2_5F%=LEN(v1_18$)
IF v2_60%=1
IF v6_1%(3)=0
LPRINT v1_1A$;
ENDIF
LPRINT v5_1$(1);v5_1$(2);
FOR v2_61%=1 TO v2_5F%
v1_1B$=MID$(v1_18$,v2_61%,1) ! einzelzeichen
IF v1_1B$<"!"
LPRINT " "; ! hier werden nur spaces ausgegeben
ENDIF
IF v1_1B$>" " AND v1_1B$<"@" ! Ziffern & co
LPRINT v1_1B$;
ENDIF
IF v1_1B$>"@" AND v1_1B$<"[" ! großbuchstaben
LPRINT v1_1B$;
ENDIF
IF v1_1B$>"_" AND v1_1B$<"{" ! kleinbuchstaben
LPRINT v1_1B$;
ENDIF
IF v1_1B$="@" OR (v1_1B$>"Z" AND v1_1B$<"`") OR (v1_1B$>"z" AND v1_1B$<CHR$(127))
LPRINT v1_1B$; ! Epson-Font!
ENDIF
IF ASC(v1_1B$)>128 THEN
v2_62%=ASC(v1_1B$)-128
IF LEN(v5_3$(v2_62%))>2
FOR v2_63%=1 TO LEN(v5_3$(v2_62%)) STEP 2
v1_1C$="&H"+MID$(v5_3$(v2_62%),v2_63%,2)
LPRINT CHR$(VAL(v1_1C$));
NEXT v2_63%
ELSE
LPRINT CHR$(VAL("&H"+v5_3$(v2_62%)));
ENDIF
ENDIF
NEXT v2_61%
IF v6_1%(3)=0
LPRINT v1_19$;
ENDIF
ELSE ! DRUCKERFONT=IBM
LPRINT v1_18$;
ENDIF
LPRINT
RETURN
> PROCEDURE vB_1A(v2_64%)
IF v2_64%=0
MENU 13,2 ! datei schreiben
MENU 15,2 ! datei anhängen
MENU 16,2 ! block schreiben
MENU 18,2 ! datei senden
MENU 20,2 ! datei anhängen
MENU 21,2 ! block senden
' MENU 23,2 ! text drucken
MENU 24,2 ! block drucken
ENDIF
IF v2_64%=1
MENU 13,3 ! wenn text vorhanden ist, auch ein/ausgabe
MENU 15,3
MENU 18,3
MENU 20,3
MENU 23,3
' MENU 24,3
ENDIF
RETURN
> PROCEDURE vB_17 ! NOT box()
PUT v2_43%,v2_44%,v1_13$
CLR v1_13$
' closew 0
RETURN
> PROCEDURE vB_A ! abkürzungen bilden
IF v2_0%>1 ! überhaupt was da?
@vB_1D(1,v2_0%) ! für Statistik merken
v2_65%=v2_53% ! Packrate bestimen
DEFMOUSE 2 ! sieht etwas besser aus
FOR v2_66%=1 TO v2_0% ! comp%= nummer bearb Zeile
v2_AB%=0 ! nicht alles kann komprimiert werden
INFOW #1," Kompression in "+STR$(v2_66%)
IF LEN(v5_2$(v2_66%))<2 ! Zeile enthält nichts WHILE?
DELETE v5_2$(v2_66%) ! Leere Zeilen beseitigen
ENDIF ! nächste Zeile sollte was enthalten... WEND?
IF LEN(v5_2$(v2_66%))>2 ! wg. Bombendrohungen
v5_2$(v2_66%)=v5_2$(v2_66%)+" " ! für einfacheres kürzen
FOR v2_67%=1 TO v2_68% ! coml%= nummer versuchtes Token
EXIT IF v2_AB%=1 ! Ausstieg aus dieser Zeile falls DATA
WHILE INSTR(v5_2$(v2_66%),v5_4$(v2_67%))>0 ! gefunden?
v2_69%=INSTR(v5_2$(v2_66%),v5_4$(v2_67%)) ! comx%=position gefunden
v1_1D$=RIGHT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-v2_69%-LEN(v5_4$(v2_67%))+1)
v1_24$=MID$(v5_2$(v2_66%),v2_69%-2,1) ! wenn sich vor dem Token ein
v1_25$=MID$(v5_2$(v2_66%),v2_69%-1,1) ! Space befindet (sicher), dann
IF v1_25$=" " AND v1_24$<"A" ! testen, ob es killed werden kann.
v5_2$(v2_66%)=LEFT$(v5_2$(v2_66%),v2_69%-2)+v5_5$(v2_67%)+v1_1D$
ELSE ! IF links vom Token etwas <"A" THEN Space killen
v5_2$(v2_66%)=LEFT$(v5_2$(v2_66%),v2_69%-1)+v5_5$(v2_67%)+v1_1D$ ! original
ENDIF ! effektive spaces killed
IF INSTR(v5_4$(v2_67%),"DATA ")>0
v2_AB%=1 ! Zeichen nach DATA werden nicht komprimiert
ENDIF ! (dahinter können keine weiteren Befehle kommen)
EXIT IF v2_AB%=1 ! Ausstieg aus dieser Testreihe
WEND ! eigentliche Kompression beendet (diese zeile)
NEXT v2_67% ! ende der Tokenabkürzungen dieser Zeile
WHILE LEFT$(v5_2$(v2_66%),1)=" " ! TRIM täte es auch, aber...
v5_2$(v2_66%)=RIGHT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-1) ! gegen Bomben
WEND ! Space vor zeilennummer?
WHILE RIGHT$(v5_2$(v2_66%),1)=" "
v5_2$(v2_66%)=LEFT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-1)
WEND ! space am Zeilenende? (sicher)
v2_69%=VAL(v5_2$(v2_66%)) ! Zeilennummer feststellen
v1_1E$=STR$(v2_69%) ! Nummer als Text
v2_67%=LEN(v1_1E$) ! Länge der Nummer
v5_2$(v2_66%)=RIGHT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-v2_67%) ! Nummer abschneiden
WHILE LEFT$(v5_2$(v2_66%),1)=" " ! falls mehr als ein space kommt
v5_2$(v2_66%)=RIGHT$(v5_2$(v2_66%),LEN(v5_2$(v2_66%))-1)
WEND ! zwischen Nummer und Zeile Spaces?
v5_2$(v2_66%)=v1_1E$+v5_2$(v2_66%) ! nummer wieder anfügen
ENDIF ! Nummer wieder komplett
NEXT v2_66% ! Ende der Kompression
WHILE LEN(v5_2$(v2_0%))<2 ! letzte zeile ist leer
DEC v2_0% ! Zeileende korrigieren
DEC v2_17% ! heraufholen
WEND ! ende endkorrketur
@vB_1D(1,v2_0%) ! etwas Statistik
PRINT CHR$(7); ! aufwachen...
v2_6A%=(v2_65%-v2_53%)*1000/v2_65%
INFOW #1," "+STR$(v2_65%-v2_53%)+" Bytes weniger ("+STR$(v2_6A%/10)+"%)."
INC v2_17% ! sonst F10
PAUSE 80 ! zeit zum Lesen
DEFMOUSE 0 ! Normalzustand
OPENW 1 ! falls Probleme auftreten
@vB_19 ! ergebnis zeigen
ENDIF
RETURN
> PROCEDURE vB_5 ! rechnertyp E220/500
IF v2_1D%<>999
ALERT 0,"| Rechnertyp einstellen |",v2_60%,"E 220| E 500 ",v2_60%
ENDIF
ERASE v5_4$()
ERASE v5_5$()
IF v2_60%=1 ! E220
DIM v5_4$(104) ! bei neueintrag aktualisieren
DIM v5_5$(104)
RESTORE vA_2
v2_1D%=0
REPEAT
INC v2_1D%
READ v5_4$(v2_1D%),v5_5$(v2_1D%)
UNTIL v5_4$(v2_1D%)="****"
v5_4$(v2_1D%)=CHR$(34)+"; "
v5_5$(v2_1D%)=CHR$(34)+";"
v2_68%=v2_1D%
ENDIF
IF v2_60%=2 ! E500
DIM v5_4$(138)
DIM v5_5$(138)
RESTORE vA_3
v2_1D%=0
REPEAT
INC v2_1D%
READ v5_4$(v2_1D%),v5_5$(v2_1D%)
UNTIL v5_4$(v2_1D%)="****"
v2_68%=v2_1D%-1 ! &Hx in &x ?
ENDIF
RETURN
> PROCEDURE vB_1F ! gitter auf text
v2_6B%=TRUE
IF v2_1%<=v2_16% ! blockmarke ab über sichtb. Bereich
v2_6C%=0
ENDIF
IF v2_1%>v2_16% AND v2_1%<=v2_16%+v2_3C% ! top visible
v2_6C%=(v2_1%-v2_16%)*16
ENDIF
IF v2_2%=>v2_16% AND v2_2%<v2_16%+v2_3C% ! bot visible
v2_6D%=(v2_2%-v2_16%)*16+16
ENDIF
IF v2_2%>=v2_16%+v2_3C% ! blockmarke bis unterste Zeile
v2_6D%=v2_3C%*16+16
ENDIF
IF v2_16%>v2_2%
v2_6B%=FALSE
ENDIF
IF v2_16%+v2_3C%<=v2_1%
v2_6B%=FALSE
ENDIF
'
IF v2_59%=TRUE AND v2_6B%=TRUE
' IF cur_y%>topline% AND cur_y%<topline%-win_hoch%
GRAPHMODE 2
BOUNDARY 0
DEFFILL 1,2,1
PBOX 0,v2_6C%+3,v2_6E%,v2_6D%+3
DEFFILL 1,0
BOUNDARY 1
GRAPHMODE 1
' ENDIF
ENDIF
RETURN
> PROCEDURE vB_20 ! einzelzeile neu
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%)))
RETURN
> PROCEDURE vB_19 ! Text ins Fenster
OPENW 1
CLS
v2_6F%=v2_16%
v2_70%=WINDTAB(1,4)+1 ! Breite window
v2_71%=WINDTAB(1,5)+4 ! Höhe "
v2_72%=INT(v2_70%/8)-3 ! nutzbare Breite in Zeichen
v2_73%=INT(v2_71%/16)-4 ! nutzbare Höhe in Zeilen
v2_3D%=v2_72%
v2_3C%=v2_73%
v2_74%=0 ! interner Zähler
v2_75%=v2_16%+v2_3C%-1 ! schluss%
IF v2_6F%>v2_0%-v2_73%
v2_6F%=v2_0%-v2_73%+1
v2_16%=v2_0%-v2_73%+1
ENDIF
IF v2_6F%<1
v2_6F%=1
v2_16%=1
ENDIF
IF v2_3E%<0
v2_3E%=0
ENDIF
'
FOR v2_76%=v2_6F% TO v2_75% ! Text ausgeben
' wt_ls%=LEN(t$(wt_z%)) ! fehler ???
TEXT 1,v2_74%*16+16,MID$(v5_2$(v2_76%),v2_3E%+1,v2_72%)
INC v2_74% ! wievielte Zeile im Fenster
NEXT v2_76% ! wt_ol%= Nummer der obersten Zeile im Fenster
'
IF v2_0%=1
v2_77%=1000
ELSE
v2_77%=v2_73%*1000/v2_0% ! Slider für Zeilenanwahl
ENDIF
v2_78%=v2_72%*1000/v2_1C% ! Slider für waagerechtes Verschieben
IF v2_78%=0
v2_78%=1
ENDIF
IF v2_77%=0
v2_77%=1
ENDIF
IF v2_0%=v2_3C% ! div 0
INC v2_3C%
ENDIF
v2_79%=(v2_16%-1)/(v2_0%-v2_3C%)*1000
v2_7A%=v2_3E%/(255-v2_3D%)*1000
v2_7B%=WIND_SET(1,15,v2_78%,-1,-1,-1) ! Hslider Größe absolut
v2_7C%=WIND_SET(1,16,v2_77%,-1,-1,-1) ! Vslider Größe absolut [Buch S.578]
v2_7D%=WIND_SET(1,9,v2_79%,-1,-1,-1) ! Position Vslider
v2_7E%=WIND_SET(1,8,v2_7A%,-1,-1,-1) ! Position Hslider
IF v2_59%=TRUE !wt_6-9=fehlercode
@vB_1F
ENDIF
@vB_18
RETURN
> PROCEDURE vB_21 ! Element angewählt
INC v2_7F% ! trouble bei menu1=24
v3_5!=FALSE ! true wenn neu aufbauen
IF MENU(1)=22 ! Closer
GOSUB vB_12
ENDIF
IF MENU(1)=23 ! Fuller
CLOSEW 1
DPOKE WINDTAB+4+(MENU(4)-1)*12,0 ! X
DPOKE WINDTAB+6+(MENU(4)-1)*12,19 ! Y
DPOKE WINDTAB+8+(MENU(4)-1)*12,639 ! B
DPOKE WINDTAB+10+(MENU(4)-1)*12,380 ! H
v2_6E%=623
v2_80%=336
OPENW 1
v3_5!=TRUE
ENDIF
IF MENU(1)=24 AND v2_7F%>0 ! scrollen ___ Seite 491
v2_81%=MENU(5) ! siehe auch Buch Seite 577 WIND_GET()
SELECT v2_81% ! Seite 578 WIND_SET Mode 8,9
CASE 0
INC v2_82%
IF v2_82%=0
@vB_18
v2_16%=SUB(v2_16%,v2_3C%) ! Seite nach oben
IF v2_16%<1
v2_16%=1
v3_5!=TRUE
ENDIF
SUB v2_17%,v2_3C%
IF v2_17%<1
v2_17%=1
v3_5!=TRUE
ENDIF
IF v2_16%+v2_3C%<v2_17%
v2_17%=v2_16%+1
ENDIF
@vB_19
ELSE
v2_82%=-1 ! nix als Ärger!!!
ENDIF
CASE 1
@vB_18
IF v2_16%+v2_3C%<=v2_0%
ADD v2_16%,v2_3C% ! Seite nach unten
v3_5!=TRUE
ELSE
v2_16%=v2_0%-v2_3C%
v3_5!=TRUE
ENDIF
ADD v2_17%,v2_3C%
IF v2_17%>v2_0%
v2_17%=v2_0%
ENDIF
CASE 2
IF v2_16%>1 ! Zeile nach oben
DEC v2_16%
IF v2_17%>v2_16%+v2_3C%-1
@vB_18
DEC v2_17% ! falls cursor unten herausrutschen würde
@vB_18
ENDIF
v3_5!=TRUE
ENDIF
CASE 3
IF v2_16%+v2_3C%<=v2_0% ! Zeile nach unten
INC v2_16%
IF v2_17%<v2_16% ! falls cursor in oberster zeile
@vB_18
INC v2_17% ! cursor nach unten bewegen
@vB_18
ENDIF
v3_5!=TRUE
ENDIF
CASE 4
IF v2_3E%>v2_3D% ! Seite nach links
SUB v2_3E%,v2_3D%
v3_5!=TRUE
ELSE
v2_3E%=0
v3_5!=TRUE
ENDIF
CASE 5
IF v2_3E%+v2_3D%<v2_1C% ! Seite nach rechts
ADD v2_3E%,v2_3D%
v3_5!=TRUE
ELSE
v2_3E%=v2_1C%-v2_3D%
v3_5!=TRUE
ENDIF
CASE 6
IF v2_3E%>0
DEC v2_3E%
v3_5!=TRUE
ENDIF
CASE 7
IF v2_3E%<v2_1C%-v2_3D% ! Zeichen nach links
INC v2_3E%
v3_5!=TRUE
ENDIF
ENDSELECT
ENDIF
IF MENU(1)=25 ! hor verschieben -> neue Spalte
v2_83%=MENU(5)
v2_3E%=v2_83%/(1000/(v2_1C%-v2_3D%))
' IF links%>=cur_x%
' links%=cur_x%-1
' ENDIF
IF LEN(v5_2$(v2_17%))<v2_3E%
v2_3E%=LEN(v5_2$(v2_17%))
v2_2D%=v2_3E%+1
ENDIF
v3_5!=TRUE
ENDIF
IF MENU(1)=26 ! vert schieben -> neue Zeile
v2_84%=MENU(5)
v2_16%=v2_84%/(1000/(v2_0%-v2_3C%))
INC v2_16%
IF v2_17%>v2_16%+v2_3C%
v2_17%=v2_16%-v2_3C%+1
ENDIF
IF v2_17%<v2_16%
v2_17%=v2_16%
ENDIF
v3_5!=TRUE
ENDIF
IF MENU(1)=27 ! Sizer andere Größe
CLOSEW 1
v2_85%=MENU(7) ! neue Breite holen
v2_85%=INT(v2_85%/8)*8 ! auf Zeichen anpassen
DPOKE WINDTAB+8+(MENU(4)-1)*12,v2_85%-1 ! neue Breite
v2_3D%=v2_85%
v2_85%=MENU(8) ! neue Höhe holen
v2_85%=INT(v2_85%/16)*16 ! auf Zeilen anpassen
DPOKE WINDTAB+10+(MENU(4)-1)*12,v2_85%-4 ! neue Höhe
v2_3C%=v2_85%
OPENW 1
WHILE v2_2D%<=v2_3E%+1
DEC v2_3E% ! cursor zu weit rechts
WEND
v3_5!=TRUE
IF v2_17%>v2_16%+v2_3C%
@vB_18
v2_17%=v2_16%+v2_3C%-1 ! cursor wäre nicht mehr zu sehen
@vB_18
ENDIF
ENDIF
'
IF MENU(1)=28 ! Move_Balken
v2_A1%=MENU(7) ! x-breit
v2_A2%=MENU(8) ! y-breit
v2_9F%=MENU(5) ! x-pos
v2_A0%=MENU(6) ! y-pos
IF v2_9F%+v2_A1%>639
v2_9F%=639-v2_A1%
ENDIF
IF v2_A0%+v2_A2%>380
v2_A0%=380-v2_A2%
ENDIF
VOID WIND_SET(1,5,v2_9F%,v2_A0%,v2_A1%,v2_A2%)
DPOKE WINDTAB+4,v2_9F%
DPOKE WINDTAB+6,v2_A0%
DPOKE WINDTAB+8,v2_A1%
DPOKE WINDTAB+10,v2_A2%
@vB_19
ENDIF
'
IF v3_5!=TRUE
IF v2_2D%>LEN(v5_2$(v2_17%))+1
v2_2D%=LEN(v5_2$(v2_17%))+1
ENDIF
IF v2_17%>v2_16%+v2_3C%
v2_17%=SUB(v2_17%,v2_17%-v2_16%)
ENDIF
WHILE v2_2D%>v2_3E%+v2_3D%
ADD v2_3E%,v2_3D%
WEND
IF v2_3E%>v2_2D%+v2_3D%
v2_3E%=v2_3D%-v2_2D%
ENDIF
@vB_19
v3_5!=FALSE
'
IF MENU(1)=24 ! nix als Ärger
v2_7F%=-1 ! sonst double trouble
ENDIF
ENDIF
RETURN
> PROCEDURE vB_22 ! Fenster einschalten
HIDEM
DPOKE WINDTAB+2,&X111111111111
DPOKE WINDTAB+4,7 ! X-Koordinate
DPOKE WINDTAB+6,30 ! Y
DPOKE WINDTAB+8,632 ! Breite X
DPOKE WINDTAB+10,364 ! Höhe
TITLEW #1," "+v1_6$+" "
INFOW #1," Don't Panic."
VOID GRAF_GROWBOX(315,185,10,10,0,20,639,380)
' wind_x%=wind_onx%-16
' wind_y%=wind_ony%-44
v2_6E%=614
v2_80%=320
OPENW 1
CLEARW 1
CLS
PAUSE 5
SHOWM
RETURN
> PROCEDURE vB_14 ! Statistik info
@vB_1D(1,v2_0%)
v1_20$=" ------ STATISTIK ------ |"+RIGHT$(" "+STR$(v2_0%),8)
v1_20$=v1_20$+" Zeilen|"+RIGHT$(" "+STR$(v2_53%),8)+" Bytes Text|"
v1_20$=v1_20$+RIGHT$(" "+STR$(FRE(0)),8)+" Bytes frei"
ALERT 0,v1_20$,1,v1_8$,v2_1D%
RETURN
> PROCEDURE vB_E ! reinen ASCII erzeugen
IF v2_0%>1
@vB_18 ! Texte in >"< werden nicht verändert
DEFMOUSE 2
INFOW #1," Text-Vollreinigung"
FOR v2_87%=1 TO v2_0%
v5_2$(v2_87%)=v5_2$(v2_87%)+" "
v2_A5%=LEN(v5_2$(v2_87%))
FOR v2_88%=1 TO v2_A5%
IF MID$(v5_2$(v2_87%),v2_88%,1)=CHR$(34) ! Text in >"< überspringen
IF INSTR(v2_88%+1,v5_2$(v2_87%),CHR$(34))>v2_88% ! zweites >"< suchen
v2_88%=INSTR(v2_88%+1,v5_2$(v2_87%),CHR$(34)) ! Zähler neu setzen
GOTO vA_7 ! auf Textende setzen
ENDIF
ENDIF
v1_21$=MID$(v5_2$(v2_87%),v2_88%,1) ! alles kleiner Space
IF ASC(v1_21$)=27
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)
ENDIF
IF ASC(v1_21$)<32
MID$(v5_2$(v2_87%),v2_88%,1)=" "
ENDIF
IF ASC(v1_21$)>127 AND LEN(v5_2$(v2_87%))<v2_1C%-1 ! Umlaut?
SELECT v1_21$
CASE "Ä"
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%)
CASE "Ö"
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%)
CASE "Ü"
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%)
CASE "ä"
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%)
CASE "ö"
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%)
CASE "ü"
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%)
CASE "ß"
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%)
ENDSELECT
v1_21$=MID$(v5_2$(v2_87%),v2_88%,1)
IF ASC(v1_21$)>126
MID$(v5_2$(v2_87%),v2_88%,1)=" " ! >Rest< beseitigen
ENDIF
ENDIF
vA_7:
NEXT v2_88%
WHILE LEFT$(v5_2$(v2_87%),1)=" "
v5_2$(v2_87%)=RIGHT$(v5_2$(v2_87%),LEN(v5_2$(v2_87%))-1) ! gegen Bombendrohungen
WEND
v5_2$(v2_87%)=TRIM$(v5_2$(v2_87%)) ! Abschlußreinigung
NEXT v2_87%
WHILE LEN(v5_2$(v2_0%))<2 ! Leere Zeilen am Textende?
v5_2$(v2_0%)=""
DEC v2_0%
WEND
OPENW 1
v2_2D%=1
v2_3E%=0
@vB_19
DEFMOUSE 0
ENDIF
RETURN
> PROCEDURE vB_23 ! cursor per mausknopf
VOID WIND_GET(1,10,v2_89%,v2_8A%,v2_8B%,v2_8C%) ! void=fehlercode
MOUSE v2_8A%,v2_8B%,v2_8C%
IF v2_8A%>0 AND v2_8B%>0
IF v2_8A%<v2_6E% AND v2_8B%<v2_80% ! maus im Arbeitsbereich
@vB_18
v2_2D%=(v2_8A%+7)/8
v2_17%=(v2_8B%+14)/16+v2_16%-1 ! point5%
ADD v2_2D%,v2_3E%
IF v2_17%>v2_0%
v2_17%=v2_0%
ENDIF
IF v2_2D%>LEN(v5_2$(v2_17%))+1
v2_2D%=LEN(v5_2$(v2_17%))+1
ENDIF
@vB_18
ENDIF
ENDIF
RETURN
> PROCEDURE vB_10 ! Rem's beseitigen
IF v2_0%>1
DEFMOUSE 2
INFOW #1," REM-Killer in Progress"
LET v2_8D%=0
FOR v2_8E%=1 TO v2_0%
LET v2_8F%=0 ! Zeilenanfang
IF LEN(v5_2$(v2_8E%))>2 ! wg. Bombendrohungen
IF INSTR(UPPER$(v5_2$(v2_8E%)),"REM ")>0
v2_8F%=INSTR(UPPER$(v5_2$(v2_8E%)),"REM ") ! >REM< gefunden?
ENDIF
IF INSTR(v5_2$(v2_8E%),"'")>0
v2_8F%=INSTR(v5_2$(v2_8E%),"'") ! >'< gefunden?
ENDIF
IF v2_8F%>1
IF MID$(v5_2$(v2_8E%),v2_8F%-1,1)=":"
DEC v2_8F%
ENDIF
DEC v2_8F% ! wirklich alles
LET v2_8D%=ADD(v2_8D%,LEN(v5_2$(v2_8E%)))
v5_2$(v2_8E%)=LEFT$(v5_2$(v2_8E%),v2_8F%)
LET v2_8D%=SUB(v2_8D%,LEN(v5_2$(v2_8E%)))
ENDIF ! pos>0
ENDIF ! len
NEXT v2_8E%
INFOW #1," "+STR$(v2_8D%)+" Bytes killed."
v2_3E%=0
v2_17%=1
@vB_19
DEFMOUSE 0
ENDIF
RETURN
> PROCEDURE vB_18 ! setzen/löschen
BOUNDARY 0
GRAPHMODE 3
DEFFILL 1,1
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
BOUNDARY 1
GRAPHMODE 1
DEFFILL 1,0
INFOW #1," Zeile "+STR$(v2_17%)+" Spalte "+STR$(v2_2D%)
RETURN
> PROCEDURE vB_11 ! nach Zeilennummer einfügen/löschen
IF v2_0%>1
INFOW #1," Spacer an der Arbeit."
v2_90%=INSTR(v5_2$(1)," ") ! wo ist das erste Space
v2_91%=VAL(v5_2$(1)) ! Wert 1. Zeilennummer
v2_92%=LEN(STR$(v2_91%))
IF v2_90%>0 AND v2_90%<=v2_92%+1 ! Zeilen enthalten Spaces (=löschen)
FOR v2_93%=1 TO v2_0%
v2_91%=VAL(v5_2$(v2_93%)) ! Nummer festellen
IF v2_91%>0 ! leere Zeilen nicht bearbeiten
v1_22$=STR$(v2_91%) ! Nummer als Text
v2_92%=LEN(v1_22$) ! Länge Zeilennummer
v5_2$(v2_93%)=RIGHT$(v5_2$(v2_93%),LEN(v5_2$(v2_93%))-v2_92%) ! Nummer löschen
WHILE LEFT$(v5_2$(v2_93%),1)=" " ! noch ein space
v5_2$(v2_93%)=RIGHT$(v5_2$(v2_93%),LEN(v5_2$(v2_93%))-1)
WEND
v5_2$(v2_93%)=v1_22$+v5_2$(v2_93%) ! Nummer wieder anfügen
ENDIF
NEXT v2_93%
ELSE
FOR v2_93%=1 TO v2_0% ! Spaces müssen eingefügt werden
v2_94%=LEN(v5_2$(v2_93%))
IF v2_94%>1 AND v2_94%<v2_1C%-1
v2_91%=VAL(v5_2$(v2_93%))
v1_22$=STR$(v2_91%)
v2_92%=LEN(v1_22$)
v5_2$(v2_93%)=v1_22$+" "+RIGHT$(v5_2$(v2_93%),LEN(v5_2$(v2_93%))-v2_92%)
ENDIF
NEXT v2_93%
ENDIF
@vB_19 ! Bild resaturieren
ENDIF
RETURN
> PROCEDURE vB_24 ! was gedrückt
v2_95%=MENU(14) ! Zeichen holen
LPOKE XBIOS(14,1)+6,0 !Tastaturpuffer leeren
v2_96%=v2_95% AND 255 ! ASCII
v2_97%=v2_95%/256 ! Scancode
v2_98%=0 ! 1=curset 2=neuer Fensterinhalt
'
IF LEN(v5_2$(v2_17%))>=v2_1C%-1 ! maximale Zeilenbreite erreicht
IF v2_96%>31 AND v2_96%<>127
v2_96%=0
v2_97%=0
GOTO vA_4
ENDIF
ENDIF
'
IF v2_96%>31 AND v2_96%<>127 ! normales Zeichen
@vB_18
v2_98%=1
IF v2_3%=TRUE ! Einfügen aktiv
IF LEN(v5_2$(v2_17%))<v2_1C%+1
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)
@vB_20
ENDIF
ELSE
TEXT (v2_2D%-1-v2_3E%)*8+1,(v2_17%-v2_16%)*16+16,CHR$(v2_96%)
IF v2_2D%<=LEN(v5_2$(v2_17%))
MID$(v5_2$(v2_17%),v2_2D%,1)=CHR$(v2_96%)
ELSE
v5_2$(v2_17%)=v5_2$(v2_17%)+CHR$(v2_96%)
ENDIF
ENDIF
INC v2_2D%
IF v2_2D%>v2_3E%+v2_3D% ! zu weit?
ADD v2_3E%,v2_3D%-1 ! nach rechts
IF v2_3E%>v2_1C%-v2_3D% ! zu weit rechts?
v2_3E%=v2_1C%-v2_3D% ! rechter anschlag
v2_98%=2
ENDIF
v2_98%=2
ENDIF
GOTO vA_5
ENDIF
'
IF (v2_97%=60 OR v2_96%=13) AND v2_0%<v2_18% ! neue Zeile (einfügen)
@vB_18
v2_98%=2
v2_2D%=1
IF v2_96%=13 ! <ENTER> = neue Zeile unter Cursor + Cur-down
INC v2_17% ! F2 = neue leere Zeile an Cur-pos
ENDIF
INC v2_0%
INSERT v5_2$(v2_17%)=" "
IF v2_17%>v2_16%+v2_3C%
ADD v2_16%,v2_3C%
IF v2_16%>v2_17%-v2_3C%
v2_16%=v2_17%-v2_3C%
ENDIF
ENDIF
IF v2_59%=TRUE
IF v2_1%<=v2_17% AND v2_2%>=v2_17%
INC v2_2%
ENDIF
ENDIF
INC v2_16%
IF v2_0%>1
@vB_1A(1)
ENDIF
GOTO vA_5
ENDIF
'
IF v2_97%=71 ! CLR/Home
@vB_18
v2_2D%=1
v2_17%=v2_16%
IF v2_3E%>0
v2_3E%=0
v2_98%=2
ENDIF
@vB_18
ENDIF
'
IF v2_97%=80 ! cursor down
IF v2_17%<v2_0% ! nur bis vorletzte zeile
@vB_18
v2_98%=1
INC v2_17%
IF v2_17%>=v2_16%+v2_3C% ! 1 Seite tiefer
ADD v2_16%,v2_3C% ! +1
IF v2_16%>v2_0%-v2_3C%+1 ! zuweit unten?
v2_16%=v2_0%-v2_3C%+1
ENDIF
v2_98%=2
ENDIF
GOTO vA_5
ENDIF
ENDIF
'
IF v2_97%=72 ! cursor up
@vB_18 ! cur löschen
v2_98%=1
IF v2_17%>1
DEC v2_17% ! 1 aufwärts
IF v2_17%<v2_16% AND v2_16%>1 ! noch nicht ganz oben?
v2_98%=2
SUB v2_16%,v2_3C% ! fenster 1 Seite nach oben
IF v2_16%<1
v2_16%=1 ! falls weniger als 1 Seite bis ganz oben
ENDIF
ENDIF
ENDIF
GOTO vA_5
ENDIF
'
IF v2_97%=77 ! cursor rechts
IF v2_2D%<=LEN(v5_2$(v2_17%)) ! noch nicht ganz rechts
@vB_18 ! cur sichern
v2_98%=1
INC v2_2D% ! eins weiter
IF v2_2D%<=v2_3E%
v2_3E%=v2_2D%-1
v2_98%=1
ENDIF
IF v2_2D%>v2_3E%+v2_3D% ! zu weit?
ADD v2_3E%,v2_3D%-1 ! nach rechts
IF v2_3E%>v2_1C%-v2_3D% ! zu weit rechts?
v2_3E%=v2_1C%-v2_3D% ! rechter anschlag
v2_98%=2
ENDIF
v2_98%=2
ENDIF
ENDIF
GOTO vA_5
ENDIF
'
IF v2_97%=75 ! cursor links
IF v2_2D%>1
v2_98%=1
@vB_18
DEC v2_2D%
IF v2_2D%<=v2_3E%
SUB v2_3E%,v2_3D%-1 !*3/2
IF v2_3E%<0
v2_3E%=0
v2_98%=2
ENDIF
v2_98%=2
ENDIF
ENDIF
GOTO vA_5
ENDIF
'
IF v2_97%=82 AND LEN(v5_2$(v2_17%))<v2_1C% ! insert
ENDIF
'
IF v2_96%=9 ! TAB
IF v2_2D%<=LEN(v5_2$(v2_17%))-8
@vB_18
v2_98%=1
INC v2_2D%
v2_2D%=INT(v2_2D%/8+1)*8
IF v2_2D%>v2_3E%+v2_3D% ! wie cur_rechts
ADD v2_3E%,v2_3D%-1
IF v2_3E%>v2_1C%-v2_3D%
v2_3E%=v2_1C%-v2_3D%
ENDIF
INC v2_98%
ENDIF
ENDIF
GOTO vA_5
ENDIF
'
IF v2_96%=8 AND v2_2D%>1 ! Backspace
@vB_18
v2_98%=1
DEC v2_2D%
IF v2_2D%<=v2_3E%
SUB v2_3E%,v2_3D%-1 ! scrolling?
IF v2_3E%<0
v2_3E%=0 ! nicht zu weit
ENDIF
v2_98%=2
ENDIF
v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%)
@vB_20
GOTO vA_5
ENDIF
'
IF v2_96%=127 ! Delete
IF v2_17%=v2_0% AND LEN(v5_2$(v2_0%))<2 AND v2_0%>1
v5_2$(v2_0%)=""
DEC v2_0%
DEC v2_17%
@vB_19
GOTO vA_5
ENDIF
ENDIF
'
IF v2_96%=127 AND LEN(v5_2$(v2_17%))>0 ! DEL einzelzeichen
@vB_18
v2_98%=1
IF v2_2D%<LEN(v5_2$(v2_17%))
v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%)
ELSE
v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-1)
ENDIF
@vB_20
GOTO vA_5
ENDIF
'
IF v2_97%=61 ! F3=Zeile gesamt hochziehen
IF v2_17%>1 ! Ende des Textes
IF LEN(v5_2$(v2_17%))+LEN(v5_2$(v2_17%-1))<v2_1C% ! override?
v5_2$(v2_17%-1)=v5_2$(v2_17%-1)+v5_2$(v2_17%)
DELETE v5_2$(v2_17%)
DEC v2_17%
DEC v2_0%
v2_98%=2
GOTO vA_5
ENDIF
ENDIF
ENDIF
'
IF v2_97%=62 ! F4 Rest ab Cursor in obere Zeile
IF v2_17%>1 ! Ende der Welt
IF LEN(v5_2$(v2_17%-1))+LEN(RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1))<v2_1C%
v5_2$(v2_17%-1)=v5_2$(v2_17%-1)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1)
v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)
v2_98%=2
GOTO vA_5
ENDIF
ENDIF
ENDIF
'
IF v2_97%=63 ! F5 Rest ab Cursor in untere Zeile
IF v2_17%<v2_0% ! nichts mehr darunter
IF LEN(v5_2$(v2_17%+1))+LEN(RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1))<v2_1C%
v5_2$(v2_17%+1)=v5_2$(v2_17%+1)+RIGHT$(v5_2$(v2_17%),LEN(v5_2$(v2_17%))-v2_2D%+1)
v5_2$(v2_17%)=LEFT$(v5_2$(v2_17%),v2_2D%-1)
v2_98%=2
GOTO vA_5
ENDIF
ENDIF
ENDIF
'
IF (v2_97%=64) OR (v2_96%=127 AND LEN(v5_2$(v2_17%))=0) ! DEL Line
@vB_18
v2_98%=2
IF v2_17%<v2_0% ! gibt Ärger
DELETE v5_2$(v2_17%)
IF v2_59%=TRUE
IF v2_17%=v2_1%
' INC block_start%
ENDIF
DEC v2_2%
ENDIF
DEC v2_0%
ENDIF
ENDIF
'
IF v2_97%=65 AND v2_A4%=TRUE ! F7 weitersuchen
@vB_9(1)
ENDIF
'
IF v2_97%=68 ! F10=Don't Panic
v2_2D%=1
v2_17%=1
v2_3E%=0
v2_98%=2
ENDIF
'
vA_5:
IF v2_2D%>v2_3E%+v2_3D% ! rechtsaußen?
ADD v2_3E%,v2_3D%-1
IF v2_3E%>v2_1C%-v2_3D%
v2_3E%=v2_1C%-v2_3E%
ENDIF
v2_98%=2
ENDIF
IF LEN(v5_2$(v2_17%))<v2_2D%
v2_2D%=LEN(v5_2$(v2_17%))+1 ! falls neue Zeile kürzer
ENDIF
IF v2_2D%<=v2_3E%
v2_3E%=v2_2D%-v2_3D%-1 ! mehr info
IF v2_3E%<0 ! aber nicht zu weit
v2_3E%=0
ENDIF
v2_98%=2
ENDIF
IF v2_98%=2
@vB_19
@vB_18
ENDIF
IF v2_98%>0
@vB_18
ENDIF
vA_4:
RETURN
> PROCEDURE vB_0
IF XBIOS(4)<>2
ALERT 3,"|ST-High only",1," Sorry. ",v2_1D%
EDIT
ENDIF
' IF memory1%>100000
' RESERVE 99999
' ENDIF
LET v2_18%=999
v1_3$=CHR$(27)
DIM v5_0$(63) ! menue
DIM v5_2$(v2_18%) ! text
DIM vD_0|(5,4) ! rs232
DIM v6_0%(5,4) ! rs232
DIM v5_3$(127)
DIM v6_2%(6)
DIM v6_1%(6)
DIM v5_1$(3) ! Pica-CQ-Links
ARRAYFILL vD_0|(),FALSE
vD_0|(1,3)=1 ! baudrate 2400
vD_0|(2,4)=1 ! databits 8
vD_0|(3,1)=1 ! parity N
vD_0|(4,2)=1 ! stopbits 1
vD_0|(5,3)=1 ! handshak -
VOID XBIOS(15,4,5,136,-1,-1,-1) ! RS232
v6_1%(1)=1 ! Pica
v6_1%(2)=1 ! CQ
v6_1%(3)=0 ! Epson
v6_1%(4)=3 ! linker Rand
v6_1%(5)=72 ! Papierlänge
v6_1%(6)=60 ! Drucklänge
v5_1$(1)=CHR$(18) ! default
v5_1$(2)=v1_3$+"H"
KEYDEF 1,"openw 0"+CHR$(13)
KEYDEF 2,"cls"+CHR$(13)
LET v1_0$=CHR$(26) ! end of File
LET v2_E%=26 ! end of file
LET v1_2$=CHR$(13)+CHR$(10) !end of line
LET v1_7$=CHR$(GEMDOS(25)+65)+":\*.SRP"
LET v1_6$=CHR$(GEMDOS(25)+65)+":\PROJECT.SRP"
v1_8$=" "+CHR$(14)+CHR$(15)+" "
v1_A$="Abbruch| Weiter "
v1_17$=" Nein |Ja"
v2_16%=1 ! oberste darzustellende Zeile
v2_3E%=0 ! 1. linkes Zeichen im Fenster
v2_1C%=253 ! max zeichen pro zeile
v2_0%=1 ! letzte Zeile in T$()
v2_A4%=FALSE
v2_2D%=1 ! cursor default start
v2_17%=1
v2_60%=1 ! E220
v2_59%=FALSE ! kein block markiert
v2_3%=TRUE ! Einfügemodus
'
OPENW 0
RESTORE
v2_1D%=0
DO
READ v5_0$(v2_1D%)
EXIT IF v5_0$(v2_1D%)="****"
INC v2_1D%
LOOP
v5_0$(0)=" "+CHR$(14)+CHR$(15)+" "
v5_0$(v2_1D%)=""
v5_0$(v2_1D%+1)=""
FOR v2_1D%=1 TO 5
FOR v2_99%=1 TO 4
READ v6_0%(v2_1D%,v2_99%)
NEXT v2_99%
NEXT v2_1D%
v2_1D%=999
RESTORE vA_6
FOR v2_9A%=1 TO 127
READ v5_3$(v2_9A%)
NEXT v2_9A%
MENU v5_0$()
MENU 28,1 ! insert
MENU 31,2 ! weitersuchen
MENU 37,2 ! R1
MENU 41,2 ! B end
MENU 43,2 ! B del
MENU 44,2 ! B isol
MENU 45,2 ! B copy
MENU 46,2 ! B move
MENU 47,2 ! B mark
MENU 48,2 ! B >anf
MENU 49,2 ! B >end
@vB_1A(0)
BOUNDARY 0
DEFFILL 1,2,4
PBOX 0,0,639,399
BOUNDARY 0
ON BREAK GOSUB vB_12
ON MENU GOSUB vB_1
ON MENU MESSAGE GOSUB vB_21
ON MENU KEY GOSUB vB_24
ON MENU BUTTON 1,1,1 GOSUB vB_23
@vB_5
GOSUB vB_22
WHILE INP?(1)=TRUE ! RS232-Puffer leeren,
VOID INP(1) ! falls noch Zeichen anliegen
WEND ! oder beim Einschalten erzeugt wurden
GOSUB vB_19
RETURN
> PROCEDURE vB_13
v1_23$="| SHARP PC-E220/500 Expander | | (C) 1993 by Alfred Jäger"
ALERT 0,v1_23$,1,v1_8$,v2_1D%
RETURN
> PROCEDURE vB_12
IF v2_0%>1
v1_26$="| Programm beenden? | | Daten gesichert?"
ELSE
v1_26$="|Wollen Sie das Programm| wirklich beenden?"
ENDIF
ALERT 2,v1_26$,1,v1_17$,v2_A6%
IF v2_A6%=2
CLOSEW 1
VOID WIND_GET(1,6,v2_9B%,v2_9C%,v2_9D%,v2_9E%)
VOID GRAF_SHRINKBOX(315,175,10,10,v2_9B%,v2_9C%,v2_9D%,v2_9E%)
MENU KILL
CLOSE
OPENW 0
EDIT
ENDIF
RETURN
> PROCEDURE vB_25
DATA + , Information,---------------------,1,2,3,4,5,6,""
DATA " Disk ", Alles neu
DATA - Disk ----------, Datei schreiben, Datei lesen, Datei anhängen, Block schreiben
DATA - RS 232 --------, Datei senden, Datei holen, Datei mergen, Block senden
DATA - Druck ---------, Text drucken, Block drucken
DATA -----------------, Ende,""
'
DATA " Werken "
DATA Einfügen, Suchen, Weitersuchen , Kompressor, Säubern
DATA REM-Killer, Space, Rechnertyp, Reserve,""
'
DATA " Block "
DATA Anfang Block, Ende Block,----------------, Löschen, Isolieren, Kopieren
DATA Verschieben, Marken löschen, -> Blockanfang, -> Blockende,""
'
DATA " Parameter "
DATA Drucker, Schnittstelle, EOF - EOL
DATA ----------------, Statistik,""
'
DATA ****
DATA 9,7,4,2,96,64,32,0,0,4,6,0,0,8,16,24,0,1,2,3
REM |bauds | datas |parity| stopbits| handsh
vA_6:
' aufbau:1b-4c-0c-00-bitmuster 12 spalten (120dpi 8pin) ges. 127 daten (fix)
DATA 20,41,42,E2,1B4C0C0002060E1A326262321A0E0602,45,5A,48
DATA E9,49,4B,1B4C0C0002060C1830606030180C0602,4D,4E
DATA 1B4C0C0000C6C68292929282C6C60000,4F
DATA 1B4C0C0000007E7E404040407E7E0000,50,E4,54
DATA 1B4C0C00008080C07E7EC080C0400000,E8,58,1B4C0C0000E0F01008FEFE0810F0E000
DATA EA,1B53314E1B54,1B53316E1B54,1B5331481B54,1B5331E61B54
DATA 2E,2E
DATA 20,E0,E1,1B4C0C0000008080DC5E22225E5C0000,EB,EE
DATA 2E,1B4C0C0000203E3E1020203E1F010100,2E,2E,2E
DATA 1B4C0C000040C2C66C38380C06020000
DATA E6,2E,2E,6F
DATA E3,2E,E5,E7,2E,ED,2E,1B4C0C000030380C043F3F040C383000
DATA 1B4C0C0000001C2E220E0E222E1C0000,1B53315E1B54,2E
DATA 2E,2E,2E,AB,1B4C0C0080A2A2949488889494A2A280,2E
DATA 1B5330301B54,1B5330311B54,1B5330321B54,1B5330331B54,1B5330341B54
DATA 1B5330351B54,1B5330361B54,1B5330371B54,1B5330381B54,1B5330391B54
DATA 1B53302D1B54,1B53302B1B54,EC,F1
DATA 2E,1B4C0C00000101033E7CC0808000000
DATA 1B5331301B54,1B5331311B54,1B5331321B54,1B5331331B54,1B5331341B54
DATA 1B5331351B54,1B5331361B54,1B5331371B54,1B5331381B54,1B5331391B54,8F
DATA 1B5330611B54,1B5330621B54,1B5330651B54,1B53306D1B54,FC,1B5330741B54
DATA 2E,B3,1B4C0C0000FEFE7C7C38381010000000,F3,F2,2E
DATA 5B,5D,FE,FB,2E,1B5331411B54,1B5331421B54,1B5331651B54
DATA 1B5331431B54,1B5331501B54,2E,2E
DATA 1B4C0C0000101038387C7CFEFE000000,1B4C0C0000FEFE7C7C38381010000000,F8
DATA 1B4C0C0000FEFEFEFEFEFEFEFEFEFE00,2E
DATA 2E,5E,1B4C0C0000080808082A2A3E3E1C080000
DATA 1B4C0C0000242E2E2424747424000000,1B4C0C00001030207E7E203010000000
DATA 1B4C0C0000080C047E7E040C08000000,1B4C0C00081C1C3E2A08080808F8F800
'
vA_2:
' bei neueinträgen DIM ändern, ca. Zeile 1400
DATA "DATA ","DA.","FOR ","F.","NEXT ","N.","STEP ","STE."
DATA "THEN PRINT ","P.","PRINT ","P."
DATA "THEN LET ","LE.","LET ","LE."
DATA "THEN GOTO ","G.","GOTO ","G."
DATA "THEN BEEP ","B.","BEEP ","B."
DATA "THEN GOSUB ","GOS.","GOSUB ","GOS."
DATA "THEN RETURN ","RE.","RETURN ","RE."
DATA "THEN INPUT ","I.","INPUT ","I."
DATA "THEN LPRINT ","LP.","LPRINT ","LP."
DATA "DEGREE ","DE.","RADIAN ","RAD.","GRAD ","GR.","DEG ","DEG"
DATA "RESTORE ","RES.","RANDOMIZE ","RA.","REM","'","INP ","INP"
DATA "LOCATE ","LOC.","USING ","U.","WAIT ","W.","LOG ","LOG"
DATA "STOP ","S.","END ","E.","TRON","TR.","RND ","RN.","TROFF ","TROF."
DATA "CHR$ ","CH.","ASC ","AS.","STR$ ","STR.","OUT ","OUT","TO ","TO"
DATA "SIN ","SI.","TAN ","TA.","ATN ","AT.","DMS ","DM.","COS ","COS"
DATA "HCS ","HC.","HTN ","HT.","AHS ","AH.","ACS ","AC.","HSN ","H."
DATA "RCP ","RC.","NCR ","NC.","NPR ","NP.","ROT ","RO.","SQR ","SQ."
DATA "AND ","AN.","NOT ","NO.","ABS ","A.","SGN ","SG.","FRE