From dab6f2635fc1fe20df4ec2986ee6b17a5b734649 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Thu, 23 May 2024 23:37:07 -0700 Subject: [PATCH] Add a DEVICE argument to \NSRANDOM.CREATE.STREAM so that when it creates a stream, it can pass a device to the stream creation code. As of PR814 of July 2022, streams whose DEVICE field is NIL break during creation. Update all callers to \NSRANDOM.CREATE.STREAM to pass the new DEVICE argument. --- .gitignore | 3 +- sources/NSFILING | 505 ++++++++++++++++++++---------------------- sources/NSFILING.LCOM | Bin 82161 -> 75116 bytes 3 files changed, 243 insertions(+), 265 deletions(-) diff --git a/.gitignore b/.gitignore index 754ad21c..80fc366d 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,8 @@ loadups/exports.all library/RDSYS* loadups/lisp.sysout loadups/full.sysout -loadups/fuller.sysout # not currently included but might as well ignore it +# not currently included but might as well ignore it +loadups/fuller.sysout loadups/*.dribble loadups/whereis.hash loadups/apps.sysout diff --git a/sources/NSFILING b/sources/NSFILING index d72afd0a..17640d05 100644 --- a/sources/NSFILING +++ b/sources/NSFILING @@ -1,19 +1,18 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "28-Jun-99 17:07:34" {DSK}medley3.5>sources>NSFILING.;2 294552 - changes to%: (FNS \NSFILING.GENERATEFILES) +(FILECREATED "23-May-2024 23:20:49" {DSK}frank>il>medley>sources>NSFILING.;2 293309 - previous date%: "19-Jan-93 10:59:09" {DSK}medley3.5>sources>NSFILING.;1) + :EDIT-BY "frank" + :CHANGES-TO (FNS \NSRANDOM.CREATE.STREAM \NSFILING.GETFILE) + + :PREVIOUS-DATE "28-Jun-99 17:07:34" {DSK}frank>il>medley>sources>NSFILING.;1) -(* ; " -Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xerox Corporation. All rights reserved. -") (PRETTYCOMPRINT NSFILINGCOMS) (RPAQQ NSFILINGCOMS - [(COMS (* ; "Filing Protocol") + [(COMS (* ; "Filing Protocol") (COURIERPROGRAMS FILING FILING.4) (DECLARE%: EVAL@COMPILE DONTCOPY (CONSTANTS * NSFILINGCONSTANTS) (RECORDS NSFILINGSTREAM FILINGSESSION FILINGHANDLE NSFILESERVER @@ -54,24 +53,24 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (*NSFILING-PAGE-CACHE-INCREMENT* 4) (*NSFILING-SESSION-TIMEOUT* '(900 . 21600)) (\NSRANDOM.CHECK.CACHE)) - (COMS (* ; "Connection maintenance") + (COMS (* ; "Connection maintenance") (FNS \GETFILINGCONNECTION \NSFILING.GET.NEW.SESSION \NSFILING.GET.STREAM \NSFILING.COURIER.OPEN \NSFILING.CLOSE.BULKSTREAM \NSFILING.RELEASE.BULKSTREAM FILING.CALL \NSFILING.LOGIN \NSFILING.AFTER.LOGIN \NSFILING.SET.CONTINUANCE \NSFILING.LOGOUT \NSFILING.DISCARD.SESSION \VALID.FILING.CONNECTIONP \NSFILING.CLOSE.CONNECTIONS BREAK.NSFILING.CONNECTION) (ADDVARS (\AFTERLOGINFNS \NSFILING.AFTER.LOGIN))) - (COMS (* ; "Support") + (COMS (* ; "Support") (FNS \NSFILING.CONNECT \NSFILING.MAYBE.CREATE \NSFILING.REMOVEQUOTES \NSFILING.ADDQUOTES \FILING.ATTRIBUTE.TYPE.SEQUENCE \FILING.ATTRIBUTE.TYPE \LISP.TO.NSFILING.ATTRIBUTE)) - (COMS (* ; "FILINGHANDLE stuff") + (COMS (* ; "FILINGHANDLE stuff") (FNS \NSFILING.GETFILE \NSFILING.LOOKUP.CACHE \NSFILING.ADD.TO.CACHE \NSFILING.OPEN.HANDLE \NSFILING.CONFLICTP \NSFILING.CHECK.ACCESS \NSFILING.FILLIN.ATTRIBUTES \NSFILING.COMPOSE.PATHNAME \NSFILING.PARSE.FILENAME \NSFILING.ERRORHANDLER \NSFILING.WHENCLOSED \NSFILING.CLOSE.HANDLE \NSFILING.FULLNAME)) - (COMS (* ; "NSFILING device") + (COMS (* ; "NSFILING device") (FNS \NSFILING.OPENFILE \NSFILING.HANDLE.ERROR \NSFILING.CLOSEFILE \NSFILING.EVENTFN \NSFILING.DELETEFILE \NSFILING.CHILDLESS-P \NSFILING.DIRECTORYNAMEP \NSFILING.HOSTNAMEP \NSFILING.GETFILENAME \NSFILING.GETFILEINFO @@ -80,21 +79,20 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe \NSFILING.GETEOFPTR \NSFILING.GENERATEFILES \NSFILING.GENERATE.STARS \NSFILING.NEXTFILE \NSFILING.FILEINFOFN \NSFILING.RENAMEFILE \NSFILING.COPYFILE \NSFILING.COPY/RENAME)) - (COMS (* ; "Random access methods") + (COMS (* ; "Random access methods") (FNS \NSRANDOM.CLOSEFILE \NSRANDOM.RELEASE.HANDLE \NSRANDOM.RELEASE.LOCK \NSRANDOM.RELEASE.IF.ERROR \NSRANDOM.CREATE.STREAM \NSRANDOM.READPAGES \NSRANDOM.READ.SEGMENT \NSRANDOM.PREPARE.CACHE \NSRANDOM.FETCH.CACHE \NSRANDOM.CHECK.CACHE \NSRANDOM.WRITEPAGES \NSRANDOM.WRITE.SEGMENT \NSRANDOM.WROTE.HANDLE \NSRANDOM.SETEOFPTR \NSRANDOM.TRUNCATEFILE \NSRANDOM.UPDATE.VALIDATION \NSRANDOM.OPENFILE) - (* ; "error handling") + (* ; "error handling") (FNS \NSRANDOM.HANDLE.ERROR \NSRANDOM.PROCEEDABLE.ERROR \NSRANDOM.REESTABLISH \NSRANDOM.STREAM.CHANGED \NSRANDOM.DESTROY.STREAM \NSRANDOM.SESSION.WATCHER \NSRANDOM.ENSURE.WATCHER)) - (COMS (* ; "Cleaning up directories") + (COMS (* ; "Cleaning up directories") (FNS GC-FILING-DIRECTORY \NSGC.COLLECT.DIRECTORIES)) - (COMS (* ; - "Deserialize (special for NSMAIL)") + (COMS (* ; "Deserialize (special for NSMAIL)") (FNS \NSFILING.DESERIALIZE \NSFILING.DESERIALIZE1)) [COMS (FNS \NSFILING.INIT) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\NSFILING.INIT] @@ -418,106 +416,100 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (DECLARE%: EVAL@COMPILE -(ACCESSFNS NSFILINGSTREAM ( (* ; - "Overlays STREAM. F1-2 and FW6-8 are used by the bulkdata device") - (NSFILING.CONNECTION (fetch F3 of DATUM) - (replace F3 of DATUM with NEWVALUE)) - (* ; - "Session on which this stream is open") - (NSFILING.HANDLE (fetch F4 of DATUM) - (replace F4 of DATUM with NEWVALUE)) - (* ; "Filing HANDLE") - (NSFILING.NEW.ATTRIBUTES (fetch F5 of DATUM) - (replace F5 of DATUM with NEWVALUE)) - (* ; - "For output sequential files, the attributes to install after we write the file") - (NSFILING.PAGE.CACHE (fetch F1 of DATUM) - (replace F1 of DATUM with NEWVALUE)) - (* ; - "Cache of pages read from server but not yet read by client") - (NSFILING.SERVER.LENGTH (fetch F2 of DATUM) - (replace F2 of DATUM with NEWVALUE)) - (* ; - "For random-access streams, actual length of file on server") - (NSFILING.LAST.REQUEST (fetch FW6 of DATUM) - (replace FW6 of DATUM with NEWVALUE)) - (* ; - "Last page requested to be read or written") - )) +(ACCESSFNS NSFILINGSTREAM ( (* ; + "Overlays STREAM. F1-2 and FW6-8 are used by the bulkdata device") + (NSFILING.CONNECTION (fetch F3 of DATUM) + (replace F3 of DATUM with NEWVALUE)) + (* ; + "Session on which this stream is open") + (NSFILING.HANDLE (fetch F4 of DATUM) + (replace F4 of DATUM with NEWVALUE)) + (* ; "Filing HANDLE") + (NSFILING.NEW.ATTRIBUTES (fetch F5 of DATUM) + (replace F5 of DATUM with NEWVALUE)) + (* ; + "For output sequential files, the attributes to install after we write the file") + (NSFILING.PAGE.CACHE (fetch F1 of DATUM) + (replace F1 of DATUM with NEWVALUE)) + (* ; + "Cache of pages read from server but not yet read by client") + (NSFILING.SERVER.LENGTH (fetch F2 of DATUM) + (replace F2 of DATUM with NEWVALUE)) + (* ; + "For random-access streams, actual length of file on server") + (NSFILING.LAST.REQUEST (fetch FW6 of DATUM) + (replace FW6 of DATUM with NEWVALUE)) + (* ; + "Last page requested to be read or written") + )) -(DATATYPE FILINGSESSION ((FSLOGINCHANGED FLAG) (* ; - "True if login info changes for this host") - (FSREALACTIVITY FLAG) (* ; - "Set true when there have been non-CONTINUE calls made on this session") - (NIL BITS 6) - (FSPARSEDNAME POINTER) (* ; "Canonical NSNAME of server") - (FSNAMESTRING POINTER) (* ; "same as a Lisp string") - (FSADDRESS POINTER) (* ; "NSADDRESS of server") - (FSPROCESSNAME POINTER) (* ; - "Courier stream open for this session, or NIL if none") - (FSSESSIONHANDLE POINTER) (* ; "Handle for this session") - (FSSESSIONLOCK POINTER) - (FSLASTREALACTIVITYTIMER POINTER) - (* ; - "Time of last interesting activity") - (FSDEVICENAME POINTER) - (FSCOURIERSTREAMS POINTER) (* ; - "Courier streams usable by session") - (FSCACHEDHANDLES POINTER) (* ; - "Zero or more instances of FILINGHANDLE describing handles we have open in this session") - (FSLOGINNAME POINTER) (* ; - "Name under which this session is logged in") - (FSPROTOCOLNAME POINTER) (* ; "FILING or OLDFILING") - (FSPROTOCOLDEF POINTER) (* ; - "Courier def for FILING.CALL to use") - (FSSESSIONTIMER POINTER) (* ; - "Time we last did anything at all in this session") - (FSCONTINUANCE WORD) (* ; - "How long in msecs we can be idle without having server close session") - (FSVERSION WORD) (* ; - "Version of the protocol in use by this server") - (* ; "Spares") - (NIL POINTER) - (NIL POINTER) - (NIL POINTER))) +(DATATYPE FILINGSESSION ((FSLOGINCHANGED FLAG) (* ; + "True if login info changes for this host") + (FSREALACTIVITY FLAG) (* ; + "Set true when there have been non-CONTINUE calls made on this session") + (NIL BITS 6) + (FSPARSEDNAME POINTER) (* ; "Canonical NSNAME of server") + (FSNAMESTRING POINTER) (* ; "same as a Lisp string") + (FSADDRESS POINTER) (* ; "NSADDRESS of server") + (FSPROCESSNAME POINTER) (* ; + "Courier stream open for this session, or NIL if none") + (FSSESSIONHANDLE POINTER) (* ; "Handle for this session") + (FSSESSIONLOCK POINTER) + (FSLASTREALACTIVITYTIMER POINTER) (* ; "Time of last interesting activity") + (FSDEVICENAME POINTER) + (FSCOURIERSTREAMS POINTER) (* ; "Courier streams usable by session") + (FSCACHEDHANDLES POINTER) (* ; + "Zero or more instances of FILINGHANDLE describing handles we have open in this session") + (FSLOGINNAME POINTER) (* ; + "Name under which this session is logged in") + (FSPROTOCOLNAME POINTER) (* ; "FILING or OLDFILING") + (FSPROTOCOLDEF POINTER) (* ; + "Courier def for FILING.CALL to use") + (FSSESSIONTIMER POINTER) (* ; + "Time we last did anything at all in this session") + (FSCONTINUANCE WORD) (* ; + "How long in msecs we can be idle without having server close session") + (FSVERSION WORD) (* ; + "Version of the protocol in use by this server") + (* ; "Spares") + (NIL POINTER) + (NIL POINTER) + (NIL POINTER))) -(DATATYPE FILINGHANDLE ((NSHDIRECTORYP FLAG) (* ; "Handle is a directory") - (NSHWASREAD FLAG) (* ; -"True if we have read file since we obtained the handle (in which case read date has been updated)") - (NSHWASWRITTEN FLAG) - (NSHWASMODIFIED FLAG) - (NIL BITS 4) - (NSHDATUM POINTER) (* ; - "The file handle datum used in Courier calls") - (NSHFILEID POINTER) (* ; "FILE.ID of file") - (NSHNAME POINTER) (* ; - "Full name of the file referenced") - (NSHPATHNAME POINTER) (* ; "Canonical pathname of file") - (NSHATTRIBUTES POINTER) (* ; "Cached attributes") - (NSHACCESS POINTER) (* ; - "Current access controls on handle") - (NSHTIMER POINTER) (* ; "Last reference to this handle") - (NSHBUSYCOUNT WORD) (* ; - "Number of current users of handle") - (NIL WORD) - (NSHDIRECTORYPATH POINTER) (* ; - "For directories, the list of component dirs") - (NIL POINTER)) - NSHTIMER _ (SETUPTIMER 0) - NSHDIRECTORYPATH _ T) +(DATATYPE FILINGHANDLE ((NSHDIRECTORYP FLAG) (* ; "Handle is a directory") + (NSHWASREAD FLAG) (* ; + "True if we have read file since we obtained the handle (in which case read date has been updated)") + (NSHWASWRITTEN FLAG) + (NSHWASMODIFIED FLAG) + (NIL BITS 4) + (NSHDATUM POINTER) (* ; + "The file handle datum used in Courier calls") + (NSHFILEID POINTER) (* ; "FILE.ID of file") + (NSHNAME POINTER) (* ; "Full name of the file referenced") + (NSHPATHNAME POINTER) (* ; "Canonical pathname of file") + (NSHATTRIBUTES POINTER) (* ; "Cached attributes") + (NSHACCESS POINTER) (* ; "Current access controls on handle") + (NSHTIMER POINTER) (* ; "Last reference to this handle") + (NSHBUSYCOUNT WORD) (* ; "Number of current users of handle") + (NIL WORD) + (NSHDIRECTORYPATH POINTER) (* ; + "For directories, the list of component dirs") + (NIL POINTER)) + NSHTIMER _ (SETUPTIMER 0) + NSHDIRECTORYPATH _ T) (RECORD NSFILESERVER (NSFSPARSEDNAME . NSFSADDRESSES)) (RECORD NSFILINGDEVICEINFO (NSFILESERVER NSWATCHERPROC NSFILINGLOCK NSFILINGNAME NSRANDOMDEVICE . NSCONNECTIONS)) -(RECORD \NSFILING.GENFILESTATE (CURRENTINFO NSCONNECTION NSGENERATOR NSFILTER NSIGNOREDIRECTORIES - NSBULKSTREAM)) +(RECORD \NSFILING.GENFILESTATE (CURRENTINFO NSCONNECTION NSGENERATOR NSFILTER NSIGNOREDIRECTORIES + NSBULKSTREAM)) (RECORD NSFILINGPARSE (NSDIRECTORIES NSROOTNAME NSVERSION NSDIRECTORYP NSHASPERIOD)) (RECORD NSPAGECACHE (NSPSIZE . NSPHEADER) - (RECORD NSPHEADER (NSPTAIL . NSPBUFFERS))) + (RECORD NSPHEADER (NSPTAIL . NSPBUFFERS))) ) (/DECLAREDATATYPE 'FILINGSESSION @@ -571,13 +563,12 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (DECLARE%: EVAL@COMPILE -(PUTPROPS WITHOUT.SESSION.MONITOR MACRO - [(SESSION . FORMS) - (LET ((LOCK (fetch FSSESSIONLOCK of SESSION))) - (DECLARE (LOCALVARS LOCK)) - (RELEASE.MONITORLOCK LOCK) - (PROG1 (PROGN . FORMS) - (OBTAIN.MONITORLOCK LOCK]) +(PUTPROPS WITHOUT.SESSION.MONITOR MACRO [(SESSION . FORMS) + (LET ((LOCK (fetch FSSESSIONLOCK of SESSION))) + (DECLARE (LOCALVARS LOCK)) + (RELEASE.MONITORLOCK LOCK) + (PROG1 (PROGN . FORMS) + (OBTAIN.MONITORLOCK LOCK]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -749,10 +740,10 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (RPAQQ \NSFILING.NULL.HANDLE (0 0)) (RPAQQ \NSFILING.PROTECTION.BITS ((READ . 16) - (WRITE . 8) - (DELETE . 1) - (CREATE . 2) - (MODIFY . 4))) + (WRITE . 8) + (DELETE . 1) + (CREATE . 2) + (MODIFY . 4))) (RPAQQ \NSFILING.ATTRIBUTES ((CHECKSUM 0 CARDINAL) @@ -801,11 +792,9 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (FILETYPE FILE.TYPE))) (RPAQ \NSFILING.USEFUL.ATTRIBUTE.TYPES (\FILING.ATTRIBUTE.TYPE.SEQUENCE '(CREATED.ON FILE.ID - IS.DIRECTORY - PATHNAME - SIZE.IN.BYTES - FILE.TYPE VERSION - ))) + IS.DIRECTORY PATHNAME + SIZE.IN.BYTES + FILE.TYPE VERSION))) ) (RPAQ? FILING.CACHE.LIMIT 6) @@ -1608,6 +1597,7 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (\NSFILING.GETFILE [LAMBDA (DEVICE FILENAME ACCESS RECOG OPTION PARAMETERS DIROK SEQUENTIAL OLDSTREAM) + (* ; "Edited 23-May-2024 23:12 by frank") (* ; "Edited 19-Aug-88 17:17 by bvm") (* ;; "Opens FILENAME for specified ACCESS and RECOG, returning a stream. If OPTION is NAME, ATTRIBUTES, or HANDLE, just return the appropriate information instead of a stream. If OPTION is DIRECTORY, return T or NIL if FILENAME is a directory or not -- PARAMETERS gives the CREATE? option in case the directory doesn't exist. If ACCESS is not NONE, then PARAMETERS gives extra parameters for the open.") @@ -1621,56 +1611,53 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (RETURN NIL))) [COND ((EQ ACCESS 'SERIALIZE) (* ; - "Like INPUT, but retrieve a serialized stream on file") + "Like INPUT, but retrieve a serialized stream on file") (SETQ ACCESS 'INPUT) (SETQ SERIALIZE 'SERIALIZE) (SETQ SEQUENTIAL T)) ((AND (NOT SEQUENTIAL) (NOT OPTION) *NSFILING-RANDOM-ACCESS*) (* ; - "RANDEVICE set if we want to open a randaccess stream") - (SETQ RANDEVICE (fetch NSRANDOMDEVICE of (fetch DEVICEINFO of - DEVICE] + "RANDEVICE set if we want to open a randaccess stream") + (SETQ RANDEVICE (fetch NSRANDOMDEVICE of (fetch DEVICEINFO of DEVICE] RETRY [COND [(SETQ HANDLE (\NSFILING.LOOKUP.CACHE SESSION FILENAME)) (* ; "Cache hit") (COND (OPTION (* ; - "Got handle, so just do what the option said (else fall thru and try to open a file)") + "Got handle, so just do what the option said (else fall thru and try to open a file)") (GO HANDLE.OPTION] ((AND (LISTP FILENAME) (EQ (CAR FILENAME) 'FILE.ID)) (* ; "Identifying file by ID, take shortcut. Do this second just in case we have cached this file already") (SETQ FILE.ID (CADR FILENAME))) (T (* ; - "Parse the name and go thru all this hassle") + "Parse the name and go thru all this hassle") (SETQ PARSE (\NSFILING.PARSE.FILENAME FILENAME)) (SETQ DIRPATH (fetch NSDIRECTORIES of PARSE)) (COND ((NULL DIRPATH) (* ; - "No directories specified, so is illegal name") + "No directories specified, so is illegal name") (GO FILE.NOT.FOUND)) [(EQ OPTION 'DIRECTORY) (RETURN (AND (fetch NSDIRECTORYP of PARSE) - (SETQ HANDLE (\NSFILING.CONNECT SESSION DIRPATH T PARAMETERS - )) + (SETQ HANDLE (\NSFILING.CONNECT SESSION DIRPATH T PARAMETERS)) (GO HANDLE.OPTION] ((AND (fetch NSDIRECTORYP of PARSE) (NOT DIROK)) (* ; - "No name, just a directory. Failure unless caller said a directory file is ok") + "No name, just a directory. Failure unless caller said a directory file is ok") (GO FILE.NOT.FOUND))) (SETQ EXPLICIT-VERSION (fetch NSVERSION of PARSE)) (SETQ ROOTNAME (fetch NSROOTNAME of PARSE] [COND (HANDLE (* ; - "We have an open file handle from the cache") + "We have an open file handle from the cache") ) [FILE.ID (* ; - "Try to open an existing file by ID.") + "Try to open an existing file by ID.") (COND - ([SETQ HANDLE (\NSFILING.OPEN.HANDLE SESSION - `((FILE.ID ,FILE.ID)) + ([SETQ HANDLE (\NSFILING.OPEN.HANDLE SESSION `((FILE.ID ,FILE.ID)) (AND RANDEVICE (SELECTQ ACCESS ((BOTH APPEND) 'OUTPUT) @@ -1680,16 +1667,15 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (T (* ; "open by name") (SETQ OLDHANDLE (\NSFILING.OPEN.HANDLE SESSION - [\NSFILING.COMPOSE.PATHNAME - DIRPATH ROOTNAME (OR EXPLICIT-VERSION - (SELECTQ RECOG - (OLDEST '-) - '+] + [\NSFILING.COMPOSE.PATHNAME DIRPATH ROOTNAME + (OR EXPLICIT-VERSION (SELECTQ RECOG + (OLDEST '-) + '+] (AND RANDEVICE (SETQ HAVELOCK (SELECTQ ACCESS ((OUTPUT BOTH APPEND) (* ; -"When opening for output, only get lock right now if we know we will be playing with the old file.") + "When opening for output, only get lock right now if we know we will be playing with the old file.") (AND (OR EXPLICIT-VERSION (NEQ RECOG 'NEW)) 'OUTPUT)) @@ -1703,18 +1689,18 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe 'ACCESS.ERROR) (EQ (CADDR OLDHANDLE) 'FileNotFound] (* ; - "No file of any version exists by this name") + "No file of any version exists by this name") (SETQ HAVELOCK NIL) (SELECTQ RECOG ((OLD OLDEST) (* ; - "No version exists, so certainly this one doesn't") + "No version exists, so certainly this one doesn't") (RETURN NIL)) (COND ((EQ ACCESS 'INPUT) (* ; - "Version given explicitly, file does not exist") + "Version given explicitly, file does not exist") (RETURN NIL)) ((NULL EXPLICIT-VERSION) (* ; - "No extant version, so create number 1") + "No extant version, so create number 1") (OR RANDEVICE (SETQ VERSION 1))) (T (SETQ VERSION EXPLICIT-VERSION] ((LISTP OLDHANDLE) (* ; "Error case") @@ -1723,11 +1709,11 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (GO HANDLE.ERROR)) ((AND (fetch NSHDIRECTORYP of OLDHANDLE) (NOT DIROK)) (* ; - "It's a directory, don't try to treat as ordinary file") + "It's a directory, don't try to treat as ordinary file") (GO FILE.NOT.FOUND)) [(OR EXPLICIT-VERSION (NEQ RECOG 'NEW)) (* ; - "Old file exists, use it unless we explicitly requested a new version") + "Old file exists, use it unless we explicitly requested a new version") (SETQ HANDLE OLDHANDLE) (COND (EXPLICIT-VERSION (SETQ VERSION EXPLICIT-VERSION] @@ -1735,7 +1721,7 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (SETQ VERSION (ADD1 (OR [CADR (ASSOC 'VERSION (OR (fetch NSHATTRIBUTES of OLDHANDLE) ( - \NSFILING.FILLIN.ATTRIBUTES + \NSFILING.FILLIN.ATTRIBUTES SESSION OLDHANDLE] (GO FILE.NOT.FOUND] @@ -1745,7 +1731,7 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe VERSION)) (COND (OPTION (* ; - "Not opening file, something simpler") + "Not opening file, something simpler") (GO HANDLE.OPTION)) ((AND HANDLE (NOT OLDSTREAM) (\NSFILING.CONFLICTP DEVICE SESSION HANDLE ACCESS)) @@ -1753,10 +1739,10 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (SELECTQ ACCESS (INPUT (COND ((NULL HANDLE) (* ; - "Odd to get here. E.g., open for INPUT recog NEW.") + "Odd to get here. E.g., open for INPUT recog NEW.") (GO FILE.NOT.FOUND)) - (RANDEVICE (SETQ FILESTREAM (\NSRANDOM.CREATE.STREAM SESSION HANDLE - 'INPUT HAVELOCK OLDSTREAM))) + (RANDEVICE (SETQ FILESTREAM (\NSRANDOM.CREATE.STREAM SESSION HANDLE + RANDEVICE 'INPUT HAVELOCK OLDSTREAM))) [(NEQ (fetch NSHACCESS of HANDLE) 'OUTPUT) (* ; "Just retrieve old file") (SETQ FILESTREAM (FILING.CALL SESSION (OR SERIALIZE 'RETRIEVE) @@ -1767,18 +1753,18 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (COND ((AND (NEQ ACCESS 'OUTPUT) (NOT RANDEVICE)) (* ; - "Sequential can only write whole files") + "Sequential can only write whole files") (GO FILE.WONT.OPEN))) (COND [HANDLE (* ; - "File already exists, need to overwrite") + "File already exists, need to overwrite") (COND - (RANDEVICE (SETQ FILESTREAM (\NSRANDOM.CREATE.STREAM SESSION - HANDLE ACCESS HAVELOCK - OLDSTREAM T))) + (RANDEVICE (SETQ FILESTREAM + (\NSRANDOM.CREATE.STREAM SESSION HANDLE RANDEVICE + ACCESS HAVELOCK OLDSTREAM T))) [(NULL (fetch NSHACCESS of HANDLE)) (* ; - "Overwrite existing file sequentially") + "Overwrite existing file sequentially") [SETQ FILESTREAM (OR (\NSFILING.CHECK.ACCESS SESSION HANDLE 'WRITE) (FILING.CALL SESSION 'REPLACE @@ -1788,15 +1774,16 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (COND ((type? STREAM FILESTREAM) (* ; - "Cache of saved attributes is now wrong") + "Cache of saved attributes is now wrong") (replace NSHATTRIBUTES of HANDLE with NIL) (* ; - "Save attributes to change after file is stored") - (replace NSFILING.NEW.ATTRIBUTES of FILESTREAM - with PARAMETERS] + "Save attributes to change after file is stored") + (replace NSFILING.NEW.ATTRIBUTES of FILESTREAM with + PARAMETERS + ] (T (GO FILE.BUSY] (OLDSTREAM (* ; - "Trying to reopen old stream, failed.") + "Trying to reopen old stream, failed.") (RETURN NIL)) [(SETQ OLDHANDLE (\NSFILING.CONNECT SESSION DIRPATH T T)) (* ; "Need to create the file, so first had to get a handle on the parent (CREATE and STORE procedures do not permit PATHNAME as one of the specifying attributes).") @@ -1808,7 +1795,7 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe 'CREATE (fetch NSHDATUM of OLDHANDLE) `([NAME ,(\NSFILING.REMOVEQUOTES (fetch NSROOTNAME - of PARSE] + of PARSE] ,@[AND VERSION `((VERSION ,VERSION] ,@PARAMETERS) '((LOCK EXCLUSIVE)) @@ -1824,43 +1811,41 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe NSHDATUM _ HANDLE NSHACCESS _ 'OUTPUT] (* ; - "Create failed or we can't read its attributes! Fall thru to error handler") + "Create failed or we can't read its attributes! Fall thru to error handler") (SETQ FILESTREAM HANDLE) (GO HANDLE.ERROR)) ((type? STREAM (SETQ FILESTREAM - (\NSRANDOM.CREATE.STREAM SESSION - HANDLE ACCESS T))) + (\NSRANDOM.CREATE.STREAM SESSION HANDLE + RANDEVICE ACCESS T))) (* ; - "Succeeded in opening stream, i.e., no further conflicts detected.") + "Succeeded in opening stream, i.e., no further conflicts detected.") (SETQ FULLNAME (\NSFILING.FULLNAME SESSION HANDLE))) (T (GO HANDLE.ERROR] (T (* ; "Start writing new file, guessing the version. Ideally we shouldn't guess the version, but Lisp wants a full file name NOW (grumble).") (SETQ FILESTREAM (OR (\NSFILING.CHECK.ACCESS SESSION OLDHANDLE 'ADD) - (FILING.CALL SESSION 'STORE (fetch NSHDATUM - of OLDHANDLE) - `([NAME ,(\NSFILING.REMOVEQUOTES (fetch - NSROOTNAME - of PARSE] + (FILING.CALL SESSION 'STORE (fetch NSHDATUM of OLDHANDLE) + `([NAME ,(\NSFILING.REMOVEQUOTES (fetch NSROOTNAME + of PARSE] (VERSION ,VERSION) ,@PARAMETERS) NIL NIL SESSION 'RETURNERRORS 'KEEPSTREAM] (T (GO FILE.NOT.FOUND)))) (\ILLEGAL.ARG ACCESS)) (COND - ((NOT (type? STREAM FILESTREAM)) (* ; - "Had handle, but failed to open it.") + ((NOT (type? STREAM FILESTREAM)) (* ; + "Had handle, but failed to open it.") (GO HANDLE.ERROR))) (replace FULLFILENAME of FILESTREAM with (COND - (*UPPER-CASE-FILE-NAMES* - (MKATOM (U-CASE FULLNAME))) - (T FULLNAME))) + (*UPPER-CASE-FILE-NAMES* + (MKATOM (U-CASE FULLNAME))) + (T FULLNAME))) (replace NSFILING.CONNECTION of FILESTREAM with SESSION) (replace NSFILING.HANDLE of FILESTREAM with HANDLE) (replace DEVICE of FILESTREAM with (OR RANDEVICE DEVICE)) (COND (HANDLE (add (fetch NSHBUSYCOUNT of HANDLE) - 1))) + 1))) (RETURN FILESTREAM) HANDLE.OPTION @@ -1870,12 +1855,12 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (RETURN (SELECTQ OPTION (NAME (if HANDLE then (\NSFILING.FULLNAME SESSION HANDLE NIL - *UPPER-CASE-FILE-NAMES*) - else (* ; - "OUTFILEP case: no handle, but we have computed the name") - FULLNAME)) + *UPPER-CASE-FILE-NAMES*) + else (* ; + "OUTFILEP case: no handle, but we have computed the name") + FULLNAME)) (DIRECTORY (* ; - "I'm pretty sure HANDLE can't be NIL at this point, but a little test never hurt anyone.") + "I'm pretty sure HANDLE can't be NIL at this point, but a little test never hurt anyone.") (AND HANDLE (fetch NSHDIRECTORYP of HANDLE) (\NSFILING.FULLNAME SESSION HANDLE NIL *UPPER-CASE-FILE-NAMES*))) @@ -1898,7 +1883,7 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (SETQ HAVELOCK (SETQ HANDLE (SETQ VERSION NIL))) (GO RETRY)) (T (* ; - "Can't get connection at all? OH well, die as if it were true from the start.") + "Can't get connection at all? OH well, die as if it were true from the start.") (RETURN NIL))) FILE.NOT.FOUND (COND @@ -3480,7 +3465,8 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (AND RESETSTATE (\NSRANDOM.RELEASE.LOCK SESSION HANDLE]) (\NSRANDOM.CREATE.STREAM - [LAMBDA (SESSION HANDLE ACCESS GOTCONTROLS OLDSTREAM CHECKACCESS) + [LAMBDA (SESSION HANDLE DEVICE ACCESS GOTCONTROLS OLDSTREAM CHECKACCESS) + (* ; "Edited 23-May-2024 23:07 by frank") (* ; "Edited 19-Aug-88 17:24 by bvm") (PROG NIL [COND @@ -3492,38 +3478,35 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe ERROR) [COND ((SELECTQ OLDACCESS - ((NIL) (* ; - "Just a cached handle, no controls") + ((NIL) (* ; "Just a cached handle, no controls") NIL) (OUTPUT (* ; - "Handle already open for write, can't do anything else") + "Handle already open for write, can't do anything else") T) (INPUT (* ; - "Open for input, so only other input streams allowed.") + "Open for input, so only other input streams allowed.") (NEQ ACCESS 'INPUT)) (SHOULDNT)) (RETURN (LISPERROR "FILE WON'T OPEN" (\NSFILING.FULLNAME SESSION HANDLE] (COND ((NEQ OLDACCESS 'INPUT) (* ; - "Get a share/exclusive control. If OLDACCESS is INPUT, we have already obtained this control") + "Get a share/exclusive control. If OLDACCESS is INPUT, we have already obtained this control") (COND - ((SETQ ERROR (FILING.CALL - SESSION - 'CHANGE.CONTROLS - (fetch NSHDATUM of HANDLE) - `[(LOCK ,(SELECTQ ACCESS - (INPUT 'SHARE) - 'EXCLUSIVE] - SESSION - 'RETURNERRORS)) + ((SETQ ERROR (FILING.CALL SESSION 'CHANGE.CONTROLS (fetch NSHDATUM + of HANDLE) + `[(LOCK ,(SELECTQ ACCESS + (INPUT 'SHARE) + 'EXCLUSIVE] + SESSION + 'RETURNERRORS)) (RETURN ERROR))) (RESETSAVE NIL (LIST (FUNCTION \NSRANDOM.RELEASE.IF.ERROR) SESSION HANDLE)) (* ; - "If this open doesn't succeed, be sure to release this lock.") + "If this open doesn't succeed, be sure to release this lock.") (replace NSHACCESS of HANDLE with (SELECTQ ACCESS - ((BOTH APPEND) - 'OUTPUT) - ACCESS] + ((BOTH APPEND) + 'OUTPUT) + ACCESS] [COND (CHECKACCESS @@ -3536,37 +3519,33 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (LEN (CADR (ASSOC 'SIZE.IN.BYTES ATTRS))) S EOF) [COND - (OLDSTREAM [LET [(OLDATTRS (fetch NSHATTRIBUTES of (fetch - NSFILING.HANDLE - of OLDSTREAM] + (OLDSTREAM [LET [(OLDATTRS (fetch NSHATTRIBUTES of (fetch NSFILING.HANDLE + of OLDSTREAM] (COND - ([OR (NOT (EQUAL LEN (fetch NSFILING.SERVER.LENGTH - of OLDSTREAM))) + ([OR (NOT (EQUAL LEN (fetch NSFILING.SERVER.LENGTH of OLDSTREAM + ))) (NOT (EQUAL (CADR (ASSOC 'CREATED.ON ATTRS)) (CADR (ASSOC 'CREATED.ON OLDATTRS] (* ; "file has changed!") (\NSRANDOM.STREAM.CHANGED OLDSTREAM HANDLE] - (* ; - "If got here, user let us continue") + (* ; "If got here, user let us continue") (replace NSFILING.HANDLE of (SETQ S OLDSTREAM) with HANDLE)) (T (SETQ EOF (SELECTQ ACCESS (OUTPUT 0) LEN)) (SETQ S (create STREAM + DEVICE _ DEVICE EPAGE _ (FOLDLO EOF BYTESPERPAGE) EOFFSET _ (IMOD EOF BYTESPERPAGE) MULTIBUFFERHINT _ T)) (if (EQ ACCESS 'APPEND) - then (* ; "File pos at end") - (freplace (STREAM CPAGE) of S with (fetch - (STREAM EPAGE) - of S)) - (freplace (STREAM COFFSET) of S with (fetch - (STREAM EOFFSET) - of S)) - else (* ; "File pos at start") - (freplace (STREAM CPAGE) of S with 0) - (freplace (STREAM COFFSET) of S with 0] + then (* ; "File pos at end") + (freplace (STREAM CPAGE) of S with (fetch (STREAM EPAGE) of S)) + (freplace (STREAM COFFSET) of S with (fetch (STREAM EOFFSET) + of S)) + else (* ; "File pos at start") + (freplace (STREAM CPAGE) of S with 0) + (freplace (STREAM COFFSET) of S with 0] (replace NSFILING.SERVER.LENGTH of S with LEN) (RETURN S]) @@ -4657,49 +4636,47 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1993, 1999 by Venue & Xe (ADDTOVAR LAMA FILING.CALL) ) -(PUTPROPS NSFILING COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1987 1988 1990 1993 1999 -)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (34234 35080 (\FILINGSESSION.DEFPRINT 34244 . 34758) (\FILINGHANDLE.DEFPRINT 34760 . -35078)) (35081 38808 (\GET.FILING.ATTRIBUTE 35091 . 36404) (\PUT.FILING.ATTRIBUTE 36406 . 37604) ( -\GET.SESSION.HANDLE 37606 . 38025) (\PUT.SESSION.HANDLE 38027 . 38806)) (41840 77789 ( -\GETFILINGCONNECTION 41850 . 43745) (\NSFILING.GET.NEW.SESSION 43747 . 44232) (\NSFILING.GET.STREAM -44234 . 46010) (\NSFILING.COURIER.OPEN 46012 . 46277) (\NSFILING.CLOSE.BULKSTREAM 46279 . 46557) ( -\NSFILING.RELEASE.BULKSTREAM 46559 . 47488) (FILING.CALL 47490 . 56089) (\NSFILING.LOGIN 56091 . 69270 -) (\NSFILING.AFTER.LOGIN 69272 . 69803) (\NSFILING.SET.CONTINUANCE 69805 . 70478) (\NSFILING.LOGOUT -70480 . 70661) (\NSFILING.DISCARD.SESSION 70663 . 72360) (\VALID.FILING.CONNECTIONP 72362 . 73958) ( -\NSFILING.CLOSE.CONNECTIONS 73960 . 76822) (BREAK.NSFILING.CONNECTION 76824 . 77787)) (77867 91247 ( -\NSFILING.CONNECT 77877 . 80294) (\NSFILING.MAYBE.CREATE 80296 . 83335) (\NSFILING.REMOVEQUOTES 83337 - . 83962) (\NSFILING.ADDQUOTES 83964 . 86702) (\FILING.ATTRIBUTE.TYPE.SEQUENCE 86704 . 86918) ( -\FILING.ATTRIBUTE.TYPE 86920 . 87423) (\LISP.TO.NSFILING.ATTRIBUTE 87425 . 91245)) (91283 144407 ( -\NSFILING.GETFILE 91293 . 112576) (\NSFILING.LOOKUP.CACHE 112578 . 114640) (\NSFILING.ADD.TO.CACHE -114642 . 117005) (\NSFILING.OPEN.HANDLE 117007 . 119110) (\NSFILING.CONFLICTP 119112 . 120606) ( -\NSFILING.CHECK.ACCESS 120608 . 121971) (\NSFILING.FILLIN.ATTRIBUTES 121973 . 123720) ( -\NSFILING.COMPOSE.PATHNAME 123722 . 124223) (\NSFILING.PARSE.FILENAME 124225 . 129762) ( -\NSFILING.ERRORHANDLER 129764 . 134582) (\NSFILING.WHENCLOSED 134584 . 135856) (\NSFILING.CLOSE.HANDLE - 135858 . 136151) (\NSFILING.FULLNAME 136153 . 144405)) (144440 212555 (\NSFILING.OPENFILE 144450 . -149642) (\NSFILING.HANDLE.ERROR 149644 . 150522) (\NSFILING.CLOSEFILE 150524 . 153147) ( -\NSFILING.EVENTFN 153149 . 155907) (\NSFILING.DELETEFILE 155909 . 157577) (\NSFILING.CHILDLESS-P -157579 . 158282) (\NSFILING.DIRECTORYNAMEP 158284 . 158691) (\NSFILING.HOSTNAMEP 158693 . 161788) ( -\NSFILING.GETFILENAME 161790 . 162050) (\NSFILING.GETFILEINFO 162052 . 165460) ( -\NSFILING.GET.ATTRIBUTES 165462 . 165858) (\NSFILING.GETFILEINFO.FROM.PLIST 165860 . 168820) ( -\NSFILING.GDATE 168822 . 169012) (\NSFILING.SETFILEINFO 169014 . 172196) (\NSFILING.GET/SETINFO 172198 - . 173662) (\NSFILING.UPDATE.ATTRIBUTES 173664 . 174635) (\NSFILING.GETEOFPTR 174637 . 175171) ( -\NSFILING.GENERATEFILES 175173 . 191035) (\NSFILING.GENERATE.STARS 191037 . 191627) ( -\NSFILING.NEXTFILE 191629 . 193207) (\NSFILING.FILEINFOFN 193209 . 193436) (\NSFILING.RENAMEFILE -193438 . 194038) (\NSFILING.COPYFILE 194040 . 194638) (\NSFILING.COPY/RENAME 194640 . 212553)) (212594 - 263202 (\NSRANDOM.CLOSEFILE 212604 . 214400) (\NSRANDOM.RELEASE.HANDLE 214402 . 215595) ( -\NSRANDOM.RELEASE.LOCK 215597 . 215936) (\NSRANDOM.RELEASE.IF.ERROR 215938 . 216138) ( -\NSRANDOM.CREATE.STREAM 216140 . 222206) (\NSRANDOM.READPAGES 222208 . 226998) (\NSRANDOM.READ.SEGMENT - 227000 . 237526) (\NSRANDOM.PREPARE.CACHE 237528 . 244860) (\NSRANDOM.FETCH.CACHE 244862 . 247035) ( -\NSRANDOM.CHECK.CACHE 247037 . 248082) (\NSRANDOM.WRITEPAGES 248084 . 253627) (\NSRANDOM.WRITE.SEGMENT - 253629 . 255223) (\NSRANDOM.WROTE.HANDLE 255225 . 257031) (\NSRANDOM.SETEOFPTR 257033 . 258562) ( -\NSRANDOM.TRUNCATEFILE 258564 . 261478) (\NSRANDOM.UPDATE.VALIDATION 261480 . 262383) ( -\NSRANDOM.OPENFILE 262385 . 263200)) (263234 277742 (\NSRANDOM.HANDLE.ERROR 263244 . 265690) ( -\NSRANDOM.PROCEEDABLE.ERROR 265692 . 266948) (\NSRANDOM.REESTABLISH 266950 . 268422) ( -\NSRANDOM.STREAM.CHANGED 268424 . 269694) (\NSRANDOM.DESTROY.STREAM 269696 . 270466) ( -\NSRANDOM.SESSION.WATCHER 270468 . 276377) (\NSRANDOM.ENSURE.WATCHER 276379 . 277740)) (277783 288993 -(GC-FILING-DIRECTORY 277793 . 285216) (\NSGC.COLLECT.DIRECTORIES 285218 . 288991)) (289043 293734 ( -\NSFILING.DESERIALIZE 289053 . 291155) (\NSFILING.DESERIALIZE1 291157 . 293732)) (293735 294222 ( -\NSFILING.INIT 293745 . 294220))))) + (FILEMAP (NIL (33827 34673 (\FILINGSESSION.DEFPRINT 33837 . 34351) (\FILINGHANDLE.DEFPRINT 34353 . +34671)) (34674 38401 (\GET.FILING.ATTRIBUTE 34684 . 35997) (\PUT.FILING.ATTRIBUTE 35999 . 37197) ( +\GET.SESSION.HANDLE 37199 . 37618) (\PUT.SESSION.HANDLE 37620 . 38399)) (41234 77183 ( +\GETFILINGCONNECTION 41244 . 43139) (\NSFILING.GET.NEW.SESSION 43141 . 43626) (\NSFILING.GET.STREAM +43628 . 45404) (\NSFILING.COURIER.OPEN 45406 . 45671) (\NSFILING.CLOSE.BULKSTREAM 45673 . 45951) ( +\NSFILING.RELEASE.BULKSTREAM 45953 . 46882) (FILING.CALL 46884 . 55483) (\NSFILING.LOGIN 55485 . 68664 +) (\NSFILING.AFTER.LOGIN 68666 . 69197) (\NSFILING.SET.CONTINUANCE 69199 . 69872) (\NSFILING.LOGOUT +69874 . 70055) (\NSFILING.DISCARD.SESSION 70057 . 71754) (\VALID.FILING.CONNECTIONP 71756 . 73352) ( +\NSFILING.CLOSE.CONNECTIONS 73354 . 76216) (BREAK.NSFILING.CONNECTION 76218 . 77181)) (77261 90641 ( +\NSFILING.CONNECT 77271 . 79688) (\NSFILING.MAYBE.CREATE 79690 . 82729) (\NSFILING.REMOVEQUOTES 82731 + . 83356) (\NSFILING.ADDQUOTES 83358 . 86096) (\FILING.ATTRIBUTE.TYPE.SEQUENCE 86098 . 86312) ( +\FILING.ATTRIBUTE.TYPE 86314 . 86817) (\LISP.TO.NSFILING.ATTRIBUTE 86819 . 90639)) (90677 143609 ( +\NSFILING.GETFILE 90687 . 111778) (\NSFILING.LOOKUP.CACHE 111780 . 113842) (\NSFILING.ADD.TO.CACHE +113844 . 116207) (\NSFILING.OPEN.HANDLE 116209 . 118312) (\NSFILING.CONFLICTP 118314 . 119808) ( +\NSFILING.CHECK.ACCESS 119810 . 121173) (\NSFILING.FILLIN.ATTRIBUTES 121175 . 122922) ( +\NSFILING.COMPOSE.PATHNAME 122924 . 123425) (\NSFILING.PARSE.FILENAME 123427 . 128964) ( +\NSFILING.ERRORHANDLER 128966 . 133784) (\NSFILING.WHENCLOSED 133786 . 135058) (\NSFILING.CLOSE.HANDLE + 135060 . 135353) (\NSFILING.FULLNAME 135355 . 143607)) (143642 211757 (\NSFILING.OPENFILE 143652 . +148844) (\NSFILING.HANDLE.ERROR 148846 . 149724) (\NSFILING.CLOSEFILE 149726 . 152349) ( +\NSFILING.EVENTFN 152351 . 155109) (\NSFILING.DELETEFILE 155111 . 156779) (\NSFILING.CHILDLESS-P +156781 . 157484) (\NSFILING.DIRECTORYNAMEP 157486 . 157893) (\NSFILING.HOSTNAMEP 157895 . 160990) ( +\NSFILING.GETFILENAME 160992 . 161252) (\NSFILING.GETFILEINFO 161254 . 164662) ( +\NSFILING.GET.ATTRIBUTES 164664 . 165060) (\NSFILING.GETFILEINFO.FROM.PLIST 165062 . 168022) ( +\NSFILING.GDATE 168024 . 168214) (\NSFILING.SETFILEINFO 168216 . 171398) (\NSFILING.GET/SETINFO 171400 + . 172864) (\NSFILING.UPDATE.ATTRIBUTES 172866 . 173837) (\NSFILING.GETEOFPTR 173839 . 174373) ( +\NSFILING.GENERATEFILES 174375 . 190237) (\NSFILING.GENERATE.STARS 190239 . 190829) ( +\NSFILING.NEXTFILE 190831 . 192409) (\NSFILING.FILEINFOFN 192411 . 192638) (\NSFILING.RENAMEFILE +192640 . 193240) (\NSFILING.COPYFILE 193242 . 193840) (\NSFILING.COPY/RENAME 193842 . 211755)) (211796 + 262065 (\NSRANDOM.CLOSEFILE 211806 . 213602) (\NSRANDOM.RELEASE.HANDLE 213604 . 214797) ( +\NSRANDOM.RELEASE.LOCK 214799 . 215138) (\NSRANDOM.RELEASE.IF.ERROR 215140 . 215340) ( +\NSRANDOM.CREATE.STREAM 215342 . 221069) (\NSRANDOM.READPAGES 221071 . 225861) (\NSRANDOM.READ.SEGMENT + 225863 . 236389) (\NSRANDOM.PREPARE.CACHE 236391 . 243723) (\NSRANDOM.FETCH.CACHE 243725 . 245898) ( +\NSRANDOM.CHECK.CACHE 245900 . 246945) (\NSRANDOM.WRITEPAGES 246947 . 252490) (\NSRANDOM.WRITE.SEGMENT + 252492 . 254086) (\NSRANDOM.WROTE.HANDLE 254088 . 255894) (\NSRANDOM.SETEOFPTR 255896 . 257425) ( +\NSRANDOM.TRUNCATEFILE 257427 . 260341) (\NSRANDOM.UPDATE.VALIDATION 260343 . 261246) ( +\NSRANDOM.OPENFILE 261248 . 262063)) (262097 276605 (\NSRANDOM.HANDLE.ERROR 262107 . 264553) ( +\NSRANDOM.PROCEEDABLE.ERROR 264555 . 265811) (\NSRANDOM.REESTABLISH 265813 . 267285) ( +\NSRANDOM.STREAM.CHANGED 267287 . 268557) (\NSRANDOM.DESTROY.STREAM 268559 . 269329) ( +\NSRANDOM.SESSION.WATCHER 269331 . 275240) (\NSRANDOM.ENSURE.WATCHER 275242 . 276603)) (276646 287856 +(GC-FILING-DIRECTORY 276656 . 284079) (\NSGC.COLLECT.DIRECTORIES 284081 . 287854)) (287906 292597 ( +\NSFILING.DESERIALIZE 287916 . 290018) (\NSFILING.DESERIALIZE1 290020 . 292595)) (292598 293085 ( +\NSFILING.INIT 292608 . 293083))))) STOP diff --git a/sources/NSFILING.LCOM b/sources/NSFILING.LCOM index e70b58a21a8a241a1585969d7054e1bfc210f36a..a650f267f76a91e76a9047e35f4d851904be18db 100644 GIT binary patch delta 22235 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%0A{4-q;x0r-0I1N4NK-&Mz|$4-Li2v4 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 KYm3p-;{OLZG#RY`