Listing of file='@DSCFIG' on disk='vmedia/CS_D_cassette_diags.wvd.zip'
# Sector 99, program filename = '@DSCFIG' 0010 REM ! @DSCFIG - 09/13/88 DISPLAY DS CONFIGURATION : REM written by Roger M. Kirk Jr. 02/24/87 TBO mods : REM ! (c) Copyright, Wang Laboratories, Inc., 1987. All rights reserved. 0020 REM %variables : DIM E$32,E$(32)32,P$32,G$(32)3,D$(16)40,P(16),H$(32)1,P1$2,B$3,T$80,M1$50 ,M2$50,G1$1,D$3,K$1,Z4$4,G$17,P0$(32)1 0030 P$=HEX(10000102030405060708090A0B0C0D0E10000102030405060708090A0B0C0D0E) 0040 H$()="0123456789ABCDEF0123456789ABCDEF" 0050 RESTORE 0060 FOR I = 1 TO 16 : READ D$(I) : READ P(I) : NEXT I 0070 REM %screen 1 : SELECT PRINT 005(80) : PRINT HEX(0D030202000F020402000F06); 0080 T$="D S C o n f i g u r a t i o n" : IF V=1THEN T$="P r o t e c t / U n p r o t e c t" 0090 IF V=1 THEN PRINT AT(1,29);"D S S u r f a c e s"; 0100 PRINT AT(0,40-LEN(T$)/2);HEX(0F);T$ : PRINT AT(23,55);"FN/TAB - Exit";AT(22,55);"RETURN - Proceed"; 0110 GOSUB '50("(c) Copyright, Wang Laboratories, Inc., 1987"," All rights reserved.") 0115 B$="D10" 0120 REM %get DS address : PRINT AT(8,15);"Base address of DS unit (D10, D20, or D30): "; : LINPUT HEX(0E),-B$ : IF B$="RUN"THEN 115 : PRINT HEX(06); : GOSUB '50(" "," ") : $TRAN(B$,"DdBb")R : IF POS("DdBb"=STR(B$,1,1))<>0 AND POS("123"=STR(B$,2,1))<>0 AND STR(B$,3, 1)="0" THEN 130 : GOSUB '50(HEX(0E),"Illegal address") : GOTO 120 0130 SELECT #2 <B$> : ERRORGOSUB '50(HEX(0E),"Invalid address") : GOTO 120 0140 D$="D"&STR(B$,2,1)&"0" 0145 IF V=0THEN PRINT AT(21,58);"RUN - Expand display";AT(22,64);"Restart Prog ram" 0150 REM %get DS status for each possible platter 0160 GOSUB '50(HEX(0E),"Getting device status") : GOSUB 760 0240 REM %DS software version : PRINT AT(8,15,60); : M2$=" Protocol level: "&STR(E$(1),3,1) : M1$="DS PROM revision level: "&STR(E$(1),4,2) : GOSUB '50(M1$,M2$) : PRINT AT(1,0); 0245 IF STR(E$(),4,2)>"01"THEN V1=1 : IF V=1 THEN GOSUB 3010 0250 REM %display info. on each drive : FOR I=1 TO 32 : IF I=17 THEN STR(D$,2,1)=OR HEX(04) : GOSUB '120 (STR(E$(I),2,1)) : NEXT I 0260 REM %get user command : KEYIN K$,,270 : IF K$=HEX(82)THEN GOSUB 3005 : IF K$<>HEX(0D)THEN 260 : GOTO 10 0270 IF K$=HEX(7F) OR K$=HEX(7E) THEN 410 : GOTO 260 0280 REM %display info. on drive i 0290 DEFFN'120 (G1$) : IF STR(G$(I),3,1)=HEX(04)THEN 380 0300 MAT SEARCH H$(),=G1$ TO P1$ : IF P1$=HEX(0000)THEN GOTO 380 : P=VAL(P1$,2) 0310 PRINT BOX(2,75); 0320 PRINT HEX(0E20);STR(D$(P));HEX(0F); : IF STR(E$(I),17,1)=HEX(00)THEN 325 0321 PRINT HEX(0E);"failed built-in test" : GOTO 330 0325 PRINT "with"; VAL(STR(E$(I),6,3),3);"sectors"; : IF P(P)>1 THEN PRINT "/platter" : ELSE PRINT 0330 IF I<32 THEN 350 0340 PRINT " Address: "; : GOTO 360 0350 IF P(P)=1THEN PRINT " 1 platter: "; : ELSE PRINTUSING 420;P(P); 0360 FOR P1=1TO P(P) : PRINT " ";STR(D$,1,2);H$(I+P1-1); : NEXT P1 : PRINT : PRINT 0370 I=I+P(P)-1 0380 RETURN 0390 REM %exit 0400 DEFFN'127 0410 DEFFN'126 : LOAD RUN "@MENU" 0420 % ## platters: 0430 REM %data 0440 DATA "RAM Disk",1 0450 DATA "Unknown",1 0460 DATA "10 MB Removable Hard Disk",1 0470 DATA "10 MB Fixed Hard Disk",1 0480 DATA "20 MB Fixed Hard Disk",2 0490 DATA "32 MB Fixed Hard Disk",2 0500 DATA "64 MB Fixed Hard Disk",4 0510 DATA "140 MB Fixed Hard Disk",14 0520 DATA "32 MB Fixed Hard Disk",2 0530 DATA "112 MB Fixed Hard Disk",7 0540 DATA "Unknown",1 0550 DATA "Unknown",1 0560 DATA "Unknown",1 0570 DATA "Unknown",1 0580 DATA "Streaming Cassette Tape Drive",1 0590 DATA "Diskette Drive",1 0600 DEFFN'50(M1$,M2$) : REM %'50 - display message at lower left corner (lines 22,23) : PRINT AT(22,0);STR(M1$);AT(23,0);STR(M2$);HEX(0F); : RETURN 0700 GOSUB '50(HEX(0E),"Getting device status") : STR(B$,2,1)=STR(B$,2,1)AND HEX(33) : SELECT #2<B$> 0760 FOR I = 1 TO 32 : STR(G$,1,1)=STR(P$,I,1)OR HEX(20) : IF I<>17 THEN 780 0770 STR(B$,2,1)=OR HEX(04) : SELECT #2<B$> : ERRORSTOP "SOMETHING'S GROSSLY WRONG HERE!" 0780 STR(G$,2,7)=ALL(00) : $GIO STATUS REQUEST #2 (0E14 0F00 12E2 0600 0700 70A0 4002 88D0 7040 6A10 6816 4000 8705 1A00 C340, G$)G$;STR(E$,,VAL(STR(G$,5,1))) : IF STR(E$,2,1)=HEX(00)THEN STR(E$,18,1)=HEX(00) 0790 G1$=STR(G$,8,1) AND HEX(10) : IF G1$=HEX(00) THEN 800 : GOSUB '50(HEX(0E),"Disk unavailable") : RETURN CLEAR ALL : GOTO 120 0800 IF STR(G$,8,1)<>HEX(00) THEN 810 : IF STR(E$,1,1)=HEX(33)THEN 830 : IF I=32 AND STR(E$,1,2)=HEX(4533) THEN 820 0810 GOSUB '50(HEX(0E),"Specified disk is not a DS") : RETURN CLEAR ALL : GOTO 120 0820 STR(E$,1,2)=HEX(3345) 0830 E$(I)=E$ : G$(I)=STR(G$,6,3) : NEXT I : GOSUB '50(" "," ") : RETURN 3000 REM %^.Examine disk addresses 3005 GOSUB 700 3010 SELECT PRINT 005(80) : IF V=0THEN PRINT HEX(03) : PRINT HEX(010E);TAB(22);"C u r r e n t P l a t t e r U s e" : IF V1=0THEN Z4$="n/a" 3020 PRINT AT(2,40);BOX(2,0);AT(2,0);BOX(2,79) 3030 PRINT " Disk Index Current Catalog Pro- Disk Index Current C atalog Pro- " 3040 PRINT " Address Size End Maximum tect Address Size End M aximum tect " 3060 DIM X$(32)4,Z8$80,A$(16)16,Z1$1,D$3,Z2$2,Z7$70 3070 DIM X$40,X4$40 3080 D$=B$ : $TRAN(D$,"152637")R 3090 X$()=D$ : GOSUB 3140 : PRINT 3100 PRINT AT(23,55);"FN/TAB - Exit";AT(22,55);"RETURN - Restart Program"; 3110 IF V=0THEN PRINT AT(21,58);"RUN - Repeat Screen" 3120 B=0 : ON V GOSUB 7010 3130 RETURN 3140 R1,J=0 3150 J=J+1 : IF J=17THEN R1=0 : D$=X$(J) : IF D$=" "THEN RETURN 3160 R1=R1+1 : R=00 : IF STR(D$,2)>"4"THEN R=R+40 : PRINT AT(R1+3,R); 3170 Z8$=" " : GOSUB '200(D$,X$()) : ON X4 GOSUB 3290,3300,3310,3330 3180 IF E=48THEN 3220 : IF E=91THEN 3220 3190 PRINTUSING " ### ",D$; 3195 K$=STR(E$(J),18) 3200 IF J=1AND E=98THEN Z8$="Door open or no diskette" 3210 K$=K$AND HEX(83) : $TRAN(K$,HEX(23005301530253034880488148824883))R : STR(X$(J),4)=K$ 3212 IF V1=1THEN GOSUB 7135 : IF A>0THEN 3213 : C$=" No" : B,C=0 : GOTO 3215 3213 C$=" " : CONVERT ATO C$,(###) : IF STR(A$(),,1)>HEX(00)THEN STR(C$,4)="'" 3214 IF STR(C$,,1)="0"THEN STR(C$,,POS(C$>"0")-1 )=" " 3215 IF Z8$="Yes"THEN PRINTUSING 3250,C$,B,C,Z4$; : ELSE PRINTUSING 3240,Z8$,Z4$ : GOTO 3150 3220 IF R1>1THEN R1=R1-1 : IF J<32THEN 3150 : Z8$=Z8$&" None" : STR(X$(J),1)=" " : RETURN 3240 %############################ #### 3250 % ##### ####### ####### #### 3280 REM %.Get Rcv Disk address 3290 Z8$=Z8$& " disk not in table" : RETURN 3300 Z8$="Hogged or not configured" : PRINT Z8$ : X$()=" " : RETURN CLEAR : RETURN 3310 Z8$="Is unavailable" : RETURN CLEAR 3320 PRINT HEX(0D);Z8$ : PRINT : X$()=" " : RETURN 3330 Z8$="disk not in list" : RETURN 3340 DEFFN '200 (D$,X$()) 3350 X4=0 : MAT SEARCH X$(),=STR(D$,,3)TO X7$ STEP 4 : IF VAL(X7$,2)=0 THEN 3460 : SELECT #2 <D$> : ERRORX=ERR : RETURN 3360 $OPEN 3450,#2 : ERRORX4=2 : RETURN 3370 $CLOSE#2 : Z$=" " : HEXPACK Z$ FROM STR(D$,2,1) : IF J=1THEN GOSUB 3470 3380 $GIO (7310 0200 0301 1222 70A0 4000 8600,Z$) : ERRORX=ERR : X4=3 : Z8$="FROM $GIO AT 360" : RETURN 3390 IF STR(Z$,8,1)=HEX(00) THEN 3400 : X4=3 : RETURN 3400 LIMITS T#2,"START",A,B,C,E : ERRORE=ERR : Z7$=ERR$(E) : Z8$="Error " : CONVERT E TO STR(Z8$,7,2),(##) : Z8$=Z7$ : IF E<>85THEN RETURN 3410 Z8$="Yes" : E=0 3420 DATA LOAD BA T#2,(0)A$() 3430 A=VAL(STR(A$(1),2)) : B=VAL(STR(A$(1),3),2)-1 : C=VAL(STR(A$(1),5),2)-1 3440 RETURN 3450 X4=2 : RETURN 3460 X4=4 : RETURN 3470 REM Z8$="DS cabinet" : X$()=" " : Z2$="D"&STR(D$,2,1) : X4$="0123456789ABCDEF" : FOR A=1TO 16 : X$(A)=Z2$&STR(X4$,A,1) : NEXT A : ADD(STR(Z2$,2,1),04) : FOR A=1 TO 16 : X$(A+16)=Z2$&STR(X4$,A,1) : NEXT A : RETURN 6999 REM %^.Protect/Unprotect logic 7010 DIM V0$(32)1,V$(32)1 : REM %0 V0$( Protect at entry, V$( Protect at RUN 7015 PRINT AT(21,58);"RUN - Accept Screen?" 7018 IF STR(X$(),4,1)=" "THEN STR(X$(),4,1)="#" 7019 PRINT AT(22,64,15);"Restart Program" 7020 A=0 : FOR I=1TO 32 : K$=STR(X$(I),4) : IF K$<>" "THEN DO : A=A+1 : X$(A)=X$(I) : V0$(A),V$(A)=K$ : K$=STR(X$(I),3) : IF K$="0"THEN I1=0 : IF K$="1"THEN I1=1 : P0$(A)=BIN(I1) : I1=I1+1 : END DO : NEXT I : IF A=32THEN 7030 : FOR I=A+1TO 32 : X$(I)=" " : NEXT I 7030 REM .Set up prompting : R=4 : FOR I=1TO A : GOSUB 7120 : NEXT I : GOSUB 7145 7040 I=1 7050 PRINT HEX(0E); : GOSUB 7120 : PRINT HEX(0808080806); : KEYIN K$ 7060 IF K$=HEX(7F) OR K$=HEX(7E) THEN 410 : REM /.TAB : IF K$=HEX(82)THEN 7150 : REM /.RUN : IF K$=HEX(0D)THEN 10 : REM /.CR 7070 IF K$=HEX(08)THEN 7140 7080 $TRAN(K$,"HhNnSs")R : IF K$="H"OR K$="N" OR K$="S"THEN V$(I)=K$ : IF V0$(I)="H"THEN K$,V$(I)="H" 7110 GOSUB 7125 : I=I+1 : IF I=A+1THEN 7040 : GOTO 7050 7120 K$=STR(X$(I),3) : I1=VAL(P0$(I)) 7125 K$=V$(I) : GOSUB 7135 7130 J=34 : IF STR(X$(I),2,1)>"3"THEN J=J+40 : PRINT AT(R+I1,J);Z4$;HEX(0F); : RETURN 7135 IF K$="H"THEN Z4$="Hard" : IF K$="S"THEN Z4$="Soft" : IF K$="#"OR K$="N"THEN Z4$="No"&HEX(8080) : IF V1=0THEN Z4$="n/a" : RETURN 7140 GOSUB 7120 : I=I-1 : IF I>0THEN 7050 : I=A : GOTO 7050 7145 PRINT AT(21,0);"Valid keys to alter Protect" : IF V1=0THEN 7148 : PRINT AT(23,0,50);"S to Soft Protect; H to Hard Protect";AT(22,0,50);"N to set 'No' to disable Soft Protect" : RETURN 7148 PRINT AT(23,0,50);HEX(0E);"Rev. 01 does not allow Protect alteration";HEX (0F01); : RETURN 7150 PRINT AT(23,0,50);AT(21,0,80); : IF V$()=V0$() THEN PRINT "No changes were made" : ELSE PRINT "Highlighted fields denote changes made" 7160 FOR I=1 TO A : PRINT HEX(0E); : IF V$(I)=V0$(I)THEN PRINT HEX(0F); : GOSUB 7120 : NEXT I 7165 IF V1=0THEN 10 7170 PRINT AT(22,64,15);"Proceed";AT(22,0,50);"Do you wish to set new defaults (Y or N)"; : K$="N" : LINPUT HEX(0E),-K$ : $TRAN(K$,"YYNN")R : I=POS("YN"=K$) : IF I<1THEN 7170 7180 IF V$()=V0$()THEN ON I GOTO 7010,10 : ON I GOTO 7200,7010 : STOP # 7190 REM %^.Apply Protection desired : REM .D$() = surfaces V$() = Protection 7200 PRINT AT(22,64,15);"Proceed" : FOR I=1 TO A : K$=V$(I) : D$=X$(I) : IF K$<>V0$(I)THEN IF POS("HSN"=K$)>0THEN GOSUB 7210 : NEXT I : GOSUB '50(HEX(0E06),"Desired Protection Applied") : PRINT AT(22,60); : GOTO 260 7205 REM %.Enable/disable Protection : REM .K$="N or H or S" D$=disk surface 7210 REM .K$ denotes protection wanted..N=No., H=Hard, S=Soft 7220 SELECT #1<D$> : ERRORSTOP # 7225 REM .Convert hex platter to DS internal format (except for tape) 7230 HEXPACKG1$FROM STR(D$,2,2) : G1$=AND HEX(0F)ADDHEX(0F)AND HEX(0F)OR HEX(20) : $TRAN(G1$,HEX(302F))R 7235 REM .Set $GIO argument byte 1=platter byte 2=Protect mechanism 7240 G$=G1$ : IF K$="N"THEN STR(G$,2,1)=HEX(00) : ELSE STR(G$,2,1)=HEX(01) 7245 REM .Byte 2 = Protect mechanism byte : REM .Bit 0, '01' bit 0=OFF disabled, 1=ON enabled : REM .Bit 1, '02' bit 0=OFF one platter, 1=ON All platters : REM .Bit 7, '80' bit 0=OFF Soft Protect, 1=ON Hard protect 7250 IF K$="H"THEN STR(G$,2,1)=OR HEX(80) 7260 $GIO PROTECT OR ENABLE PLATTER #1(0600 0700 70A0 68D0 7040 6A10 681C 4220 4000,G$) 7270 RETURN