1 REM Ins{nd av Kristoffer Eriksson <5357> 1988-01-03 23.28.48 (DUMP)
20 ! +----------------------------------------------------+
30 ! ! PROGSCAN - Avsl|jar ickeportabla programdetaljer. !
40 ! ! F|r hela ABC800-familjen. !
50 ! ! Av Kristoffer Eriksson <5357> !
60 ! ! F}r kopieras fritt endast i ickekommersielltsyfte. !
70 ! +----------------------------------------------------+
80 !
90 ! Ver 1.00 / 880102 / <5357>
100 !
110 ! Noterar anv{ndningen av instruktioner och funktioner som inte finns p}
120 ! alla ABC800-modeller.
130 ! Uppt{cker inte BLK, ULN, EL och n}gra till inne i uttryck (utan blank-
140 ! tecken runtom), eftersom det skulle g|ra det mycket sv}rare att g|ra
150 ! igenk{nningen s{ker. Men tror du de anv{nds s} i ett program, s} editera
160 ! bort blanktecknen runt dem i datasatserna nedan.
170 ! Uppt{cker heller inte tilldelning till funktionsargument, som ger
180 ! felmeddelande vid f|rs|k till k|rning efter laddning fr}n .BAS-form
190 ! p} tidiga ABC800M/C.
200 !
210 INTEGER : EXTEND
220 !
230 DATA 28
240 DATA " INTEGER ", " FLOAT ", " EXTEND "
250 DATA "INP(", " OUT ", "PEEK(", "PEEK2(", " POKE ", "CALL("
260 DATA " GBLK ", " BLK ", " ULN ", " NULN ", " EL ", " DBLE "
270 DATA " DOT ", "DOT(", " TXPOINT ", "TXPOINT("
280 DATA " WIDTH ", " ATTRIBUTE ", " FGPICTURE ", " FGCTL ", " FG"
290 DATA " XSTM", "XFN"
300 DATA " RESUME ", "SYS(8)"
310 !
320 READ Ants|k
330 DIM S|k$(1:Ants|k)=15,Hit(1:Ants|k),I$=160
340 FOR I=1 TO Ants|k
350 READ S|k$(I)
360 NEXT I
370 Nrfgctl=FNNr("FGCTL")
380 Typfgctl=0
390 Flgsk{rm=0
400 !
410 ON ERROR GOTO : INPUT "Programfil att kolla: "Infil$
420 WHILE Infil$=""
430 END
440 WEND
450 IF INSTR(1,Infil$,".")=0 THEN Infil$=Infil$+".BAS"
460 ON ERROR GOTO 410 : OPEN Infil$ AS FILE 1
470 !
480 ON ERROR GOTO 410 : INPUT "Utskriftsfil f|r diagnos, RETURN=Sk{rmen: "Utfil$
490 IF Utfil$="" THEN Utfil$="CON:" : Flgsk{rm=-1
500 ON ERROR GOTO 520 : PREPARE Utfil$ AS FILE 2
510 WHILE 0
520 ; "Kan inte skapa '" Utfil$ "'. Felkod" ERRCODE : GOTO 480
530 WEND
540 !
550 ;
560 IF NOT Flgsk{rm THEN ; #2 "Diagnos f|r programmet '" Infil$ "', " TIME$ : ; #2
570 ; #2 "Intressanta rader:"
580 ; #2
590 WHILE 1
600 ON ERROR GOTO 690 : INPUT LINE #1,I$ : ON ERROR GOTO
610 I$=LEFT$(I$,LEN(I$)-2)+" "
620 Hit=0
630 FOR I=1 TO Ants|k
640 IF INSTR(1,I$,S|k$(I)) P=FNBass|k(I$,S|k$(I)) : IF P Hit(I)=Hit(I)+1 : Hit=1 : IF I=Nrfgctl THEN Z=FNFgctl(I$,P)
650 NEXT I
660 IF Hit THEN ; #2 I$
670 WEND
680 !
690 IF ERRCODE<>34 THEN ; "Felkod" ERRCODE "p} filen '" Infil$ "'." CHR$(7)
700 CLOSE 1
710 ; #2
720 ; #2 "Antal rader med intressanta ord i:"
730 ; #2
740 FOR I=1 TO Ants|k
750 ; #2 RIGHT$(S|k$(I),1-(ASCII(S|k$(I))=32)) ":",Hit(I);
760 IF MOD(I,3)=0 THEN ; #2 ELSE ; #2,,
770 NEXT I
780 ; #2
790 ; #2
800 ; #2 "Diagnos:"
810 ; #2
820 !
830 IF Hit(FNNr(" INTEGER "))+Hit(FNNr(" FLOAT "))=0 THEN ; #2 "FLOAT/INTEGER-angivelse saknas. Kan ge problem vid laddning fr}n .BAS-form." : ; #2
840 IF Hit(FNNr(" EXTEND "))=0 THEN ; #2 "EXTEND/NO EXTEND-angivelse saknas. Kan ge problem vid laddning fr}n .BAS-form." : ; #2
850 IF Hit(FNNr("INP(")) THEN ; #2 "Portadresser i INP() kan vara maskinberoende." : ; #2
860 IF Hit(FNNr("OUT")) THEN ; #2 "Portadresser i OUT kan vara maskinberoende." : ; #2
870 IF Hit(FNNr("PEEK("))+Hit(FNNr("PEEK2(")) THEN ; #2 "Adresser i PEEK() och PEEK2() kan vara maskin- och DOS-beroende." : ; #2
880 IF Hit(FNNr("POKE")) THEN ; #2 "Adresser i POKE kan vara maskin- och DOS-beroende." : ; #2
890 !
900 WHILE Hit(FNNr("CALL("))
910 ; #2 "Adresser och argument till CALL() kan vara maskinberoende. [r den anropade"
920 ; #2 "rutinen 'hemmagjord' kan den inneh}lla maskinberoende adresser. Se {ven upp"
930 ; #2 "s} den inte {r placerad p} en adress som inte {r fri p} alla 800-modeller."
940 ; #2
950 IF 0 WEND
960 !
970 WHILE Hit(FNNr("BLK"))+Hit(FNNr("GBLK"))
980 ; #2 "BLK och GBLK finns bara p} ABC806. Fungerar dock {nd} p} andra modeller"
990 ; #2 "vid laddning fr}n .BAC-form, men ser lustigt ut vid LIST:ning igen."
1000 ; #2
1010 IF 0 WEND
1020 WHILE Hit(FNNr("ULN"))+Hit(FNNr("NULN"))
1030 ; #2 "ULN och NULN finns bara p} ABC806. St|r dock inte programk|rningen p}"
1040 ; #2 "andra modeller vid laddning fr}n .BAC-form, men ser lustigt ut vid LIST:ning."
1050 ; #2
1060 IF 0 WEND
1070 IF Hit(FNNr(" EL ")) THEN ; #2 "EL finns bara p} ABC806. St|r dock inte programk|rningen vid laddning" : ; #2 "fr}n .BAC-form." : ; #2
1080 IF Hit(FNNr(" DBLE ")) THEN ; #2 "DBLE finns p} alla modeller, men har effekt endast p} ABC806." : ; #2
1090 !
1100 WHILE Hit(FNNr("DOT"))+Hit(FNNr("DOT("))
1110 ; #2 "SETDOT, CLR DOT och DOT() fungerar bara p} ABC800C och 802, inte 800M och 806,"
1120 ; #2 "d{r de ger ERROR vid exekvering. Inladdning g}r dock bra. Med DOTOPT fungerar"
1130 ; #2 "de {ven p} 806 och utan grafikeffekt p} 800M." : ; #2
1140 IF 0 WEND
1150 !
1160 WHILE Hit(FNNr("TXPOINT "))+Hit(FNNr("TXPOINT("))
1170 ; #2 "TXPOINT och TXPOINT() fungerar bara p} ABC800C (802?). Ger p} |vriga ERROR vid"
1180 ; #2 "exekvering. Inladdning g}r dock bra." : ; #2
1190 IF 0 WEND
1200 !
1210 IF Hit(FNNr("WIDTH")) THEN ; #2 "WIDTH finns bara p} ABC802 och 806, ej 800C och 800M. Kan bytas mot test av" : ; #2 "datortyp + POKE." : ; #2
1220 IF Hit(FNNr("ATTRIB")) THEN ; #2 "ATTRIBUTE finns bara p} ABC806, ej 800C, 800M och 802. Kan bytas mot test av" : ; #2 "datortyp + POKE." : ; #2
1230 IF Hit(FNNr("FGPICTURE")) THEN ; #2 "FGPICTURE finns bara p} ABC806." : ; #2
1240 !
1250 WHILE Hit(FNNr(" FG+"))>Hit(FNNr("FGPICTURE"))
1260 ; #2;"Programmet anv{nder HR-grafik."
1270 IF Typfgctl=0 THEN IF Hit(Nrfgctl)=0 ; #2 "Saknar FGCTL!" ELSE ; #2 "Har inte lyckats avg|ra vilken uppl|sning som anv{nds; typ ABC800 eller 806."
1280 IF Typfgctl=1 THEN ; #2 "Anv{nder uppl|sning 240 x 240, fungerar p} alla HR-versioner."
1290 WHILE Typfgctl=2
1300 ; #2 "Anv{nder uppl|sning 256 eller 512 x 240, fungerar bara p} ABC806. FGCTL ger"
1310 ; #2 "ERROR vid laddning och k|rning p} |vriga modeller."
1320 IF 0 WEND
1330 IF Typfgctl=3 THEN ; #2 "Anv{nder b}de ABC800-uppl|sning och 806-dito. Anpassar sig antagligen efter" : ; #2 "datortyp."
1340 ; #2 "HR-grafik fungerar bara p} ABC806 och vissa 800M och 800C. Ger p} 802 ERROR"
1350 ; #2 "vid laddning fr}n .BAS-form, och vid k|rning fr}n .BAC-form. Ger p} 800M och"
1360 ; #2 "800C utan HR-modul ingen effekt."
1370 ; #2
1380 IF 0 WEND
1390 !
1400 WHILE Hit(FNNr("XSTM"))
1410 ; #2 "Anv{nder utvidgad Basic (XSTM-instruktioner), och har LIST:ats utan denna"
1420 ; #2 "inladdad. Kr{ver f|rst}s at den {r inladdad vid laddning fr}n .BAS-form och"
1430 ; #2 "vid k|rning. Kan ge fel vid .BAS-laddning {ven n{r den {r inladdad, ISAM-"
1440 ; #2 "instruktionerna t ex ger det."
1450 ; #2 "Kan {ven vara ATTRIBUTE/WIDTH LIST:at p} {ldre datormodell, eller HR-grafik"
1460 ; #2 "LIST:at p} 802, eller BYE/NAME/KILL listat utan DOS, eller CD/FILESTAT"
1470 ; #2 "LIST:at utan LUX-NET-DOS." : ; #2
1480 IF 0 WEND
1490 !
1500 WHILE Hit(FNNr("XFN"))
1510 ; #2 "Anv{nder utvidgad Basic (XFN-funktioner), och har LIST:ats utan denna"
1520 ; #2 "inladdad. Kr{ver f|rst}s att den {r inladdad vid laddning fr}n .BAS-form och"
1530 ; #2 "vid k|rning." : ; #2
1540 IF 0 WEND
1550 !
1560 WHILE Hit(FNNr("RESUME"))
1570 ; #2 "Anv{nder RESUME. Kontrollera att det {r r{tt gjort. Kan ge t ex till"
1580 ; #2 "synes of|rklariga ERROR 140 eller andra felkoder om inte RESUME ALLTID"
1590 ; #2 "finns med i felhanteringen. Endast om man inte alls anv{nder RESUME i"
1600 ; #2 "programmet kan man slopa den i felhanteringen." : ; #2
1610 IF 0 WEND
1620 !
1630 WHILE Hit(FNNr("SYS(8)"))
1640 ; #2 "SYS(8) fungerar bara p} ABC806 och 802, ej 800C och 800M. Ger ERROR 143"
1650 ; #2 "vid exekvering. [r naturligtvis ofarligt om det exekveringen undviks p}"
1660 ; #2 "800C och 800M, t ex med IF."
1670 ; #2 "Se dock upp med anv{ndningen {ven p} 802 och 806. Det finns en f|rdr|jning"
1680 ; #2 "fr}n att SYS(8) reagerar p} en tangenttryckning till dess att {ven SYS(5)"
1690 ; #2 "reagerar." : ; #2
1700 IF 0 WEND
1710 !
1720 WHILE FNOro>0
1730 ; #2 "OBS: Instruktioner som inte finns p} en datortyp, kan f}ngas upp";
1740 ; #2 " med" : ; #2 "ON ERROR GOTO, varvid programmet kanske fungerar,";
1750 ; #2 " och i varje fall inte" : ; #2 "kraschar. Vid laddning fr}n .BAS-";
1760 ; #2 "form f}r man dock fel {nd} vid sj{lva ladd-"
1770 ; #2 "ningen, sen blir det ERROR 144 vid k|rningen f|r felhanteringen";
1780 ; #2 " att ta hand om." : ; #2 "Vid laddning fr}n. BAC-form blir det";
1790 ; #2 " normalt ERROR 200 vid k|rningen att ta hand"
1800 ; #2 "om. -- Maskinberoende PEEK, POKE, INP och liknande {r f|rst}s";
1810 ; #2 " ofarliga om de" : ; #2 "undviks med IF-satser som kollar datortyp."
1820 IF 0 WEND
1830 CLOSE 2
1840 END
1850 !
1860 DEF FNBass|k(I$,S|k$) LOCAL P,R,S,T,U,V
1870 P=1
1880 WHILE 1
1890 R=INSTR(P,I$,'"') : S=INSTR(P,I$,"'")
1900 IF R=0 IF S=0 THEN T=LEN(I$)+1 ELSE T=S ELSE IF S