(FILECREATED " 6-Sep-85 10:23:52" {DSK}<LISPFILES>FDEVTEST.;2    

      changes to:  (VARS FDEVTESTCOMS))


(* Lots more has to be done here but I have the basic data structures here needed to create the test code)

(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT FDEVTESTCOMS)

(RPAQQ FDEVTESTCOMS [(RECORDS FDEV)
		     (MACROS .APPLY. FDEVOP)
		     (P (MOVD (QUOTE APPLY*)
			      (QUOTE SPREADAPPLY*])
[DECLARE: EVAL@COMPILE 

(DATATYPE FDEV ((DEVICENAME POINTER)
		(RESETABLE FLAG)
		(RANDOMACCESSP FLAG)
		(NODIRECTORIES FLAG)
		(PAGEMAPPED FLAG)                     (* True if i/o handled by pmap routines)
		(FDBINABLE FLAG)                      (* Copied as a microcode flag for INPUT streams formed on this
						      device)
		(FDBOUTABLE FLAG)
		(FDEXTENDABLE FLAG)
		(BUFFERED FLAG)                       (* True implies that the device supports the BIN & BOUT uCode 
						      conventions, and implements the GETNEXTBUFFER method)
                                                      (* Device operations:)
		(REMOTEP FLAG)                        (* true if device not local to machine)
		(SUBDIRECTORIES FLAG)                 (* true if device has real subdirectories)
		(NIL 6 FLAG)
		(CLOSEFILE POINTER)                   (* (stream) => closes stream, returns it)
		(DELETEFILE POINTER)                  (* (name) => deletes file so named, returning name, or NIL on 
						      failure. RECOG=OLDEST)
		(DIRECTORYNAMEP POINTER)              (* (host/dir) => true if directory exists on host)
		(EVENTFN POINTER)                     (* (device event), called before/after logout, sysout, 
						      makesys)
		(GENERATEFILES POINTER)

          (* (device pattern) => generator object for files matching pattern. Car of object is generator function, cdr is 
	  arbitrary state. Generator fn returns next file, or NIL when finished)


		(GETFILEINFO POINTER)                 (* (stream/name attribute device) => value of attribute for 
						      open stream or name of closed file)
		(GETFILENAME POINTER)                 (* (name recog device) => full file name)
		(HOSTNAMEP POINTER)

          (* (hostname {device}) => T if hostname is valid. If device is given, return a FDEV for this {new} host, or T to use
	  existing device)


		(OPENFILE POINTER)                    (* (name access recog otherinfo device) => new stream open on 
						      this device, or NIL if name not found)
		(READPAGES POINTER)

          (* (stream firstpage# buflist) => # of bytes read, starting at firstpage#, reading into buflist, a list of buffers 
	  or a single buffer (the usual case))


		(REOPENFILE POINTER)

          (* (name access recog otherinfo device stream) like openfile, but called after logout to revalidate file, so 
	  optionally uses info in old stream to keep this opening like the previous)


		(SETFILEINFO POINTER)                 (* (stream/name attribute newvalue device) sets attribute of 
						      open stream or closed file of given name)
		(TRUNCATEFILE POINTER)                (* (stream page offset) make stream's eof be at page,offset, 
						      discarding anything after it)
		(WRITEPAGES POINTER)                  (* (stream firstpage# buflist) writes from buflist to stream 
						      starting at firstpage# of stream)
		(BIN POINTER)                         (* (stream) => next byte of input)
		(BOUT POINTER)                        (* (stream byte) output byte to stream)
		(PEEKBIN POINTER)                     (* (stream) => next byte without advancing position in stream)
		(READP POINTER)                       (* (stream flag) => T if there is input available from stream)
		(BACKFILEPTR POINTER)                 (* (stream) backs up "fileptr" by one.
						      Stream is only required to be able to do this once, i.e. 
						      one-character buffer suffices)
		(DEVICEINFO POINTER)                  (* arbitrary device-specific info stored here)
		(FORCEOUTPUT POINTER)                 (* (stream waitForFinish) flushes out to device anything that 
						      is buffered awaiting transmission)
		(LASTC POINTER)                       (* Should be possible only if RANDOMACCESSP)
		(SETFILEPTR POINTER)
		(GETFILEPTR POINTER)
		(GETEOFPTR POINTER)
		(EOFP POINTER)
		(BLOCKIN POINTER)                     (* (stream buffer byteoffset nbytes))
		(BLOCKOUT POINTER)                    (* (stream buffer byteoffset nbytes))
		(RENAMEFILE POINTER)                  (* oldfile newfile device)
		(RELEASEBUFFER POINTER)               (* (stream) => Does whatever appropriate when CBUFPTR is 
						      released)
		(GETNEXTBUFFER POINTER)

          (* (stream whatfor noerrorflg) => Disposes of current buffer and optionally reads next. whatfor is READ or WRITE.
	  Can cause EOF error unless noerrorflg)


		(SETEOFPTR POINTER)                   (* (stream length) => truncates or lengthens stream to 
						      indicated length)
		(FREEPAGECOUNT POINTER)               (* (host/dir dev) => # of free pages on host/dir)
		(MAKEDIRECTORY POINTER)               (* (host/dir dev))
		(WINDOWOPS POINTER)                   (* window system operations -
						      type WSOPS)
		(WINDOWDATA POINTER)                  (* data for window systems)
		(CHECKFILENAME POINTER)               (* (name dev) => name if it is well-formed file name for dev)
		(HOSTALIVEP POINTER)                  (* (host dev) => true if host is alive, i.e., responsive;
						      only defined if REMOTEP is true)
		(OPENP POINTER)                       (* (name access dev) => stream if name is open for access, or 
						      all open streams if name = NIL)
		(OPENFILELST POINTER)                 (* Default place to keep list of streams open on this device)
		(NIL POINTER)                         (* Spare)
		)
	       DIRECTORYNAMEP _(FUNCTION NILL)
	       HOSTNAMEP _(FUNCTION NILL)
	       READP _(FUNCTION \GENERIC.READP)
	       SETFILEPTR _(FUNCTION \IS.NOT.RANDACCESSP)
	       GETFILEPTR _(FUNCTION \ILLEGAL.DEVICEOP)
	       GETEOFPTR _(FUNCTION \IS.NOT.RANDACCESSP)
	       EOFP _(FUNCTION \ILLEGAL.DEVICEOP)
	       BLOCKIN _(FUNCTION \GENERIC.BINS)
	       BLOCKOUT _(FUNCTION \GENERIC.BOUTS)
	       RENAMEFILE _(FUNCTION \GENERIC.RENAMEFILE)
	       FORCEOUTPUT _(FUNCTION NILL))
]
(/DECLAREDATATYPE (QUOTE FDEV)
		  (QUOTE (POINTER FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG 
				  FLAG FLAG FLAG FLAG FLAG POINTER POINTER POINTER 
				  POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
				  POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
				  POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
				  POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
				  POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
				  POINTER POINTER POINTER))
		  (QUOTE ((FDEV 0 POINTER)
			  (FDEV 0 (FLAGBITS . 0))
			  (FDEV 0 (FLAGBITS . 16))
			  (FDEV 0 (FLAGBITS . 32))
			  (FDEV 0 (FLAGBITS . 48))
			  (FDEV 0 (FLAGBITS . 64))
			  (FDEV 0 (FLAGBITS . 80))
			  (FDEV 0 (FLAGBITS . 96))
			  (FDEV 0 (FLAGBITS . 112))
			  (FDEV 2 (FLAGBITS . 0))
			  (FDEV 2 (FLAGBITS . 16))
			  (FDEV 2 (FLAGBITS . 32))
			  (FDEV 2 (FLAGBITS . 48))
			  (FDEV 2 (FLAGBITS . 64))
			  (FDEV 2 (FLAGBITS . 80))
			  (FDEV 2 (FLAGBITS . 96))
			  (FDEV 2 (FLAGBITS . 112))
			  (FDEV 2 POINTER)
			  (FDEV 4 POINTER)
			  (FDEV 6 POINTER)
			  (FDEV 8 POINTER)
			  (FDEV 10 POINTER)
			  (FDEV 12 POINTER)
			  (FDEV 14 POINTER)
			  (FDEV 16 POINTER)
			  (FDEV 18 POINTER)
			  (FDEV 20 POINTER)
			  (FDEV 22 POINTER)
			  (FDEV 24 POINTER)
			  (FDEV 26 POINTER)
			  (FDEV 28 POINTER)
			  (FDEV 30 POINTER)
			  (FDEV 32 POINTER)
			  (FDEV 34 POINTER)
			  (FDEV 36 POINTER)
			  (FDEV 38 POINTER)
			  (FDEV 40 POINTER)
			  (FDEV 42 POINTER)
			  (FDEV 44 POINTER)
			  (FDEV 46 POINTER)
			  (FDEV 48 POINTER)
			  (FDEV 50 POINTER)
			  (FDEV 52 POINTER)
			  (FDEV 54 POINTER)
			  (FDEV 56 POINTER)
			  (FDEV 58 POINTER)
			  (FDEV 60 POINTER)
			  (FDEV 62 POINTER)
			  (FDEV 64 POINTER)
			  (FDEV 66 POINTER)
			  (FDEV 68 POINTER)
			  (FDEV 70 POINTER)
			  (FDEV 72 POINTER)
			  (FDEV 74 POINTER)
			  (FDEV 76 POINTER)
			  (FDEV 78 POINTER)
			  (FDEV 80 POINTER)
			  (FDEV 82 POINTER)))
		  (QUOTE 84))
(DECLARE: EVAL@COMPILE 
[PUTPROPS .APPLY. MACRO ((U V)
	   (* body for APPLY, used by RETAPPLY too)
	   (PROG ((DEF U))
		 LP
		 [COND ((LITATOM DEF)
			(COND ((NOT (fetch (LITATOM CCODEP)
					   of DEF))
			       (* EXPR)
			       (SETQ DEF (fetch (LITATOM DEFPOINTER)
						of DEF)))
			      ((EQ (fetch (LITATOM ARGTYPE)
					  of DEF)
				   3)
			       (GO NLSTAR))
			      (T (GO NORMAL]
		 [COND ((LISTP DEF)
			(SELECTQ (CAR DEF)
				 [NLAMBDA (AND (NLISTP (CADR DEF))
					       (CADR DEF)
					       (GO NLSTAR]
				 (FUNARG (SETQ DEF (CADR DEF))
					 (GO LP))
				 NIL))
		       ((NULL DEF)
			(RETURN (FAULTAPPLY U V]
		 NORMAL
		 (RETURN (SPREADAPPLY U V))
		 NLSTAR
		 (* NLAMBDA*)
		 (RETURN (SPREADAPPLY* U V]
[PUTPROPS FDEVOP MACRO (ARGS (CONS (QUOTE SPREADAPPLY*)
				   (CONS (COND ((EQ (CAR (LISTP (CAR ARGS)))
						    (QUOTE QUOTE))
						(LIST (QUOTE fetch)
						      (CADAR ARGS)
						      (QUOTE of)
						      (CADR ARGS)))
					       (T (HELP "FDEVOP - OPNAME not quoted:" 
							ARGS)))
					 (CDDR ARGS]
)
(MOVD (QUOTE APPLY*)
      (QUOTE SPREADAPPLY*))
(PUTPROPS FDEVTEST COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL)))
STOP
