(FILECREATED "30-Oct-85 19:00:30" {ERIS}<LISPCORE>SOURCES>TRSERVER.;7 22684  

      changes to:  (FNS \TELERAIDENTRY \TELERAIDEXIT)

      previous date: "16-Aug-85 08:22:50" {ERIS}<LISPCORE>SOURCES>TRSERVER.;6)


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

(PRETTYCOMPRINT TRSERVERCOMS)

(RPAQQ TRSERVERCOMS ((FNS \DOTELERAID \TELERAIDINIT \TELERAIDSERVER \TELEBLTCURSOR \TELERAIDCOMMAND 
			    \TELERAIDBREAK \TELERAIDGET \TELERAIDSEND \TELERAIDRELEASE \TELERAIDENTRY 
			    \TELERAIDEXIT \3MBRAWRECEIVE \3MBRAWTRANSMIT \10MBRAWRECEIVE 
			    \10MBRAWTRANSMIT \10MBRAWENCAPSULATE \10MBSETUPRECEIVER)
	(INITVARS (\TELERAIDBUFFER)
		  (\TELERAIDBLOCK))
	(BITMAPS \TELERAIDBITMAPS)
	(DECLARE: EVAL@COMPILE DONTCOPY (GLOBALVARS \TELERAIDPACKET \TELERAIDBUFFER \TELERAIDIOCB 
						    \TELERAIDBLOCK \TELERAIDBITMAPS)
		  (RECORDS TRBLOCK)
		  (MACROS \TELEKBDWAIT)
		  (CONSTANTS \#WORDS.CURSOR)
		  (FILES (LOADCOMP)
			 LLETHER 10MBDRIVER REMOTEVMEM LLFAULT))
	(DECLARE: DONTEVAL@LOAD DOCOPY (P (\TELERAIDINIT)))))
(DEFINEQ

(\DOTELERAID
  [LAMBDA NIL                                                (* bvm: "15-MAR-83 17:10")
    (PROG NIL
      LP  (\TELERAIDSERVER)
          (\CONTEXTSWITCH \TeleRaidFXP)
          (GO LP])

(\TELERAIDINIT
  [LAMBDA NIL                                                (* bvm: "16-Aug-85 01:06")
    (for FN
       in (QUOTE (\TELERAIDSERVER \TELERAIDCOMMAND \DOTELERAID \TELERAIDGET \TELERAIDSEND 
				  \TELERAIDSETUP \TELERAIDENTRY \TELERAIDEXIT \TELEBLTCURSOR 
				  \3MBRAWTRANSMIT \3MBRAWRECEIVE \WRITERAWPBI \READRAWPBI 
				  \GETPACKETBUFFER \10MBRAWRECEIVE \10MBRAWTRANSMIT \TELERAIDRELEASE 
				  \10MBRAWENCAPSULATE \10MBSETUPRECEIVER FLIPCURSOR \KEYBOARDON 
				  \KEYBOARDOFF \10MB.TURNONETHER \QUEUE.OUTPUT.IOCB \QUEUE.INPUT.IOCB 
				  \10MB.GETPACKETSTATUS \10MB.GETPACKETLENGTH SETMAINTPANEL 
				  \TELERAIDBREAK \FREESTACKBLOCK \DOHELPINTERRUPT1 \MAKEFRAME 
				  \DoveEther.ByteSwapIOCB \DoveEther.DeQueue \DoveEther.EnQueue 
				  \DoveEther.GetPacketStatus \DoveEther.MakeSureOff 
				  \DoveEther.QueueInput \DoveEther.QueueOutput \DoveEther.TurnOn))
       do (\LOCKFN FN))
    (for VAR in (QUOTE (\TELERAIDPACKET \TELERAIDBUFFER \TELERAIDIOCB \TELERAIDBLOCK \LOCALNDBS 
					\PUP.READY \DEFSPACE))
       do (\LOCKVAR VAR))
    (COND
      ((NOT (TYPENAMEP \TELERAIDPACKET (QUOTE ETHERPACKET)))
	(SETQ \TELERAIDPACKET (\ALLOCATE.ETHERPACKET))
	(\LOCKPAGES \TELERAIDPACKET 2)))
    (\LOCKWORDS (SETQ \TELERAIDBLOCK (fetch BITMAPBASE of \TELERAIDBITMAPS))
		(fetch BITMAPHEIGHT of \TELERAIDBITMAPS])

(\TELERAIDSERVER
  (LAMBDA (METADEBUGGING)                                    (* ejs: "16-Aug-85 06:46")
    (DECLARE (GLOBALVARS \RCLKSECOND))
    (PROG ((NDB \LOCALNDBS)
	   (PACKET \TELERAIDPACKET)
	   RECEIVER PTR VP FILEPAGE BODY)
          (SETQ RECEIVER (\TELERAIDENTRY NDB METADEBUGGING))
      LP  (COND
	    ((AND RECEIVER (\TELERAIDGET NDB PACKET RECEIVER))
	      (SELECTC (fetch PUPTYPE of PACKET)
		       (TR.GIVEPAGE (COND
				      ((NOT (EVENP (fetch PUPIDLO of PACKET)
						   WORDSPERPAGE))
					(GO ERROR)))
				    (SETQ VP (create WORD
						     HIBYTE ←(fetch LOBYTE
								of (fetch PUPIDHI of PACKET))
						     LOBYTE ←(fetch HIBYTE
								of (fetch PUPIDLO of PACKET))))
				    (COND
				      ((fetch (VP INVALID) of VP)
					(GO ERROR)))
				    (SETQ PTR (\GETBASEPTR (LOCF (fetch PUPIDHI of PACKET))
							   0))
				    (COND
				      ((NOT (fetch (VMEMFLAGS VACANT) of (\READFLAGS VP)))
                                                             (* page is resident, we can just blt it)
					(\BLT (fetch PUPCONTENTS of PACKET)
					      PTR WORDSPERPAGE))
				      ((AND (SETQ FILEPAGE (\LOOKUPPAGEMAP VP))
					    (NEQ FILEPAGE 0))
                                                             (* Page exists, so swap it into private buffer)
					(\ACTONVMEMFILE FILEPAGE \TELERAIDBUFFER 1)
					(\BLT (fetch PUPCONTENTS of PACKET)
					      \TELERAIDBUFFER WORDSPERPAGE))
				      (T (GO ERROR)))
				    (replace PUPLENGTH of PACKET with (IPLUS BYTESPERPAGE \PUPOVLEN))
				    (replace PUPTYPE of PACKET with TR.HEREISPAGE)
				    (\TELERAIDSEND NDB PACKET))
		       (TR.STORE (SETQ BODY (fetch PUPCONTENTS of PACKET))
				 (COND
				   ((NEQ (\GETBASEBYTE BODY 0)
					 0)
				     (GO ERROR)))
				 (SETQ VP (create WORD
						  HIBYTE ←(\GETBASEBYTE BODY 1)
						  LOBYTE ←(\GETBASEBYTE BODY 2)))
				 (COND
				   ((fetch (VP INVALID) of VP)
				     (GO ERROR)))
				 (SETQ PTR (\GETBASEPTR BODY 0))
				 (COND
				   ((NOT (fetch (VMEMFLAGS VACANT) of (\READFLAGS VP)))
                                                             (* page is resident, we can just store directly)
				     (\PUTBASE PTR 0 (\GETBASE BODY 2)))
				   ((AND (SETQ FILEPAGE (\LOOKUPPAGEMAP VP))
					 (NEQ FILEPAGE 0))   (* Page exists, so swap it into private buffer)
				     (\ACTONVMEMFILE FILEPAGE \TELERAIDBUFFER 1)
				     (\PUTBASE \TELERAIDBUFFER (fetch (POINTER WORDINPAGE)
								  of PTR)
					       (\GETBASE BODY 2))
				     (\ACTONVMEMFILE FILEPAGE \TELERAIDBUFFER 1 T))
				   (T (GO ERROR)))
				 (replace PUPLENGTH of PACKET with \PUPOVLEN)
				 (replace PUPTYPE of PACKET with TR.STOREDONE)
				 (\TELERAIDSEND NDB PACKET))
		       (TR.GO (COND
				((PROG ((IDHI (fetch PUPIDHI of PACKET))
					(IDLO (fetch PUPIDLO of PACKET)))
				       (replace PUPTYPE of PACKET with TR.GOACK)
				       (\TELERAIDSEND NDB PACKET)
				       (RETURN (to 20000 when (\TELERAIDGET NDB PACKET RECEIVER)
						  do (COND
						       ((AND (EQ (fetch PUPTYPE of PACKET)
								 TR.GOREPLY)
							     (COND
							       ((EQ IDLO MAX.SMALL.INTEGER)
                                                             (* Sigh, opencoded 32-bit arithmetic)
								 (AND (EQ (fetch PUPIDLO
									     of PACKET)
									  0)
								      (EQ (fetch PUPIDHI
									     of PACKET)
									  (ADD1 IDHI))))
							       (T (AND (EQ (fetch PUPIDLO
									      of PACKET)
									   (ADD1 IDLO))
								       (EQ (fetch PUPIDHI
									      of PACKET)
									   IDHI)))))
							 (RETURN T))
						       (T (\TELERAIDRELEASE NDB PACKET))))))
				  (\TELERAIDEXIT NDB)
				  (RETURN))))
		       (\TELERAIDRELEASE NDB PACKET))))
          (COND
	    ((OR (XKEYDOWNP (QUOTE BLANK-BOTTOM))
		 (XKEYDOWNP (QUOTE CTRL)))                   (* Command key)
	      (\TELEBLTCURSOR (fetch TRCOMMAND of \TELERAIDBLOCK))
	      (SELECTQ (\TELERAIDCOMMAND NDB)
		       (RESET (\TELERAIDEXIT NDB T)
			      (COND
				(METADEBUGGING (HARDRESET))
				(T (\CONTEXTSWITCH \ResetFXP))))
		       (RETURN (\TELERAIDEXIT NDB)
			       (RETURN))
		       NIL))
	    (T (\TELEBLTCURSOR (fetch TRCURSOR of \TELERAIDBLOCK))))
          (\UPDATETIMERS)                                    (* Keep the clock running)
          (GO LP)
      ERROR
          (replace PUPLENGTH of PACKET with \PUPOVLEN)
          (replace PUPTYPE of PACKET with TR.ERROR)
          (\TELERAIDSEND NDB PACKET)
          (GO LP))))

(\TELEBLTCURSOR
  [LAMBDA (CURSOR)                                           (* bvm: "14-Aug-85 16:26")
    (\BLT \EM.CURSORBITMAP CURSOR \#WORDS.CURSOR)
    (COND
      ((EQ \MACHINETYPE \DAYBREAK)
	(\DoveDisplay.SetCursorShape])

(\TELERAIDCOMMAND
  (LAMBDA (NDB)                                              (* lmm "18-Apr-85 02:22")
    (COND
      ((XKEYDOWNP (QUOTE D))                                 (* D -
							     hard reset)
	(\TELEBLTCURSOR (fetch TRCONTROLD of \TELERAIDBLOCK))
	(COND
	  ((\TELEKBDWAIT (QUOTE D))
	    (QUOTE RESET))))
      ((XKEYDOWNP (QUOTE N))                                 (* ↑N returns)
	(\TELEBLTCURSOR (fetch TRCONTROLN of \TELERAIDBLOCK))
	(COND
	  ((\TELEKBDWAIT (QUOTE N))
	    (QUOTE RETURN))))
      ((XKEYDOWNP (QUOTE B))                                 (* Break offender if possible)
	(\TELERAIDBREAK))
      ((XKEYDOWNP (QUOTE P))                                 (* Display pup number in maintenance panel)
	(SETMAINTPANEL (fetch NDBPUPHOST# of NDB))
	(\TELEKBDWAIT (QUOTE P)))
      ((AND (NEQ \MACHINETYPE \DANDELION)
	    (XKEYDOWNP (QUOTE R)))                           (* Get RAID)
	(\TELEBLTCURSOR (fetch TRRAID of \TELERAIDBLOCK))
	(COND
	  ((\TELEKBDWAIT (QUOTE R))
	    (RAID)
	    (\TELEBLTCURSOR (fetch TRCURSOR of \TELERAIDBLOCK))))))))

(\TELERAIDBREAK
  (LAMBDA NIL                                                (* bvm: " 6-AUG-83 22:44")
    (PROG ((FRAME (fetch (IFPAGE TELERAIDFXP) of \InterfacePage))
	   NEWFRAME USERFRAME FREE NXT NXTEND)               (* Build a frame to invoke \DOHELPINTERRUPT1 on top of 
							     user process. This code adapted from \PROCESS.MAKEFRAME
							     and \PROCESS.MAKEFRAME0)
          (\TELEBLTCURSOR (fetch TRBREAK of \TELERAIDBLOCK))
          (COND
	    ((ILESSP FRAME (fetch (IFPAGE StackBase) of \InterfacePage))
                                                             (* Running in a system context)
	      (COND
		((AND (IGREATERP (SETQ USERFRAME (fetch (IFPAGE FAULTFXP) of \InterfacePage))
				 (fetch (IFPAGE StackBase) of \InterfacePage))
		      (SELECTQ (fetch (FX FRAMENAME) of FRAME)
			       (\MP.ERROR T)
			       (RAID (EQ (fetch (FX FRAMENAME) of (SETQ FRAME (fetch (FX CLINK)
										 of FRAME)))
					 (QUOTE \MP.ERROR)))
			       NIL)
		      (SELECTC (\GETBASEPTR (STACKADDBASE (fetch (BF IVAR)
							     of (fetch (FX BLINK) of FRAME)))
					    0)
			       ((LIST \MP.INVALIDADDR \MP.INVALIDVP \MP.MOB \MP.RESIDENT)
                                                             (* MP codes in fault handler that are "safe")
				 T)
			       NIL))                         (* Special case: allow breaks in user process in these 
							     cases, because fault handler will just switch right 
							     back to user context)
		  (SETQ FRAME USERFRAME)
		  (FLIPCURSOR))
		(T                                           (* Refuse to do it--chances of surviving a full-fledged
							     break are slim)
		   (\TELEBLTCURSOR (fetch TRNOBREAK of \TELERAIDBLOCK))
		   (\TELEKBDWAIT (QUOTE B))
		   (RETURN)))))
          (COND
	    ((NOT (\TELEKBDWAIT (QUOTE B)))
	      (RETURN)))
          (SETQ NXT (fetch (FX NEXTBLOCK) of FRAME))
          (SETQ NXTEND (IPLUS NXT (fetch (FSB SIZE) of NXT)))
          (while (type? FSB NXTEND) do (SETQ NXTEND (IPLUS NXTEND (fetch (FSB SIZE) of NXTEND))))
          (RETURN (COND
		    ((SETQ NEWFRAME
			(OR (\MAKEFRAME (FUNCTION \DOHELPINTERRUPT1)
					NXT NXTEND FRAME FRAME)
			    (\MAKEFRAME (FUNCTION \DOHELPINTERRUPT1)
					(SETQ FREE
					  (\FREESTACKBLOCK
					    (IPLUS (PROG1 (fetch (FNHEADER STKMIN)
							     of (fetch (LITATOM DEFPOINTER)
								   of (FUNCTION \DOHELPINTERRUPT1)))
                                                             (* Stack needed to call this fn)
							  )
						   (PROG1 (UNFOLD 20 WORDSPERCELL)
                                                             (* Extra slop)
							  ))
					    FRAME))
					(IPLUS FREE (fetch (FSB SIZE) of FREE))
					FRAME FRAME)))
		      (COND
			(USERFRAME (replace (IFPAGE FAULTFXP) of \InterfacePage with NEWFRAME))
			(T (replace (IFPAGE TELERAIDFXP) of \InterfacePage with NEWFRAME)))
		      (QUOTE RETURN)))))))

(\TELERAIDGET
  (LAMBDA (NDB PACKET RECEIVER)                              (* ejs: "16-Aug-85 07:10")
    (DECLARE (GLOBALVARS CHECKPOINT))
    (COND
      ((APPLY* RECEIVER NDB PACKET T)
	(SELECTC (fetch EPTYPE of PACKET)
		 (\EPT.PUP (FLIPCURSOR)
			   (COND
			     ((AND (EQ (fetch PUPDESTSOCKETLO of PACKET)
				       \PUPSOC.TELERAID)
				   (EQ (fetch PUPDESTHOST of PACKET)
				       (fetch NDBPUPHOST# of NDB))
				   (EQ (fetch PUPDESTSOCKETHI of PACKET)
				       0)))
			     (T (\TELERAIDRELEASE NDB PACKET)
				NIL)))
		 (\EPT.3TO10 (COND
			       ((AND (EQ (fetch TRANSOPERATION of PACKET)
					 \TRANS.OP.REQUEST)
				     (EQ (fetch TRANSPUPHOST of PACKET)
					 (fetch NDBPUPHOST# of NDB)))
                                                             (* It's for us)
				 (\BLTLOCALHOSTNUMBER (LOCF (fetch BASETRANSNSHOST of PACKET)))
                                                             (* Add in the information he wants)
				 (replace TRANSOPERATION of PACKET with \TRANS.OP.RESPONSE)
				 (\10MBRAWENCAPSULATE NDB PACKET \TRANS.DATALENGTH)
                                                             (* Send back the response)
				 (\10MBRAWTRANSMIT NDB PACKET))
			       (T (\10MBSETUPRECEIVER NDB PACKET)))
			     NIL)
		 (\TELERAIDRELEASE NDB PACKET))))))

(\TELERAIDSEND
  [LAMBDA (NDB PACKET)                                       (* bvm: "19-JUL-83 11:10")
                                                             (* Swap the ports on PACKET and send it back where it 
							     came from)
    (swap (fetch PUPDESTHOST of PACKET)
	  (fetch PUPSOURCEHOST of PACKET))
    (swap (fetch PUPDESTNET of PACKET)
	  (fetch PUPSOURCENET of PACKET))
    (replace PUPDESTSOCKETHI of PACKET with (fetch PUPSOURCESOCKETHI of PACKET))
    (replace PUPDESTSOCKETLO of PACKET with (fetch PUPSOURCESOCKETLO of PACKET))
    (replace PUPSOURCESOCKETHI of PACKET with 0)
    (replace PUPSOURCESOCKETLO of PACKET with \PUPSOC.TELERAID)
    (replace PUPCHECKSUM of PACKET with \NULLCHECKSUM)
    (SELECTQ (fetch NETTYPE of NDB)
	     (3 (swap (fetch 3MBDESTHOST of PACKET)
		      (fetch 3MBSOURCEHOST of PACKET))
		(replace 3MBLENGTH of PACKET with (IPLUS \3MBENCAPSULATION.WORDS
							 (FOLDHI (fetch PUPLENGTH of PACKET)
								 BYTESPERWORD)))
		(\3MBRAWTRANSMIT NDB PACKET))
	     (10 (\10MBRAWENCAPSULATE NDB PACKET (fetch PUPLENGTH of PACKET))
		 (\10MBRAWTRANSMIT NDB PACKET))
	     NIL)
    (FLIPCURSOR])

(\TELERAIDRELEASE
  [LAMBDA (NDB PACKET)                                       (* bvm: "16-JUL-83 16:42")
                                                             (* Called when Teleraid is finished with PACKET, so that
							     it can be reused for receiving)
    (SELECTQ (fetch NETTYPE of NDB)
	     (12Q (\10MBSETUPRECEIVER NDB PACKET))
	     NIL)
    (FLIPCURSOR)
    NIL])

(\TELERAIDENTRY
  (LAMBDA (NDB METADEBUGGING)                                (* ejs: "30-Oct-85 17:41")
                                                             (* Called on entry to TeleRaid.
							     Returns a packet receiver function)
    (OR METADEBUGGING (\KEYBOARDOFF))
    (\BLT (fetch TROLDCURSOR of \TELERAIDBLOCK)
	    \EM.CURSORBITMAP \#WORDS.CURSOR)
    (\TELEBLTCURSOR (fetch TRCURSOR of \TELERAIDBLOCK))
    (COND
      ((AND NDB \PUP.READY)
	(SELECTQ (AND NDB (fetch NETTYPE of NDB))
		   (3 (FUNCTION \3MBRAWRECEIVE))
		   (10 (\10MB.TURNONETHER NDB (fetch TROLDCSB of \TELERAIDBLOCK)
					    NIL T 0 0)
		       (\10MBSETUPRECEIVER NDB \TELERAIDPACKET)
		       (FUNCTION \10MBRAWRECEIVE))
		   NIL)))))

(\TELERAIDEXIT
  (LAMBDA (NDB RESET)                                        (* ejs: "30-Oct-85 17:41")
                                                             (* Restore state for teleraid exit)
    (SELECTQ (AND NDB (fetch NETTYPE of NDB))
	       (10 (\10MB.TURNONETHER NDB NIL (fetch TROLDCSB of \TELERAIDBLOCK)))
	       NIL)
    (\TELEBLTCURSOR (fetch TROLDCURSOR of \TELERAIDBLOCK))
    (OR RESET (\KEYBOARDON))))

(\3MBRAWRECEIVE
  [LAMBDA (NDB PACKET)                                       (* bvm: "12-JUL-83 19:09")
    (COND
      ((UNINTERRUPTABLY
           (PROG ((PBI (\READRAWPBI)))
	         [COND
		   (PBI (\BLT (fetch 3MBBASE of PACKET)
			      (fetch PBIRAWSTART of PBI)
			      (ADD1 (fetch PBILENGTH of PBI]
	         (RETURN PBI)))
	(replace EPTYPE of PACKET with (fetch 3MBTYPE of PACKET))
	PACKET])

(\3MBRAWTRANSMIT
  [LAMBDA (NDB PACKET)                                       (* bvm: "14-MAR-83 15:23")
                                                             (* Sends raw seething etherpacket on the 3mb net denoted
							     by NDB)
    (SETQ PACKET (\DTEST PACKET (QUOTE ETHERPACKET)))
    (UNINTERRUPTABLY
        (PROG ((PBI (\GETPACKETBUFFER)))
	      (OR PBI (RETURN))
	      (\BLT (fetch PBIRAWSTART of PBI)
		    (fetch 3MBBASE of PACKET)
		    (ADD1 (fetch 3MBLENGTH of PACKET)))
	      (\WRITERAWPBI PBI)
	      (RETURN T)))])

(\10MBRAWRECEIVE
  (LAMBDA (NDB PACKET METADEBUGGING)                         (* ejs: "16-Aug-85 08:01")
    (COND
      ((AND (EQ \MACHINETYPE \DAYBREAK)
	    (EQ (fetch (Dove.EtherIOCB IOCBType) of \TELERAIDIOCB)
		\DoveEther.OutputType))
	(\10MBSETUPRECEIVER NDB PACKET)
	NIL)
      (T (LET ((STATUS (\10MB.GETPACKETSTATUS \TELERAIDIOCB METADEBUGGING)))
	      (COND
		((EQ STATUS \ES.PENDING)                     (* nothing received yet)
		  NIL)
		((OR (EQ STATUS \ES.GOOD.PACKET)
		     \10MB.GETGARBAGE)                       (* Accept the packet)
		  (replace 10MBLENGTH of PACKET with (\10MB.GETPACKETLENGTH \TELERAIDIOCB))
		  (replace EPTYPE of PACKET with (fetch 10MBTYPE of PACKET))
		  PACKET)
		(T                                           (* Bad packet, stuff it back on input)
		   (\10MBSETUPRECEIVER NDB PACKET)
		   NIL)))))))

(\10MBRAWTRANSMIT
  (LAMBDA (NDB PACKET)                                       (* ejs: "16-Aug-85 07:30")
    (\QUEUE.OUTPUT.IOCB NDB \TELERAIDIOCB (fetch 10MBPACKETBASE of PACKET)
			(IMAX (fetch 10MBLENGTH of PACKET)
			      \10MB.MINPACKETLENGTH))        (* And then wait until transmitted)
    (repeatuntil (NEQ (\10MB.GETPACKETSTATUS \TELERAIDIOCB)
		      \ES.PENDING))))

(\10MBRAWENCAPSULATE
  [LAMBDA (NDB PACKET LENGTH)                                (* bvm: "16-Dec-84 22:11")
    (replace 10MBLENGTH of PACKET with (IPLUS \10MBENCAPSULATION.WORDS (FOLDHI LENGTH BYTESPERWORD)))
    (\BLT (fetch 10MBDESTHOSTBASE of PACKET)
	  (fetch 10MBSOURCEHOSTBASE of PACKET)
	  3)
    (\BLTLOCALHOSTNUMBER (fetch 10MBSOURCEHOSTBASE of PACKET])

(\10MBSETUPRECEIVER
  [LAMBDA (NDB PACKET)                                       (* bvm: "14-JUL-83 13:45")
    (\QUEUE.INPUT.IOCB NDB \TELERAIDIOCB (fetch 10MBPACKETBASE of PACKET)
		       \10MBPACKETLENGTH])
)

(RPAQ? \TELERAIDBUFFER )

(RPAQ? \TELERAIDBLOCK )

(RPAQ \TELERAIDBITMAPS (READBITMAP))
(16 144
"@@@@"
"@@NA"
"@@@@"
"@@NA"
"@@@@"
"@@@@"
"IJML"
"@@NA"
"HOML"
"@@NA"
"IJML"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"H@@@"
"L@@@"
"N@@@"
"O@@@"
"OH@@"
"OL@@"
"ON@@"
"O@@@"
"MH@@"
"IH@@"
"@L@@"
"@L@@"
"@F@@"
"@F@@"
"@C@@"
"@C@@"
"N@@@"
"DNHN"
"DHHH"
"DNHN"
"DHHH"
"DNNN"
"@@@@"
"@@@@"
"@@@@"
"N@@@"
"ICGF"
"IEBE"
"NGBE"
"JEBE"
"IEGF"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@GH"
"@@DD"
"@HDD"
"ALDD"
"BJDD"
"@HDD"
"@HDD"
"@HGH"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@DD"
"@@FD"
"@HFD"
"ALED"
"BJED"
"@HDL"
"@HDL"
"@HDD"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"FDEL"
"IFMB"
"HGMB"
"HEEB"
"HEEB"
"IDEB"
"FDEL"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@B@"
"N@@A"
"ICBG"
"NDJI"
"ICJI"
"IDJI"
"IGGG"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"O@A@"
"HHA@"
"HJMB"
"OCAD"
"HJAL"
"HJAB"
"OBAA"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"@@@@"
"GHD@"
"HDJ@"
"H@J@"
"HAA@"
"HEO@"
"GJ@H"
"@@@@"
"@@@@"
"DBMO"
"FBDD"
"EBHD"
"DJ@D"
"DF@D"
"DB@D"
"@@@@"
"@@@@")
(DECLARE: EVAL@COMPILE DONTCOPY 
(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS \TELERAIDPACKET \TELERAIDBUFFER \TELERAIDIOCB \TELERAIDBLOCK \TELERAIDBITMAPS)
)

[DECLARE: EVAL@COMPILE 

(ACCESSFNS TRBLOCK ((TROLDCSB (PROGN DATUM))
		      (TROLDCURSOR (\ADDBASE DATUM 16))
		      (TRCURSOR (\ADDBASE DATUM 32))
		      (TRCONTROLD (\ADDBASE DATUM 48))
		      (TRCONTROLN (\ADDBASE DATUM 64))
		      (TRCOMMAND (\ADDBASE DATUM 80))
		      (TRRAID (\ADDBASE DATUM 96))
		      (TRBREAK (\ADDBASE DATUM 112))
		      (TRNOBREAK (\ADDBASE DATUM 128))))
]

(DECLARE: EVAL@COMPILE 
(PUTPROPS \TELEKBDWAIT MACRO ((KEY)
	   (while (AND (XKEYDOWNP KEY)
		       (OR (XKEYDOWNP (QUOTE BLANK-BOTTOM))
			   (XKEYDOWNP (QUOTE CTRL))))
		  finally
		  (RETURN (COND ((OR (XKEYDOWNP (QUOTE BLANK-BOTTOM))
				     (XKEYDOWNP (QUOTE CTRL)))
				 T)
				(T (\TELEBLTCURSOR (fetch TRCURSOR of \TELERAIDBLOCK))
				   NIL))))))
)

(DECLARE: EVAL@COMPILE 

(RPAQQ \#WORDS.CURSOR 16)

(CONSTANTS \#WORDS.CURSOR)
)

(FILESLOAD (LOADCOMP)
	   LLETHER 10MBDRIVER REMOTEVMEM LLFAULT)
)
(DECLARE: DONTEVAL@LOAD DOCOPY 
(\TELERAIDINIT)
)
(PUTPROPS TRSERVER COPYRIGHT ("Xerox Corporation" 1983 1984 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1065 20320 (\DOTELERAID 1075 . 1288) (\TELERAIDINIT 1290 . 2724) (\TELERAIDSERVER 2726
 . 7897) (\TELEBLTCURSOR 7899 . 8157) (\TELERAIDCOMMAND 8159 . 9378) (\TELERAIDBREAK 9380 . 12687) (
\TELERAIDGET 12689 . 14169) (\TELERAIDSEND 14171 . 15516) (\TELERAIDRELEASE 15518 . 15931) (
\TELERAIDENTRY 15933 . 16757) (\TELERAIDEXIT 16759 . 17243) (\3MBRAWRECEIVE 17245 . 17701) (
\3MBRAWTRANSMIT 17703 . 18288) (\10MBRAWRECEIVE 18290 . 19244) (\10MBRAWTRANSMIT 19246 . 19672) (
\10MBRAWENCAPSULATE 19674 . 20090) (\10MBSETUPRECEIVER 20092 . 20318)))))
STOP