Listing of file='VSACESS0' on disk='vmedia/731-8012A.wvd.zip'
# Sector 328, program filename = 'VSACESS0'
2000 REM VSACESS0 11/10/87 FROM 10 SEP 86
2002 REM % (c) Copyright Wang Laboratories, Inc. 1986
2004 REM SUPPORTS VARIABLE USAGE (DIM STATEMENTS)
2006 REM GENERAL FILE OPEN
2008 REM GENERAL FILE CLOSE
2010 REM
2012 REM % ASSUMPTIONS
2014 REM *****************************************************************
2016 REM * ASSUMPTIONS - *
2018 REM * #1 - STATUS ADDRESS *
2020 REM * #2 - COMMAND ADDRESS *
2022 REM * #3 - DATA ADDRESS *
2024 REM *****************************************************************
2026 REM
2028 REM % VARIABLE USAGE
2030 REM *****************************************************************
2032 REM * *
2034 REM * VARIABLE USAGE - *
2036 REM * *
2038 REM * V$ = FILE NAME (LENGTH = 32) *
2040 REM * V0 = RELATIVE OFFSET OF RECORD TO BE LOCKED, READ, *
2042 REM * RE-WRITTEN *
2044 REM * V0$ = RETURN CODE (FF=OKAY, 00=ERROR IN SUBR *
2046 REM * 5A=ERROR IN '199 (2258 FIRMWARE) *
2048 REM * V1 = WORK VARIABLE *
2050 REM * V1$ = FILE ORGANIZATION (LENGTH = 1) *
2052 REM * V2 = WORK VARIABLE *
2054 REM * V2$ = OPEN MODE (LENGTH = 1) *
2056 REM * V3 = KEY POSITION (INDEXED FILES) *
2058 REM * V3$ = OPTION FLAG (LENGTH = 1, *
2060 REM * VALUE = 'H' OR ' ' FOR HOLD OPTION *
2062 REM * = 'T' OR ' ' FOR TEMPORARY FILE OPT *
2064 REM * V4 = KEY PATH (INDEXED FILES) *
2066 REM * V4$ = ALTERNATE MASK *
2068 REM * V5 = KEY LENGTH (INDEXED FILES) *
2070 REM * V5$ = SEARCH CRITERIA FOR FIND *
2072 REM * V6 = TIMEOUT FOR HOLD (IN SECONDS) *
2074 REM * V6$ = KEY VALUE (INDEXED FILES) *
2076 REM * V7 = # OF RECORD TO BE READ *
2078 REM * V7$ = HEADER (32 BYTES) *
2080 REM * V8$ = WORK SCALAR VARIABLE *
2082 REM * V8$( = WORK ARRAY VARIABLE *
2084 REM * V9$ = FILE HANDLE (LENGTH = 2) *
2086 REM * V9$( = DATA BUFFER *
2088 REM * *
2090 REM *****************************************************************
2092 REM
2094 DIM V$32, V1$1, V2$1, V3$1, V4$2, V5$2, V6$6
2096 DIM V7$32, V8$, V8$(16), V9$2, V9$(16,16)
2098 REM % GENERAL OPEN FILE SUBROUTINE ('101)
2100 REM *****************************************************************
2102 REM * OPEN ANY DMS FILE ('101) *
2104 REM * *
2106 REM * FORM - GOSUB '101 (N$,T$,M$) *
2108 REM * *
2110 REM * WHERE N$ = NAME OF FILE *
2112 REM * T$ = FILE ORGANIZATION (TYPE) *
2114 REM * M$ = FILE OPEN MODE *
2116 REM * *
2118 REM * NAME OF FILE MAY BE - *
2120 REM * //SYSTEM/VOLUME/LIBRARY/FILE OR *
2122 REM * ///VOLUME/LIBRARY/FILE *
2124 REM * *
2126 REM * FILE ORGANIZATION (TYPE) *
2128 REM * 'I' = INDEXED *
2130 REM * 'C' = CONSECUTIVE *
2132 REM * 'R' = RELATIVE *
2134 REM * 'B' = BLOCK *
2136 REM * *
2138 REM * FILE OPEN MODE *
2140 REM * 'R' = READ ONLY *
2142 REM * 'S' = SHARED *
2144 REM * 'X' = EXCLUSIVE *
2146 REM * 'E' = EXTENDED *
2148 REM * *
2150 REM * RETURN - V0$ = RETURN CODE (00 = ERROR IN SUBROUTINE CALL) *
2152 REM * (5A = ERROR IN '199 [2258 FIRM]) *
2154 REM * (FF = OKAY LOOK AT SMB HDR) *
2156 REM * V1 = LENGTH OF VALID DATA IN V9$() *
2158 REM * V7$ = SMB\A0HEADER FOR FILE HANDLE V9$ *
2160 REM * V9$ = FILE HANDLE *
2162 REM * V9$( = FILE DATA *
2164 REM * 2 BYTE COUNT OF DATA TO FOLLOW *
2166 REM * 62 BYTES OF ATTRIBUTE DATA *
2168 REM * 1 BYTE - DATABLOCK ID = HEX(01) *
2170 REM * 2 BYTE COUNT OF DATA TO FOLLOW *
2172 REM * 1 BYTE - FILE TYPE 'C','I','R',ETC. *
2174 REM * 1 BYTE - RECORD TYPE Fixed or Variable *
2176 REM * 1 BYTE - COMPRESS FLAG Y OR N *
2178 REM * 1 BYTE - FILE CLASS A-Z,#,$,@ *
2180 REM * 4 BYTE - NO. OF RECORDS *
2182 REM * 4 BYTE - RECORD SIZE *
2184 REM * 4 BYTE - NO. OF EXTENTS *
2186 REM * 4 BYTE - NO. OF BLOCKS USED *
2188 REM * 4 BYTE - NO. OF BLOCKS ALLOCATED *
2190 REM * 8 BYTE - CREATOR OF FILE (ID) *
2192 REM * 6 BYTE - CREATION DATE - YYMMDD *
2194 REM * 6 BYTE - MODIFIED DATE - YYMMDD *
2196 REM * 6 BYTE - EXPIRATION DATE - YYMMDD *
2198 REM * 1 BYTE - WP FILE PROLOGUE PRESENT ? *
2200 REM * 2 BYTE - PRIMARY KEY POSITION (INDEXED) *
2202 REM * 2 BYTE - PRIMARY KEY LENGTH (INDEXED) *
2204 REM * 2 BYTE - NO. ALTERNATE KEYS (INDEXED) *
2206 REM * 2 BYTE - ALTERNATE KEY MASK (INDEXED) *
2208 REM * 3 BYTE - FILE ACCESS WRITE/READ/EXEC *
2210 REM * 11 BYTES ALTERNATE KEY DATA (IF APPLIC) *
2212 REM * 1 BYTE - DATABLOCK ID = HEX(01) *
2214 REM * 2 BYTE COUNT OF DATA TO FOLLOW *
2216 REM * 1 BYTE - DUPLICATES ALLOWED (INDEXED) *
2218 REM * 1 BYTE - COMPRESSION ON KEY (INDEXED) *
2220 REM * 2 BYTE - ORDINAL NUMBER (INDEXED) *
2222 REM * 2 BYTE - START POS. OF KEY (INDEXED) *
2224 REM * 2 BYTE - KEY LENGTH (INDEXED) *
2226 REM * EXAMPLE *
2228 REM * 10 DIM N$32, T$1, M$1 *
2230 REM * 20 N$="///ANYVOL/ANYLIB/NAMEFILE" *
2232 REM * 30 T$="I" *
2234 REM * 40 M$="S" *
2236 REM * 50 GOSUB '101 (N$,T$,M$) *
2238 REM * 60 IF V0$ = HEX(FF) THEN 80 *
2240 REM * 70 STOP "ERROR IN OPEN" *
2242 REM * 80 REM FILE HANDLE = V9$ *
2244 REM * *
2246 REM *****************************************************************
2248 DEFFN '101 (V$,V1$,V2$)
2250 REM CONSTRUCT OMT HEADER & COMMAND STRUCTURE FOR OPEN
2252 REM DEFINE HDR
: V7$=ALL(HEX(00))
: STR(V7$,,5)=HEX(FF) & "SMB" & HEX(FF)
: STR(V7$,7,1)=HEX(01)
: STR(V7$,23,2)=HEX(FFFF)
2254 REM 'OPEN' CMD STRUCTURE
: V8$()=ALL(" ")
: STR(V8$(),1,3)=HEX(030202)
2256 REM CHECK NAME
: IF STR(V$,1,2)<>"//" THEN 2278
2258 REM OPEN 'TYPE'
: V1=POS(" IRCBS"=V1$)
: IF V1<11 OR V1>15 THEN 2278
: V2=2^V1
: STR(V8$(),4,2)=BIN(V2,2)
2259 REM /If SHARED mode is specified for CONSECUTIVE file then the file is
opened in SHARED I/O mode for 2200SRV Rel 01.60.00 and above/Ram/19 Oct
., '90/
2260 REM OPEN 'MODE'
: V1=POS(" SXER"=V2$)
: IF V1<12 OR V1>15 THEN 2278
: IF V1$="C" AND V2$="S" THEN V2=(2^V1)+(2^(V1+1))
: ELSE V2=2^V1
: STR(V8$(),6,2)=BIN(V2,2)
2262 REM LENGTH OF BYTES
: STR(V8$(),8,2)=BIN(8+LEN(V$),2)
2264 REM OBJECT NAME
: STR(V8$(),10,1)=HEX(04)
: STR(V8$(),11,LEN(V$)+1)=V$ & HEX(00)
2266 REM TYPE = FILE
: V1=12+LEN(V$)
: STR(V8$(),V1,7)=HEX(04) & "FILE" & HEX(0000)
2268 REM SEND DATA TO 2258 AND GET RESPONSE
: GOSUB '199
: IF V0$=HEX(5A) THEN 2278
2270 REM UPDATE SMB\A0HEADER
: V7$=STR(V9$(),,32)
: IF STR(V7$,6,1)<>HEX(00) THEN 2278
2272 REM HANDLE
: V9$=STR(V9$(),34,2)
2274 REM PROCESS DATA BLOCK
: V1=VAL(STR(V8$,3,2),2)-35
: STR(V9$(),,V1)=STR(V9$(),41,V1)
: STR(V9$(),V1+1)=ALL(" ")
2276 REM GOOD RETURN
: V0$=HEX(FF)
: RETURN
2278 REM BAD OPEN INIT RETURN VALUES TO 00'S AND 20'S
: V0$=HEX(00)
: RETURN
2280 REM % SEND DATA TO 2258 AND GET RESPONSE
2282 REM *****************************************************************
2284 REM * SEND COMMAND TO 2258 AND GET RESPONSE BACK ('199) *
2286 REM * *
2288 REM * FORM - GOSUB '199 *
2290 REM * *
2292 REM * ENTRY - V7$ = SMB\A0HEADER FOR FILE *
2294 REM * V8$( = COMMAND STRUCTURE *
2296 REM * *
2298 REM * EXIT - STR(V8$,3,2) = CHAR COUNT OF RESPONSE *
2300 REM * V9$() = RESPONSE *
2302 REM * *
2304 REM *****************************************************************
2306 DEFFN ' 199
2308 REM CONSTRUCT COMMAND
: STR(V8$,7,1)=HEX(53)
: REM SEND DMS COMMAND TO 2258
2310 REM COMMAND CLASS & PARTITION # (-1)
: STR(V8$,6,1) = BIN(#PART-1) AND HEX(0F) OR HEX(50)
2312 REM XMIT COMMAND CLASS, PARTITION # & COMMAND TO 2258 GET RESPONSE (80 =
OK)
2314 $OPEN #3
: $GIO #3 (4660 4270 8701, V8$)
: IF STR(V8$,1,1)<> HEX(80) THEN 2336
2316 REM SEND OMT COMMAND (E3), COUNT OMT COMMAND (SMB & COMMAND)
2318 V1 = LEN(V8$())+34
: STR(V8$,6,2) = BIN(V1,2)
: $GIO #3 (40E3 4260 4270 1800 A000 1801 A000 4000 8701, V8$) V7$;STR(V8$()
,,V1)
2320 REM CHECK ACK/NACK (80=OK)
: IF STR(V8$,1,1)<>HEX(80) THEN 2336
2322 REM TAKE RESPONSE FROM 2258
: V9$()=ALL(" ")
: $GIO #3 (8703 8704 1801 C340, V8$) V8$;STR(V9$(),1,VAL(STR(V8$,3,2),2))
2324 REM CHECK FOR DATA COMPLETE OR NEEDS CONTINUATION
: $GIO #3 (4000, V8$)
2326 REM GOOD RETURN
2328 V0$=HEX(FF)
2330 REM RELEASE 2258 AND RETURN
2332 $CLOSE#3
: RETURN
2334 REM ERROR RETURN COMMAND COULD NOT BE PROCESSED BY 2258 FIRMWARE FOR SOME
REASON
2336 V0$=HEX(5A)
: GOTO 2332
2338 REM % GENERAL CLOSE FILE SUBROUTINE ('102)
2340 REM *****************************************************************
2342 REM * CLOSE ANY DMS FILE ('102) *
2344 REM * *
2346 REM * FORM - GOSUB '102 (H$, H1$) *
2348 REM * *
2350 REM * WHERE H$ = FILE HANDLE *
2352 REM * H1$ = SMB\A0HEADER FOR FILE HANDLE H$ *
2354 REM * *
2356 REM * RETURN - V0$ = RETURN CODE (00 = ERROR) *
2358 REM * V1 = LENGTH OF VALID DATA IN V9$() *
2360 REM * V7$ = SMB HEADER *
2362 REM * V9$( = DATA RETURNED HEX(000000) *
2364 REM * 1 BYTE - # OF WORDS IN WORD BLOCK = 00 *
2366 REM * 2 BYTE - # OF BYTES IN BYTE BLOCK = 0000 *
2368 REM * *
2370 REM * EXAMPLE *
2372 REM * 10 DIM H$2,H1$32 *
2374 REM * 50 GOSUB '102 (H$, H1$) *
2376 REM * 60 IF V0$ = HEX(FF) THEN 80 *
2378 REM * 70 STOP "ERROR IN CLOSE" *
2380 REM * *
2382 REM *****************************************************************
2384 DEFFN '102 (V9$,V7$)
2386 REM CONSTRUCT OMT HEADER & COMMAND STRUCTURE FOR CLOSE
2388 REM DEFINE HDR
: STR(V7$,6,4) = HEX(00020000)
2390 REM 'CLOSE' CMD STRUCTURE
: V8$()=ALL(" ")
: STR(V8$(),1,5)=HEX(02) & V9$ & HEX(0000)
2392 REM FLAG UPDATE PARAMETERS AND DATA BLOCK
: STR(V8$(),6,6)=HEX(000301000000)
2394 REM SEND CONSTRUCTED COMMAND TO 2258
: GOSUB '199
: IF V0$<>HEX(FF) THEN 2402
2396 REM UPDATE SMB HEADER
: V7$=STR(V9$(),,32)
: IF STR(V7$,6,1)<>HEX(00) THEN 2404
2398 REM PROCESS DATA BLOCK
: V1=VAL(STR(V8$,3,2),2)-32
: STR(V9$(),,V1)=STR(V9$(),33,V1)
: STR(V9$(),V1+1)=ALL(" ")
2400 REM GOOD RETURN
: V0$=HEX(FF)
2402 RETURN
2404 V0$=HEX(00)
: RETURN
2406 DEFFN'31 "N$=";HEX(22);"VSACESS0";HEX(22);":SCRATCH T N$: SAVE T () N$"