1 REM Ins{nd av Martin Lundahl <5254> 1987-08-04 20.00.55 (DUMP) 10 REM ****************************************** 20 REM ** Program.....DISKED.BAS 30 REM ** Gjort av....Martin Lundahl <5254> 40 REM ** Inskickat...870804 50 REM ****************************************** 100 EXTEND : INTEGER 110 CLOSE 120 FGCTL BLK+GRN+RED+BLK+BLK+BLK+BLK : FGPOINT 255,239,0 : FGFILL 0,0,0 130 M=8 140 GOSUB 1030 150 DIM Sektor$=0,Sekt10$(50)=256,F$(8)=1,Sf$(8)=1,S$=160,A$=1 160 POKE VAROOT(Sektor$),0,1,64512,SWAP%(64512),0,1 170 FGPOINT 255,239,0 : FGFILL 0,0,0 180 ATTRIBUTE 5 190 ; GRN 200 ; CHR$(12) 210 ; ULN "Diskeditor av Martin Lundahl till ABC806." NULN " " 220 ; "(0) Avsluta." 230 ; "(1) Sektoreditor." 240 ; "(2) Diskkarta." 250 ; "(3) Kopiera hela disketter." 260 ; "(4) Radera fil." 270 ; "(5) Bibliotek." 280 ; "(6) L{sa en icke textfil." 290 ; "(7) L{sa en textfil." 300 ; "(8) Program information." 310 ON ERROR GOTO 100 320 INPUT "V{lj nummer (1-8): "V 330 IF V=0 THEN ; CHR$(12) : GOTO 65535 340 IF V<1 THEN 170 350 IF V>M THEN 170 1000 FOR I=1 TO 8 : F$(I)=CHR$(191+I) : NEXT I 1010 FOR I=1 TO 8 : Sf$(I)=CHR$(207+I) : NEXT I 1020 ON V GOTO 1120,5000,6000,7000,9000,10000,11000,12000 1030 POKE A+65100,6,112 1040 POKE A+65102,195,15,96 1050 POKE A+65105,201 1060 POKE A+65106,6,112 1070 POKE A+65108,195,18,96 1080 POKE A+65111,201 1090 POKE 65120,33,80,120,17,0,120,1,128,7,237,176,201 1100 POKE 65132,0,0,0,0,0,0,0,0,33,127,127,17,207,127,1,128,7,237,184,201 1110 RETURN 1120 ATTRIBUTE 5 1130 GOTO 1180 1140 Z=SYS(6) 1150 GET A$ 1160 IF A$=F$(2) THEN 100 1180 ON ERROR GOTO 1140 1190 ; YEL 1200 ; CHR$(12) 1210 ; CUR(24,0) "Tryck PF2 f|r meny." 1220 ; CUR(0,0) "Sektoreditor av Martin Lundahl." 1230 ; CUR(1,0) 1240 INPUT "Vilken drive: "D 1250 IF D<0 OR D>1 THEN 1200 1260 INPUT "Vilken sektor: "Sekt 1270 POKE 64769,8+D 1280 ; CHR$(12) 1290 ; CUR(24,0) "PF1 [ndra, PF2 Ny sektor, PF3 F|reg}ende sektor, PF4 N{sta sektor, PF8-]terg}."; 1300 ON ERROR GOTO 1590 1310 ; CUR(0,0); 1320 ; "Sektoreditor av Martin Lundahl." 1330 ; : ; "Sektor:" Sekt 1340 Z=CALL(65100,Sekt) 1350 S=2 1360 FOR I=64512 TO 64512+255 STEP 16 1370 S=S+1 1380 K=0 1390 FOR J=I TO I+15 1400 IF SYS(5) 1510 1410 ; CUR(S,K) FNH$(J); 1420 K=K+3 1430 NEXT J 1440 K=64 1450 FOR J=I TO I+15 1460 IF SYS(5) 1510 1470 IF PEEK(J)<32 OR PEEK(J)>127 ; CUR(S,K) "."; ELSE ; CUR(S,K) CHR$(PEEK(J)) 1480 K=K+1 1490 NEXT J 1500 NEXT I 1510 IF SYS(5) GET A$ ELSE 1510 1520 ; CUR(24,0) "PF1 [ndra, PF2 Ny sektor, PF3 F|reg}ende sektor, PF4 N{sta sektor, PF8-]terg}."; 1530 ON ERROR GOTO 1510 1540 IF A$=CHR$(193) ; CUR(19,0); : INPUT "Vilken sektor: "Sekt : GOTO 1280 1550 IF A$=CHR$(192) Z=FN[ : IF Z=-2 A$=F$(2) : GOTO 1520 ELSE 1120 1560 IF A$=CHR$(194) Sekt=Sekt-1 : GOTO 1280 1570 IF A$=CHR$(195) Sekt=Sekt+1 : GOTO 1280 1580 IF A$=F$(8) THEN 100 1590 GOTO 1510 1600 DEF FNH$(W) 1610 S$=HEX$(PEEK(W)) 1620 IF LEN(S$)<2 S$="0"+S$ 1630 RETURN S$ 1640 FNEND 1650 DEF FN[ 1660 ; CUR(24,0) "PF3-V{nster, PF4-H|ger, PF5-Upp, PF7-Ner, SHIFT+PF1-Spara, SHIFT+PF2-]terg}. "; 1670 P=64512 1680 X=64 : Y=3 1690 ; CUR(Y,X); 1700 GET A$ 1710 IF A$=F$(3) IF X-1<63 THEN 1700 ELSE X=X-1 : P=P-1 : ; CUR(Y-1,X); 1720 IF X=63 THEN IF FN[1=0 THEN 1660 ELSE RETURN 0 1730 IF A$=F$(4) IF X+1>79 THEN 1700 ELSE X=X+1 : P=P+1 : ; CUR(Y-1,X); 1740 IF A$=F$(5) IF Y-1<3 THEN 1700 ELSE Y=Y-1 : P=P-16 : ; CUR(Y,X); 1750 IF A$=CHR$(13) ; CUR(19,0) "Hex: " FNH$(P) CUR(20,0) "Dec: " NUM$(PEEK(P)) " " : ; CUR(21.,0.) "Bin: " FNBin$(PEEK(P)) 1760 IF A$=F$(7) IF Y+1>18 THEN 1700 ELSE Y=Y+1 : P=P+16 : ; CUR(Y,X); 1770 IF A$=Sf$(1) Z=FNSpara 1780 IF A$=Sf$(2) RETURN -2 1790 IF A$>CHR$(31) AND A$50 THEN 1920 ELSE X=X+3 : P=P+1 1950 IF A$=F$(7) THEN IF Y+1>18 THEN 1920 ELSE Y=Y+1 : P=P+16 1960 IF A$=F$(5) THEN IF Y-1<3 THEN 1920 ELSE Y=Y-1 : P=P-16 1970 IF A$=Sf$(1) THEN Z=FNSpara 1980 IF A$=CHR$(13) ; CUR(19,0) "Hex: " FNH$(P) CUR(20,0) "Dec: " NUM$(PEEK(P)) " " : ; CUR(21.,0.) "Bin: " FNBin$(PEEK(P)) 1990 IF A$=Sf$(2) THEN RETURN -2 2000 ; CUR(Y,X); 2010 IF X>47 THEN RETURN 0 2020 IF (A$>"/" AND A$<":") OR (A$>"@" AND A$<"G") THEN Z$=FNInput$ : ; CUR(Y,X) Z$; : POKE P,PEEK(65099) 2030 IF PEEK(P)>31 AND PEEK(P)<128 ; CUR(Y,(X/3)+64) CHR$(PEEK(P)); : ; CUR(Y,X); 2040 IF PEEK(P)<32 OR PEEK(P)>127 ; CUR(Y,(X/3)+64) "."; : ; CUR(Y,X); 2050 GOTO 1920 2060 FNEND 2070 DEF FNOmv(A$) LOCAL T,H 2080 FOR Z=1 TO LEN(A$) 2090 H=INSTR(1,'0123456789ABCDEF',MID$(A$,Z,1)) 2100 IF H=0 THEN RETURN -1 ELSE T=T*16+H-1 2110 NEXT Z : RETURN T 2120 FNEND 2130 DEF FNInput$ 2140 Z=SYS(6) 2150 INPUT ""H$ 2160 S=FNOmv(H$) 2170 POKE 65099,S : RETURN FNH$(65099) 2180 FNEND 5000 ; CHR$(12) CUR(0,0) "Diskkarta." : ON ERROR GOTO 5130 5010 ; CUR(24,0) "Tryck PF8 f|r att komma till menyn." 5020 ; CUR(3,0) GRED "" BLU " Anger anv{nt omr}de." 5030 ; CUR(2,0) GGRN "" BLU " Anger oanv{nt omr}de." 5040 ON ERROR GOTO 5080 5050 ; CUR(4,0); : INPUT "Vilken drive: "D : ; CUR(4,0) "Drive" D " " 5060 IF D<0 OR D>1 THEN 5000 5070 POKE 64769,8+D : GOTO 5130 5080 ON ERROR GOTO 5090 Z=SYS(6) 5100 GET A$ 5110 IF A$=F$(8) THEN 100 5120 GOTO 5000 5130 X=-3 : Y=150 5140 ON ERROR GOTO 5150 FOR I=0 TO 2560 5160 X=X+3 : IF X>200 X=0 : Y=Y-3 5170 ; CUR(1,0) "L{ser sektor" I "av 2560." 5180 IF SYS(5) THEN GET A$ : IF A$=F$(8) THEN 100 5190 Z=CALL(65100,I) 5200 IF Sektor$=STRING$(256,229) THEN FGPOINT X,Y,1 : FGFILL X+2,Y-2 ELSE FGPOINT X,Y,2 : FGFILL X+2,Y-2 5210 NEXT I 5220 ; CUR(5,0); : INPUT "Tryck RETURN f|r meny."S$ : GOTO 170 6000 ; CHR$(12) 6010 GOTO 6060 6020 Z=SYS(6) 6030 GET A$ 6040 IF A$=F$(8) THEN 100 6050 GOTO 6000 6060 ; CUR(24,0) "Detta tar ganska s} l}ng tid s} ha t}lamod. Avbryt med PF8." 6070 ; RED 6080 ON ERROR GOTO 6020 6090 ; CUR(0,0) "Kopiering av disketter." 6100 ; CUR(1,0); : INPUT "Fr}n vilken drive: "D : ; CUR(1,0) "Fr}n drive" D " " 6110 IF D<0 OR D>1 THEN 6100 6120 ; CUR(2,0); : INPUT "Till vilken drive: "D1 : ; CUR(2,0) "Till drive" D1 " " 6130 IF D1<0 OR D1>1 THEN 6120 6140 ; CUR(3,0) "Detta kommer att f|rst|ra inneh}let i drive" D1 "." 6150 ; "Starta med ! eller }terg} genom att endast trycka return." 6160 GET A$ 6170 IF A$="!" THEN 6180 ELSE 100 6180 FOR I=0 TO 2560 STEP 50 6190 IF SYS(5) GET A$ : IF A$=F$(8) THEN 100 6200 POKE 64769,8+D 6210 Z=FNL{s(I) 6220 POKE 64769,8+D1 6230 Z=FNSkriv(I) 6240 NEXT I 6250 ; CUR(7,0); : INPUT "Kopiering klar. Tryck RETURN. "A$ 6260 GOTO 170 6270 DEF FNL{s(S) 6280 N=0 6290 FOR S1=S TO S+49 6300 N=N+1 6310 ; CUR(5,0) "L{ser sektor" S1 "p} drive" D 6320 Z=CALL(65100,S1) 6330 Sekt10$(N)=Sektor$ 6340 NEXT S1 6350 RETURN 0 6360 FNEND 6370 DEF FNSkriv(S) 6380 FOR J=1 TO 50 6390 ; CUR(6,0) "Skriver sektor" S+(J-1) "p} drive" D1 6400 Sektor$=Sekt10$(J) 6410 Z=CALL(65106,S+(J-1)) 6420 NEXT J 6430 RETURN 0 6440 FNEND 6450 DEF FNBin$(S) 6460 S$="" 6470 I=128 6480 IF (S AND I)<>0 THEN S$=S$+"I" ELSE S$=S$+"O" 6481 IF I=1. THEN RETURN S$ 6490 I=I/2 6510 GOTO 6480 6520 FNEND 7000 ; RED; 7010 ; CHR$(12);"Radera fil." 7020 INPUT "Ange fil: "A$ 7021 IF A$="" THEN 100 7030 INPUT "[r du s{ker (J/N)? "S$ 7040 IF S$="" THEN 100 7041 S$=LEFT$(S$,1) 7042 IF S$="J" OR S$="j" THEN 7050 7043 IF A$="N" OR S$="n" THEN 100 7044 GOTO 7030 7050 OPEN A$ AS FILE 1 7060 ON ERROR GOTO 7070 KILL A$ 7080 INPUT "Klart. Tryck return."S$ 7090 GOTO 100 7100 ; "Filen finns ej. Tryck f|r meny." 7110 ON ERROR GOTO 7120 GET A$ 7130 GOTO 100 9000 ; CHR$(12) "Bibliotek." 9010 ; CUR(1,0); : INPUT "Drive: "D 9020 POKE 64769,8+D 9030 A=0 9040 K=-1 9050 FOR I=16 TO 32 9060 Z=CALL(65100,I) 9070 FOR P=64516 TO 64768 STEP 16 9080 FOR J=P TO P+11 9090 IF J=P+8 THEN S$=S$+"." 9100 S$=S$+CHR$(PEEK(J)) 9110 NEXT J 9120 IF ASCII(LEFT$(S$,1))<32 OR ASCII(LEFT$(S$,1))>127 THEN 9160 9130 K=K+1 : IF K=5 THEN K=0 : A=A+1 : ; 9140 ; S$, 9150 IF K=4 AND A>20 THEN GET A$ 9160 S$="" : NEXT P 9170 NEXT I 9180 ; : INPUT "Tryck return."A$ : GOTO 100 10000 ; CHR$(12) MAG; 10001 ; CUR(24,0) MAG "Avbryt med PF8." 10010 ; CUR(0,0) "L{sa en icke textfil." : ; "Oskrivbara tecken skrivs som en punkt." 10020 INPUT "Vilken fil: "S$ 10030 ON ERROR GOTO 10920 10040 OPEN S$ AS FILE 1 10041 ON ERROR GOTO 10900 10050 P=POSIT(1) : GET #1,S$ COUNT 60 10060 FOR S=1 TO 60 10070 IF ASCII(MID$(S$,S,1))<32 OR ASCII(MID$(S$,S,1))>127 THEN MID$(S$,S,1)="." 10080 NEXT S 10090 ; P,S$ 10100 IF P>1200 THEN GET S$ : IF S$=F$(8) THEN 100 10110 GOTO 10050 10900 INPUT "Filen slut. Tryck return."S$ 10910 GOTO 100 10920 ; "Filen fanns ej. Tryck ." 10930 GET S$ : IF S$=CHR$(24) THEN 10000 ELSE 100 11000 ; CHR$(12) GRN 11010 ; CUR(0,0) "L{sa en textfil." 11020 S=0 11030 INPUT "Vilken fil: "S$ 11040 IF S$="" 100 11050 OPEN S$ AS FILE 1 11060 POSIT #1,1 : GET #1,S$ 11070 IF S$=CHR$(0) THEN ; "Detta {r ingen textfil. Tryck ." : GET S$ : IF S$=CHR$(24) THEN 11000 ELSE 100 11080 POSIT #1,0 11090 ON ERROR GOTO 11130 11100 INPUT LINE #1,S$ 11110 ; S$; : S=S+1 11120 IF S>15 THEN GET S$ : GOTO 11100 ELSE GOTO 11100 11130 ; "Filen slut. Tryck RETURN." : INPUT ""S$ : ON ERROR GOTO : GOTO 100 12000 ; CHR$(12) CYA 12010 ON ERROR GOTO 12000 12020 INPUT "Vilket program: "S$ 12030 IF S$="" THEN 100 12040 OPEN S$ AS FILE 1 12050 POSIT #1,1 : GET #1,S$ 12060 IF S$<>CHR$(0) THEN ; "Det var ingen BAC fil. Tryck ." : GET S$ : IF S$=CHR$(24) THEN 12000 ELSE 100 12070 POSIT #1,0 12080 GET #1,S$ 12090 ; CUR(3,0) "BASIC version:" ASCII(S$) 12100 POSIT #1,2 12110 GET #1,S$ 12120 S=ASCII(S$) 12130 IF S AND 1 ; "Fixed-up." 12140 IF S AND 2 ; "Listskydd finns." ELSE ; "Ej listskyddat." 12150 IF S AND 4 ; "Dubbel precision." ELSE ; "Enkel precision:" 12160 IF S AND 8 ; "Flyttal {r allokerade." ELSE ; "Flyttal {r ej allokerade." 12170 IF S AND 16 ; "Flyttal finns i COMMON." ELSE ; "Flyttal finns ej i COMMON." 12180 IF S AND 128 ; "Ny error hantering anv{nds." ELSE ; "Ny error hantering anv{nds ej." 12190 POSIT #1,20 : GET #1,A$ : IF A$<>CHR$(135) ; "Programmet {r squeezat." 12200 POSIT #1,4 12210 GET #1,S$ COUNT 2 12220 ; "Program l{ngd:" ASCII(RIGHT$(S$,2))*256+ASCII(LEFT$(S$,1)) 12230 POSIT #1,10 12240 GET #1,S$ COUNT 2 12250 ; "Antal variabler:" ASCII(RIGHT$(S$,2))*256+ASCII(LEFT$(S$,1)) 12260 INPUT "Tryck return."S$ 12270 GOTO 100 65535 END