1 REM Ins{nt av 559 10 REM  DISKEDITOR 20 REM  BENGT HOLGERSSON <559> 30 REM  STORA NYGATAN 42 40 REM  211 37 MALM\ 50 REM  040/114926 60 REM  Version 831207 70 DIM D$=0%,A$=256%,C$=14%,T$=30%,R$=88%,R1$=36%,H$=5%,H1$=16% 80 A%=PEEK(65065%)+SWAP%(PEEK(65066%)) : POKE A%+4%,0%,1%,0%,245%,0%,1% : A%=PEEK(A%+16%)+SWAP%(PEEK(A%+17%)) 90 POKE 65408%,235%,6%,0%,126%,254%,32%,56%,8%,254%,128%,48%,4%,35%,16%,244%,201%,62%,46%,119%,24%,247% 100 DEFFNA%=PEEK(884%+2%*R%)+SWAP%(PEEK(885%+2%*R%))+K% 110 DEFFNF%=(PEEK(62720%) AND 240%)/16%+(PEEK(62720) AND 15%)*15% 120 R$=CUR(17%,0%)+SPACE$(80%)+CUR(17%,0%) : C$=CHR$(94%,126%,30%,13%)+CHR$(8%,9%,18%,23%)+CHR$(4%,5%,6%,2%) 130 C$=C$+CHR$(20%,16%) : R1$=CUR(13%,28%)+SPACE$(12%)+CUR(14%,28%)+SPACE$(12%)+CUR(13%,28%) : H1$='0123456789ABCDEF' 140 GOSUB 200 : GOSUB 340 : GOSUB 370 : GOSUB 750 : GOSUB 260 150 REM  Main 160 ; CUR(R%,K%); : GET T$ : ; R$; 170 ON INSTR(1%,C$,T$)+1% GOSUB 190,600,600,600,630,670,710,750,770,790,810,830,870,910,980 180 GOSUB 260 : GOTO 160 190 ; R$CHR$(7%)'Bad command !!' : RETURN 200 REM  Menu 210 ; CHR$(12%)CUR(7%,0%)STRING$(40%,127%)TAB(9%)'Commands:'TAB(27%)'' : ; '^ up RETURN down ' 220 ; '<- left -> right ' : ; 'Ctr-R read Ctr-W write ' : ; 'Ctr-F forw Ctr-B backw ' 230 ; 'Ctr-T type Ctr-P poke ' : ; 'Ctr-D drive Ctr-E dens ' 240 ; CUR(20%,0%)'HEX'CUR(22%,0%)'DEC'; 250 RETURN 260 REM  Screen 270 P%=R%*40%+K% : ; CUR(8%,28%)'Drive 'D%CUR(9%,28%)'Track 'T%' 'CUR(10%,28%)'Sector'S%; 280 ; CUR(12%,28%)'Byte 'P%' 'CUR(11%,28%)'Dens '; : IF T1%=39% ; 'S' ELSE ; 'D' 290 ; R1$; : IF T%>2% ; 'Filenr'NUM$(FNF%)CUR(14%,28%)'Block 'NUM$(PEEK(62721%)+256*PEEK(62722%)); 300 FOR N%=0% TO 6% : N1%=P%+N%-3% : IF N1%<0% OR N1%>255% ; CUR(21%,N%*5%+3%)' 'CUR(23%,N%*5%+3%)' '; : GOTO 320 310 H%=PEEK(62720%+N1%) : GOSUB 1130 : ; CUR(21%,N%*5%+3%)H$CUR(23%,N%*5%+2%)H%' '; 320 NEXT N% : FOR N%=32482% TO 32484% : POKE N%,PEEK(N%) OR 128% : POKE N%+256%,PEEK(N%+256%) OR 128% : NEXT N% 330 ; CUR(0%,0%)A$; : RETURN 340 REM  Density:? 350 ; R$'Density:(S/D)'; : INPUT T$ : N%=ASC(T$) AND 95% : IF N%=83% T1%=39% : RETURN 360 IF N%=68% T1%=79% : RETURN ELSE 350 370 REM  Drive:? 380 ONERRORGOTO 380 : ; R$'Drive:'; : INPUT D% : IF D%>1% OR D%<0% 380 390 POKE 64769%,D% 400 ONERRORGOTO 0 : RETURN 410 REM  Track:? Sector:? 420 ONERRORGOTO 420 : ; R$'Track:'; : INPUT T% : IF T%<0% OR T%>T1% 420 430 ONERRORGOTO 430 : ; R$'Sector:'; : INPUT S% : IF S%<0% OR S%>7% 430 440 POKE 64786%,0%,245% : GOTO 400 450 REM  Read sector 460 N%=CALL(24678%,SWAP%(T%)+32%*S%) 470 GOSUB 490 : IF PEEK(64789%) 540 480 ; R$ : RETURN 490 REM  ASCII 500 A$=D$ : N%=CALL(65408%,A%) : RETURN 510 REM  Write sector 520 N%=CALL(24675%,SWAP%(T%)+32%*S%) 530 IF PEEK(64789%) 540 ELSE 480 540 REM  Disc error 550 ; R$CHR$(7%); 560 IF PEEK(64789%) AND 16% ; 'Formatting error !!' : RETURN 570 IF PEEK(64789%) AND 64% ; 'Disc write protected !!' : RETURN 580 IF PEEK(64789%) AND 128% ; 'Disc not ready !!' : RETURN 590 ; 'Disc error !!' : RETURN 600 REM  Cursor up 610 IF R%>0% R%=R%-1% 620 RETURN 630 REM  Cursor down 640 IF R%<5% R%=R%+1% : RETURN 650 IF R%<6% AND K%<16% R%=R%+1% 660 RETURN 670 REM  Cursor left 680 IF K%>0% K%=K%-1% : RETURN 690 IF R%>0% K%=39% : GOTO 610 700 RETURN 710 REM  Cursor right 720 IF (R%<6% AND K%<39%) OR (K%<15%) K%=K%+1% : RETURN 730 IF R%<6% K%=0% : GOTO 640 740 RETURN 750 REM  Ctr-R 760 GOSUB 410 : GOSUB 450 : RETURN 770 REM  Ctr-W 780 GOSUB 410 : GOSUB 510 : RETURN 790 REM  Ctr-D 800 GOSUB 370 : RETURN 810 REM  Ctr-E 820 GOSUB 340 : RETURN 830 REM  Ctr-F 840 S%=S%+1% : IF S%>7% S%=0% : T%=T%+1% 850 IF T%>T1% T%=T1% : S%=7% 860 GOSUB 450 : RETURN 870 REM  Ctr-B 880 S%=S%-1% : IF S%<0% S%=7% : T%=T%-1% 890 IF T%<0% T%=0% : S%=0% 900 GOTO 860 910 REM  Ctr-T 920 ; R$'Type (Terminate with RETURN)'CUR(R%,K%); : GET T$ : IF T$>CHR$(31%) 960 930 IF T$=CHR$(13%) GOSUB 490 : ; R$; : RETURN 940 IF T$=CHR$(8%) GOSUB 670 : GOTO 970 950 IF T$=CHR$(9%) GOSUB 710 : GOTO 970 ELSE 920 960 GOSUB 710 : POKE 62720%+P%,ASC(T$) 970 GOSUB 490 : GOSUB 260 : GOTO 920 980 REM  Ctr-P 990 ; R$'Poke (Hex/Dec)'; : INPUT T$ : N%=ASC(T$) AND 95% : IF N%=72% H1%=1% ELSE IF N%=68% H1%=0% ELSE 990 1000 H$='0' : ; R$'Poke '; : IF H1% ; '(Hex '; ELSE ; '(Dec '; 1010 ; 'separated with ,)' 1020 POKE FNA%,PEEK(FNA%) OR 128% : ; CUR(18%,0%)'(Terminate with RETURN)'; 1030 GOSUB 1090 : IF T$=CHR$(13%) GOSUB 490 : ; R$; : RETURN 1040 IF (H1%=0%) IF N% AND (VAL(H$)<256%) 1030 1050 IF (H1%=1%) IF N% AND (LEN(H$)<4%) 1030 1060 IF T$=',' 1070 ELSE ; CHR$(7%); : GOTO 1000 1070 GOSUB 710 : IF H1%=0% H%=VAL(H$) ELSE GOSUB 1140 1080 POKE 62720%+P%,H% : GOSUB 490 : GOSUB 260 : GOTO 1000 1090 REM  Inmatning 1100 GET T$ : N%=INSTR(1%,LEFT$(H1$,10%+6%*H1%),T$) : IF N% H$=H$+T$ : ; T$; 1110 RETURN 1120 REM  Dec/Hex 1130 H$=MID$(H1$,H%/16%+1%,1%)+MID$(H1$,(H% AND 15%)+1%,1%) : RETURN 1140 REM  Hex/Dec 1150 H%=0% : FOR N%=1% TO LEN(H$) : H%=H%*16%+INSTR(1%,H1$,MID$(H$,N%,1%))-1% : NEXT N% : RETURN