(FILECREATED "14-AUG-83 18:04:22" {PHYLUM}<LISPCORE>SOURCES>NSFILING.;7 81666
changes to: (VARS NSFILINGCOMS)
previous date: " 8-AUG-83 14:49:48" {PHYLUM}<LISPCORE>SOURCES>NSFILING.;6)
(* Copyright (c) 1983 by Xerox Corporation)
(PRETTYCOMPRINT NSFILINGCOMS)
(RPAQQ NSFILINGCOMS ([COMS (DECLARE: DONTCOPY EVAL@COMPILE (FILES (LOADCOMP)
SPP FILEIO)
(ADDVARS (LITATOM.HIT.LIST ACCESS.ERROR ACCESS.PROBLEM
ARGUMENT.PROBLEM ATTRIBUTE.SEQUENCE
ATTRIBUTE.TYPE ATTRIBUTE.TYPE.ERROR
ATTRIBUTE.TYPE.SEQUENCE
ATTRIBUTE.VALUE.ERROR
CHANGE.ATTRIBUTES CONNECTION.ERROR
CONNECTION.PROBLEM CONTROL.SEQUENCE
CONTROL.TYPE CONTROL.TYPE.ERROR
CONTROL.TYPE.SEQUENCE
CONTROL.VALUE.ERROR FILE.ID
\FILING.ATTRIBUTE.TYPE.SEQUENCE
FILING.SUBSET.FOR.PRINTING
GET.ATTRIBUTES HANDLE.ERROR
HANDLE.PROBLEM INSERTION.ERROR
INSERTION.PROBLEM
\READ.FILING.ATTRIBUTE.SEQUENCE
SCOPE.SEQUENCE SCOPE.TYPE
SCOPE.TYPE.ERROR SCOPE.VALUE.ERROR
SERVICE.ERROR SERVICE.PROBLEM
SESSION.ERROR SESSION.PROBLEM
SIMPLE.VERIFIER SPACE.ERROR
SPACE.PROBLEM TRANSFER.ERROR
TRANSFER.PROBLEM UNDEFINED.ERROR
\WRITE.FILING.ATTRIBUTE.SEQUENCE
CLOSE.NSFILING.CONNECTIONS
\DIRECTORY.LIST.TO.PATHNAME
\GETFILINGCONNECTION
\NSFILING.CLOSEFILE \NSFILING.CONNECT
\NSFILING.CREATE.DIRECTORY
\NSFILING.DELETEFILE
\NSFILING.DIRECTORYNAMEP
\NSFILING.EVENTFN \NSFILING.FULLNAME
\NSFILING.GENERATEFILES
\NSFILING.GETEOFPTR \NSFILING.GETFILE
\NSFILING.GETFILEINFO
\NSFILING.GETFILENAME
\NSFILING.HOSTNAMEP \NSFILING.INIT
\NSFILING.INTERNAL.CLOSE
\NSFILING.LIST \NSFILING.LOGIN
\NSFILING.LOGOUT
\NSFILING.LOGOUT.INTERNAL
\NSFILING.NEXTFILE \NSFILING.OPENFILE
\NSFILING.SETFILEINFO
\PATHNAME.TO.DIRECTORY.LIST
\VALID.FILING.CONNECTIONP]
(COMS (* Filing Protocol.)
[P (COURIERPROGRAM FILING (10 2)
TYPES
[(ATTRIBUTE.TYPE LONGCARDINAL)
(ATTRIBUTE.TYPE.SEQUENCE (SEQUENCE ATTRIBUTE.TYPE))
[ATTRIBUTE (RECORD (TYPE ATTRIBUTE.TYPE)
(VALUE (SEQUENCE UNSPECIFIED]
(ATTRIBUTE.SEQUENCE (SEQUENCE ATTRIBUTE))
(CONTROL.TYPE (ENUMERATION (LOCK 0)
(TIMEOUT 1)))
(CONTROL.TYPE.SEQUENCE (SEQUENCE CONTROL.TYPE))
(CONTROL (CHOICE (LOCK 0 LOCK)
(TIMEOUT 1 TIMEOUT)))
(CONTROL.SEQUENCE (SEQUENCE CONTROL))
(LOCK (ENUMERATION (NONE 0)
(SHARE 1)
(EXCLUSIVE 2)))
(TIMEOUT CARDINAL)
(SCOPE.TYPE (ENUMERATION (COUNT 0)
(DIRECTION 1)
(FILTER 2)))
(SCOPE (CHOICE (COUNT 0 COUNT)
(DIRECTION 1 DIRECTION)
(FILTER 2 FILTER)))
(SCOPE.SEQUENCE (SEQUENCE SCOPE))
(COUNT CARDINAL)
(DIRECTION (ENUMERATION (FORWARD 0)
(BACKWARD 1)))
(FILTER (CHOICE (LESS 0 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(LESS.OR.EQUAL 1 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION
INTERPRETATION)))
(EQUAL 2 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(NOT.EQUAL 3 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)
))
(GREATER.OR.EQUAL 4 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION
INTERPRETATION)))
(GREATER 5 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(AND 6 (SEQUENCE FILTER))
(OR 7 (SEQUENCE FILTER))
(NOT 8 FILTER)
(NONE 9 NIL)
(ALL 10 NIL)
(MATCHES 11 ATTRIBUTE)))
(INTERPRETATION (ENUMERATION (NONE 0)
(BOOLEAN 1)
(CARDINAL 2)
(LONG.CARDINAL 3)
(TIME 4)
(INTEGER 5)
(LONG.INTEGER 6)
(STRING 7)))
(CREDENTIALS (AUTHENTICATION . CREDENTIALS))
(HANDLE (ARRAY 2 UNSPECIFIED))
(SESSION (RECORD (TOKEN (ARRAY 2 UNSPECIFIED))
(VERIFIER VERIFIER)))
(VERIFIER (AUTHENTICATION . VERIFIER))
(SIMPLE.VERIFIER (AUTHENTICATION . SIMPLE.VERIFIER))
(FILE.ID (ARRAY 5 UNSPECIFIED))
(USER (CLEARINGHOUSE . NAME))
(ORDERING (RECORD (KEY ATTRIBUTE.TYPE)
(ASCENDING BOOLEAN)
(INTERPRETATION INTERPRETATION)))
(ACCESS.LIST (RECORD (ENTRIES (SEQUENCE ACCESS.ENTRY))
(DEFAULTED BOOLEAN)))
(ACCESS.ENTRY (RECORD (KEY (CLEARINGHOUSE . NAME))
(TYPE (ENUMERATION (INDIVIDUAL 0)
(ALIAS 1)
(GROUP 2)
(OTHER 3)))
(ACCESS UNSPECIFIED)))
(ARGUMENT.PROBLEM (ENUMERATION (ILLEGAL 0)
(DISALLOWED 1)
(UNREASONABLE 2)
(UNIMPLEMENTED 3)
(DUPLICATED 4)
(MISSING 5)))
(ACCESS.PROBLEM (ENUMERATION (ACCESS.RIGHTS.INSUFFICIENT 0)
(ACCESS.RIGHTS.INDETERMINATE 1)
(FILE.CHANGED 2)
(FILE.DAMAGED 3)
(FILE.IN.USE 4)
(FILE.NOT.FOUND 5)
(FILE.OPEN 6)))
(CONNECTION.PROBLEM (ENUMERATION (NO.ROUTE 0)
(NO.RESPONSE 1)
(TRANSMISSION.HARDWARE 2)
(TRANSPORT.TIMEOUT 3)
(TOO.MANY.LOCAL.CONNECTIONS 4)
(TOO.MANY.REMOTE.CONNECTIONS
5)
(MISSING.COURIER 6)
(MISSING.PROGRAM 7)
(MISSING.PROCEDURE 8)
(PROTOCOL.MISMATCH 9)
(PARAMETER.INCONSISTENCY 10)
(INVALID.MESSAGE 11)
(RETURN.TIMED.OUT 12)
(OTHER.CALL.PROBLEM -1)))
(HANDLE.PROBLEM (ENUMERATION (INVALID 0)
(NULL.DISALLOWED 1)
(DIRECTORY.REQUIRED 2)))
(INSERTION.PROBLEM (ENUMERATION (POSITION.UNAVAILABLE 0)
(FILE.NOT.UNIQUE 1)
(LOOP.IN.HIERARCHY 2)))
(SERVICE.PROBLEM (ENUMERATION (CANNOT.AUTHENTICATE 0)
(SERVICE.FULL 1)
(SERVICE.UNAVAILABLE 2)
(SESSION.IN.USE 3)))
(SESSION.PROBLEM (ENUMERATION (TOKEN.INVALID 0)))
(SPACE.PROBLEM (ENUMERATION (ALLOCATION.EXCEEDED 0)
(ATTRIBUTE.AREA.FULL 1)
(MEDIUM.FULL 2)))
(TRANSFER.PROBLEM (ENUMERATION (ABORTED 0)
(CHECKSUM.INCORRECT 1)
(FORMAT.INCORRECT 2)
(NO.RENDEZVOUS 3)
(WRONG.DIRECTION 4]
PROCEDURES
((LOGON ARGS (CREDENTIALS VERIFIER)
RESULTS
(SESSION)
ERRORS
(AUTHENTICATION.ERROR SERVICE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
0)
(LOGOFF ARGS (SESSION)
ERRORS
(AUTHENTICATION.ERROR SERVICE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
1)
(CONTINUE ARGS (SESSION)
RESULTS
(CARDINAL)
ERRORS
(AUTHENTICATION.ERROR SESSION.ERROR UNDEFINED.ERROR)
19)
(OPEN ARGS (ATTRIBUTE.SEQUENCE HANDLE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONTROL.TYPE.ERROR
CONTROL.VALUE.ERROR HANDLE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
2)
(CLOSE ARGS (HANDLE SESSION)
ERRORS
(AUTHENTICATION.ERROR HANDLE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
3)
(CREATE ARGS (HANDLE ATTRIBUTE.SEQUENCE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONTROL.TYPE.ERROR
CONTROL.VALUE.ERROR HANDLE.ERROR
INSERTION.ERROR SESSION.ERROR SPACE.ERROR
UNDEFINED.ERROR)
4)
(DELETE ARGS (HANDLE SESSION)
ERRORS
(ACCESS.ERROR AUTHENTICATION.ERROR HANDLE.ERROR
SESSION.ERROR UNDEFINED.ERROR)
5)
(GET.ATTRIBUTES ARGS (HANDLE ATTRIBUTE.TYPE.SEQUENCE SESSION)
RESULTS
(ATTRIBUTE.SEQUENCE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR
AUTHENTICATION.ERROR HANDLE.ERROR
SESSION.ERROR UNDEFINED.ERROR)
8)
(CHANGE.ATTRIBUTES ARGS (HANDLE ATTRIBUTE.SEQUENCE SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR
ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR HANDLE.ERROR
INSERTION.ERROR SESSION.ERROR
SPACE.ERROR UNDEFINED.ERROR)
9)
(COPY ARGS (HANDLE HANDLE ATTRIBUTE.SEQUENCE CONTROL.SEQUENCE
SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONTROL.TYPE.ERROR
CONTROL.VALUE.ERROR HANDLE.ERROR
INSERTION.ERROR SESSION.ERROR SPACE.ERROR
UNDEFINED.ERROR)
10)
(MOVE ARGS (HANDLE HANDLE ATTRIBUTE.SEQUENCE SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR HANDLE.ERROR
INSERTION.ERROR SESSION.ERROR SPACE.ERROR
UNDEFINED.ERROR)
11)
(STORE ARGS (HANDLE ATTRIBUTE.SEQUENCE CONTROL.SEQUENCE
BULK.DATA.SOURCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONNECTION.ERROR
CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR
HANDLE.ERROR INSERTION.ERROR SESSION.ERROR
SPACE.ERROR TRANSFER.ERROR UNDEFINED.ERROR)
12)
(RETRIEVE ARGS (HANDLE BULK.DATA.SINK SESSION)
ERRORS
(ACCESS.ERROR AUTHENTICATION.ERROR CONNECTION.ERROR
HANDLE.ERROR SESSION.ERROR TRANSFER.ERROR
UNDEFINED.ERROR)
13)
(REPLACE ARGS (HANDLE ATTRIBUTE.SEQUENCE BULK.DATA.SOURCE SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONNECTION.ERROR
HANDLE.ERROR SESSION.ERROR SPACE.ERROR
TRANSFER.ERROR UNDEFINED.ERROR)
14)
(FIND ARGS (HANDLE SCOPE.SEQUENCE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR AUTHENTICATION.ERROR CONTROL.TYPE.ERROR
CONTROL.VALUE.ERROR HANDLE.ERROR
SCOPE.TYPE.ERROR SCOPE.VALUE.ERROR
SESSION.ERROR UNDEFINED.ERROR)
17)
(LIST ARGS (HANDLE ATTRIBUTE.TYPE.SEQUENCE SCOPE.SEQUENCE
BULK.DATA.SINK SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONNECTION.ERROR
HANDLE.ERROR SCOPE.TYPE.ERROR SCOPE.VALUE.ERROR
SESSION.ERROR TRANSFER.ERROR UNDEFINED.ERROR)
18))
ERRORS
((ATTRIBUTE.TYPE.ERROR ARGS (ARGUMENT.PROBLEM ATTRIBUTE.TYPE)
0)
(ATTRIBUTE.VALUE.ERROR ARGS (ARGUMENT.PROBLEM ATTRIBUTE.TYPE)
1)
(CONTROL.TYPE.ERROR ARGS (ARGUMENT.PROBLEM CONTROL.TYPE)
2)
(CONTROL.VALUE.ERROR ARGS (ARGUMENT.PROBLEM CONTROL.TYPE)
3)
(SCOPE.TYPE.ERROR ARGS (ARGUMENT.PROBLEM SCOPE.TYPE)
4)
(SCOPE.VALUE.ERROR ARGS (ARGUMENT.PROBLEM SCOPE.TYPE)
5)
(ACCESS.ERROR ARGS (ACCESS.PROBLEM)
6)
(AUTHENTICATION.ERROR ARGS ((AUTHENTICATION . PROBLEM))
7)
(CONNECTION.ERROR ARGS (CONNECTION.PROBLEM)
8)
(HANDLE.ERROR ARGS (HANDLE.PROBLEM)
9)
(INSERTION.ERROR ARGS (INSERTION.PROBLEM)
10)
(SERVICE.ERROR ARGS (SERVICE.PROBLEM)
11)
(SESSION.ERROR ARGS (SESSION.PROBLEM)
12)
(SPACE.ERROR ARGS (SPACE.PROBLEM)
13)
(TRANSFER.ERROR ARGS (TRANSFER.PROBLEM)
14)
(UNDEFINED.ERROR ARGS (CARDINAL)
15]
(* Lisp support.)
(DECLARE: DONTCOPY [CONSTANTS (\FILING.ALL.ATTRIBUTE.TYPES (QUOTE (-1)))
(\FILING.DEFAULT.TIMEOUT -1)
(\FILING.UNLIMITED.COUNT -1)
(\FILING.NULL.FILTER (QUOTE (ALL)))
(\FILING.NULL.HANDLE (QUOTE (0 0)))
(\FILING.NULL.FILE.ID (QUOTE (0 0 0 0 0)))
(\FILING.LOWEST.VERSION 0)
(\FILING.HIGHEST.VERSION -1)
[\FILING.ATTRIBUTES (QUOTE ((CHECKSUM 0 CARDINAL)
(CHILDREN.UNIQUELY.NAMED
1 BOOLEAN)
(CREATED.BY 2 USER)
(CREATED.ON 3 TIME)
(FILE.ID 4 FILE.ID)
(IS.DIRECTORY 5 BOOLEAN)
(IS.TEMPORARY 6 BOOLEAN)
(MODIFIED.BY 7 USER)
(MODIFIED.ON 8 TIME)
(NAME 9 STRING)
(NUMBER.OF.CHILDREN 10
CARDINAL)
(ORDERING 11 ORDERING)
(PARENT.ID 12 FILE.ID)
(POSITION 13 (SEQUENCE
UNSPECIFIED))
(READ.BY 14 USER)
(READ.ON 15 TIME)
(SIZE.IN.BYTES 16
LONGCARDINAL)
(FILE.TYPE 17 LONGCARDINAL)
(VERSION 18 CARDINAL)
(ACCESS.LIST 19 ACCESS.LIST)
(DEFAULT.ACCESS.LIST 20
ACCESS.LIST)
(PATHNAME 21 STRING]
(LISP.TO.NS.FILE.ATTRIBUTES (QUOTE ((IWRITEDATE
MODIFIED.ON)
(IREADDATE READ.ON)
(ICREATIONDATE
CREATED.ON)
(LENGTH SIZE.IN.BYTES]
(RECORDS NSFILINGSTREAM FILING.CONNECTION \NSFILING.GENFILESTATE)
(GLOBALVARS \NSFILING.CONNECTIONS \NSFILING.DEVICE))
(INITRECORDS NSFILINGSTREAM FILING.CONNECTION)
(INITVARS (\NSFILING.LOCK (CREATE.MONITORLOCK (QUOTE NSFILING)))
(\NSFILING.CONNECTIONS NIL))
(FNS \NSFILING.LOGIN \NSFILING.LOGOUT \NSFILING.LOGOUT.INTERNAL \NSFILING.CONNECT
\PATHNAME.TO.DIRECTORY.LIST \PATHNAME.TO.DIRECTORY.LIST.INTERNAL
\DIRECTORY.LIST.TO.PATHNAME \NSFILING.CREATE.DIRECTORY \NSFILING.LIST
\NSFILING.LISTVERSIONS \FILING.ATTRIBUTE.TYPE.SEQUENCE \FILING.ATTRIBUTE.TYPE
\READ.FILING.ATTRIBUTE.SEQUENCE \READ.FILING.ATTRIBUTE
\WRITE.FILING.ATTRIBUTE.SEQUENCE \WRITE.FILING.ATTRIBUTE NSDIRECTORY
NSCREATEDIRECTORY \NSFILING.INIT \GETFILINGCONNECTION \VALID.FILING.CONNECTIONP
\LOGGED.ONTO.NSFILESERVERP CLOSE.NSFILING.CONNECTIONS \NSFILING.OPENFILE
\NSFILING.GETFILE \NSFILING.ORIGINAL.GETFILE \NSFILING.CLOSEFILE
\NSFILING.INTERNAL.CLOSE \NSFILING.FULLNAME \NSFILING.EVENTFN \NSFILING.DELETEFILE
\NSFILING.HOSTNAMEP \NSFILING.DIRECTORYNAMEP \NSFILING.GETFILENAME
\NSFILING.GETFILEINFO \NSFILING.SETFILEINFO \NSFILING.GENERATEFILES
\NSFILING.NEXTFILE \NSFILING.GETEOFPTR)
(P (\NSFILING.INIT)))
(COMS (* Printer subset of Filing Protocol.)
[P (COURIERPROGRAM FILING.SUBSET.FOR.PRINTING (16 2)
TYPES
((ATTRIBUTE.SEQUENCE (FILING . ATTRIBUTE.SEQUENCE))
(ATTRIBUTE.TYPE.SEQUENCE (FILING . ATTRIBUTE.TYPE.SEQUENCE))
(CONTROL.SEQUENCE (FILING . CONTROL.SEQUENCE))
(CREDENTIALS (AUTHENTICATION . CREDENTIALS))
(HANDLE (FILING . HANDLE))
(SIMPLE.VERIFIER (AUTHENTICATION . SIMPLE.VERIFIER))
(SCOPE.SEQUENCE (FILING . SCOPE.SEQUENCE))
(SESSION (FILING . SESSION))
(VERIFIER (AUTHENTICATION . VERIFIER))
(ARGUMENT.PROBLEM (FILING . ARGUMENT.PROBLEM))
(ACCESS.PROBLEM (FILING . ACCESS.PROBLEM))
(HANDLE.PROBLEM (FILING . HANDLE.PROBLEM))
(INSERTION.PROBLEM (FILING . INSERTION.PROBLEM))
(SERVICE.PROBLEM (FILING . SERVICE.PROBLEM))
(SESSION.PROBLEM (FILING . SESSION.PROBLEM))
(SPACE.PROBLEM (FILING . SPACE.PROBLEM)))
PROCEDURES
((LOGON ARGS (CREDENTIALS VERIFIER)
RESULTS
(SESSION)
ERRORS
(AUTHENTICATION.ERROR SERVICE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
(FILING . LOGON))
(LOGOFF ARGS (SESSION)
ERRORS
(AUTHENTICATION.ERROR SERVICE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
(FILING . LOGOFF))
(CONTINUE ARGS (SESSION)
RESULTS
(CARDINAL)
ERRORS
(AUTHENTICATION.ERROR SESSION.ERROR UNDEFINED.ERROR)
(FILING . CONTINUE))
(OPEN ARGS (ATTRIBUTE.SEQUENCE HANDLE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONTROL.TYPE.ERROR
CONTROL.VALUE.ERROR HANDLE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
(FILING . OPEN))
(CLOSE ARGS (HANDLE SESSION)
ERRORS
(AUTHENTICATION.ERROR HANDLE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
(FILING . CLOSE))
(DELETE ARGS (HANDLE SESSION)
ERRORS
(ACCESS.ERROR AUTHENTICATION.ERROR HANDLE.ERROR
SESSION.ERROR UNDEFINED.ERROR)
(FILING . DELETE))
(STORE ARGS (HANDLE ATTRIBUTE.SEQUENCE CONTROL.SEQUENCE
BULK.DATA.SOURCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONNECTION.ERROR
CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR
HANDLE.ERROR INSERTION.ERROR SESSION.ERROR
SPACE.ERROR TRANSFER.ERROR UNDEFINED.ERROR)
(FILING . STORE))
(LIST ARGS (HANDLE ATTRIBUTE.TYPE.SEQUENCE SCOPE.SEQUENCE
BULK.DATA.SINK SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONNECTION.ERROR
HANDLE.ERROR SCOPE.TYPE.ERROR SCOPE.VALUE.ERROR
SESSION.ERROR TRANSFER.ERROR UNDEFINED.ERROR)
(FILING . LIST)))
ERRORS
((ATTRIBUTE.TYPE.ERROR ARGS (ARGUMENT.PROBLEM ATTRIBUTE.TYPE)
(FILING . ATTRIBUTE.TYPE.ERROR))
(ATTRIBUTE.VALUE.ERROR ARGS (ARGUMENT.PROBLEM ATTRIBUTE.TYPE)
(FILING . ATTRIBUTE.VALUE.ERROR))
(CONTROL.TYPE.ERROR ARGS (ARGUMENT.PROBLEM CONTROL.TYPE)
(FILING . CONTROL.TYPE.ERROR))
(CONTROL.VALUE.ERROR ARGS (ARGUMENT.PROBLEM CONTROL.TYPE)
(FILING . CONTROL.VALUE.ERROR))
(SCOPE.TYPE.ERROR ARGS (ARGUMENT.PROBLEM SCOPE.TYPE)
(FILING . SCOPE.TYPE.ERROR))
(SCOPE.VALUE.ERROR ARGS (ARGUMENT.PROBLEM SCOPE.TYPE)
(FILING . SCOPE.VALUE.ERROR))
(ACCESS.ERROR ARGS (ACCESS.PROBLEM)
(FILING . ACCESS.ERROR))
(AUTHENTICATION.ERROR ARGS ((AUTHENTICATION . PROBLEM))
(FILING . AUTHENTICATION.ERROR))
(CONNECTION.ERROR ARGS (CONNECTION.PROBLEM)
(FILING . CONNECTION.ERROR))
(HANDLE.ERROR ARGS (HANDLE.PROBLEM)
(FILING . HANDLE.ERROR))
(INSERTION.ERROR ARGS (INSERTION.PROBLEM)
(FILING . INSERTION.ERROR))
(SERVICE.ERROR ARGS (SERVICE.PROBLEM)
(FILING . SERVICE.ERROR))
(SESSION.ERROR ARGS (SESSION.PROBLEM)
(FILING . SESSION.ERROR))
(SPACE.ERROR ARGS (SPACE.PROBLEM)
(FILING . SPACE.ERROR))
(TRANSFER.ERROR ARGS (TRANSFER.PROBLEM)
(FILING . TRANSFER.ERROR))
(UNDEFINED.ERROR ARGS (CARDINAL)
(FILING . UNDEFINED.ERROR]
(* Lisp support.)
(FNS LIST.NSPRINTER.FILES))))
(DECLARE: DONTCOPY EVAL@COMPILE
(FILESLOAD (LOADCOMP)
SPP FILEIO)
(ADDTOVAR LITATOM.HIT.LIST ACCESS.ERROR ACCESS.PROBLEM ARGUMENT.PROBLEM ATTRIBUTE.SEQUENCE
ATTRIBUTE.TYPE ATTRIBUTE.TYPE.ERROR ATTRIBUTE.TYPE.SEQUENCE
ATTRIBUTE.VALUE.ERROR CHANGE.ATTRIBUTES CONNECTION.ERROR
CONNECTION.PROBLEM CONTROL.SEQUENCE CONTROL.TYPE
CONTROL.TYPE.ERROR CONTROL.TYPE.SEQUENCE CONTROL.VALUE.ERROR
FILE.ID \FILING.ATTRIBUTE.TYPE.SEQUENCE
FILING.SUBSET.FOR.PRINTING GET.ATTRIBUTES HANDLE.ERROR
HANDLE.PROBLEM INSERTION.ERROR INSERTION.PROBLEM
\READ.FILING.ATTRIBUTE.SEQUENCE SCOPE.SEQUENCE SCOPE.TYPE
SCOPE.TYPE.ERROR SCOPE.VALUE.ERROR SERVICE.ERROR
SERVICE.PROBLEM SESSION.ERROR SESSION.PROBLEM SIMPLE.VERIFIER
SPACE.ERROR SPACE.PROBLEM TRANSFER.ERROR TRANSFER.PROBLEM
UNDEFINED.ERROR \WRITE.FILING.ATTRIBUTE.SEQUENCE
CLOSE.NSFILING.CONNECTIONS \DIRECTORY.LIST.TO.PATHNAME
\GETFILINGCONNECTION \NSFILING.CLOSEFILE \NSFILING.CONNECT
\NSFILING.CREATE.DIRECTORY \NSFILING.DELETEFILE
\NSFILING.DIRECTORYNAMEP \NSFILING.EVENTFN \NSFILING.FULLNAME
\NSFILING.GENERATEFILES \NSFILING.GETEOFPTR \NSFILING.GETFILE
\NSFILING.GETFILEINFO \NSFILING.GETFILENAME
\NSFILING.HOSTNAMEP \NSFILING.INIT \NSFILING.INTERNAL.CLOSE
\NSFILING.LIST \NSFILING.LOGIN \NSFILING.LOGOUT
\NSFILING.LOGOUT.INTERNAL \NSFILING.NEXTFILE
\NSFILING.OPENFILE \NSFILING.SETFILEINFO
\PATHNAME.TO.DIRECTORY.LIST \VALID.FILING.CONNECTIONP)
)
(* Filing Protocol.)
(COURIERPROGRAM FILING (10 2)
TYPES
[(ATTRIBUTE.TYPE LONGCARDINAL)
(ATTRIBUTE.TYPE.SEQUENCE (SEQUENCE ATTRIBUTE.TYPE))
[ATTRIBUTE (RECORD (TYPE ATTRIBUTE.TYPE)
(VALUE (SEQUENCE UNSPECIFIED]
(ATTRIBUTE.SEQUENCE (SEQUENCE ATTRIBUTE))
(CONTROL.TYPE (ENUMERATION (LOCK 0)
(TIMEOUT 1)))
(CONTROL.TYPE.SEQUENCE (SEQUENCE CONTROL.TYPE))
(CONTROL (CHOICE (LOCK 0 LOCK)
(TIMEOUT 1 TIMEOUT)))
(CONTROL.SEQUENCE (SEQUENCE CONTROL))
(LOCK (ENUMERATION (NONE 0)
(SHARE 1)
(EXCLUSIVE 2)))
(TIMEOUT CARDINAL)
(SCOPE.TYPE (ENUMERATION (COUNT 0)
(DIRECTION 1)
(FILTER 2)))
(SCOPE (CHOICE (COUNT 0 COUNT)
(DIRECTION 1 DIRECTION)
(FILTER 2 FILTER)))
(SCOPE.SEQUENCE (SEQUENCE SCOPE))
(COUNT CARDINAL)
(DIRECTION (ENUMERATION (FORWARD 0)
(BACKWARD 1)))
(FILTER (CHOICE (LESS 0 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(LESS.OR.EQUAL 1 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(EQUAL 2 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(NOT.EQUAL 3 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(GREATER.OR.EQUAL 4 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(GREATER 5 (RECORD (ATTRIBUTE ATTRIBUTE)
(INTERPRETATION INTERPRETATION)))
(AND 6 (SEQUENCE FILTER))
(OR 7 (SEQUENCE FILTER))
(NOT 8 FILTER)
(NONE 9 NIL)
(ALL 10 NIL)
(MATCHES 11 ATTRIBUTE)))
(INTERPRETATION (ENUMERATION (NONE 0)
(BOOLEAN 1)
(CARDINAL 2)
(LONG.CARDINAL 3)
(TIME 4)
(INTEGER 5)
(LONG.INTEGER 6)
(STRING 7)))
(CREDENTIALS (AUTHENTICATION . CREDENTIALS))
(HANDLE (ARRAY 2 UNSPECIFIED))
(SESSION (RECORD (TOKEN (ARRAY 2 UNSPECIFIED))
(VERIFIER VERIFIER)))
(VERIFIER (AUTHENTICATION . VERIFIER))
(SIMPLE.VERIFIER (AUTHENTICATION . SIMPLE.VERIFIER))
(FILE.ID (ARRAY 5 UNSPECIFIED))
(USER (CLEARINGHOUSE . NAME))
(ORDERING (RECORD (KEY ATTRIBUTE.TYPE)
(ASCENDING BOOLEAN)
(INTERPRETATION INTERPRETATION)))
(ACCESS.LIST (RECORD (ENTRIES (SEQUENCE ACCESS.ENTRY))
(DEFAULTED BOOLEAN)))
(ACCESS.ENTRY (RECORD (KEY (CLEARINGHOUSE . NAME))
(TYPE (ENUMERATION (INDIVIDUAL 0)
(ALIAS 1)
(GROUP 2)
(OTHER 3)))
(ACCESS UNSPECIFIED)))
(ARGUMENT.PROBLEM (ENUMERATION (ILLEGAL 0)
(DISALLOWED 1)
(UNREASONABLE 2)
(UNIMPLEMENTED 3)
(DUPLICATED 4)
(MISSING 5)))
(ACCESS.PROBLEM (ENUMERATION (ACCESS.RIGHTS.INSUFFICIENT 0)
(ACCESS.RIGHTS.INDETERMINATE 1)
(FILE.CHANGED 2)
(FILE.DAMAGED 3)
(FILE.IN.USE 4)
(FILE.NOT.FOUND 5)
(FILE.OPEN 6)))
(CONNECTION.PROBLEM (ENUMERATION (NO.ROUTE 0)
(NO.RESPONSE 1)
(TRANSMISSION.HARDWARE 2)
(TRANSPORT.TIMEOUT 3)
(TOO.MANY.LOCAL.CONNECTIONS 4)
(TOO.MANY.REMOTE.CONNECTIONS 5)
(MISSING.COURIER 6)
(MISSING.PROGRAM 7)
(MISSING.PROCEDURE 8)
(PROTOCOL.MISMATCH 9)
(PARAMETER.INCONSISTENCY 10)
(INVALID.MESSAGE 11)
(RETURN.TIMED.OUT 12)
(OTHER.CALL.PROBLEM -1)))
(HANDLE.PROBLEM (ENUMERATION (INVALID 0)
(NULL.DISALLOWED 1)
(DIRECTORY.REQUIRED 2)))
(INSERTION.PROBLEM (ENUMERATION (POSITION.UNAVAILABLE 0)
(FILE.NOT.UNIQUE 1)
(LOOP.IN.HIERARCHY 2)))
(SERVICE.PROBLEM (ENUMERATION (CANNOT.AUTHENTICATE 0)
(SERVICE.FULL 1)
(SERVICE.UNAVAILABLE 2)
(SESSION.IN.USE 3)))
(SESSION.PROBLEM (ENUMERATION (TOKEN.INVALID 0)))
(SPACE.PROBLEM (ENUMERATION (ALLOCATION.EXCEEDED 0)
(ATTRIBUTE.AREA.FULL 1)
(MEDIUM.FULL 2)))
(TRANSFER.PROBLEM (ENUMERATION (ABORTED 0)
(CHECKSUM.INCORRECT 1)
(FORMAT.INCORRECT 2)
(NO.RENDEZVOUS 3)
(WRONG.DIRECTION 4]
PROCEDURES
((LOGON ARGS (CREDENTIALS VERIFIER)
RESULTS
(SESSION)
ERRORS
(AUTHENTICATION.ERROR SERVICE.ERROR SESSION.ERROR UNDEFINED.ERROR)
0)
(LOGOFF ARGS (SESSION)
ERRORS
(AUTHENTICATION.ERROR SERVICE.ERROR SESSION.ERROR UNDEFINED.ERROR)
1)
(CONTINUE ARGS (SESSION)
RESULTS
(CARDINAL)
ERRORS
(AUTHENTICATION.ERROR SESSION.ERROR UNDEFINED.ERROR)
19)
(OPEN ARGS (ATTRIBUTE.SEQUENCE HANDLE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR AUTHENTICATION.ERROR
CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR HANDLE.ERROR
SESSION.ERROR UNDEFINED.ERROR)
2)
(CLOSE ARGS (HANDLE SESSION)
ERRORS
(AUTHENTICATION.ERROR HANDLE.ERROR SESSION.ERROR UNDEFINED.ERROR)
3)
(CREATE ARGS (HANDLE ATTRIBUTE.SEQUENCE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR
HANDLE.ERROR INSERTION.ERROR SESSION.ERROR SPACE.ERROR
UNDEFINED.ERROR)
4)
(DELETE ARGS (HANDLE SESSION)
ERRORS
(ACCESS.ERROR AUTHENTICATION.ERROR HANDLE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
5)
(GET.ATTRIBUTES ARGS (HANDLE ATTRIBUTE.TYPE.SEQUENCE SESSION)
RESULTS
(ATTRIBUTE.SEQUENCE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR AUTHENTICATION.ERROR HANDLE.ERROR
SESSION.ERROR UNDEFINED.ERROR)
8)
(CHANGE.ATTRIBUTES ARGS (HANDLE ATTRIBUTE.SEQUENCE SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR HANDLE.ERROR INSERTION.ERROR
SESSION.ERROR SPACE.ERROR UNDEFINED.ERROR)
9)
(COPY ARGS (HANDLE HANDLE ATTRIBUTE.SEQUENCE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR AUTHENTICATION.ERROR
CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR HANDLE.ERROR
INSERTION.ERROR SESSION.ERROR SPACE.ERROR UNDEFINED.ERROR)
10)
(MOVE ARGS (HANDLE HANDLE ATTRIBUTE.SEQUENCE SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR AUTHENTICATION.ERROR
HANDLE.ERROR INSERTION.ERROR SESSION.ERROR SPACE.ERROR
UNDEFINED.ERROR)
11)
(STORE ARGS (HANDLE ATTRIBUTE.SEQUENCE CONTROL.SEQUENCE BULK.DATA.SOURCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR AUTHENTICATION.ERROR
CONNECTION.ERROR CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR
HANDLE.ERROR INSERTION.ERROR SESSION.ERROR SPACE.ERROR
TRANSFER.ERROR UNDEFINED.ERROR)
12)
(RETRIEVE ARGS (HANDLE BULK.DATA.SINK SESSION)
ERRORS
(ACCESS.ERROR AUTHENTICATION.ERROR CONNECTION.ERROR HANDLE.ERROR
SESSION.ERROR TRANSFER.ERROR UNDEFINED.ERROR)
13)
(REPLACE ARGS (HANDLE ATTRIBUTE.SEQUENCE BULK.DATA.SOURCE SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR
AUTHENTICATION.ERROR CONNECTION.ERROR HANDLE.ERROR
SESSION.ERROR SPACE.ERROR TRANSFER.ERROR UNDEFINED.ERROR)
14)
(FIND ARGS (HANDLE SCOPE.SEQUENCE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR AUTHENTICATION.ERROR CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR
HANDLE.ERROR SCOPE.TYPE.ERROR SCOPE.VALUE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
17)
(LIST ARGS (HANDLE ATTRIBUTE.TYPE.SEQUENCE SCOPE.SEQUENCE BULK.DATA.SINK SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR AUTHENTICATION.ERROR
CONNECTION.ERROR HANDLE.ERROR SCOPE.TYPE.ERROR SCOPE.VALUE.ERROR
SESSION.ERROR TRANSFER.ERROR UNDEFINED.ERROR)
18))
ERRORS
((ATTRIBUTE.TYPE.ERROR ARGS (ARGUMENT.PROBLEM ATTRIBUTE.TYPE)
0)
(ATTRIBUTE.VALUE.ERROR ARGS (ARGUMENT.PROBLEM ATTRIBUTE.TYPE)
1)
(CONTROL.TYPE.ERROR ARGS (ARGUMENT.PROBLEM CONTROL.TYPE)
2)
(CONTROL.VALUE.ERROR ARGS (ARGUMENT.PROBLEM CONTROL.TYPE)
3)
(SCOPE.TYPE.ERROR ARGS (ARGUMENT.PROBLEM SCOPE.TYPE)
4)
(SCOPE.VALUE.ERROR ARGS (ARGUMENT.PROBLEM SCOPE.TYPE)
5)
(ACCESS.ERROR ARGS (ACCESS.PROBLEM)
6)
(AUTHENTICATION.ERROR ARGS ((AUTHENTICATION . PROBLEM))
7)
(CONNECTION.ERROR ARGS (CONNECTION.PROBLEM)
8)
(HANDLE.ERROR ARGS (HANDLE.PROBLEM)
9)
(INSERTION.ERROR ARGS (INSERTION.PROBLEM)
10)
(SERVICE.ERROR ARGS (SERVICE.PROBLEM)
11)
(SESSION.ERROR ARGS (SESSION.PROBLEM)
12)
(SPACE.ERROR ARGS (SPACE.PROBLEM)
13)
(TRANSFER.ERROR ARGS (TRANSFER.PROBLEM)
14)
(UNDEFINED.ERROR ARGS (CARDINAL)
15)))
(* Lisp support.)
(DECLARE: DONTCOPY
(DECLARE: EVAL@COMPILE
(RPAQQ \FILING.ALL.ATTRIBUTE.TYPES (-1))
(RPAQQ \FILING.DEFAULT.TIMEOUT -1)
(RPAQQ \FILING.UNLIMITED.COUNT -1)
(RPAQQ \FILING.NULL.FILTER (ALL))
(RPAQQ \FILING.NULL.HANDLE (0 0))
(RPAQQ \FILING.NULL.FILE.ID (0 0 0 0 0))
(RPAQQ \FILING.LOWEST.VERSION 0)
(RPAQQ \FILING.HIGHEST.VERSION -1)
(RPAQQ \FILING.ATTRIBUTES ((CHECKSUM 0 CARDINAL)
(CHILDREN.UNIQUELY.NAMED 1 BOOLEAN)
(CREATED.BY 2 USER)
(CREATED.ON 3 TIME)
(FILE.ID 4 FILE.ID)
(IS.DIRECTORY 5 BOOLEAN)
(IS.TEMPORARY 6 BOOLEAN)
(MODIFIED.BY 7 USER)
(MODIFIED.ON 8 TIME)
(NAME 9 STRING)
(NUMBER.OF.CHILDREN 10 CARDINAL)
(ORDERING 11 ORDERING)
(PARENT.ID 12 FILE.ID)
(POSITION 13 (SEQUENCE UNSPECIFIED))
(READ.BY 14 USER)
(READ.ON 15 TIME)
(SIZE.IN.BYTES 16 LONGCARDINAL)
(FILE.TYPE 17 LONGCARDINAL)
(VERSION 18 CARDINAL)
(ACCESS.LIST 19 ACCESS.LIST)
(DEFAULT.ACCESS.LIST 20 ACCESS.LIST)
(PATHNAME 21 STRING)))
(RPAQQ LISP.TO.NS.FILE.ATTRIBUTES ((IWRITEDATE MODIFIED.ON)
(IREADDATE READ.ON)
(ICREATIONDATE CREATED.ON)
(LENGTH SIZE.IN.BYTES)))
[CONSTANTS (\FILING.ALL.ATTRIBUTE.TYPES (QUOTE (-1)))
(\FILING.DEFAULT.TIMEOUT -1)
(\FILING.UNLIMITED.COUNT -1)
(\FILING.NULL.FILTER (QUOTE (ALL)))
(\FILING.NULL.HANDLE (QUOTE (0 0)))
(\FILING.NULL.FILE.ID (QUOTE (0 0 0 0 0)))
(\FILING.LOWEST.VERSION 0)
(\FILING.HIGHEST.VERSION -1)
[\FILING.ATTRIBUTES (QUOTE ((CHECKSUM 0 CARDINAL)
(CHILDREN.UNIQUELY.NAMED 1 BOOLEAN)
(CREATED.BY 2 USER)
(CREATED.ON 3 TIME)
(FILE.ID 4 FILE.ID)
(IS.DIRECTORY 5 BOOLEAN)
(IS.TEMPORARY 6 BOOLEAN)
(MODIFIED.BY 7 USER)
(MODIFIED.ON 8 TIME)
(NAME 9 STRING)
(NUMBER.OF.CHILDREN 10 CARDINAL)
(ORDERING 11 ORDERING)
(PARENT.ID 12 FILE.ID)
(POSITION 13 (SEQUENCE UNSPECIFIED))
(READ.BY 14 USER)
(READ.ON 15 TIME)
(SIZE.IN.BYTES 16 LONGCARDINAL)
(FILE.TYPE 17 LONGCARDINAL)
(VERSION 18 CARDINAL)
(ACCESS.LIST 19 ACCESS.LIST)
(DEFAULT.ACCESS.LIST 20 ACCESS.LIST)
(PATHNAME 21 STRING]
(LISP.TO.NS.FILE.ATTRIBUTES (QUOTE ((IWRITEDATE MODIFIED.ON)
(IREADDATE READ.ON)
(ICREATIONDATE CREATED.ON)
(LENGTH SIZE.IN.BYTES]
)
[DECLARE: EVAL@COMPILE
(ACCESSFNS NSFILINGSTREAM ((NSFILING.CONNECTION (fetch F3 of DATUM)
(replace F3 of DATUM with NEWVALUE))
(NSFILING.HANDLE (fetch F4 of DATUM)
(replace F4 of DATUM with NEWVALUE))
(NSFILING.ATTRIBUTES (fetch F5 of DATUM)
(replace F5 of DATUM with NEWVALUE))))
(DATATYPE FILING.CONNECTION (FC.FILESERVER (* Name of fileserver.)
FC.COURIER.STREAM
(* Current open Courier stream for this connection.)
FC.SESSION (* Courier session handle for this connection.)
FC.CONTINUANCE (* Continuance of this session in seconds, in the form
returned by SETUPTIMER.)
FC.CURRENT.DIRECTORY
(* Courier HANDLE for current directory.)
FC.CURRENT.PATH (* List of directories in current path.)
))
(RECORD \NSFILING.GENFILESTATE (PATTERN CONNECTION FILELIST))
]
(/DECLAREDATATYPE (QUOTE FILING.CONNECTION)
(QUOTE (POINTER POINTER POINTER POINTER POINTER POINTER)))
(DECLARE: DOEVAL@COMPILE DONTCOPY
(ADDTOVAR GLOBALVARS \NSFILING.CONNECTIONS \NSFILING.DEVICE)
)
)
(/DECLAREDATATYPE (QUOTE FILING.CONNECTION)
(QUOTE (POINTER POINTER POINTER POINTER POINTER POINTER)))
(RPAQ? \NSFILING.LOCK (CREATE.MONITORLOCK (QUOTE NSFILING)))
(RPAQ? \NSFILING.CONNECTIONS NIL)
(DEFINEQ
(\NSFILING.LOGIN
[LAMBDA (FILESERVER) (* ecc " 8-AUG-83 14:12")
(RESETLST (PROG (STREAM SESSION CONNECTION)
(bind CREDENTIALS MSG until SESSION
do (SETQ CREDENTIALS (NSLOGIN FILESERVER MSG))
(SETQ STREAM (COURIER.OPEN FILESERVER (QUOTE FILESERVER)
NIL
(PACK* FILESERVER "#FILING")))
(RESETSAVE NIL (LIST [QUOTE (LAMBDA (X)
(if RESETSTATE
then (SPP.CLOSE X T]
STREAM))
(SETQ SESSION (COURIER.CALL STREAM (QUOTE FILING)
(QUOTE LOGON)
[BQUOTE ((TYPE 0)
(VALUE , (COURIER.WRITE.REP
(PARSE.CH.NAME (CAR
CREDENTIALS))
(QUOTE AUTHENTICATION)
(QUOTE SIMPLE.CREDENTIALS]
(COURIER.WRITE.REP (HASH.PASSWORD (CDR
CREDENTIALS))
(QUOTE FILING)
(QUOTE SIMPLE.VERIFIER))
(QUOTE RETURNERRORS)))
(if (AND SESSION (EQ (CAR SESSION)
(QUOTE ERROR))
(EQ (CADR SESSION)
(QUOTE AUTHENTICATION.ERROR)))
then (SETQ SESSION NIL)
(SETQ MSG "Login incorrect.")
(SPP.CLOSE STREAM)))
(if (EQ (CAR SESSION)
(QUOTE ERROR))
then (ERROR (PACK* "Error while logging on to " FILESERVER)
SESSION))
(SETQ CONNECTION
(create FILING.CONNECTION
FC.FILESERVER ← FILESERVER
FC.COURIER.STREAM ← STREAM
FC.SESSION ← SESSION
FC.CURRENT.DIRECTORY ← \FILING.NULL.HANDLE))
(RESETSAVE NIL (LIST [QUOTE (LAMBDA (X)
(if RESETSTATE
then (\NSFILING.LOGOUT X T]
CONNECTION))
(replace FC.CONTINUANCE of CONNECTION with (SETUPTIMER (COURIER.CALL
STREAM
(QUOTE FILING)
(QUOTE CONTINUE)
SESSION)
(fetch FC.CONTINUANCE
of CONNECTION)
(QUOTE SECONDS)))
(\NSFILING.CONNECT CONNECTION)
(RETURN CONNECTION])
(\NSFILING.LOGOUT
[LAMBDA (CONNECTION ABORT?) (* ecc " 4-AUG-83 10:09")
(PROG (NEWSTREAM)
[if (NOT (AND (fetch FC.COURIER.STREAM of CONNECTION)
(\NSFILING.LOGOUT.INTERNAL CONNECTION)))
then (* Something was wrong with the connection;
try a new one.)
(if (NOT (AND (replace FC.COURIER.STREAM of CONNECTION
with (COURIER.OPEN (fetch FC.FILESERVER of CONNECTION)
(QUOTE FILESERVER)
T
(PACK* (fetch FC.FILESERVER of CONNECTION)
"#LOGOFF")))
(\NSFILING.LOGOUT.INTERNAL CONNECTION)))
then (if NSWIZARDFLG
then (printout T "WARNING: Can't log off filing session on "
(fetch FC.FILESERVER of CONNECTION)
T]
(replace FC.COURIER.STREAM of CONNECTION with NIL)
(SETQ \NSFILING.CONNECTIONS (DREMOVE CONNECTION \NSFILING.CONNECTIONS])
(\NSFILING.LOGOUT.INTERNAL
[LAMBDA (CONNECTION) (* ecc "14-JUL-83 15:27")
(PROG ((COURIERSTREAM (fetch FC.COURIER.STREAM of CONNECTION))
FILESTREAM)
(RETURN (NLSETQ (RESETLST (RESETSAVE NIL (LIST (QUOTE SPP.CLOSE)
COURIERSTREAM T))
(if (SETQ FILESTREAM (fetch SPPSUBSTREAM of (GETSPPCON
COURIERSTREAM)))
then (CLOSEF? FILESTREAM))
(COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE LOGOFF)
(fetch FC.SESSION of CONNECTION)
T)
T])
(\NSFILING.CONNECT
[LAMBDA (CONNECTION PATHNAME) (* ecc " 8-AUG-83 14:17")
(* Follow the list of directories in PATHNAME and cache the handle for the final one in the connection record.
The special case when PATHNAME is NIL is equivalent to connecting to the root directory. Uses cached current path
to avoid useless reconnecting. WARNING: this may fail if there is ever more than one version of the same
subdirectory name. To fix this we could use the same hack that's in \NSFILING.GETFILE : first enumerate the
versions (also requiring the IS.DIRECTORY attribute) and then use the unique FILE.ID, but since it hasn't been a
problem yet, we don't bother.)
(PROG ((NEW.DIRLIST (\PATHNAME.TO.DIRECTORY.LIST PATHNAME))
(OLD.DIRLIST (fetch FC.CURRENT.PATH of CONNECTION))
ADDITIONAL.DIRLIST FAILURE)
(if (AND NEW.DIRLIST (EQUAL NEW.DIRLIST OLD.DIRLIST))
then (* Nothing needs to be done because we're already
connected to this path.)
(RETURN T))
(if (AND (SETQ ADDITIONAL.DIRLIST NEW.DIRLIST)
(bind NEW.DIR for OLD.DIR in OLD.DIRLIST
always (SETQ NEW.DIR (CAR ADDITIONAL.DIRLIST))
(SETQ ADDITIONAL.DIRLIST (CDR ADDITIONAL.DIRLIST))
(EQ OLD.DIR NEW.DIR)))
then (* We're currently connected to a prefix of the desired
path, so we can save some remote calls.)
(SETQ NEW.DIRLIST ADDITIONAL.DIRLIST)
else
(* We need to start again from the root. If we kept open the handles of all directories in the current path, we
would only have to go back to the nearest common ancestor, but it's probably not worth it.)
(if (NOT (EQUAL (fetch FC.CURRENT.DIRECTORY of CONNECTION)
\FILING.NULL.HANDLE))
then (COURIER.CALL (fetch FC.COURIER.STREAM of CONNECTION)
(QUOTE FILING)
(QUOTE CLOSE)
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
(fetch FC.SESSION of CONNECTION)))
(replace FC.CURRENT.DIRECTORY of CONNECTION with (COURIER.CALL (fetch
FC.COURIER.STREAM
of CONNECTION)
(QUOTE FILING)
(QUOTE OPEN)
NIL
\FILING.NULL.HANDLE NIL
(fetch FC.SESSION
of CONNECTION)
T))
(replace FC.CURRENT.PATH of CONNECTION with NIL))
[bind NEW.HANDLE OLD.HANDLE for NEW.DIR in NEW.DIRLIST
do (SETQ OLD.HANDLE (fetch FC.CURRENT.DIRECTORY of CONNECTION))
(SETQ NEW.HANDLE (COURIER.CALL (fetch FC.COURIER.STREAM of CONNECTION)
(QUOTE FILING)
(QUOTE OPEN)
[\WRITE.FILING.ATTRIBUTE.SEQUENCE
(BQUOTE ((NAME , NEW.DIR]
OLD.HANDLE NIL (fetch FC.SESSION of CONNECTION)
T))
(if (NULL NEW.HANDLE)
then (SETQ FAILURE T)
(RETURN))
(if (NOT (EQUAL OLD.HANDLE \FILING.NULL.HANDLE))
then (COURIER.CALL (fetch FC.COURIER.STREAM of CONNECTION)
(QUOTE FILING)
(QUOTE CLOSE)
OLD.HANDLE
(fetch FC.SESSION of CONNECTION)))
(replace FC.CURRENT.DIRECTORY of CONNECTION with NEW.HANDLE)
(replace FC.CURRENT.PATH of CONNECTION with (APPEND (fetch FC.CURRENT.PATH
of CONNECTION)
(LIST NEW.DIR]
(RETURN (NOT FAILURE])
(\PATHNAME.TO.DIRECTORY.LIST
[LAMBDA (PATHNAME) (* edited: " 2-AUG-83 14:30")
(* Return a list of the directory components of a
pathname. If the pathname is NIL it refers to the root
directory.)
(\PATHNAME.TO.DIRECTORY.LIST.INTERNAL (FILENAMEFIELD PATHNAME (QUOTE DIRECTORY])
(\PATHNAME.TO.DIRECTORY.LIST.INTERNAL
[LAMBDA (DIRS) (* edited: " 2-AUG-83 15:02")
(if DIRS
then (PROG ((I (STRPOS ">" DIRS)))
(RETURN (if I
then [CONS (SUBATOM DIRS 1 (SUB1 I))
(\PATHNAME.TO.DIRECTORY.LIST.INTERNAL (SUBATOM
DIRS
(ADD1 I]
else (LIST (MKATOM DIRS])
(\DIRECTORY.LIST.TO.PATHNAME
[LAMBDA (DIRLIST) (* edited: " 2-AUG-83 14:33")
(APPLY (FUNCTION PACK*)
(CONS "<" (OR (for DIR in DIRLIST collect (CONCAT DIR ">"))
">"])
(\NSFILING.CREATE.DIRECTORY
[LAMBDA (CONNECTION DIRECTORYNAME) (* ecc " 8-AUG-83 14:18")
(PROG ((STREAM (fetch FC.COURIER.STREAM of CONNECTION))
(SESSION (fetch FC.SESSION of CONNECTION)))
(COURIER.CALL STREAM (QUOTE FILING)
(QUOTE CLOSE)
(COURIER.CALL STREAM (QUOTE FILING)
(QUOTE CREATE)
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
[\WRITE.FILING.ATTRIBUTE.SEQUENCE (BQUOTE ((NAME ,
DIRECTORYNAME)
(IS.DIRECTORY T)
(FILE.TYPE 1]
NIL SESSION)
SESSION])
(\NSFILING.LIST
[LAMBDA (CONNECTION PATTERN) (* ecc " 4-AUG-83 13:55")
(* Lists the files matching a wildcard pattern.
This is an undocumented feature.)
(PROG ((NAME.ATTRIBUTE)
STREAM SEQUENCE.OF.ATTRIBUTE.SEQUENCES)
(SETQ STREAM (COURIER.CALL (fetch FC.COURIER.STREAM of CONNECTION)
(QUOTE FILING)
(QUOTE LIST)
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
(\FILING.ATTRIBUTE.TYPE.SEQUENCE (QUOTE (NAME VERSION
IS.DIRECTORY)))
(PROGN
(* The following doesn't quite work because the fileserver won't match against subdirectory names.
So we always enumerate the whole directory, regardless of the pattern. (BQUOTE ((FILTER (MATCHES ,
(\WRITE.FILING.ATTRIBUTE (QUOTE NAME) PATTERN))))))
NIL)
NIL
(fetch FC.SESSION of CONNECTION)))
(SETQ SEQUENCE.OF.ATTRIBUTE.SEQUENCES (COURIER.READ.BULKDATA STREAM (QUOTE FILING)
(QUOTE ATTRIBUTE.SEQUENCE)))
(CLOSEF STREAM)
(RETURN (for SEQ in SEQUENCE.OF.ATTRIBUTE.SEQUENCES collect (\READ.FILING.ATTRIBUTE.SEQUENCE
SEQ])
(\NSFILING.LISTVERSIONS
[LAMBDA (CONNECTION FILENAME) (* ecc " 4-AUG-83 16:14")
(* Like \NSFILING.LIST but lists the versions of a
particular file. Get the FILE.ID for use by
\NSFILING.GETFILE)
(PROG ((NAME.ATTRIBUTE)
STREAM SEQUENCE.OF.ATTRIBUTE.SEQUENCES)
(SETQ STREAM (COURIER.CALL (fetch FC.COURIER.STREAM of CONNECTION)
(QUOTE FILING)
(QUOTE LIST)
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
(\FILING.ATTRIBUTE.TYPE.SEQUENCE (QUOTE (NAME VERSION
IS.DIRECTORY
FILE.ID)))
[BQUOTE ((FILTER (EQUAL ((ATTRIBUTE , (\WRITE.FILING.ATTRIBUTE
(QUOTE NAME)
FILENAME))
(INTERPRETATION STRING]
NIL
(fetch FC.SESSION of CONNECTION)))
(SETQ SEQUENCE.OF.ATTRIBUTE.SEQUENCES (COURIER.READ.BULKDATA STREAM (QUOTE FILING)
(QUOTE ATTRIBUTE.SEQUENCE)))
(CLOSEF STREAM)
(RETURN (for SEQ in SEQUENCE.OF.ATTRIBUTE.SEQUENCES collect (\READ.FILING.ATTRIBUTE.SEQUENCE
SEQ])
(\FILING.ATTRIBUTE.TYPE.SEQUENCE
[LAMBDA (ATTRIBUTETYPES) (* ecc " 3-AUG-83 16:39")
(for ATTR in ATTRIBUTETYPES collect (\FILING.ATTRIBUTE.TYPE ATTR])
(\FILING.ATTRIBUTE.TYPE
[LAMBDA (ATTR) (* ecc " 3-AUG-83 16:37")
(for X in \FILING.ATTRIBUTES do (if (EQ (CAR X)
ATTR)
then (RETURN (CADR X)))
finally (ERROR "Unknown Filing attribute" ATTR])
(\READ.FILING.ATTRIBUTE.SEQUENCE
[LAMBDA (SEQ) (* ecc " 3-AUG-83 16:35")
(* Given an ATTRIBUTE.SEQUENCE object, decode the values
based on the attribute types and return a list of
attribute type/value pairs.)
(for ATTR in SEQ collect (\READ.FILING.ATTRIBUTE ATTR])
(\READ.FILING.ATTRIBUTE
[LAMBDA (ATTR) (* ecc " 3-AUG-83 16:34")
(* Given an ATTRIBUTE object, decode the value based on
the attribute type and return a type/value pair.)
(bind (TYPE ←(CADR (ASSOC (QUOTE TYPE)
ATTR)))
(VALUE ←(CADR (ASSOC (QUOTE VALUE)
ATTR)))
for X in \FILING.ATTRIBUTES do [if (EQP (CADR X)
TYPE)
then (RETURN (LIST (CAR X)
(COURIER.READ.REP VALUE (QUOTE FILING)
(CADDR X]
finally (RETURN (LIST TYPE VALUE])
(\WRITE.FILING.ATTRIBUTE.SEQUENCE
[LAMBDA (TYPE/VALUE/PAIRS) (* ecc " 3-AUG-83 16:39")
(* Return a Courier ATTRIBUTE.SEQUENCE corresponding to
a list of attribute types and values.)
(for TYPE/VALUE in TYPE/VALUE/PAIRS collect (\WRITE.FILING.ATTRIBUTE (CAR TYPE/VALUE)
(CADR TYPE/VALUE])
(\WRITE.FILING.ATTRIBUTE
[LAMBDA (TYPE VALUE) (* ecc " 3-AUG-83 16:31")
(* Return a Courier ATTRIBUTE corresponding to the
specified type and value.)
(for X in \FILING.ATTRIBUTES do [if (EQ (CAR X)
TYPE)
then (RETURN (BQUOTE ((TYPE , (CADR X))
(VALUE , (COURIER.WRITE.REP
VALUE
(QUOTE FILING)
(CADDR X]
finally (ERROR "Unknown Filing attribute" TYPE])
(NSDIRECTORY
[LAMBDA (PATTERN) (* edited: " 2-AUG-83 14:00")
(PROG (HOST CONNECTION LST)
[SETQ PATTERN (\ADD.CONNECTED.DIR (OR PATTERN (QUOTE *]
(SETQ HOST (FILENAMEFIELD PATTERN (QUOTE HOST)))
(SETQ CONNECTION (\GETFILINGCONNECTION HOST))
(SETQ LST (AND (\NSFILING.CONNECT CONNECTION PATTERN)
(\NSFILING.LIST CONNECTION)))
(RETURN (for X in LST collect (\NSFILING.FULLNAME CONNECTION (CADR (ASSOC (QUOTE NAME)
X))
(CADR (ASSOC (QUOTE VERSION)
X))
(CADR (ASSOC (QUOTE IS.DIRECTORY)
X])
(NSCREATEDIRECTORY
[LAMBDA (HOST/DIR) (* ecc " 1-AUG-83 15:46")
(PROG (REVERSE.DIRLIST ALL.BUT.LAST.DIR LAST.DIR CONNECTION)
(SETQ HOST/DIR (\ADD.CONNECTED.DIR HOST/DIR))
(SETQ REVERSE.DIRLIST (REVERSE (\PATHNAME.TO.DIRECTORY.LIST HOST/DIR)))
(if [NOT (AND (SETQ ALL.BUT.LAST.DIR (REVERSE (CDR REVERSE.DIRLIST)))
(SETQ LAST.DIR (CAR REVERSE.DIRLIST]
then (LISPERROR "BAD FILE NAME" HOST/DIR))
[SETQ CONNECTION (\GETFILINGCONNECTION (FILENAMEFIELD HOST/DIR (QUOTE HOST]
(\NSFILING.CONNECT CONNECTION (\DIRECTORY.LIST.TO.PATHNAME ALL.BUT.LAST.DIR))
(\NSFILING.CREATE.DIRECTORY CONNECTION LAST.DIR)
(RETURN HOST/DIR])
(\NSFILING.INIT
[LAMBDA NIL (* ecc "20-JUL-83 17:08")
(\DEFINEDEVICE NIL (SETQ \NSFILING.DEVICE (create FDEV using \SPP.BULKDATA.DEVICE DEVICENAME ←(
QUOTE NSFILING)
OPENFILE ←(FUNCTION
\NSFILING.OPENFILE)
CLOSEFILE ←(FUNCTION
\NSFILING.CLOSEFILE)
GETFILEINFO ←(FUNCTION
\NSFILING.GETFILEINFO)
SETFILEINFO ←(FUNCTION
\NSFILING.SETFILEINFO)
GETFILEPTR ←(FUNCTION ZERO)
GETEOFPTR ←(FUNCTION
\NSFILING.GETEOFPTR)
DELETEFILE ←(FUNCTION
\NSFILING.DELETEFILE)
HOSTNAMEP ←(FUNCTION
\NSFILING.HOSTNAMEP)
GETFILENAME ←(FUNCTION
\NSFILING.GETFILENAME)
DIRECTORYNAMEP ←(FUNCTION
\NSFILING.DIRECTORYNAMEP)
GENERATEFILES ←(FUNCTION
\NSFILING.GENERATEFILES)
EVENTFN ←(FUNCTION \NSFILING.EVENTFN]
)
(\GETFILINGCONNECTION
[LAMBDA (FILESERVER) (* ecc "25-JUL-83 15:53")
(* Find a connection to this fileserver which doesn't
have a file transfer outstanding,)
(WITH.MONITOR \NSFILING.LOCK (PROG (CONNECTION)
(SETQ FILESERVER (CANONICAL.CH.NAME FILESERVER))
[SETQ CONNECTION
(bind (TAIL ← \NSFILING.CONNECTIONS)
C while TAIL
do (* This control structure needed because
\VALID.FILING.CONNECTIONP might do DREMOVE on
\NSFILING.CONNECTIONS)
(SETQ C (CAR TAIL))
(SETQ TAIL (CDR TAIL))
(if (AND (EQ (fetch FC.FILESERVER of C)
FILESERVER)
(\VALID.FILING.CONNECTIONP C))
then (RETURN C]
(if (NULL CONNECTION)
then (SETQ CONNECTION (\NSFILING.LOGIN FILESERVER))
(push \NSFILING.CONNECTIONS CONNECTION))
(RETURN CONNECTION])
(\VALID.FILING.CONNECTIONP
[LAMBDA (CONNECTION) (* ecc " 4-AUG-83 10:26")
(* Try to determine if this is a usable Filing
connection. If it's dead for some reason, remove it from
the list.)
(PROG ((STREAM (fetch FC.COURIER.STREAM of CONNECTION))
N)
(if (OR (AND STREAM (GETSPPCON STREAM)
(fetch SPPSUBSTREAM of (GETSPPCON STREAM)))
(NOT (\LOGGED.ONTO.NSFILESERVERP CONNECTION)))
then (* There's a file transfer outstanding or user is logged
in under a different name.)
(RETURN NIL))
[if (OR (NULL STREAM)
(NULL (GETSPPCON STREAM))
(NOT (READABLE STREAM))
(TIMEREXPIRED? (fetch FC.CONTINUANCE of CONNECTION)
(QUOTE SECONDS)))
then (* Try to reconnect.)
(replace FC.COURIER.STREAM of CONNECTION
with (SETQ STREAM (COURIER.OPEN (fetch FC.FILESERVER of CONNECTION)
(QUOTE FILESERVER)
NIL
(PACK* (fetch FC.FILESERVER of CONNECTION)
"#FILING"]
(* Try a Courier call. If it errors out, forget this
connection.)
(NLSETQ (SETQ N (COURIER.CALL STREAM (QUOTE FILING)
(QUOTE CONTINUE)
(fetch FC.SESSION of CONNECTION)
T)))
(if N
then (replace FC.CONTINUANCE of CONNECTION with (SETUPTIMER N (fetch FC.CONTINUANCE
of CONNECTION)
(QUOTE SECONDS)))
(RETURN CONNECTION)
else (\NSFILING.LOGOUT CONNECTION)
(RETURN NIL])
(\LOGGED.ONTO.NSFILESERVERP
[LAMBDA (CONNECTION) (* ecc " 4-AUG-83 10:26")
(* Check whether the user's current login to this host is the same as the one used for this connection.
The hashed password is the VERIFIER component of the SESSION record.)
(EQP (CAADR (ASSOC (QUOTE VERIFIER)
(fetch FC.SESSION of CONNECTION)))
(HASH.PASSWORD (CDR (NSLOGIN (fetch FC.FILESERVER of CONNECTION])
(CLOSE.NSFILING.CONNECTIONS
[LAMBDA NIL (* ecc "18-JUL-83 14:45")
(bind (TAIL ← \NSFILING.CONNECTIONS)
CONNECTION while TAIL
do (* This control structure needed because
\NSFILING.LOGOUT does DREMOVE on \NSFILING.CONNECTIONS)
(SETQ CONNECTION (CAR TAIL))
(SETQ TAIL (CDR TAIL))
(\NSFILING.LOGOUT CONNECTION T])
(\NSFILING.OPENFILE
[LAMBDA (FILENAME ACCESS RECOG) (* ecc "22-JUN-83 13:30")
(\NSFILING.GETFILE FILENAME ACCESS RECOG T NIL])
(\NSFILING.GETFILE
[LAMBDA (FILENAME ACCESS RECOG NOERROR OPTION) (* ecc " 8-AUG-83 14:19")
(* Opens FILENAME for specified ACCESS and RECOG, returning a stream. If NOERROR is non-NIL, returns NIL on
errors. If OPTION is NAME, HANDLE, or ATTRIBUTES, just return the appropriate information instead of a stream.
If OPTION is DIRECTORY, return T or NIL if FILENAME is a directory or not.)
(PROG ((HOST (FILENAMEFIELD FILENAME (QUOTE HOST)))
(NAME (ROOTFILENAME FILENAME))
(VERSION (FILENAMEFIELD FILENAME (QUOTE VERSION)))
CONNECTION DESIRED.INFO (LOWEST.VERSION 65535)
LOWEST.VERSION.INFO
(HIGHEST.VERSION 0)
HIGHEST.VERSION.INFO FILE.ID COURIERSTREAM SESSION HANDLE FILESTREAM ATTRS FULLNAME)
[if [OR (NULL HOST)
(AND (NULL NAME)
(NEQ OPTION (QUOTE DIRECTORY]
then (RETURN (AND (NOT NOERROR)
(LISPERROR "BAD FILE NAME" FILENAME]
(SETQ CONNECTION (\GETFILINGCONNECTION HOST))
(if (EQ OPTION (QUOTE DIRECTORY))
then (* Just return success or failure of attempt to follow
the directories in the pathname.)
(RETURN (\NSFILING.CONNECT CONNECTION FILENAME)))
[if (NOT (\NSFILING.CONNECT CONNECTION FILENAME))
then (RETURN (AND (NOT NOERROR)
(LISPERROR "FILE NOT FOUND" FILENAME]
(* NS fileservers don't support version numbers properly. As a work-around, we first list all versions of the
file. file, also getting back the internal FILE.ID for each of them. We make a pass over this list and find the
lowest and highest versions as well as the specified one, if any.)
(bind V for ALST in (\NSFILING.LISTVERSIONS CONNECTION NAME)
do (SETQ V (CADR (ASSOC (QUOTE VERSION)
ALST)))
(if (EQP V VERSION)
then (SETQ DESIRED.INFO ALST))
(if (ILESSP V LOWEST.VERSION)
then (SETQ LOWEST.VERSION V)
(SETQ LOWEST.VERSION.INFO ALST))
(if (IGREATERP V HIGHEST.VERSION)
then (SETQ HIGHEST.VERSION V)
(SETQ HIGHEST.VERSION.INFO ALST)))
(* Find the FILE.ID of the appropriate version of the file. Uses the same algorithm that's in \FILESPEC in
MOD44IO; it may not be correct, but it's consistent.)
[SETQ FILE.ID (CADR (ASSOC (QUOTE FILE.ID)
(SELECTQ (OR VERSION RECOG)
((OLD OLD/NEW)
(SETQ VERSION HIGHEST.VERSION)
HIGHEST.VERSION.INFO)
(NEW (SETQ VERSION (ADD1 (OR HIGHEST.VERSION 0)))
NIL)
(OLDEST (SETQ VERSION LOWEST.VERSION)
LOWEST.VERSION.INFO)
DESIRED.INFO]
(* Now get an open file handle for the appropriate
version of the file.)
(SETQ COURIERSTREAM (fetch FC.COURIER.STREAM of CONNECTION))
(SETQ SESSION (fetch FC.SESSION of CONNECTION))
(if FILE.ID
then (* Try to open an existing file.)
(SETQ HANDLE (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE OPEN)
[\WRITE.FILING.ATTRIBUTE.SEQUENCE (BQUOTE
((FILE.ID , FILE.ID]
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
NIL SESSION T))
elseif [AND (EQ ACCESS (QUOTE OUTPUT))
(MEMB RECOG (QUOTE (NIL NEW OLD/NEW]
then (* Create a new file.)
(SETQ FILESTREAM (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE STORE)
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
[\WRITE.FILING.ATTRIBUTE.SEQUENCE
(BQUOTE ((NAME , NAME)
(VERSION , VERSION]
NIL
(FUNCTION [LAMBDA (SUBSTREAM H)
(SETQ HANDLE H])
SESSION T))
(* Write a file with a single byte in it so that we can get back the FILE.ID info. Later we can do a REPLACE
operation to write the user's data.)
(BOUT FILESTREAM 0)
(CLOSEF FILESTREAM) (* The FUNARG we passed to the STORE operation should
have set HANDLE.))
[if (NULL HANDLE)
then (RETURN (AND (NOT NOERROR)
(LISPERROR "FILE NOT FOUND" FILENAME]
(SETQ ATTRS (\READ.FILING.ATTRIBUTE.SEQUENCE (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE GET.ATTRIBUTES)
HANDLE
\FILING.ALL.ATTRIBUTE.TYPES
SESSION)))
[SETQ FULLNAME (\NSFILING.FULLNAME CONNECTION NAME (CADR (ASSOC (QUOTE VERSION)
ATTRS]
[if OPTION
then (if (NEQ OPTION (QUOTE HANDLE))
then (* Only the HANDLE option needs to keep it open.)
(\NSFILING.INTERNAL.CLOSE CONNECTION HANDLE))
(RETURN (SELECTQ OPTION
(NAME FULLNAME)
(HANDLE (CONS (BQUOTE (HANDLE , HANDLE))
ATTRS))
(ATTRIBUTES ATTRS)
(SHOULDNT]
(SETQ FILESTREAM (SELECTQ ACCESS
(INPUT (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE RETRIEVE)
HANDLE NIL SESSION T))
(OUTPUT (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE REPLACE)
HANDLE NIL NIL SESSION T))
(LISPERROR "ILLEGAL ARG" ACCESS)))
(if (NULL FILESTREAM)
then (LISPERROR "FILE NOT FOUND" FILENAME))
(replace FULLFILENAME of FILESTREAM with FULLNAME)
(replace NSFILING.CONNECTION of FILESTREAM with CONNECTION)
(replace NSFILING.HANDLE of FILESTREAM with HANDLE)
(replace NSFILING.ATTRIBUTES of FILESTREAM with ATTRS)
(replace DEVICE of FILESTREAM with \NSFILING.DEVICE)
(RETURN FILESTREAM])
(\NSFILING.ORIGINAL.GETFILE
[LAMBDA (FILENAME ACCESS RECOG NOERROR OPTION) (* ecc " 4-AUG-83 16:16")
(* Opens FILENAME for specified ACCESS and RECOG, returning a stream. If NOERROR is non-NIL, returns NIL on
errors. If OPTION is NAME, HANDLE, or ATTRIBUTES, just return the appropriate information instead of a stream.
If OPTION is DIRECTORY, return T or NIL if FILENAME is a directory or not.)
(PROG ((HOST (FILENAMEFIELD FILENAME (QUOTE HOST)))
(NAME (ROOTFILENAME FILENAME))
(VERSION (FILENAMEFIELD FILENAME (QUOTE VERSION)))
CONNECTION COURIERSTREAM SESSION HANDLE FILESTREAM ATTRS FULLNAME)
[if [OR (NULL HOST)
(AND (NULL NAME)
(NEQ OPTION (QUOTE DIRECTORY]
then (RETURN (AND (NOT NOERROR)
(LISPERROR "BAD FILE NAME" FILENAME]
(SETQ CONNECTION (\GETFILINGCONNECTION HOST))
(if (EQ OPTION (QUOTE DIRECTORY))
then (* Just return success or failure of attempt to follow
the directories in the pathname.)
(RETURN (\NSFILING.CONNECT CONNECTION FILENAME)))
[if (NOT (\NSFILING.CONNECT CONNECTION FILENAME))
then (RETURN (AND (NOT NOERROR)
(LISPERROR "FILE NOT FOUND" FILENAME]
(SETQ COURIERSTREAM (fetch FC.COURIER.STREAM of CONNECTION))
(SETQ SESSION (fetch FC.SESSION of CONNECTION)) (* Open appropriate version of file.
Note that explicit version overrides RECOG.
Is this right, or should conflicting VERSION and RECOG
cause an error?)
(SELECTQ ACCESS
((INPUT NONE)
(SETQ HANDLE (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE OPEN)
[\WRITE.FILING.ATTRIBUTE.SEQUENCE
(BQUOTE ((NAME , NAME)
(VERSION , (OR VERSION
(SELECTQ RECOG
((NIL OLD)
\FILING.HIGHEST.VERSION)
(OLDEST
\FILING.LOWEST.VERSION)
(LISPERROR
"ILLEGAL ARG"
RECOG]
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
NIL SESSION T)))
[OUTPUT [if [OR VERSION (MEMB RECOG (QUOTE (OLD OLD/NEW OLDEST]
then (* Try to open an existing file.)
(SETQ HANDLE
(COURIER.CALL
COURIERSTREAM
(QUOTE FILING)
(QUOTE OPEN)
[\WRITE.FILING.ATTRIBUTE.SEQUENCE
(BQUOTE ((NAME , NAME)
(VERSION , (OR VERSION (SELECTQ RECOG
((OLD OLD/NEW)
\FILING.HIGHEST.VERSION)
(OLDEST
\FILING.LOWEST.VERSION)
(SHOULDNT]
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
NIL SESSION T))
(if (AND (NULL HANDLE)
(NEQ RECOG (QUOTE OLD/NEW)))
then (RETURN (AND (NOT NOERROR)
(LISPERROR "FILE NOT FOUND" FILENAME]
(if (NULL HANDLE)
then (if [NOT (MEMB RECOG (QUOTE (NIL NEW OLD/NEW]
then (LISPERROR "ILLEGAL ARG" RECOG)
else (* Create a new file.)
(SETQ FILESTREAM (COURIER.CALL
COURIERSTREAM
(QUOTE FILING)
(QUOTE STORE)
(fetch FC.CURRENT.DIRECTORY of CONNECTION)
[\WRITE.FILING.ATTRIBUTE.SEQUENCE
(BQUOTE ((NAME , NAME]
NIL
(FUNCTION [LAMBDA (SUBSTREAM H)
(SETQ HANDLE H])
SESSION T))
(* Write a file with a single byte in it so that we can get back the version number. Later we can do a REPLACE
operation to write the user's data.)
(BOUT FILESTREAM 0)
(CLOSEF FILESTREAM)
(* The FUNARG we passed to the STORE operation should
have set HANDLE.)]
(LISPERROR "ILLEGAL ARG" ACCESS))
[if (NULL HANDLE)
then (RETURN (AND (NOT NOERROR)
(LISPERROR "FILE NOT FOUND" FILENAME]
(SETQ ATTRS (\READ.FILING.ATTRIBUTE.SEQUENCE (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE GET.ATTRIBUTES)
HANDLE
\FILING.ALL.ATTRIBUTE.TYPES
SESSION)))
[SETQ FULLNAME (\NSFILING.FULLNAME CONNECTION NAME (CADR (ASSOC (QUOTE VERSION)
ATTRS]
[if OPTION
then (if (NEQ OPTION (QUOTE HANDLE))
then (* Only the HANDLE option needs to keep it open.)
(\NSFILING.INTERNAL.CLOSE CONNECTION HANDLE))
(RETURN (SELECTQ OPTION
(NAME FULLNAME)
(HANDLE (CONS (LIST (QUOTE HANDLE)
HANDLE)
ATTRS))
(ATTRIBUTES ATTRS)
(SHOULDNT]
(SETQ FILESTREAM (SELECTQ ACCESS
(INPUT (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE RETRIEVE)
HANDLE NIL SESSION T))
(OUTPUT (COURIER.CALL COURIERSTREAM (QUOTE FILING)
(QUOTE REPLACE)
HANDLE NIL NIL SESSION T))
(LISPERROR "ILLEGAL ARG" ACCESS)))
(if (NULL FILESTREAM)
then (LISPERROR "FILE NOT FOUND" FILENAME))
(replace FULLFILENAME of FILESTREAM with FULLNAME)
(replace NSFILING.CONNECTION of FILESTREAM with CONNECTION)
(replace NSFILING.HANDLE of FILESTREAM with HANDLE)
(replace NSFILING.ATTRIBUTES of FILESTREAM with ATTRS)
(replace DEVICE of FILESTREAM with \NSFILING.DEVICE)
(RETURN FILESTREAM])
(\NSFILING.CLOSEFILE
[LAMBDA (FILESTREAM) (* ecc "20-JUL-83 17:04")
(PROG ((CONNECTION (fetch NSFILING.CONNECTION of FILESTREAM))
(HANDLE (fetch NSFILING.HANDLE of FILESTREAM)))
(\BULK.DATA.CLOSE FILESTREAM)
(\NSFILING.INTERNAL.CLOSE CONNECTION HANDLE)
(replace NSFILING.HANDLE of FILESTREAM with NIL])
(\NSFILING.INTERNAL.CLOSE
[LAMBDA (CONNECTION HANDLE) (* ecc "20-JUL-83 17:01")
(* Close the file with the given handle.)
(COURIER.CALL (fetch FC.COURIER.STREAM of CONNECTION)
(QUOTE FILING)
(QUOTE CLOSE)
HANDLE
(fetch FC.SESSION of CONNECTION])
(\NSFILING.FULLNAME
[LAMBDA (CONNECTION FILENAME VERSION DIRECTORYFLG) (* ecc "18-JUL-83 15:31")
(SETQ FILENAME (PACKFILENAME (QUOTE HOST)
(fetch FC.FILESERVER of CONNECTION)
(QUOTE DIRECTORY)
(if DIRECTORYFLG
then (PACK* (\DIRECTORY.LIST.TO.PATHNAME (fetch FC.CURRENT.PATH
of CONNECTION))
FILENAME ">")
else (\DIRECTORY.LIST.TO.PATHNAME (fetch FC.CURRENT.PATH
of CONNECTION)))
(QUOTE NAME)
(if (NOT DIRECTORYFLG)
then FILENAME)))
(if VERSION
then (* For aesthetic reasons, you might want this only if
(AND VERSION (NOT DIRECTORYFLG)) but then DIR gets
confused.)
(PACKFILENAME (QUOTE BODY)
FILENAME
(QUOTE VERSION)
VERSION)
else FILENAME])
(\NSFILING.EVENTFN
[LAMBDA (DEVICE EVENT) (* ecc " 8-AUG-83 13:35")
(SELECTQ EVENT
((BEFORELOGOUT BEFOREMAKESYS BEFORESYSOUT)
(CLOSE.NSFILING.CONNECTIONS))
NIL])
(\NSFILING.DELETEFILE
[LAMBDA (FILENAME DEVICE) (* ecc " 1-AUG-83 14:38")
(PROG ((ATTRS (\NSFILING.GETFILE FILENAME (QUOTE NONE)
(QUOTE OLDEST)
T
(QUOTE HANDLE)))
CONNECTION HANDLE)
(RETURN (if ATTRS
then [SETQ CONNECTION (\GETFILINGCONNECTION (FILENAMEFIELD FILENAME
(QUOTE HOST]
(SETQ HANDLE (CADR (ASSOC (QUOTE HANDLE)
ATTRS)))
(COURIER.CALL (fetch FC.COURIER.STREAM of CONNECTION)
(QUOTE FILING)
(QUOTE DELETE)
HANDLE
(fetch FC.SESSION of CONNECTION))
(\NSFILING.FULLNAME CONNECTION (CADR (ASSOC (QUOTE NAME)
ATTRS))
(CADR (ASSOC (QUOTE VERSION)
ATTRS))
(CADR (ASSOC (QUOTE IS.DIRECTORY)
ATTRS)))
else NIL])
(\NSFILING.HOSTNAMEP
[LAMBDA (HOST DEVICE) (* ecc "11-JUL-83 13:25")
(if [NOT (AND (STRPOS ":" HOST)
(LOOKUP.NS.SERVER HOST (QUOTE FILESERVER]
then (* To avoid useless lookups of PUP names, require
Clearinghouse names to have a colon.)
NIL
elseif (NULL DEVICE)
then T
else \NSFILING.DEVICE])
(\NSFILING.DIRECTORYNAMEP
[LAMBDA (HOST/DIR) (* ecc "22-JUN-83 13:33")
(* Returns T or NIL according to whether or not HOST/DIR
is a valid host/directory specification.)
(\NSFILING.GETFILE HOST/DIR NIL NIL T (QUOTE DIRECTORY])
(\NSFILING.GETFILENAME
[LAMBDA (NAME RECOG DEVICE) (* ecc "22-JUN-83 15:02")
(* Returns full file name of file or NIL if not found.)
(\NSFILING.GETFILE NAME (QUOTE NONE)
RECOG T (QUOTE NAME])
(\NSFILING.GETFILEINFO
[LAMBDA (STREAM ATTRIBUTE) (* ecc "20-JUL-83 15:02")
(PROG [(ATTRS (if (type? STREAM STREAM)
then (fetch NSFILING.ATTRIBUTES of STREAM)
else (\NSFILING.GETFILE STREAM (QUOTE NONE)
(QUOTE OLD)
T
(QUOTE ATTRIBUTES]
(RETURN (SELECTQ ATTRIBUTE
(ALL ATTRS)
[WRITEDATE (GDATE (CADR (ASSOC (QUOTE MODIFIED.ON)
ATTRS]
[READDATE (GDATE (CADR (ASSOC (QUOTE READ.ON)
ATTRS]
[CREATIONDATE (GDATE (CADR (ASSOC (QUOTE CREATED.ON)
ATTRS]
(CADR (ASSOC (OR (CADR (ASSOC ATTRIBUTE LISP.TO.NS.FILE.ATTRIBUTES))
ATTRIBUTE)
ATTRS])
(\NSFILING.SETFILEINFO
[LAMBDA (STREAM ATTRIBUTE VALUE DEV) (* ecc " 8-AUG-83 14:20")
(PROG (FILENAME HANDLE X CONNECTION)
(if (SETQ X (ASSOC ATTRIBUTE LISP.TO.NS.FILE.ATTRIBUTES))
then (SETQ ATTRIBUTE (CADR X)))
(SELECTQ ATTRIBUTE
[WRITEDATE (SETQ ATTRIBUTE (QUOTE MODIFIED.ON))
(SETQ VALUE (OR (IDATE VALUE)
(LISPERROR "ILLEGAL ARG" VALUE]
[READDATE (SETQ ATTRIBUTE (QUOTE READ.ON))
(SETQ VALUE (OR (IDATE VALUE)
(LISPERROR "ILLEGAL ARG" VALUE]
[CREATIONDATE (SETQ ATTRIBUTE (QUOTE CREATED.ON))
(SETQ VALUE (OR (IDATE VALUE)
(LISPERROR "ILLEGAL ARG" VALUE]
(if (NULL (ASSOC ATTRIBUTE \FILING.ATTRIBUTES))
then (LISPERROR "ILLEGAL ARG" ATTRIBUTE)))
[if (type? STREAM STREAM)
then (SETQ FILENAME (fetch FULLFILENAME of STREAM))
[SETQ HANDLE (OR (fetch NSFILING.HANDLE of STREAM)
(CADR (ASSOC (QUOTE HANDLE)
(\NSFILING.GETFILE FILENAME (QUOTE NONE)
(QUOTE OLD)
T
(QUOTE HANDLE]
else (SETQ FILENAME STREAM)
(SETQ HANDLE (CADR (ASSOC (QUOTE HANDLE)
(\NSFILING.GETFILE FILENAME (QUOTE NONE)
(QUOTE OLD)
T
(QUOTE HANDLE]
[SETQ CONNECTION (\GETFILINGCONNECTION (FILENAMEFIELD FILENAME (QUOTE HOST]
(COURIER.CALL (fetch FC.COURIER.STREAM of CONNECTION)
(QUOTE FILING)
(QUOTE CHANGE.ATTRIBUTES)
HANDLE
(\WRITE.FILING.ATTRIBUTE.SEQUENCE (LIST (LIST ATTRIBUTE VALUE)))
(fetch FC.SESSION of CONNECTION))
(if (type? STREAM STREAM)
then (replace NSFILING.ATTRIBUTES of STREAM with NIL)
(* Set the attributes to NIL so that the next call to
GETFILEINFO will go back to the fileserver for them.)
else (\NSFILING.INTERNAL.CLOSE CONNECTION HANDLE])
(\NSFILING.GENERATEFILES
[LAMBDA (DEVICE PATTERN) (* ecc " 3-AUG-83 16:14")
(PROG ((HOST (FILENAMEFIELD PATTERN (QUOTE HOST)))
(NAME (ROOTFILENAME PATTERN))
(VERSION (FILENAMEFIELD PATTERN (QUOTE VERSION)))
CONNECTION FILELIST)
(SETQ CONNECTION (\GETFILINGCONNECTION HOST))
[SETQ FILELIST (if (NOT (\NSFILING.CONNECT CONNECTION PATTERN))
then NIL
elseif (STRPOS (QUOTE *)
NAME)
then (* Enumerate entire directory, matching against any wild
cards.)
(\NSFILING.LIST CONNECTION NAME)
elseif (OR (NULL VERSION)
(EQ VERSION (QUOTE *)))
then (* Only enumerate versions.)
(\NSFILING.LISTVERSIONS CONNECTION NAME)
else (* Full name was given; check existence.)
(PROG ((F (\NSFILING.GETFILENAME PATTERN)))
(RETURN (AND F (LIST F]
(RETURN (create FILEGENOBJ
NEXTFILEFN ←(FUNCTION \NSFILING.NEXTFILE)
GENFILESTATE ←(create \NSFILING.GENFILESTATE
PATTERN ← PATTERN
CONNECTION ← CONNECTION
FILELIST ← FILELIST])
(\NSFILING.NEXTFILE
[LAMBDA (GENFILESTATE SCRATCHLIST NOVERSION HOST/DIR) (* ecc " 4-AUG-83 13:19")
(PROG ((PATTERN (fetch PATTERN of GENFILESTATE))
(CONNECTION (fetch CONNECTION of GENFILESTATE))
(INFO (CAR (fetch FILELIST of GENFILESTATE)))
NAME)
(replace FILELIST of GENFILESTATE with (CDR (fetch FILELIST of GENFILESTATE)))
(if (NULL INFO)
then (RETURN NIL))
[SETQ NAME (\NSFILING.FULLNAME CONNECTION (CADR (ASSOC (QUOTE NAME)
INFO))
(AND (NOT NOVERSION)
(CADR (ASSOC (QUOTE VERSION)
INFO)))
(CADR (ASSOC (QUOTE IS.DIRECTORY)
INFO]
(RETURN (DCHCON (U-CASE (if (NOT HOST/DIR)
then (PACKFILENAME (QUOTE HOST)
NIL
(QUOTE DIRECTORY)
NIL
(QUOTE BODY)
NAME)
else NAME))
SCRATCHLIST])
(\NSFILING.GETEOFPTR
[LAMBDA (STREAM) (* ecc "25-JUL-83 13:47")
(\NSFILING.GETFILEINFO STREAM (QUOTE LENGTH])
)
(\NSFILING.INIT)
(* Printer subset of Filing Protocol.)
[COURIERPROGRAM FILING.SUBSET.FOR.PRINTING (16 2)
TYPES
((ATTRIBUTE.SEQUENCE (FILING . ATTRIBUTE.SEQUENCE))
(ATTRIBUTE.TYPE.SEQUENCE (FILING . ATTRIBUTE.TYPE.SEQUENCE))
(CONTROL.SEQUENCE (FILING . CONTROL.SEQUENCE))
(CREDENTIALS (AUTHENTICATION . CREDENTIALS))
(HANDLE (FILING . HANDLE))
(SIMPLE.VERIFIER (AUTHENTICATION . SIMPLE.VERIFIER))
(SCOPE.SEQUENCE (FILING . SCOPE.SEQUENCE))
(SESSION (FILING . SESSION))
(VERIFIER (AUTHENTICATION . VERIFIER))
(ARGUMENT.PROBLEM (FILING . ARGUMENT.PROBLEM))
(ACCESS.PROBLEM (FILING . ACCESS.PROBLEM))
(HANDLE.PROBLEM (FILING . HANDLE.PROBLEM))
(INSERTION.PROBLEM (FILING . INSERTION.PROBLEM))
(SERVICE.PROBLEM (FILING . SERVICE.PROBLEM))
(SESSION.PROBLEM (FILING . SESSION.PROBLEM))
(SPACE.PROBLEM (FILING . SPACE.PROBLEM)))
PROCEDURES
((LOGON ARGS (CREDENTIALS VERIFIER)
RESULTS
(SESSION)
ERRORS
(AUTHENTICATION.ERROR SERVICE.ERROR SESSION.ERROR UNDEFINED.ERROR)
(FILING . LOGON))
(LOGOFF ARGS (SESSION)
ERRORS
(AUTHENTICATION.ERROR SERVICE.ERROR SESSION.ERROR UNDEFINED.ERROR)
(FILING . LOGOFF))
(CONTINUE ARGS (SESSION)
RESULTS
(CARDINAL)
ERRORS
(AUTHENTICATION.ERROR SESSION.ERROR UNDEFINED.ERROR)
(FILING . CONTINUE))
(OPEN ARGS (ATTRIBUTE.SEQUENCE HANDLE CONTROL.SEQUENCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR AUTHENTICATION.ERROR
CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR HANDLE.ERROR
SESSION.ERROR UNDEFINED.ERROR)
(FILING . OPEN))
(CLOSE ARGS (HANDLE SESSION)
ERRORS
(AUTHENTICATION.ERROR HANDLE.ERROR SESSION.ERROR UNDEFINED.ERROR)
(FILING . CLOSE))
(DELETE ARGS (HANDLE SESSION)
ERRORS
(ACCESS.ERROR AUTHENTICATION.ERROR HANDLE.ERROR SESSION.ERROR
UNDEFINED.ERROR)
(FILING . DELETE))
(STORE ARGS (HANDLE ATTRIBUTE.SEQUENCE CONTROL.SEQUENCE BULK.DATA.SOURCE SESSION)
RESULTS
(HANDLE)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR AUTHENTICATION.ERROR
CONNECTION.ERROR CONTROL.TYPE.ERROR CONTROL.VALUE.ERROR
HANDLE.ERROR INSERTION.ERROR SESSION.ERROR SPACE.ERROR
TRANSFER.ERROR UNDEFINED.ERROR)
(FILING . STORE))
(LIST ARGS (HANDLE ATTRIBUTE.TYPE.SEQUENCE SCOPE.SEQUENCE BULK.DATA.SINK SESSION)
ERRORS
(ACCESS.ERROR ATTRIBUTE.TYPE.ERROR ATTRIBUTE.VALUE.ERROR AUTHENTICATION.ERROR
CONNECTION.ERROR HANDLE.ERROR SCOPE.TYPE.ERROR SCOPE.VALUE.ERROR
SESSION.ERROR TRANSFER.ERROR UNDEFINED.ERROR)
(FILING . LIST)))
ERRORS
((ATTRIBUTE.TYPE.ERROR ARGS (ARGUMENT.PROBLEM ATTRIBUTE.TYPE)
(FILING . ATTRIBUTE.TYPE.ERROR))
(ATTRIBUTE.VALUE.ERROR ARGS (ARGUMENT.PROBLEM ATTRIBUTE.TYPE)
(FILING . ATTRIBUTE.VALUE.ERROR))
(CONTROL.TYPE.ERROR ARGS (ARGUMENT.PROBLEM CONTROL.TYPE)
(FILING . CONTROL.TYPE.ERROR))
(CONTROL.VALUE.ERROR ARGS (ARGUMENT.PROBLEM CONTROL.TYPE)
(FILING . CONTROL.VALUE.ERROR))
(SCOPE.TYPE.ERROR ARGS (ARGUMENT.PROBLEM SCOPE.TYPE)
(FILING . SCOPE.TYPE.ERROR))
(SCOPE.VALUE.ERROR ARGS (ARGUMENT.PROBLEM SCOPE.TYPE)
(FILING . SCOPE.VALUE.ERROR))
(ACCESS.ERROR ARGS (ACCESS.PROBLEM)
(FILING . ACCESS.ERROR))
(AUTHENTICATION.ERROR ARGS ((AUTHENTICATION . PROBLEM))
(FILING . AUTHENTICATION.ERROR))
(CONNECTION.ERROR ARGS (CONNECTION.PROBLEM)
(FILING . CONNECTION.ERROR))
(HANDLE.ERROR ARGS (HANDLE.PROBLEM)
(FILING . HANDLE.ERROR))
(INSERTION.ERROR ARGS (INSERTION.PROBLEM)
(FILING . INSERTION.ERROR))
(SERVICE.ERROR ARGS (SERVICE.PROBLEM)
(FILING . SERVICE.ERROR))
(SESSION.ERROR ARGS (SESSION.PROBLEM)
(FILING . SESSION.ERROR))
(SPACE.ERROR ARGS (SPACE.PROBLEM)
(FILING . SPACE.ERROR))
(TRANSFER.ERROR ARGS (TRANSFER.PROBLEM)
(FILING . TRANSFER.ERROR))
(UNDEFINED.ERROR ARGS (CARDINAL)
(FILING . UNDEFINED.ERROR]
(* Lisp support.)
(DEFINEQ
(LIST.NSPRINTER.FILES
[LAMBDA (PRINTSERVER) (* ecc " 8-AUG-83 14:23")
(PROG (STREAM SESSION LISTINGSTREAM SEQUENCE.OF.ATTRIBUTE.SEQUENCES)
(SETQ STREAM (COURIER.OPEN PRINTSERVER (QUOTE PRINTSERVER)
NIL
(PACK* PRINTSERVER "#FILING")))
(RETURN (RESETLST (RESETSAVE NIL (LIST [QUOTE (LAMBDA (X)
(if RESETSTATE
then (SPP.CLOSE X T]
STREAM))
(bind CREDENTIALS MSG until SESSION
do (SETQ CREDENTIALS (NSLOGIN PRINTSERVER MSG))
(SETQ SESSION (COURIER.CALL
STREAM
(QUOTE FILING.SUBSET.FOR.PRINTING)
(QUOTE LOGON)
[BQUOTE ((TYPE 0)
(VALUE , (COURIER.WRITE.REP (PARSE.CH.NAME
(CAR CREDENTIALS))
(QUOTE AUTHENTICATION)
(QUOTE SIMPLE.CREDENTIALS]
(COURIER.WRITE.REP (HASH.PASSWORD (CDR CREDENTIALS))
(QUOTE FILING.SUBSET.FOR.PRINTING)
(QUOTE SIMPLE.VERIFIER))
T))
(SETQ MSG "Login incorrect."))
(RESETSAVE NIL (LIST (QUOTE [LAMBDA (X Y)
(COURIER.CALL X (QUOTE
FILING.SUBSET.FOR.PRINTING)
(QUOTE LOGOFF)
Y T])
STREAM SESSION))
(SETQ LISTINGSTREAM (COURIER.CALL STREAM (QUOTE
FILING.SUBSET.FOR.PRINTING)
(QUOTE LIST)
\FILING.NULL.HANDLE
(\FILING.ATTRIBUTE.TYPE.SEQUENCE
(QUOTE (NAME)))
NIL NIL SESSION))
(SETQ SEQUENCE.OF.ATTRIBUTE.SEQUENCES (COURIER.READ.BULKDATA
LISTINGSTREAM
(QUOTE FILING.SUBSET.FOR.PRINTING)
(QUOTE ATTRIBUTE.SEQUENCE)))
(CLOSEF LISTINGSTREAM)
(for SEQ in SEQUENCE.OF.ATTRIBUTE.SEQUENCES
collect (CADR (ASSOC (QUOTE NAME)
(\READ.FILING.ATTRIBUTE.SEQUENCE SEQ])
)
(PUTPROPS NSFILING COPYRIGHT ("Xerox Corporation" 1983))
(DECLARE: DONTCOPY
(FILEMAP (NIL (33787 75571 (\NSFILING.LOGIN 33797 . 35872) (\NSFILING.LOGOUT 35874 . 36941) (
\NSFILING.LOGOUT.INTERNAL 36943 . 37545) (\NSFILING.CONNECT 37547 . 41203) (
\PATHNAME.TO.DIRECTORY.LIST 41205 . 41637) (\PATHNAME.TO.DIRECTORY.LIST.INTERNAL 41639 . 42047) (
\DIRECTORY.LIST.TO.PATHNAME 42049 . 42290) (\NSFILING.CREATE.DIRECTORY 42292 . 42910) (\NSFILING.LIST
42912 . 44220) (\NSFILING.LISTVERSIONS 44222 . 45458) (\FILING.ATTRIBUTE.TYPE.SEQUENCE 45460 . 45674)
(\FILING.ATTRIBUTE.TYPE 45676 . 45970) (\READ.FILING.ATTRIBUTE.SEQUENCE 45972 . 46409) (
\READ.FILING.ATTRIBUTE 46411 . 47088) (\WRITE.FILING.ATTRIBUTE.SEQUENCE 47090 . 47530) (
\WRITE.FILING.ATTRIBUTE 47532 . 48120) (NSDIRECTORY 48122 . 48800) (NSCREATEDIRECTORY 48802 . 49578) (
\NSFILING.INIT 49580 . 50571) (\GETFILINGCONNECTION 50573 . 51667) (\VALID.FILING.CONNECTIONP 51669 .
53542) (\LOGGED.ONTO.NSFILESERVERP 53544 . 54032) (CLOSE.NSFILING.CONNECTIONS 54034 . 54511) (
\NSFILING.OPENFILE 54513 . 54684) (\NSFILING.GETFILE 54686 . 60687) (\NSFILING.ORIGINAL.GETFILE 60689
. 66400) (\NSFILING.CLOSEFILE 66402 . 66822) (\NSFILING.INTERNAL.CLOSE 66824 . 67211) (
\NSFILING.FULLNAME 67213 . 68137) (\NSFILING.EVENTFN 68139 . 68374) (\NSFILING.DELETEFILE 68376 .
69254) (\NSFILING.HOSTNAMEP 69256 . 69711) (\NSFILING.DIRECTORYNAMEP 69713 . 70078) (
\NSFILING.GETFILENAME 70080 . 70394) (\NSFILING.GETFILEINFO 70396 . 71127) (\NSFILING.SETFILEINFO
71129 . 73182) (\NSFILING.GENERATEFILES 73184 . 74452) (\NSFILING.NEXTFILE 74454 . 75398) (
\NSFILING.GETEOFPTR 75400 . 75569)) (79692 81587 (LIST.NSPRINTER.FILES 79702 . 81585)))))
STOP