Listing of file='VSACESS2' on disk='vmedia/731-8012A.wvd.zip'
# Sector 56, program filename = 'VSACESS2' 5000 REM * VSACESS2 11/10/87 INDEX FILE ROUTINES. 5002 REM % (c) Copyright Wang Laboratories, Inc. 1986 5003 REM * REL.1.0 UPDATE SEPT 10, 1986 * 5004 REM ***************************************************************** 5006 REM * READ AN INDEXED RECORD ('109) * 5008 REM * * 5010 REM * FORM - GOSUB '109 (H$,H1$,"H",T1 ,K1,K2,K$) * 5012 REM * * 5014 REM * WHERE H$ = FILE HANDLE * 5016 REM * H1$ = SMB\A0HEADER FOR FILE HANDLE H$ * 5018 REM * "H" = HOLD OPTION, OTHERWISE " ". * 5020 REM * T1 = TIME OUT IN SECONDS. * 5022 REM * K1 = KEYPATH 0 IS PRIMARY KEY * 5024 REM * K2 = KEY LENGTH * 5026 REM * K$ = KEY VALUE * 5028 REM * * 5030 REM * RETURN - V0$ = RETURN CODE (FF = OKAY) * 5032 REM * V1 = LENGTH OF DATA READ IN V9$() * 5034 REM * V4$ = ALTERNATE MASK * 5036 REM * V9$() = DATA READ * 5038 REM * EXAMPLE * 5040 REM * 10 DIM C1$5,N1$30,B1$3,W$8 * 5042 REM * 20 W$=HEX(A005A01EA0035205) * 5044 REM * 25 C1$="00001" * 5046 REM * 30 GOSUB '109 (H$, H1$, "H", 1, 0, 5, C1$) * 5048 REM * 40 IF V0$ = HEX(FF) THEN 60 * 5050 REM * 50 STOP "ERROR IN READ" * 5052 REM * 60 $UNPACK (F=W$) V9$() TO C1$,N1$,B1$,A1 * 5054 REM * * 5056 REM ***************************************************************** 5058 DEFFN '109 (V9$,V7$,V3$,V6,V4,V5,V6$) 5060 REM SMB\A0HEADER COMMAND CODE : STR(V7$,7,1)=HEX(07) 5062 REM READ INDEXED RECORD COMMAND STRUCTURE : STR(V8$()) = HEX(04) & V9$ 5064 IF V3$=" " THEN STR(V8$(),4,2)=HEX(0000) : ELSE STR(V8$(),4,2)="HH" 5066 REM SET TIMEOUT : STR(V8$(),6,2)=BIN(V6,2) : REM SET KEY PATH : STR(V8$(),8,2)=BIN(V4,2) 5068 REM SET KEY VALUE : STR(V8$(),10,V5+6)=BIN(V5+3,2)&HEX(01) & BIN(V5,2) & STR(V6$,1,V5) & HEX( 00) 5070 GOSUB '199 : REM SEND REQUEST TO 22258 : IF V0$<>HEX(FF) THEN 5080 5072 REM XXXX IS SET TO V4$ : V4$ = STR(V9$(),34,2) 5074 REM SETUP SMB HDR : V7$=STR(V9$(),1,32) : IF STR(V7$,6,1)<>HEX(00) THEN 5082 5076 REM SHIFT DOWN READ DATA : V1 = VAL(STR(V9$(),39,2),2) : STR(V9$(),1,V1)= STR(V9$(),41,V1) 5078 REM SET GOOD RETURN : V0$=HEX(FF) 5080 RETURN 5082 V0$=HEX(00) : RETURN 5084 REM ***************************************************************** 5086 REM * READ THE NEXT INDEXED RECORD ('110) * 5088 REM * * 5090 REM * FORM - GOSUB '110 (H$,H1$,"H" , T1) * 5092 REM * * 5094 REM * WHERE H$ = FILE HANDLE * 5096 REM * H1$ = SMB\A0HEADER FOR FILE HANDLE H$ * 5098 REM * "H" = HOLD OPTION, OTHERWISE " ". * 5100 REM * T1 = TIMEOUT IN SECONDS * 5102 REM * * 5104 REM * RETURN - V0$ = RETURN CODE (FF = O K ) * 5106 REM * V1 = LENGTH OF DATA READ IN V9$() * 5108 REM * V4$ = ALTERNATE MASK * 5110 REM * V9$() = DATA READ * 5112 REM * EXAMPLE * 5114 REM * 10 DIM C1$5,N1$30,B1$3,W$8,K1$1,K2$1 * 5116 REM * 20 W$=HEX(A005A01EA0035205) * 5118 REM * 30 GOSUB '110 (H$, H1$, " ", 0) * 5120 REM * 40 IF V0$ = HEX(FF) THEN 60 * 5122 REM * 50 STOP "ERROR IN READ NEXT" * 5124 REM * 60 $UNPACK (F=W$) V9$() TO C1$,N1$,B1$,A1 * 5126 REM * * 5128 REM ***************************************************************** 5130 DEFFN '110 (V9$,V7$,V3$,V6) 5132 REM SMB\A0HEADER COMMAND : STR(V7$,7,1) = HEX(08) 5134 REM READ NEXT INDEXED RECORD COMMAND STRUCTURE : STR(V8$())= HEX(03) & V9$ 5136 IF V3$=" " THEN STR(V8$(),4,2)=HEX(0000) : ELSE STR(V8$(),4,2)="HH" 5138 STR(V8$(),6,2) = BIN(V6,2) : REM SET DATACOUNT=000000 : STR(V8$(),8,2)=HEX(0000) 5140 REM TERMINATOR : STR(V8$(),10,1)=HEX(00) 5142 GOSUB '199 : IF V0$<>HEX(FF) THEN 5150 5143 REM /P30F301769/RAM/12 OCT.,'90/ MOVE MASK TO V4$ : V4$=STR(V9$(),34,2) 5144 REM SETUP SMB HDR : V7$=STR(V9$(),1,32) : IF STR(V7$,6,1)<>HEX(00) THEN 5152 5146 REM SHIFT DOWN READ DATA : V1 = VAL(STR(V9$(),39,2),2) : V9$() = STR(V9$(),41,V1) 5148 REM GOOD RETURN : V0$=HEX(FF) 5150 RETURN 5152 V0$=HEX(00) : RETURN 5154 REM ***************************************************************** 5156 REM * WRITE AN INDEXED RECORD ('111) * 5158 REM * * 5160 REM * FORM - GOSUB '111 (H$,H1$,H2$,D$) * 5162 REM * * 5164 REM * WHERE H$ = FILE HANDLE * 5166 REM * H1$ = SMB\A0HEADER FOR FILE HANDLE H$ * 5168 REM * H2$ = ALTERNATE MASK * 5170 REM * D$ = WRITE DATA BUFFER * 5172 REM * RETURN - V0$ = RETURN CODE (FF = O K ) * 5174 REM * * 5176 REM * EXAMPLE * 5178 REM * 10 DIM C1$5,N1$30,B1$3,W$8,D$43 * 5180 REM * 20 W$=HEX(A005A01EA0035205) * 5182 REM * 30 $PACK (F=W$) D$ FROM C1$,N1$,B1$,A1 * 5184 REM * 40 GOSUB '111 (H$, H1$, H2$, D$) * 5186 REM * 50 IF V0$ = HEX(FF) THEN 70 * 5188 REM * 60 STOP "ERROR IN WRITE" * 5190 REM * 70 ...... * 5192 REM * * 5194 REM ***************************************************************** 5196 DEFFN '111 (V9$,V7$,V4$,V9$()) 5198 REM DEFINE HDR : STR(V7$,7,1)=HEX(10) 5200 REM WRITE INDEXED RECORD COMMAND STRUCTURE : STR(V8$())= HEX(02) & V9$ 5202 V1=LEN(V9$()) : STR(V8$(),4,V1+8)= V4$ & BIN(V1+3,2) & HEX(01) & BIN(V1,2)& STR(V9$(),1,V 1) & HEX(00) 5204 REM SEND DATA TO 2258 AND GET BACK 00 00 5206 GOSUB '199 : IF V0$<>HEX(FF) THEN 5212 5208 V7$=STR(V9$(),1,32) 5210 REM GOOD RETURN : V0$=HEX(FF) 5212 RETURN 5214 REM ***************************************************************** 5216 REM * DELETE AN INDEXED RECORD ('113) * 5218 REM * * 5220 REM * FORM - GOSUB '113 (H$, H1$) * 5222 REM * * 5224 REM * WHERE H$ = FILE HANDLE * 5226 REM * H1$ = SMB\A0HEADER FOR FILE HANDLE H$ * 5228 REM * * 5230 REM * RETURN - V0$ = RETURN CODE (FF = O K ) * 5232 REM * * 5234 REM * EXAMPLE * 5236 REM * 40 GOSUB '113 (H$, H1$) * 5238 REM * 50 IF V0$ = HEX(FF) THEN 70 * 5240 REM * 60 STOP "ERROR IN DELETE" * 5242 REM * 70 ...... * 5244 REM * * 5246 REM ***************************************************************** 5248 DEFFN '113 (V9$, V7$) 5250 REM SMB\A0HEADER COMMAND CODE : STR(V7$,7,1)=HEX(19) 5252 REM DELETE INDEXED RECORD COMMAND STRUCTURE : STR(V8$())= HEX(01) & V9$ & HEX(0000) & HEX(00) 5254 REM SEND DATA TO 2200 AND GET BACK 00 00 5256 GOSUB '199 : IF V0$<>HEX(FF) THEN 5262 5258 REM RETURN SMBHDR : V7$=STR(V9$(),1,32) 5260 REM GOOD RETURN VALUE : V0$=HEX(FF) 5262 RETURN 5264 REM ***************************************************************** 5266 REM * RE-WRITE AN INDEXED RECORD ('112) * 5268 REM * * 5270 REM * FORM - GOSUB '112 (H$,H1$,H2$,R,D$) * 5272 REM * * 5274 REM * WHERE H$ = FILE HANDLE * 5276 REM * H1$ = SMB\A0HEADER FOR FILE HANDLE H$ * 5278 REM * H2$ = ALTERNATE MASK * 5280 REM * R = LENGTH OF RECORD TO BE REWRITTEN * 5282 REM * D$ = WRITE DATA BUFFER * 5284 REM * RETURN - V0$ = RETURN CODE (FF = O K ) * 5286 REM * * 5288 REM * EXAMPLE * 5290 REM * 10 DIM C1$5,N1$30,B1$3,W$8,D$43 * 5292 REM * 20 W$=HEX(A005A01EA0035205) * 5294 REM * 30 $PACK (F=W$) D$ FROM C1$,N1$,B1$,A1 * 5296 REM * 40 GOSUB '112 (H$, H1$, H2$, 43, D$) * 5298 REM * 50 IF V0$ = HEX(FF) THEN 70 * 5300 REM * 60 STOP "ERROR IN RE-WRITE" * 5302 REM * 70 ...... * 5304 REM * * 5306 REM ***************************************************************** 5308 DEFFN '112 (V9$,V7$,V4$,V1,V9$()) 5310 REM SMB\A0HEADER COMMAND CODE : STR(V7$,7,1)=HEX(15) 5312 REM RE-WRITE INDEXED RECORD COMMAND STRUCTURE : STR(V8$())= HEX(02) & V9$ & V4$ 5314 STR(V8$(),6)= BIN(V1+3,2)& HEX(01) & BIN(V1,2) & STR(V9$(),1,V1) & HEX(0 0) 5316 REM SEND DATA TO 2258 AND GET BACK 00 00 5318 GOSUB '199 : IF V0$<>HEX(FF) THEN 5324 5320 REM RETURN SMB : V7$=STR(V9$(),1,32) 5322 REM GOOD RETURN : V0$=HEX(FF) 5324 RETURN 5326 REM ***************************************************************** 5328 REM * FIND AN INDEXED RECORD ('114) * 5330 REM * * 5332 REM * FORM - GOSUB '114 (H$, H1$, H3$, K0, K1, K2, K$) * 5334 REM * * 5336 REM * WHERE H$ = FILE HANDLE * 5338 REM * H1$ = SMB\A0HEADER FOR FILE HANDLE H$ * 5340 REM * H3$ = SELECTION CRITERIA (=, >, >=) * 5342 REM * X'8080' EQUAL TO * 5344 REM * X'2080' GREATER THAN * 5346 REM * X'6080' GREATER THAN OR EQUAL TO * 5348 REM * * 5350 REM * K0 = KEY POSITION * 5352 REM * K1 = KEY PATH * 5354 REM * K2 = LENGTH OF KEY * 5356 REM * K$ = VALUE OF KEY * 5358 REM * * 5360 REM * RETURN - V0$ = RETURN CODE (FF = O K ) * 5362 REM * V1 = LENGTH OF DATA READ IN V9$() * 5364 REM * V4$ = ALTERNATE MASK * 5366 REM * V9$( = DATA READ * 5368 REM * * 5370 REM * EXAMPLE * 5372 REM * 10 DIM C1$5,N1$30,B1$3,W$8 * 5374 REM * 20 W$=HEX(A005A01EA0035205) * 5376 REM * 25 C1$="00001" * 5378 REM * 30 GOSUB '114 (H$, H1$, H3$, 1, 0, 5, C1$) * 5380 REM * 40 IF V0$ = HEX(FF) THEN 60 * 5382 REM * 50 STOP "ERROR IN FIND" * 5384 REM * 60 $UNPACK (F=W$) V9$() TO C1$,N1$,B1$,A1 * 5386 REM * * 5388 REM ***************************************************************** 5390 DEFFN '114 (V9$,V7$,V5$,V3,V4,V5,V6$) 5392 REM SMB\A0HEADER COMMAND CODE : STR(V7$,7,1)=HEX(26) 5394 REM FIND INDEXED RECORD COMMAND STRUCTURE : STR(V8$()) = HEX(04) & V9$ & V5$ 5396 STR(V8$(),6) = BIN(V3,2) & BIN(V4,2) & BIN(V5+3,2)& HEX(01) & BIN(V5,2) & STR(V6$,,V5) & HEX(00) 5398 REM SEND REQUEST TO 2258 AND GET BACK 01 MMMM 01 LLLL DATA 01 LLLL KEY 00 5400 GOSUB '199 : IF V0$<>HEX(FF) THEN 5410 5402 REM SAVE ALTERNATE MASK AND RET SMBHEADER : V4$ = STR(V9$(),34,2) : V7$=STR(V9$(),1,32) : IF STR(V7$,6,1)<>HEX(00) THEN 5412 5404 REM GET DATA LEN : V1 = VAL(STR(V9$(),39,2),2) 5406 REM SAVE READ DATA : STR(V9$(),,V1) = STR(V9$(),41,V1) 5408 REM GOOD RETURN : V0$=HEX(FF) 5410 RETURN 5412 V0$=HEX(00) : RETURN 5414 REM ***************************************************************** 5416 REM * LOCK AN INDEXED RECORD ('115) * 5418 REM * * 5420 REM * FORM - GOSUB '115 (H$,H1$,K0,K1,K2,K$) * 5422 REM * * 5424 REM * WHERE H$ = FILE HANDLE * 5426 REM * H1$ = SMB\A0HEADER FOR FILE HANDLE H$ * 5428 REM * K0 = POSITION OF KEY WITHIN RECORD * 5430 REM * K1 = KEY PATH * 5432 REM * K2 = LENGTH OF KEY * 5434 REM * K$ = VALUE OF KEY * 5436 REM * * 5438 REM * RETURN - V0$ = RETURN CODE (FF = O K) * 5440 REM * * 5442 REM * EXAMPLE * 5444 REM * 40 GOSUB '115 (H$) * 5446 REM * 50 IF V0$ = HEX(FF) THEN 70 * 5448 REM * 60 STOP "ERROR IN LOCK" * 5450 REM * 70 ...... * 5452 REM * * 5454 REM ***************************************************************** 5456 DEFFN '115 (V9$,V7$,V3,V4,V5,V6$) 5458 REM UPDATE SMB WITH CMD : STR(V7$,7,1)=HEX(1E) 5460 REM TWO HEX(0000) BELLOW ARE FOR TIMEOUT & SELECTION CRITERIA 5462 REM UPDATE CMD STRING : V8$()=HEX(05)&V9$&HEX(0000)&HEX(0000)&BIN(V3,2)&BIN(V4,2) 5464 REM PUT KEY VALUE : STR(V8$(),12,V5+6)=BIN(V5+3,2)&HEX(01)&BIN(V5,2)&STR(V6$,,V5)&HEX(00) 5466 REM SEND CMD TO 2258 : GOSUB '199 : IF V0$<>HEX(FF) THEN 5472 5468 REM SEND BACK SMB : V7$=STR(V9$(),1,32) 5470 V0$=HEX(FF) 5472 RETURN 5474 REM ***************************************************************** 5476 REM * UNLOCK AN INDEXED RECORD ('116) * 5478 REM * * 5480 REM * FORM - GOSUB '116 (H$,H1$) * 5482 REM * * 5484 REM * WHERE H$ = FILE HANDLE * 5486 REM * H1$ = SMB HEADER * 5488 REM * RETURN - V0$ = RETURN CODE (FF = O K ) * 5490 REM * * 5492 REM * EXAMPLE * 5494 REM * 40 GOSUB '116 (H$) * 5496 REM * 50 IF V0$ = HEX(FF) THEN 70 * 5498 REM * 60 STOP "ERROR IN UNLOCK" * 5500 REM * 70 ...... * 5502 REM * * 5504 REM ***************************************************************** 5506 DEFFN '116 (V9$,V7$) 5508 REM PUT CMD IN SMB : STR(V7$,7,1) = HEX(21) 5510 REM BUILD CMD DATA : V8$()=HEX(01)&V9$&HEX(0000)&HEX(00) 5512 REM SEND TO 2258 : GOSUB '199 : IF V0$<>HEX(FF) THEN 5518 5514 REM GET BSCK SMB : V7$= STR(V9$(),1,32) 5516 V0$=HEX(FF) 5518 RETURN 5520 DEFFN'31 "N$=";HEX(22);"VSACESS2";HEX(22);":SCRATCH T N$: SAVE T () N$"