image of READY prompt

Wang2200.org

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