10 '******* Finden & Ersetzen ******
20 '*** (C) 1989 Matthias Uphoff ***
30 '
40 '***** Einige Voreinstellungen
50 MODE 2:INK 0,13:INK 1,0:BORDER 3
60 DEFINT a-z
70 maxz=1000
80 DIM z$(maxz)
90 sep$=" '#()*+,-/:;<=>à[ç]^"+CHR$(34)
100 WINDOW#1,3,78,14,24
110 WINDOW#2,1,80,13,25
120 WINDOW#3,61,79,2,11
130 WIDTH 255
140 CALL &BB48:'Break sperren
150 KEY DEF 66,0,126
160 OPENOUT"X":MEMORY HIMEM-1:CLOSEOUT
170 uflag=0:wflag=0:nflag=0:dflag=0
180 '
190 '***** Anzeige Hauptmenue
200 links=1:rechts=21
210 oben=1:unten=12
220 GOSUB 1790:'Rahmen zeichnen
230 LOCATE 3,3:PRINT"Finden & Ersetzen"
240 LOCATE 3,4:PRINT"(C) 1989 MU / DMV"
250 LOCATE 4,9:PRINT"Aktuelle Datei:"
260 a$="":GOSUB 2280
270 links=22:rechts=59
280 GOSUB 1790:'Rahmen zeichnen
290 LOCATE 35,1:PRINT" Hauptmenue "
300 DATA <L> Datei laden,<S> Datei speichern,<A> Datei anzeigen,<Z> Programmende,<F> Finden,<E> Ersetzen,<U> Unabh. von Gross/Kleinschr.,<W> Nur ganze Woerter,<N> Ersetzen ohne Nachfrage,<D> Druckerausgabe
310 FOR i=2 TO 11
320   READ a$:LOCATE 24,i:PRINT a$
330 NEXT
340 GOSUB 1920:'Schalter anzeigen
350 links=60:rechts=80
360 GOSUB 1790:'Rahmen zeichnen
370 '
380 '***** Hauptmenue/Abfrage
390 GOSUB 2220:'Auf Taste warten
400 ON INSTR("LSAZFEUWND",a$) GOSUB 440,640,830,980,1070,1300,1660,1670,1680,1690
410 GOTO 390
420 '
430 '***** Datei laden
440 GOSUB 1720:'Rahmen 1
450 LOCATE 38,17:PRINT" Laden ";
460 GOSUB 2020:'Hinweise 1
470 LOCATE 24,19:INPUT "Dateiname: ",a$
480 CLS#3
490 IF a$="" THEN 600
500 ERASE z$:DIM z$(maxz)
510 WINDOW SWAP 0,3
520 nz=0:OPENIN a$
530 WHILE NOT EOF
540   nz=nz+1
550   LINE INPUT#9,z$(nz)
560 WEND
570 CLOSEIN
580 CLS:WINDOW SWAP 0,3
590 GOSUB 2280:'Dateinamen anz.
600 CLS#2
610 RETURN
620 '
630 '***** Datei speichern
640 GOSUB 1720:'Rahmen 1
650 LOCATE 36,17:PRINT" Speichern "
660 IF name$="" THEN GOSUB 2140:GOTO 790
670 GOSUB 2020:'Hinweise 1
680 LOCATE 24,19:INPUT "Dateiname: ",a$
690 CLS#3
700 IF a$="" THEN 790
710 WINDOW SWAP 0,3
720 OPENOUT a$
730 FOR i=1 TO nz
740   PRINT#9,z$(i)
750 NEXT
760 CLOSEOUT
770 CLS:WINDOW SWAP 0,3
780 GOSUB 2280:'Dateinamen anz.
790 CLS#2
800 RETURN
810 '
820 '***** Datei Anzeigen
830 GOSUB 1760:'Rahmen 2
840 LOCATE 37,13:PRINT" Anzeigen "
850 IF name$="" THEN GOSUB 2140:GOTO 940
860 IF dflag THEN GOSUB 2070 ELSE GOSUB 2060
870 CLS#1
880 FOR i=1 TO nz
890   PRINT#1,z$(i)
900   IF dflag THEN PRINT#8,z$(i):GOSUB 2200 ELSE GOSUB 2220
910   IF escflag THEN 940
920 NEXT i
930 GOSUB 2110:'Dateiende
940 CLS#2:CLS#3
950 RETURN
960 '
970 '***** Programmende
980 GOSUB 1720:'Rahmen 1
990 LOCATE 34,17:PRINT" Programmende "
1000 LOCATE 27,19
1010 PRINT"Das Programm beenden (J/N) ?"
1020 GOSUB 2220:'Auf Taste warten
1030 IF (a$="N") OR escflag THEN CLS#2:CLS#3:RETURN
1040 IF a$<>"J" THEN 1020
1050 MODE 2:CALL &BB00:END
1060 '
1070 '***** Finden
1080 GOSUB 1760:'Rahmen 2
1090 LOCATE 38,13:PRINT" Finden "
1100 IF name$="" THEN GOSUB 2140:GOTO 1260
1110 GOSUB 2020:'Hinweise 1
1120 CLS#1:PRINT#1,"***** Suchbegriff: ";
1130 LINE INPUT#1,such$
1140 CLS#3
1150 IF such$="" THEN 1260
1160 IF uflag THEN such$=UPPER$(such$)
1170 IF dflag THEN GOSUB 2070 ELSE GOSUB 2060
1180 FOR i=1 TO nz
1190   p=1:GOSUB 2350:'Suchen
1200   IF p=0 THEN 1240
1210   PRINT#1,z$(i)
1220   IF dflag THEN PRINT#8,z$(i):GOSUB 2200 ELSE GOSUB 2220
1230   IF escflag THEN 1260
1240 NEXT
1250 GOSUB 2110:'Dateiende
1260 CLS#2:CLS#3
1270 RETURN
1280 '
1290 '***** Ersetzen
1300 GOSUB 1760:'Rahmen 2
1310 LOCATE 37,13:PRINT" Ersetzen "
1320 IF name$="" THEN GOSUB 2140:GOTO 1620
1330 GOSUB 2020:'Hinweise 1
1340 CLS#1:PRINT#1,"***** Suchbegriff: ";
1350 LINE INPUT#1,such$
1360 CLS#3
1370 IF such$="" THEN 1620
1380 IF uflag THEN such$=UPPER$(such$)
1390 PRINT#1,"***** Ersetzen durch: ";
1400 LINE INPUT#1,ers$
1410 GOSUB 2070:'Hinweise 2
1420 FOR i=1 TO nz
1430   f=0
1440   p=1:GOSUB 2350:'Suchen
1450   IF p=0 THEN 1590
1460   IF nflag THEN 1530
1470   PRINT#1,LEFT$(z$(i),p-1)+CHR$(24)+MID$(z$(i),p,LEN(such$))+CHR$(24)+MID$(z$(i),p+LEN(such$))
1480   PRINT#1,"***** Ersetzen durch ";CHR$(24);ers$;CHR$(24);" (J/N)?"
1490   GOSUB 2220:'Auf Taste warten
1500   IF escflag THEN 1620
1510   IF a$="N" THEN p=p+1:GOTO 1550
1520   IF a$<>"J" THEN 1490
1530   z$(i)=LEFT$(z$(i),p-1)+ers$+MID$(z$(i),p+LEN(such$))
1540   p=p+LEN(ers$):f=-1
1550   GOSUB 2350:'Suchen
1560   IF p>0 THEN 1460
1570   IF f THEN PRINT#1,z$(i)
1580   IF dflag AND f THEN PRINT#8,z$(i)
1590   GOSUB 2200:IF escflag THEN 1620
1600 NEXT i
1610 GOSUB 2110:'Dateiende
1620 CLS#2:CLS#3
1630 RETURN
1640 '
1650 '***** Flags umschalten
1660 uflag=NOT uflag:GOSUB 1920:RETURN
1670 wflag=NOT wflag:GOSUB 1920:RETURN
1680 nflag=NOT nflag:GOSUB 1920:RETURN
1690 dflag=NOT dflag:GOSUB 1920:RETURN
1700 '
1710 '***** Rahmen 1
1720 links=22:rechts=59
1730 oben=17:unten=21
1740 GOTO 1790
1750 '***** Rahmen 2
1760 links=1:rechts=80
1770 oben=13:unten=25
1780 '***** Rahmen zeichnen
1790 LOCATE links,oben:PRINT CHR$(150);
1800 PRINT STRING$(rechts-links-1,154);
1810 PRINT CHR$(156);
1820 FOR i=oben+1 TO unten-1
1830   LOCATE links,i:PRINT CHR$(149);
1840   LOCATE rechts,i:PRINT CHR$(149);
1850 NEXT
1860 LOCATE links,unten:PRINT CHR$(147);
1870 PRINT STRING$(rechts-links-1,154);
1880 PRINT CHR$(153);
1890 RETURN
1900 '
1910 '***** Flagstatus anzeigen
1920 i=8
1930 f=uflag:GOSUB 1970
1940 f=wflag:GOSUB 1970
1950 f=nflag:GOSUB 1970
1960 f=dflag
1970 LOCATE 57,i:i=i+1
1980 IF f THEN PRINT "+" ELSE PRINT "-"
1990 RETURN
2000 '
2010 '***** Bedienungshinw. 1
2020 LOCATE 64,6:PRINT"Abbruch durch"
2030 LOCATE 64,7:PRINT"leere Eingabe"
2040 RETURN
2050 '***** Bedienungshinw. 2
2060 LOCATE 63,6:PRINT"Weiter mit SPACE"
2070 LOCATE 63,7:PRINT"Abbruch mit ESC"
2080 RETURN
2090 '
2100 '***** Dateiende
2110 PRINT#1,CHR$(7);"***** Dateiende erreicht: [ESC] druecken"
2120 GOTO 2160
2130 '***** Fehlermeldung
2140 LOCATE 24,19
2150 PRINT CHR$(7);"Keine Datei geladen: [ESC] druecken"
2160 GOSUB 2220: IF NOT escflag THEN 2160
2170 RETURN
2180 '
2190 '***** Test auf ESC
2200 a$=INKEY$:GOTO 2240
2210 '***** Auf Taste warten
2220 WHILE INKEY$<>"":WEND
2230 a$=UPPER$(INKEY$):IF a$="" THEN 2230
2240 escflag = (a$=CHR$(126))
2250 RETURN
2260 '
2270 '***** Dateiname setzen
2280 name$=UPPER$(a$)
2290 LOCATE 4,10:PRINT STRING$(15,32);
2300 LOCATE 6,10
2310 IF name$="" THEN PRINT "-- Keine --" ELSE PRINT name$
2320 RETURN
2330 '
2340 '***** Suchen
2350 IF uflag THEN a$=UPPER$(z$(i)) ELSE a$=z$(i)
2360 p=INSTR(p,a$,such$)
2370 IF (NOT wflag) OR p=0 THEN RETURN
2380 IF p=1 THEN 2400
2390 IF INSTR(sep$,MID$(a$,p-1,1))=0 THEN 2420
2400 IF p+LEN(such$)-1=LEN(a$) THEN RETURN
2410 IF INSTR(sep$,MID$(a$,p+LEN(such$),1)) > 0 THEN RETURN
2420 p=p+1:GOTO 2360