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$"