Listing of file='SUPERZAP' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'
# Sector 1954, program filename = 'SUPERZAP' 0010 REM % FILEZAP 0020 REM Program name = SUPERZAP 0030 REM Version = 3.9 0040 REM Date of last revision = 24 FEB 81 0050 REM Author = Steve McGarry 0060 REM --------------------------------------------- 0070 REM Version = 8434 0080 REM Date of last revision = 26 MAR 84 0090 REM Author = Paul J. Hossfeld 0100 REM 0110 REM Added use of curser move arrows and fixed SF'23 0120 REM --------------------------------------------- 0130 REM % 0140 PRINT HEX(0202000F) 0150 DIM A$(16)16,B,B1,B0$1,D$3,H$2,I$4,I1$4,K$1,N$5,N1$2,S$5,S0$1,X$1,X(3) : PRINT HEX(0306);BOX(3,79);BOX(1,16),BOX(1,29);BOX(1,50);BOX(1,61);BOX(1,7 9) : PRINT HEX(0A0A0A);TAB(7);BOX(16,47);AT(3,0);BOX(16,54);BOX(16,71);BOX(21, 79);BOX(16,79) 0160 DATA LOAD DA T(19583)D$ : ERRORD$="310" 0170 PRINT AT(1,29);BOX(2,21); AT(1,32) ;"WANG LABS, INC.";AT(2,30);"SUPERZAP - Rev. 8434" : GOSUB 210 : GOTO 190 0180 E=ERR : IF E>0THEN 200 0190 F,R=0 : GOTO 330 0200 PRINT AT(0,30,31);HEX(0E07);"ERROR DURING READ" : GOTO 330 0210 PRINT AT(19,1,);"'0 = Change sector";TAB(22);"'12 /NEXT SCRN = Next secto r";TAB(55);" '23 = File limits" : PRINT " '1 = Change device";TAB(22);"'13 /PREV SCRN = Previous sector"; T AB(55);" EDIT = Edit mode" 0220 PRINT " '2 = Decimal to hex" : PRINT " '3 = Hex to decimal" : PRINT TAB(57); "'31 = Exit program"; : M=1 : RETURN 0230 PRINT AT(19,1,);"'0 = Switch Hex/ASCII";TAB(25);" '8 = Fill sector";TAB(5 3); "'15 = Recall original data" : PRINT " '2 = Decimal to hex"; TAB(25);" '5 /Dn arrow = Down";TAB(53);"'16 = Save changes" 0240 PRINT " '3 = Hex to decimal";TAB(25); " '6 /Up arrow = Up"; TAB(53);"'23 = File limits" 0250 PRINT " '4 = End of sector";TAB(25);"'12 /Right arrow = Right" 0260 PRINT " '7 = Start of sector";TAB(25);"'13 /Left arrow = Left"; TAB(52);" EDIT = Display mode"; : M=2 : RETURN 0270 %KEYIN X$,500,500 0280 X$=" " : KEYIN X$,,300 : $BREAK255 : GOTO 280 0290 REM % ---------- DISPLAY ---------- 0300 IF X$=HEX(00)THEN 310 : IF X$=HEX(01)THEN 330 : IF X$=HEX(02)THEN GOSUB '2 : IF X$=HEX(03)THEN GOSUB '3 : IF X$=HEX(1F)THEN 9000 : IF X$=HEX(F0)THEN 410 : IF X$=HEX(0C) OR X$=HEX(43) OR X$=HEX(53) THEN 340 : IF X$=HEX(17) THEN GOSUB '23 : IF X$<>HEX(0D) AND X$<>HEX(42) AND X$<>HEX(52) THEN 270 : R=R-2 : IF R<0THEN R=0 : GOTO 340 0310 X$=" " 0320 PRINT AT(0,0,16);HEX(0E); : CONVERT FTO S$,(#####) : P=POS(S$<>"0") : IF P=0THEN S$="0" : ELSE S$=STR(S$,P) : LINPUT " Sector ?",?S$ : IF NUM(S$)<LEN(S$)THEN 320 : CONVERT S$TO R : GOTO 340 0330 PRINT AT(0,17);HEX(0E); : LINPUT "Device ?",?D$ : R=0 : PRINT AT(0,17);"Device : ";D$ : GOTO 320 0340 PRINT HEX(06);AT(0,0,16);" Sector :";R;TAB(17);"Device : ";D$;TAB(30);HEX (0E);"Loading " 0350 SELECT #8<D$> : F=R : DATA LOAD BA T#8,(R,R) A$() : ERRORGOTO 180 0360 PRINT AT(0,30,31);HEX(0E);"Printing" : PRINT HEX(0A0A) 0370 FOR J=1TO 16 : PRINT HEX(2020202020200E820F); : FOR K=1TO 15STEP 2 : PRINT TAB((K-1)*3+8);HEXOF(STR(A$(J),K,2)); : NEXT K : B$=A$(J) : FOR L=1TO 16 : IF STR(B$,L,1)<HEX(20)OR STR(B$,L,1)=HEX(80)THEN STR(B$,L,1)="." : NEXT L : PRINT TAB(55);STR(B$,,16) : PRINT HEX(0C);" " : NEXT J 0380 S=0 : IF M=2THEN 390 : PRINT AT(0,30,31);HEX(0E);"Display mode";HEX(0F06) : S=0 : GOTO 270 0390 IF Q=1THEN 420 : GOTO 710 0400 REM % ---------- EDIT ---------- 0410 GOSUB 230 : Q,Y,X=1 0420 B=0 : GOSUB 690 0430 IF S<>1THEN PRINT HEX(06);AT(0,30,21);HEX(0E);"Hex edit mode" : S=1 : K$=" " : D1,D2=0 0440 PRINT AT(0,51,10);"Byte :";(Y-1)*16+X;AT(Y+2,T+B);HEX(05); 0450 KEYIN K$,460,500 : GOTO 450 0460 PRINT HEX(06); : IF K$<"0"OR K$>"F"THEN 430 : IF K$>"9"AND K$<"A"THEN 430 0470 STR(H$,B+1,1)=K$ : HEXPACK STR(A$(Y),X,1)FROMH$ : IF B=1THEN 480 : B=1 : GOTO 670 0480 B=0 : IF X=16THEN 490 : D2=X+1 : GOTO 670 0490 D2=1 : IF Y<16THEN D1=Y+1 : ELSE D1=1 : GOTO 670 0500 PRINT HEX(06); : IF K$=HEX(05) OR K$=HEX(45) OR K$=HEX(55) AND Y<16THEN D1=Y+1 : ELSE IF K$=HEX(05) OR K$=HEX(45) OR K$=HEX(55) AND Y=16THEN D1=1 : IF K$=HEX(06) OR K$=HEX(46) OR K$=HEX(56) AND Y>1THEN D1=Y-1 : ELSE IF K$=HEX(06) OR K$=HEX(46) OR K$=HEX(56) AND Y=1THEN D1=16 : IF K$=HEX(0C) OR K$=HEX(4C) OR K$=HEX(5C) AND X<16THEN D2=X+1 0510 ELSE IF K$=HEX(0C) OR K$=HEX(4C) OR K$=HEX(5C) AND X=16THEN D2=1 : IF K$=HEX(0D) OR K$=HEX(4D) OR K$=HEX(5D) AND X>1THEN D2=X-1 : ELSE IF K$=HEX(0D) OR K$=HEX(4D) OR K$=HEX(5D) AND X=1THEN D2=16 : IF K$=HEX(04)THEN D1,D2=16 : IF K$=HEX(07)THEN D1,D2=1 0520 PRINT HEX(06); : IF K$=HEX(05)OR K$=HEX(45) OR K$=HEX(55) AND Y<16THEN D1=Y+1 : ELSE IF K$=HEX(05) OR K$=HEX(45) OR K$=HEX(55) AND Y=16THEN D1=1 : IF K$=HEX(06) OR K$=HEX(46) OR K$=HEX(56) AND Y>1THEN D1=Y-1 : ELSE IF K$=HEX(06) OR K$=HEX(46) OR K$=HEX(56) AND Y=1THEN D1=16 0530 IF K$=HEX(0C) OR K$=HEX(4C) OR K$=HEX(5C) AND X<16THEN D2=X+1 : ELSE IF K$=HEX(0C) OR K$=HEX(4C) OR K$=HEX(5C) AND X=16THEN D2=1 : IF K$=HEX(0D) OR K$=HEX(4D) OR K$=HEX(5D) AND X>1THEN D2=X-1 : ELSE IF K$=HEX(0D) OR K$=HEX(4D) OR K$=HEX(5D) AND X=1THEN D2=16 : IF K$=HEX(04)THEN D1,D2=16 : IF K$=HEX(07)THEN D1,D2=1 0540 IF K$<>HEX(F0)THEN 550 : X$=HEX(0D) : GOSUB 700 : GOSUB 210 : R=F : GOTO 340 0550 IF K$=HEX(17) THEN GOSUB '23 : IF K$=HEX(03) THEN GOSUB '3 : IF K$=HEX(02) THEN GOSUB '2 : IF K$<>HEX(0F)THEN 560 : R=F : GOTO 340 0560 IF K$<>HEX(10)THEN 600 0570 S0$="N" : GOSUB 700 : PRINT AT(0,30,31);HEX(0E07);"SAVE THIS SECTOR ?"; : LINPUT S0$ : S=0 : IF S0$="Y"THEN 580 : IF S0$="N"THEN 390 : GOTO 570 0580 DATA SAVE BA T#8,(F)A$() : ERRORPRINT AT(0,30,21);HEX(0E07);"ERROR DURING WRITE" : GOSUB 690 : IF Q=1THEN 440 : GOTO 730 0590 M=1 : GOSUB 700 : GOSUB 210 : GOTO 380 0600 IF K$<>HEX(00)THEN 610 : IF Q=1THEN Q=2 : ELSE Q=1 : GOTO 390 0610 IF K$<>HEX(08)THEN 660 : GOSUB 700 0620 IF Q=1THEN 640 : PRINT AT(0,30,31);HEX(0E);"Fill with byte ="; : H$="X" : LINPUT -STR(H$,1,1) : F9=0 : PRINT HEX(06); : IF STR(H$,1,1)>=" "AND STR(H$,1,1)<="z"THEN GOTO 630 : PRINT HEX(07); : GOTO 620 0630 A$()=ALL(H$) : PRINT AT(0,30,31);HEX(0E);"Filling" : PRINT HEX(0A0A) : GOTO 370 0640 PRINT AT(00,30,31); HEX(0E);"Fill with byte ="; : H$="00" : LINPUT -H$ : F9=0 : PRINT HEX(06); : IF STR(H$,1,1)<"0"OR STR(H$,1,1)>"9"AND STR(H$,1,1)<"A"OR STR(H$,1,1)>"F" THEN F9=1 : IF STR(H$,2,1)<"0"OR STR(H$,2,1)>"9"AND STR(H$,2,1)<"A"OR STR(H$,2,1)>"F" THEN F9=1 : IF F9=0THEN 650 : PRINT HEX(07); : GOTO 640 0650 PRINT AT(0,51,10) : HEXPACKB0$FROMH$ : A$()=ALL(B0$) : PRINT AT(0,30,31);HEX(0E);"Filling" : PRINT HEX(0A0A) : GOTO 370 0660 IF D1>0OR D2>0THEN B=0 0670 GOSUB 700 : IF D1>0THEN Y=D1 : IF D2>0THEN X=D2 : GOSUB 690 0680 IF Q=1THEN 430 : GOTO 720 0690 T=(X-1)*3+8 : IF MOD(X,2)=0THEN T=T-1 : STR(B$,1,1)=STR(A$(Y),X,1) : HEXUNPACK STR(B$,1,1) TO H$ : IF B$<HEX(20)OR B$=HEX(80)THEN B$="." : PRINT HEX(0E);AT(Y+2,T);H$;AT(Y+2,54+X);STR(B$,1,1) : RETURN 0700 STR(B$,1,1)=STR(A$(Y),X,1) : IF B$<HEX(20)OR B$=HEX(80)THEN B$="." : PRINT HEX(0F);AT(Y+2,T);H$;AT(Y+2,54+X);STR(B$,1,1) : RETURN 0710 GOSUB 690 0720 IF S<>2THEN PRINT HEX(06);AT(0,30,21);HEX(0E);"ASCII edit mode" : S=2 : K$=" " : D1,D2=0 : Q=2 0730 PRINT AT(0,51,10);"Byte :";(Y-1)*16+X;AT(Y+2,54+X);HEX(05); 0740 KEYIN K$,750,520 : GOTO 740 0750 PRINT HEX(06); : IF K$>=" "AND K$<="z"THEN 760 : PRINT HEX(05); : GOTO 740 0760 STR(A$(Y),X,1)=K$ : HEXUNPACKSTR(A$(Y),X,1)TO H$ : IF X=16THEN 770 : D2=X+1 : GOTO 670 0770 D2=1 : IF Y<16THEN D1=Y+1 : ELSE D1=1 : GOTO 670 0780 DEFFN'23 : REM % LIMITS : PRINT AT(01,29); BOX(-2,0);AT(01,50); BOX(-2,-0) ; AT(01,00,159);BOX(2,21 );HEX(0E); : LINPUT " Filename :",STR(F$,,8) : PRINT AT(01,01); HEX(0F); "Filename : ";STR(F$,,8) : PRINT HEX(0E); : LINPUT " Device :",D$ : PRINT HEX(060F); AT(02,01); "Device : ";D$ 0790 SELECT #14<D$> : LIMITS T#14,F$,B1,E,U,S : ERRORE=ERR : PRINT HEX(0E07); AT(02,15,14);"ERROR I-";E;HEX(0F); : RETURN 0795 S=((E-B1)+1)-U 0800 PRINT AT(01,00);HEX(06) ;BOX(2,56) ; AT(01,22); " start sector"; B1; TAB( 45); "used"; U; AT(02,22);" end sector"; E; TAB(45); "free"; S 0810 RETURN 1000 DEFFN'3 : REM % HEX TO DECMAL CONVERSION : I$=" " : PRINT AT(0,62,17);HEX(0E);"Hex ="; : LINPUT -I$ : FOR L9=1TO 4 : IF STR(I$,L9,1)=" "THEN 1010 : IF STR(I$,L9,1)<"0"OR STR(I$,L9,1)>"F"THEN 1000 : IF STR(I$,L9,1)>"9"AND STR(I$,L9,1)<"A"THEN 1000 1010 NEXT L9 : MAT COPY -STR(I$,1,LEN(I$)) TO -I$ : FOR L9=1 TO 4 : IF STR(I$,L9,1)=" " THEN STR(I$,L9,1)="0" : NEXT L9 : PRINT AT(0,62);HEX(0F);I$;" HEX ="; : HEXPACKI$FROMI$ : I=VAL(I$,2) : PRINT I;HEX(06);TAB(79) : RETURN 1020 DEFFN'2 : REM % DECIMAL TO HEX CONVERT : N$=" " 1030 PRINT AT(0,62,17);HEX(0E); 1040 LINPUT "Decimal =" -N$ : ERRORE=ERR : GOTO 1030 1050 CONVERT N$ TO N : ERRORE=ERR : N=0 1060 IF N> 65535 THEN 1030 : N1$ = BIN(N,2) : ERRORE=ERR : GOTO 1030 1070 PRINT AT(0,62,17);HEX(060F); : HEXPRINT N1$; 1080 N1=VAL(N1$,2) 1090 PRINT " HEX ="; N1 1100 RETURN 9000 DEFFN'31 : PRINT HEX(0306);AT(11,26);"EXITING SUPERZAP" : LOAD T"@MENU" 9010 DEFFN'15 : SCRATCH T"SUPERZAP" : SAVE T()"SUPERZAP" : STOP "- PROGRAM UPDATED"