Listing of file='VCREATE' on disk='vmedia/731-8011A.wvd.zip'
# Sector 636, program filename = 'VCREATE' 0004 REM % (c) Copyright Wang Laboratories, Inc. 1986 0005 REM %"VCREATE" ** N. Odoi ** Rev. 1.00 * 12/10/86 0010 REM %Scrn : DIM T1$(416)1,R1,S0,T1(8),S4$80,T1$1 0020 REM %VDISKMAP : DIM F1$(50)12,F6$40,A9$3 0030 REM %E3$()=vol,E4$()=libe;E5$()=file;E6$(),E6=size;E8$()=errs;E1$=other c onfig file;E1=last VDISK : DIM E3$(33)8, E4$(33)8, E5$(33)8, E6$(33)5,E6,E8$(32)21,E1,E5$30 0040 REM %D1$(1)=cntlr add;D3$()=vol name,D4$()=libe name;D5$()=file name;D6$( )=platter size;D8$()=err msgs : DIM D1$(4)8,D3$(8)8, D4$(8)8, D5$(8)8, D6$(8)5,D8$(8)21 0050 REM % C=EXIT,P$=Search var, P9=Screen #,P9$='100 options,P8$=1st field,E9 $=Err msg,E9=print line : DIM C,P$16,P9,P9$,P8$1,E9$80,E,V,E5,I,J,D 0080 REM $GIO regs,DMS : DIM A$16,V$32,V1$1,V2$1,V3$1,V4$2,V7$32,V8$,V8$(20),V9$2,V9$(16,10) 0100 REM % Start : GOTO 2000 0130 REM % ** DEFFN'45 - DMS\A0STATUS -V<0=err,response=F6$,len=V1 0132 DEFFN'45 : V=1 : REM construct command : F6$=ALL(00) : STR(A$,7,1)=HEX(52) : STR(A$,6,1) = BIN(#PART-1) AND HEX(0F) OR HEX(50) : $OPEN 138,#2,#3 : ERRORV=-1 : GOTO 139 0133 $GIO#2(4500) : ERRORV=-1 : GOTO 139 0134 $BREAK : FOR D=1 TO 1200 : $IF ON #2,135 : NEXT D : V=-10 : GOTO 139 0135 $IF ON #3,137 : ERRORV=-1 : GOTO 139 0136 $GIO#3(4550 405F) : $BREAK : FOR D=1 TO 1200 : $IF ON #3,137 : NEXT D : V=-10 : GOTO 139 0137 $GIO #3 (4660 4270 8703 8704 1801 C340, A$)A$;STR(F6$,1,VAL(STR(A$,3,2),2 )) : V1=VAL(STR(A$,3,2),2) : GOTO 139 0138 V=-20 0139 $CLOSE#2,#3 : RETURN 0140 REM %** DEFFN'48 - SET\A0DEVICE\A0TABLE(comm addr) V<0=err 0142 DEFFN'48(A9$) : V=1 : IF STR(A9$,1,1)<>"0" OR STR(A9$,2,1)="0" THEN 146 : HEXPACK T1$ FROM STR(A9$,2,2) : IF MOD(VAL(T1$),4)>0 THEN 146 0143 REM /status addr : T1$=ADD HEX(01) : HEXUNPACK T1$ TO STR(A9$,2,2) : SELECT #1 <A9$> : ERRORGOTO 146 0144 REM /command addr : T1$=ADD HEX(01) : HEXUNPACK T1$ TO STR(A9$,2,2) : SELECT #2 <A9$> : ERRORGOTO 146 0145 REM /data addr : T1$ =ADD HEX(01) : HEXUNPACK T1$ TO STR(A9$,2,2) : SELECT #3 <A9$> : GOSUB '45 : IF V<0 THEN RETURN : T$="D" : HEXUNPACK STR(F6$,4,1) TO STR(T$,2,2) : SELECT #4<T$> : RETURN 0146 V=-1 : RETURN 0160 REM %** DEFFN'50 - READ\A0MAP 0180 DEFFN'50 : V=1 : DATA LOAD DC OPEN T"VDISKMAP" : ERRORE=ERR : V=0 : RETURN 0190 MAT REDIM F1$(50)12 : DATA LOAD DC F1$() : DATA SAVE DC CLOSE : RETURN 0340 REM %** DEFFN'65-LOAD\A0TO\A0SCRN-for VCREATE 0344 DEFFN'65(P9) : T= (P9*8)-7 : J=1 : FOR I=T TO T+7 : D3$(J)=E3$(I) : D4$(J)=E4$(I) : D5$(J)=E5$(I) : D6$(J)=E6$(I) : D8$(J)=E8$(I) 0348 J=J+1 : NEXT I : RETURN 0360 REM %** DEFFN'66 - LOAD\A0FROM\A0SCRN-for VCREATE 0364 DEFFN'66(P9) : T= (P9*8)-7 : J=1 : FOR I=T TO T+7 : E3$(I)=D3$(J) : E4$(I)=D4$(J) : E5$(I)=D5$(J) : E6$(I)=D6$(J) : E8$(I)=D8$(J) 0368 J=J+1 : NEXT I : RETURN 0430 REM %** DEFFN'72-VDISK\A0VAL-for VCREATE--V=1 if ok,<0 if not,=0 if all b lank 0435 DEFFN'72 : V=1 : FOR T=1 TO 8 : IF D6$(T)=" " THEN 436 : S4$=STR(D6$(T),POS(D6$(T)<>" ")) : IF VER(STR(D6$(T),POS(D6$(T)<>" ")),"#####")<>LEN(S4$) THEN V=-2 0436 IF D5$(T)=" "OR D6$(T)=" "THEN V=-1 : IF D3$(T)=" "AND D4$(T)=" "AND D5$(T)=" "AND D6$(T)=" "THEN V=0 : IF V=1 THEN NEXT T 0437 IF V<>0 THEN RETURN : IF T=8 THEN 438 : IF STR(D6$(),(T*5)+1)<>" "OR STR(D3$(),(T*8)+1)<>" "OR STR(D4$(),(T*8)+1) <>" "OR STR(D5$(),(T*8)+1)<>" "THEN V=-1 : RETURN 0438 IF P9=4 THEN RETURN : T1=P9*8 : IF STR(E6$(),(T1*5)+1)<>" "OR STR(E3$(),(T1*8)+1)<>" "OR STR(E4$(),(T1*8) +1)<>" "OR STR(E5$(),(T1*8)+1)<>" "THEN V=-1 : RETURN 0460 REM %** DEFFN'74-FIND\A0ATTACHED/DETACHED-"A"=Att,"D"=Det.V=index,if err <0 0465 DEFFN'74(F$) : V=-2 : FOR I=1 TO 50 : IF STR(F1$(I),1,3)="ZZZ" THEN 468 : GOSUB '48(STR(F1$(I),1,3)) : IF V<0 THEN 469 : IF F$="A" THEN 466 : IF STR(F6$,,1)<>HEX(00)THEN 469 : ELSE V=I : IF V>0 THEN RETURN 0466 IF STR(F6$,,1)=HEX(00) OR STR(F6$,3,1)=HEX(00)THEN 469 : V=I : RETURN 0468 I=50 0469 NEXT I : V=-5 : RETURN 0470 REM %** DEFFN'75-SQUEEZE 0471 DEFFN'75(S4$) : MAT REDIM T1$(416)1 : E=LEN(S4$) : FOR I=1 TO E : T=POS(STR(S4$,,LEN(S4$))=" ") : IF T=0 THEN I=E : ELSE GOSUB 473 : NEXT I : RETURN 0473 T1$()=STR(S4$,T+1) : IF T>1 THEN S4$=STR(S4$,1,T-1)&T1$() : ELSE S4$=T1$() : RETURN 0500 REM %** DEFFN'90 - DISK\A0ERR 0515 DEFFN'90(D) : RESTORE LINE 4010,D-79 : READ E9$ : GOSUB '128(E9$,99,1,20) : RETURN 0520 REM %** DEFFN'91 - OPEN\A0ERR(errclass,errcode) 0525 DEFFN'91(V1$,V4$) : P$,V6$=" " : CONVERT VAL(V1$) TO P$,(##) : CONVERT VAL(V4$,2) TO V6$,(####) : IF VAL(V1$)<>9THEN 530 : IF VAL(V4$,2)=15 THEN E9$="Volume not mounted" : IF VAL(V4$,2)=20 THEN E9$="File already exists" : IF VAL(V4$,2)=21 THEN E9$="File possession conflict" : IF VAL(V4$,2)=32 THEN E9$="Disk problems" 0527 IF VAL(V4$,2)=40 THEN E9$="Device in use" : IF VAL(V4$,2)=41 THEN E9$="Device detached" : IF VAL(V4$,2)=42 THEN E9$="Access denied" : IF VAL(V4$,2)=96 THEN E9$="Severe DMS errors" : IF VAL(V4$,2)=99 THEN E9$="Non-specific file system error" : RETURN 0530 E9$="2200SRV err: "&STR(P$,POS(P$<>"0"),2)& "/ "&STR(V6$,POS(V6$<>"0")) : RETURN 0900 REM /Changes-1001,1004,1005,1008,1160-1166,Renumed 1162-1181 to 1300 0901 REM /1001 : S4=1 : S3=33 : S2=0 : S1=0 : T0$=" " 0903 REM /1004 : T9=0 : FOR T4=1TO 34 0905 REM /1005 &1008 : ON T4GOSUB 1012,1017,1022,1027,1032,1037,1042,1047,1052,1057,1062,1067,10 72,1077,1082,1087,1092,1097,1102,1107,1112,1117,1122,1127,1132,1137,1142, 1147,1152,1157,1160,1162,1164,1166 0910 REM /1160 : MAT REDIM T1$(001)008 : GOSUB '126(15,1,8,1,1,001,1,1,D3$(8),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(8)=T1$() : RETURN 0912 REM /1162 : MAT REDIM T1$(001)008 : GOSUB '126(15,11,8,1,1,001,1,1,D4$(8),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(8)=T1$() : RETURN 0914 REM /1164 : MAT REDIM T1$(001)008 : GOSUB '126(15,21,8,1,1,001,1,1,D5$(8),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(8)=T1$() : RETURN 0916 REM /1166 : MAT REDIM T1$(001)005 : GOSUB '126(15,43,5,1,1,001,1,1,D6$(8),S0$,"X",1,T9,".....6",1) : IF R1>0 THEN D6$(8)=T1$() : RETURN 1000 DEFFN'100(S9$,S0$) : REM CREATEV (VER 7.00) 1001 S4=1 : S3=33 : S2=0 : S1=0 : T0$=" " 1002 IF POS(S9$=F2)>0 THEN T0$=STR(S9$,POS(S9$=F2)+1,4) 1003 IF POS(S9$=F6)>0 THEN GOTO 1007 : RESTORE LINE 1300 : GOSUB '129 1004 T9=0 : FOR T4=1TO 34 1005 ON T4GOSUB 1012,1017,1022,1027,1032,1037,1042,1047,1052,1057,1062,1067,10 72,1077,1082,1087,1092,1097,1102,1107,1112,1117,1122,1127,1132,1137,1142, 1147,1152,1157,1160,1162,1164,1166 1006 NEXT T4 1007 T9=-1 : IF POS(S9$=F9)>0 THEN T3=VAL(STR(S9$,POS(S9$=F9)+1)) : ELSE T3=S4 1008 ON T3GOSUB 1012,1017,1022,1027,1032,1042,1047,1052,1057,1062,1067,1072,10 77,1082,1087,1092,1097,1102,1107,1112,1117,1122,1127,1132,1137,1142,1147, 1152,1157,1160,1162,1164,1166 1009 ON R1GOTO ,,,,1010,1011 : RETURN 1010 IF POS(S9$=F5)>0 AND T3=S3THEN RETURN : T3=MOD(T3+1,S3+1) : IF T3=0 THEN T3=S4 : GOTO 1008 1011 T3=MOD(T3-1,S3+1) : IF T3<S4 THEN GOTO 1011 : GOTO 1008 1012 MAT REDIM T1$(1)3 : GOSUB '126(4,52,3,1,1,1,1,1,D1$(1),S0$,"X",1,T9,".....6",1) : IF R1<=0 OR T9=0 THEN RETURN : D1$(1)=T1$() : IF VER(T1$(),"HHH")<>3 THEN 1013 : GOSUB '48(D1$(1)) : IF V<1 THEN 1014 : IF STR(F6$,,1)>HEX(00) THEN 1015 : E9$="Controller not attached" : GOTO 1016 1013 E9$="Invalid characters in field" : GOTO 1016 1014 IF V=-1 THEN E9$="Illegal communications address" : IF V=-10 THEN E9$="Controller not responding" : IF V=-20 THEN E9$="Controller is being accessed by another partition" : GOTO 1016 1015 IF STR(F6$,3,1)<>HEX(00)THEN RETURN : E9$="2200SRV malfunction: Please detach and re-attach this controller" : GOTO 1016 1016 GOSUB '128(E9$,99,0,20) : T0$=HEX(18000150) : GOTO 1012 1017 MAT REDIM T1$(1)6 : GOSUB '126(8,1,6,1,1,1,1,1,D3$(1),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(1)=T1$() : RETURN 1022 MAT REDIM T1$(1)8 : GOSUB '126(8,11,8,1,1,1,1,1,D4$(1),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(1)=T1$() : RETURN 1027 MAT REDIM T1$(1)8 : GOSUB '126(8,21,8,1,1,1,1,1,D5$(1),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(1)=T1$() : RETURN 1032 MAT REDIM T1$(1)5 : GOSUB '126(8,43,5,1,1,1,1,1,D6$(1),S0$,"X",1,T9," ",1) : IF R1>0 THEN D6$(1)=T1$() : RETURN 1037 MAT REDIM T1$(8)21 : GOSUB '127(8,60,21,8,1,8,1,1,D8$()," ") : RETURN 1042 MAT REDIM T1$(1)6 : GOSUB '126(9,1,6,1,1,1,1,1,D3$(2),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(2)=T1$() : RETURN 1047 MAT REDIM T1$(1)8 : GOSUB '126(9,11,8,1,1,1,1,1,D4$(2),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(2)=T1$() : RETURN 1052 MAT REDIM T1$(1)8 : GOSUB '126(9,21,8,1,1,1,1,1,D5$(2),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(2)=T1$() : RETURN 1057 MAT REDIM T1$(1)5 : GOSUB '126(9,43,5,1,1,1,1,1,D6$(2),S0$,"X",1,T9," ",1) : IF R1>0 THEN D6$(2)=T1$() : RETURN 1062 MAT REDIM T1$(1)6 : GOSUB '126(10,1,6,1,1,1,1,1,D3$(3),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(3)=T1$() : RETURN 1067 MAT REDIM T1$(1)8 : GOSUB '126(10,11,8,1,1,1,1,1,D4$(3),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(3)=T1$() : RETURN 1072 MAT REDIM T1$(1)8 : GOSUB '126(10,21,8,1,1,1,1,1,D5$(3),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(3)=T1$() : RETURN 1077 MAT REDIM T1$(1)5 : GOSUB '126(10,43,5,1,1,1,1,1,D6$(3),S0$,"X",1,T9," ",1) : IF R1>0 THEN D6$(3)=T1$() : RETURN 1082 MAT REDIM T1$(1)6 : GOSUB '126(11,1,6,1,1,1,1,1,D3$(4),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(4)=T1$() : RETURN 1087 MAT REDIM T1$(1)8 : GOSUB '126(11,11,8,1,1,1,1,1,D4$(4),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(4)=T1$() : RETURN 1092 MAT REDIM T1$(1)8 : GOSUB '126(11,21,8,1,1,1,1,1,D5$(4),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(4)=T1$() : RETURN 1097 MAT REDIM T1$(1)5 : GOSUB '126(11,43,5,1,1,1,1,1,D6$(4),S0$,"X",1,T9," ",1) : IF R1>0 THEN D6$(4)=T1$() : RETURN 1102 MAT REDIM T1$(1)6 : GOSUB '126(12,1,6,1,1,1,1,1,D3$(5),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(5)=T1$() : RETURN 1107 MAT REDIM T1$(1)8 : GOSUB '126(12,11,8,1,1,1,1,1,D4$(5),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(5)=T1$() : RETURN 1112 MAT REDIM T1$(1)8 : GOSUB '126(12,21,8,1,1,1,1,1,D5$(5),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(5)=T1$() : RETURN 1117 MAT REDIM T1$(1)5 : GOSUB '126(12,43,5,1,1,1,1,1,D6$(5),S0$,"X",1,T9," ",1) : IF R1>0 THEN D6$(5)=T1$() : RETURN 1122 MAT REDIM T1$(1)6 : GOSUB '126(13,1,6,1,1,1,1,1,D3$(6),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(6)=T1$() : RETURN 1127 MAT REDIM T1$(1)8 : GOSUB '126(13,11,8,1,1,1,1,1,D4$(6),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(6)=T1$() : RETURN 1132 MAT REDIM T1$(1)8 : GOSUB '126(13,21,8,1,1,1,1,1,D5$(6),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(6)=T1$() : RETURN 1137 MAT REDIM T1$(1)5 : GOSUB '126(13,43,5,1,1,1,1,1,D6$(6),S0$,"X",1,T9," ",1) : IF R1>0 THEN D6$(6)=T1$() : RETURN 1142 MAT REDIM T1$(1)6 : GOSUB '126(14,1,6,1,1,1,1,1,D3$(7),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(7)=T1$() : RETURN 1147 MAT REDIM T1$(1)8 : GOSUB '126(14,11,8,1,1,1,1,1,D4$(7),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(7)=T1$() : RETURN 1152 MAT REDIM T1$(1)8 : GOSUB '126(14,21,8,1,1,1,1,1,D5$(7),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(7)=T1$() : RETURN 1157 MAT REDIM T1$(1)5 : GOSUB '126(14,43,5,1,1,1,1,1,D6$(7),S0$,"X",1,T9," ",1) : IF R1>0 THEN D6$(7)=T1$() : RETURN 1160 MAT REDIM T1$(1)6 : GOSUB '126(15,1,6,1,1,1,1,1,D3$(8),S0$,"X",1,T9," ",1) : IF R1>0 THEN D3$(8)=T1$() : RETURN 1162 MAT REDIM T1$(1)8 : GOSUB '126(15,11,8,1,1,1,1,1,D4$(8),S0$,"X",1,T9," ",1) : IF R1>0 THEN D4$(8)=T1$() : RETURN 1164 MAT REDIM T1$(1)8 : GOSUB '126(15,21,8,1,1,1,1,1,D5$(8),S0$,"X",1,T9," ",1) : IF R1>0 THEN D5$(8)=T1$() : RETURN 1166 MAT REDIM T1$(1)5 : GOSUB '126(15,43,5,1,1,1,1,1,D6$(8),S0$,"X",1,T9," ",1) : IF R1>0 THEN D6$(8)=T1$() : RETURN 1300 DATA 1,22,0,"*****" 1310 DATA 1,30,0,"C R E A T E V D I S K" 1320 DATA 1,55,0,"*****" 1330 DATA 2,34,0,"Revision 2.0 " 1340 DATA 4,22,0,"Enter communications address:" 1350 DATA 6,01,0,"-- VDISK Name on VS System --" 1360 DATA 6,43,0,"Platter" 1370 DATA 7,01,0,"Volume" 1380 DATA 7,11,0,"Library" 1390 DATA 7,21,0,"File Name" 1400 DATA 7,43,0,"Size (sectors)" 1405 DATA 19,54,0,"SF24 - Delete entry" 1410 DATA 20,45,0,"PREV SCRN/SF2 - Previous screen" 1420 DATA 21,45,0,"NEXT SCRN/SF3 - Next screen" 1430 DATA 22,50,0,"EXEC/RUN - Create VDISK file(s)" 1440 DATA 23,47,0,"CANCEL/EDIT - Exit" 1450 DATA 8,43,99,HEX(000D) 1460 DATA 8,21,99,HEX(0009) 1470 DATA 8,1,99,HEX(0006) 1480 DATA 8,11,99,HEX(0007) 1490 DATA 0,0,0," " 1500 REM VSACESS0 12 JUNE 86 1517 DEFFN'199 1518 STR(V8$,7,1)=HEX(53) 1519 STR(V8$,6,1)=BIN(#PART-1)AND HEX(0F)OR HEX(50) 1520 $OPEN #3 : $GIO#3(466042708701,V8$) : IF STR(V8$,1,1)<>HEX(80)THEN 1527 1521 V1=LEN(V8$())+34 : STR(V8$,6,2)=BIN(V1,2) : $GIO#3(40E3426042701800A0001801A00040008701,V8$)V7$;STR(V8$(),,V1) 1522 IF STR(V8$,1,1)<>HEX(80)THEN 1527 1523 V9$()=ALL(" ") : $GIO#3(870387041801C340,V8$)V8$;STR(V9$(),1,VAL(STR(V8$,3,2),2)) 1524 $GIO#3(4000,V8$) 1525 $CLOSE#3 1526 V0$=HEX(FF) : RETURN 1527 V0$=HEX(5A) : RETURN 1528 DEFFN'102(V9$,V7$) 1529 STR(V7$,6,4)=HEX(00020000) 1530 V8$()=ALL(" ") : STR(V8$(),1,5)=HEX(02)&V9$&HEX(0000) 1531 STR(V8$(),6,6)=HEX(000301000000) 1532 GOSUB '199 : IF V0$<>HEX(FF)THEN 1536 1533 V7$=STR(V9$(),,32) 1534 V1=VAL(STR(V8$,3,2),2)-32 : STR(V9$(),,V1)=STR(V9$(),33,V1) : STR(V9$(),V1+1)=ALL(" ") 1535 V0$=HEX(FF) 1536 RETURN 1600 REM VSACESS1 30 JUNE 86 1601 DEFFN'104(V9$,V7$,V9$()) 1602 STR(V7$,6,4)=HEX(00110000) 1603 STR(V8$())=HEX(02)&V9$ 1604 V1=LEN(V9$()) : STR(V8$(),4,V1+8)=HEX(0001)&BIN(V1+3,2)&HEX(01)&BIN(V1,2)&STR(V9$(),1,V1) &HEX(00) 1605 GOSUB '199 : IF V0$<>HEX(FF)THEN 1609 1606 V7$=STR(V9$(),1,32) 1607 V1=VAL(STR(V8$,3,2),2)-32 : STR(V9$(),1,V1)=STR(V9$(),33,V1) : STR(V9$(),V1+1)=ALL(" ") 1608 V0$=HEX(FF) 1609 RETURN 1700 REM VSACESS9 21 JULY 86 1701 DEFFN'200(V$,V1$,V2$,V3$,STR(V9$(),1,40),STR(V9$(),41,8)) 1702 V7$=ALL(HEX(00)) : STR(V7$,,5)=HEX(FF)&"SMB"&HEX(FF) : STR(V7$,7,1)=HEX(23) : STR(V7$,23,2)=HEX(FFFF) 1703 V8$()=ALL(" ") : STR(V8$(),1,3)=HEX(040000) 1704 IF V3$=" "THEN STR(V8$(),4,2)=HEX(0001) : IF V3$="T"THEN STR(V8$(),4,2)=HEX(0002) 1705 V1=POS(" IRCBS"=V1$) : IF V1<11OR V1>15THEN 1720 : V2=2^V1 : STR(V8$(),6,2)=BIN(V2,2) 1706 V1=POS(" SXER"=V2$) : IF V1<12OR V1>15THEN 1720 : V2=2^V1 : STR(V8$(),8,2)=BIN(V2,2) 1707 V1=LEN(V$) : V2=(V1+2)+6+43 : IF V1$="I"THEN V2=V2+11 : STR(V8$(),10,2)=BIN(V2,2) 1708 STR(V8$(),12,1)=HEX(04) : STR(V8$(),13,LEN(V$)+1)=V$&HEX(00) 1709 V1=14+LEN(V$) : STR(V8$(),V1,6)=HEX(04)&"FILE"&HEX(00) 1710 V1=V1+6 : STR(V8$(),V1,43)=HEX(01)&BIN(40,2)&STR(V9$(),1,40) : IF V1$<>"I"THEN 1713 1711 V1=V1+43 : STR(V8$(),V1,11)=HEX(010008)&STR(V9$(),63,8) 1712 STR(V8$(),V1+11,1)=HEX(00) 1713 GOSUB '199 : IF V0$=HEX(5A)THEN 1720 1714 V7$=STR(V9$(),,32) : IF STR(V7$,6,1)<>HEX(00)THEN 1719 1715 IF V3$=" "THEN V9$=STR(V9$(),34,2) 1716 IF V3$=" "THEN V2=35 : ELSE V2=33 1717 V1=VAL(STR(V8$,3,2),2)-V2 : STR(V9$(),,V1)=STR(V9$(),V2+1,V1) : STR(V9$(),V1+1)=ALL(" ") 1718 V0$=HEX(FF) : RETURN 1719 V0$=HEX(A5) : RETURN 1720 V0$=HEX(00) : RETURN 2000 REM % Main : E9=99 : GOSUB '50 : IF V=1 THEN 2005 : IF E=82 THEN E9$="VDISKMAP not found" : ELSE GOSUB '90(E) : C=1 : E9=23 : GOTO 2300 2005 GOSUB '74("A") : IF V<1 THEN D1$(1)=" " : ELSE D1$(1)=STR(F1$(V),1,3) : PRINT HEX(03) : C=0 : P9$=HEX(F218000150) : P9=1 : D8$()=" " 2010 REM %REPEAT : GOSUB '100(P9$,HEX(504E756418)) 2090 ON R1+2 GOTO 2105,2105,2120,2200,2215,2230,,,,,,,2110,,,2115 2105 REM %exit : IF D5$()=" " AND D6$()=" " AND E5$()=" " AND E6$()=" " THEN 2108 : GOSUB '128("Press EXEC/RUN to exit, CANCEL/EDIT to continue",24,0,20) 2106 KEYIN T$,,2107 : IF STR(T$,1,1)=HEX(82) OR STR(T$,1,1)=HEX(A1) THEN 2108 : GOTO 2106 2107 IF STR(T$,1,1)<>HEX(50) AND STR(T$,1,1)<>HEX(F0) THEN 2106 : P9$=HEX(F218000140F6F9)&BIN(T3) : GOTO 2300 2108 E9$="Create VDISKs Utility cancelled" : C=1 : E9=23 : GOTO 2300 2110 REM %case-up : IF T3>5 THEN P8=T3-4 : ELSE P8=T3 : P8$=BIN(P8) : P9$=HEX(F218000140F6F9)&P8$ : GOTO 2300 2115 REM %case-down : IF T3<=29 AND T3<>1 THEN P8=T3+4 : ELSE P8=T3 : P8$=BIN(P8) : P9$=HEX(F218000140F6F9)&P8$ : GOTO 2300 2120 REM %case-exec : GOSUB '72 : IF V=-1 THEN 2133 : IF V=-2 THEN 2132 : GOSUB '66(P9) : IF E6$(1)=" " THEN 2131 : E1=LEN(E6$())/5 : IF FIX(E1)<>E1 THEN E1=FIX(E1)+1 : GOTO 2135 2131 E9$="No valid VDISK entries" : GOTO 2134 2132 E9$="Invalid number" : T3=((T-1)*4)+5 : GOTO 2134 2133 E9$="Please delete or correct entry before continuing" : T3=((T-1)*4)+2 2134 P9$=HEX(F218000140F6F9)&BIN(T3) : GOTO 2300 2135 GOSUB '128("Press EXEC/RUN to create VDISKs, CANCEL/EDIT to return to scr een",24,0,20) 2136 KEYIN T$,,2137 : IF STR(T$,1,1)=HEX(82) OR STR(T$,1,1)=HEX(A1) THEN 2140 : GOTO 2136 2137 IF STR(T$,1,1)<>HEX(50) AND STR(T$,1,1)<>HEX(F0) THEN 2136 : E9$="No VDISKs created" : P9$=HEX(F218000140F6F9)&BIN(T3) : GOTO 2300 2140 REM /each VDISK : E8$()=" " : FOR E5=1 TO E1 : E5$="///"&E3$(E5)&"/"&E4$(E5)&"/"&E5$(E5) : GOSUB '75(E5$) : IF S4$="/////" THEN 2187 : E5$=S4$ : E9$= "Creating VDISK "&E5$ : PRINT AT(23,0,80); : GOSUB '128(E9$,24,0,20) 2143 CONVERT E6$(E5) TO E6 : V9$()=ALL(HEX(00)) : STR(V9$(),,12)="CFAN"&HEX(0000)&BIN(E6,2)&HEX(00000100) : STR(V9$(),27,1)=" " : STR(V9$(),34,1)="N" 2153 GOSUB '200(E5$,"C","E"," ",STR(V9$(),1,40)," ") : IF STR(V7$,6,1)=HEX(00)AND V0$=HEX(FF)THEN 2156 : IF V0$=HEX(FF)THEN E9$="Could not create" : ELSE GOSUB '91(STR(V7$,6,1),STR(V7$,8,2)) : E8$(E5)=E9$ : E9$=" " : GOTO 2187 2156 FOR D=1TO E6 : CONVERT D TO A$,(#####) : E9$= "Initializing VDISK "&E5$&" at sector "&STR(A$,POS(A$<>"0")) : GOSUB '128(E9$,24,0,20) 2158 V9$()=" " : STR(V9$(),,256)=ALL(HEX(00)) : GOSUB '104(V9$,V7$,V9$()) : IF V0$=HEX(FF) AND STR(V7$,6,1)=HEX(00) THEN 2161 : IF V0$=HEX(FF) THEN E9$="Could not initialize" : ELSE GOSUB '91(STR(V7$,6,1),STR(V7$,8,2)) : E8$(E5)=E9$ : D=E6 : NEXT D : GOTO 2187 2161 NEXT D 2164 GOSUB '102(V9$,V7$) : IF V0$=HEX(FF)AND STR(V7$,6,1)=HEX(00) THEN 2187 : IF V0$=HEX(FF) THEN E9$= "Could not close" : ELSE GOSUB '91(STR(V7$,6,1),STR(V7$,8,2)) : E8$(E5)=E9$ 2187 IF E8$(E5)=" "THEN E8$(E5)="Successful" : NEXT E5 2190 C=0 : E9$="Task completed" : E9=24 : P9$=HEX(F218000140) : GOSUB '65(P9) : GOTO 2300 2200 REM %Prev : IF P9<=1 THEN 2205 : GOSUB '72 : IF V=-1 THEN 2133 : IF V=-2 THEN 2132 : GOSUB '66(P9) : P9=P9-1 : GOSUB '65(P9) : P9$=HEX(F218000140F902) : GOTO 2300 2205 REM /Err : E9$="No previous screen" : GOTO 2219 2215 REM %Next : IF P9=4 THEN 2217 : GOSUB '72 : IF V=-1 THEN 2133 : IF V=-2 THEN 2132 : IF V=0THEN 2217 : GOSUB '66(P9) : P9=P9+1 : GOSUB '65(P9) : P9$=HEX(F218000140F902) : GOTO 2300 2217 REM /Err : E9$="No next screen" 2219 P9$=HEX(F218000140F6F9)&BIN(T3) : GOTO 2300 2230 REM %'24 : IF S0<>24 THEN 2300 : IF T3<2 THEN 2250 : GOSUB '66(P9) : E8=(FIX((T3-2)/4)+1)+((P9-1)*8) : IF E8=32 THEN 2245 2240 STR(E3$(),((E8-1)*8)+1)=STR(E3$(),(E8*8)+1) : STR(E4$(),((E8-1)*8)+1)=STR(E4$(),(E8*8)+1) : STR(E5$(),((E8-1)*8)+1)=STR(E5$(),(E8*8)+1) : STR(E6$(),((E8-1)*5)+1)=STR(E6$(),(E8*5)+1) : STR(E8$(),((E8-1)*21)+1)=STR(E8$(),(E8*21)+1) 2245 E3$(32),E4$(32),E5$(32),E8$(32)=" " : GOSUB '65(P9) : PRINT AT(23,0,80) : P9$=HEX(F218000140F9)&BIN(T3) : GOTO 2300 2250 REM /err : P9$=HEX(F218000140F6F9)&BIN(T3) 2300 REM %UNTIL exit : PRINT AT(23,0,80); : IF E9$<>" " THEN GOSUB '128(E9$,E9,0,20) : E9$=" " : IF C=0 THEN 2010 3015 REM %Exit : PRINT AT(23,00,80); : GOSUB '128("Loading VS Services Menu",24,0,20) : LOAD T"@VSMENU" 3800 REM SE.SUBS, REL. 7.00, (08/23/82) 3801 DIM T1(8),T2(2),S1$,S2$124,S3$1,S4$80,T1$1,T2$80,T3$1,T4$3,T$(10)1 3802 DEFFN'126(T1(1),T1(2),T1(3),T1(4),T1(5),T1(6),T1(7),T1(8),T1$(),S0$,S2$,T 2,T9,T$(),S9) : S3$=S2$ : I=20 : GOSUB 3864 : T2,T5=MIN(MAX(1,T2),T1(6)) : $TRAN(T$(),HEX(202E))R : T$(5)="5" : R1=1 : IF S9>1THEN 3806 : IF T9<0THEN 3803 : T$(5)="5" : T3$=S2$ : GOSUB 3831 : S2$=T3$ : IF T9=0THEN 3805 : T2=T5 3803 GOSUB 3835 : GOSUB '130(T0,T1,T1(3),S3$,T1$(T2),S0$," ",T$(),T0$) : T1$(T2)=S4$ : IF T$(10)=" "THEN 3804 : GOSUB '125 : IF R1=-2THEN 3803 3804 IF R1<5OR R1=11OR R1=14THEN 3805 : IF R1=5THEN T2=T2+1 : IF R1=6THEN T2=T2-1 : IF T2>=1AND T2<=T1(6)THEN 3803 3805 RETURN 3806 S8$=S0$ : SELECT PRINT 205(80) : PRINT HEX(0202020F); : $TRAN(S2$,HEX(8520))R : T2=T2-1 3808 T2=MAX(1,MOD(T2+1,T1(6))) : IF STR(T1$(T2),,1)=HEX(00)THEN 3808 3810 IF T9<0THEN 3814 : T5=T2 : FOR T2=1TO T1(6) : IF S9=2THEN 3811 : T4$=STR(S2$,T2,1)&HEX(0F09) : GOTO 3812 3811 IF T2=T5THEN T4$=HEX(8B0E09) : ELSE T4$=HEX(900F09) 3812 GOSUB 3835 : GOSUB 3824 : NEXT T2 : T2=T5 : IF T9=0THEN 3825 3814 IF S9=3THEN S8$=S8$&"DI" : GOSUB 3835 : PRINT HEX(06);AT(T0-1,T1-1); : T8=1 : GOSUB 3839 : IF S9=2AND R1>08AND R1<15THEN 3825 : IF R1<7THEN 3825 : IF S9=2THEN 3818 : IF POS(HEX(8B85)=STR(S2$,T2,1))=0THEN 3819 : ON R1-8GOTO 3815,3816 : GOTO 3819 3815 STR(S2$,T2,1)=HEX(85) : GOTO 3817 3816 STR(S2$,T2,1)=HEX(8B) 3817 T4$=STR(S2$,T2,1)&HEX(0F09) : GOSUB 3824 : I=1 : GOTO 3822 3818 T4$=HEX(900F09) : GOSUB 3824 3819 ON POS(HEX(2008)=T1$)GOTO 3820,3821 : GOSUB 3826 : GOTO 3823 3820 I=1 : GOTO 3822 3821 I=-1 3822 T2=T2+I : T2=MOD(T2,T1(6)) : IF T2=0THEN T2=T1(6) : IF T1$(T2)=" "OR STR(T1$(T2),,1)=HEX(00)THEN 3822 3823 IF S9=3THEN T4$=STR(S2$,T2,1)&HEX(0F09) : ELSE T4$=HEX(8B0E09) : GOSUB 3835 : GOSUB 3824 : GOTO 3814 3824 PRINT HEX(06);AT(T0-1,T1-1); : IF T1$(T2)>" "THEN PRINT HEX(0E);T4$;STR(T1$(T2)); : ELSE IF STR(T1$(T2),,1)>HEX(00)THEN PRINT TAB(T1-1+2);STR(T1$(T2)); : RETURN 3825 $TRAN(S2$,HEX(2085))R : T0=T2 : PRINT HEX(0F0202000F); : IF S2=2THEN RETURN : MAT REDIM T1$(T1(6))1 : T1$()=S2$ : SELECT PRINT 005(80) : RETURN 3826 T1$=OR HEX(20) : S=-1 : IF T2=T1(6)THEN 3827 : FOR I=T2+1TO T1(6) : T3$=STR(T1$(I),1,1)OR HEX(20) : IF T3$<>T1$THEN NEXT I : ELSE S=I 3827 IF T2=1OR S>0THEN 3828 : FOR I=1TO T2-1 : T3$=STR(T1$(I),1,1)OR HEX(20) : IF T3$<>T1$THEN NEXT I : ELSE S=I 3828 IF S>-1THEN T2=S : RETURN 3830 DEFFN'127(T1(1),T1(2),T1(3),T1(4),T1(5),T1(6),T1(7),T1(8),T1$(),T$()) : $TRAN(T$(),HEX(202E))R 3831 SELECT PRINT 405(80) : IF T$(7)=" "THEN PRINT HEX(020402000E06); : ELSE PRINT HEX(0F06) : FOR T2=1TO T1(6) : GOSUB 3835 : S2$=T1$(T2) : IF T$(3)=" "OR S2$=" "THEN 3832 : STR(S2$,,LEN(S2$))=ALL(8B) 3832 IF T$(5)>" "THEN $TRAN(S2$,HEX(8520))R : PRINT AT(T0-1,T1-1); : IF STR(S2$,,1)>HEX(00)THEN PRINT STR(S2$,,T1(3)); : NEXT T2 : SELECT PRINT 005(80) : RETURN 3835 IF T$(4)>" "THEN T0=INT((T2-1)/T1(8))*T1(7)+T1(1) : ELSE T0=MOD((T2-1),T1(4))*T1(7)+T1(1) : IF T$(4)>" "THEN T1=MOD((T2-1),T1(8))*T1(5)+T1(2) : ELSE T1=INT((T2-1)/T1(4))*T1(5)+T1(2) : T0=T0+T2(1) : T1=T1+T2(2) : RETURN 3836 IF T0$<>" "THEN GOSUB 3860 : IF T>0THEN GOSUB 3862 : RETURN 3838 T=1 : PRINT HEX(06070E);AT(23,0,40);" Invalid key ignored";AT(T0-1,T1-2+T8); 3839 R1=99 : IF T$(9)=" "THEN PRINT HEX(02050F); : KEYIN T1$,,3845 : GOSUB 3836 : IF T1$>HEX(82)THEN 3838 : IF T$(9)=" "THEN 3841 : IF POS(HEX(8182)=T1$)=0OR POS(S8$=T1$)=0THEN 3838 3841 IF T1$>HEX(82)THEN 3838 : ON POS(HEX(81820D)=T1$)GOTO 3847,3843,3849 : RETURN 3843 R1=1 : RETURN 3845 GOSUB 3836 : IF T1$>HEX(1F)THEN 3846 : IF POS(S8$=T1$)=0THEN 3846 : R1=4 : S0=VAL(T1$) : RETURN 3846 ON POS(HEX(F01F50)=T1$)GOTO 3847,3847,3848 : IF T$(9)=" "THEN ON POS(HEX(7E7F)=T1$)GOTO 3849,3850 : GOTO 3851 3847 R1=0 : RETURN 3848 R1=-1 : RETURN 3849 R1=5 : RETURN 3850 R1=6 : RETURN 3851 T1$=AND HEX(0F) : IF POS(HEX(0203050608090A0C0D)=T1$)>0THEN 3852 : GOTO 3838 3852 $TRAN(T1$,HEX(0B060E05))R : R1=VAL(T1$) : T2$="*PN****EDIuewd**" : IF POS(S8$=STR(T2$,R1,1))>0THEN RETURN : GOTO 3838 3853 ON POS(HEX(2008)=T1$)GOTO 3854,3855 : GOTO 3856 3854 IF T$(4)>" "THEN R1=12 : ELSE R1=14 : GOTO 3856 3855 IF T$(4)>" "THEN R1=13 : ELSE R1=11 3856 I=T1(6) : IF T$(4)=" "THEN 3857 : IF R1=14THEN T2=MOD(T2+T1(8),I) : IF R1=11THEN T2=MOD(T2-T1(8),I) : GOTO 3858 3857 IF R1=14THEN T2=MOD(T2+1,I) : IF R1=11THEN T2=MOD(T2-1,I) 3858 IF T2=0THEN T2=T1(6) : IF T2>T1(6)THEN 3853 : RETURN 3860 FOR I=1TO VAL(STR(T0$,3)) : PRINT HEX(06);AT(VAL(STR(T0$,1))-2+I+T2(1),VAL(STR(T0$,2))+T2(2),VAL(STR( T0$,4))); : NEXT I : T0$=" " : GOSUB 3898 : RETURN 3862 PRINT HEX(06);AT(23,0,40); : T=0 : GOSUB 3898 : RETURN 3864 S1$=HEX(0204)&BIN(I/10)&BIN(MOD(I,10))&HEX(0E) : PRINT STR(S1$,,5); : RETURN 3866 DEFFN'128(S2$,T0,T1,I) : SELECT PRINT 005(80) : IF T0=99THEN PRINT HEX(07); : IF T1=99THEN T1=40-(LEN(S2$)/2) : T0=MIN(24,T0) : T1=MAX(1,T1) : GOSUB 3864 : I=1 : STR(S2$,LEN(S2$)+1,1)=HEX(AF) : S=POS(S2$=HEX(AF)) 3867 PRINT HEX(06);AT(T0-1,T1-1);STR(S2$,I,S-1); : I=I+S : S=POS(STR(S2$,I)=HEX(AF)) : T0=T0+1 : IF S>0THEN 3867 : PRINT HEX(020402000F06); : RETURN 3869 DEFFN'129 : SELECT PRINT 205(80) 3870 READ T0,T1,I,S4$ : ERRORR1=-2 : RETURN 3871 IF T0=0THEN RETURN : T0=T0+T2(1) : T1=T1+T2(2) : IF I=99THEN 3872 : IF I=0THEN PRINT HEX(0F); : ELSE GOSUB 3864 : PRINT HEX(06);AT(T0-1,T1-1);STR(S4$,,LEN(S4$)); : GOTO 3870 3872 PRINT HEX(06);AT(T0-1,T1-1);BOX(VAL(S4$),VAL(STR(S4$,2))) : GOTO 3870 3874 DEFFN'130(T0,T1,T5,S2$,S4$,S8$,T2$,T$(),T0$) : SELECT PRINT 405(80) : PRINT HEX(0202000F020402000E); : $TRAN(T$(),HEX(202E))R : IF T2$>" "THEN PRINT HEX(060F);AT(T0-1,T1-2-LEN(T2$));T2$;HEX(0E); : S2$=ALL(S2$) : T6=POS("H#X"=S2$) : PRINT HEX(0202020F); : T8=1 : IF T$(9)>" "THEN 3876 : GOSUB 3897 : IF S8$<>" "THEN S8$=S8$&"IDEew" : ELSE S8$="IDEew" 3876 GOSUB 3839 : IF T$(9)>" "THEN 3905 : IF R1<7THEN 3899 : IF R1=11OR R1=14THEN 3899 : ON R1-7GOTO 3880,3884,3882,3876,3886,3890,3876 : IF T1$=HEX(08)THEN 3890 : IF T8<=T5THEN 3878 : PRINT HEX(07); : GOTO 3876 3878 STR(S4$,T8,1)=T1$ : $TRAN(T1$,HEX(8020))R : IF T$(3)=" "THEN PRINT HEX(0E);T1$; : ELSE PRINT HEX(0E8B); : GOTO 3887 3880 IF T5<T8THEN 3876 : STR(S4$,T8)=" " : GOSUB 3897 : GOTO 3876 3882 IF T5<T8THEN 3876 : MAT COPY -S4$<T8,T5-T8>TO -S4$<T8+1,T5-T8> : STR(S4$,T8,1)=" " : GOSUB 3897 : GOTO 3876 3884 IF T5<T8THEN 3876 : MAT COPY S4$<T8+1,T5-T8>TO S4$<T8,T5-T8> : STR(S4$,T5,1)=" " : GOSUB 3897 : GOTO 3876 3886 IF T8<T5+1THEN PRINT HEX(09); 3887 IF T8<>T5THEN 3888 : IF T$(1)=" "THEN 3888 : R1=5 : GOTO 3899 3888 T8=MIN(T5+1,T8+1) : GOTO 3876 3890 IF T8>1THEN 3891 : IF T$(2)=" "THEN 3876 : R1=6 : GOTO 3899 3891 PRINT HEX(08); : T8=T8-1 : IF T1$<>HEX(08)THEN 3876 : STR(S4$,T8,1)=" " : PRINT HEX(8508); : GOTO 3876 3892 PRINT HEX(06070E);AT(23,0,50);T2$; : T=1 : GOSUB 3898 : GOTO 3876 3893 T2$=" Invalid key ignored" : GOTO 3892 3894 T2$=" Information required, please enter" : GOTO 3892 3895 T2$=" Invalid characters in field" : GOTO 3892 3897 PRINT HEX(06);AT(T0-1,T1-1); : T2$=S4$ : IF T$(3)>" "AND T2$>" "THEN STR(T2$,,LEN(T2$))=ALL(8B) : $TRAN(T2$,HEX(8520))R : PRINT STR(T2$,,T5); 3898 PRINT HEX(06);AT(T0-1,T1-2+T8); : RETURN 3899 IF T$(7)=" "OR T$(3)>" "THEN 3900 : PRINT HEX(0F); : GOSUB 3897 3900 $TRAN(S4$,HEX(20802085))R : IF R1<1THEN 3902 : IF S4$=" "AND T$(6)>" "THEN 3894 3902 ON T6GOTO 3904,3903,3905 : GOTO 3904 3903 IF NUM(S4$)<T5THEN 3895 : GOTO 3905 3904 IF S4$>" "AND VER(STR(S4$,,T5),S2$)<T5THEN GOTO 3895 3905 SELECT PRINT 005(80) : PRINT HEX(0F0202000F); : RETURN 3906 % S$="SE.SUBS ": SCRATCH TS$: SAVE <S>T()S$3800,3999: PRINT HEX(0E);S$;H EX(0F);" updated" 4010 REM / Disk error messages 4020 DATA "D80 File not open" 4022 DATA "D81 File full" 4024 DATA "D82 File not in catalog" 4026 DATA "D83 File already cataloged" 4028 DATA "D84 File not scratched" 4030 DATA "D85 Index full" 4032 DATA "D86 Catalog end error" 4034 DATA "D87 No end-of-file" 4036 DATA "D88 Wrong record type" 4038 DATA "D89 Sector address beyond end-of-file" 4040 DATA "I90 Disk hardware error" 4042 DATA "I91 Disk hardware error" 4044 DATA "I92 Timeout error" 4046 DATA "I93 Format error" 4048 DATA "I94 Format key engaged" 4050 DATA "I95 Device error" 4052 DATA "I96 Data error" 4054 DATA "I97 Longitudinal redundancy check error" 4056 DATA "I98 Illegal sector address or platter not mounted" 4058 DATA "I99 Read-after-write error" 9999 DEFFN '31 "SCRATCH T";HEX(22);"VCREATE";HEX(22);": SAVE T()";HEX(22);"VC REATE";HEX(22)