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