60000 DEFINT a-z
60010 '*** CROSSREF *** 60020 '(c) G.Cebulla ** 60030 '*** Jan.1988 *** 60040 DIM varname$(0),sprungziel(0),znr(0),sort(0) 60050 DIM kenn$(2),typ$(2) 60060 kenn$(0)="%":kenn$(1)="$":kenn$(2)="!" 60070 typ$(0)="Integer":typ$(1)="String":typ$(2)="Real" 60080 MODE 2:INK 0,0:INK 1,26:BORDER 5:ZONE 7 60090 WINDOW 1,80,2,22 60100 WINDOW #1,1,80,1,1 60110 WINDOW #2,1,80,23,25 60120 PAPER 1:PEN 0:CLS 60130 PAPER#1,0:PEN#1,1 60140 PAPER#2,0:PEN#2,1 60150 ' 60160 'Hauptmenue 60170 ' 60180 WHILE xref<>3 60190 CLS #2 60200 PRINT#2,TAB(31) CHR$(7) "H A U P T M E N U E" 60210 PRINT#2,"[1] Referenzliste Variablen" SPC(8) "[2] Referenzliste Sprungziele" SPC(8) "[3] Ende"; 60220 PRINT#2,TAB(34) "Ihre Wahl: [" CHR$(143) "]"; 60230 a$="" 60240 WHILE a$<"1" OR a$>"3" 60250 a$=INKEY$ 60260 WEND 60270 xref=VAL(a$) 60280 IF xref<>3 THEN GOSUB 60390 60290 WEND 60300 MODE 2 60310 PAPER 0:PEN 1:CLEAR 60320 END 60330 ' 60340 'Unterprogramme 60350 ' 60360 ' 60370 'Steuerprogramm fuer Referenzliste 60380 ' 60390 CLS#2:CLS#1:CLS 60400 PRINT#2,CHR$(7) "Ausgabe auf [D]rucker oder [B]ildschirm?" 60410 WHILE a$<>"D" AND a$<>"B" 60420 a$=UPPER$(INKEY$) 60430 WEND 60440 IF a$="B" THEN aus=0 ELSE aus=8 60450 CLS#2 60460 abbruch=0 60470 IF erstezeile!<>0 THEN GOSUB 60650 ELSE GOSUB 60740 60480 IF a$<>"N" OR xref<>durchsucht THEN GOSUB 61030 60490 IF abbruch THEN RETURN 60500 WINDOW SWAP 0,1 60510 IF aus=8 THEN WHILE INP(&F500) AND 64:PRINT#2,CHR$(7) "Drucker einschalten!":WEND:PRINT#8,CHR$(27) "M" CHR$(27) "3" CHR$(30); 60520 CLS#2 60530 PRINT#aus,TAB(19-2*xref) "C R O S S - R E F E R E N Z "; 60540 IF xref=1 THEN PRINT#aus,"V A R I A B L E N" ELSE PRINT#aus,"S P R U N G Z I E L E" 60550 WINDOW SWAP 0,1 60560 PRINT#2,CHR$(7) "Abbruch mit [ENTER]" 60570 zeile=0 60580 CLS 60590 ON xref GOSUB 62250,62420 60600 IF aus=8 THEN PRINT#aus:PRINT#aus 60610 RETURN 60620 ' 60630 'Zeilennummernbereich aendern? 60640 ' 60650 PRINT#2,CHR$(7) "Wollen Sie den Zeilennummernbereich aendern? [J/N]" 60660 WHILE a$<>"J" AND a$<>"N" 60670 a$=UPPER$(INKEY$) 60680 WEND 60690 IF a$="J" THEN GOSUB 60740 60700 RETURN 60710 ' 60720 'Zeilennummernbereich bestimmen 60730 ' 60740 PRINT#2,CHR$(7) "Bitte geben Sie den Zeilennummernbereich ein:" 60750 INPUT#2," Erste Zeile: ",erstezeile! 60760 IF erstezeile!=0 THEN erstezeile!=1 60770 IF erstezeile!<0 OR erstezeile!>65535 THEN PRINT#2,"Unzulaessige Eingabe!":GOTO 60740 60780 INPUT#2,"Letzte Zeile: ",letztezeile! 60790 IF letztezeile!=0 THEN letztezeile!=59999 - 5536*(erstezeile!>=60000) 60800 IF letztezeile!<erstezeile! OR letztezeile!<0 OR letztezeile!>65535 THEN PRINT#2,"Unzulaessige Eingabe!":GOTO 60740 60810 CLS#2 60820 zanf!=368:znr!=0 60830 zlaenge=-1 60840 WHILE znr!<erstezeile! AND zlaenge<>0 60850 GOSUB 61440 60860 zanf!=zanf!+zlaenge 60870 WEND 60880 IF zlaenge=0 THEN PRINT#2,"Der angegebene Bereich existiert nicht!":GOTO 60740 60890 start!=zanf!-zlaenge 60900 zanzahl=0 60910 WHILE znr!<=letztezeile! AND zlaenge<>0 60920 GOSUB 61440 60930 zanf!=zanf!+zlaenge 60940 zanzahl=zanzahl+1 60950 WEND 60960 IF zanzahl=0 THEN PRINT#2,"Der angegebene Bereich existiert nicht!":GOTO 60740 60970 ende!=zanf!-zlaenge 60980 PRINT#2,"Der Bereich von" erstezeile! "bis" letztezeile! "enthaelt" zanzahl "Programmzeilen und" ende!-start! "Bytes 60990 RETURN 61000 ' 61010 'Programmbereich durchsuchen 61020 ' 61030 durchsucht=0 61040 ERASE varname$,sprungziel,znr,sort 61050 amax=MIN(200,INT(FRE(0)/60)):zmax=20 61060 IF xref=1 THEN DIM varname$(amax),sprungziel(0) ELSE DIM varname$(0),sprungziel(amax) 61070 DIM znr(amax,zmax),sort(amax) 61080 FOR i=1 TO amax 61090 sort(i)=i 61100 NEXT 61110 PRINT#2,CHR$(7) "Programmbereich wird durchsucht..." 61120 PRINT#2,"Abbruch mit [ENTER]" 61130 zanf!=start! 61140 anzahl=-1 61150 WHILE zanf!<ende! AND abbruch=0 61160 GOSUB 61440 61170 PRINT"["+MID$(STR$(znr!),2)+"]"; 61180 adr!=zanf!+4 61190 naechstezeile!=zanf!+zlaenge 61200 WHILE adr!<naechstezeile! 61210 byte=PEEK(adr!) 61220 IF byte>=2 AND byte<=&D THEN ON xref GOSUB 61660,61500 61230 IF byte=&19 OR byte=&FF THEN adr!=adr!+1 61240 IF byte>=&1A AND byte<=&1C THEN adr!=adr!+2 61250 IF byte=&1D OR byte=&1E THEN IF xref=1 THEN adr!=adr!+2 ELSE GOSUB 61880 61260 IF byte=&1F THEN adr!=adr!+5 61270 IF byte=&22 THEN GOSUB 61580 61280 IF byte=&8C OR byte=&C0 OR byte=&C5 THEN adr!=naechstezeile!-1 61290 IF byte=&7C THEN GOSUB 61510 61300 adr!=adr!+1 61310 WEND 61320 zanf!=naechstezeile! 61330 IF INKEY$=CHR$(13) THEN abbruch=1 61340 WEND 61350 IF abbruch THEN RETURN 61360 durchsucht=xref 61370 CLS#2 61380 PRINT#2,CHR$(7) "Daten werden sortiert..." 61390 ON xref GOSUB 62070,62160 61400 RETURN 61410 ' 61420 'Zeilennummer & -laenge auslesen 61430 ' 61440 zlaenge=PEEK(zanf!) + 256*PEEK(zanf!+1) 61450 znr!=PEEK(zanf!+2) + 256*PEEK(zanf!+3) 61460 RETURN 61470 ' 61480 'Variable ueberlesen 61490 ' 61500 adr!=adr!+3 61510 WHILE PEEK(adr!)<128 61520 adr!=adr!+1 61530 WEND 61540 RETURN 61550 ' 61560 'String ueberlesen 61570 ' 61580 adr!=adr!+1 61590 WHILE PEEK(adr!)<>0 AND PEEK(adr!)<>&22 61600 adr!=adr!+1 61610 WEND 61620 RETURN 61630 ' 61640 'Variablennamen eintragen 61650 ' 61660 IF byte<=4 THEN typ=byte-2 ELSE typ=byte-7 61670 adr!=adr!+3 61680 name$="" 61690 WHILE byte<&80 61700 byte=PEEK(adr!) 61710 name$=name$+CHR$(byte AND &7F) 61720 adr!=adr!+1 61730 WEND 61740 name$=LOWER$(name$) 61750 WHILE PEEK(adr!)=&20 61760 adr!=adr!+1 61770 WEND 61780 byte=PEEK(adr!) 61790 IF byte=&28 OR byte=&5B THEN typ=typ OR 8 61800 name$=name$+CHR$(typ) 61810 FOR i=0 TO anzahl 61820 IF name$<>varname$(i) THEN NEXT i 61830 IF i>anzahl THEN IF anzahl<amax THEN anzahl=i:varname$(i)=name$:znr(i,0)=1:znr(i,1)=znr!-32768 ELSE ERROR 9 ELSE GOSUB 61970 61840 RETURN 61850 ' 61860 'Sprungziel eintragen 61870 ' 61880 IF byte=&1D THEN zadr!=PEEK(adr!+1)+256*PEEK(adr!+2):sprungziel=PEEK(zadr!+3)+256*PEEK(zadr!+4)-32768 ELSE sprungziel=PEEK(adr!+1)+256*PEEK(adr!+2)-32768 61890 adr!=adr!+2 61900 FOR i=0 TO anzahl 61910 IF sprungziel<>sprungziel(i) THEN NEXT 61920 IF i>anzahl THEN IF anzahl<amax THEN anzahl=i:sprungziel(i)=sprungziel:znr(i,0)=1:znr(i,1)=znr!-32768 ELSE ERROR 9 ELSE GOSUB 61970 61930 RETURN 61940 ' 61950 'Zeilennummer eintragen 61960 ' 61970 n=znr(i,0) 61980 WHILE n<0 61990 i=ABS(n) 62000 n=znr(i,0) 62010 WEND 62020 IF znr(i,n)<>znr!-32768 THEN IF n<zmax THEN znr(i,0)=znr(i,0)+1:znr(i,znr[i,0])=znr!-32768 ELSE IF amax>anzahl THEN znr(i,0)=-amax:znr(amax,0)=1:znr(amax,1)=znr!-32768:amax=amax-1 ELSE ERROR 9 62030 RETURN 62040 ' 62050 'Variablennamen sortieren 62060 ' 62070 FOR i=0 TO anzahl-1 62080 FOR j=anzahl TO i+1 STEP -1 62090 IF varname$(sort[j-1])>varname$(sort[j]) THEN zw=sort(j-1):sort(j-1)=sort(j):sort(j)=zw 62100 NEXT j 62110 NEXT i 62120 RETURN 62130 ' 62140 'Sprungziele sortieren 62150 ' 62160 FOR i=0 TO anzahl-1 62170 FOR j=anzahl TO i+1 STEP -1 62180 IF sprungziel(sort[j-1])>sprungziel(sort[j]) THEN zw=sort(j-1):sort(j-1)=sort(j):sort(j)=zw 62190 NEXT j 62200 NEXT i 62210 RETURN 62220 ' 62230 'Variablen ausgeben 62240 ' 62250 FOR i=0 TO anzahl 62260 typ=ASC(RIGHT$(varname$[sort(i)],1)) 62270 PRINT#aus,LEFT$(varname$[sort(i)],LEN(varname$[sort(i)])-1); 62280 IF (typ AND 4)=0 THEN PRINT#aus,kenn$(typ AND 3); 62290 PRINT#aus,,typ$(typ AND 3); 62300 IF typ AND 8 THEN PRINT#aus,"-Array"; 62310 IF typ AND 4 THEN PRINT#aus," ohne "; ELSE PRINT#aus," mit "; 62320 PRINT#aus,"Typkennzeichen" 62330 zeile=zeile+1 62340 PRINT#aus,TAB(7) 62350 GOSUB 62510 62360 IF INKEY$=CHR$(13) THEN RETURN 62370 NEXT i 62380 RETURN 62390 ' 62400 'Sprungziele ausgeben 62410 ' 62420 FOR i=0 TO anzahl 62430 PRINT#aus,USING"#####:";sprungziel(sort[i])+32768; 62440 GOSUB 62510 62450 IF INKEY$=CHR$(13) THEN RETURN 62460 NEXT i 62470 RETURN 62480 ' 62490 'Zeilennummern ausgeben 62500 ' 62510 index=sort(i):m=-1 62520 WHILE m<0 62530 m=znr(index,0) 62540 IF m>0 THEN n=m ELSE n=zmax 62550 FOR j=1 TO n 62560 IF POS(#aus)=79 THEN GOSUB 62670:PRINT#aus,TAB(7) 62570 PRINT#aus,USING" #####";znr(index,j)+32768; 62580 NEXT j 62590 IF m<0 THEN index=ABS(m) 62600 WEND 62610 PRINT#aus 62620 GOSUB 62670 62630 RETURN 62640 ' 62650 'Bildschirmausgabe anhalten 62660 ' 62670 zeile=zeile+1 62680 IF zeile>=19 AND aus=0 THEN PRINT TAB(56) "[weiter mit Tastendruck]";:WHILE INKEY$="":WEND:PRINT CHR$(17) CHR$(13);:zeile=0 62690 RETURN |