Listing of file='@SCSICFG' on disk='vmedia/turbo-1.30.01.wvd.zip'
# Sector 2828, program filename = '@SCSICFG'
0010 REM % '@SCSICFG' ver 1.1 - CONFIG UTILITY SCSI2 03/11/93 - KKB (MEB)
0011 REM % REV 0.1 05/29/91 ADDED CHECK SCSI CONTROLLER.
0012 REM % rev 0.1 07/08/92 added new prom support for master/slave
0013 REM % REV 0.2 07/24/92 ADDED SAVE CONFIG AND LOAD CONFIG
0014 REM % REV 0.3 07/31/92 CORRECTED PROBLEMS WITH ONE DRIVE MASTER SLAVE
0015 REM % REV 0.4 08/02/92 Added Check Term one and display loaded config and
clear variables between screen 2 and 3
0016 REM % REV. 0.5 08/10/92 Fixes for more then 15 address per M/S. & new dri
ves
0017 REM % 11/19/92 MEB Changed wording on line 1230 & 1280. Allowed re-entry
of# if sectors exceeded available space (1300,1315,1320, & 1280).
0018 REM % 11/19/92 MEB Corrected bug where if configuration not acceptable se
ctor count was not reset. Line 1410, added T1=T.
0019 REM % rev 1.1 03/11/93 MEB Allowed 0 to complete sector assign. (1280,129
0) Correct password problems. (1510,1520) If assign >16 addr 1st slave ad
dr lost. (1340,1350) Added # to image to prevent X71. (660,670,720,760)
0040 REM % DEFINE AND SETUP VARIABLE
0050 REM % A$() - CONFIG DATA ARRAY
0060 REM % B$() - CURRENT CONFIG OF SCSI
0070 REM % C$() - DATA FOR 0-7 UNITS 8X48 BYTES
0080 REM % D$ - BASE DISK ADDRESS
0090 DIM A$(512)1,A1$(512)1,B$(1024)1,C$(8)48,C(8),B$8,C$4,D$3,D1$(16,2)3,E$2,
F$4,G$4,H$(32),I$1,J$(8)32,K$1,K1$1,L$(16,2),M$(29)1,M1$50,M2$50,T$80,A(3
2),B(32),A1(8),B1(32),U$(16,2)1
: A$()=ALL(FF)
: E$="01"
: I$="0"
: RESTORE LINE8190
: MAT READ M$(30)1
0100 DIM X$(16,2)3,A9$(16),Z1$1,B1$8,D4$3,Z2$2,Z7$70,X$40,X4$40,I$(16,2)6,E$(1
6,2)8,N$(16,2)
: A$(),A1$(),N$(),V3$,L$()=ALL(20)
: B1$="#scsicfg"
: REM default config file name
0110 REM % START SECTOR OF THE FIRST PLATTER
: S=2
0120 REM % NEXT PLATTER START ADDRESS=S1
: S1=2
0130 REM % TOTAL NUMBER OF 512 BYTE SECTORS = T
: REM T=8388604
0140 REM % ASSIGN START OF FIRST PLATTER
: F$=HEX(02000000)
0150 REM % 'P' IS THE POINTER NEXT PLATTER START
: P=5
0160 REM % SCREEN 1
: SELECT PRINT 005(80)
: PRINT HEX(030602020F020402000F06);
: T$="S C S I C o n f i g u r a t i o n"
: PRINT AT(0,40-LEN(T$)/2);"";T$
: PRINT AT(23,55);"FN/TAB - Exit";AT(22,55);"RETURN - Proceed";
0170 GOSUB '602("(c) Copyright Wang Laboratories, Inc., 1993"," All rights
reserved.")
0180 D$=SELECT DISK
: STR(D$,1,1)="D"
: STR(D$,3,1)="0"
: PRINT AT(8,15);"Base address of SCSI unit (D10, D20, or D30): ";
: LINPUT -D$
: IF D$="RUN"THEN 180
: GOSUB '602(" "," ")
0190 PRINT HEX(06);
: GOSUB '602(" "," ")
: $TRAN(D$,"DdBb")R
: $TRAN(D$,"DBDb")R
: IF POS("Dd"=STR(D$,1,1))<>0AND POS("123"=STR(D$,2,1))<>0AND STR(D$,3,1)="
0"THEN GOTO 200
: GOSUB '602(" ","Illegal address")
: GOTO 180
0200 SELECT #15<D$>
: ERRORGOSUB '602(" ","Invalid address")
: GOTO 180
0210 REM VERIFY IF SCSI DRIVE
: $SCSIINQUIRYT#15,
: ERRORGOSUB '602(HEX(06070E),"Not a SCSI Controller")
: GOTO 180
0220 $SCSIINQUIRYT#15
: $IF ON #15,230
: $BREAK
: Z=Z+1
: IF Z<999THEN 220
: GOSUB '602(" ","Drive unavailable")
: GOTO 180
0230 REM % Get the Switch settings
0240 $SCSIIDT#15,K$
: K1$=K$
: ROTATE(K1$,4)
: K1$=K1$AND HEX(0E)
: H=INT(VAL(K1$)/2)
0250 REM % TEST THE SCSI UNIT FOR CONFIGURATION TABLE
0260 $SCSICONFIGT#15,B$()
0270 C$()=STR(B$(),1,512)
0280 REM % GET DATA FROM CONFIG TABLE
0290 FOR X=1TO 8
: C$=STR(C$(X),3,4)
: IF STR(C$(X),1,1)=HEX(FF)THEN J$(X)="No Drive Present"
0300 IF STR(C$(X),1,1)=HEX(80)THEN DO
: J$(X)="Removable Drive"
: GOSUB '601(C$)
: A1(X)=VAL(F$,4)
: C$=STR(C$(X),7,4)
: GOSUB '601(C$)
: C(X)=VAL(F$,4)
: END DO
0310 IF STR(C$(X),1,1)=HEX(81)THEN DO
: J$(X)="Sequential Access Device"
: REM GOSUB '601(C$) A1(X)=VAL(c$,4)
: END DO
0320 IF STR(C$(X),1,1)=HEX(01)OR STR(C$(X),1,1)=HEX(00)THEN DO
: J$(X)="Direct Access Device"
: GOSUB '601(C$)
: A1(X)=VAL(F$,4)
: C$=STR(C$(X),7,4)
: GOSUB '601(C$)
: C(X)=VAL(F$,4)
: END DO
0330 NEXT X
0340 I$(),X$(),E$(),N$(),L$()=ALL(20)
0350 REM % screen 2
: PRINT HEX(0306);
: T$="S C S I C o n f i g u r a t i o n"
: PRINT AT(0,40-LEN(T$)/2);"";T$
0360 GOSUB 580
: GOSUB 1640
: GOSUB 800
0370 J$(H+1)=ALL(20)
: J$(H+1)="SCSI Controller"
: C$(H+1)=ALL(20)
: STR(C$(H+1),20,18)="WANG LABORATORIES INC"
0380 PRINT HEX(060F);AT(1,0,);AT(3,0);
0390 R=1
: FOR X=1TO 8
: IF STR(C$(X),1,1)<>HEX(FF)THEN DO
: A1=((A1(X)*C(X))/1024)/1000
: PRINTUSING 7910;X-1,J$(X),STR(C$(X),20,18),A1,A1(X)*2
: R=R+1
: END DO
: NEXT X
: PRINT AT(2,0);
0400 PRINT HEX(060F);AT(2,0);BOX(1,78);AT(2,0);
: PRINTUSING 7900
: PRINT
: PRINT AT(3,0);BOX(R-1,78);AT(2,11);BOX(R,0);AT(2,37);BOX(R,0);AT(2,56);BO
X(R,0);AT(2,67);BOX(R,0);
0410 PRINT HEX(06);AT(15,0,);AT(23,55);"FN/TAB - Exit";AT(22,55);"RETURN - R
e-start";AT(21,58);"RUN - Expand Display";AT(20,56);" '15 - Start setu
p";AT(20,56);
0420 KEYIN K$
: IF K$=HEX(82)THEN 430
: IF K$=HEX(0D)THEN 160
: IF POS(HEX(7E7F)=K$)<>0THEN 8210
: IF K$=HEX(0F)THEN 550
: GOTO 420
0430 SELECT PRINT 005(80)
: PRINT HEX(0306);
: T$="C u r r e n t P l a t t e r U s e"
: PRINT HEX(0E);AT(0,40-(LEN(T$)/2));T$
: X9=1
0440 PRINT AT(2,40);BOX(2,0);AT(2,0);BOX(2,79)
0450 PRINT " Disk Index Current Catalog Disk Index Current
Catalog"
0460 PRINT " Addr. Size End Maximum Addr. Size End
Maximum"
0470 GOSUB '602(HEX(06),"Getting device status")
: GOSUB 1640
0480 J=0
: R1=3
: GOSUB '602("","")
0490 FOR X=1TO 16
0500 J=J+1
: IF J=17THEN R1=3
: R1=R1+1
: R=0
: IF J>16THEN R=R+40
: PRINT AT(R1,0);
0510 PRINTUSING 7920,X$(X,1);I$(X,1);E$(X,1);N$(X,1);X$(X,2);I$(X,2);E$(X,2);N
$(X,2);
0520 NEXT X
0530 PRINT AT(23,55);"FN/TAB - Exit";AT(22,55);"RETURN - Re-start";AT(21,58)
;"RUN - Previous screen";AT(20,56);" '15 - Start setup";AT(20,56);
0540 KEYIN K$
: IF POS(HEX(7E7F)=K$)<>0THEN 8210
: IF K$=HEX(0D)THEN 160
: IF K$=HEX(0F)THEN 550
: IF K$=HEX(82)THEN 340
: GOTO 540
0550 GOTO 990
0560 PRINT AT(23,55);"FN/TAB - Exit";AT(22,55);"RETURN - Proced";
0570 KEYIN K$
0580 O=1
: K=1
: J=1
: D1$(1,1)=D$
: L$(15,2)=" Tape"
0590 FOR X=8TO 1STEP -1
: IF STR(C$(X),1,1)=HEX(01)OR STR(C$(X),1,1)=HEX(00)THEN 600
: GOTO 690
0600 $SCSIREAD T#15,(X-1)A1$()
: ERRORGOTO 690
0610 M=0
: IF STR(A1$(),1,4)="scsi"AND STR(A1$(),149,4)="scsi"THEN M=1
0620 MAT SEARCHA1$(),="END"TO C$STEP 4
: P1=(VAL(C$,2))
: IF POS(HEX(0001)=STR(C$(X),1,1))<>0AND P1<149THEN DO
: Q=INT((P1-7)/8)
: END DO
: IF POS(HEX(0001)=STR(C$(X),1,1))<>0AND P1>148THEN DO
: Q=INT(((P1-7)-149)/8)
: END DO
0630 MAT SEARCHA1$(),="scsi"TO C$STEP 4
: P0=(VAL(C$,2))
: R=P0+8
0640 P2=1
: IF M=1THEN P2=149
: IF M=1THEN 700
0650 FOR Y=1TO Q
: IF STR(C$(X),1,1)=HEX(00)AND R>148THEN 670
: IF STR(C$(X),1,1)=HEX(01)AND R<148THEN 660
0660 GOSUB '601(STR(A1$(),R,4))
: S=VAL(F$,4)
: CONVERT STO L$(J,1),(##########)
: IF J<16THEN STR(D1$(J,1),1,3)=STR(D$,1,2)&M$(J)
: U$(J,1)=BIN(X-1)
: U$(J,1)=OR HEX(30)
: J=J+1
: IF J=17THEN DO
: J=Q
: GOSUB '602(HEX(06070E),"Disk platter Address Conflict")
: END DO
: R=R+8
: GOTO 680
0670 GOSUB '601(STR(A1$(),R,4))
: S=VAL(F$,4)
: IF K>14THEN DO
: Y=Q
: GOSUB '602(HEX(06070E),"Disk Platter Address Conflict")
: END DO
: IF K>14THEN GOTO 680
: CONVERT STO L$(K,2),(##########)
: STR(D1$(K,2),1,3)=STR(D$,1,2)&M$(K+16)
: CONVERT STR(D1$(K,2),2,1)TO A
0675 A=A+4
: CONVERT ATO STR(D1$(K,2),2,1),(#)
: U$(K,2)=BIN(X-1)
: U$(K,2)=OR HEX(30)
: K=K+1
: R=R+8
0680 NEXT Y
0690 NEXT X
: RETURN
0700 MAT SEARCHSTR(A1$(),1,148),="END"TO C$STEP 4
: P1=(VAL(C$,2))
: Q1=INT((P1-7)/8)
: MAT SEARCHSTR(A1$(),149,148),="END"TO C$
: P3=VAL(C$,2)
: Q2=INT((P3-7)/8)
0710 FOR Y=1TO Q
: IF P0<148THEN 720
: IF P0>148THEN 730
0720 GOSUB '601(STR(A1$(),R,4))
: S=VAL(F$,4)
: CONVERT STO L$(J,1),(##########)
: IF J<16THEN STR(D1$(J,1),1,3)=STR(D$,1,2)&M$(J)
: U$(J,1)=BIN(X-1)
: U$(J,1)=OR HEX(30)
: J=J+1
: R=R+8
0730 NEXT Y
0740 MAT SEARCHSTR(A1$(),149,148),="scsi"TO C$STEP 4
: P0=(VAL(C$,2))+148
: R=P0+8
0750 FOR Y=1TO Q2
: IF STR(C$(X),1,1)=HEX(00)OR STR(C$(X),1,1)=HEX(01)THEN 760
: ELSE GOTO 770
0760 GOSUB '601(STR(A1$(),R,4))
: S=VAL(F$,4)
: CONVERT STO L$(K,2),(##########)
: STR(D1$(K,2),1,3)=STR(D$,1,2)&M$(K+16)
: CONVERT STR(D1$(K,2),2,1)TO A
: A=A+4
: CONVERT ATO STR(D1$(K,2),2,1),(#)
: U$(K,2)=BIN(X-1)
: U$(K,2)=OR HEX(30)
: K=K+1
: R=R+8
0770 NEXT Y
0780 GOTO 690
0790 REM % GO AND GET DISK DATA AND DISPLAY DRIVE STATUS
0800 RESTORE LINE7800
: FOR X=1TO 16
: STR(X$(X,1),1,2)=STR(D$,1,2)
: STR(X$(X,2),1,2)=STR(D$,1,2)
: READ STR(X$(X,1),3,1)
0810 Z=0
: SELECT #2<X$(X,1)>
: ERRORGOTO 880
0820 Z=0
: GOSUB '604(0)
: IF Z<>0THEN DO
: Z8$=" "
: IF Z=91THEN 880
: IF Z=98THEN Z8$="Door open or no diskette"
: IF Z=93THEN Z8$="Format error"
: END DO
0830 IF Z=0THEN DO
: I=0
: L$=ALL(00)
: L=POS(HEX(000102)=STR(A9$(),1,1))-1
: IF L<=1THEN I=VAL(STR(A9$(),2,1))
: IF L>1THEN I=VAL(STR(A9$(),2,2),2)
: IF I=0THEN 880
0840 CONVERT ITO L$,(#####)
: ERRORZ=ERR
: STOP #
0850 IF STR(L$,,1)="0"THEN STR(L$,,POS(L$>"0")-1)=" "
0860 IF L=1THEN STR(L$,6,1)="'"
: IF L=2THEN STR(L$,6,1)="&"
: IF I>0THEN I$(X,1)=L$
: END DO
0870 I=0
: L$=ALL(20)
: L=POS(HEX(000102)=STR(A9$(),1,1))-1
: IF L<=1THEN I=(VAL(STR(A9$(),5,2),2))-1
: IF L>1THEN I=(VAL(STR(A9$(),7,3),3))-1
: IF I>0THEN DO
: GOSUB '605(I)
: IF I>0THEN E$(X,1)=L$
: END DO
0880 NEXT X
0890 RESTORE LINE7800
: FOR X=1TO 16
: STR(X$(X,2),2,1)=BIN(VAL(STR(X$(X,2),2,1))+4)
: READ STR(X$(X,2),3,1)
0900 Z=0
: SELECT #2<X$(X,2)>
: ERRORGOTO 970
0910 Z=0
: GOSUB '604(0)
: IF Z<>0THEN DO
: Z8$=" "
: IF Z=91THEN 970
: IF Z=98THEN Z8$="Door open or no diskette"
: IF Z=93THEN Z8$="Format error"
: END DO
0920 IF Z=0THEN DO
: I=0
: L$=ALL(00)
: L=POS(HEX(000102)=STR(A9$(),1,1))-1
: IF L<=1THEN I=VAL(STR(A9$(),2,1))
: IF L>1THEN I=VAL(STR(A9$(),2,2),2)
: IF I=0THEN 970
0930 CONVERT ITO L$,(#####)
: ERRORZ=ERR
: STOP #
0940 IF STR(L$,,1)="0"THEN STR(L$,,POS(L$>"0")-1)=" "
0950 IF L=1THEN STR(L$,6,1)="'"
: IF L=2THEN STR(L$,6,1)="&"
: IF I>0THEN I$(X,2)=L$
: END DO
0960 I=0
: L$=ALL(20)
: L=POS(HEX(000102)=STR(A9$(),1,1))-1
: IF L<=1THEN I=(VAL(STR(A9$(),5,2),2))-1
: IF L>1THEN I=(VAL(STR(A9$(),7,3),3))-1
: IF I>0THEN DO
: GOSUB '605(I)
: IF I>0THEN E$(X,2)=L$
: END DO
0970 NEXT X
0980 RETURN
0990 SELECT PRINT 005(80)
: PRINT HEX(0306);
: T$="S e t u p S C S I C o n f i g u r a t i o n"
: PRINT HEX(0E);AT(0,40-(LEN(T$)/2));T$
: S2=S1
: T1=A1(I+1)*2
: T=T1
1000 PRINT HEX(060F);AT(1,0,);AT(2,0);BOX(1,78);AT(2,0);
: PRINTUSING 7900
: PRINT
: PRINT AT(3,0);BOX(11,78);AT(2,11);BOX(12,0);AT(2,37);BOX(12,0);AT(2,56);B
OX(12,0);AT(2,67);BOX(12,0);AT(4,0)
1010 FOR X=1TO 8
: A1=((A1(X)*C(X))/1024)/1000
: PRINTUSING 7910;X-1,J$(X),STR(C$(X),20,18),A1,A1(X)*2
: NEXT X
: PRINT AT(13,0);BOX(0,78);AT(4+H,0);HEX(0E);
: PRINTUSING " # #########################";H;J$(H+1)
1020 PRINT AT(22,55);"FN/TAB - Exit"
: PRINT AT(15,3);"Please Select Drive ID to Configure (0 - 7): ";
: LINPUT " ",-I$
: PRINT ""
: GOSUB '602(" "," ")
1030 CONVERT I$TO I
: ERRORGOTO 1020
1040 IF I<0OR I>7OR STR(J$(I+1),1,1)<>"D"THEN DO
: PRINT HEX(07);
: END DO
: IF I<0OR I>7OR STR(J$(I+1),1,1)<>"D"THEN 1020
1050 PRINT AT(17,3);"Load Configuration file Y/N ";
: K$="N"
: LINPUT -K$
: IF POS("yYnN"=K$)<>0THEN 1060
: GOTO 1050
1060 IF POS("nN"=K$)<>0THEN 1140
1070 PRINT AT(19,3);"Configuration file name ";
: LINPUT -B1$
: PRINT "";
1080 GOSUB 8290
: IF N3=0THEN DO
: GOSUB '602(HEX(06070E),"File not found")
: END DO
: IF N3=0THEN 1070
1090 A1$()=A$()
: GOSUB 580
: GOSUB 1650
1100 R2=8
1110 FOR X=2TO 16
1120 PRINT AT(X+3,21);N$(X,1);AT(X+3,60);N$(X,2);
1130 NEXT X
: GOTO 1440
1140 REM continue no config to save
1150 GOSUB 1650
1160 R1=5
: S2=S1
: T1=A1(I+1)*2
: T=T1
: A$()=ALL(FF)
: STR(A$(),P-4,4)="scsi"
1165 PRINT AT(22,55);"FN/TAB - Exit"
1170 PRINT AT(20,0,80);AT(22,0,40);" Unit ";I;" \CDaster or \D3lave ";
: K$="M"
: LINPUT -K$
: GOSUB '602(" "," ")
1180 $TRAN(K$,"mMsS")R
: IF POS("ms"=K$)<>0THEN 1190
: GOTO 1170
1190 IF K$="m"THEN P=5
: IF K$="s"THEN P=153
1200 A$()=ALL(FF)
: STR(A$(),P-4,4)="scsi"
1210 IF K$="m"THEN DO
: R=0
: R2=8
: Y=16
: END DO
: IF K$="s"THEN DO
: R=40
: R2=48
: Y=15
: END DO
1220 REM % Ask for surface details
1225 PRINT AT(20,55);"FN/TAB - Exit"
1230 PRINT AT(22,0,80);"Please Enter No. of Addresses to assign to Drive";I;"
";
: LINPUT -E$
: PRINT HEX(060F)
1240 REM % test value for number of platters
: CONVERT E$TO E
: ERRORGOTO 1230
1250 IF E<1OR E>29THEN 1230
: IF E>14AND K$="s"THEN 1230
: IF E>15AND M=0THEN DO
: STR(A$(),149,4)="scsi"
: M=1
: END DO
1260 FOR X=1TO E
1270 PRINT AT(21,0,40);"Sectors remaining :";T1;"";
1280 PRINT HEX(06);AT(22,0,80);
: PRINT "Sectors to assign (even #s only) to Address ";
: PRINTUSING "##";X;
: PRINT "";
: LINPUT -B$
: PRINT " ";
: PRINT AT(23,0,32)
1290 CONVERT B$TO B
: IF B=0THEN 1390
: IF B<100THEN 1280
: ERRORGOTO 1280
1300 C=B
: IF MOD(C,2)<>0THEN 1310
: REM C=INT(C/2)
: IF MOD(C,2)>TTHEN 1310
: IF B>T1THEN 1315
: ELSE GOTO 1320
1310 PRINT HEX(07);
: GOTO 1280
1315 GOSUB '602(HEX(06070E),"Amount exceeds available sectors")
: GOTO 1310
1320 IF MOD(C,2)<>0THEN C=C-1
: IF C>TTHEN C=T
: A(X)=C
: GOSUB '600(S2)
: STR(A$(),P,4)=F$
: P=P+4
: GOSUB '600(C)
: STR(A$(),P,4)=F$
: S2=S2+C
: B(X)=S2
: T1=T1-B
: IF SGN(T1)<>-1THEN 1330
1330 IF X<15THEN DO
: P=P+4
: END DO
1340 IF X=15THEN DO
: P=P+4
: STR(A$(),P,4)=HEX(FFFFFFFF)
: P=P+4
: STR(A$(),P,3)="END"
: P=153
: END DO
1350 IF X=16THEN DO
: V=149
: STR(A$(),V,4)="scsi"
: P=P+4
: R2=48
: END DO
1360 IF X>16THEN DO
: P=P+4
: END DO
1370 IF X>0THEN DO
: IF X<16THEN PRINT AT(4+X,R2);
: ELSE PRINT AT(X-11,R2);
: PRINTUSING " ######### #########"," ",A(X)
: END DO
1380 NEXT X
: P=P+4
: STR(A$(),P,3)="END"
1390 K$=" "
: PRINT HEX(06);AT(21,0,160);
: LINPUT "All entries made and acceptable Y/N",-K$
1400 IF POS("Yy"=K$)<>0THEN 1420
: IF POS("Nn"=K$)<>0THEN 1410
: GOTO 1390
1410 T1=T
: PRINT HEX(06);AT(21,0,160);
: GOTO 1150
1420 PRINT HEX(06);AT(21,0,160);AT(23,55);"FN/TAB - Exit";AT(22,58);"RUN - A
ccept screen";AT(20,55,80)
1430 KEYIN K$
: IF K$=HEX(82)THEN 1440
: IF POS(HEX(7E7F)=K$)<>0THEN 8210
: GOTO 1430
1440 GOSUB '602(" "," ")
: PRINT HEX(06);AT(21,0,80);"WARNING!!! If changes are applied to an existi
ng drive, data will be lost.";HEX(060F);AT(23,55);"FN/TAB - Exit";AT(22,0
,80);"Apply Changes Y/N";
: K$="Y"
: LINPUT "",-K$
: PRINT "";
1450 IF POS("Yy"=K$)<>0THEN 1460
: IF POS("Nn"=K$)<>0THEN 160
1460 IF #TERM<>1THEN DO
: GOSUB '602(HEX(06070E),"Must be a SYSTEM console")
1470 PRINT HEX(06);AT(21,0,160);AT(23,55);"FN/TAB - Exit";AT(22,58);"RUN - R
e-start"
1480 KEYIN K$
: IF POS(HEX(7E7F)=K$)<>0THEN 8210
: IF K$=HEX(82)THEN 90
: GOTO 1480
1490 END DO
1500 GOSUB '602(" "," ")
: PRINT AT(21,0,80);HEX(06);AT(22,0,80);"Please supply password";
: B$=ALL(20)
: LINPUT -B$
: PRINT "";
1510 V3$=DATE
: DATE=V3$PASSWORDB$
: ERRORPRINT HEX(07);
: GOTO 1500
1520 GOSUB '602(" "," ")
: B$=ALL(20)
: PRINT HEX(06);AT(22,0,80);"Save Configuration Y/N ";
: K$="Y"
: LINPUT "",-K$
: PRINT "";
1530 IF POS("Yy"=K$)<>0THEN DO
1540 GOSUB '602(" "," ")
: PRINT HEX(06);AT(22,0,80);"Configuration file name. (Use a different nam
e for each drive.) ";
: LINPUT -B1$
1550 GOSUB 8330
1560 GOSUB '602(" "," ")
: END DO
1570 GOSUB '602(" "," ")
: PRINT HEX(06);AT(21,0,80);" A New Drive or Reconfigure requires a low
level Format "
1580 PRINT HEX(06);AT(22,0,80);"Execute Low Level Format Y/N? ";
: K$="N"
: LINPUT -K$
: K$=OR HEX(20)
: IF K$="n"THEN 1630
1590 IF K$="y"THEN DO
: GOSUB '602(" "," ")
: PRINT AT(22,0,80);AT(22,0);"Format in Progress";
1600 $SCSIFORMATT#15,(I)
: ERRORSTOP #
1610 PRINT AT(21,0,80);"Format Complete Press RETURN to Proceed ";
: KEYIN K$
: IF K$<>HEX(0D)THEN 1610
: END DO
1620 IF K$<>HEX(0D)THEN 1610
1630 REM % EXECUTE THE CONFIG
: $SCSIWRITET#15,(I)A$()
: $SCSIINQUIRYT#15
: GOTO 10
1640 REM get disk data
: FOR Y=1TO 2
: FOR X=1TO 16
: GOSUB '603(X,Y)
: NEXT X
: NEXT Y
: FOR Y=1TO 2
: FOR X=2TO 16
: N$(X,Y)=L$(X-1,Y)
: NEXT X
: NEXT Y
: RETURN
1650 REM % Diplay platter config routine
1660 REM % Display platter if Master Slave Config
: PRINT HEX(0306);
: T$="S e t u p S C S I C o n f i g u r a t i o n"
: PRINT HEX(0E);AT(0,40-(LEN(T$)/2));T$
1670 PRINT AT(2,0);" Unit ";I;" with ";A1(I+1)*2;" Sectors available"
1680 PRINT AT(3,40);BOX(2,0);AT(3,0);BOX(2,79)
1690 PRINT " Master disk Catalog Slave disk Ca
talog"
1700 PRINT " Maximum Ma
ximun"
1710 X$(16,2),L$=ALL(20)
1720 FOR X=2TO 16
1730 PRINTUSING 7930;X$(X,1);L$;X$(X,2);L$
: NEXT X
7800 DATA "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
7900 % Drive ID Drive Type Vendor Capacity Sec
tors
7910 % # ######################### ################## ####.## ######
###
7920 % ### ###### ######## ########## ### ###### ######## ########
##
7930 % ### ######### ### #########
8000 % Unit Platter Total Unit Platter Tot
al
8010 % ID Address Sectors ID Address Sect
ors
8020 % # ### ######### # ### #######
##
8030 % Unit Platter Total Unit Platter Tot
al
8040 % ID Address Sectors ID Address Sect
ors
8050 % # ### ######### # ### #######
##
8060 REM % SUBROUTINE TO ADJUST BYTE SWAPS
8070 DEFFN'600(D)
8080 G$=BIN(D,4)
: F$=ALL(20)
8090 STR(F$,1,1)=STR(G$,4,1)
: STR(F$,2,1)=STR(G$,3,1)
: STR(F$,3,1)=STR(G$,2,1)
: STR(F$,4,1)=STR(G$,1,1)
: RETURN
8100 REM % Subroutine to adjust byteswap to bin format
8110 DEFFN'601(G$)
8120 F$=ALL(00)
: STR(F$,4,1)=STR(G$,1,1)
: STR(F$,3,1)=STR(G$,2,1)
: STR(F$,2,1)=STR(G$,3,1)
: STR(F$,1,1)=STR(G$,4,1)
: RETURN
8130 REM % PRINT AT LEFT HAND CORNER AT (22,0) (23,0)
8140 DEFFN'602(M1$,M2$)
: PRINT AT(22,0);"";STR(M1$);AT(23,0);"";STR(M2$);
: RETURN
8150 DEFFN'603(F,G)
: IF STR(L$(F,G),,1)="0"AND POS(L$(F,G)>"0")<>0THEN STR(L$(F,G),,POS(L$(F,G
)>"0")-1)=" "
: RETURN
8160 DEFFN'605(I)
8170 CONVERT ITO L$,(########)
: ERRORZ=ERR
: STOP #
8180 IF STR(L$,,1)="0"THEN STR(L$,,POS(L$>"0")-1)=" "
: RETURN
8190 DATA "1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","0","1",
"2","3","4","5","6","7","8","9","A","B","C","D","E"
8200 REM % EXIT BACK TO MENU
8210 DEFFN'126
8220 DEFFN'127
: LOAD RUN T"@MENU"
8230 REM % IF < OR = 15 PARTITIONS ON THE DRIVE
: STOP #
8240 IF MOD(C,2)<>0THEN C=C-1
: IF C>TTHEN C=T
: A(X)=C
: GOSUB '600(S2)
: STR(A$(),P,4)=F$
: P=P+4
: GOSUB '600(C)
: STR(A$(),P,4)=F$
: P=P+4
: S2=S2+C
: B(X)=S2
: T1=T1-B
8250 REM read a sector
8260 DEFFN'604(I)
8270 DATA LOAD BA T#2,(I)A9$()
: ERRORZ=ERR
8280 RETURN
8290 REM % read configfile
8300 LIMITS T#0,B1$,N,N1,N2,N3
: IF N3=0THEN RETURN
8310 IF N3=2THEN DO
: Z=0
: N2=N+(I*2)
: DATA LOAD BMT#0,(N2)A$()
: ERRORZ=ERR
: IF Z<>0THEN GOSUB '602(HEX(06070E),"Disk Error")
8320 END DO
: RETURN
8330 REM % Save config
8340 LIMITS T#0,B1$,N,N1,N2,N3
: IF N3=0THEN DO
: DATA SAVE DC OPEN T#0,(18)B1$
: A9$()=ALL(FF)
: LIMITS T#0,B1$,N,N1,N2,N3
: FOR X=NTO N1-1
: DATA SAVE BA T#0,(X)A9$()
: NEXT X
: A9$()=ALL(00)
: STR(A9$(),1)=HEX(A0)&BIN((N1-N)+1,2)
: STR(A9$(),17)="@scssicfg"
: DATA SAVE BA T#0,(N1)A9$()
: END DO
8350 IF N3=2THEN DO
: Z=0
: N2=N+(I*2)
: DATA SAVE BMT#0,(N2)A$()
: ERRORZ=ERR
: IF Z<>0THEN GOSUB '602(HEX(06070E),"Disk Error")
8360 END DO
: RETURN
9000 DEFFN'0HEX(020402000E)
: REM SET BRIGHT ATTRIB AND ON
9010 DEFFN'1HEX(020404000E)
: REM SET REV+FLASH ON
9020 DEFFN'2HEX(020404000E)
9030 DEFFN'17
: FOR X=1TO 132STEP 4
: PRINT HEXOF(STR(A1$(),X,4)),
: NEXT X
: PRINT
9500 DEFFN'14HEX(0E)
: REM ATTRIB ON
9510 DEFFN'15HEX(0F)
: REM ATTRIB OFF
9520 DEFFN'16"FOR X0=5TO 148STEP 8: HEXPRINT STR(A$(),X,8): NEXT X0"
9999 DEFFN'31
: RESAVE T"@SCSICFG"