From 88fac61a47a10165ad59bfe4e10760370bb35861 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Sat, 16 Jan 2021 23:16:20 -0800 Subject: [PATCH] Made EXPORTS.ALL, drop system.hash --- library/EXPORTS.ALL | 2 +- lispusers/MEDLEY-FIX-DIRS | 2 +- lispusers/MEDLEY-FIX-DIRS.LCOM | Bin 2060 -> 2154 bytes loadups/system.hash | Bin 1857132 -> 0 bytes makesysout/SYNCLISPFILES | 2 +- makesysout/SYNCLISPFILES.LCOM | Bin 9100 -> 8938 bytes 6 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 loadups/system.hash diff --git a/library/EXPORTS.ALL b/library/EXPORTS.ALL index fafe5f6d..18697a89 100644 --- a/library/EXPORTS.ALL +++ b/library/EXPORTS.ALL @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (LISPXPRIN1 "EXPORTS GATHERED FROM {DSK}kaplan>Local>medley3.5>lispcore>sources> ON 3-May-2018 15:59:42" T) (LISPXTERPRI T) (PUTPROP (QUOTE FILESETS) (QUOTE IMPORTDATE) (IDATE "29-Jan-98 16:26:53")) (RPAQQ MODARITHMACROS (CEIL FLOOR FOLDHI FOLDLO MODUP UNFOLD MOD)) (PUTPROPS CEIL MACRO ((X N) (FLOOR (IPLUS X (CONSTANT (SUB1 N))) N))) (PUTPROPS FLOOR MACRO ((X N) (LOGAND X (CONSTANT (LOGXOR (SUB1 N) -1))))) (PUTPROPS FOLDHI MACRO (X (PROG ((FORM (CAR X)) (DIVISOR (CAR (CONSTANTEXPRESSIONP (CADR X))))) (OR ( AND DIVISOR (POWEROFTWOP DIVISOR)) (\ILLEGAL.ARG (CADR X))) (RETURN (LIST (QUOTE LRSH) (LIST (QUOTE IPLUS) FORM (SUB1 DIVISOR)) (SUB1 (INTEGERLENGTH DIVISOR))))))) (PUTPROPS FOLDLO MACRO (X (PROG ((FORM (CAR X)) (DIVISOR (CAR (CONSTANTEXPRESSIONP (CADR X))))) (OR ( AND DIVISOR (POWEROFTWOP DIVISOR)) (\ILLEGAL.ARG (CADR X))) (RETURN (LIST (QUOTE LRSH) FORM (SUB1 ( INTEGERLENGTH DIVISOR))))))) (PUTPROPS MODUP MACRO (OPENLAMBDA (X N) (IDIFFERENCE (SUB1 N) (IMOD (SUB1 X) N)))) (PUTPROPS UNFOLD MACRO (X (PROG ((FORM (CAR X)) (DIVISOR (CAR (CONSTANTEXPRESSIONP (CADR X))))) (OR ( AND DIVISOR (POWEROFTWOP DIVISOR)) (\ILLEGAL.ARG (CADR X))) (RETURN (LIST (QUOTE LLSH) FORM (SUB1 ( INTEGERLENGTH DIVISOR))))))) (PUTPROPS MOD MACRO (= . IMOD)) (RPAQQ BITSPERNIBBLE 4) (RPAQQ NIBBLESPERBYTE 2) (RPAQQ BITSPERBYTE 8) (RPAQQ BITSPERCELL 32) (RPAQQ BITSPERWORD 16) (RPAQQ BYTESPERCELL 4) (RPAQQ BYTESPERPAGE 512) (RPAQQ BYTESPERWORD 2) (RPAQQ CELLSPERPAGE 128) (RPAQQ CELLSPERSEGMENT 32768) (RPAQQ PAGESPERSEGMENT 256) (RPAQQ WORDSPERCELL 2) (RPAQQ WORDSPERPAGE 256) (RPAQQ WORDSPERSEGMENT 65536) (RPAQQ WORDSPERQUAD 4) (RPAQQ CELLSPERQUAD 2) (RPAQQ BYTESPERQUAD 8) (CONSTANTS BITSPERNIBBLE NIBBLESPERBYTE BITSPERBYTE BITSPERCELL BITSPERWORD BYTESPERCELL BYTESPERPAGE BYTESPERWORD CELLSPERPAGE CELLSPERSEGMENT PAGESPERSEGMENT WORDSPERCELL WORDSPERPAGE WORDSPERSEGMENT WORDSPERQUAD CELLSPERQUAD BYTESPERQUAD) (RPAQQ INTEGERSIZECONSTANTS ((BITS.PER.SMALLP (ADD1 BITSPERWORD)) (SMALLP.LENGTH (SUB1 BITS.PER.SMALLP )) (MAX.SMALLP (LOGOR (LSH 1 (SUB1 SMALLP.LENGTH)) (SUB1 (LSH 1 (SUB1 SMALLP.LENGTH))))) (MIN.SMALLP ( IDIFFERENCE -1 MAX.SMALLP)) (BITS.PER.FIXP BITSPERCELL) (FIXP.LENGTH (SUB1 BITS.PER.FIXP)) (MAX.FIXP ( LOGOR (LSH 1 (SUB1 FIXP.LENGTH)) (SUB1 (LSH 1 (SUB1 FIXP.LENGTH))))) (MIN.FIXP (IDIFFERENCE -1 MAX.FIXP)))) (RPAQ BITS.PER.SMALLP (ADD1 BITSPERWORD)) (RPAQ SMALLP.LENGTH (SUB1 BITS.PER.SMALLP)) (RPAQ MAX.SMALLP (LOGOR (LSH 1 (SUB1 SMALLP.LENGTH)) (SUB1 (LSH 1 (SUB1 SMALLP.LENGTH))))) (RPAQ MIN.SMALLP (IDIFFERENCE -1 MAX.SMALLP)) (RPAQ BITS.PER.FIXP BITSPERCELL) (RPAQ FIXP.LENGTH (SUB1 BITS.PER.FIXP)) (RPAQ MAX.FIXP (LOGOR (LSH 1 (SUB1 FIXP.LENGTH)) (SUB1 (LSH 1 (SUB1 FIXP.LENGTH))))) (RPAQ MIN.FIXP (IDIFFERENCE -1 MAX.FIXP)) (CONSTANTS (BITS.PER.SMALLP (ADD1 BITSPERWORD)) (SMALLP.LENGTH (SUB1 BITS.PER.SMALLP)) (MAX.SMALLP ( LOGOR (LSH 1 (SUB1 SMALLP.LENGTH)) (SUB1 (LSH 1 (SUB1 SMALLP.LENGTH))))) (MIN.SMALLP (IDIFFERENCE -1 MAX.SMALLP)) (BITS.PER.FIXP BITSPERCELL) (FIXP.LENGTH (SUB1 BITS.PER.FIXP)) (MAX.FIXP (LOGOR (LSH 1 ( SUB1 FIXP.LENGTH)) (SUB1 (LSH 1 (SUB1 FIXP.LENGTH))))) (MIN.FIXP (IDIFFERENCE -1 MAX.FIXP))) (PUTPROP (QUOTE MODARITH) (QUOTE IMPORTDATE) (IDATE "16-May-90 20:46:21")) (RPAQQ WINDFLG T) (CONSTANTS (WINDFLG T)) (RPAQQ INITCONSTANTS ((* ;;; "(LISPNAME VALUE BCPLNAME UCODENAME)") (CDRCODING 1 T T) (* ; "IF CDRCODING=0, CDR CODING IS OFF, OTHERWISE ON") (* ;; "type numbers -- repeated on LLBASIC too") ( \SMALLP 1 SMALLTYPE SmallType) (\FIXP 2 INTEGERTYPE FixpType) (\FLOATP 3 FLTPTTYPE FloatpType) ( \LITATOM 4 ATOMTYPE AtomType) (\LISTP 5 LISTTYPE ListType) (\ARRAYP 6 ARRAYPTRTYPE ArrayType) ( \STRINGP 7 STRINGPTRTYPE) (\STACKP 8) (\CHARACTERP 9) (\VMEMPAGEP 10 NIL VMemPagePType) (\STREAM 11 NIL STREAMTYPE) (* ;; "TYPE TABLE CONSTANTS - - - - - - - - - - - - - - - - - - - - - -") ( \TT.TYPEMASK 2047 TTTypeMask T) (\TT.NOREF 32768 NIL T) (\TT.SYMBOLP 16384 NIL T) (\TT.FIXP 8192) ( \TT.NUMBERP 4096) (\TT.ATOM 2048) (* ;; "page map - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") (\PMblockSize 32 PMBLOCKSIZE) (\STATSsize 8 T) (\NumPMTpages 8) (\EmptyPMTEntry 65535 T) (\FirstVmemBlock 2 T) ( \MAXVMPAGE 131069) (\MAXVMSEGMENT 255) (* ;; "interface page") (\IFPValidKey 5603 T) (* ;; "MDS") ( \FirstMDSPage 16382) (\MaxMDSPage 524285) (\DefaultSecondMDSPage 65532) (\MDSIncrement 512) ( \PagesPerMDSUnit 2) (* ; "(FOLDLO \MDSIncrement WORDSPERPAGE)") (* ;; "arrays") (\ARRAYSPACE (46 0)) ( \FirstArraySegment 46) (\FirstArrayPage 11776) (\ARRAYSPACE2 (64 0)) (\DefaultSecondArrayPage 16384) ( * ;; "stack block constants") (\StackMask 57344 T T) (\FxtnBlock 49152 T T) (\GuardBlock 57344 T T) ( \BFBlock 32768 T T) (\FreeStackBlock 40960 T T) (\NotStackBlock 0) (* ; "none of the above") ( \MinExtraStackWords 32 T T) (* ;; "backspace kludge") (ERASECHARCODE 0 T) (* ;; "GC constants") ( \HT1CNT 1024 NIL T) (\HTSTKBIT 512 NIL T) (\HTCNTMASK 64512 NIL T) (\HTMAINSIZE 65536 NIL T) ( \HTCOLLSIZE 1048576 NIL T) (* ; "HTCOLL size in words") (\HTENDFREE 1 NIL T) (\HTFREEPTR 0 NIL T) (* ;; "pointers and lengths of various data spaces") (\ATOMSPACE (0 0) (ATOMspace NIL) (atomHiVal NIL)) ( \AtomHI 0) (\CHARHI 7) (* ; "overlap character space and the atom hash table space") (\AtomHashTable ( 21 0) (AHTspace AHTbase)) (\AtomHTpages 256 AHTSIZE) (\LastAtomPage 255) (\MaxAtomFrLst 65535) ( \SMALLPOSPSPACE (14 0)) (\SmallPosHi 14 SMALLPOSspace smallpl) (\SMALLNEGSPACE (15 0)) (\SmallNegHi 15 SMALLNEGspace smallneg) (\NumSmallPages 512) (* ;; "PNAME SPACEin the old world; used for initial atoms now.") (\PNPSPACE (8 0) (PNPspace PNPbase)) ( \PNAME.HI 8) (\OLDATOMSPACE (44 0)) (* ; "NEW ATOM SPACE") (\ATOM.HI 44) (* ; "HI PART OF NEW ATOM SPACE") (* ;; "Definitions in old atom world") (\DEFSPACE (10 0) (DEFspace DEFbase) (DEFspace DEFbase)) (\DEF.HI 10) (\VALSPACE (12 0) (TOPVALspace TOPVALbase) (VALspace VALbase )) (\VAL.HI 12) (\PLISTSPACE (2 0) (PLISTspace PLISTbase)) (\PLIST.HI 2) (\PAGEMAP (5 0) (PAGEMAPspace PAGEMAPbase)) (\NumPageMapPages 256) (\PageMapTBL (20 512) (PMTspace PMTbase)) (\InterfacePage (20 0) (INTERFACEspace INTERFACEbase) (INTERFACEspace INTERFACEbase)) (\IOPAGE (0 65280)) (\DoveIORegion (0 16384)) (\IOCBPAGE (0 256)) (\FPTOVP (2 0)) (\MDSTypeTable (24 0) (MDSTYPEspace MDSTYPEbase) ( MDSTYPEspace MDSTYPEbase)) (\MDSTTsize 1024 T) (* ; "in Pages") (\MISCSTATS (20 2560) (STATSspace MISCSTATSbase)) (\UFNTable (20 3072) NIL (STATSspace UFNTablebase)) (\UFNTableSize 2) (\DTDSpaceBase ( 20 4096) (DTDspace DTDbase) (DTDspace DTDbase)) (\DTDSize 18 T) (\LISTPDTD (20 4186)) (\EndTypeNumber 2047) (\LOCKEDPAGETABLE (20 28672)) (\NumLPTPages 16) (\STACKSPACE (1 0) (STACKspace NIL) (STACKspace NIL)) (\GuardStackAddr 61440) (\LastStackAddr 65534) (\STACKHI 1 T T) (\HTMAIN (22 0) (HTMAINspace HTMAINbase) (HTMAINspace HTMAINbase)) (\HTMAINnpages 256 T) (\HTOVERFLOW (23 0) NIL (NIL HTOVERFLOWbase)) (\HTBIGCOUNT (23 32768)) (\HTCOLL (28 0) NIL (HTCOLLspace HTCOLLbase)) ( \DISPLAYREGION (18 0)) (\D1BCPLspace 0 T LEmubrHiVal) (\D0BCPLspace 0 T) (* ;; "Interface Page locations") (\CurrentFXP 0 T T) (\ResetFXP 1 T T) (\SubovFXP 2 T T) (\KbdFXP 3 T T) ( \HardReturnFXP 4 T T) (\GCFXP 5) (\FAULTFXP 6 T T) (\MiscFXP 14 T T) (\TeleRaidFXP 24 T T) (* ;; "emulator segment locations") (DCB.EM 272) (DISPINTERRUPT.EM 273) (CURSORBITMAP.EM 281) (KBDAD0.EM 65052) (KBDAD1.EM 65053) (KBDAD2.EM 65054) (KBDAD3.EM 65055) (UTILIN.EM 65048) (CURSORX.EM 278) ( CURSORY.EM 279) (MOUSEX.EM 276) (MOUSEY.EM 277) (\LispKeyMask 8192 T T) (\BcplKeyMask 4352 T T) (* ; "Machine types") (\MAIKO 3) (\DOLPHIN 4) (\DORADO 5) (\DANDELION 6) (\DAYBREAK 8) (* ;; "FOR DLION (AND DAYBREAK)") (\VP.DISPLAY 4608) (\NP.DISPLAY 202) (* ; "for Dorado display 1024x808 pixels / (16 pixels/word x 256 words/page)") (\NP.WIDEDOVEDISPLAY 243) (* ; "Wide Dove display 1152x864 pixels") (\WIDEDOVEDISPLAYWIDTH 1152) (\RP.AFTERDISPLAY 206) (* ; "Includes 4 pages for cursor") (\RP.AFTERDOVEDISPLAY 243) (* ; "if big screen") (\RP.DISPLAY 0) ( \RP.TEMPDISPLAY 2561) (\RP.MISCLOCKED 2804) (* ; "(+ \RP.TEMPDISPLAY \NP.WIDEDOVEDISPLAY)") (\RP.STACK 768) (\VP.STACK 256) (\RP.MAP 256) (\NP.MAP 256) (\RP.IOPAGE 512) (* ; "The DOVE IOCBPAGE can go anywhere, but should be under the 1mbyte range") (\RP.DOVEIOCBPAGE 543) ( \RP.DOVEIORGN 544) (\VP.DOVEIORGN 64) (\DOVEIORGNSIZE 64) (\VP.IOPAGE 255) (\VP.IFPAGE 5120) ( \VP.FPTOVP 512) (\NP.FPTOVP 4096) (\RP.FPTOVP 1024) (\RP.STARTBUFFERS 640) (\VP.TYPETABLE 6144) ( \NP.TYPETABLE 1024) (\RP.TYPETABLE 5120) (\VP.GCTABLE 5632) (\NP.GCTABLE 256) (\RP.GCTABLE 6144) ( \VP.GCOVERFLOW 5888) (\NP.GCOVERFLOW 1) (\RP.GCOVERFLOW 6400) (\FP.IFPAGE 2) (\VP.IOCBS 1) ( \VP.PRIMARYMAP 5122) (\VP.SECONDARYMAP 1280) (\VP.LPT 5232) (\VP.INITSCRATCH 8) (\VP.RPT 128) ( \VP.BUFFERS 218) (* ; "DLion processor commands") (\DL.PROCESSORBUSY 32768) (\DL.SETTOD 32769) ( \DL.READTOD 32770) (\DL.READPID 32771) (\DL.BOOTBUTTON 32772))) (RPAQQ MISCSTATSLAYOUT ((STARTTIME FIXP MSstrtTime) (TOTALTIME FIXP) (SWAPWAITTIME FIXP T) (PAGEFAULTS FIXP T) (SWAPWRITES FIXP T) (DISKIOTIME FIXP T) (DISKOPS FIXP T) (KEYBOARDWAITTIME FIXP T) (GCTIME FIXP T) (NETIOTIME FIXP T) (NETIOOPS FIXP T) (SWAPTEMP0 FIXP) (SWAPTEMP1 FIXP) (RCLKSECOND FIXP) ( SECONDSCLOCK FIXP) (MILLISECONDSCLOCK FIXP) (BASECLOCK FIXP) (RCLKTEMP0 FIXP) (SECONDSTMP FIXP) ( MILLISECONDSTMP FIXP) (BASETMP FIXP) (EXCESSTIMETMP FIXP) (CLOCKTEMP0 FIXP) (DISKTEMP0 FIXP) ( DISKTEMP1 FIXP) (TELERAIDTEMP1 FIXP) (TELERAIDTEMP2 FIXP) (TELERAIDTEMP3 FIXP) (LASTUSERACTION FIXP) ( DLMOUSETIMER FIXP) (DLMOUSETEMP FIXP))) (RPAQQ IFPAGELAYOUT ((CurrentFXP WORD) (* ; "First 7 items are FX values for user and 6 system contexts.") (ResetFXP WORD) (SubovFXP WORD) (KbdFXP WORD) (HardReturnFXP WORD) (GCFXP WORD) (FAULTFXP WORD) (EndOfStack WORD) (* ; "Stack high-water mark: address of guard block at current end of stack") (LVersion WORD) (* ; "Lisp version, followed by min versions of microcode and Bcpl compatible with this Lisp") (MinRVersion WORD) (MinBVersion WORD) (RVersion WORD) (* ; "Bcpl fills in the actual microcode, Bcpl versions.") ( BVersion WORD) (MachineType WORD) (MiscFXP WORD) (* ; "FX for MISC context") (Key WORD) (* ; "= IFPValidKey if vmem consistent.") (SerialNumber WORD) (* ; "Pup host number (Dorado/Dolphin)") ( EmulatorSpace WORD) (* ; "Hiloc of bcpl space (always zero now)") (ScreenWidth WORD) (NxtPMAddr WORD) (* ; "Next page to be allocated in secondary page map table") (NActivePages WORD) (* ; "Length of vmem in use") (NDirtyPages WORD) (* ; "not used, but maintained as = NActivePages") ( filePnPMP0 WORD) (* ; "Sysout page number of first page of secondary page map table (\PAGEMAP), which is where the secondary map pages themselves live" ) (filePnPMT0 WORD) (* ; "Sysout page number of first page of primary page map table") (TELERAIDFXP WORD) (* ; "FX for TeleRaid server context") (NATIVE-START-MEM-PAGE WORD) (* ; "Unix page where native code starts") (NATIVE-LENGTH-PAGE WORD) (* ; "Unix page length of native code" ) (NATIVE-PAGE-OFFSET WORD) (* ; "Lisp Disk Page offset of native code") (UserNameAddr WORD) (* ; "Addresses in bcpl space (seg 0) of global user name and password") (UserPswdAddr WORD) (StackBase WORD) (* ; "Stack address where user stack starts") (FAULTHI WORD) (* ; "Microcode for page fault stores fault address here, then does context switch to FAULTFXP") (FAULTLO WORD) (DEVCONFIG WORD) (* ; "IT'S FOR KB,DISP TYPE") (* ; "Formerly REALPAGETABLE, back when it was always in Bcpl space.") (RPTSIZE WORD) (* ; "Number of entries in Real Page Table") (RPOFFSET WORD) (* ; "RP-RPOFFSET => index in table") ( MAXETHERBYTES WORD) (* ; "Number of bytes available in a pbi, not counting encapsulation (Dorado)") ( EMBUFVP WORD) (* ; "VP of a one-page emulator buffer") (NSHost0 WORD) (* ; "Machine's 48-bit NS host number. Lisp manages to compute this on all machines except Dolphin, where Bcpl fills it in." ) (NSHost1 WORD) (NSHost2 WORD) (MDSZone WORD) (* ; "Obsolete -- was used by Dolphin 10MB network code.") (MDSZoneLength WORD) (EMUBUFFERS WORD) (* ; "Buffer space in segment 0 for swapping/disk activity") (EMUBUFLENGTH WORD) (* ; "Number of words of said space") (LASTNUMCHARS WORD) (* ; "No longer used?") (SYSDISK WORD) (* ; "Address of sysDisk in Bcpl space -- disk obj for boot partition.") (ISFMAP WORD) (* ;; "The following 4 are for \MISCAPPLY* -- note that they are not ref counted, so don't pass the only pointer to something this way!" ) (MISCSTACKFN FULLXPOINTER) (MISCSTACKARG1 FULLXPOINTER) (MISCSTACKARG2 FULLXPOINTER) ( MISCSTACKRESULT FULLXPOINTER) (NRealPages WORD) (* ; "Number pages of real memory") ( LastLockedFilePage WORD) (* ; "Last page of vmem that is locked--booting has to load at least that far.") (LastDominoFilePage WORD) (* ; "Last sysout page reserved for Dandelion microcode") (FPTOVPStart WORD) (* ; "Sysout page where FPTOVP starts") (FAKEMOUSEBITS WORD) (* ; "Used to implement fake middle button on 2-button Dandelion.") (DL24BitAddressable WORD) (* ; "non-zero if DLion capable of addressing 32MB virtual memory") (REALPAGETABLEPTR FULLXPOINTER) (* ; "Address of real page table, set up by Bcpl (but not chained together)") (DLLastVmemPage WORD) (* ; "DLion booting microcode puts length of vmem file here.") (FullSpaceUsed WORD) (* ; "Non-zero if vmem beyond initial 8MB has been allocated.") (FAKEKBDAD4 WORD) (FAKEKBDAD5 WORD) (* ;; "The following 9 items (6 words and 3 pointers) are 3 3-element vectors for the Dorado extended virtual memory code--indexed by 0,1,2 according to which of up to 3 virtual memory backing files you're working with." ) (XVmemFmapBase WORD) (* ; "Bcpl stores isf map pointer to each partition here. First is redundant with ISFMAP field above.") ( NIL WORD) (NIL WORD) (XVmemFmapHighBase WORD) (* ; "Bcpl stores the highest vm page contained in this or earlier partition.") (NIL WORD) (NIL WORD) ( XVmemDiskBase FULLXPOINTER) (* ; "Lisp stores disk objects here (just a convenient non-faulting contiguous block of storage).") (NIL FULLXPOINTER) (NIL FULLXPOINTER))) (RPAQQ MAIKO.IFPAGELAYOUT ((CurrentFXP WORD) (* ; "First 7 items are FX values for user and 6 system contexts.") (ResetFXP WORD) (SubovFXP WORD) (KbdFXP WORD) (HardReturnFXP WORD) (GCFXP WORD) (FAULTFXP WORD) (EndOfStack WORD) (* ; "Stack high-water mark: address of guard block at current end of stack") (LVersion WORD) (* ; "Lisp version, followed by min versions of microcode and Bcpl compatible with this Lisp") (MinRVersion WORD) (MinBVersion WORD) (RVersion WORD) (* ; "Bcpl fills in the actual microcode, Bcpl versions.") ( BVersion WORD) (MachineType WORD) (MiscFXP WORD) (* ; "FX for MISC context") (Key WORD) (* ; "= IFPValidKey if vmem consistent.") (SerialNumber WORD) (* ; "Pup host number (Dorado/Dolphin)") ( EmulatorSpace WORD) (* ; "Hiloc of bcpl space (always zero now)") (ScreenWidth WORD) (NxtPMAddr WORD) (* ; "Next page to be allocated in secondary page map table") (NIL WORD) (* ; "WAS NActivePages, Length of vmem in use") (NIL WORD) (* ; "WAS NDirtyPages, not used, but maintained as = NActivePages") (filePnPMP0 WORD) (* ; "Sysout page number of first page of secondary page map table (\PAGEMAP), which is where the secondary map pages themselves live" ) (filePnPMT0 WORD) (* ; "Sysout page number of first page of primary page map table") (TELERAIDFXP WORD) (* ; "FX for TeleRaid server context") (NATIVE-START-MEM-PAGE WORD) (* ; "Unix page where native code starts") (NATIVE-LENGTH-PAGE WORD) (* ; "Unix page length of native code" ) (NATIVE-PAGE-OFFSET WORD) (* ; "Lisp Disk Page offset of native code") (UserNameAddr WORD) (* ; "Addresses in bcpl space (seg 0) of global user name and password") (UserPswdAddr WORD) (StackBase WORD) (* ; "Stack address where user stack starts") (FAULTHI WORD) (* ; "Microcode for page fault stores fault address here, then does context switch to FAULTFXP") (FAULTLO WORD) (DEVCONFIG WORD) (* ; "IT'S FOR KB,DISP TYPE") (* ; "Formerly REALPAGETABLE, back when it was always in Bcpl space.") (RPTSIZE WORD) (* ; "Number of entries in Real Page Table") (RPOFFSET WORD) (* ; "RP-RPOFFSET => index in table") ( MAXETHERBYTES WORD) (* ; "Number of bytes available in a pbi, not counting encapsulation (Dorado)") ( EMBUFVP WORD) (* ; "VP of a one-page emulator buffer") (NSHost0 WORD) (* ; "Machine's 48-bit NS host number. Lisp manages to compute this on all machines except Dolphin, where Bcpl fills it in." ) (NSHost1 WORD) (NSHost2 WORD) (MDSZone WORD) (* ; "Obsolete -- was used by Dolphin 10MB network code.") (MDSZoneLength WORD) (EMUBUFFERS WORD) (* ; "Buffer space in segment 0 for swapping/disk activity") (EMUBUFLENGTH WORD) (* ; "Number of words of said space") (* ;; "The following 2 are available if NEW_STOARGE is specified in C") (ProcessSize WORD) (* ; "Process size for which can be use as LISP space") (StorageFullState WORD) (* ; "Save last storage state") (ISFMAP WORD) (* ;; "The following 4 are for \MISCAPPLY* -- note that they are not ref counted, so don't pass the only pointer to something this way!" ) (MISCSTACKFN FULLXPOINTER) (MISCSTACKARG1 FULLXPOINTER) (MISCSTACKARG2 FULLXPOINTER) ( MISCSTACKRESULT FULLXPOINTER) (NRealPages WORD) (* ; "Number pages of real memory") ( LastLockedFilePage WORD) (* ; "Last page of vmem that is locked--booting has to load at least that far.") (LastDominoFilePage WORD) (* ; "Last sysout page reserved for Dandelion microcode") (FPTOVPStart WORD) (* ; "Sysout page where FPTOVP starts") (FAKEMOUSEBITS WORD) (* ; "Used to implement fake middle button on 2-button Dandelion.") (DL24BitAddressable WORD) (* ; "non-zero if DLion capable of addressing 32MB virtual memory") (REALPAGETABLEPTR FULLXPOINTER) (* ; "Address of real page table, set up by Bcpl (but not chained together)") (SYSDISK WORD) (* ; "WAS DLLastVmemPage, DLion booting microcode puts length of vmem file here.") (FullSpaceUsed WORD) (* ; "Non-zero if vmem beyond initial 8MB has been allocated.") (FAKEKBDAD4 WORD) (FAKEKBDAD5 WORD) (* ;; "The following 9 items (6 words and 3 pointers) are 3 3-element vectors for the Dorado extended virtual memory code--indexed by 0,1,2 according to which of up to 3 virtual memory backing files you're working with." ) (XVmemFmapBase WORD) (* ; "Bcpl stores isf map pointer to each partition here. First is redundant with ISFMAP field above.") ( NIL WORD) (NIL WORD) (XVmemFmapHighBase WORD) (* ; "Bcpl stores the highest vm page contained in this or earlier partition.") (NIL WORD) (NIL WORD) ( XVmemDiskBase FULLXPOINTER) (* ; "Lisp stores disk objects here (just a convenient non-faulting contiguous block of storage).") (NIL FULLXPOINTER) (NIL FULLXPOINTER) (DLLastVmemPage FIXP) (* ; "DLion booting microcode puts length of vmem file here.") (NActivePages FIXP) (* ; "Length of vmem in use") (NDirtyPages FIXP) (* ; "not used, but maintained as = NActivePages"))) (RPAQQ IOPAGELAYOUT ((NIL 18 WORD) (DLMAINTPANEL WORD NIL T) (DLFLOPPYCMD WORD) (DLTTYPORTCMD WORD) ( DLPROCESSORCMD WORD) (NEWMOUSESTATE WORD) (DLBEEPCMD WORD) (DLRS232CMISCCOMMAND WORD) (DLRS232CPUTFLAG WORD) (DLRS232CGETFLAG WORD) (NIL 6 WORD) (DLFLOPPY WORD) (DLTTYOUT WORD) (NIL 1 WORD) (DLTTYIN WORD) (NIL 1 WORD) (DLPROCESSOR2 WORD) (DLPROCESSOR1 WORD) (DLPROCESSOR0 WORD) (NEWMOUSEX WORD) (NEWMOUSEY WORD) (DLBEEPFREQ WORD) (DLRS232CPARAMETERCSBLO WORD) (DLRS232CPARAMETERCSBHI WORD) ( DLRS232CSETRS366STATUS 3 WORD) (DLRS232CPUTCSBLO WORD) (DLRS232CPUTCSBHI WORD) (DLRS232CGETCSBLO WORD) (DLRS232CGETCSBHI WORD) (DLRS232CDEVICESTATUS WORD) (DLRS232CPARAMETEROUTCOME WORD) (DLTODVALID WORD) (DLTODLO WORD NIL T) (DLTODHI WORD) (DLTODLO2 WORD) (DLMOUSEX WORD NIL T) (DLMOUSEY WORD NIL T) ( DLUTILIN WORD NIL T) (DLKBDAD0 WORD NIL T) (DLKBDAD1 WORD NIL T) (DLKBDAD2 WORD NIL T) (DLKBDAD3 WORD NIL T) (DLKBDAD4 WORD NIL T) (DLKBDAD5 WORD NIL T) (DLLSEPIMAGECSB 32 WORD) (DLIOPHARDWARECONFIG WORD) (NIL 11 WORD) (DLRS232CPARAMETERCSBLO.11 WORD) (DLRS232CPARAMETERCSBHI.11 WORD) ( DLRS232CSETRS366STATUS.11 14 WORD) (NIL 60 WORD) (DLMAGTAPE 4 WORD) (DLETHERNET 12 WORD NIL T) (NIL 31 WORD) (DLDISPINTERRUPT WORD NIL T) (DLDISPCONTROL WORD) (DLDISPBORDER WORD) (DLCURSORX WORD NIL T) ( DLCURSORY WORD NIL T) (DLCURSORBITMAP 16 WORD NIL T))) (RPAQQ CDRCODING 1) (RPAQQ \SMALLP 1) (RPAQQ \FIXP 2) (RPAQQ \FLOATP 3) (RPAQQ \LITATOM 4) (RPAQQ \LISTP 5) (RPAQQ \ARRAYP 6) (RPAQQ \STRINGP 7) (RPAQQ \STACKP 8) (RPAQQ \CHARACTERP 9) (RPAQQ \VMEMPAGEP 10) (RPAQQ \STREAM 11) (RPAQQ \TT.TYPEMASK 2047) (RPAQQ \TT.NOREF 32768) (RPAQQ \TT.SYMBOLP 16384) (RPAQQ \TT.FIXP 8192) (RPAQQ \TT.NUMBERP 4096) (RPAQQ \TT.ATOM 2048) (RPAQQ \PMblockSize 32) (RPAQQ \STATSsize 8) (RPAQQ \NumPMTpages 8) (RPAQQ \EmptyPMTEntry 65535) (RPAQQ \FirstVmemBlock 2) (RPAQQ \MAXVMPAGE 131069) (RPAQQ \MAXVMSEGMENT 255) (RPAQQ \IFPValidKey 5603) (RPAQQ \FirstMDSPage 16382) (RPAQQ \MaxMDSPage 524285) (RPAQQ \DefaultSecondMDSPage 65532) (RPAQQ \MDSIncrement 512) (RPAQQ \PagesPerMDSUnit 2) (RPAQQ \FirstArraySegment 46) (RPAQQ \FirstArrayPage 11776) (RPAQQ \DefaultSecondArrayPage 16384) (RPAQQ \StackMask 57344) (RPAQQ \FxtnBlock 49152) (RPAQQ \GuardBlock 57344) (RPAQQ \BFBlock 32768) (RPAQQ \FreeStackBlock 40960) (RPAQQ \NotStackBlock 0) (RPAQQ \MinExtraStackWords 32) (RPAQQ ERASECHARCODE 0) (RPAQQ \HT1CNT 1024) (RPAQQ \HTSTKBIT 512) (RPAQQ \HTCNTMASK 64512) (RPAQQ \HTMAINSIZE 65536) (RPAQQ \HTCOLLSIZE 1048576) (RPAQQ \HTENDFREE 1) (RPAQQ \HTFREEPTR 0) (RPAQQ \AtomHI 0) (RPAQQ \CHARHI 7) (RPAQQ \AtomHTpages 256) (RPAQQ \LastAtomPage 255) (RPAQQ \MaxAtomFrLst 65535) (RPAQQ \SmallPosHi 14) (RPAQQ \SmallNegHi 15) (RPAQQ \NumSmallPages 512) (RPAQQ \PNAME.HI 8) (RPAQQ \ATOM.HI 44) (RPAQQ \DEF.HI 10) (RPAQQ \VAL.HI 12) (RPAQQ \PLIST.HI 2) (RPAQQ \NumPageMapPages 256) (RPAQQ \MDSTTsize 1024) (RPAQQ \UFNTableSize 2) (RPAQQ \DTDSize 18) (RPAQQ \EndTypeNumber 2047) (RPAQQ \NumLPTPages 16) (RPAQQ \GuardStackAddr 61440) (RPAQQ \LastStackAddr 65534) (RPAQQ \STACKHI 1) (RPAQQ \HTMAINnpages 256) (RPAQQ \D1BCPLspace 0) (RPAQQ \D0BCPLspace 0) (RPAQQ \CurrentFXP 0) (RPAQQ \ResetFXP 1) (RPAQQ \SubovFXP 2) (RPAQQ \KbdFXP 3) (RPAQQ \HardReturnFXP 4) (RPAQQ \GCFXP 5) (RPAQQ \FAULTFXP 6) (RPAQQ \MiscFXP 14) (RPAQQ \TeleRaidFXP 24) (RPAQQ DCB.EM 272) (RPAQQ DISPINTERRUPT.EM 273) (RPAQQ CURSORBITMAP.EM 281) (RPAQQ KBDAD0.EM 65052) (RPAQQ KBDAD1.EM 65053) (RPAQQ KBDAD2.EM 65054) (RPAQQ KBDAD3.EM 65055) (RPAQQ UTILIN.EM 65048) (RPAQQ CURSORX.EM 278) (RPAQQ CURSORY.EM 279) (RPAQQ MOUSEX.EM 276) (RPAQQ MOUSEY.EM 277) (RPAQQ \LispKeyMask 8192) (RPAQQ \BcplKeyMask 4352) (RPAQQ \MAIKO 3) (RPAQQ \DOLPHIN 4) (RPAQQ \DORADO 5) (RPAQQ \DANDELION 6) (RPAQQ \DAYBREAK 8) (RPAQQ \VP.DISPLAY 4608) (RPAQQ \NP.DISPLAY 202) (RPAQQ \NP.WIDEDOVEDISPLAY 243) (RPAQQ \WIDEDOVEDISPLAYWIDTH 1152) (RPAQQ \RP.AFTERDISPLAY 206) (RPAQQ \RP.AFTERDOVEDISPLAY 243) (RPAQQ \RP.DISPLAY 0) (RPAQQ \RP.TEMPDISPLAY 2561) (RPAQQ \RP.MISCLOCKED 2804) (RPAQQ \RP.STACK 768) (RPAQQ \VP.STACK 256) (RPAQQ \RP.MAP 256) (RPAQQ \NP.MAP 256) (RPAQQ \RP.IOPAGE 512) (RPAQQ \RP.DOVEIOCBPAGE 543) (RPAQQ \RP.DOVEIORGN 544) (RPAQQ \VP.DOVEIORGN 64) (RPAQQ \DOVEIORGNSIZE 64) (RPAQQ \VP.IOPAGE 255) (RPAQQ \VP.IFPAGE 5120) (RPAQQ \VP.FPTOVP 512) (RPAQQ \NP.FPTOVP 4096) (RPAQQ \RP.FPTOVP 1024) (RPAQQ \RP.STARTBUFFERS 640) (RPAQQ \VP.TYPETABLE 6144) (RPAQQ \NP.TYPETABLE 1024) (RPAQQ \RP.TYPETABLE 5120) (RPAQQ \VP.GCTABLE 5632) (RPAQQ \NP.GCTABLE 256) (RPAQQ \RP.GCTABLE 6144) (RPAQQ \VP.GCOVERFLOW 5888) (RPAQQ \NP.GCOVERFLOW 1) (RPAQQ \RP.GCOVERFLOW 6400) (RPAQQ \FP.IFPAGE 2) (RPAQQ \VP.IOCBS 1) (RPAQQ \VP.PRIMARYMAP 5122) (RPAQQ \VP.SECONDARYMAP 1280) (RPAQQ \VP.LPT 5232) (RPAQQ \VP.INITSCRATCH 8) (RPAQQ \VP.RPT 128) (RPAQQ \VP.BUFFERS 218) (RPAQQ \DL.PROCESSORBUSY 32768) (RPAQQ \DL.SETTOD 32769) (RPAQQ \DL.READTOD 32770) (RPAQQ \DL.READPID 32771) (RPAQQ \DL.BOOTBUTTON 32772) (CONSTANTS (CDRCODING 1) (\SMALLP 1) (\FIXP 2) (\FLOATP 3) (\LITATOM 4) (\LISTP 5) (\ARRAYP 6) ( \STRINGP 7) (\STACKP 8) (\CHARACTERP 9) (\VMEMPAGEP 10) (\STREAM 11) (\TT.TYPEMASK 2047) (\TT.NOREF 32768) (\TT.SYMBOLP 16384) (\TT.FIXP 8192) (\TT.NUMBERP 4096) (\TT.ATOM 2048) (\PMblockSize 32) ( \STATSsize 8) (\NumPMTpages 8) (\EmptyPMTEntry 65535) (\FirstVmemBlock 2) (\MAXVMPAGE 131069) ( \MAXVMSEGMENT 255) (\IFPValidKey 5603) (\FirstMDSPage 16382) (\MaxMDSPage 524285) ( \DefaultSecondMDSPage 65532) (\MDSIncrement 512) (\PagesPerMDSUnit 2) (\FirstArraySegment 46) ( \FirstArrayPage 11776) (\DefaultSecondArrayPage 16384) (\StackMask 57344) (\FxtnBlock 49152) ( \GuardBlock 57344) (\BFBlock 32768) (\FreeStackBlock 40960) (\NotStackBlock 0) (\MinExtraStackWords 32 ) (ERASECHARCODE 0) (\HT1CNT 1024) (\HTSTKBIT 512) (\HTCNTMASK 64512) (\HTMAINSIZE 65536) (\HTCOLLSIZE 1048576) (\HTENDFREE 1) (\HTFREEPTR 0) (\AtomHI 0) (\CHARHI 7) (\AtomHTpages 256) (\LastAtomPage 255) (\MaxAtomFrLst 65535) (\SmallPosHi 14) (\SmallNegHi 15) (\NumSmallPages 512) (\PNAME.HI 8) (\ATOM.HI 44) (\DEF.HI 10) (\VAL.HI 12) (\PLIST.HI 2) (\NumPageMapPages 256) (\MDSTTsize 1024) (\UFNTableSize 2) (\DTDSize 18) (\EndTypeNumber 2047) (\NumLPTPages 16) (\GuardStackAddr 61440) (\LastStackAddr 65534) (\STACKHI 1) (\HTMAINnpages 256) (\D1BCPLspace 0) (\D0BCPLspace 0) (\CurrentFXP 0) (\ResetFXP 1) ( \SubovFXP 2) (\KbdFXP 3) (\HardReturnFXP 4) (\GCFXP 5) (\FAULTFXP 6) (\MiscFXP 14) (\TeleRaidFXP 24) ( DCB.EM 272) (DISPINTERRUPT.EM 273) (CURSORBITMAP.EM 281) (KBDAD0.EM 65052) (KBDAD1.EM 65053) ( KBDAD2.EM 65054) (KBDAD3.EM 65055) (UTILIN.EM 65048) (CURSORX.EM 278) (CURSORY.EM 279) (MOUSEX.EM 276) (MOUSEY.EM 277) (\LispKeyMask 8192) (\BcplKeyMask 4352) (\MAIKO 3) (\DOLPHIN 4) (\DORADO 5) ( \DANDELION 6) (\DAYBREAK 8) (\VP.DISPLAY 4608) (\NP.DISPLAY 202) (\NP.WIDEDOVEDISPLAY 243) ( \WIDEDOVEDISPLAYWIDTH 1152) (\RP.AFTERDISPLAY 206) (\RP.AFTERDOVEDISPLAY 243) (\RP.DISPLAY 0) ( \RP.TEMPDISPLAY 2561) (\RP.MISCLOCKED 2804) (\RP.STACK 768) (\VP.STACK 256) (\RP.MAP 256) (\NP.MAP 256 ) (\RP.IOPAGE 512) (\RP.DOVEIOCBPAGE 543) (\RP.DOVEIORGN 544) (\VP.DOVEIORGN 64) (\DOVEIORGNSIZE 64) ( \VP.IOPAGE 255) (\VP.IFPAGE 5120) (\VP.FPTOVP 512) (\NP.FPTOVP 4096) (\RP.FPTOVP 1024) ( \RP.STARTBUFFERS 640) (\VP.TYPETABLE 6144) (\NP.TYPETABLE 1024) (\RP.TYPETABLE 5120) (\VP.GCTABLE 5632 ) (\NP.GCTABLE 256) (\RP.GCTABLE 6144) (\VP.GCOVERFLOW 5888) (\NP.GCOVERFLOW 1) (\RP.GCOVERFLOW 6400) (\FP.IFPAGE 2) (\VP.IOCBS 1) (\VP.PRIMARYMAP 5122) (\VP.SECONDARYMAP 1280) (\VP.LPT 5232) ( \VP.INITSCRATCH 8) (\VP.RPT 128) (\VP.BUFFERS 218) (\DL.PROCESSORBUSY 32768) (\DL.SETTOD 32769) ( \DL.READTOD 32770) (\DL.READPID 32771) (\DL.BOOTBUTTON 32772)) (RPAQQ \MPERRORS ((\MP.OBSOLETEVMEM 1) (\MP.INVALIDVMEM 2 "Vmem inconsistent at startup") ( \MP.IOCBPAGE 3 "No place for IOCB page at startup") (\MP.MOB 4 "Map out of bounds") (\MP.INVALIDADDR 5 ) (\MP.INVALIDVP 6) (\MP.CHAIN.UNAVAIL 7 "Unavailable page on real page table chain") (\MP.SELECTLOOP 8 "Loop in \SELECTREALPAGE") (\MP.NEWPAGE 9 "Attempt to allocate already existing page") ( \MP.NEWMAPPAGE 10 "\DONEWPAGE failed to allocate new map page") (\MP.BADLOCKED 11 "Locked page occupies a file page needed to lock another") (\MP.CLOCK0 12 "Arg to CLOCK0 not an integer box") (\MP.RESIDENT 13 "Fault on resident page") (\MP.STACKFAULT 14 "Fault on stack") (\MP.VMEMTOOLONG 16 "Attempt to extend Vmem File beyond fixed limit (8mb)") ( \MP.WRITING.LOCKED.PAGE 17 "Writing a locked page with UPDATEKEY = T") (\MP.UNINTERRUPTABLE 18 "Error in uninterruptable system code") (\MP.STACKFULL 19) (\MP.MDSFULL 20) (\MP.UNKNOWN.UFN 21) ( \MP.ATOMSFULL 22) (\MP.PNAMESFULL 23) (\MP.USECOUNTOVERFLOW 24) (\MP.MDSFULLWARNING 25) ( \MP.BADMDSFREELIST 26) (\MP.BADARRAYBLOCK 27) (\MP.BADDELETEBLOCK 28) (\MP.BADARRAYRECLAIM 29) ( \MP.BIGREFCNTMISSING 30 "PTR refcnt previously overflowed, but not found in table.") ( \MP.BIGREFCNTALREADYPRESENT 31 "PTR already in overflow table") (\MP.DELREF0 32) (\MP.PROCERROR 33) ( \MP.PROCNOFRAME 34 "Failed to build frame for PROCESS use") (\MP.32MBINUSE 35) (\MP.TOPUNWOUND 36 "Unexpected (RETTO T)") (\MP.STACKRELEASED 37) (\MP.FLUSHLOCKED 38) (\MP.MAPNOTLOCKED 39) ( \MP.UNLOCKINGMAP 40) (\MP.SWAPDISKERROR 41 "Hard Disk Error in swapper") (\MP.BADRUNTABLE 42 "Malformed run table for vmem file"))) (RPAQQ \MP.OBSOLETEVMEM 1) (RPAQ \MP.INVALIDVMEM 2 "Vmem inconsistent at startup") (RPAQ \MP.IOCBPAGE 3 "No place for IOCB page at startup") (RPAQ \MP.MOB 4 "Map out of bounds") (RPAQQ \MP.INVALIDADDR 5) (RPAQQ \MP.INVALIDVP 6) (RPAQ \MP.CHAIN.UNAVAIL 7 "Unavailable page on real page table chain") (RPAQ \MP.SELECTLOOP 8 "Loop in \SELECTREALPAGE") (RPAQ \MP.NEWPAGE 9 "Attempt to allocate already existing page") (RPAQ \MP.NEWMAPPAGE 10 "\DONEWPAGE failed to allocate new map page") (RPAQ \MP.BADLOCKED 11 "Locked page occupies a file page needed to lock another") (RPAQ \MP.CLOCK0 12 "Arg to CLOCK0 not an integer box") (RPAQ \MP.RESIDENT 13 "Fault on resident page") (RPAQ \MP.STACKFAULT 14 "Fault on stack") (RPAQ \MP.VMEMTOOLONG 16 "Attempt to extend Vmem File beyond fixed limit (8mb)") (RPAQ \MP.WRITING.LOCKED.PAGE 17 "Writing a locked page with UPDATEKEY = T") (RPAQ \MP.UNINTERRUPTABLE 18 "Error in uninterruptable system code") (RPAQQ \MP.STACKFULL 19) (RPAQQ \MP.MDSFULL 20) (RPAQQ \MP.UNKNOWN.UFN 21) (RPAQQ \MP.ATOMSFULL 22) (RPAQQ \MP.PNAMESFULL 23) (RPAQQ \MP.USECOUNTOVERFLOW 24) (RPAQQ \MP.MDSFULLWARNING 25) (RPAQQ \MP.BADMDSFREELIST 26) (RPAQQ \MP.BADARRAYBLOCK 27) (RPAQQ \MP.BADDELETEBLOCK 28) (RPAQQ \MP.BADARRAYRECLAIM 29) (RPAQ \MP.BIGREFCNTMISSING 30 "PTR refcnt previously overflowed, but not found in table.") (RPAQ \MP.BIGREFCNTALREADYPRESENT 31 "PTR already in overflow table") (RPAQQ \MP.DELREF0 32) (RPAQQ \MP.PROCERROR 33) (RPAQ \MP.PROCNOFRAME 34 "Failed to build frame for PROCESS use") (RPAQQ \MP.32MBINUSE 35) (RPAQ \MP.TOPUNWOUND 36 "Unexpected (RETTO T)") (RPAQQ \MP.STACKRELEASED 37) (RPAQQ \MP.FLUSHLOCKED 38) (RPAQQ \MP.MAPNOTLOCKED 39) (RPAQQ \MP.UNLOCKINGMAP 40) (RPAQ \MP.SWAPDISKERROR 41 "Hard Disk Error in swapper") (RPAQ \MP.BADRUNTABLE 42 "Malformed run table for vmem file") (CONSTANTS (\MP.OBSOLETEVMEM 1) (\MP.INVALIDVMEM 2 "Vmem inconsistent at startup") (\MP.IOCBPAGE 3 "No place for IOCB page at startup") (\MP.MOB 4 "Map out of bounds") (\MP.INVALIDADDR 5) ( \MP.INVALIDVP 6) (\MP.CHAIN.UNAVAIL 7 "Unavailable page on real page table chain") (\MP.SELECTLOOP 8 "Loop in \SELECTREALPAGE") (\MP.NEWPAGE 9 "Attempt to allocate already existing page") (\MP.NEWMAPPAGE 10 "\DONEWPAGE failed to allocate new map page") (\MP.BADLOCKED 11 "Locked page occupies a file page needed to lock another") (\MP.CLOCK0 12 "Arg to CLOCK0 not an integer box") (\MP.RESIDENT 13 "Fault on resident page") (\MP.STACKFAULT 14 "Fault on stack") (\MP.VMEMTOOLONG 16 "Attempt to extend Vmem File beyond fixed limit (8mb)") ( \MP.WRITING.LOCKED.PAGE 17 "Writing a locked page with UPDATEKEY = T") (\MP.UNINTERRUPTABLE 18 "Error in uninterruptable system code") (\MP.STACKFULL 19) (\MP.MDSFULL 20) (\MP.UNKNOWN.UFN 21) ( \MP.ATOMSFULL 22) (\MP.PNAMESFULL 23) (\MP.USECOUNTOVERFLOW 24) (\MP.MDSFULLWARNING 25) ( \MP.BADMDSFREELIST 26) (\MP.BADARRAYBLOCK 27) (\MP.BADDELETEBLOCK 28) (\MP.BADARRAYRECLAIM 29) ( \MP.BIGREFCNTMISSING 30 "PTR refcnt previously overflowed, but not found in table.") ( \MP.BIGREFCNTALREADYPRESENT 31 "PTR already in overflow table") (\MP.DELREF0 32) (\MP.PROCERROR 33) ( \MP.PROCNOFRAME 34 "Failed to build frame for PROCESS use") (\MP.32MBINUSE 35) (\MP.TOPUNWOUND 36 "Unexpected (RETTO T)") (\MP.STACKRELEASED 37) (\MP.FLUSHLOCKED 38) (\MP.MAPNOTLOCKED 39) ( \MP.UNLOCKINGMAP 40) (\MP.SWAPDISKERROR 41 "Hard Disk Error in swapper") (\MP.BADRUNTABLE 42 "Malformed run table for vmem file")) (GLOBALVARS \ARRAYSPACE \ARRAYSPACE2 \ATOMSPACE \AtomHashTable \SMALLPOSPSPACE \SMALLNEGSPACE \PNPSPACE \OLDATOMSPACE \DEFSPACE \VALSPACE \PLISTSPACE \PAGEMAP \PageMapTBL \InterfacePage \IOPAGE \DoveIORegion \IOCBPAGE \FPTOVP \MDSTypeTable \MISCSTATS \UFNTable \DTDSpaceBase \LISTPDTD \LOCKEDPAGETABLE \STACKSPACE \HTMAIN \HTOVERFLOW \HTBIGCOUNT \HTCOLL \DISPLAYREGION) (BLOCKRECORD MISCSTATS ((STARTTIME FIXP) (TOTALTIME FIXP) (SWAPWAITTIME FIXP) (PAGEFAULTS FIXP) ( SWAPWRITES FIXP) (DISKIOTIME FIXP) (DISKOPS FIXP) (KEYBOARDWAITTIME FIXP) (GCTIME FIXP) (NETIOTIME FIXP) (NETIOOPS FIXP) (SWAPTEMP0 FIXP) (SWAPTEMP1 FIXP) (RCLKSECOND FIXP) (SECONDSCLOCK FIXP) ( MILLISECONDSCLOCK FIXP) (BASECLOCK FIXP) (RCLKTEMP0 FIXP) (SECONDSTMP FIXP) (MILLISECONDSTMP FIXP) ( BASETMP FIXP) (EXCESSTIMETMP FIXP) (CLOCKTEMP0 FIXP) (DISKTEMP0 FIXP) (DISKTEMP1 FIXP) (TELERAIDTEMP1 FIXP) (TELERAIDTEMP2 FIXP) (TELERAIDTEMP3 FIXP) (LASTUSERACTION FIXP) (DLMOUSETIMER FIXP) (DLMOUSETEMP FIXP)) (CREATE (\ALLOCBLOCK 31))) (BLOCKRECORD IFPAGE ((CurrentFXP WORD) (* ; "First 7 items are FX values for user and 6 system contexts.") (ResetFXP WORD) (SubovFXP WORD) (KbdFXP WORD) (HardReturnFXP WORD) (GCFXP WORD) (FAULTFXP WORD) (EndOfStack WORD) (* ; "Stack high-water mark: address of guard block at current end of stack") (LVersion WORD) (* ; "Lisp version, followed by min versions of microcode and Bcpl compatible with this Lisp") (MinRVersion WORD) (MinBVersion WORD) (RVersion WORD) (* ; "Bcpl fills in the actual microcode, Bcpl versions.") ( BVersion WORD) (MachineType WORD) (MiscFXP WORD) (* ; "FX for MISC context") (Key WORD) (* ; "= IFPValidKey if vmem consistent.") (SerialNumber WORD) (* ; "Pup host number (Dorado/Dolphin)") ( EmulatorSpace WORD) (* ; "Hiloc of bcpl space (always zero now)") (ScreenWidth WORD) (NxtPMAddr WORD) (* ; "Next page to be allocated in secondary page map table") (NIL WORD) (* ; "WAS NActivePages, Length of vmem in use") (NIL WORD) (* ; "WAS NDirtyPages, not used, but maintained as = NActivePages") (filePnPMP0 WORD) (* ; "Sysout page number of first page of secondary page map table (\PAGEMAP), which is where the secondary map pages themselves live" ) (filePnPMT0 WORD) (* ; "Sysout page number of first page of primary page map table") (TELERAIDFXP WORD) (* ; "FX for TeleRaid server context") (NATIVE-START-MEM-PAGE WORD) (* ; "Unix page where native code starts") (NATIVE-LENGTH-PAGE WORD) (* ; "Unix page length of native code" ) (NATIVE-PAGE-OFFSET WORD) (* ; "Lisp Disk Page offset of native code") (UserNameAddr WORD) (* ; "Addresses in bcpl space (seg 0) of global user name and password") (UserPswdAddr WORD) (StackBase WORD) (* ; "Stack address where user stack starts") (FAULTHI WORD) (* ; "Microcode for page fault stores fault address here, then does context switch to FAULTFXP") (FAULTLO WORD) (DEVCONFIG WORD) (* ; "IT'S FOR KB,DISP TYPE") (* ; "Formerly REALPAGETABLE, back when it was always in Bcpl space.") (RPTSIZE WORD) (* ; "Number of entries in Real Page Table") (RPOFFSET WORD) (* ; "RP-RPOFFSET => index in table") ( MAXETHERBYTES WORD) (* ; "Number of bytes available in a pbi, not counting encapsulation (Dorado)") ( EMBUFVP WORD) (* ; "VP of a one-page emulator buffer") (NSHost0 WORD) (* ; "Machine's 48-bit NS host number. Lisp manages to compute this on all machines except Dolphin, where Bcpl fills it in." ) (NSHost1 WORD) (NSHost2 WORD) (MDSZone WORD) (* ; "Obsolete -- was used by Dolphin 10MB network code.") (MDSZoneLength WORD) (EMUBUFFERS WORD) (* ; "Buffer space in segment 0 for swapping/disk activity") (EMUBUFLENGTH WORD) (* ; "Number of words of said space") (* ;; "The following 2 are available if NEW_STOARGE is specified in C") (ProcessSize WORD) (* ; "Process size for which can be use as LISP space") (StorageFullState WORD) (* ; "Save last storage state") (ISFMAP WORD) (* ;; "The following 4 are for \MISCAPPLY* -- note that they are not ref counted, so don't pass the only pointer to something this way!" ) (MISCSTACKFN FULLXPOINTER) (MISCSTACKARG1 FULLXPOINTER) (MISCSTACKARG2 FULLXPOINTER) ( MISCSTACKRESULT FULLXPOINTER) (NRealPages WORD) (* ; "Number pages of real memory") ( LastLockedFilePage WORD) (* ; "Last page of vmem that is locked--booting has to load at least that far.") (LastDominoFilePage WORD) (* ; "Last sysout page reserved for Dandelion microcode") (FPTOVPStart WORD) (* ; "Sysout page where FPTOVP starts") (FAKEMOUSEBITS WORD) (* ; "Used to implement fake middle button on 2-button Dandelion.") (DL24BitAddressable WORD) (* ; "non-zero if DLion capable of addressing 32MB virtual memory") (REALPAGETABLEPTR FULLXPOINTER) (* ; "Address of real page table, set up by Bcpl (but not chained together)") (SYSDISK WORD) (* ; "WAS DLLastVmemPage, DLion booting microcode puts length of vmem file here.") (FullSpaceUsed WORD) (* ; "Non-zero if vmem beyond initial 8MB has been allocated.") (FAKEKBDAD4 WORD) (FAKEKBDAD5 WORD) (* ;; "The following 9 items (6 words and 3 pointers) are 3 3-element vectors for the Dorado extended virtual memory code--indexed by 0,1,2 according to which of up to 3 virtual memory backing files you're working with." ) (XVmemFmapBase WORD) (* ; "Bcpl stores isf map pointer to each partition here. First is redundant with ISFMAP field above.") ( NIL WORD) (NIL WORD) (XVmemFmapHighBase WORD) (* ; "Bcpl stores the highest vm page contained in this or earlier partition.") (NIL WORD) (NIL WORD) ( XVmemDiskBase FULLXPOINTER) (* ; "Lisp stores disk objects here (just a convenient non-faulting contiguous block of storage).") (NIL FULLXPOINTER) (NIL FULLXPOINTER) (DLLastVmemPage FIXP) (* ; "DLion booting microcode puts length of vmem file here.") (NActivePages FIXP) (* ; "Length of vmem in use") (NDirtyPages FIXP) (* ; "not used, but maintained as = NActivePages")) ( CREATE (\ALLOCBLOCK 43))) (BLOCKRECORD IOPAGE ((NIL 18 WORD) (DLMAINTPANEL WORD) (DLFLOPPYCMD WORD) (DLTTYPORTCMD WORD) ( DLPROCESSORCMD WORD) (NEWMOUSESTATE WORD) (DLBEEPCMD WORD) (DLRS232CMISCCOMMAND WORD) (DLRS232CPUTFLAG WORD) (DLRS232CGETFLAG WORD) (NIL 6 WORD) (DLFLOPPY WORD) (DLTTYOUT WORD) (NIL 1 WORD) (DLTTYIN WORD) (NIL 1 WORD) (DLPROCESSOR2 WORD) (DLPROCESSOR1 WORD) (DLPROCESSOR0 WORD) (NEWMOUSEX WORD) (NEWMOUSEY WORD) (DLBEEPFREQ WORD) (DLRS232CPARAMETERCSBLO WORD) (DLRS232CPARAMETERCSBHI WORD) ( DLRS232CSETRS366STATUS 3 WORD) (DLRS232CPUTCSBLO WORD) (DLRS232CPUTCSBHI WORD) (DLRS232CGETCSBLO WORD) (DLRS232CGETCSBHI WORD) (DLRS232CDEVICESTATUS WORD) (DLRS232CPARAMETEROUTCOME WORD) (DLTODVALID WORD) (DLTODLO WORD) (DLTODHI WORD) (DLTODLO2 WORD) (DLMOUSEX WORD) (DLMOUSEY WORD) (DLUTILIN WORD) ( DLKBDAD0 WORD) (DLKBDAD1 WORD) (DLKBDAD2 WORD) (DLKBDAD3 WORD) (DLKBDAD4 WORD) (DLKBDAD5 WORD) ( DLLSEPIMAGECSB 32 WORD) (DLIOPHARDWARECONFIG WORD) (NIL 11 WORD) (DLRS232CPARAMETERCSBLO.11 WORD) ( DLRS232CPARAMETERCSBHI.11 WORD) (DLRS232CSETRS366STATUS.11 14 WORD) (NIL 60 WORD) (DLMAGTAPE 4 WORD) ( DLETHERNET 12 WORD) (NIL 31 WORD) (DLDISPINTERRUPT WORD) (DLDISPCONTROL WORD) (DLDISPBORDER WORD) ( DLCURSORX WORD) (DLCURSORY WORD) (DLCURSORBITMAP 16 WORD)) (ACCESSFNS IOPAGE ((DLCURSORBITMAPPTR ( \ADDBASE DATUM 240)) (DLCURSORYPTR (\ADDBASE DATUM 239)) (DLCURSORXPTR (\ADDBASE DATUM 238)) ( DLDISPINTERRUPTPTR (\ADDBASE DATUM 235)) (DLETHERNETPTR (\ADDBASE DATUM 192)) (DLKBDAD5PTR (\ADDBASE DATUM 67)) (DLKBDAD4PTR (\ADDBASE DATUM 66)) (DLKBDAD3PTR (\ADDBASE DATUM 65)) (DLKBDAD2PTR (\ADDBASE DATUM 64)) (DLKBDAD1PTR (\ADDBASE DATUM 63)) (DLKBDAD0PTR (\ADDBASE DATUM 62)) (DLUTILINPTR (\ADDBASE DATUM 61)) (DLMOUSEYPTR (\ADDBASE DATUM 60)) (DLMOUSEXPTR (\ADDBASE DATUM 59)) (DLTODLOPTR (\ADDBASE DATUM 56)) (DLMAINTPANELPTR (\ADDBASE DATUM 18)))) (CREATE (\ALLOCBLOCK 128))) (PUTPROPS EMADDRESS MACRO (ARGS ((LAMBDA (ADDR) (COND ((EQ \D1BCPLspace \D0BCPLspace) (LIST ( BIG-VMEM-CODE (LIST (QUOTE OPCODES) (QUOTE GCONST) 0 0 (LRSH ADDR 8) (LOGAND ADDR 255)) (LIST (QUOTE OPCODES) (QUOTE GCONST) 0 (LRSH ADDR 8) (LOGAND ADDR 255))))) (T (BQUOTE (\VAG2 (fetch EmulatorSpace of \InterfacePage) %, ADDR))))) (EVAL (CAR ARGS))))) (PUTPROPS EMGETBASE MACRO ((OFFSET) (\GETBASE (EMADDRESS OFFSET) 0))) (PUTPROPS EMPUTBASE MACRO ((OFFSET VAL) (\PUTBASE (EMADDRESS OFFSET) 0 VAL))) (PUTPROPS EMULATORSEGMENT MACRO (NIL (fetch EmulatorSpace of \InterfacePage))) (PUTPROPS EMPOINTER MACRO (X (COND ((NEQ \D1BCPLspace \D0BCPLspace) (LIST (QUOTE \VAG2) (QUOTE (fetch (IFPAGE EmulatorSpace) of \InterfacePage)) (CAR X))) ((ZEROP (CAR X)) NIL) (T (LIST (QUOTE \VAG2) \D0BCPLspace (CAR X)))))) (PUTPROPS EMADDRESSP MACRO (X (LIST (QUOTE EQ) (LIST (QUOTE \HILOC) (CAR X)) (COND ((EQ \D1BCPLspace \D0BCPLspace) \D0BCPLspace) (T (QUOTE (fetch (IFPAGE EmulatorSpace) of \InterfacePage))))))) (PUTPROP (QUOTE LLPARAMS) (QUOTE IMPORTDATE) (IDATE "31-Jan-98 09:16:51")) (DATATYPE COMPILED-CLOSURE (FNHEADER ENVIRONMENT)) (RPAQQ \COMPILED-CLOSURE 13) (CONSTANTS \COMPILED-CLOSURE) (PUTPROPS \EXTENDED.EQP MACRO (OPENLAMBDA (X Y) (COND ((EQ (NTYPX X) (NTYPX Y)) (SELECTC (NTYPX X) ( \STACKP (EQ (fetch (STACKP EDFXP) of X) (fetch (STACKP EDFXP) of Y))) (\COMPILED-CLOSURE (EQDEFP X Y)) NIL))))) (PUTPROPS DPUTCODE MACRO ((FN CA SIZE) (SELECTQ (SYSTEMTYPE) (D (DEFC FN CA)) (/PUTPROP FN (QUOTE DCODE) CA)))) (PUTPROPS MCODEP MACRO ((X) (OR (ARRAYP X) (AND (LITATOM X) (ARRAYP (SELECTQ (SYSTEMTYPE) (D (GETD X)) (GETPROP X (QUOTE DCODE)))))))) (PUTPROPS CODELT MACRO ((CA N) (\BYTELT CA N))) (PUTPROPS CODELT2 MACRO (OPENLAMBDA (DEF LC) (LOGOR (LLSH (CODELT DEF LC) BITSPERBYTE) (CODELT DEF ( ADD1 LC))))) (PUTPROPS CODESETA2 MACRO (OPENLAMBDA (DEF LC VALUE) (CODESETA DEF LC (LRSH VALUE BITSPERBYTE)) ( CODESETA DEF (ADD1 LC) (IMOD VALUE (CONSTANT (LLSH 1 BITSPERBYTE)))))) (PUTPROPS CODESETA MACRO ((CA N NV) (\BYTESETA CA N NV))) (PUTPROPS BYTESPERNAMEENTRY MACRO (NIL (UNFOLD (CONSTANT (WORDSPERNAMEENTRY)) BYTESPERWORD))) (PUTPROPS BYTESPERNTOFFSETENTRY MACRO (NIL (UNFOLD (WORDSPERNAMEENTRY) BYTESPERWORD))) (PUTPROPS GETNAMEENTRY MACRO (OPENLAMBDA (DEF LC) (LET ((NUMBER 0)) (* ;; "Must ALWAYS be called with DEF really being either a FNHEADER or a nametable pseudo-fnheader. Never use addbase to offset from it. This is because CODEBASEELT checks the BYTESWAPPED flag in the fnheader...." ) (FOR I FROM 0 TO (CONSTANT (SUB1 (BYTESPERNAMEENTRY))) DO (SETQ NUMBER (LOGOR (LLSH NUMBER BITSPERBYTE) (CODEBASELT DEF (IPLUS LC I))))) NUMBER))) (PUTPROPS GETNTFLAGS MACRO (OPENLAMBDA (DEF LC) (CODEBASELT DEF LC))) (PUTPROPS GETNTOFFSET MACRO (OPENLAMBDA (DEF LC) (NTSLOT-OFFSET (GETNTOFFSETENTRY DEF LC)))) (PUTPROPS GETNTOFFSETENTRY MACRO (OPENLAMBDA (DEF LC) (LET ((NUMBER 0)) (for I from 0 to (CONSTANT ( SUB1 (BYTESPERNTOFFSETENTRY))) do (SETQ NUMBER (LOGOR (LLSH NUMBER BITSPERBYTE) (CODEBASELT DEF (IPLUS LC I))))) NUMBER))) (PUTPROPS GETNTTAG MACRO (OPENLAMBDA (DEF LC) (CODEBASELT DEF (ADD1 LC)))) (PUTPROPS SETNAMEENTRY MACRO (OPENLAMBDA (DEF LC VALUE) (FOR I FROM (CONSTANT (SUB1 (BYTESPERNAMEENTRY ))) TO 0 BY -1 DO (CODEBASESETA DEF (IPLUS LC I) (LOGAND VALUE (CONSTANT (SUB1 (LLSH 1 BITSPERBYTE)))) ) (SETQ VALUE (LRSH VALUE BITSPERBYTE))))) (PUTPROPS WORDSPERNTOFFSETENTRY MACRO (NIL (WORDSPERNAMEENTRY))) (PUTPROPS NTSLOT-OFFSET MACRO ((X) (LOGAND 255 X))) (DEFMACRO NEW-SYMBOL-CODE (NEW-SYMBOL-FORM OLD-SYMBOL-FORM) (* ;; "Use one form or another, depending on whether we're compiling for new 3-byte atoms or old 2-byte atom numbers." ) (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) (* ; "NEW ATOMS") (BQUOTE (\, NEW-SYMBOL-FORM ))) (T (BQUOTE (\, OLD-SYMBOL-FORM))))) (DEFOPTIMIZER BIG-VMEM-CODE (NEW-SYMBOL-FORM OLD-SYMBOL-FORM &ENVIRONMENT ENV) (* ;; "Allow for differences between 4-byte pointers and 3-byte pointers..") (COND ((FMEMB :4-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\, NEW-SYMBOL-FORM))) (T (BQUOTE (\, OLD-SYMBOL-FORM) )))) (DEFOPTIMIZER SETSTKNAMEENTRY (CODEARRAY OFFSET VAL &ENVIRONMENT ENV) (* ;; "Set the name entry for a name-table entry.") (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (LET ((BASE (fetch (ARRAYP BASE) of (\, CODEARRAY))) (VALUE (\, VAL))) (COND ((FIXP VALUE) (* ; "A 20-byte atom #. Make it an atom.") (\PUTBASEPTR BASE (\, OFFSET) (\VAG2 \AtomHI VALUE) )) (T (* ; "A 3-byte atom. Just use it.") (\PUTBASEPTR BASE (\, OFFSET) VALUE)))))) (T (BQUOTE (LET ( (BASE (fetch (ARRAYP BASE) of (\, CODEARRAY)))) (\PUTBASE BASE (\, OFFSET) (\, VAL))))))) (DEFOPTIMIZER SETSTKNTOFFSETENTRY (BASE OFFSET VAL &ENVIRONMENT ENV) (* ;; "Set the offset entry for a name-table entry.") (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\PUTBASEFIXP (\, BASE) (\, OFFSET) (\, VAL)))) (T (BQUOTE (\PUTBASE (\, BASE) (\, OFFSET) (\, VAL)))))) (DEFOPTIMIZER GETSTKNAMEENTRY (BASE OFFSET &ENVIRONMENT ENV) (* ;; "Get a name entry out of a name table. BASE is the start of the name table; OFFSET is in words, not bytes or name entries." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\GETBASEPTR (\, BASE) (\, OFFSET)))) (T (BQUOTE (\GETBASE (\, BASE) (\, OFFSET)))))) (DEFOPTIMIZER GETSTKNTOFFSETENTRY (BASE OFFSET &ENVIRONMENT ENV) (COND ((FMEMB :3-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\GETBASEFIXP (\, BASE) (\, OFFSET)))) (T (BQUOTE ( \GETBASE (\, BASE) (\, OFFSET)))))) (DEFOPTIMIZER WORDSPERNAMEENTRY (&ENVIRONMENT ENV) (* ;; "Number of words in a name-table %"Name%" entry--the space for the symbol. 1 for old symbol systems, 2 for 3-byte-atom systesm." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (PROGN 2))) ((AND CROSSCOMPILING (FMEMB :3-BYTE-INIT (COMPILER::ENV-TARGET-ARCHITECTURE ENV))) (BQUOTE (PROGN 2))) (T ( BQUOTE (PROGN 1))))) (DEFOPTIMIZER SETSTKNTOFFSET (BASE OFFSET TYPE VAL &ENVIRONMENT ENV) (* ;; "Set the offset entry for a name-table entry, from the symbol to fill in plus the variable-type marker value SHIFTED LEFT 14 BITS ALREADY." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (PROGN (\FIXCODENUM (\, BASE) (IDIFFERENCE (\, OFFSET) BYTESPERWORD) (\, TYPE)) (\FIXCODENUM (\, BASE) (\, OFFSET) (\, VAL))))) (T (BQUOTE (\FIXCODENUM (\, BASE) (\, OFFSET) (IPLUS (\, TYPE) (\, VAL))))))) (DEFOPTIMIZER SETSTKNAME-RAW (BASE OFFSET VAL &ENVIRONMENT ENV) (* ;; "Set the name entry for a name-table entry. This version works with raw storage, as opposed to SETSTKNAMEENTRY, which works on an ARRAYP." ) (* ;; "If this optimizer changes, change SETSTKNAMEENTRY as well.") (COND ((FMEMB :3-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (LET ((VALUE (\, VAL))) (COND ((FIXP VALUE) (* ; "A 20-byte atom #. Make it an atom.") (\PUTBASEPTR (\, BASE) (\, OFFSET) (\VAG2 \AtomHI VALUE))) (T ( * ; "A 3-byte atom. Just use it.") (\PUTBASEPTR (\, BASE) (\, OFFSET) VALUE)))))) (T (BQUOTE ( \PUTBASE (\, BASE) (\, OFFSET) (\, VAL)))))) (DEFOPTIMIZER SETSTKNTOFFSET-RAW (BASE OFFSET TYPE VAL &ENVIRONMENT ENV) (* ;; "Set the offset entry for a name-table entry. This version works on raw storage, vs SETSTKNAMEOFFSETENTRY, which is supposed to work on codearrays. Any changes here should be made there, as well. TYPE must already be shifted left by 14 bits." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (PROGN (\PUTBASE (\, BASE) ( \, OFFSET) (\, TYPE)) (\PUTBASE (\, BASE) (IPLUS (\, OFFSET) 1) (\, VAL))))) (T (BQUOTE (\PUTBASE (\, BASE) (\, OFFSET) (IPLUS (\, TYPE) (\, VAL))))))) (DEFOPTIMIZER NEW-SYMBOL-CODE (NEW-SYMBOL-FORM OLD-SYMBOL-FORM &ENVIRONMENT ENV) (* ;; "Allow for differences between 3-byte atoms and 2-byte atoms.") (COND ((FMEMB :3-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\, NEW-SYMBOL-FORM))) (T (BQUOTE (\, OLD-SYMBOL-FORM) )))) (DEFOPTIMIZER MAKE-NTENTRY (TYPE OFFSET &ENVIRONMENT ENV) (COND ((FMEMB :3-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (IPLUS (CONSTANT (LLSH (\, TYPE) 16)) (\, OFFSET)))) ( T (BQUOTE (IPLUS (CONSTANT (\, TYPE)) (\, OFFSET)))))) (DEFOPTIMIZER NULL-NTENTRY (VALUE &ENVIRONMENT ENV) (* ;; "Predicate: Is VALUE a null entry in a name table? I.e., does it result from fetching the entry at the end that`s all zeros? For 2-byte atoms, that's the same as being zero. For 3-byte atoms, it's the same as being NIL." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (NULL (\, VALUE)))) (T ( BQUOTE (EQ (\, VALUE) 0))))) (DEFOPTIMIZER NTSLOT-VARTYPE (X &ENVIRONMENT ENV) (* ;; "Given the contents of a name-table Offset entry, return the variable-type bits at the top of the entry. THE RESULT IS RETURNED SHEFTED LEFT 14 BITS, THE USUAL REPRESENTATION." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (LOGAND 49153 (LRSH (\, X) 16 )))) (T (BQUOTE (LOGAND (\, X) 49152))))) (ACCESSFNS CODEARRAY ((STKMIN (CODELT2 DATUM 0) (CODESETA2 DATUM 0 NEWVALUE)) (NA (SIGNED (CODELT2 DATUM 2) BITSPERWORD) (CODESETA2 DATUM 2 (UNSIGNED NEWVALUE BITSPERWORD))) (PV (SIGNED (CODELT2 DATUM 4) BITSPERWORD) (CODESETA2 DATUM 4 (UNSIGNED NEWVALUE BITSPERWORD))) (STARTPC (CODELT2 DATUM 6) ( CODESETA2 DATUM 6 NEWVALUE)) (ARGTYPE (LOGAND (LRSH (CODELT DATUM 8) 4) 3) (CODESETA DATUM 8 (LOGOR ( LOGAND (CODELT DATUM 8) 207) (LLSH (LOGAND NEWVALUE 3) 4)))) (FRAMENAME (\VAG2 (LOGAND (CODELT2 DATUM 8) 4095) (CODELT2 DATUM 10)) (\FIXCODEPTR DATUM 11 (EVQ NEWVALUE))) (NTSIZE (CODELT2 DATUM 12) ( CODESETA2 DATUM 12 NEWVALUE)) (NLOCALS (CODELT DATUM 14) (CODESETA DATUM 14 NEWVALUE)) (FVAROFFSET ( CODELT DATUM 15) (CODESETA DATUM 15 NEWVALUE))) (ACCESSFNS CODEARRAY ((LSTARP (ILESSP (fetch ( CODEARRAY NA) of DATUM) 0)) (OVERHEADWORDS (PROGN 8)) (ALIGNED (IPLUS (fetch (CODEARRAY NTSIZE) of DATUM) (fetch (CODEARRAY OVERHEADWORDS) of T))) (FIXED NIL (replace (CODEARRAY STKMIN) of DATUM with ( \STKMIN DATUM))) (FRAMENAME# (PROGN 8))))) (RECORD OPCODE (OP# OPCODENAME OPNARGS OPPRINT LEVADJ UFNFN UNIMPL)) (GLOBALVARS \OPCODES) (RPAQQ PVARCODE 32768) (RPAQQ FVARCODE 49152) (RPAQQ IVARCODE 0) (RPAQQ VARCODEMASK 49152) (CONSTANTS PVARCODE FVARCODE IVARCODE VARCODEMASK) (RPAQQ \NT.IVARCODE 0) (RPAQQ \NT.PVARCODE 2) (RPAQQ \NT.FVARCODE 3) (CONSTANTS \NT.IVARCODE \NT.PVARCODE \NT.FVARCODE) (PUTPROP (QUOTE LLCODE) (QUOTE IMPORTDATE) (IDATE "19-Jan-93 10:45:33")) (RPAQQ \ERRORMESSAGELIST ("SYSTEM ERROR" " " "STACK OVERFLOW" "ILLEGAL RETURN" "ARG NOT LIST" "HARD DISK ERROR" "ATTEMPT TO SET NIL OR T" "ATTEMPT TO RPLAC NIL" "UNDEFINED OR ILLEGAL GO" "FILE WON'T OPEN" "NON-NUMERIC ARG" "ATOM TOO LONG" "ATOM HASH TABLE FULL" "FILE NOT OPEN" "ARG NOT LITATOM" "! too many files open" "END OF FILE" "ERROR" "BREAK" "ILLEGAL STACK ARG" "FAULT IN EVAL" "ARRAYS FULL" "FILE SYSTEM RESOURCES EXCEEDED" "FILE NOT FOUND" "BAD SYSOUT FILE" "UNUSUAL CDR ARG LIST" "HASH TABLE FULL" "ILLEGAL ARG" "ARG NOT ARRAY" "ILLEGAL OR IMPOSSIBLE BLOCK" "STACK PTR HAS BEEN RELEASED" "STORAGE FULL" "ATTEMPT TO USE ITEM OF INCORRECT TYPE" "ILLEGAL DATA TYPE NUMBER" "DATA TYPES FULL" "ATTEMPT TO BIND NIL OR T" "! too many user interrupt characters" "! read-macro context error" "ILLEGAL READTABLE" "ILLEGAL TERMINAL TABLE" "! swapblock too big for buffer" "PROTECTION VIOLATION" "BAD FILE NAME" "USER BREAK" "UNBOUND ATOM" "UNDEFINED CAR OF FORM" "UNDEFINED FUNCTION" "CONTROL-E" "FLOATING UNDERFLOW" "FLOATING OVERFLOW" "OVERFLOW" "ARG NOT HARRAY" "TOO MANY ARGUMENTS")) (DEFOPTIMIZER LISPERROR (MESSAGE ARG) (BQUOTE (\LISPERROR (\, ARG) (\, (CL:IF (CL:STRINGP MESSAGE) ( FOR X IN \ERRORMESSAGELIST AS I FROM 0 WHEN (CL:EQUAL X MESSAGE) DO (RETURN I) FINALLY (RETURN (HELP "Unknown error message" (LIST MESSAGE ARG)))) MESSAGE))))) (PUTPROP (QUOTE AERROR) (QUOTE IMPORTDATE) (IDATE "16-May-90 11:58:35")) (RECORD BASEBYTESTREAM STREAM (SUBRECORD STREAM) (ACCESSFNS ((BIASOFFST (fetch (STREAM FW6) of DATUM) (replace (STREAM FW6) of DATUM with NEWVALUE)) (BBSNCHARS (fetch (STREAM FW7) of DATUM) (replace ( STREAM FW7) of DATUM with NEWVALUE)) (WRITEXTENSIONFN (fetch (STREAM F1) of DATUM) (replace (STREAM F1 ) of DATUM with NEWVALUE))))) (PUTPROPS \INSTREAMARG MACRO ((STRM NOERRORFLG) (\GETSTREAM STRM (QUOTE INPUT) NOERRORFLG))) (PUTPROPS \OUTSTREAMARG MACRO ((STRM NOERRORFLG) (\GETSTREAM STRM (QUOTE OUTPUT) NOERRORFLG))) (PUTPROPS \STREAMARG MACRO (OPENLAMBDA (STRM NOERRORFLG) (COND (NOERRORFLG (\GETSTREAM STRM NIL T)) (T (\DTEST STRM (QUOTE STREAM)))))) (PUTPROP (QUOTE AOFD) (QUOTE IMPORTDATE) (IDATE "13-Sep-90 16:39:58")) (PUTPROPS .SPACECHECK. MACRO ((STRM N) (AND \THISFILELINELENGTH (IGREATERP (IPLUS N (fetch CHARPOSITION of STRM)) \THISFILELINELENGTH) (FRESHLINE STRM)))) (PUTPROPS \CHECKRADIX MACRO (LAMBDA (R) (COND ((OR (NOT (SMALLP R)) (ILESSP R 1) (IGREATERP R 36)) ( \INVALID.RADIX R)) (T R)))) (PUTPROPS \XCCSFILEOUTCHARFN MACRO ((OUTSTREAM CHARCODE) (* ;;; "Encoder for XCCS format. Default decoder.") (COND ((EQ CHARCODE (CHARCODE EOL)) (COND ((NOT ( \RUNCODED OUTSTREAM)) (* ; "Charset is a constant 0") (\BOUT OUTSTREAM (\CHARSET (CHARCODE EOL)))) (( EQ (\CHARSET (CHARCODE EOL)) (ffetch (STREAM CHARSET) of OUTSTREAM))) (T (\BOUT OUTSTREAM NSCHARSETSHIFT) (\BOUT OUTSTREAM (freplace (STREAM CHARSET) of OUTSTREAM with (\CHARSET (CHARCODE EOL) ))))) (\BOUT OUTSTREAM (SELECTC (ffetch EOLCONVENTION of OUTSTREAM) (CR.EOLC (CHARCODE CR)) (LF.EOLC ( CHARCODE LF)) (CRLF.EOLC (\BOUT OUTSTREAM (CHARCODE CR)) (* ;; "Don't put out high-order byte preceding LF. The CRLF is EOL only if the bytes are immediately adjacent in the stream, with no additional encoding bytes" ) (CHARCODE LF)) (SHOULDNT))) (freplace CHARPOSITION of OUTSTREAM with 0)) (T (COND ((NOT (\RUNCODED OUTSTREAM)) (\BOUT OUTSTREAM (\CHARSET CHARCODE)) (\BOUT OUTSTREAM (\CHAR8CODE CHARCODE))) ((EQ ( \CHARSET CHARCODE) (ffetch (STREAM CHARSET) of OUTSTREAM)) (\BOUT OUTSTREAM (\CHAR8CODE CHARCODE))) (T (\BOUT OUTSTREAM NSCHARSETSHIFT) (\BOUT OUTSTREAM (freplace (STREAM CHARSET) of OUTSTREAM with ( \CHARSET CHARCODE))) (\BOUT OUTSTREAM (\CHAR8CODE CHARCODE)))) (freplace CHARPOSITION of OUTSTREAM with (PROGN (* ; "Ugh. Don't overflow") (IPLUS16 (ffetch CHARPOSITION of OUTSTREAM) 1))))))) (PUTPROP (QUOTE APRINT) (QUOTE IMPORTDATE) (IDATE " 6-Dec-91 11:43:22")) (GLOBALVARS \BCPLDISPLAY) (ACCESSFNS LINEBUFFER ((LPARCOUNT (fetch FW6 of DATUM) (replace FW6 of DATUM with NEWVALUE)) ( LBRKCOUNT (fetch FW7 of DATUM) (replace FW7 of DATUM with NEWVALUE)) (LINEBUFSTATE (fetch F5 of DATUM) (replace F5 of DATUM with NEWVALUE)) (* ; "F4 is free. EJS, 7/8/85") (KEYBOARDSTREAM (fetch F2 of DATUM) (replace F2 of DATUM with NEWVALUE)) (PEEKEDCHAR (fetch F3 of DATUM) (replace F3 of DATUM with NEWVALUE)) (* ; "Character read by PEEKC") (LBFLAGS (fetch FW9 of DATUM) (replace FW9 of DATUM with NEWVALUE)) (* ;; "True if peeked char was echoed when peeked. Could use this to determine whether to echo later or not, but that would be incompatible with Interlisp-10, so this field not used" )) (ACCESSFNS LINEBUFFER ((LBFLAGBASE (LOCF (fetch LBFLAGS of DATUM)))) (BLOCKRECORD LBFLAGBASE (( PEEKEDECHOFLG FLAG) (INSTRINGP FLAG))))) (RPAQQ LINEBUFFERSTATES (FILLING.LBS READING.LBS RETYPING.LBS)) (RPAQQ FILLING.LBS 0) (RPAQQ READING.LBS 1) (RPAQQ RETYPING.LBS 2) (CONSTANTS FILLING.LBS READING.LBS RETYPING.LBS) (PUTPROPS \INTERMP MACRO ((OFD) (EQ OFD \LINEBUF.OFD))) (PUTPROPS \OUTTERMP MACRO ((OFD) (EQ OFD \TERM.OFD))) (GLOBALVARS \DEFAULTLINEBUF) (PUTPROP (QUOTE ATERM) (QUOTE IMPORTDATE) (IDATE "16-May-90 12:08:04")) (DATATYPE HARRAYP ((NULLSLOTS WORD) (* ; "Number of NIL-NIL slots, which break chains") (LASTINDEX WORD) (* ; "Slot offset of last slot. Used in probe computations computations. Microcode support for \ADDBASE4 would help" ) (HARRAYPBASE POINTER) (RECLAIMABLE FLAG) (* ; "True if keys can go away when no other refs") ( OVERFLOWACTION POINTER) (NUMSLOTS WORD) (* ; "The maximum number of logical slots--returned by HARRAYSIZE") (NUMKEYS WORD) (* ; "The number of distinct keys in the array") (HASHBITSFN POINTER) (EQUIVFN POINTER) (HASHUSERDATA POINTER))) (PUTPROPS \EQHASHINGBITS MACRO (OPENLAMBDA (X) (* ; "Spread out objects whose low bits are in small arithmetic progression, esp atoms") (LOGXOR (\HILOC X) (LOGXOR (LLSH (LOGAND (\LOLOC X) 8191) 3) (LRSH (\LOLOC X) 9))))) (PUTPROPS \ADDBASE2 MACRO (OPENLAMBDA (BASE N) (\ADDBASE (\ADDBASE BASE N) N))) (PUTPROPS \ADDBASE4 MACRO (OPENLAMBDA (BASE N) (\ADDBASE2 (\ADDBASE2 BASE N) N))) (PUTPROPS HUNKSIZEFROMNUMBER MACRO ((NTYPX) (FOLDLO (fetch DTDSIZE of (\GETDTD NTYPX)) WORDSPERCELL))) (PUTPROPS \BYTELT DMACRO (OPENLAMBDA (A J) (\GETBASEBYTE (fetch (ARRAYP BASE) of A) (IPLUS (fetch ( ARRAYP OFFST) of A) J)))) (PUTPROPS \BYTESETA DMACRO (OPENLAMBDA (A J V) (\PUTBASEBYTE (fetch (ARRAYP BASE) of A) (IPLUS (fetch (ARRAYP OFFST) of A) J) V))) (PUTPROPS \WORDELT DMACRO (OPENLAMBDA (A J) (CHECK (AND (ARRAYP A) (EQ 0 (fetch (ARRAYP ORIG) of A)) ( EQ \ST.POS16 (fetch (ARRAYP TYP) of A)))) (CHECK (IGREATERP (fetch (ARRAYP LENGTH) of A) J)) (\GETBASE (fetch (ARRAYP BASE) of A) (IPLUS (fetch (ARRAYP OFFST) of A) J)))) (RPAQQ BLOCKGCTYPECONSTANTS ((CODEBLOCK.GCT 2) (PTRBLOCK.GCT 1) (UNBOXEDBLOCK.GCT 0))) (RPAQQ CODEBLOCK.GCT 2) (RPAQQ PTRBLOCK.GCT 1) (RPAQQ UNBOXEDBLOCK.GCT 0) (CONSTANTS (CODEBLOCK.GCT 2) (PTRBLOCK.GCT 1) (UNBOXEDBLOCK.GCT 0)) (RPAQQ ARRAYCONSTANTS (\ArrayBlockHeaderCells \ArrayBlockHeaderWords \ArrayBlockTrailerCells \ArrayBlockTrailerWords (\ArrayBlockOverheadCells (IPLUS \ArrayBlockHeaderCells \ArrayBlockTrailerCells)) (\ArrayBlockOverheadWords (IPLUS \ArrayBlockHeaderWords \ArrayBlockTrailerWords)) \ArrayBlockLinkingCells (\MinArrayBlockSize (IPLUS \ArrayBlockOverheadCells \ArrayBlockLinkingCells)) (\MaxArrayBlockSize 65535) (\MaxArrayNCells (IDIFFERENCE \MaxArrayBlockSize \ArrayBlockOverheadCells)) \MaxArrayLen (\ABPASSWORDSHIFT 3) (\ArrayBlockPassword (LRSH 43690 \ABPASSWORDSHIFT)) (\FreeArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) (LLSH UNBOXEDBLOCK.GCT 1))) (\UsedArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) 1)) ( \CodeArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) (LLSH CODEBLOCK.GCT 1) 1)))) (RPAQQ \ArrayBlockHeaderCells 1) (RPAQQ \ArrayBlockHeaderWords 2) (RPAQQ \ArrayBlockTrailerCells 1) (RPAQQ \ArrayBlockTrailerWords 2) (RPAQ \ArrayBlockOverheadCells (IPLUS \ArrayBlockHeaderCells \ArrayBlockTrailerCells)) (RPAQ \ArrayBlockOverheadWords (IPLUS \ArrayBlockHeaderWords \ArrayBlockTrailerWords)) (RPAQQ \ArrayBlockLinkingCells 2) (RPAQ \MinArrayBlockSize (IPLUS \ArrayBlockOverheadCells \ArrayBlockLinkingCells)) (RPAQQ \MaxArrayBlockSize 65535) (RPAQ \MaxArrayNCells (IDIFFERENCE \MaxArrayBlockSize \ArrayBlockOverheadCells)) (RPAQQ \MaxArrayLen 65535) (RPAQQ \ABPASSWORDSHIFT 3) (RPAQ \ArrayBlockPassword (LRSH 43690 \ABPASSWORDSHIFT)) (RPAQ \FreeArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) (LLSH UNBOXEDBLOCK.GCT 1)) ) (RPAQ \UsedArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) 1)) (RPAQ \CodeArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) (LLSH CODEBLOCK.GCT 1) 1)) (CONSTANTS \ArrayBlockHeaderCells \ArrayBlockHeaderWords \ArrayBlockTrailerCells \ArrayBlockTrailerWords (\ArrayBlockOverheadCells (IPLUS \ArrayBlockHeaderCells \ArrayBlockTrailerCells)) (\ArrayBlockOverheadWords (IPLUS \ArrayBlockHeaderWords \ArrayBlockTrailerWords)) \ArrayBlockLinkingCells (\MinArrayBlockSize (IPLUS \ArrayBlockOverheadCells \ArrayBlockLinkingCells)) (\MaxArrayBlockSize 65535) (\MaxArrayNCells (IDIFFERENCE \MaxArrayBlockSize \ArrayBlockOverheadCells)) \MaxArrayLen (\ABPASSWORDSHIFT 3) (\ArrayBlockPassword (LRSH 43690 \ABPASSWORDSHIFT)) (\FreeArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) (LLSH UNBOXEDBLOCK.GCT 1))) (\UsedArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) 1)) ( \CodeArrayFlagWord (LOGOR (LLSH \ArrayBlockPassword \ABPASSWORDSHIFT) (LLSH CODEBLOCK.GCT 1) 1))) (RPAQQ ARRAYTYPES ((\ST.BYTE 0) (\ST.POS16 1) (\ST.INT32 2) (\ST.CODE 4) (\ST.PTR 6) (\ST.FLOAT 7) ( \ST.BIT 8) (\ST.PTR2 11))) (RPAQQ \ST.BYTE 0) (RPAQQ \ST.POS16 1) (RPAQQ \ST.INT32 2) (RPAQQ \ST.CODE 4) (RPAQQ \ST.PTR 6) (RPAQQ \ST.FLOAT 7) (RPAQQ \ST.BIT 8) (RPAQQ \ST.PTR2 11) (CONSTANTS (\ST.BYTE 0) (\ST.POS16 1) (\ST.INT32 2) (\ST.CODE 4) (\ST.PTR 6) (\ST.FLOAT 7) (\ST.BIT 8) (\ST.PTR2 11)) (RPAQQ \MAX.CELLSPERHUNK 64) (CONSTANTS \MAX.CELLSPERHUNK) (RPAQQ \IN.MAKEINIT NIL) (CONSTANTS (\IN.MAKEINIT)) (BLOCKRECORD SEQUENCEDESCRIPTOR ((ORIG BITS 1) (NIL BITS 1) (READONLY FLAG) (NIL BITS 1) (BASE POINTER ) (TYP BITS 4) (NIL BITS 4) (LENGTH BITS 24) (OFFST FIXP))) (DATATYPE ARRAYP ((* ;; "Describes an INTERLISP ARRAYP, as opposed to a CL array.") (ORIG BITS 1) (* ; "Origin, 0 or 1") (NIL BITS 1) (READONLY FLAG) (* ; "probably no READONLY arrays now") (NIL BITS 1) ( BASE POINTER) (TYP BITS 4) (* ; "Type of the contents") (NIL BITS 4) (LENGTH BITS 24) (* ; "Array's length") (OFFST FIXP) (* ; "Offset from BASE where the data really starts.")) (* ;; "note that while ARRAYP is a DATATYPE, the allocation of it actually happens at MAKEINIT time under INITDATATYPE{NAMES}" )) (BLOCKRECORD ARRAYBLOCK ((PASSWORD BITS 13) (GCTYPE BITS 2) (* ; "Unboxed, Pointers, or Code") (INUSE FLAG) (ARLEN WORD) (FWD FULLXPOINTER) (* ; "Only when on free list") (BKWD FULLXPOINTER)) (BLOCKRECORD ARRAYBLOCK ((ABFLAGS WORD) (* ; "Used for header and trailer"))) (ACCESSFNS ARRAYBLOCK ((DAT ( \ADDBASE DATUM \ArrayBlockHeaderWords)) (TRAILER (\ADDBASE2 DATUM (IDIFFERENCE (fetch (ARRAYBLOCK ARLEN) of DATUM) \ArrayBlockTrailerCells))))) (TYPE? (AND (EQ 0 (NTYPX DATUM)) (IGEQ (\HILOC DATUM) \FirstArraySegment)))) (GLOBALVARS \NxtArrayPage \FREEBLOCKBUCKETS \HUNKING?) (PUTPROPS HUNKSIZEFROMNUMBER MACRO ((NTYPX) (FOLDLO (fetch DTDSIZE of (\GETDTD NTYPX)) WORDSPERCELL))) (PUTPROP (QUOTE LLARRAYELT) (QUOTE IMPORTDATE) (IDATE "15-Sep-94 11:08:59")) (DEFOPTIMIZER PUTBASEPTRX (&REST ARGS) (CONS (QUOTE (OPENLAMBDA (DATUM OFFSET NEWVALUE) ( UNINTERRUPTABLY (\PUTBASE DATUM OFFSET (LOGOR (LOGAND 61440 (\GETBASE DATUM OFFSET)) (LOGAND (\HILOC NEWVALUE) 4095))) (\PUTBASE DATUM (ADD1 OFFSET) (\LOLOC NEWVALUE)) NEWVALUE))) ARGS)) (RPAQQ \SMALLP 1) (RPAQQ \FIXP 2) (RPAQQ \FLOATP 3) (RPAQQ \LITATOM 4) (RPAQQ \LISTP 5) (RPAQQ \ARRAYP 6) (RPAQQ \STACKP 8) (RPAQQ \VMEMPAGEP 10) (RPAQQ \STREAM 11) (RPAQQ \NEW-ATOM 21) (CONSTANTS \SMALLP \FIXP \FLOATP \LITATOM \LISTP \ARRAYP \STACKP \VMEMPAGEP \STREAM \NEW-ATOM) (RPAQQ \BUILT-IN-SYSTEM-TYPES ((SMALLP) (FIXP 2) (FLOATP 2) (LITATOM) (LISTP 4 (0 2)) (ARRAYP 6 (0)) ( STRINGP 6 (0)) (STACKP 2 NIL \RECLAIMSTACKP) (CHARACTER) (VMEMPAGEP 256 NIL RELEASINGVMEMPAGE) (STREAM ) (BITMAP) (COMPILED-CLOSURE 4 (0 2)) (ONED-ARRAY 8 (0)) (TWOD-ARRAY 10 (0)) (GENERAL-ARRAY 10 (0 8)) (BIGNUM) (RATIO) (COMPLEX) (PATHNAME) (NEW-ATOM 10 (2 4 6)) (FILLER22) (FILLER23) (FILLER24) (FILLER25 ) (FILLER26) (FILLER27) (FILLER28) (FILLER29) (FILLER30))) (BLOCKRECORD DTD ((NIL BITS 2) (DTDOBSOLETE FLAG) (* ; "True for type of a redeclared datatype--not allowed to allocate more of these") (DTDFINALIZABLE FLAG) (* ; "True if finalization exists for this type") (DTDNAME POINTER) (* ; "Type name -- a symbol ") ( DTDCNT0 WORD) (* ; "Incremental box count -- this plus DTDOLDCNT is the true box count") (DTDSIZE WORD ) (* ; "Length of datum in words") (DTDFREE FULLXPOINTER) (* ; "Pointer to first object on free chain, or NIL. Not used for LISTP") (DTDLOCKEDP FLAG) (* ; "True if objects of this type must be locked down (not pagefault)") (DTDHUNKP FLAG) (* ; "True if this type is used as an array hunk type") (DTDGCTYPE BITS 2) (* ; "For hunk datatypes, is analogous to arrayblock's GCTYPE") (DTDDESCRS POINTER) (DTDTYPESPECS POINTER) (DTDPTRS POINTER) (* ; "List of word offsets inside datum where reference-counted pointers are stored -- used by GC") ( DTDOLDCNT FIXP) (* ; "'Box count' -- number of objects of this type ever allocated") (DTDNEXTPAGE FIXP ) (* ; "Currently only for LISTP pages -- page number of next page on chain of non-full cons pages") ( DTDTYPEENTRY WORD) (* ;; "The word stored in the type table for objects of this type. Hi bits have numberp tags, ref countable, etc." ) (DTDSUPERTYPE WORD) (* ; "Type number of immediate supertype, or zero if none")) (ACCESSFNS DTD (( DTDCNTLOC (\ADDBASE DATUM 4)) (DTDCNT (IPLUS (fetch DTDOLDCNT DATUM) (fetch DTDCNT0 DATUM)) ( UNINTERRUPTABLY (replace DTDOLDCNT of DATUM with NEWVALUE) (replace DTDCNT0 of DATUM with 0)))))) (PUTPROPS \GETDTD MACRO ((typeNum) (ADDBASE \DTDSpaceBase (ITIMES typeNum 18)))) (DEFOPTIMIZER \TYPEMASK.UFN (&REST X) (LET ((CE (CONSTANTEXPRESSIONP (CADR X)))) (if CE then (BQUOTE ( (OPCODES TYPEMASK.N (\, (CAR CE))) (\, (CAR X)))) else (QUOTE IGNOREMACRO)))) (RPAQQ \GUARDSTORAGEFULL 128) (RPAQQ \GUARD1STORAGEFULL 64) (CONSTANTS \GUARDSTORAGEFULL \GUARD1STORAGEFULL) (GLOBALVARS \NxtMDSPage \LeastMDSPage \SecondArrayPage \SecondMDSPage \MDSFREELISTPAGE \MaxSysTypeNum \MaxTypeNumber \STORAGEFULL \INTERRUPTSTATE \PENDINGINTERRUPT) (PUTPROP (QUOTE LLDATATYPE) (QUOTE IMPORTDATE) (IDATE "28-Jun-99 16:57:50")) (ACCESSFNS POINTER ((PAGE# (IPLUS (LLSH (\HILOC DATUM) 8) (LRSH (\LOLOC DATUM) 8))) (WORDINPAGE ( LOGAND (\LOLOC DATUM) 255)) (CELLINPAGE (LRSH (fetch WORDINPAGE of DATUM) 1)) (BYTEINPAGE (LLSH (fetch WORDINPAGE of DATUM) 1)) (SEGMENT# (\HILOC DATUM)) (WORDINSEGMENT (\LOLOC DATUM)) (CELLINSEGMENT ( LRSH (fetch WORDINSEGMENT of DATUM) 1)) (WORD# (fetch WORDINPAGE of DATUM)) (DBLWORD# (fetch CELLINPAGE of DATUM)) (PAGEBASE (\VAG2 (\HILOC DATUM) (LOGAND (\LOLOC DATUM) 65280)))) (CREATE (\VAG2 (LRSH PAGE# 8) (LLSH (LOGAND PAGE# 255) 8)))) (ACCESSFNS WORD ((HIBYTE (LRSH DATUM 8)) (LOBYTE (LOGAND DATUM 255))) (CREATE (IPLUS (LLSH HIBYTE 8) LOBYTE))) (PUTPROPS PTRGTP MACRO (OPENLAMBDA (X Y) (OR (IGREATERP (\HILOC X) (\HILOC Y)) (AND (EQ (\HILOC X) ( \HILOC Y)) (IGREATERP (\LOLOC X) (\LOLOC Y)))))) (PUTPROPS .COERCE.TO.SMALLPOSP. DMACRO (OPENLAMBDA (X) (COND ((SMALLPOSP X) X) (T (\ILLEGAL.ARG X))))) (PUTPROPS .COERCE.TO.BYTE. DMACRO (OPENLAMBDA (X) (COND ((AND (SMALLPOSP X) (ILESSP X (CONSTANT (LLSH 1 BITSPERBYTE)))) X) (T (\ILLEGAL.ARG X))))) (BLOCKRECORD LISTP ((* ;; "Describes a CONS cell.") (CAR POINTER) (CDR POINTER)) (CREATE (CREATECELL \LISTP)) (* ;; "FOLLOWING ARE CDR-CODE FIELDS") (BLOCKRECORD LISTP ((CDRCODE BITS 4) (CARFIELD XPOINTER))) (* ;; "For chaining together free cells on a page:") (BLOCKRECORD LISTP ((NEXTFREE BYTE) ( NIL BITS 24))) (ACCESSFNS LISTP ((FULLCARFIELD NIL (\PUTBASEPTR DATUM 0 NEWVALUE)))) (* ;; "because replace of XPOINTER is slow, the CAR field is stored with PUTBASEPTR, even though that smashes the hi byte" )) (BLOCKRECORD CONSPAGE ((* ;; "Describes a page of CONS cells, which (when free) are chained together thru the top byte.") (NIL 2 FIXP) (* ; "Empty cells, space for another 2 CONS cells if we can figure out how.") (CNT BYTE) (* ; "# of cells free on this page") (NEXTCELL BYTE) (* ; "WORD offset of next free cell (not guaranteed to be 0 if no free cells)") (NIL WORD) (* ; "Padding") (NEXTPAGE FIXP) (* ; "Next CONS page on the DTD's free list, for searching for cells."))) (RPAQQ CONSCONSTANTS (\CDR.ONPAGE \CDR.NIL \CDR.INDIRECT \CDR.MAXINDIRECT \CONSPAGE.LAST)) (RPAQQ \CDR.ONPAGE 8) (RPAQQ \CDR.NIL 8) (RPAQQ \CDR.INDIRECT 0) (RPAQQ \CDR.MAXINDIRECT 7) (RPAQQ \CONSPAGE.LAST 65535) (CONSTANTS \CDR.ONPAGE \CDR.NIL \CDR.INDIRECT \CDR.MAXINDIRECT \CONSPAGE.LAST) (PUTPROPS LOCAL MACRO ((X) X)) (PUTPROPS ALLOCAL MACRO ((X) X)) (PUTPROP (QUOTE LLNEW) (QUOTE IMPORTDATE) (IDATE " 2-Feb-95 16:21:44")) (PUTPROPS CHECK MACRO (ARGS (COND ((AND (BOUNDP (QUOTE CHECK)) CHECK) (CONS (QUOTE PROGN) (for I in ARGS collect (LIST (QUOTE OR) I (LIST (QUOTE RAID) (KWOTE (LIST (QUOTE Check-failure%:) I))))))) (T ( CONS COMMENTFLG ARGS))))) (PUTPROPS \StatsZero BYTEMACRO (OPENLAMBDA (N) (\PUTBASE N 0 0) (\PUTBASE N 1 0))) (PUTPROPS \StatsAdd1 DMACRO (OPENLAMBDA (A) (PROG ((LO (IPLUS16 (\GETBASE A 1) 1))) (DECLARE ( LOCALVARS LO)) (* ; "Increment double word at A by 1") (\PUTBASE A 1 LO) (COND ((EQ LO 0) (\PUTBASE A 0 (ADD1 (\GETBASE A 0)))))))) (PUTPROPS IPLUS16 MACRO ((X Y) (* ; "Kludge to do 16-bit plus") (\LOLOC (\ADDBASE X Y)))) (PUTPROPS SMALLPOSP MACRO (OPENLAMBDA (X) (AND (SMALLP X) (IGEQ X 0)))) (PROGN (PUTPROPS SETXVAR MACRO (X (BQUOTE (SETQ.NOREF %, (CADAR X) %, (CADR X))))) (PUTPROPS SETXVAR DMACRO (X (OR (AND (EQ (CAAR X) (QUOTE QUOTE)) (LITATOM (CADAR X))) (SHOULDNT)) (GLOBALVARS \VALSPACE) (LIST (QUOTE SETQ.NOREF) (CADAR X) (CADR X))))) (PUTPROPS SETQ.NOREF DMACRO ((VAR VAL) (\PUTBASEPTR (LOCF (fetch (LITATOM VALUE) of (QUOTE VAR))) 0 VAL))) (PROGN (PUTPROPS IEQ MACRO ((X Y) (IEQP X Y))) (PUTPROPS IEQ DMACRO (= . EQ))) (RPAQQ WordsPerPage 256) (CONSTANTS WordsPerPage) (ACCESSFNS LITATOM ((DEFINITIONCELL (\DEFCELL DATUM)) (PROPCELL (\PROPCELL DATUM)) (VCELL (\VALCELL DATUM)) (PNAMECELL (\PNAMECELL DATUM))) (* ;; "VCELL can also be accessed directly from a value index via the record VALINDEX (as in \SETGLOBALVAL.UFN) --- Similarly, PNAMEINDEX accesses PNAMECELL for use by \MKATOM and UNCOPYATOM" ) (TYPE? (LITATOM DATUM)) (BLOCKRECORD PROPCELL ((NIL BITS 4) (* ; "former flags locations") (PROPLIST POINTER) (NIL BITS 8) (* ; "Package byte") (NIL BITS 8) (* ; "Flags from defcell") (* ;; "PROPCell flags:") (NIL BITS 1) (GENSYMP FLAG) (FATPNAMEP FLAG) (NIL BITS 5) (* ;; "Filler for final cell:") (NIL BITS 8)))) (SYNONYM CL:SYMBOL (LITATOM)) (ACCESSFNS VALINDEX ((VCELL (COND ((AND (FIXP DATUM) (ILESSP DATUM 65535)) (* ; "Xerox Lisp traditional symbol") (\ADDBASE2 \PNPSPACE (IPLUS \NEWATOM-VALOFFSET (ITIMES 10 DATUM)))) ( T (* ; "New symbol") (* ; "'90/07/19 ON") (\ADDBASE DATUM \NEWATOM-VALOFFSET)))))) (BLOCKRECORD VCELL ((VALUE FULLPOINTER))) (BLOCKRECORD DEFINITIONCELL ((CCODEP FLAG) (FASTP FLAG) (ARGTYPE BITS 2) (* ; "Former flag location") (DEFPOINTER POINTER) (NIL POINTER) (* ; "Proplist cell") (NIL BITS 8) (* ; "package") (* ;; "DEFCELL flags overflow from top 4 bits of the real cell:") (NIL BITS 4) (PSEUDOCODEP FLAG) (NIL BITS 3) (* ;; "proplist falgs and filler:") (NIL BITS 16)) (BLOCKRECORD DEFINITIONCELL ((DEFCELLFLAGS BITS 4) (NIL POINTER) (* ; "defn ptr") (NIL BITS 4) (NIL POINTER) (* ; "filler for proplist ptr") (NIL BITS 8) (AUXDEFCELLFLAGS BYTE) (NIL BITS 16)))) (BLOCKRECORD FNHEADER ((STKMIN WORD) (NA SIGNEDWORD) (PV SIGNEDWORD) (STARTPC WORD) (CLOSUREP FLAG) (* ; "T if this is a %"compiled closure%"") (BYTESWAPPED FLAG) (* ; "T if, on 386, we reswapped the code section of this function for faster access.") (ARGTYPE BITS 2) (* ; "0 = LAMBDA") (* ; "2 = LAMBDA nospread") (* ; "1 = NLAMBDA") (* ; "3 = NLAMBDA nospread") (* ;; "4 NIL BITS USED TO BE HERE.") (%#FRAMENAME XPOINTER) (NTSIZE WORD) (* ; "Size of the Name Table, IN WORDS. This value is always rounded up to the next Quad-word in size, and there' guaranteed to be one entry of zeros in the length." ) (NLOCALS BYTE) (FVAROFFSET BYTE)) (ACCESSFNS FNHEADER ((LSTARP (ILESSP (fetch (FNHEADER NA) of DATUM ) 0)) (OVERHEADWORDS (PROGN 8)) (NATIVE (PROGN NIL)) (* ; "T if this is a NATIVE-code function (never true!)") (ALIGNED (IPLUS (fetch (FNHEADER NTSIZE) of DATUM ) (fetch (FNHEADER OVERHEADWORDS) of T))) (FIXED NIL (replace (FNHEADER STKMIN) of DATUM with (\STKMIN DATUM T))) (NPVARWORDS (UNFOLD (ADD1 (fetch (FNHEADER PV) of DATUM)) WORDSPERQUAD)) (FRAMENAME (fetch (FNHEADER %#FRAMENAME) of DATUM) (UNINTERRUPTABLY (CHECK (NEQ (\HILOC DATUM) \STACKHI)) (\DELREF ( fetch (FNHEADER %#FRAMENAME) of DATUM)) (\ADDREF NEWVALUE) (replace (FNHEADER %#FRAMENAME) of DATUM with NEWVALUE)))))) (BLOCKRECORD PNAMECELL ((NIL BITS 4) (PNAMEBASE XPOINTER) (NIL POINTER) (* ; "val, def, prop cells") ( NIL POINTER) (NIL POINTER) (PACKAGEINDEX BYTE) (NIL BITS 24) (* ; "filler for other flags")) ( BLOCKRECORD PNAMECELL ((FULLPNAMEBASE FULLXPOINTER) (* ; "Replacing this smashes PACKAGEINDEX to 0"))) (ACCESSFNS PNAMECELL ((PACKAGE (LET ((I (FETCH (PNAMECELL PACKAGEINDEX) OF DATUM))) (* ; "This ugly construct allows cl:symbol-package to run in the init, where *PACKAGE-FROM-INDEX* is not yet bound." ) (COND ((EQ 0 I) NIL) (T (CL:AREF *PACKAGE-FROM-INDEX* I)))) (REPLACE (PNAMECELL PACKAGEINDEX) OF DATUM WITH (IF (NULL NEWVALUE) THEN *UNINTERNED-PACKAGE-INDEX* ELSE (CL::%%PACKAGE-INDEX NEWVALUE))))) )) (ACCESSFNS PACKAGEINDEX ((PACKAGE (IF (EQ 0 DATUM) (* ; "This ugly construct allows cl:symbol-package to run in the init, where *PACKAGE-FROM-INDEX* is not yet bound." ) THEN NIL ELSE (CL:AREF *PACKAGE-FROM-INDEX* DATUM))))) (BLOCKRECORD PNAMEBASE ((PNAMELENGTH BYTE) (* ; "Length is always here, be the pname thin or fat") ( PNAMEFATPADDINGBYTE BYTE) (* ; "This byte is zero for fat pnames so that the pname chars are word-aligned"))) (ACCESSFNS PNAMEINDEX ((PNAMECELL (COND ((AND (FIXP DATUM) (ILESSP DATUM 65535)) (* ; "Xerox Lisp traditional symbol") (\ADDBASE \OLDATOMSPACE (IPLUS \NEWATOM-PNAMEOFFSET (ITIMES 10 DATUM) ))) (T (* ; "New symbol") (* ; "'90/07/19 ON") (\ADDBASE DATUM \NEWATOM-PNAMEOFFSET)))))) (BLOCKRECORD NEW-ATOM ((* ;; "An extended symbol, for expanding atom space. Kept in its own datatype.") (PNAME XPOINTER) (* ; "PNAME, same as litatom.") (VALUE POINTER) (DEF POINTER) (PROPLIST POINTER) (* ;; "Flags that used to be above the pointers, e.g. package, ccodep, gensymp:") (NIL BITS 32))) (PUTPROPS \DEFCELL MACRO ((ATOM) (\ATOMCELL ATOM \DEF.HI))) (PUTPROPS \VALCELL MACRO ((ATOM) (\ATOMCELL ATOM \VAL.HI))) (PUTPROPS \PNAMECELL MACRO ((ATOM) (\ATOMCELL ATOM \PNAME.HI))) (PUTPROPS \ATOMVALINDEX DMACRO (OPENLAMBDA (X) (COND ((EQ (NTYPX X) \LITATOM) (* ; "Original litatoms" ) (\LOLOC X)) ((EQ (NTYPX X) \NEW-ATOM) (* ; "new 3-byte symbols") X) (T (SHOULDNT))))) (PUTPROPS \ATOMDEFINDEX DMACRO (OPENLAMBDA (X) (COND ((EQ (NTYPX X) \LITATOM) (* ; "Original litatoms" ) (\LOLOC X)) ((EQ (NTYPX X) \NEW-ATOM) (* ; "new 3-byte symbols") X) (T (SHOULDNT))))) (PUTPROPS \ATOMPNAMEINDEX DMACRO (OPENLAMBDA (X) (COND ((EQ (NTYPX X) \LITATOM) (* ; "Original litatoms") (\LOLOC X)) ((EQ (NTYPX X) \NEW-ATOM) (* ; "new 3-byte symbols") X) (T (SHOULDNT) )))) (PUTPROPS \ATOMPROPINDEX DMACRO ((X) (COND ((EQ (NTYPX X) \LITATOM) (* ; "Original litatoms") (\LOLOC X)) ((EQ (NTYPX X) \NEW-ATOM) (* ; "new 3-byte symbols") X) (T (SHOULDNT))))) (PUTPROPS \INDEXATOMPNAME DMACRO (OPENLAMBDA (X) (COND ((FIXP X) (* ; "Xerox Lisp traditional symbol") (COND ((SMALLP X) (\VAG2 \AtomHI X)) (T (\VAG2 (LRSH X 16) (LOGAND X 65535))))) (T (* ; "New symbol") X)))) (PUTPROPS \INDEXATOMVAL DMACRO (OPENLAMBDA (X) (COND ((FIXP X) (* ; "Xerox Lisp traditional symbol") ( COND ((SMALLP X) (\VAG2 \AtomHI X)) (T (\VAG2 (LRSH X 16) (LOGAND X 65535))))) (T (* ; "New symbol") X )))) (PUTPROPS \INDEXATOMDEF DMACRO (OPENLAMBDA (X) (COND ((FIXP X) (* ; "Xerox Lisp traditional symbol") ( COND ((SMALLP X) (\VAG2 \AtomHI X)) (T (\VAG2 (LRSH X 16) (LOGAND X 65535))))) (T (* ; "New symbol") X )))) (PUTPROPS \ATOMNUMBER DMACRO (= . \LOLOC)) (GLOBALVARS \NxtPnByte \CurPnPage \NxtAtomPage \AtomFrLst \OneCharAtomBase \PNAMES.IN.BLOCKS? \SCRATCHSTRING COMPILEATPUTDFLG) (RPAQQ \PNAMELIMIT 255) (RPAQQ \CharsPerPnPage 512) (CONSTANTS (\PNAMELIMIT 255) (\CharsPerPnPage 512)) (RPAQQ \NEWATOM-PNAMEOFFSET 0) (RPAQQ \NEWATOM-VALOFFSET 2) (RPAQQ \NEWATOM-DEFOFFSET 4) (RPAQQ \NEWATOM-PLISTOFFSET 6) (RPAQQ \NEWATOM-TYPE# 21) (CONSTANTS (\NEWATOM-PNAMEOFFSET 0) (\NEWATOM-VALOFFSET 2) (\NEWATOM-DEFOFFSET 4) ( \NEWATOM-PLISTOFFSET 6) (\NEWATOM-TYPE# 21)) (PUTPROPS \MOVEWORDS MACRO (OPENLAMBDA (SBASE SOFFSET DBASE DOFFSET NWORDS) (\BLT (\ADDBASE DBASE DOFFSET) (\ADDBASE SBASE SOFFSET) NWORDS))) (PUTPROP (QUOTE LLBASIC) (QUOTE IMPORTDATE) (IDATE "31-Jan-98 09:55:50")) (ACCESSFNS STRINGP ((XREADONLY (fetch (ARRAY-HEADER READ-ONLY-P) of DATUM) (replace (ARRAY-HEADER READ-ONLY-P) of DATUM with NEWVALUE)) (XBASE ((OPENLAMBDA (STRING) (COND ((fetch (ARRAY-HEADER INDIRECT-P) of STRING) (%%ARRAY-BASE STRING)) (T (fetch (ARRAY-HEADER BASE) of STRING)))) DATUM) (( OPENLAMBDA (STRING NV) (replace (ARRAY-HEADER INDIRECT-P) of STRING with NIL) (replace (ARRAY-HEADER BASE) of STRING with NV) NV) DATUM NEWVALUE)) (TYP ((OPENLAMBDA (STRING) (SELECTC (COND ((fetch ( ARRAY-HEADER INDIRECT-P) of STRING) (%%ARRAY-TYPE-NUMBER STRING)) (T (fetch (ARRAY-HEADER TYPE-NUMBER) of STRING))) (%%THIN-CHAR-TYPENUMBER \ST.BYTE) (%%FAT-CHAR-TYPENUMBER \ST.POS16) (SHOULDNT "Unknown type-number"))) DATUM) ((OPENLAMBDA (STRING NV) (LET ((%%NEW-TYPE-NUMBER (SELECTC NV ( \ST.BYTE %%THIN-CHAR-TYPENUMBER) (\ST.POS16 %%FAT-CHAR-TYPENUMBER) (SHOULDNT "Unknown typ value")))) ( COND ((fetch (ARRAY-HEADER INDIRECT-P) of STRING) (%%SET-ARRAY-TYPE-NUMBER STRING %%NEW-TYPE-NUMBER)) (T (replace (ARRAY-HEADER TYPE-NUMBER) of STRING with %%NEW-TYPE-NUMBER))))) DATUM NEWVALUE)) (LENGTH (fetch (ARRAY-HEADER FILL-POINTER) of DATUM) ((OPENLAMBDA (STRING NV) (replace (ARRAY-HEADER FILL-POINTER) of STRING with NV) (replace (ARRAY-HEADER TOTAL-SIZE) of STRING with NV) (COND (( %%GENERAL-ARRAY-P STRING) (freplace (GENERAL-ARRAY DIMS) of STRING with (LIST NV)))) NV) DATUM NEWVALUE)) (OFFST ((OPENLAMBDA (STRING) (COND ((fetch (ARRAY-HEADER INDIRECT-P) of STRING) ( %%ARRAY-OFFSET STRING)) (T (fetch (ARRAY-HEADER OFFSET) of STRING)))) DATUM) ((OPENLAMBDA (STRING NV) (COND ((NOT (EQ 0 NV)) (replace (ARRAY-HEADER DISPLACED-P) of STRING with T))) (COND ((fetch ( ARRAY-HEADER INDIRECT-P) of STRING) (%%SET-ARRAY-OFFSET STRING NV)) (T (replace (ARRAY-HEADER OFFSET) of STRING with NV)))) DATUM NEWVALUE)) (* ;; "The rest of these fields only appear when smashing") ( XFLAGS (LOGAND (fetch (ARRAY-HEADER FLAGS) of DATUM) 15) ((OPENLAMBDA (STRING) (replace (ARRAY-HEADER ADJUSTABLE-P) of STRING with NIL) (replace (ARRAY-HEADER DISPLACED-P) of STRING with NIL) (replace ( ARRAY-HEADER FILL-POINTER-P) of STRING with NIL) (replace (ARRAY-HEADER EXTENDABLE-P) of STRING with NIL)) DATUM))) (ACCESSFNS STRINGP ((ORIG ((OPENLAMBDA (STRING) 1) DATUM) ((OPENLAMBDA (STRING NV) ( COND ((NOT (EQ NV 1)) (ERROR "Il:stringp's are always origin 1"))) NV) DATUM NEWVALUE)) (* ; "An inoperative field") (SUBSTRINGED ((OPENLAMBDA (STRING) NIL) DATUM) ((OPENLAMBDA (STRING NV) (OR ( NULL NV) (ERROR "Substringed field not supported"))) DATUM NEWVALUE)) (READONLY (ffetch (STRINGP XREADONLY) of DATUM) (freplace (STRINGP XREADONLY) of DATUM with NEWVALUE)) (FATSTRINGP ((OPENLAMBDA ( STRING) (EQ (COND ((fetch (ARRAY-HEADER INDIRECT-P) of STRING) (%%ARRAY-TYPE-NUMBER STRING)) (T (fetch (ARRAY-HEADER TYPE-NUMBER) of STRING))) %%FAT-CHAR-TYPENUMBER)) DATUM) ((OPENLAMBDA (STRING NV) (LET ((%%NEW-TYPE-NUMBER (COND (NV %%FAT-CHAR-TYPENUMBER) (T %%THIN-CHAR-TYPENUMBER)))) (COND ((fetch ( ARRAY-HEADER INDIRECT-P) of STRING) (%%SET-ARRAY-TYPE-NUMBER STRING %%NEW-TYPE-NUMBER)) (T (replace ( ARRAY-HEADER TYPE-NUMBER) of STRING with %%NEW-TYPE-NUMBER))))) DATUM NEWVALUE)) (BASE (ffetch ( STRINGP XBASE) of DATUM) (freplace (STRINGP XBASE) of DATUM with NEWVALUE)))) (CREATE (create ONED-ARRAY BASE _ XBASE READ-ONLY-P _ XREADONLY STRING-P _ T DISPLACED-P _ (NOT (EQ OFFST 0)) TYPE-NUMBER _ (COND ((EQ TYP \ST.POS16) %%FAT-CHAR-TYPENUMBER) (T %%THIN-CHAR-TYPENUMBER)) OFFSET _ OFFST FILL-POINTER _ LENGTH TOTAL-SIZE _ LENGTH)) (TYPE? (CL:STRINGP DATUM)) OFFST _ 0 TYP _ \ST.BYTE LENGTH _ 0) (GLOBALVARS \OneCharAtomBase) (PUTDEF (QUOTE \NUMSTR) (QUOTE RESOURCES) (QUOTE (NEW (ALLOCSTRING 128)))) (PUTDEF (QUOTE \NUMSTR1) (QUOTE RESOURCES) (QUOTE (NEW (CONCAT)))) (PUTDEF (QUOTE \PNAMESTRING) (QUOTE RESOURCES) (QUOTE (NEW (ALLOCSTRING \PNAMELIMIT NIL NIL \FATPNAMESTRINGP)))) (RPAQQ \FATPNAMESTRINGP T) (CONSTANTS (\FATPNAMESTRINGP T)) (PUTPROPS \PNAMESTRINGPUTCHAR MACRO ((BASE OFFSET CODE) (* ; "For stuffing chars into resource \PNAMESTRING") (\PUTBASECHAR \FATPNAMESTRINGP BASE OFFSET CODE))) (DEFOPTIMIZER FCHARACTER (NUM) (BQUOTE ((OPENLAMBDA (N) (COND ((IGREATERP N \MAXTHINCHAR) (* ; "The character we're getting is NOT a thin character -- do it the hard way") (CHARACTER N)) (( IGREATERP N (CHARCODE 9)) (\ADDBASE \OneCharAtomBase (IDIFFERENCE N 10))) ((IGEQ N (CHARCODE 0)) ( IDIFFERENCE N (CHARCODE 0))) (T (* ; "The common case -- just add on the one-atom base.") (\ADDBASE \OneCharAtomBase N)))) (\, NUM)))) (I.S.OPR (QUOTE inpname) NIL (QUOTE (SUBPAIR (QUOTE ($$END $$BODY $$FATP $$BASE $$OFFSET)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (BQUOTE (bind $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END $$FATP declare (LOCALVARS $$END $$BODY $$FATP $$BASE $$OFFSET) first (PROG NIL $$RETRY (COND ((STRINGP $$BODY) (SETQ $$BASE (ffetch (STRINGP BASE) of $$BODY)) (SETQ $$OFFSET ( SUB1 (ffetch (STRINGP OFFST) of $$BODY))) (SETQ $$END (IPLUS $$OFFSET (ffetch (STRINGP LENGTH) of $$BODY))) (SETQ $$FATP (ffetch (STRINGP FATSTRINGP) of $$BODY))) ((LITATOM $$BODY) (SETQ $$BASE ( ffetch (LITATOM PNAMEBASE) of $$BODY)) (SETQ $$END (ffetch (PNAMEBASE PNAMELENGTH) of $$BASE)) (SETQ $$FATP (ffetch (LITATOM FATPNAMEP) of $$BODY))) (T (SETQ $$BODY (MKSTRING $$BODY)) (GO $$RETRY)))) eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (COND ($$FATP (\GETBASEFAT $$BASE $$OFFSET)) (T (\GETBASETHIN $$BASE $$OFFSET)))))))) T) (I.S.OPR (QUOTE inatom) NIL (QUOTE (SUBPAIR (QUOTE ($$OFFSET $$BODY $$BASE $$END $$FATP)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (bind $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END $$FATP declare (LOCALVARS $$OFFSET $$BODY $$BASE $$END $$FATP) first (SETQ $$BASE (ffetch (LITATOM PNAMEBASE) of $$BODY)) (SETQ $$END (ffetch (PNAMEBASE PNAMELENGTH) of $$BASE)) (SETQ $$FATP (ffetch (LITATOM FATPNAMEP) of $$BODY)) eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND ( IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (COND ($$FATP (\GETBASEFAT $$BASE $$OFFSET)) (T ( \GETBASETHIN $$BASE $$OFFSET)))))))) T) (I.S.OPR (QUOTE instring) NIL (QUOTE (SUBPAIR (QUOTE ($$BODY $$END $$OFFSET $$BASE $$FATP)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (bind $$BODY _ BODY $$END $$OFFSET $$BASE $$FATP declare (LOCALVARS $$BODY $$END $$OFFSET $$BASE $$FATP) first (SETQ $$OFFSET ( SUB1 (ffetch (STRINGP OFFST) of $$BODY))) (SETQ $$BASE (ffetch (STRINGP BASE) of $$BODY)) (SETQ $$END (IPLUS $$OFFSET (ffetch (STRINGP LENGTH) of $$BODY))) (SETQ $$FATP (ffetch (STRINGP FATSTRINGP) of $$BODY)) eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (COND ($$FATP (\GETBASEFAT $$BASE $$OFFSET)) (T (\GETBASETHIN $$BASE $$OFFSET)))))))) T) (I.S.OPR (QUOTE infatatom) NIL (QUOTE (SUBPAIR (QUOTE ($$OFFSET $$BODY $$BASE $$END)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (bind $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END declare (LOCALVARS $$OFFSET $$BODY $$BASE $$END) first (SETQ $$BASE (ffetch (LITATOM PNAMEBASE) of $$BODY)) (SETQ $$END (ffetch (PNAMEBASE PNAMELENGTH) of $$BASE)) eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (\GETBASEFAT $$BASE $$OFFSET)))))) T ) (I.S.OPR (QUOTE inthinatom) NIL (QUOTE (SUBPAIR (QUOTE ($$OFFSET $$BODY $$BASE $$END)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (bind $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END declare (LOCALVARS $$OFFSET $$BODY $$BASE $$END) first (SETQ $$BASE (ffetch (LITATOM PNAMEBASE) of $$BODY)) (SETQ $$END (ffetch (PNAMEBASE PNAMELENGTH) of $$BASE)) eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (\GETBASETHIN $$BASE $$OFFSET)))))) T) (I.S.OPR (QUOTE infatstring) NIL (QUOTE (SUBPAIR (QUOTE ($$BODY $$END $$OFFSET $$BASE)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (bind $$BODY _ BODY $$END $$OFFSET $$BASE declare (LOCALVARS $$BODY $$END $$OFFSET $$BASE) first (SETQ $$OFFSET (SUB1 (ffetch (STRINGP OFFST) of $$BODY))) (SETQ $$BASE (ffetch (STRINGP BASE) of $$BODY)) (SETQ $$END (IPLUS $$OFFSET ( ffetch (STRINGP LENGTH) of $$BODY))) eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (\GETBASEFAT $$BASE $$OFFSET)))))) T) (I.S.OPR (QUOTE inthinstring) NIL (QUOTE (SUBPAIR (QUOTE ($$BODY $$END $$OFFSET $$BASE)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (bind $$BODY _ BODY $$END $$OFFSET $$BASE declare (LOCALVARS $$BODY $$END $$OFFSET $$BASE) first (SETQ $$OFFSET (SUB1 (ffetch (STRINGP OFFST) of $$BODY))) (SETQ $$BASE (ffetch (STRINGP BASE) of $$BODY)) (SETQ $$END (IPLUS $$OFFSET ( ffetch (STRINGP LENGTH) of $$BODY))) eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (\GETBASETHIN $$BASE $$OFFSET)))))) T) (PUTPROPS \CHARCODEP DMACRO (OPENLAMBDA (X) (* ; "used to also say (ILEQ X \MAXFATCHAR), but that's implied by the first two clauses") (AND (SMALLP X) (IGEQ X 0)))) (PUTPROPS \FATCHARCODEP DMACRO (OPENLAMBDA (X) (* ; "Used to also say (ILEQ X \MAXFATCHAR), but that's implied by the first two clauses") (AND (SMALLP X) (IGREATERP X \MAXTHINCHAR)))) (PUTPROPS \THINCHARCODEP DMACRO (OPENLAMBDA (X) (AND (SMALLP X) (IGEQ X 0) (ILEQ X \MAXTHINCHAR)))) (PUTPROPS \GETBASEFAT MACRO (= . \GETBASE)) (PUTPROPS \GETBASETHIN MACRO (= . \GETBASEBYTE)) (PUTPROPS \PUTBASEFAT MACRO (= . \PUTBASE)) (PUTPROPS \PUTBASETHIN MACRO (= . \PUTBASEBYTE)) (PUTPROPS \PUTBASECHAR MACRO (OPENLAMBDA (FATP BASE OFFSET CODE) (COND (FATP (\PUTBASEFAT BASE OFFSET CODE)) (T (\PUTBASETHIN BASE OFFSET CODE))))) (PUTPROPS \GETBASECHAR MACRO ((FATP BASE N) (COND (FATP (\GETBASEFAT BASE N)) (T (\GETBASETHIN BASE N) )))) (PUTPROPS \CHARSET MACRO ((CHARCODE) (LRSH CHARCODE 8))) (PUTPROPS \CHAR8CODE MACRO ((CHARCODE) (LOGAND CHARCODE 255))) (RPAQQ \CHARMASK 255) (RPAQQ \MAXCHAR 255) (RPAQQ \MAXTHINCHAR 255) (RPAQQ \MAXFATCHAR 65535) (RPAQQ \MAXCHARSET 255) (RPAQQ NSCHARSETSHIFT 255) (RPAQQ %#STRINGPWORDS 4) (CONSTANTS (\CHARMASK 255) (\MAXCHAR 255) (\MAXTHINCHAR 255) (\MAXFATCHAR 65535) (\MAXCHARSET 255) ( NSCHARSETSHIFT 255) (%#STRINGPWORDS 4)) (PUTPROPS \NATOMCHARS DMACRO ((AT) (fetch (LITATOM PNAMELENGTH) of AT))) (PUTPROPS \NSTRINGCHARS DMACRO ((S) (fetch (STRINGP LENGTH) of S))) (PUTPROP (QUOTE LLCHAR) (QUOTE IMPORTDATE) (IDATE "12-Jan-94 10:12:34")) (ACCESSFNS BF ((BFBLOCK (ADDSTACKBASE DATUM))) (* ; "basic frame pointer") (BLOCKRECORD BFBLOCK (( FLAGS BITS 3) (NIL BITS 3) (RESIDUAL FLAG) (* ; "true if this is not a full BF") (PADDING BITS 1) ( USECNT BITS 8) (IVAR WORD))) (TYPE? (IEQ (fetch (BF FLAGS) of DATUM) \STK.BF)) (ACCESSFNS BF ((NARGS ( IDIFFERENCE (FOLDLO (IDIFFERENCE DATUM (fetch (BF IVAR) of DATUM)) WORDSPERCELL) (fetch (BF PADDING) of DATUM))) (SIZE (IPLUS 2 (IDIFFERENCE DATUM (fetch (BF IVAR) of DATUM)))) (CHECKED (AND (type? BF DATUM) (for I from (fetch (BF IVAR) of DATUM) to (IDIFFERENCE DATUM 2) by 2 always (IEQ \STK.NOTFLAG ( fetch (BF FLAGS) of I)))))))) (ACCESSFNS FX ((FXBLOCK (ADDSTACKBASE DATUM))) (* ; "frame extension index") (BLOCKRECORD FXBLOCK (( FLAGS BITS 3) (* ; "= \STK.FX") (FAST FLAG) (NIL FLAG) (INCALL FLAG) (* ; "set when fncall microcode has to punt") (VALIDNAMETABLE FLAG) (* ; "if on, NAMETABLE field is filled in. If off, is same as FNHEADER") (NOPUSH FLAG) (* ; "when returning to this frame, don't push a value. Set by interrupt code") (USECNT BITS 8) (%#ALINK WORD) (* ; "low bit is SLOWP") (FNHEADER FULLXPOINTER) (NEXTBLOCK WORD) (PC WORD) (NAMETABLE# FULLXPOINTER) (%#BLINK WORD) (%#CLINK WORD))) (BLOCKRECORD FXBLOCK ((FLAGBYTE BYTE) (NIL BYTE) (NIL BITS 15) (* ; "most of the bits of #ALINK") (SLOWP FLAG) (* ; "if on, then BLINK and CLINK fields are valid. If off, they are implicit") (NIL FULLXPOINTER 2) ( NAMETABHI WORD) (NAMETABLO WORD))) (TYPE? (IEQ (fetch (FX FLAGS) of DATUM) \STK.FX)) (ACCESSFNS FX (( NAMETABLE (COND ((fetch (FX VALIDNAMETABLE) of DATUM) (fetch (FX NAMETABLE#) of DATUM)) (T (fetch (FX FNHEADER) of DATUM))) (PROGN (replace (FX FAST) of DATUM with NIL) (replace (FX NAMETABLE#) of DATUM with NEWVALUE) (replace (FX VALIDNAMETABLE) of DATUM with T))) (FRAMENAME (fetch (FNHEADER FRAMENAME) of (fetch (FX NAMETABLE) of DATUM))) (INVALIDP (EQ DATUM 0)) (* ; "true when A/CLink points at nobody, i.e. FX is bottom of stack") (FASTP (NOT (fetch (FX SLOWP) of DATUM)) (PROGN (CHECK (NULL NEWVALUE)) (COND ((fetch (FX FASTP) of DATUM) (replace (FX %#BLINK) of DATUM with (fetch (FX DUMMYBF) of DATUM)) (replace (FX %#CLINK) of DATUM with (fetch (FX %#ALINK) of DATUM)) (replace (FX SLOWP) of DATUM with T))))) (BLINK (COND ((fetch (FX FASTP) of DATUM) (fetch (FX DUMMYBF) of DATUM)) (T (fetch (FX %#BLINK) of DATUM))) (PROGN (replace (FX %#BLINK) of DATUM with NEWVALUE) (COND ((fetch (FX FASTP) of DATUM) (replace (FX %#CLINK) of DATUM with (fetch (FX %#ALINK) of DATUM)) (replace (FX SLOWP) of DATUM with T))))) (CLINK (IDIFFERENCE (COND ((fetch (FX FASTP) of DATUM) (fetch (FX %#ALINK) of DATUM)) (T (fetch (FX %#CLINK) of DATUM))) \#ALINK.OFFSET) (PROGN ( replace (FX %#CLINK) of DATUM with (IPLUS NEWVALUE \#ALINK.OFFSET)) (COND ((fetch (FX FASTP) of DATUM) (replace (FX %#BLINK) of DATUM with (fetch (FX DUMMYBF) of DATUM)) (replace (FX SLOWP) of DATUM with T))))) (ALINK (IDIFFERENCE (FLOOR (fetch (FX %#ALINK) of DATUM) WORDSPERCELL) \#ALINK.OFFSET) (PROGN ( COND ((fetch (FX FASTP) of DATUM) (replace (FX %#BLINK) of DATUM with (fetch (FX DUMMYBF) of DATUM)) ( replace (FX %#CLINK) of DATUM with (fetch (FX %#ALINK) of DATUM)))) (replace (FX %#ALINK) of DATUM with (IPLUS NEWVALUE \#ALINK.OFFSET (SUB1 WORDSPERCELL))))) (ACLINK (SHOULDNT) (PROGN (COND ((fetch ( FX FASTP) of DATUM) (replace (FX %#BLINK) of DATUM with (fetch (FX DUMMYBF) of DATUM)))) (replace (FX %#CLINK) of DATUM with (IPLUS NEWVALUE \#ALINK.OFFSET)) (replace (FX %#ALINK) of DATUM with (IPLUS NEWVALUE \#ALINK.OFFSET (SUB1 WORDSPERCELL))))) (* ; "replaces A & C Links at once more efficiently than separately") (DUMMYBF (IDIFFERENCE DATUM WORDSPERCELL)) (* ;; "This is either an actual BF or %"residual%" BF that provides enough BF to find its IVAR slot. This means that when a FX is copied, the cell preceding the FX is copied too." ) (IVAR (fetch (BF IVAR) of (fetch (FX DUMMYBF) of DATUM))) (CHECKED (AND (type? FX DATUM) (OR (IEQ ( fetch (FX DUMMYBF) of DATUM) (fetch (FX BLINK) of DATUM)) (AND (fetch (BF RESIDUAL) of (fetch (FX DUMMYBF) of DATUM)) (IEQ (fetch (BF IVAR) of (fetch (FX DUMMYBF) of DATUM)) (fetch (BF IVAR) of (fetch (FX BLINK) of DATUM))))))) (FIRSTPVAR (IPLUS DATUM (fetch (FX FXSIZE) of T))) (* ; "stack offset of PVAR0") (FXSIZE (PROGN 10)) (* ; "fixed overhead from flags thru clink") (PADDING ( PROGN 4)) (* ; "doublecell of garbage for microcode use") (FIRSTTEMP (IPLUS (fetch (FX FIRSTPVAR) of DATUM) (fetch (FX NPVARWORDS) of DATUM) (fetch (FX PADDING) of DATUM))) (* ; "note that NPVARWORDS is obtained from the FNHEADER") (SIZE (IDIFFERENCE (fetch (FX NEXTBLOCK) of DATUM) DATUM))))) (ACCESSFNS FSB (* ;; "FREE STACK BLOCK -- ") (* ;; " A piece of stack space that's free.") (* ;; "The first word contains 120000Q") (* ;; "The 2nd word is the size of the block, in words.") (( FSBBLOCK (ADDSTACKBASE DATUM)) (CHECKED (IEQ (fetch (FSB FLAGWORD) of DATUM) \STK.FSB.WORD))) ( BLOCKRECORD FSBBLOCK ((FLAGS BITS 3) (DUMMY BITS 13) (SIZE WORD))) (BLOCKRECORD FSBBLOCK ((FLAGWORD WORD) (SIZE WORD))) (* ; "free stack block") (TYPE? (IEQ (fetch (FSB FLAGS) of DATUM) \STK.FSB))) (ACCESSFNS STK ((STKBLOCK (ADDSTACKBASE DATUM))) (* ; "unspecified stack block") (BLOCKRECORD STKBLOCK ((FLAGS BITS 3))) (BLOCKRECORD STKBLOCK ((FLAGWORD WORD)))) (RPAQQ \#ALINK.OFFSET 10) (CONSTANTS \#ALINK.OFFSET) (GLOBALVARS \PENDINGINTERRUPT \KBDSTACKBASE \MISCSTACKBASE \STACKOVERFLOW) (PUTPROPS \MYALINK DMACRO (NIL ((OPCODES MYALINK)))) (PUTPROPS ADDSTACKBASE DMACRO (= . STACKADDBASE)) (PUTPROPS STACKADDBASE DMACRO ((N) (VAG2 \STACKHI N))) (PUTPROPS STACKGETBASE DMACRO ((N) (\GETBASE (STACKADDBASE N) 0))) (PUTPROPS STACKGETBASEPTR DMACRO ((N) (\GETBASEPTR (STACKADDBASE N) 0))) (PUTPROPS STACKPUTBASE DMACRO ((N V) (\PUTBASE (STACKADDBASE N) 0 V))) (PUTPROPS STACKPUTBASEPTR DMACRO ((N V) (\PUTBASEPTR (STACKADDBASE N) 0 V))) (PUTPROPS \MISCAPPLY* MACRO ((FN ARG1 ARG2) (UNINTERRUPTABLY (replace (IFPAGE MISCSTACKFN) of \InterfacePage with FN) (replace (IFPAGE MISCSTACKARG1) of \InterfacePage with ARG1) (replace (IFPAGE MISCSTACKARG2) of \InterfacePage with ARG2) (\CONTEXTSWITCH \MiscFXP) (fetch (IFPAGE MISCSTACKRESULT) of \InterfacePage)))) (BLOCKRECORD STACKP ((STACKP0 WORD) (EDFXP WORD)) (BLOCKRECORD STACKP ((STACKPOINTER FULLXPOINTER))) ( TYPE? (STACKP DATUM))) (RPAQQ STACKTYPES (\STK.GUARD \STK.FX \STK.BF \STK.NOTFLAG \STK.FSB \STK.FLAGS.SHIFT (\STK.FSB.WORD ( LLSH \STK.FSB \STK.FLAGS.SHIFT)) (\STK.GUARD.WORD (LLSH \STK.GUARD \STK.FLAGS.SHIFT)) (\STK.BF.WORD ( LLSH \STK.BF \STK.FLAGS.SHIFT)))) (RPAQQ \STK.GUARD 7) (RPAQQ \STK.FX 6) (RPAQQ \STK.BF 4) (RPAQQ \STK.NOTFLAG 0) (RPAQQ \STK.FSB 5) (RPAQQ \STK.FLAGS.SHIFT 13) (RPAQ \STK.FSB.WORD (LLSH \STK.FSB \STK.FLAGS.SHIFT)) (RPAQ \STK.GUARD.WORD (LLSH \STK.GUARD \STK.FLAGS.SHIFT)) (RPAQ \STK.BF.WORD (LLSH \STK.BF \STK.FLAGS.SHIFT)) (CONSTANTS \STK.GUARD \STK.FX \STK.BF \STK.NOTFLAG \STK.FSB \STK.FLAGS.SHIFT (\STK.FSB.WORD (LLSH \STK.FSB \STK.FLAGS.SHIFT)) (\STK.GUARD.WORD (LLSH \STK.GUARD \STK.FLAGS.SHIFT)) (\STK.BF.WORD (LLSH \STK.BF \STK.FLAGS.SHIFT))) (RPAQQ \StackAreaSize 768) (RPAQ \InitStackSize (ITIMES \StackAreaSize 12)) (CONSTANTS \StackAreaSize (\InitStackSize (ITIMES \StackAreaSize 12))) (RPAQQ \MAXSAFEUSECOUNT 200) (CONSTANTS \MAXSAFEUSECOUNT) (BLOCKRECORD NAMETABLESLOT ((VARTYPE BYTE) (VAROFFSET BYTE))) (BLOCKRECORD FVARSLOT ((BINDLO WORD) (BINDHI WORD)) (ACCESSFNS FVARSLOT ((LOOKEDUP (EVENP (fetch BINDLO of DATUM))) (BINDINGPTR (\VAG2 (fetch BINDHI of DATUM) (fetch BINDLO of DATUM)) (PROGN (replace BINDLO of DATUM with (\LOLOC NEWVALUE)) (replace BINDHI of DATUM with (\HILOC NEWVALUE))))))) (BLOCKRECORD PVARSLOT ((PVHI BITS 4) (PVVALUE XPOINTER)) (ACCESSFNS PVARSLOT ((BOUND (EQ (fetch ( PVARSLOT PVHI) of DATUM) 0) (if (NULL NEWVALUE) then (replace (PVARSLOT PVHI) of DATUM with 255) else (ERROR "Illegal replace" NEWVALUE)))))) (BLOCKRECORD STKTEMPSLOT ((STKTMPHI BITS 4) (VALUE XPOINTER)) (ACCESSFNS STKTEMPSLOT ((BINDINGPTRP ( NEQ (fetch STKTMPHI of DATUM) 0))))) (BLOCKRECORD BINDMARKSLOT ((BINDMARKP FLAG) (NIL BITS 15)) (BLOCKRECORD BINDMARKSLOT ((BINDNEGVALUES WORD) (BINDLASTPVAR WORD))) (ACCESSFNS BINDMARKSLOT ((BINDNVALUES (PROGN (* ; "Value stored in high half is one's complement of number of values bound") (LOGXOR (fetch BINDNEGVALUES of DATUM) 65535)))))) (RPAQQ \NT.IVAR 0) (RPAQQ \NT.PVAR 128) (RPAQQ \NT.FVAR 192) (CONSTANTS \NT.IVAR \NT.PVAR \NT.FVAR) (PUTPROP (QUOTE LLSTK) (QUOTE IMPORTDATE) (IDATE " 6-Jan-93 18:07:37")) (PUTPROPS WORDCONTENTS BYTEMACRO ((PTR) (\GETBASE PTR 0))) (PUTPROPS SETWORDCONTENTS BYTEMACRO ((PTR N) (\PUTBASE PTR 0 N))) (PUTPROPS WORDOFFSET BYTEMACRO ((PTR N) (\ADDBASE PTR N))) (PUTPROPS \RELEASECPAGE MACRO ((STREAM) (PROGN (* ; "Must be under an UNINTERRUPTABLY !") (COND (( fetch CBUFDIRTY of STREAM) (\SETIODIRTY STREAM (fetch CPAGE of STREAM)) (replace CBUFDIRTY of STREAM with NIL))) (replace CBUFSIZE of STREAM with 0) (replace CBUFPTR of STREAM with NIL)))) (PUTPROP (QUOTE PMAP) (QUOTE IMPORTDATE) (IDATE " 3-Feb-2002 14:11:02")) (PUTPROPS ADDREF MACRO (OPENLAMBDA (PTR) (PROG1 PTR (\ADDREF PTR)))) (PUTPROPS \ADDREF DMACRO ((X) ((OPCODES GCREF 0) X))) (PUTPROPS DELETEREF MACRO (OPENLAMBDA (PTR) (PROG1 PTR (\DELREF PTR)))) (PUTPROPS \DELREF DMACRO ((X) ((OPCODES GCREF 1) X))) (PUTPROPS SCANREF MACRO (= . \STKREF)) (PUTPROPS \STKREF DMACRO ((X) ((OPCODES GCREF 2) X))) (PUTPROPS UNSCANREF MACRO ((PTR) (\HTFIND PTR 3))) (PUTPROPS CREATEREF MACRO (= . \CREATEREF)) (PUTPROPS \CREATEREF MACRO (OPENLAMBDA (PTR) (PROG1 (\DELREF PTR) (.INCREMENT.ALLOCATION.COUNT. 1)))) (PUTPROPS .INCREMENT.ALLOCATION.COUNT. MACRO (OPENLAMBDA (N) (DECLARE (GLOBALVARS \RECLAIM.COUNTDOWN)) (AND \RECLAIM.COUNTDOWN (COND ((IGREATERP \RECLAIM.COUNTDOWN N) (SETQ \RECLAIM.COUNTDOWN (IDIFFERENCE \RECLAIM.COUNTDOWN N))) (T (SETQ \RECLAIM.COUNTDOWN) (\DORECLAIM)))))) (PUTPROPS .CHECK.ALLOCATION.COUNT. MACRO (OPENLAMBDA (N) (DECLARE (GLOBALVARS \RECLAIM.COUNTDOWN)) ( AND \RECLAIM.COUNTDOWN (COND ((NOT (IGREATERP \RECLAIM.COUNTDOWN N)) (SETQ \RECLAIM.COUNTDOWN) ( \DORECLAIM)))))) (PUTPROPS \GCDISABLED MACRO (NIL (PROGN (DECLARE (GLOBALVARS \GCDISABLED)) \GCDISABLED))) (BLOCKRECORD HTOVERFLOW ((CASE BITS 4) (PTR XPOINTER)) (ACCESSFNS HTOVERFLOW ((CLEAR NIL (\PUTBASEPTR DATUM 0 NIL))))) (BLOCKRECORD GC ((CNT BITS 15) (STKBIT FLAG) (HIBITS BITS 15) (LINKP FLAG) (NXTPTR FIXP)) (BLOCKRECORD GC ((STKCNT WORD))) (ACCESSFNS GC ((EMPTY (EQ 0 (\GETBASEFIXP DATUM 0)) (\PUTBASEFIXP DATUM 0 0)) ( CONTENTS (\GETBASEFIXP DATUM 0) (\PUTBASEFIXP DATUM 0 NEWVALUE)) (LINKPTR (LOGAND (\GETBASEFIXP DATUM 0) -2) (\PUTBASEFIXP DATUM 0 (LOGOR NEWVALUE 1)))))) (BLOCKRECORD HTCOLL ((* ;; "An entry in the GC collision table. NEXTFREE is initialized to 2 by INITGC, as part of the MAKEINIT." ) (FREEPTR FIXP) (* ; "The GC table entry") (NEXTFREE FIXP) (* ; "If the entry is in use, points to the next entry in this collision chain. If not, offset (in 1/2-entries) of the next free one on the chain." ))) (PUTPROP (QUOTE LLGC) (QUOTE IMPORTDATE) (IDATE "19-Oct-94 12:30:11")) (PUTPROPS \SYNCODE DMACRO (OPENLAMBDA (TABLE CHAR) (CHECK (type? CHARTABLE TABLE)) (* ; "0 is either NONE.TC, REAL.CCE, or OTHER.RC") (COND ((IGREATERP CHAR \MAXTHINCHAR) (OR (AND (fetch ( CHARTABLE NSCHARHASH) of TABLE) (GETHASH CHAR (fetch (CHARTABLE NSCHARHASH) of TABLE))) 0)) (T ( \GETBASEBYTE TABLE CHAR))))) (PUTPROPS \SETSYNCODE DMACRO (LAMBDA (TABLE CHAR CODE) (CHECK (type? CHARTABLE TABLE)) (* ; "0 is REAL.CCE, NONE.TC, OTHER.RC") (COND ((ILEQ CHAR \MAXTHINCHAR) (\PUTBASEBYTE TABLE CHAR CODE)) (T (\SETFATSYNCODE TABLE CHAR CODE))))) (DATATYPE CHARTABLE ((CHARSET0 256 BYTE) (NSCHARHASH FULLPOINTER))) (RPAQQ CCECHOMODES (REAL.CCE IGNORE.CCE SIMULATE.CCE INDICATE.CCE)) (RPAQQ REAL.CCE 0) (RPAQQ IGNORE.CCE 8) (RPAQQ SIMULATE.CCE 16) (RPAQQ INDICATE.CCE 24) (CONSTANTS REAL.CCE IGNORE.CCE SIMULATE.CCE INDICATE.CCE) (RPAQQ TERMCLASSES (NONE.TC EOL.TC CHARDELETE.TC WORDDELETE.TC WORDSEPR.TC LINEDELETE.TC RETYPE.TC CTRLV.TC)) (RPAQQ NONE.TC 0) (RPAQQ EOL.TC 1) (RPAQQ CHARDELETE.TC 2) (RPAQQ WORDDELETE.TC 6) (RPAQQ WORDSEPR.TC 7) (RPAQQ LINEDELETE.TC 3) (RPAQQ RETYPE.TC 4) (RPAQQ CTRLV.TC 5) (CONSTANTS NONE.TC EOL.TC CHARDELETE.TC WORDDELETE.TC WORDSEPR.TC LINEDELETE.TC RETYPE.TC CTRLV.TC) (ACCESSFNS TERMCODE ((CCECHO (LOGAND DATUM 24)) (TERMCLASS (LOGAND DATUM 7))) (* ; "We assume that values are appropriately shifted") (CREATE (LOGOR CCECHO TERMCLASS))) (DATATYPE TERMTABLEP (TERMSA RAISEFLG DELCHARECHO LINEDELETE 1STCHDEL NTHCHDEL POSTCHDEL EMPTYCHDEL ( CONTROLFLG FLAG) (ECHOFLG FLAG)) TERMSA _ (create CHARTABLE)) (PUTPROPS \GETREADMACRODEF MACRO ((C TBL) (GETHASH C (fetch READMACRODEFS of TBL)))) (PUTPROPS \GTREADTABLE MACRO (ARGS (COND ((LITATOM (CAR ARGS)) (SUBPAIR (QUOTE (X . FLG)) ARGS (QUOTE (SELECTQ X ((NIL T) (\DTEST *READTABLE* (QUOTE READTABLEP))) (\GTREADTABLE1 X . FLG))))) (T (QUOTE IGNOREMACRO))))) (PUTPROPS \GTREADTABLE1 DMACRO (ARGS (COND ((NULL (CDR ARGS)) (LIST (QUOTE \DTEST) (CAR ARGS) (QUOTE ( QUOTE READTABLEP)))) (T (QUOTE IGNOREMACRO))))) (RPAQQ MACROBIT 8) (RPAQQ BREAKBIT 16) (RPAQQ STOPATOMBIT 32) (RPAQQ ESCAPEBIT 64) (RPAQQ INNERESCAPEBIT 4) (CONSTANTS MACROBIT BREAKBIT STOPATOMBIT ESCAPEBIT INNERESCAPEBIT) (RPAQQ READCODEMASKS ((CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1)) (WAKEUPMASK (LOGOR MACROBIT 2)))) (RPAQ CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1)) (RPAQ WAKEUPMASK (LOGOR MACROBIT 2)) (CONSTANTS (CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1)) (WAKEUPMASK (LOGOR MACROBIT 2))) (RPAQQ READMACROCONTEXTS ((ALWAYS.RMC (LOGOR MACROBIT STOPATOMBIT BREAKBIT 0)) (FIRST.RMC (LOGOR MACROBIT 0)) (ALONE.RMC (LOGOR MACROBIT 1)))) (RPAQ ALWAYS.RMC (LOGOR MACROBIT STOPATOMBIT BREAKBIT 0)) (RPAQ FIRST.RMC (LOGOR MACROBIT 0)) (RPAQ ALONE.RMC (LOGOR MACROBIT 1)) (CONSTANTS (ALWAYS.RMC (LOGOR MACROBIT STOPATOMBIT BREAKBIT 0)) (FIRST.RMC (LOGOR MACROBIT 0)) ( ALONE.RMC (LOGOR MACROBIT 1))) (RPAQQ READCLASSES ((OTHER.RC 0) (SEPRCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT 0)) (BREAKCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 0)) (STRINGDELIM.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 1)) ( LEFTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 2)) (RIGHTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 3)) (LEFTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 4)) (RIGHTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 5)) (ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 6)) (MULTIPLE-ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 7)) (PACKAGEDELIM.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 1)))) (RPAQQ OTHER.RC 0) (RPAQ SEPRCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT 0)) (RPAQ BREAKCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 0)) (RPAQ STRINGDELIM.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 1)) (RPAQ LEFTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 2)) (RPAQ RIGHTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 3)) (RPAQ LEFTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 4)) (RPAQ RIGHTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 5)) (RPAQ ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 6)) (RPAQ MULTIPLE-ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 7)) (RPAQ PACKAGEDELIM.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 1)) (CONSTANTS (OTHER.RC 0) (SEPRCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT 0)) (BREAKCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 0)) (STRINGDELIM.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 1)) (LEFTPAREN.RC ( LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 2)) (RIGHTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 3)) ( LEFTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 4)) (RIGHTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 5)) (ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 6)) (MULTIPLE-ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 7)) (PACKAGEDELIM.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 1))) (RPAQQ READMACROWAKEUPS ((IMMEDIATE.RMW (LOGOR MACROBIT 2)) (NONIMMEDIATE.RMW (LOGOR MACROBIT 0)))) (RPAQ IMMEDIATE.RMW (LOGOR MACROBIT 2)) (RPAQ NONIMMEDIATE.RMW (LOGOR MACROBIT 0)) (CONSTANTS (IMMEDIATE.RMW (LOGOR MACROBIT 2)) (NONIMMEDIATE.RMW (LOGOR MACROBIT 0))) (RPAQQ READMACROESCAPES ((ESC.RME ESCAPEBIT) (NOESC.RME 0))) (RPAQ ESC.RME ESCAPEBIT) (RPAQQ NOESC.RME 0) (CONSTANTS (ESC.RME ESCAPEBIT) (NOESC.RME 0)) (ACCESSFNS READCODE ((ESCAPE (LOGAND DATUM ESCAPEBIT)) (ESCQUOTE (BITTEST DATUM ESCAPEBIT)) (STOPATOM (BITTEST DATUM STOPATOMBIT)) (INNERESCQUOTE (BITTEST DATUM (LOGOR STOPATOMBIT INNERESCAPEBIT))) ( MACROCONTEXT (LOGAND DATUM CONTEXTMASK)) (MACROP (BITTEST DATUM MACROBIT)) (WAKEUP (LOGAND DATUM WAKEUPMASK)) (BREAK (BITTEST DATUM BREAKBIT)))) (RECORD READMACRODEF (MACROTYPE . MACROFN)) (DATATYPE READTABLEP ((READSA POINTER) (* ; "A CHARTABLE defining syntax of each char") (READMACRODEFS POINTER) (* ; "A hash table associating macro chars with macro definitions") (READMACROFLG FLAG) (* ; "True if read macros are enabled (turned off by Interlisp's crufty READMACROS function)") (ESCAPEFLG FLAG) (* ; "True if the char(s) with escape syntax are enabled (turned off by Interlisp's crufty ESCAPE function)" ) (COMMONLISP FLAG) (* ; "True if table is a Common Lisp read table and hence must obey Common Lisp syntax rules") (NUMBERBASE BITS 5) (* ; "Not used") (CASEINSENSITIVE FLAG) (* ; "If true, unescaped lowercase chars are converted to uppercase in symbols") (COMMONNUMSYNTAX FLAG) (* ; "True if number notation includes Common Lisp numbers: rationals as a/b, and the dfls exponent markers" ) (USESILPACKAGE FLAG) (* ; "If true, IL:READ ignores *PACKAGE* and reads in the IL package") (NIL 5 FLAG) (DISPATCHMACRODEFS POINTER) (* ; "An a-list of dispatching macro char and its dispatch definitions") (HASHMACROCHAR BYTE) (* ; "The character code used in this read table for the # dispatch macro") (ESCAPECHAR BYTE) (* ; "The character code used in this read table for single escape") (MULTESCAPECHAR BYTE) (* ; "The character code used in this read table for multiple escape") (PACKAGECHAR BYTE) (* ; "The character code used in this read table for package delimiter") (READTBLNAME POINTER) (* ; "The canonical 'name' of this read table")) READSA _ (create CHARTABLE)) (PUTPROP (QUOTE ATBL) (QUOTE IMPORTDATE) (IDATE "20-Apr-2018 17:35:56")) (DATATYPE STREAM ((* ;; "First 8 words are fixed for BIN, BOUT opcodes. Used to require length of whole datatype be multiple of 4, but Dolphin dead now." ) (COFFSET WORD) (* ; "Offset in CPPTR of next bin or bout") (CBUFSIZE WORD) (* ; "Offset past last byte in that buffer") (PEEKEDCHARP FLAG) (* ; "if true, PEEKEDCHAR contains value of recent call to unread-char") (ACCESSBITS BITS 3) (* ; "What kind of access file is open for (read, write, append)") (CBUFPTR POINTER) (* ; "Pointer to current buffer") (BYTESIZE BYTE) (* ; "Byte size of stream, always 8 for now") (CHARSET BYTE) (* ; "the current character set for this stream. If 255, stream is not runcoded, so read-char consumes two bytes every time" ) (PEEKEDCHAR WORD) (* ; "value of unread-char call") (CHARPOSITION WORD) (* ; "Used by POSITION etc." ) (CBUFMAXSIZE WORD) (* ; "on output, the size of the physical buffer--can't extend beyond this") (* ;; "-------- Above fields (8 words) potentially known to microcode. --------") (NONDEFAULTDATEFLG FLAG) (REVALIDATEFLG FLAG) (MULTIBUFFERHINT FLAG) (* ; "True if stream likes to read and write more than one buffer at a time") (USERCLOSEABLE FLAG) (* ; "Can be closed by CLOSEF; NIL for terminal, dribble...") (FULLFILENAME POINTER) (* ; "Name by which file is known to user") (BINABLE FLAG) (* ; "BIN punts unless this bit on") (BOUTABLE FLAG) (* ; "BOUT punts unless this bit on") (EXTENDABLE FLAG) (* ; "BOUT punts when COFFSET ge CBUFFSIZE unless this bit set and COFFSET lt 512") (CBUFDIRTY FLAG) (* ; "true if BOUT has sullied the current buffer") (DEVICE POINTER) (* ; "FDEV of this guy") (USERVISIBLE FLAG) (* ; "Listed by OPENP; NIL for terminal, dribble ...") (EOLCONVENTION BITS 2) (* ; "End-of-line convention") (NOTXCCS FLAG) (* ; "True if the character encoding format is not XCCS.") ( VALIDATION POINTER) (* ; "A number somehow identifying file, used to determine if file has changed in our absence") (CPAGE POINTER) (* ; "CPAGE,,COFFSET constitutes current file pointer for most randaccess streams") (EPAGE POINTER) (EOFFSET WORD) (* ; "Page, byte offset of eof") (LINELENGTH WORD) (* ; "LINELENGTH of stream, or -1 for no line length") (* ;; "----Following are device-specific fields----" ) (* ;; "Available for device-specific uses, NOT for application use.") (F1 POINTER) (F2 POINTER) (F3 POINTER) (F4 POINTER) (F5 POINTER) (FW6 WORD) (FW7 WORD) (FW8 WORD) (FW9 WORD) (F10 POINTER) (* ;; "----Following only filled in for open streams----") (STRMBINFN POINTER) (* ; "Either the BIN fn from the FDEV, or a trap") (STRMBOUTFN POINTER) (* ; "Either the BIN fn from the FDEV, or a trap") (OUTCHARFN POINTER) (* ; "Called by \OUTCHAR, the normal character printer.") (ENDOFSTREAMOP POINTER) (* ; "Called if EOF and we try to read.") (OTHERPROPS POINTER) (* ; "PROP LIST for holding other info.") ( IMAGEOPS POINTER) (* ; "Image operations vector") (IMAGEDATA POINTER) (* ; "Image instance variables--format depends on IMAGEOPS value") (BUFFS POINTER) (* ; "Buffer chain for pmapped streams") (MAXBUFFERS WORD) (* ; "Max # of buffers the system will allocate.") (LASTCCODE WORD) (* ; "After READ, RATOM, etc, the charcode that will be returned (as a character) by LASTC. If there is none, this field is 65535." ) (EXTRASTREAMOP POINTER) (* ; "For use of applications programs, not devices")) (BLOCKRECORD STREAM ( (NIL 2 WORD) (UCODEFLAGS1 BITS 1) (* ;; "respecification of access bits:") (RANDOMWRITEABLE FLAG) (* ; "File open for output (access = OUTPUT or BOTH)") (APPENDABLE FLAG) (* ; "File open for append (OUTPUT or APPEND or BOTH)") (READABLE FLAG) (* ; "File open for read (READ or BOTH)") (NIL POINTER))) (BLOCKRECORD STREAM ((NIL 4 WORD) (NIL BITS 14) ( * ;; "JIS character encoding format specific, overrides CHARSET field.") (IN.KANJIIN FLAG) (* ; "True if input stream is in Kanji-in mode.") (OUT.KANJIIN FLAG) (* ; "True if output stream is in Kanji-in mode."))) (ACCESSFNS STREAM ((ACCESS \GETACCESS \SETACCESS) ( FULLNAME (OR (fetch (STREAM FULLFILENAME) of DATUM) DATUM)) (NAMEDP (AND (fetch (STREAM FULLFILENAME) of DATUM) T)))) (ACCESSFNS STREAM (EXTERNALFORMAT (LISTGET (ffetch (STREAM OTHERPROPS) of DATUM) ( QUOTE EXTERNALFORMAT)) (LET ((PROPS (ffetch (STREAM OTHERPROPS) of DATUM))) (freplace (STREAM NOTXCCS) of DATUM with T) (COND (PROPS (LISTPUT PROPS (QUOTE EXTERNALFORMAT) NEWVALUE)) (T (freplace (STREAM OTHERPROPS) of DATUM with (LIST (QUOTE EXTERNALFORMAT) NEWVALUE)))) (freplace (STREAM OUTCHARFN) of DATUM with (ffetch (EXTERNALFORMAT FILEOUTCHARFN) of NEWVALUE)) (AND (ffetch (EXTERNALFORMAT EOLVALID) of NEWVALUE) (freplace (STREAM EOLCONVENTION) of DATUM with (ffetch (EXTERNALFORMAT EOL) of NEWVALUE) ))))) (ACCESSFNS STREAM (EXTERNALFORMAT.NAME (LISTGET (ffetch (STREAM OTHERPROPS) of DATUM) (QUOTE EXTERNALFORMAT.NAME)) (LET ((PROPS (ffetch (STREAM OTHERPROPS) of DATUM)) (NAME (COND ((LITATOM NEWVALUE) NEWVALUE) (T (MKATOM NEWVALUE))))) (freplace (STREAM NOTXCCS) of DATUM with T) (COND (PROPS (LISTPUT PROPS (QUOTE EXTERNALFORMAT.NAME) NAME)) (T (freplace (STREAM OTHERPROPS) of DATUM with (LIST (QUOTE EXTERNALFORMAT.NAME) NAME))))))) (ACCESSFNS STREAM (INCCODEFN (LET ((XFMT (LISTGET (ffetch ( STREAM OTHERPROPS) of DATUM) (QUOTE EXTERNALFORMAT)))) (AND (type? EXTERNALFORMAT XFMT) (fetch ( EXTERNALFORMAT INCCODEFN) of XFMT))))) (ACCESSFNS STREAM (PEEKCCODEFN (LET ((XFMT (LISTGET (ffetch ( STREAM OTHERPROPS) of DATUM) (QUOTE EXTERNALFORMAT)))) (AND (type? EXTERNALFORMAT XFMT) (fetch ( EXTERNALFORMAT PEEKCCODEFN) of XFMT))))) (ACCESSFNS STREAM (BACKCHARFN (LET ((XFMT (LISTGET (ffetch ( STREAM OTHERPROPS) of DATUM) (QUOTE EXTERNALFORMAT)))) (AND (type? EXTERNALFORMAT XFMT) (fetch ( EXTERNALFORMAT BACKCHARFN) of XFMT))))) (ACCESSFNS STREAM (FILEOUTCHARFN (ffetch (STREAM OUTCHARFN) of DATUM))) (SYNONYM CBUFPTR (CPPTR)) USERCLOSEABLE _ T USERVISIBLE _ T ACCESSBITS _ NoBits CPAGE _ 0 EPAGE _ 0 BUFFS _ NIL BYTESIZE _ 8 CBUFPTR _ NIL MAXBUFFERS _ (LET NIL (DECLARE (GLOBALVARS \STREAM.DEFAULT.MAXBUFFERS)) \STREAM.DEFAULT.MAXBUFFERS) CHARPOSITION _ 0 LINELENGTH _ (LET NIL ( DECLARE (GLOBALVARS FILELINELENGTH)) FILELINELENGTH) OUTCHARFN _ (FUNCTION \FILEOUTCHARFN) ENDOFSTREAMOP _ (FUNCTION \EOSERROR) IMAGEOPS _ \NOIMAGEOPS EOLCONVENTION _ (SELECTQ (SYSTEMTYPE) (D CR.EOLC) (VAX LF.EOLC) (JERICHO CRLF.EOLC) CR.EOLC) STRMBINFN _ (FUNCTION \STREAM.NOT.OPEN) STRMBOUTFN _ (FUNCTION \STREAM.NOT.OPEN) LASTCCODE _ 65535 NOTXCCS _ NIL) (PUTPROPS STREAMOP 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 "STREAMOP - OPNAME not quoted:" ARGS))) (CDDR ARGS))))) (RPAQQ AppendBit 2) (RPAQQ NoBits 0) (RPAQQ ReadBit 1) (RPAQQ WriteBit 4) (RPAQ OutputBits (LOGOR AppendBit WriteBit)) (RPAQ BothBits (LOGOR ReadBit OutputBits)) (RPAQQ \NORUNCODE 255) (CONSTANTS AppendBit NoBits ReadBit WriteBit (OutputBits (LOGOR AppendBit WriteBit)) (BothBits (LOGOR ReadBit OutputBits)) \NORUNCODE) (PUTPROPS TestMasked MACRO ((BITS MASK) (NEQ (LOGAND BITS MASK) 0))) (PUTPROPS APPENDABLE MACRO ((STREAM) (TestMasked (fetch ACCESSBITS of STREAM) AppendBit))) (PUTPROPS APPENDONLY MACRO ((STREAM) (EQ (fetch ACCESSBITS of STREAM) AppendBit))) (PUTPROPS DIRTYABLE MACRO ((STREAM) (TestMasked (fetch ACCESSBITS of STREAM) (CONSTANT (LOGOR AppendBit WriteBit))))) (PUTPROPS OPENED MACRO ((STREAM) (NEQ (fetch ACCESSBITS of STREAM) NoBits))) (PUTPROPS OVERWRITEABLE MACRO ((STREAM) (TestMasked (fetch ACCESSBITS of STREAM) WriteBit))) (PUTPROPS READABLE MACRO ((STREAM) (TestMasked (fetch ACCESSBITS of STREAM) ReadBit))) (PUTPROPS READONLY MACRO ((STREAM) (EQ (fetch ACCESSBITS of STREAM) ReadBit))) (PUTPROPS WRITEABLE MACRO ((STREAM) (OR (OVERWRITEABLE STREAM) (AND (APPENDABLE STREAM) (\EOFP STREAM) )))) (PUTPROPS \RUNCODED MACRO (OPENLAMBDA (STREAM) (* ;; "returns NIL is the stream is not runcoded, that is, if the stream has 16 bit bytes explicitly represented" ) (* ; "note that neq is ok since charsets are known to be SMALLP's") (NEQ (fetch CHARSET of STREAM) \NORUNCODE))) (RPAQQ EOLCONVENTIONS ((CR.EOLC 0) (LF.EOLC 1) (CRLF.EOLC 2))) (RPAQQ CR.EOLC 0) (RPAQQ LF.EOLC 1) (RPAQQ CRLF.EOLC 2) (CONSTANTS (CR.EOLC 0) (LF.EOLC 1) (CRLF.EOLC 2)) (PUTPROPS FDEVOP DMACRO (ARGS (LET ((OPNAME (CAR ARGS)) (METHOD-DEVICE (CADR ARGS)) (TAIL (CDDR ARGS)) ) (COND ((AND (LISTP OPNAME) (EQ (CAR OPNAME) (QUOTE QUOTE))) (BQUOTE (SPREADAPPLY* (fetch (FDEV (\, ( CADR OPNAME))) of (\, METHOD-DEVICE)) (\,@ TAIL)))) (T (ERROR "OPNAME not quoted: " OPNAME)))))) (PUTPROPS \RECOGNIZE-HACK DMACRO (ARGS (LET ((NAME (CAR ARGS)) (RECOG (CADR ARGS)) (DEVICE (CADDR ARGS ))) (BQUOTE (if (type? STREAM (\, NAME)) then (\, NAME) else (FDEVOP (QUOTE GETFILENAME) (\, DEVICE) ( \, NAME) (\, RECOG) (\, DEVICE))))))) (DATATYPE FDEV ((RESETABLE FLAG) (* ; "Obsolete") (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" ) (DEVICENAME POINTER) (* ; "Identifying name somehow") (REMOTEP FLAG) (* ; "true if device not local to machine") (SUBDIRECTORIES FLAG) (* ; "true if device has real subdirectories") (INPUT-INDIRECTED FLAG) (* ; "True for devices that indirect their input stream. Method INPUTSTREAM fetches it") ( OUTPUT-INDIRECTED FLAG) (* ; "True for devices that indirect their output stream. Method OUTPUTSTREAM fetches it") (DEVICEINFO POINTER) (* ; "arbitrary device-specific info stored here") (OPENFILELST POINTER) (* ; "Default place to keep list of streams open on this device") (* ;; "-----Rest of record consists of device %"methods%"-----") (* ;; "-----Following fields required of all devices-----") (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" ) (EVENTFN POINTER) (* ; "(device event), called before/after logout, sysout, makesys") (* ;; "-----Following fields required of all named devices, e.g., ones that open files-----") ( DIRECTORYNAMEP POINTER) (* ; "(host/dir) => true if directory exists on host") (OPENFILE POINTER) (* ; "(name access recog otherinfo device) => new stream open on this device, or NIL if name not found") ( CLOSEFILE POINTER) (* ; "(stream) => closes stream, returns it") (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" ) (GETFILENAME POINTER) (* ; "(name recog device) => full file name") (DELETEFILE POINTER) (* ; "(name) => deletes file so named, returning name, or NIL on failure. RECOG=OLDEST") (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" ) (RENAMEFILE POINTER) (* ; "(olddevice oldfile newdevice newfile) to rename file on this (olddevice) to a potentially different device." ) (OPENP POINTER) (* ; "(name access dev) => stream if name is open for access, or all open streams if name = NIL") ( REGISTERFILE POINTER) (* ; "(stream dev) => registers stream on its device") (UNREGISTERFILE POINTER) (* ; "(stream dev) => unregisters a stream from its device") (FREEPAGECOUNT POINTER) (* ; "(host/dir dev) => # of free pages on host/dir") (MAKEDIRECTORY POINTER) (* ; "(host/dir dev)") ( 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") ( BREAKCONNECTION POINTER) (* ; "(host fastp dev) => closes connections to host") (* ;; "-----The following are required methods for operating on open streams-----") (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") (READCHAR POINTER) (* ; "(stream) => next input char") (WRITECHAR POINTER) (* ; "(stream char) => writes char to stream") ( PEEKCHAR POINTER) (UNREADCHAR POINTER) (READP POINTER) (* ; "(stream flag) => T if there is input available from stream right now") (EOFP POINTER) (* ; "(stream) => T if BIN would signal eof.") (BLOCKIN POINTER) (* ; "(stream buffer byteoffset nbytes)") (BLOCKOUT POINTER) (* ; "(stream buffer byteoffset nbytes)") (FORCEOUTPUT POINTER) (* ; "(stream waitForFinish) flushes out to device anything that is buffered awaiting transmission") ( GETFILEINFO POINTER) (* ; "(stream/name attribute device) => value of attribute for open stream or name of closed file") ( SETFILEINFO POINTER) (* ; "(stream/name attribute newvalue device) sets attribute of open stream or closed file of given name") (CHARSETFN POINTER) (* ; "(stream charset) => access function for the charset slot, for benefit of indirect streams. See IMCHARSET for changing it on a file." ) (INPUTSTREAM POINTER) (* ; "(stream) => indirected input stream") (OUTPUTSTREAM POINTER) (* ; "(stream) => indirected output stream") (* ;; "-----Following are required of random-access streams-----") (GETFILEPTR POINTER) (GETEOFPTR POINTER) (SETFILEPTR POINTER) (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" ) (SETEOFPTR POINTER) (* ; "(stream length) => truncates or lengthens stream to indicated length") ( LASTC POINTER) (* ; "Should be possible only if RANDOMACCESSP") (* ;; "-----Following used for buffered streams-----") (GETNEXTBUFFER POINTER) (* ; "(stream whatfor noerrorflg) => Disposes of current buffer and optionally reads next. whatfor is READ or WRITE. Can cause EOF error unless noerrorflg" ) (RELEASEBUFFER POINTER) (* ; "(stream) => Does whatever appropriate when CBUFPTR is released") (* ;; "-----Following used for pagemapped streams-----") (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)" ) (WRITEPAGES POINTER) (* ; "(stream firstpage# buflist) writes from buflist to stream starting at firstpage# of stream") ( TRUNCATEFILE POINTER) (* ; "(stream page offset) make stream's eof be at page,offset, discarding anything after it") (* ;; "-----For window system, argh-----") (WINDOWOPS POINTER) (* ; "window system operations") (WINDOWDATA POINTER) (* ; "data for window systems") (* ;; "-----For any stream (here to not recompile everything)-----") (READCHARCODE POINTER) (* ; "Read a character code from the stream (cf BIN for bytes).")) 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) REGISTERFILE _ (FUNCTION NILL) OPENP _ (FUNCTION NILL) UNREGISTERFILE _ (FUNCTION NILL) READCHAR _ ( FUNCTION \GENERIC.READCHAR) WRITECHAR _ (FUNCTION \GENERIC.WRITECHAR) PEEKCHAR _ (FUNCTION \GENERIC.PEEKCHAR) UNREADCHAR _ (FUNCTION \GENERIC.UNREADCHAR) CHARSETFN _ (FUNCTION \GENERIC.CHARSET) BREAKCONNECTION _ (FUNCTION NILL) READCHARCODE _ (FUNCTION \GENERIC.READCCODE)) (RECORD FILEGENOBJ (NEXTFILEFN FILEINFOFN . GENFILESTATE)) (DATATYPE EXTERNALFORMAT ((EOLVALID FLAG) (* ; "If true, the value of EOL field will replace the EOLCONVENTION field of the resulted stream.") (EOL BITS 2) (NIL BITS 1) (INCCODEFN POINTER) (* ; "Called with two arguments -- STREAM and COUNTP") ( PEEKCCODEFN POINTER) (* ; "Called with three arguments -- STREAM, NOERROR and COUNTP") (BACKCHARFN POINTER) (* ; "Called with two arguments -- STREAM and COUNTP") (FILEOUTCHARFN POINTER) (* ; "Called with two arguments -- STREAM and CHARCODE")) EOLVALID _ NIL) (PUTPROPS \OUTCHAR DMACRO (OPENLAMBDA (STREAM CHARCODE) (STREAMOP (QUOTE OUTCHARFN) STREAM STREAM CHARCODE))) (PUTPROPS \DEVICE-OPEN-STREAMS MACRO (ARGS (LET ((DEVICE (CAR ARGS))) (BQUOTE (FDEVOP (QUOTE OPENP) ( \, DEVICE) NIL NIL (\, DEVICE)))))) (PUTPROPS \CONVERT-PATHNAME DMACRO (OPENLAMBDA (PATHNAME?) (* ;; "Coerce pathnames to Interlisp strings, for the benefit of antediluvian Interlisp-D file fns") ( CL:TYPECASE PATHNAME? (PATHNAME (INTERLISP-NAMESTRING PATHNAME?)) (T PATHNAME?)))) (DEFOPTIMIZER ACCESS-CHARSET (STREAM &OPTIONAL NEWVALUE) (BQUOTE ((OPENLAMBDA (STRM) (FDEVOP (QUOTE CHARSETFN) (fetch (STREAM DEVICE) of STRM) STRM (\, NEWVALUE))) (\, STREAM)))) (PUTPROPS \DECFILEPTR MACRO ((STREAM X) (\INCFILEPTR STREAM (IMINUS X)))) (PUTPROPS \GETFILEPTR MACRO (OPENLAMBDA (STRM) (FDEVOP (QUOTE GETFILEPTR) (fetch DEVICE of STRM) STRM) )) (PUTPROPS \SIGNEDWIN MACRO ((STREAM) (SIGNED (\WIN STREAM) BITSPERWORD))) (PUTPROPS \SIGNEDWOUT MACRO ((STREAM N) (\WOUT STREAM (UNSIGNED N BITSPERWORD)))) (PUTPROPS \WIN MACRO (OPENLAMBDA (STREAM) (create WORD HIBYTE _ (\BIN STREAM) LOBYTE _ (\BIN STREAM))) ) (PUTPROPS \WOUT MACRO (OPENLAMBDA (STREAM W) (\BOUT STREAM (fetch HIBYTE of W)) (\BOUT STREAM (fetch LOBYTE of W)))) (PUTPROPS \BINS BYTEMACRO (OPENLAMBDA (STRM BASE OFF NBYTES) (FDEVOP (QUOTE BLOCKIN) (fetch (STREAM DEVICE) of STRM) STRM BASE OFF NBYTES))) (PUTPROPS \BOUTS BYTEMACRO (OPENLAMBDA (STRM BASE OFF NBYTES) (FDEVOP (QUOTE BLOCKOUT) (fetch (STREAM DEVICE) of STRM) STRM BASE OFF NBYTES))) (PUTPROPS \EOFP BYTEMACRO (OPENLAMBDA (STRM) (FDEVOP (QUOTE EOFP) (fetch (STREAM DEVICE) of STRM) STRM ))) (PUTPROPS SIZE.FROM.LENGTH MACRO (LAMBDA (LEN) (DECLARE (LOCALVARS LEN)) (AND LEN (FOLDHI LEN BYTESPERPAGE)))) (RPAQQ BitsPerByte 8) (RPAQ ByteOffsetSize (SELECTQ (SYSTEMTYPE) (VAX 10) 9)) (RPAQQ WordsPerPage 256) (CONSTANTS BitsPerByte (ByteOffsetSize (SELECTQ (SYSTEMTYPE) (VAX 10) 9)) WordsPerPage) (RPAQ \MAXFILEPTR (SUB1 (LLSH 1 30))) (CONSTANTS (\MAXFILEPTR (SUB1 (LLSH 1 30)))) (ACCESSFNS BYTEPTR ((PAGE (FOLDLO DATUM BYTESPERPAGE)) (OFFSET (MOD DATUM BYTESPERPAGE))) (TYPE? (AND (FIXP DATUM) (IGEQ DATUM 0) (ILEQ DATUM \MAXFILEPTR))) (CREATE (IPLUS (UNFOLD PAGE BYTESPERPAGE) OFFSET))) (PUTPROP (QUOTE FILEIO) (QUOTE IMPORTDATE) (IDATE "26-Mar-99 12:25:05")) (BLOCKRECORD FIXP ((HINUM WORD) (LONUM WORD)) (CREATE (CREATECELL \FIXP)) (TYPE? (EQ (NTYPX DATUM) \FIXP))) (RPAQQ MAX.SMALL.INTEGER 65535) (RPAQQ MAX.POS.HINUM 32767) (CONSTANTS (MAX.SMALL.INTEGER 65535) (MAX.POS.HINUM 32767)) (PUTPROPS .UNBOX. MACRO (ARGS (LET ((ARG-FORM (CAR ARGS)) (HIGH-VAR (CADR ARGS)) (LOW-VAR (CADDR ARGS) ) (BIGNUM-FORM (CADDDR ARGS))) (BQUOTE (PROG NIL UBLP (SELECTC (NTYPX (\, ARG-FORM)) (\FIXP (SETQ (\, HIGH-VAR) (ffetch (FIXP HINUM) of (\, ARG-FORM))) (SETQ (\, LOW-VAR) (ffetch (FIXP LONUM) of (\, ARG-FORM)))) (\SMALLP (COND ((ILEQ 0 (\, ARG-FORM)) (SETQ (\, HIGH-VAR) 0) (SETQ (\, LOW-VAR) (\, ARG-FORM))) (T (SETQ (\, HIGH-VAR) 65535) (SETQ (\, LOW-VAR) (\LOLOC (\, ARG-FORM)))))) (\FLOATP (SETQ (\, ARG-FORM) (\FIXP.FROM.FLOATP (\, ARG-FORM))) (GO UBLP)) (COND ((TYPENAMEP (\, ARG-FORM) (QUOTE RATIO)) (SETQ (\, ARG-FORM) (IQUOTIENT (CL::RATIO-NUMERATOR (\, ARG-FORM)) (CL::RATIO-DENOMINATOR (\, ARG-FORM)))) (GO UBLP)) (\,@ (COND (BIGNUM-FORM (BQUOTE (((CL:INTEGERP (\, ARG-FORM)) (\, BIGNUM-FORM) )))) (T (BQUOTE (((CL:INTEGERP (\, ARG-FORM)) (\ILLEGAL.ARG (\, ARG-FORM)))))))) (T ( CL::%%NOT-NONCOMPLEX-NUMBER-ERROR (\, ARG-FORM)))))))))) (PUTPROPS .NEGATE. MACRO ((HY LY) (COND ((EQ 0 LY) (AND (NEQ HY 0) (SETQ HY (ADD1 (IDIFFERENCE MAX.SMALL.INTEGER HY))))) (T (SETQ HY (IDIFFERENCE MAX.SMALL.INTEGER HY)) (SETQ LY (ADD1 (IDIFFERENCE MAX.SMALL.INTEGER LY))))))) (PUTPROPS .LLSH1. MACRO ((HI LO) (* ; "shift the pair left one, assuming no overflow") (SETQ HI (LLSH HI 1)) (SETQ LO (LLSH (COND ((IGREATERP LO MAX.POS.HINUM) (add HI 1) (LOGAND LO MAX.POS.HINUM)) (T LO) ) 1)))) (PUTPROPS .LRSH1. MACRO ((HI LO) (SETQ LO (LRSH LO 1)) (COND ((NEQ (LOGAND HI 1) 0) (SETQ LO (IPLUS LO \SIGNBIT)))) (SETQ HI (LRSH HI 1)))) (PUTPROPS .BOXIPLUS. MACRO (OPENLAMBDA (X Y) (PROG ((HX (\GETBASE X 0)) (LX (\GETBASE X 1)) HY LY) ( .UNBOX. Y HY LY) (SETQ HX (COND ((IGREATERP HX (IDIFFERENCE MAX.SMALL.INTEGER HY)) (IDIFFERENCE HX ( ADD1 (IDIFFERENCE MAX.SMALL.INTEGER HY)))) (T (IPLUS HX HY)))) (* Add high parts) (\PUTBASE X 1 (COND ((IGREATERP LX (IDIFFERENCE MAX.SMALL.INTEGER LY)) (* Carry into high part.) (SETQ HX (COND ((EQ HX MAX.SMALL.INTEGER) 0) (T (ADD1 HX)))) (IDIFFERENCE LX (ADD1 (IDIFFERENCE MAX.SMALL.INTEGER LY)))) (T ( IPLUS LX LY)))) (\PUTBASE X 0 HX) (RETURN X)))) (PUTPROPS PutUnboxed DMACRO (= . \PUTFIXP)) (PUTPROP (QUOTE LLARITH) (QUOTE IMPORTDATE) (IDATE "16-May-90 18:47:56")) (PUTPROPS POLYEVAL DMACRO ((X COEFFS DEGREE) (* ; "execute the POLYEVAL opcode on the value X, the array COEFFS with degree DEGREE") (\FLOATBOX (( OPCODES UBFLOAT3 0) (\FLOATUNBOX X) (fetch (ARRAYP BASE) of COEFFS) DEGREE)))) (BLOCKRECORD FLOATP ((SIGNBIT BITS 1) (EXPONENT BITS 8) (HIFRACTION BITS 7) (LOFRACTION BITS 16)) ( BLOCKRECORD FLOATP ((HIWORD WORD) (LOWORD WORD))) (BLOCKRECORD FLOATP ((NIL BITS 9) (LONGFRACTION BITS 23))) (BLOCKRECORD FLOATP ((FLOATCONTENTS BITS 32))) (BLOCKRECORD FLOATP ((NIL BITS 1) ( HIWORDNOSIGNBIT BITS 15))) (CREATE (\FLOATBOX (\VAG2 (LOGOR (LLSH SIGNBIT (PLUS 7 8)) (LLSH EXPONENT 7 ) HIFRACTION) LOFRACTION))) LOFRACTION _ 0 HIFRACTION _ 0 EXPONENT _ 0 SIGNBIT _ 0 (ACCESSFNS FLOATP ( (EXP (LOGAND (LRSH (\HILOC (\FLOATUNBOX DATUM)) 7) 255)) (HIFRAC (LOGAND (\HILOC (\FLOATUNBOX DATUM)) 127))))) (RPAQQ MAX.DIGITS.ACCURACY 9) (CONSTANTS (MAX.DIGITS.ACCURACY 9)) (PUTPROPS \CALLER.ARGS MACRO (X (LET ((ARGS (CAR X)) (FORMS (CDR X))) (BQUOTE (PROGN (\SLOWRETURN) ( LET ((AL (\MYALINK)) NEXT (\,@ (for VAR in ARGS collect (COND ((LISTP VAR) (LIST (CAR VAR) 0)) (T VAR) )))) (DECLARE (\,@ (for VAR in ARGS when (LISTP VAR) collect (BQUOTE (TYPE (\, (SELECTQ (CADR VAR) (( FLOATING FLOATP) (CADR VAR)) (HELP))) (\, (CAR VAR))))))) (SETQ NEXT (fetch (FX NEXTBLOCK) of AL)) ( \,@ (for X in (REVERSE ARGS) collect (LET ((FORMS (BQUOTE (\.GETBASE32 \STACKSPACE (SETQ NEXT ( IDIFFERENCE NEXT WORDSPERCELL)))))) (COND ((LISTP X) (BQUOTE (SETQ (\, (CAR X)) (\FLOATBOX (\, FORMS)) ))) (T (BQUOTE (SETQ (\, X) (\, FORMS)))))))) (\MAKEFREEBLOCK NEXT (TIMES (\, (LENGTH ARGS)) WORDSPERCELL)) (replace (FX NEXTBLOCK) of AL with NEXT) (PROGN (\,@ FORMS)))))))) (PUTPROP (QUOTE LLFLOAT) (QUOTE IMPORTDATE) (IDATE "16-May-90 19:26:51")) (DEFOPTIMIZER FONTPROP (&REST ARGS) (SELECTQ (AND (EQ (CAADR ARGS) (QUOTE QUOTE)) (CADADR ARGS)) ( ASCENT (LIST (QUOTE FONTASCENT) (CAR ARGS))) (DESCENT (LIST (QUOTE FONTDESCENT) (CAR ARGS))) (HEIGHT ( LIST (QUOTE FONTHEIGHT) (CAR ARGS))) (QUOTE IGNOREMACRO))) (DATATYPE FONTCLASS ((PRETTYFONT# BYTE) DISPLAYFD PRESSFD INTERPRESSFD OTHERFDS FONTCLASSNAME)) (DATATYPE FONTDESCRIPTOR ((FONTDEVICE POINTER) (FONTFAMILY POINTER) (FONTSIZE POINTER) (FONTFACE POINTER) (\SFAscent WORD) (\SFDescent WORD) (\SFHeight WORD) (ROTATION WORD) (FBBOX SIGNEDWORD) (FBBOY SIGNEDWORD) (FBBDX SIGNEDWORD) (FBBDY SIGNEDWORD) (\SFLKerns POINTER) (\SFRWidths POINTER) ( FONTDEVICESPEC POINTER) (* ; "Holds the spec by which the font is known to the printing device, if coercion has been done") ( OTHERDEVICEFONTPROPS POINTER) (* ; "For individual devices to hang special information") (FONTSCALE POINTER) (\SFFACECODE BITS 8) (FONTAVGCHARWIDTH WORD) (* ; "Set in FONTCREATE, used to fix up the linelength when DSPFONT is called") (FONTIMAGEWIDTHS POINTER) ( * ; "This is the image width, as opposed to the advanced width; initial hack for accents, kerning. Fields is referenced by FONTCREATE." ) (FONTCHARSETVECTOR POINTER) (* ; "A 256-pointer block, with one pointer per 'character set' --each group of 256 character codes. Each pointer is either NIL if there's no info for that charset, or is a CHARSETINFO, containing widths, char bitmap, etc for the characters in that charset." ) (FONTEXTRAFIELD2 POINTER)) FONTCHARSETVECTOR _ (\CREATEFONTCHARSETVECTOR)) (RECORD FONTFACE (WEIGHT SLOPE EXPANSION) (ACCESSFNS ((COLOR (CDDDR DATUM) (RPLACD (CDDR DATUM) NEWVALUE)) (BACKCOLOR (COND ((CDDDR DATUM) (CAR (CDDDR DATUM)))) (PROGN (COND ((NULL (CDDDR DATUM)) ( RPLACD (CDDR DATUM) (LIST NIL NIL)))) (RPLACA (CDDDR DATUM) NEWVALUE))) (FORECOLOR (COND ((CDDDR DATUM ) (CADR (CDDDR DATUM)))) (PROGN (COND ((NULL (CDDDR DATUM)) (RPLACD (CDDR DATUM) (LIST NIL NIL)))) ( RPLACA (CDR (CDDDR DATUM)) NEWVALUE))))) WEIGHT _ (QUOTE MEDIUM) SLOPE _ (QUOTE REGULAR) EXPANSION _ ( QUOTE REGULAR) (TYPE? LISTP)) (DATATYPE CHARSETINFO (WIDTHS (* ; "The advance-width of each character, an array indexed by charcode. Usually the same as the imagewidth, but can differ for accents, kerns kerns. This is what should be used for stringwidth calculations." ) OFFSETS (* ; "Offset of each character into the image bitmap; X value of left edge") IMAGEWIDTHS (* ; "imagewidths is not automagically allocated since it is not always needed") CHARSETBITMAP (* ; "Bitmap containing the character images, indexed by OFFSETS") YWIDTHS (CHARSETASCENT WORD) (* ; "Max ascent for all characters in this CHARSET") (CHARSETDESCENT WORD) (* ; "Max descent for all characters in this CHARSET") LEFTKERN) WIDTHS _ (\CREATECSINFOELEMENT) OFFSETS _ (\CREATECSINFOELEMENT)) (PUTPROPS FONTASCENT MACRO ((FONTSPEC) (ffetch \SFAscent of (\GETFONTDESC FONTSPEC)))) (PUTPROPS FONTDESCENT MACRO ((FONTSPEC) (ffetch \SFDescent of (\GETFONTDESC FONTSPEC)))) (PUTPROPS FONTHEIGHT MACRO ((FONTSPEC) (ffetch \SFHeight of (\GETFONTDESC FONTSPEC)))) (PUTPROPS \FGETOFFSET DMACRO ((OFFSETSBLOCK CHAR8CODE) (\GETBASE OFFSETSBLOCK CHAR8CODE))) (PUTPROPS \FSETOFFSET DMACRO ((OFFSETSBLOCK CHAR8CODE OFFSET) (\PUTBASE OFFSETSBLOCK CHAR8CODE OFFSET) )) (PUTPROPS \FGETWIDTH DMACRO ((WIDTHSBLOCK CHAR8CODE) (\GETBASE WIDTHSBLOCK CHAR8CODE))) (PUTPROPS \FSETWIDTH DMACRO ((WIDTHSBLOCK INDEX WIDTH) (\PUTBASE WIDTHSBLOCK INDEX WIDTH))) (PUTPROPS \FGETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE) (\FGETWIDTH (ffetch (CHARSETINFO WIDTHS ) of (\GETCHARSETINFO (\CHARSET CHARCODE) FONTDESC)) (\CHAR8CODE CHARCODE)))) (PUTPROPS \FSETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE WIDTH) (\FSETWIDTH (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) FONTDESC)) (\CHAR8CODE CHARCODE) WIDTH))) (PUTPROPS \FGETIMAGEWIDTH MACRO ((IMAGEWIDTHSBLOCK CHAR8CODE) (\GETBASE IMAGEWIDTHSBLOCK CHAR8CODE))) (PUTPROPS \FSETIMAGEWIDTH DMACRO ((WIDTHSBLOCK INDEX WIDTH) (\PUTBASE WIDTHSBLOCK INDEX WIDTH))) (PUTPROPS \GETCHARSETINFO MACRO ((CHARSET FONTDESC NOSLUG?) (* ;; "fetches the charsetinfo for charset CHARSET in fontdescriptor FONTDESC. If NIL, then creates the required charset." ) (* ;; "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") (OR (\GETBASEPTR (ffetch FONTCHARSETVECTOR of FONTDESC) (UNFOLD CHARSET 2)) (\CREATECHARSET CHARSET FONTDESC NOSLUG?)))) (PUTPROPS \CREATECSINFOELEMENT MACRO (NIL (\ALLOCBLOCK (FOLDHI (IPLUS \MAXTHINCHAR 3) WORDSPERCELL)))) (PUTPROPS \CREATEFONTCHARSETVECTOR MACRO (NIL (* ; "Allocates a block for the character set records") (\ALLOCBLOCK (ADD1 \MAXCHARSET) T))) (DEFMACRO \CREATEKERNELEMENT NIL (BQUOTE (CL:MAKE-ARRAY (IPLUS \MAXTHINCHAR 3) :ELEMENT-TYPE (QUOTE ( SIGNED-BYTE 16)) :INITIAL-ELEMENT 0))) (DEFMACRO \FSETLEFTKERN (LEFTKERNBLOCK INDEX KERNVALUE) (BQUOTE (CL:SETF (CL:AREF (\, LEFTKERNBLOCK) ( \, INDEX)) (\, KERNVALUE)))) (DEFMACRO \FGETLEFTKERN (LEFTKERNBLOCK CHAR8CODE) (BQUOTE (CL:AREF (\, LEFTKERNBLOCK) (\, CHAR8CODE))) ) (RPAQQ \MAXNSCHAR 65535) (CONSTANTS (\MAXNSCHAR 65535)) (PUTPROP (QUOTE FONT) (QUOTE IMPORTDATE) (IDATE "28-Jun-99 16:29:49")) (BLOCKRECORD KEYACTION ((* ;; "KEYACTION Table: For interpreting keystrokes. Stored as a 8-cell block of untyped pointer hunk storage." ) FLAGS (* ; "Flag byte per key# (one for down-transtion, 1 for up-.) to describe whether lockshifting occrrs, you ignore the transition, etc." ) CODES (* ; "Table of character codes generated by each key when no shift key is pressed.") SHIFTCODES (* ; "Table of character codes generated by each key when the shift key is pressed.") ARMED (* ; "Not sure...") INTERRUPTLIST (* ; "List of armed interrupts?") ALTGRAPHCODES (* ; "Table of codes to be generated when the ALT-GRAPH key is pressed.") DEADKEYLIST (* ; "Block of dead-key handlers, with the nominal up-transition fields filled by the shifted-case tables. Each %"table%" is an ALIST of orignal code => accented code. no entry means punt the accent.." )) FLAGS _ (\ALLOCBLOCK (FOLDHI (IPLUS \NKEYS \NKEYS) BYTESPERCELL)) CODES _ (\ALLOCBLOCK (FOLDHI ( PLUS \NKEYS \NKEYS) WORDSPERCELL)) SHIFTCODES _ (\ALLOCBLOCK (FOLDHI (PLUS \NKEYS \NKEYS) WORDSPERCELL )) ARMED _ (\ALLOCBLOCK (FOLDHI (ADD1 \MAXTHINCHAR) BITSPERCELL)) ALTGRAPHCODES _ (\ALLOCBLOCK (FOLDHI (PLUS \NKEYS \NKEYS) WORDSPERCELL)) DEADKEYLIST _ (\ALLOCBLOCK (PLUS \NKEYS \NKEYS \NKEYS \NKEYS) T) (CREATE (\ALLOCBLOCK 7 PTRBLOCK.GCT)) (TYPE? (AND (\BLOCKDATAP DATUM) (IGEQ (\#BLOCKDATACELLS DATUM) 5 ) (OR (NULL (FETCH (KEYACTION INTERRUPTLIST) OF DATUM)) (LISTP (FETCH INTERRUPTLIST OF DATUM))) ( \BLOCKDATAP (FETCH (KEYACTION FLAGS) DATUM)) (\BLOCKDATAP (FETCH (KEYACTION CODES) DATUM)) ( \BLOCKDATAP (FETCH (KEYACTION ARMED) DATUM))))) (RPAQQ \NKEYS 112) (CONSTANTS \NKEYS) (DEFOPTIMIZER KEYDOWNP (KEYNAME) (BQUOTE (\NEWKEYDOWNP (\KEYNAMETONUMBER (\, KEYNAME))))) (PUTPROPS XKEYDOWNP MACRO ((KEYNAME) (KEYDOWNP1 (\KEYNAMETONUMBER KEYNAME)))) (PUTPROPS KEYDOWNP1 MACRO (OPENLAMBDA (KEYNUMBER) (DECLARE (GLOBALVARS \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.UTILIN \EM.KBDAD4 \EM.KBDAD5)) (PROG NIL (RETURN (EQ 0 (LOGAND (LRSH (LLSH 1 15) (PROGN (* (IMOD KEYNUMBER BITSPERWORD) - GETD cause IMOD and BITSPERWORD not exported to user) ( LOGAND KEYNUMBER 15))) (\GETBASE (SELECTQ (PROGN (* (FOLDLO KEYNUMBER BITSPERWORD) GETD follows since FOLDLO and BITSPERWORD not exported to user) (LRSH KEYNUMBER 4)) (0 \EM.KBDAD0) (1 \EM.KBDAD1) (2 \EM.KBDAD2) (3 \EM.KBDAD3) (4 \EM.UTILIN) (5 (OR \EM.KBDAD4 (RETURN))) (6 (OR \EM.KBDAD5 (RETURN))) ( RETURN)) 0))))))) (PUTPROPS \NEWKEYDOWNP MACRO ((KEYNUMBER) (EQ 0 (\GETBASEBIT \LASTKEYSTATE KEYNUMBER)))) (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM) (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) (PUTPROPS \SETMOUSEXY MACRO ((XPOS YPOS) (PROGN (SELECTC \MACHINETYPE (\DAYBREAK ( \DoveMisc.SetMousePosition XPOS YPOS)) (\MAIKO (SUBRCALL SETMOUSEXY XPOS YPOS)) (\DANDELION (do (PROGN (replace (IOPAGE NEWMOUSEX) of \IOPAGE with XPOS) (replace (IOPAGE NEWMOUSEY) of \IOPAGE with YPOS)) repeatuntil (ILESSP (fetch (IOPAGE NEWMOUSESTATE) of \IOPAGE) 32768)) (* ; "smash position until mouse says it is not busy") (replace (IOPAGE NEWMOUSEX) of \IOPAGE with XPOS) ( replace (IOPAGE NEWMOUSEY) of \IOPAGE with YPOS) (replace (IOPAGE NEWMOUSESTATE) of \IOPAGE with 32768 )) NIL) (PROGN (\PUTBASE \EM.MOUSEX 0 XPOS) (\PUTBASE \EM.MOUSEY 0 YPOS))))) (GLOBALVARS \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.KBDAD4 \EM.KBDAD5 \EM.DISPINTERRUPT \EM.DISPLAYHEAD \EM.CURSORBITMAP \MACHINETYPE \DEFAULTKEYACTION \COMMANDKEYACTION \CURRENTKEYACTION \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY) (PUTPROP (QUOTE LLKEY) (QUOTE IMPORTDATE) (IDATE " 9-Apr-2000 16:28:23")) (DATATYPE PILOTBBT ((PBTDESTLO WORD) (PBTDESTHI WORD) (PBTDESTBIT WORD) (PBTDESTBPL SIGNEDWORD) ( PBTSOURCELO WORD) (PBTSOURCEHI WORD) (PBTSOURCEBIT WORD) (PBTSOURCEBPL SIGNEDWORD) (PBTWIDTH WORD) ( PBTHEIGHT WORD) (PBTFLAGS WORD) (NIL 5 WORD)) (BLOCKRECORD PILOTBBT ((NIL 7 WORD) (NIL BITS 4) ( PBTGRAYOFFSET BITS 4) (PBTGRAYWIDTHLESSONE BITS 4) (PBTGRAYHEIGHTLESSONE BITS 4) (NIL 2 WORD) ( PBTBACKWARD FLAG) (PBTDISJOINT FLAG) (PBTDISJOINTITEMS FLAG) (PBTUSEGRAY FLAG) (PBTSOURCETYPE BITS 1) (PBTOPERATION BITS 2) (NIL BITS 9))) (ACCESSFNS PILOTBBT ((PBTSOURCE (\VAG2 (fetch PBTSOURCEHI of DATUM) (fetch PBTSOURCELO of DATUM)) (PROGN (replace PBTSOURCEHI of DATUM with (\HILOC NEWVALUE)) ( replace PBTSOURCELO of DATUM with (\LOLOC NEWVALUE)))) (PBTDEST (\VAG2 (fetch PBTDESTHI of DATUM) ( fetch PBTDESTLO of DATUM)) (PROGN (replace PBTDESTHI of DATUM with (\HILOC NEWVALUE)) (replace PBTDESTLO of DATUM with (\LOLOC NEWVALUE)))))) (SYSTEM)) (DATATYPE \DISPLAYDATA (DDXPOSITION DDYPOSITION DDXOFFSET DDYOFFSET DDDestination DDClippingRegion DDFONT DDSlowPrintingCase DDWIDTHSCACHE DDOFFSETSCACHE DDCOLOR DDLINEFEED DDRightMargin DDLeftMargin DDScroll DDOPERATION DDSOURCETYPE (DDClippingLeft WORD) (DDClippingRight WORD) (DDClippingBottom WORD) (DDClippingTop WORD) (NIL WORD) (DDHELDFLG FLAG) (XWINDOWHINT XPOINTER) (DDPILOTBBT POINTER) DDXSCALE DDYSCALE DDCHARIMAGEWIDTHS DDEOLFN DDPAGEFULLFN DDTexture DDMICAXPOS DDMICAYPOS DDMICARIGHTMARGIN DDCHARSET (DDCHARSETASCENT WORD) (DDCHARSETDESCENT WORD) DDCHARHEIGHTDELTA (DDSPACEWIDTH WORD)) DDPILOTBBT _ (create PILOTBBT PBTDISJOINT _ T) DDLeftMargin _ 0 DDRightMargin _ SCREENWIDTH DDXPOSITION _ 0 DDYPOSITION _ 0 DDXOFFSET _ 0 DDYOFFSET _ 0 DDClippingRegion _ (create REGION) DDDestination _ ScreenBitMap DDXSCALE _ 1 DDYSCALE _ 1 DDTexture _ 0 (ACCESSFNS ((DDFOREGROUNDCOLOR ( PROG ((VAL (fetch (\DISPLAYDATA DDCOLOR) of DATUM))) (OR (FIXP VAL) (BITMAPP VAL) (AND (NULL VAL) 1) ( CAR VAL) (MAXIMUMCOLOR (BITSPERPIXEL (fetch (\DISPLAYDATA DDDestination) of DATUM)))))) ( DDBACKGROUNDCOLOR (OR (fetch (\DISPLAYDATA DDTexture) of DATUM) 0)))) (SYSTEM)) (RECORD DISPLAYSTATE (ONOFF)) (RECORD DISPLAYINFO (DITYPE DIWIDTH DIHEIGHT DIBITSPERPIXEL DIWSOPS)) (PUTPROPS \GETDISPLAYDATA MACRO (ARGS (COND ((CADR ARGS) (SUBPAIR (QUOTE (STRM STRMVAR)) ARGS (QUOTE ( \DTEST (fetch (STREAM IMAGEDATA) of (SETQ STRMVAR (\OUTSTREAMARG STRM))) (QUOTE \DISPLAYDATA))))) (T ( SUBST (CAR ARGS) (QUOTE STRM) (QUOTE (\DTEST (fetch (STREAM IMAGEDATA) of (\OUTSTREAMARG STRM)) (QUOTE \DISPLAYDATA)))))))) (PUTPROPS \BITMASK MACRO ((N) (\WORDELT BITMASKARRAY (LOGAND N 15)))) (PUTPROPS \4BITMASK MACRO ((N) (\WORDELT 4BITMASKARRAY (LOGAND N 3)))) (PUTPROPS \NOTBITMASK MACRO ((N) (DECLARE (GLOBALVARS NOTBITMASKARRAY)) (\WORDELT NOTBITMASKARRAY ( LOGAND N 15)))) (PUTPROPS \NOT4BITMASK MACRO ((N) (\WORDELT NOT4BITMASKARRAY (LOGAND N 3)))) (GLOBALVARS BITMASKARRAY NOTBITMASKARRAY 4BITMASKARRAY NOT4BITMASKARRAY) (RPAQQ WORDMASK 65535) (CONSTANTS (WORDMASK 65535)) (PUTPROPS \INVALIDATEDISPLAYCACHE MACRO ((DISPLAYDATA) (* This marks the character-printing caches of the displaystream as invalid. Needed when the font or Y position changes) (freplace (\DISPLAYDATA DDCHARSET) of DISPLAYDATA with MAX.SMALLP) (freplace (\DISPLAYDATA DDCHARSETASCENT) of DISPLAYDATA with MAX.SMALLP))) (PUTPROPS \DSPGETCHARWIDTH MACRO ((CHARCODE DD) (\FGETWIDTH (ffetch (\DISPLAYDATA DDWIDTHSCACHE) of DD ) CHARCODE))) (PUTPROPS \DSPGETCHARIMAGEWIDTH MACRO ((CHARCODE DD) (\FGETIMAGEWIDTH (ffetch (\DISPLAYDATA DDCHARIMAGEWIDTHS) of DD) CHARCODE))) (PUTPROPS \DSPGETCHAROFFSET MACRO ((CHARCODE DD) (\GETBASE (ffetch (\DISPLAYDATA DDOFFSETSCACHE) of DD ) CHARCODE))) (PUTPROPS \CONVERTOP MACRO ((OP) (* rrb "14-NOV-80 11:14") (* Only for alto bitblt !!) (SELECTQ OP ( replace 0 of NIL with NIL) (PAINT 1) (INVERT 2) (ERASE 3) 0))) (PUTPROPS \SFInvert MACRO ((BitMap y) (* corrects for the fact that alto bitmaps are stored with 0,0 as upper left while lisp bitmaps have 0,0 as lower left. The correction is actually off by one ( greater) because a majority of the places that it is called actually need one more than corrected Y value.) (IDIFFERENCE (fetch (BITMAP BITMAPHEIGHT) of BitMap) y))) (PUTPROPS \SFReplicate MACRO (LAMBDA (pattern) (LOGOR pattern (LLSH pattern 8) (SETQ pattern (LLSH pattern 4)) (LLSH pattern 8)))) (PUTPROPS \SETPBTFUNCTION MACRO (OPENLAMBDA (BBT SourceType Operation) (PROGN (replace (PILOTBBT PBTOPERATION) of BBT with (SELECTQ Operation (ERASE 1) (PAINT 2) (INVERT 3) 0)) (replace (PILOTBBT PBTSOURCETYPE) of BBT with (COND ((EQ (EQ SourceType (QUOTE INVERT)) (EQ Operation (QUOTE ERASE))) 0) (T 1)))))) (PUTPROPS \BITBLT1 MACRO ((bbt) (BitBltSUBR bbt))) (PUTPROP (QUOTE BITBLT) (QUOTE MACRO) (QUOTE (= . BKBITBLT))) (PROGN (PUTPROPS \INSURETOPWDS DMACRO (OPENLAMBDA (DS) (OR (EQ DS \TOPWDS) (COND ((FMEMB ( DSPDESTINATION NIL DS) \SCREENBITMAPS) (\TOTOPWDS DS)))))) (PUTPROPS \INSURETOPWDS MACRO ((DS) (* For non-window implementations) (PROGN)))) (PUTPROPS .WHILE.TOP.DS. MACRO ((FIRST . REST) (PROG (DISPINTERRUPT SOFTCURSORUP) (* FIRST should be a displaystream and a variable. This macro may also take a soft cursor down, similar to the way .WHILE.CURSOR.DOWN. does, but only if FIRST's destination is the same as the soft cursor's destination. *) (COND (\SOFTCURSORP (SETQ SOFTCURSORUP (AND \SOFTCURSORUPP (EQ (DSPDESTINATION NIL FIRST) \CURSORDESTINATION))) (COND (SOFTCURSORUP (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) ( \PUTBASE \EM.DISPINTERRUPT 0 0) (\SOFTCURSORDOWN))))) (\INSURETOPWDS FIRST) (PROGN . REST) (COND ( SOFTCURSORUP (\SOFTCURSORUPCURRENT) (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT)))))) (PUTPROPS .WHILE.CURSOR.DOWN. MACRO ((FIRST . REST) (PROG (DISPINTERRUPT SOFTCURSORUP) (* This macro should wrap around any code that draws or bitblts directly from or to a screen bitmap. E.g. DRAWGRAYBOX in HLDISPLAY which puts up a shadow box during GETREGION. The purpose of this macro is that a soft (e.g. color) cursor's bits not be taken to be screen bits while FIRST & REST are done. *) (COND (\SOFTCURSORP (SETQ SOFTCURSORUP \SOFTCURSORUPP) (COND (SOFTCURSORUP (SETQ DISPINTERRUPT ( \GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (\SOFTCURSORDOWN))))) (PROGN FIRST . REST) (COND (SOFTCURSORUP (\SOFTCURSORUPCURRENT) (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT)))))) (ADDTOVAR GLOBALVARS \TOPWDS) (DEFOPTIMIZER TTYDISPLAYSTREAM (&REST X) (COND ((NULL (CAR X)) (QUOTE \TERM.OFD)) (T (QUOTE IGNOREMACRO)))) (GLOBALVARS BELLCNT BELLRATE TTYBACKGROUNDFNS \DisplayStoppedForLogout \CARET.UP) (PUTPROPS \CHECKCARET MACRO ((X) (AND \CARET.UP (\CARET.DOWN X)))) (PUTPROPS \DSPTRANSFORMX MACRO ((X DD) (* transforms an x coordinate into the destination coordinate.) (IPLUS X (fetch (\DISPLAYDATA DDXOFFSET) of DD)))) (PUTPROPS \DSPTRANSFORMY MACRO ((Y DD) (* transforms an y coordinate into the destination coordinate.) (IPLUS Y (fetch (\DISPLAYDATA DDYOFFSET) of DD)))) (PUTPROPS \OFFSETBOTTOM MACRO ((X) (* gives the destination coordinate address of the origin.) (fetch (\DISPLAYDATA DDYOFFSET) of X))) (PUTPROPS \OFFSETLEFT MACRO ((DD) (* returns the x origin of display data destination coordinates.) ( fetch (\DISPLAYDATA DDXOFFSET) of DD))) (PUTPROPS DISPLAYINITIALIZEDP MACRO (NIL (* always initialized now) T)) (PUTPROPS DISPLAYSTARTEDP MACRO (NIL \DisplayStarted)) (GLOBALVARS \DisplayStarted \DisplayStreamsInitialized \DisplayInitialed WHOLEDISPLAY WHOLESCREEN SCREENWIDTH SCREENHEIGHT) (PUTPROP (QUOTE LLDISPLAY) (QUOTE IMPORTDATE) (IDATE "18-Apr-94 00:20:42")) (RECORD REGION (LEFT BOTTOM WIDTH HEIGHT) LEFT _ -16383 BOTTOM _ -16383 WIDTH _ 32767 HEIGHT _ 32767 ( ACCESSFNS ((TOP (IPLUS (fetch (REGION BOTTOM) of DATUM) (fetch (REGION HEIGHT) of DATUM) -1)) (PTOP ( IPLUS (fetch (REGION BOTTOM) of DATUM) (fetch (REGION HEIGHT) of DATUM))) (RIGHT (IPLUS (fetch (REGION LEFT) of DATUM) (fetch (REGION WIDTH) of DATUM) -1)) (PRIGHT (IPLUS (fetch (REGION LEFT) of DATUM) ( fetch (REGION WIDTH) of DATUM))))) (TYPE? (AND (EQLENGTH DATUM 4) (EVERY DATUM (FUNCTION NUMBERP)))) ( SYSTEM)) (DATATYPE BITMAP ((BITMAPBASE POINTER) (BITMAPRASTERWIDTH WORD) (BITMAPHEIGHT WORD) (BITMAPWIDTH WORD) (BITMAPBITSPERPIXEL WORD)) BITMAPBITSPERPIXEL _ 1 (BLOCKRECORD BITMAP ((BitMapHiLoc WORD) ( BitMapLoLoc WORD)) (* ; "overlay initial pointer")) (SYSTEM)) (BLOCKRECORD BITMAPWORD ((BITS WORD)) (SYSTEM)) (RECORD POSITION (XCOORD . YCOORD) (TYPE? (AND (LISTP DATUM) (NUMBERP (CAR DATUM)) (NUMBERP (CDR DATUM )))) (SYSTEM)) (DATATYPE CURSOR (CUIMAGE CUMASK CUHOTSPOTX CUHOTSPOTY CUDATA) (ACCESSFNS ((CUBITSPERPIXEL (fetch ( BITMAP BITMAPBITSPERPIXEL) of (fetch (CURSOR CUIMAGE) of DATUM))))) (SYSTEM)) (RECORD MOUSEEVENT (MOUSEX MOUSEY MOUSEBUTTONS KEYBOARD MOUSETIME) (SYSTEM)) (RECORD SCREENREGION (SCREEN . REGION) (SUBRECORD REGION) (TYPE? (AND (LISTP DATUM) (type? SCREEN (CAR DATUM)) (type? REGION (CDR DATUM)))) (SYSTEM)) (RECORD SCREENPOSITION (SCREEN . POSITION) (SUBRECORD POSITION) (TYPE? (AND (LISTP DATUM) (type? SCREEN (CAR DATUM)) (type? POSITION (CDR DATUM)))) (SYSTEM)) (PUTPROPS CURSORBITMAP MACRO (NIL CursorBitMap)) (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (ADDTOVAR GLOBALVARS CursorBitMap) (ARRAYRECORD POLYNOMIAL (A B C D) (CREATE (ARRAY 4 (QUOTE FLOATP))) (SYSTEM)) (RECORD SPLINE (%#KNOTS SPLINEX SPLINEY SPLINEDX SPLINEDY SPLINEDDX SPLINEDDY SPLINEDDDX SPLINEDDDY)) (PUTPROPS HALF MACRO ((X) (LRSH X 1))) (PUTPROPS \FILLCIRCLEBLT MACRO (OPENLAMBDA (CX CY X Y) (* ; "calls bitblt twice to fill in one line of the circle.") (\LINEBLT FCBBT (IDIFFERENCE CX X) (IPLUS CY Y) (IPLUS CX X) DESTINATIONBASE RASTERWIDTH LEFT RIGHT BOTTOM TOP GRAYWIDTH GRAYHEIGHT GRAYBASE NBITS) (\LINEBLT FCBBT (IDIFFERENCE CX X) (IDIFFERENCE CY Y) (IPLUS CX X) DESTINATIONBASE RASTERWIDTH LEFT RIGHT BOTTOM TOP GRAYWIDTH GRAYHEIGHT GRAYBASE NBITS))) (PUTDEF (QUOTE BITMAPS) (QUOTE FILEPKGCOMS) (QUOTE ((COM MACRO (X (VARS . X)))))) (PUTDEF (QUOTE CURSORS) (QUOTE FILEPKGCOMS) (QUOTE ((COM MACRO (X (E (MAPC (QUOTE X) (QUOTE PRINTCURSOR)))))))) (ADDTOVAR GLOBALVARS SCREENHEIGHT SCREENWIDTH ScreenBitMap) (RPAQQ BLACKSHADE 65535) (RPAQQ WHITESHADE 0) (CONSTANTS (BLACKSHADE 65535) (WHITESHADE 0)) (RPAQQ GRAYSHADE 43605) (ADDTOVAR GLOBALVARS GRAYSHADE) (RECORD HLS (HUE LIGHTNESS SATURATION)) (RECORD RGB (RED GREEN BLUE)) (PUTPROP (QUOTE ADISPLAY) (QUOTE IMPORTDATE) (IDATE "15-Sep-94 17:07:04")) (ADDTOVAR SYSSPECVARS \INTERRUPTABLE) (PUTPROPS UNINTERRUPTABLY INFO EVAL) (PUTPROPS UNINTERRUPTABLY DMACRO ((X . Y) ((LAMBDA (\INTERRUPTABLE) (PROGN X . Y)) NIL))) (ADDTOVAR PRETTYPRINTMACROS (UNINTERRUPTABLY LAMBDA (FORM) (PROG ((POS (IPLUS 4 (POSITION)))) (PRIN1 "(") (PRIN2 (CAR FORM)) (OR (EQ COMMENTFLG (CAAR (SETQ FORM (CDR FORM)))) (TAB POS 0)) (PRINTDEF FORM POS T T FNSLST) (PRIN1 ")")))) (BLOCKRECORD INTERRUPTSTATE ((* ;; "This is the structure used to communicate between the emulator and Lisp re interrupts. There is a bit per interrupt type, plus space for the character code that caused a keyboard interrupt." ) (* ;; "This must match the INTSTAT definition in lispemul.h") (* ;; "PENDING-INTERRUPT FLAGS:") ( LOGMSGSPENDING FLAG) (* ; " Log/Console msgs need printing.") (ETHERINTERRUPT FLAG) (* ; "Ether packet read finished.") (IOINTERRUPT FLAG) (GCDISABLED FLAG) (* ; "No mroe room in GC tables.") (VMEMFULL FLAG) (* ; "VMEM is full!!") (STACKOVERFLOW FLAG) (* ; "Stack overflowed.") (STORAGEFULL FLAG) (* ; "Ran out of storage, atoms, etc.") (WAITINGINTERRUPT FLAG) (* ;; "INTERRUPTS-IN-PROCESS MASK:") (P-LOGMSGSPENDING FLAG) (* ; " Log/Console msgs need printing.") ( P-ETHERINTERRUPT FLAG) (* ; "Ether packet read finished.") (P-IOINTERRUPT FLAG) (P-GCDISABLED FLAG) (* ; "No mroe room in GC tables.") (P-VMEMFULL FLAG) (* ; "VMEM is full!!") (P-STACKOVERFLOW FLAG) (* ; "Stack overflowed.") (P-STORAGEFULL FLAG) (* ; "Ran out of storage, atoms, etc.") (P-WAITINGINTERRUPT FLAG) (INTCHARCODE WORD)) (BLOCKRECORD INTERRUPTSTATE ((* ;; "Alternative view of the structure:") ( PENDING BITS 8) (* ; "Pending-interrupt flags") (IN-PROGRESS BITS 8) (* ; "Mask to prevent re-interrupt for an interrupt in progress") (NIL WORD)))) (PUTPROPS \TAKEINTERRUPT DMACRO ((PREFORM POSTFORM) (DECLARE (GLOBALVARS \PENDINGINTERRUPT)) (COND (( AND \PENDINGINTERRUPT (INTERRUPTABLE~=NILUPTHESTACK)) PREFORM ((LAMBDA (\INTERRUPTABLE) ( \CALLINTERRUPTED)) T) POSTFORM)))) (PUTPROP (QUOTE AINTERRUPT) (QUOTE IMPORTDATE) (IDATE "17-Sep-92 10:42:38")) (ACCESSFNS PUP ((PUPBASE (LOCF (fetch (ETHERPACKET EPBODY) of DATUM)))) (BLOCKRECORD PUPBASE (( PUPLENGTH WORD) (PUPTCONTROL BYTE) (PUPTYPE BYTE) (PUPID FIXP) (PUPDEST WORD) (PUPDESTSOCKET FIXP) ( PUPSOURCE WORD) (PUPSOURCESOCKET FIXP) (PUPDATASTART 266 WORD)) (BLOCKRECORD PUPBASE ((NIL WORD) ( TYPEWORD WORD) (PUPIDHI WORD) (PUPIDLO WORD) (PUPDESTNET BYTE) (PUPDESTHOST BYTE) (PUPDESTSOCKETHI WORD) (PUPDESTSOCKETLO WORD) (PUPSOURCENET BYTE) (PUPSOURCEHOST BYTE) (PUPSOURCESOCKETHI WORD) ( PUPSOURCESOCKETLO WORD)) (* ; "Temporary extra synonyms") (SYNONYM PUPDESTNET (DESTNET)) (SYNONYM PUPDESTHOST (DESTHOST)) (SYNONYM PUPDESTSOCKETHI (DESTSKTHI)) (SYNONYM PUPDESTSOCKETLO (DESTSKTLO)) ( SYNONYM PUPSOURCENET (SOURCENET)) (SYNONYM PUPSOURCEHOST (SOURCEHOST)) (SYNONYM PUPSOURCESOCKETHI ( SOURCESKTHI)) (SYNONYM PUPSOURCESOCKETLO (SOURCESKTLO))) (SYNONYM PUPDEST (DEST)) (SYNONYM PUPDESTSOCKET (DESTSKT)) (SYNONYM PUPSOURCE (SOURCE)) (SYNONYM PUPSOURCESOCKET (SOURCESKT)) (ACCESSFNS PUPDATASTART ((PUPCONTENTS (LOCF DATUM))))) (ACCESSFNS PUP ((PUPCHECKSUMBASE (fetch PUPBASE of DATUM) ) (PUPCHECKSUMLOC (\ADDBASE (fetch PUPBASE of DATUM) (FOLDLO (SUB1 (fetch PUPLENGTH of DATUM)) BYTESPERWORD)))) (BLOCKRECORD PUPCHECKSUMLOC ((PUPCHECKSUM WORD)))) (TYPE? (type? ETHERPACKET DATUM))) (ACCESSFNS PUPADDRESS ((PUPNET# (LRSH DATUM 8)) (PUPHOST# (LOGAND DATUM 255))) (CREATE (IPLUS (LLSH PUPNET# 8) PUPHOST#))) (PUTPROPS \LOCALPUPADDRESS MACRO (NIL \LOCALPUPNETHOST)) (PUTPROPS \LOCALPUPHOSTNUMBER MACRO (NIL (fetch PUPHOST# of \LOCALPUPNETHOST))) (PUTPROPS \LOCALPUPNETNUMBER MACRO (NIL (fetch PUPNET# of \LOCALPUPNETHOST))) (ACCESSFNS ERRORPUP ((ERRORPUPBASE (fetch PUPCONTENTS of DATUM))) (BLOCKRECORD ERRORPUPBASE (( ERRORPUPCOPY 10 WORD) (* ; "Copy of pup header") (ERRORPUPCODE WORD) (ERRORPUPARG WORD) (* ; "Usually zero") (ERRORPUPSTRINGBASE WORD) (* ; "Human readable message")))) (RPAQQ PUPERRORCODES ((\PUPE.CHECKSUM 1) (\PUPE.NOSOCKET 2) (\PUPE.SOCKETFULL 3) (\PUPE.GATEWAY.BADPUP 513) (\PUPE.NOROUTE 514) (\PUPE.NOHOST 515) (\PUPE.LOOPED 516) (\PUPE.TOOLARGE 517) ( \PUPE.WRONG.GATEWAY 518) (\PUPE.GATEWAYFULL 519))) (RPAQQ \PUPE.CHECKSUM 1) (RPAQQ \PUPE.NOSOCKET 2) (RPAQQ \PUPE.SOCKETFULL 3) (RPAQQ \PUPE.GATEWAY.BADPUP 513) (RPAQQ \PUPE.NOROUTE 514) (RPAQQ \PUPE.NOHOST 515) (RPAQQ \PUPE.LOOPED 516) (RPAQQ \PUPE.TOOLARGE 517) (RPAQQ \PUPE.WRONG.GATEWAY 518) (RPAQQ \PUPE.GATEWAYFULL 519) (CONSTANTS (\PUPE.CHECKSUM 1) (\PUPE.NOSOCKET 2) (\PUPE.SOCKETFULL 3) (\PUPE.GATEWAY.BADPUP 513) ( \PUPE.NOROUTE 514) (\PUPE.NOHOST 515) (\PUPE.LOOPED 516) (\PUPE.TOOLARGE 517) (\PUPE.WRONG.GATEWAY 518 ) (\PUPE.GATEWAYFULL 519)) (PUTPROPS BINDPUPS MACRO (X (CONS (LIST (QUOTE LAMBDA) (CAR X) (CONS (QUOTE PROGN) (CDR X))) (in (CAR X) collect (LIST (QUOTE ALLOCATE.PUP)))))) (PUTPROPS BINDPUPS INFO BINDS) (ADDTOVAR PRETTYPRINTMACROS (BINDPUPS LAMBDA (FORM) (PROG ((POS (IPLUS 2 (POSITION)))) (PRIN1 "(") ( PRIN2 (CAR FORM)) (SPACES 1) (PRINTDEF (CADR FORM) (POSITION)) (OR (EQ COMMENTFLG (CAAR (SETQ FORM ( CDDR FORM)))) (TAB POS 0)) (PRINTDEF FORM POS T T FNSLST) (PRIN1 ")")))) (BLOCKRECORD PORT ((NETHOST WORD) (SOCKET FIXP)) (BLOCKRECORD PORT ((NET BYTE) (HOST BYTE) (SOCKETHI WORD) (SOCKETLO WORD)))) (ACCESSFNS ERRORPUP ((ERRORPUPBASE (fetch PUPCONTENTS of DATUM))) (BLOCKRECORD ERRORPUPBASE (( ERRORPUPCOPY 10 WORD) (* ; "Copy of pup header") (ERRORPUPCODE WORD) (ERRORPUPARG WORD) (* ; "Usually zero") (ERRORPUPSTRINGBASE WORD) (* ; "Human readable message")))) (GLOBALVARS \ETHERWAIT1 \ETHERTIMEOUT \MAXETHERTRIES PUPTRACEFLG LOGINPASSWORDS) (GLOBALVARS PUPTRACEFILE PUPONLYTYPES PUPIGNORETYPES PUPPRINTMACROS) (RPAQQ \PUPOVLEN 22) (RPAQQ \MAX.PUPLENGTH 532) (RPAQQ \TIME.GETPUP 5) (CONSTANTS (\PUPOVLEN 22) (\MAX.PUPLENGTH 532) (\TIME.GETPUP 5)) (PUTPROPS PUPPRINTMACROS VARTYPE ALIST) (PUTPROPS \GETPUPWORD DMACRO ((PUP WORD#) (\GETBASE (fetch PUPCONTENTS of PUP) WORD#))) (PUTPROPS \PUTPUPWORD DMACRO ((PUP WORD# VALUE) (\PUTBASE (fetch PUPCONTENTS of PUP) WORD# VALUE))) (PUTPROPS \GETPUPBYTE DMACRO ((PUP BYTE#) (\GETBASEBYTE (fetch PUPCONTENTS of PUP) BYTE#))) (PUTPROPS \PUTPUPBYTE DMACRO ((PUP BYTE# VALUE) (\PUTBASEBYTE (fetch PUPCONTENTS of PUP) BYTE# VALUE)) ) (RPAQQ RAWPUPTYPES ((\PT.ECHOME 1) (\PT.IAMECHO 2) (\PT.IAMBADECHO 3) (\PT.ERROR 4) (\PT.RFC 8) ( \PT.ABORT 9) (\PT.END 10) (\PT.ENDREPLY 11) (\PT.DATA 16) (\PT.ADATA 17) (\PT.ACK 18) (\PT.MARK 19) ( \PT.INTERRUPT 20) (\PT.INTERRUPTREPLY 21) (\PT.AMARK 22) (\PT.GATEWAYREQUEST 128) (\PT.GATEWAYRESPONSE 129) (\PT.ALTOTIMEREQUEST 134) (\PT.ALTOTIMERESPONSE 135) (\PT.MSGCHECK 136) (\PT.NEWMAIL 137) ( \PT.NONEWMAIL 138) (\PT.NOMAILBOX 139) (\PT.LAURELCHECK 140) (\PT.NAMELOOKUP 144) (\PT.NAMERESPONSE 145) (\PT.NAME/ADDRERROR 146) (\PT.ADDRLOOKUP 147) (\PT.ADDRRESPONSE 148) (\PT.PRINTERSTATUS 128) ( \PT.STATUSRESPONSE 129) (\PT.PRINTERCAPABILITY 130) (\PT.CAPABILITYRESPONSE 131) (\PT.PRINTJOBSTATUS 132) (\PT.PRINTJOBRESPONSE 133))) (RPAQQ \PT.ECHOME 1) (RPAQQ \PT.IAMECHO 2) (RPAQQ \PT.IAMBADECHO 3) (RPAQQ \PT.ERROR 4) (RPAQQ \PT.RFC 8) (RPAQQ \PT.ABORT 9) (RPAQQ \PT.END 10) (RPAQQ \PT.ENDREPLY 11) (RPAQQ \PT.DATA 16) (RPAQQ \PT.ADATA 17) (RPAQQ \PT.ACK 18) (RPAQQ \PT.MARK 19) (RPAQQ \PT.INTERRUPT 20) (RPAQQ \PT.INTERRUPTREPLY 21) (RPAQQ \PT.AMARK 22) (RPAQQ \PT.GATEWAYREQUEST 128) (RPAQQ \PT.GATEWAYRESPONSE 129) (RPAQQ \PT.ALTOTIMEREQUEST 134) (RPAQQ \PT.ALTOTIMERESPONSE 135) (RPAQQ \PT.MSGCHECK 136) (RPAQQ \PT.NEWMAIL 137) (RPAQQ \PT.NONEWMAIL 138) (RPAQQ \PT.NOMAILBOX 139) (RPAQQ \PT.LAURELCHECK 140) (RPAQQ \PT.NAMELOOKUP 144) (RPAQQ \PT.NAMERESPONSE 145) (RPAQQ \PT.NAME/ADDRERROR 146) (RPAQQ \PT.ADDRLOOKUP 147) (RPAQQ \PT.ADDRRESPONSE 148) (RPAQQ \PT.PRINTERSTATUS 128) (RPAQQ \PT.STATUSRESPONSE 129) (RPAQQ \PT.PRINTERCAPABILITY 130) (RPAQQ \PT.CAPABILITYRESPONSE 131) (RPAQQ \PT.PRINTJOBSTATUS 132) (RPAQQ \PT.PRINTJOBRESPONSE 133) (CONSTANTS (\PT.ECHOME 1) (\PT.IAMECHO 2) (\PT.IAMBADECHO 3) (\PT.ERROR 4) (\PT.RFC 8) (\PT.ABORT 9) ( \PT.END 10) (\PT.ENDREPLY 11) (\PT.DATA 16) (\PT.ADATA 17) (\PT.ACK 18) (\PT.MARK 19) (\PT.INTERRUPT 20) (\PT.INTERRUPTREPLY 21) (\PT.AMARK 22) (\PT.GATEWAYREQUEST 128) (\PT.GATEWAYRESPONSE 129) ( \PT.ALTOTIMEREQUEST 134) (\PT.ALTOTIMERESPONSE 135) (\PT.MSGCHECK 136) (\PT.NEWMAIL 137) ( \PT.NONEWMAIL 138) (\PT.NOMAILBOX 139) (\PT.LAURELCHECK 140) (\PT.NAMELOOKUP 144) (\PT.NAMERESPONSE 145) (\PT.NAME/ADDRERROR 146) (\PT.ADDRLOOKUP 147) (\PT.ADDRRESPONSE 148) (\PT.PRINTERSTATUS 128) ( \PT.STATUSRESPONSE 129) (\PT.PRINTERCAPABILITY 130) (\PT.CAPABILITYRESPONSE 131) (\PT.PRINTJOBSTATUS 132) (\PT.PRINTJOBRESPONSE 133)) (RPAQ? PUPTYPES RAWPUPTYPES) (RPAQQ WELLKNOWNPUPSOCKETS ((\PUPSOCKET.TELNET 1) (\PUPSOCKET.ROUTING 2) (\PUPSOCKET.FTP 3) ( \PUPSOCKET.MISCSERVICES 4) (\PUPSOCKET.ECHO 5) (\PUPSOCKET.EFTP 16) (\PUPSOCKET.PRINTERSTATUS 17) ( \PUPSOCKET.LEAF 35))) (RPAQQ \PUPSOCKET.TELNET 1) (RPAQQ \PUPSOCKET.ROUTING 2) (RPAQQ \PUPSOCKET.FTP 3) (RPAQQ \PUPSOCKET.MISCSERVICES 4) (RPAQQ \PUPSOCKET.ECHO 5) (RPAQQ \PUPSOCKET.EFTP 16) (RPAQQ \PUPSOCKET.PRINTERSTATUS 17) (RPAQQ \PUPSOCKET.LEAF 35) (CONSTANTS (\PUPSOCKET.TELNET 1) (\PUPSOCKET.ROUTING 2) (\PUPSOCKET.FTP 3) (\PUPSOCKET.MISCSERVICES 4) (\PUPSOCKET.ECHO 5) (\PUPSOCKET.EFTP 16) (\PUPSOCKET.PRINTERSTATUS 17) (\PUPSOCKET.LEAF 35)) (PUTPROP (QUOTE PUP) (QUOTE IMPORTDATE) (IDATE "19-Jan-93 11:14:09")) (PUTPROPS UNLESSRDSYS MACRO ((NORMAL RDSYS) NORMAL)) (PUTPROPS UNLESSINEW MACRO ((NORMAL I-NEW) NORMAL)) (PUTPROPS 1ST MACRO ((A . B) A)) (PUTPROPS 2ND MACRO ((A B . C) B)) (PUTPROPS LOCAL MACRO ((X) X)) (PUTPROPS ALLOCAL MACRO ((X) X)) (PUTPROPS ADDBASE DMACRO (= . \ADDBASE)) (PUTPROPS GETBASE DMACRO (= . \GETBASE)) (PUTPROPS GETBASEBYTE DMACRO (= . \GETBASEBYTE)) (PUTPROPS GETBASEPTR DMACRO (= . \GETBASEPTR)) (PUTPROPS HILOC DMACRO (= . \HILOC)) (PUTPROPS LOLOC DMACRO (= . \LOLOC)) (PUTPROPS PUTBASE DMACRO (= . \PUTBASE)) (PUTPROPS PUTBASEBYTE DMACRO (= . \PUTBASEBYTE)) (PUTPROPS PUTBASEPTR DMACRO (= . \PUTBASEPTR)) (PUTPROPS REPLACEPTRFIELD DMACRO (= . \RPLPTR)) (PUTPROPS VAG2 DMACRO (= . \VAG2)) (PUTPROPS PAGEBASE MACRO ((PTR) (fetch (POINTER PAGEBASE) of PTR))) (PUTPROPS PAGELOC MACRO (OPENLAMBDA (PTR) (IPLUS (LLSH (\HILOC PTR) 8) (LRSH (\LOLOC PTR) 8)))) (PUTPROP (QUOTE RENAMEMACROS) (QUOTE IMPORTDATE) (IDATE "27-Apr-94 15:43:27")) (PUTPROPS MOUSESTATE MACRO (ARGS (LIST (QUOTE PROGN) (QUOTE (GETMOUSESTATE)) (MOUSESTATE-EXPR (CAR ARGS) T)))) (PUTPROPS LASTMOUSESTATE MACRO (ARGS (MOUSESTATE-EXPR (CAR ARGS) T))) (PUTPROPS UNTILMOUSESTATE MACRO (ARGS (COND ((AND (CDR ARGS) (CADR ARGS) (NEQ (CADR ARGS) T)) (* time argument is given and is not T or NIL; compile in time keeping loop.) (LIST (QUOTE PROG) (LIST (LIST ( QUOTE TIMEOUT) (LIST (QUOTE IPLUS) (QUOTE (CLOCK 0)) (LIST (QUOTE OR) (LIST (QUOTE NUMBERP) (CADR ARGS )) 100))) (QUOTE (NOWTIME (CLOCK 0)))) (QUOTE LP) (LIST (QUOTE COND) (LIST (CONS (QUOTE MOUSESTATE) ( LIST (CAR ARGS) T)) (QUOTE (RETURN T)))) (QUOTE (COND ((IGREATERP (CLOCK0 NOWTIME) TIMEOUT) (RETURN NIL)) (T (\BACKGROUND)))) (QUOTE (GO LP)))) (T (LIST (QUOTE PROG) NIL (QUOTE LP) (LIST (QUOTE COND) ( LIST (CONS (QUOTE MOUSESTATE) (LIST (CAR ARGS) T)) (QUOTE (RETURN T)))) (QUOTE (\BACKGROUND)) (QUOTE ( GO LP))))))) (PUTPROPS KEYSETSTATE MACRO (ARGS (LIST (QUOTE PROGN) (QUOTE (GETMOUSESTATE)) (MOUSESTATE-EXPR (CAR ARGS))))) (PUTPROPS LASTKEYSETSTATE MACRO (ARGS (MOUSESTATE-EXPR (CAR ARGS)))) (PUTPROPS WITHIN MACRO ((A B C) (AND (IGEQ A B) (ILESSP A (IPLUS B C))))) (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTMOUSEBUTTONS) (PUTPROPS IABS MACRO (OPENLAMBDA (A) (COND ((IGEQ A 0) A) (T (IMINUS A))))) (PUTPROP (QUOTE HLDISPLAY) (QUOTE IMPORTDATE) (IDATE "15-Mar-94 10:48:02")) (PUTPROPS .COPYKEYDOWNP. MACRO (NIL (OR (KEYDOWNP (QUOTE LSHIFT)) (KEYDOWNP (QUOTE RSHIFT)) (KEYDOWNP (QUOTE COPY))))) (PUTPROPS WSOP MACRO (ARGS (LET ((METHOD (CADR (CAR ARGS))) (DISPLAY (CADR ARGS)) (OTHERARGS (CDDR ARGS))) (BQUOTE (SPREADAPPLY* (fetch (WSOPS (\, METHOD)) of (fetch (FDEV WINDOWOPS) of (\, DISPLAY))) (\, DISPLAY) (\,@ OTHERARGS)))))) (PUTPROPS \COERCETODS MACRO (OPENLAMBDA (X) (COND ((type? WINDOW X) (fetch (WINDOW DSP) of X)) (T ( \ILLEGAL.ARG X))))) (PUTPROPS .WHILE.ON.TOP. MACRO ((FIRST . REST) (UNINTERRUPTABLY (\INTERNALTOTOPW FIRST) . REST))) (PUTPROPS WINDOWOP DMACRO (ARGS (LET ((OPNAME (CAR ARGS)) (METHOD-DEVICE (CADR ARGS)) (TAIL (CDDR ARGS ))) (COND ((AND (LISTP OPNAME) (EQ (CAR OPNAME) (QUOTE QUOTE))) (BQUOTE (SPREADAPPLY* (fetch (SCREEN ( \, (CADR OPNAME))) of (\, METHOD-DEVICE)) (\, METHOD-DEVICE) (\,@ TAIL)))) (T (ERROR "OPNAME not quoted: " OPNAME)))))) (RPAQQ MinWindowWidth 26) (RPAQQ MinWindowHeight 16) (CONSTANTS (MinWindowWidth 26) (MinWindowHeight 16)) (DATATYPE WINDOW (DSP (* ; "The display stream you use to actually printto the window.") NEXTW (* ; "Next window in the open-window list") SAVE (* ; "Saved image from anything this window's on top of") REG (* ; "Screen region this window occupies") BUTTONEVENTFN (* ; "FN called when left/middle mouse button goes up/down") RIGHTBUTTONFN (* ; "FN called when right mouse button goes up/down") CURSORINFN (* ; "Fn called when mouse enters window" ) CURSOROUTFN (* ; "Called when mouse leaves window") CURSORMOVEDFN (* ; "Called when mouse moves in window") REPAINTFN (* ; "Redisplay part of thie window") RESHAPEFN (* ; "Called when window is reshaped") EXTENT (* ; "Scrolling limits") USERDATA (* ; "Proplist to hold other window properites") VERTSCROLLREG (* ; "Region of vert scroll bar") HORIZSCROLLREG (* ; "Tegion of horiz scroll bar") SCROLLFN (* ; "Fn to scroll this window") VERTSCROLLWINDOW (* ; "Vert scroll bar") HORIZSCROLLWINDOW (* ; "Horiz scroll bar") CLOSEFN (* ; "Called at close time") MOVEFN (* ; "Called when window is moved") WTITLE (* ; "Window's title string, if any") NEWREGIONFN (* ; "Called to get new window shape") WBORDER (* ; "Window border-width, in pixels") PROCESS (* ; "Medley process associated with this window") WINDOWENTRYFN (* ; "Fn to call when kbd focus is switched here") SCREEN (* ; "Screen this window appears on") (NATIVE-HANDLE FIXP) (* ; "Uniterpreted place for native window to store a C pointer to its private info") (NATIVE-INFO1 FIXP) ( * ; "Reserved in case the pointer must be 64 bits") (NATIVE-W1 WORD) (* ; "Word for use by native handler") (NATIVE-W2 WORD) (* ; "Word for use by native handler") (NATIVE-P1 POINTER) (* ; "Lisp pointer for use by native handler")) BUTTONEVENTFN _ (FUNCTION TOTOPW) WBORDER _ WBorder WINDOWENTRYFN _ (FUNCTION GIVE.TTY.PROCESS) (SYSTEM)) (DATATYPE SCREEN (SCONOFF SCDESTINATION SCWIDTH SCHEIGHT SCTOPW SCTOPWDS SCTITLEDS SCFDEV SCDS SCDATA (* ;; "Space for native window manager interface to use.") (HANDLE FIXP) (* ; "Handle for emulator to store info about display for C code use.") (HANDLE2 FIXP) (* ; "Reserved in case HANDLE needs to be 64 bits on the C side.") (NATIVE-INFO POINTER) (* ; "POINTER for the private use of the emulator window code") NATIVETYPE (* ; "Symbol to tell what kind of native window system we're using.") (* ;; "- - - Functional interface to screen management - - -") WINIMAGEOPS (* ; "IMAGEOPS to be used in display streas on this kind of screen") WINFDEV (* ; "FDEV for display streams on this screen") CREATEWFN (* ; "Create a window") OPENWFN (* ; "Open a window") CLOSEWFN (* ; "Close a window") MOVEWFN (* ; "Move a window") RELMOVEWFN (* ; "Move window, relative") SHRINKWFN (* ; "Shrink window to icon") EXPANDWFN (* ; "Expand icon to window") SHAPEWFN (* ; "Reshape a window") REDISPLAYFN (* ; "Redisplay (part of) a window") GETWINDOWPROPFN (* ; "Get window property value") PUTWINDOWPROPFN (* ; "Set window property value") BURYWFN (* ; "Move window behind all others") TOTOPWFN (* ; "Move iwindow in front of all others") IMPORTWFN (* ; "Take a native window and save its state internally") EXPORTWFN (* ; "Take a saved window state and open it on this screen, filling in screen and methods as needed.") DESTROYFN (* ; "Destroy this window, for GC finaliszation") SETCURSORFN (* ; "Set the cursor for this window.") PROMPTW (* ; "The prompt window for this screen") SHOWGCFN (* ; "Show GC indication; called with ON/OFF arg, t=>show gcing status, NIL=>turn off GC indicator.") DSPCREATEFN (* ; "Create a displaystream on this screen.") BBTTOWIN (* ; "BITBLT from a lisp bitmap to a window") BBTFROMWIN (* ; "BITBLT from a window to a lisp bitmap") BBTWINWIN (* ; "BITBLT from a window to another window.") SCCURSOR (* ; "CURSOR that's in effect for this screen by default.") SCKEYBOARD (* ; "Something about which keyboard we're receiving from.") SCDEPTH (* ; "# of bits per pixel on the screen. THIS WILL REPLACE SCBITSPERPIXEL ASAP.") SCCLOSEDOWN (* ; "Close down this screen cleanly, saving window state.") SCCLOSESCREEN (* ; "Close down thie screen cleanly, no state saving.") SCREOPEN (* ; "Reopen this screen?") SCCARETFLASH (* ; "Function to flash thecaret.") SCGETSCREENPOSITION (* ; "GETSCREENPOSITION") SCGETBOXSCREENPOSITION (* ; "GETBOXPOSITION") SCGETSCREENREGION (* ; "GETREGION") SCMOVEPOINTER (* ; "\CURSORPOSITION")) SCONOFF _ (QUOTE OFF) (ACCESSFNS ((SCBITSPERPIXEL (COND ((fetch (SCREEN SCDESTINATION) of DATUM) (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (SCREEN SCDESTINATION) of DATUM) )) (T 1))) (SCREGION (create REGION LEFT _ 0 BOTTOM _ 0 WIDTH _ (fetch (SCREEN SCWIDTH) of DATUM) HEIGHT _ (fetch (SCREEN SCHEIGHT) of DATUM))))) (SYSTEM)) (GLOBALVARS WINDOWUSERFORMS ENDOFWINDOWUSERFORMS PROMPTWINDOW) (PUTPROP (QUOTE WINDOW) (QUOTE IMPORTDATE) (IDATE " 9-Apr-2000 17:36:29")) (PUTPROPS NNLITATOM MACRO (OPENLAMBDA (X) (AND X (LITATOM X)))) (PUTPROPS \NULL.OR.FIXP MACRO (OPENLAMBDA (X) (OR (NULL X) (FIXP X)))) (PUTPROPS \CHECKTYPE MACRO (X (PROG ((VAR (CAR X)) (PRED (CADR X))) (if (AND (LISTP PRED) (MEMB (CAR PRED) (QUOTE (QUOTE FUNCTION)))) then (SETQ PRED (LIST (CADR PRED) VAR))) (RETURN (SUBPAIR (QUOTE (MSG VAR PRED)) (LIST (CONCAT " is not a suitable value for the variable: " VAR) VAR PRED) (QUOTE (until PRED do (SETQ VAR (ERROR VAR MSG))))))))) (PUTPROPS CANONICAL.TIMERUNITS MACRO (OPENLAMBDA (X) (* Checks for common abbreviations before calling \CanonicalizeTimerUnits) (SELECTQ X ((TICKS MILLISECONDS SECONDS) (* These are the canonical forms) X ) (NIL (QUOTE MILLISECONDS)) (\CanonicalizeTimerUnits X)))) (PUTPROPS \MACRO.EVAL DMACRO (Z (PROG ((X (EXPANDMACRO (CAR Z) T))) (if (EQ X (CAR Z)) then (ERROR "No macro property -- \MACRO.EVAL" X) else (RETURN (EVAL X)))))) (DEFOPTIMIZER \MACRO.MX (FORM) FORM) (PUTPROP (QUOTE MACROAUX) (QUOTE IMPORTDATE) (IDATE "16-May-90 20:26:31")) (RPAQQ MASK0WORD1'S 32767) (RPAQQ MASK1WORD0'S 32768) (RPAQQ MASKWORD1'S 65535) (RPAQQ MASKHALFWORD1'S 255) (RPAQQ BITSPERHALFWORD 8) (CONSTANTS MASK0WORD1'S MASK1WORD0'S MASKWORD1'S MASKHALFWORD1'S BITSPERHALFWORD) (PUTPROPS EQZEROP MACRO ((X) (EQ 0 X))) (PUTPROPS \MOVETOBOX DMACRO (OPENLAMBDA (N D) (SELECTC (NTYPX N) (\SMALLP (replace (FIXP HINUM) of D with 0) (replace (FIXP LONUM) of D with N)) (\FIXP (replace (FIXP HINUM) of D with (fetch (FIXP HINUM) of N)) (replace (FIXP LONUM) of D with (fetch (FIXP LONUM) of N))) (\ILLEGAL.ARG N)))) (PUTPROPS .XUNBOX. MACRO ((X HX LX) (until (SETQ LX (SELECTC (NTYPX X) (\SMALLP (COND ((IGEQ X 0) ( SETQ HX 0) X) (T (SETQ HX MASKWORD1'S) (\LOLOC X)))) (\FIXP (SETQ HX (fetch (FIXP HINUM) of X)) (fetch (FIXP LONUM) of X)) NIL)) do (SETQ X (LISPERROR "ILLEGAL ARG" X T))))) (PUTPROPS .XLLSH. MACRO ((HI LO N) (if (IGEQ N BITSPERWORD) then (* ; "Jump 16 bits in a single bound!") (SETQ HI LO) (SETQ LO 0) (SETQ N (IDIFFERENCE N BITSPERWORD))) (if (IGEQ N BITSPERHALFWORD) then (* ; "Jump 8 bits in a single bound!") (SETQ HI (LOGOR (.LOHALFWORDHI. HI) (.HIHALFWORDLO. LO))) (SETQ LO (.LOHALFWORDHI. LO)) (SETQ N (IDIFFERENCE N BITSPERHALFWORD))) (if (IGEQ N 4) then (* ; "Jump 4 bits in a single bound!") (SETQ HI (LOGOR (LRSH LO (CONSTANT (IDIFFERENCE BITSPERWORD 4))) (LLSH (LOGAND HI (CONSTANT (MASK.1'S 0 (IDIFFERENCE BITSPERWORD 4)))) 4))) (SETQ LO (LLSH (LOGAND LO (CONSTANT (MASK.1'S 0 (IDIFFERENCE BITSPERWORD 4)))) 4)) (SETQ N (IDIFFERENCE N 4))) (* ; "MASK0WORD1'S should be same as (SUB1 (LSH 1 (SUB1 BITSPERWORD)))") (FRPTQ N (SETQ HI (LLSH ( LOGAND HI MASK0WORD1'S) 1)) (SETQ LO (LLSH (if (IGEQ LO MASK1WORD0'S) then (add HI 1) (LOGAND LO MASK0WORD1'S) else LO) 1))))) (PUTPROPS .XLLSH1. MACRO ((HI LO) (SETQ HI (LLSH (LOGAND HI MASK0WORD1'S) 1)) (SETQ LO (LSH (COND (( IGEQ LO MASK1WORD0'S) (SETQ HI (LOGOR HI 1)) (LOGAND LO MASK0WORD1'S)) (T LO)) 1)))) (PUTPROPS .XLRSH. MACRO ((HI LO N) (if (IGEQ N BITSPERWORD) then (* ; "Jump 10 bits in a single bound!") (SETQ LO HI) (SETQ HI 0) (SETQ N (IDIFFERENCE N BITSPERWORD))) (if (IGEQ N BITSPERHALFWORD) then (* ; "Jump 8 bits in a single bound!") (SETQ LO (LOGOR (.HIHALFWORDLO. LO) (.LOHALFWORDHI. HI))) (SETQ HI (.HIHALFWORDLO. HI)) (SETQ N (IDIFFERENCE N BITSPERHALFWORD))) (if (IGEQ N 4) then (* ; "Jump 4 bits in a single bound!") (SETQ LO (LOGOR (LLSH (LOGAND HI (CONSTANT ( MASK.1'S 0 4))) (CONSTANT (IDIFFERENCE BITSPERWORD 4))) (LRSH LO 4))) (SETQ HI (LRSH HI 4)) (SETQ N ( IDIFFERENCE N 4))) (* ; "MASK1WORD0'S should be same as \SIGNBIT") (FRPTQ N (SETQ LO (if (ODDP HI) then (LOGOR (LRSH LO 1) MASK1WORD0'S) else (LRSH LO 1))) (SETQ HI (LRSH HI 1))))) (PUTPROPS .ADD.2WORD.INTEGERS. MACRO ((HX LX HY LY) (* ; "Ignores carry out of high-order word") (SETQ HX (.SUMSMALLMOD. HX HY)) (SETQ LX (.SUMSMALLMOD. LX LY (SETQ HX (if (EQ HX MAX.SMALL.INTEGER) then 0 else (ADD1 HX))))))) (PUTPROPS .SUB.2WORD.INTEGERS. MACRO ((HX LX HY LY) (* ; "Ignores carry out of high-order word") (SETQ HX (.DIFFERENCESMALLMOD. HX HY)) (SETQ LX (.DIFFERENCESMALLMOD. LX LY (SETQ HX (if (EQ HX 0) then MAX.SMALL.INTEGER else (SUB1 HX))))))) (PUTPROPS .32BITMUL. MACRO ((HR LR X Y) (PROG (HX LX HY LY) (if (ILESSP X Y) then (swap X Y)) (* ; "Y is the lesser of the two now") (.XUNBOX. X HX LX) (.XUNBOX. Y HY LY) LP (if (ODDP LY) then ( .ADD.2WORD.INTEGERS. HR LR HX LX)) (if (EQ HY 0) then (SETQ LY (LRSH LY 1)) (if (EQ LY 0) then (RETURN )) else (.LRSH1. HY LY)) (* ; "Trim off highest bits, so that left-shifting doesn't generate FIXPs") ( SETQ HX (LOGAND HX MASK0WORD1'S)) (.LLSH1. HX LX) (GO LP)))) (PUTPROPS .SUMSMALLMOD. MACRO ((X Y OVERFLOWFORM) ((LAMBDA (\SumSmallModVar) (DECLARE (LOCALVARS \SumSmallModVar)) (IF (ILEQ X \SumSmallModVar) THEN (IPLUS X Y) ELSE OVERFLOWFORM (IDIFFERENCE X (ADD1 \SumSmallModVar)))) (IDIFFERENCE MAX.SMALL.INTEGER Y)))) (PUTPROPS .DIFFERENCESMALLMOD. MACRO ((X Y BORROWFORM) (IF (NOT (IGREATERP Y X)) THEN (IDIFFERENCE X Y ) ELSE BORROWFORM (ADD1 (IDIFFERENCE MAX.SMALL.INTEGER (IDIFFERENCE Y X)))))) (PUTPROPS \GETBASENIBBLE DMACRO (OPENLAMBDA (BASE OFFST) ((LAMBDA (\Byte) (DECLARE (LOCALVARS \Byte)) (if (ODDP OFFST) then (LOGAND \Byte (CONSTANT (MASK.1'S 0 BITSPERNIBBLE))) else (LRSH \Byte BITSPERNIBBLE))) (\GETBASEBYTE BASE (FOLDLO OFFST NIBBLESPERBYTE))))) (PUTPROPS \PUTBASENIBBLE DMACRO (OPENLAMBDA (BASE OFFST VAL) ((LAMBDA (\ByteNo) (DECLARE (LOCALVARS \ByteNo)) ((LAMBDA (\Byte) (DECLARE (LOCALVARS \Byte)) (\PUTBASEBYTE BASE \ByteNo (if (ODDP OFFST) then (LOGOR (LOGAND \Byte (CONSTANT (MASK.1'S BITSPERNIBBLE BITSPERNIBBLE))) VAL) else (LOGOR (LOGAND \Byte (CONSTANT (MASK.1'S 0 BITSPERNIBBLE))) (LLSH VAL BITSPERNIBBLE))))) (\GETBASEBYTE BASE \ByteNo)) ) (FOLDLO OFFST NIBBLESPERBYTE)))) (PUTPROPS \GETBASEBIT DMACRO (OPENLAMBDA (BASE OFFST) ((LAMBDA (\ByteNo \BitMask) (DECLARE (LOCALVARS \ByteNo \BitMask)) (if (EQ 0 (LOGAND \BitMask (\GETBASEBYTE BASE \ByteNo))) then 0 else 1)) (FOLDLO OFFST BITSPERBYTE) (MASK.1'S (IDIFFERENCE (CONSTANT (SUB1 BITSPERBYTE)) (IMOD OFFST BITSPERBYTE)) 1))) ) (PUTPROPS \PUTBASEBIT DMACRO (OPENLAMBDA (BASE OFFST VAL) ((LAMBDA (\ByteNo \BitMask \Byte) (DECLARE ( LOCALVARS \ByteNo \BitMask \Byte)) (SETQ \Byte (\GETBASEBYTE BASE \ByteNo)) (if (if (EQ 0 (LOGAND \BitMask \Byte)) then (NOT (EQ 0 VAL)) else (EQ 0 VAL)) then (\PUTBASEBYTE BASE \ByteNo (LOGXOR \BitMask \Byte))) VAL) (FOLDLO OFFST BITSPERBYTE) (MASK.1'S (IDIFFERENCE (CONSTANT (SUB1 BITSPERBYTE)) (IMOD OFFST BITSPERBYTE)) 1)))) (PUTPROP (QUOTE ADDARITH) (QUOTE IMPORTDATE) (IDATE "16-May-90 11:46:37")) (RPAQQ \MAXFILEPAGE 65534) (CONSTANTS \MAXFILEPAGE) (PUTPROP (QUOTE LLFAULT) (QUOTE IMPORTDATE) (IDATE " 2-Jan-93 12:26:58")) (PUTPROPS \UPDATETIMERS MACRO (NIL (* * Moves excess time from the processor clock to our software clocks. Needs to be run often, uninterruptably, preferably from the vertical retrace interrupt) (* Get processor clock) (PROG ((EXCESS (\BOXIDIFFERENCE (\RCLK (LOCF (fetch RCLKTEMP0 of \MISCSTATS))) (LOCF (fetch BASECLOCK of \MISCSTATS))))) (RETURN (COND ((OR (IGEQ EXCESS \RCLKSECOND) (ILESSP EXCESS 0)) ( * More than one second has elapsed since we updated clocks) (\BOXIPLUS (LOCF (fetch BASECLOCK of \MISCSTATS)) \RCLKSECOND) (* Increment base by one second) (\BOXIPLUS (LOCF (fetch MILLISECONDSCLOCK of \MISCSTATS)) 1000) (* Increment clocks by 1 second) (\BOXIPLUS (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) 1) T)))))) (RPAQQ \RTCSECONDS 378) (RPAQQ \RTCMILLISECONDS 380) (RPAQQ \RTCBASE 382) (RPAQQ \OFFSET.SECONDS 0) (RPAQQ \OFFSET.MILLISECONDS 2) (RPAQQ \OFFSET.BASE 4) (RPAQQ \ALTO.RCLKSECOND 1680000) (RPAQQ \ALTO.RCLKMILLISECOND 1680) (RPAQQ \DLION.RCLKMILLISECOND 35) (RPAQQ \DLION.RCLKSECOND 34746) (RPAQQ \DOVE.RCLKMILLISECOND 63) (RPAQQ \DOVE.RCLKSECOND 62500) (CONSTANTS (\RTCSECONDS 378) (\RTCMILLISECONDS 380) (\RTCBASE 382) (\OFFSET.SECONDS 0) ( \OFFSET.MILLISECONDS 2) (\OFFSET.BASE 4) (\ALTO.RCLKSECOND 1680000) (\ALTO.RCLKMILLISECOND 1680) ( \DLION.RCLKMILLISECOND 35) (\DLION.RCLKSECOND 34746) (\DOVE.RCLKMILLISECOND 63) (\DOVE.RCLKSECOND 62500)) (PUTPROPS ALTO.TO.LISP.DATE MACRO ((DATE) (LOGXOR DATE -2147483648))) (PUTPROPS LISP.TO.ALTO.DATE MACRO ((DATE) (LOGXOR DATE -2147483648))) (PUTPROP (QUOTE LLTIMER) (QUOTE IMPORTDATE) (IDATE "16-May-90 20:13:11")) (DATATYPE SYSQUEUE ((NIL BYTE) (SYSQUEUEHEAD POINTER) (NIL BYTE) (SYSQUEUETAIL POINTER))) (BLOCKRECORD QABLEITEM ((NIL BITS 4) (QLINK POINTER) (* ; "Link to next thing in queue always in first pointer of datum, independent of what the datum is")) ( BLOCKRECORD QABLEITEM ((NIL BITS 4) (LINK POINTER) (* ; "Let's also be able to call it a LINK")))) (PUTPROPS \QUEUEHEAD MACRO ((Q) (fetch (SYSQUEUE SYSQUEUEHEAD) of Q))) (PUTPROPS \DETCONC MACRO (OPENLAMBDA (TQ) (PROG1 (\PEEKTCONC TQ) (if (NULL (CAR (RPLACA TQ (CDAR TQ))) ) then (RPLACD TQ))))) (PUTPROPS \ENTCONC MACRO (= . TCONC)) (PUTPROPS \PEEKTCONC MACRO (= . CAAR)) (DATATYPE ETHERPACKET ((NIL BYTE) (EPLINK POINTER) (* ; "For queue maintenence") (EPFLAGS BYTE) (* ; "optional flags for some applications") (EPUSERFIELD POINTER) (* ; "Arbitrary pointer for applications") (NIL BYTE) (EPPLIST POINTER) (* ; "Extra field for use as an A-list for properties") (EPTRANSMITTING FLAG) (* ; "True while packet is being transmitted and hence cannot be reused") (EPRECEIVING FLAG) (* ; "True when a packet has been seen at the head of the network's input queue at least once") (NIL BITS 6 ) (EPREQUEUE POINTER) (* ; "Where to requeue this packet after transmission") (NIL BYTE) (EPSOCKET POINTER) (NIL BYTE) (EPNETWORK POINTER) (EPTYPE WORD) (* ; "Type of packet to be encapsulated (PUP or XIP or 10TO3)") (NIL WORD) (EPTIMESTAMP FIXP) (* ; "Gets RCLK value when transmitted/received") (EPREQUEUEFN POINTER) (* ; "FN to perform requeueing") ( NIL 4 WORD) (* ; "Space for expansion") (* ; "Note: This next field wants to be quad+2 aligned so that the 10mb packet is quad+3 aligned") ( EPENCAPSULATION 8 WORD) (* ; "10mb encapsulation, or 3mb encapsulation with padding") (EPBODY 289 WORD ) (* ; "Body of packet, header up to 16 words plus data up to 546 bytes"))) (ACCESSFNS ETHERAUX ((AUXPTR (CDR (ASSOC (QUOTE AUXPTR) (fetch EPPLIST of DATUM))) (\EP.PUT.AUX DATUM (QUOTE AUXPTR) NEWVALUE)) (AUXWORD (OR (CDR (ASSOC (QUOTE AUXWORD) (fetch EPPLIST of DATUM))) 0) ( \EP.PUT.AUX DATUM (QUOTE AUXWORD) NEWVALUE)) (AUXBYTE (OR (CDR (ASSOC (QUOTE AUXBYTE) (fetch EPPLIST of DATUM))) 0) (\EP.PUT.AUX DATUM (QUOTE AUXBYTE) NEWVALUE)))) (RPAQQ \EPT.PUP 512) (RPAQQ \EPT.XIP 1536) (RPAQQ \3MBTYPE.XIP 1536) (RPAQQ \10MBTYPE.XIP 1536) (RPAQQ \EPT.10TO3 1537) (RPAQQ \3MBTYPE.10TO3 1537) (RPAQQ \EPT.UNKNOWN 255) (CONSTANTS \EPT.PUP \EPT.XIP \3MBTYPE.XIP \10MBTYPE.XIP \EPT.10TO3 \3MBTYPE.10TO3 \EPT.UNKNOWN) (RPAQQ \NULLCHECKSUM 65535) (CONSTANTS (\NULLCHECKSUM 65535)) (DATATYPE NDB ((NETTYPE BYTE) (* ; "10 or 3 for now") (NDBNEXT POINTER) (* ; "Link to next NDB") ( NDBPUPNET# BYTE) (* ; "Pup number of this net. May be different from NS net number, though not in Xerox world") (NDBNSNET# POINTER) (* ; "Can be 32-bits, so might as well leave its box around") (NDBTASK# BYTE) (* ; "Task # of this network") (NDBBROADCASTP POINTER) (* ; "Function that returns true if packet is of broadcast type") (NDBPUPHOST# BYTE) (* ; "My pup address on this net. NS address is global to all nets, so not needed here") (NDBTRANSMITTER POINTER) (* ; "(NDB PACKET) -- fn to send a raw packet on this net. returns NIL on failure") (NIL BYTE) (NDBENCAPSULATOR POINTER) (* ; "(NDB PACKET HOST LENGTH TYPE) -- fn to encapsulate and send a higher-level packet on this net ") ( NDBCSB POINTER) (* ; "Pointer to CSB for this network") (NDBIQLENGTH BYTE) (NDBIQ POINTER) (* ; "Queue of empty packets for receiver") (NDBTQ POINTER) (* ; "Queue of packets to transmit") ( NDBTRANSLATIONS POINTER) (* ; "Cache of translations, 3:10 or 10:3 according to network") ( NDBETHERFLUSHER POINTER) (* ; "Turns off this ether. Args NDB") (NDBWATCHER POINTER) (NDBCANHEARSELF POINTER) (* ; "True if receiver can hear packets sent by transmitter") (NDBIPNET# POINTER) (NDBIPHOST# POINTER) (NDBPUPTYPE WORD) (* ; "The packet encapsulation of PUP on this net") (NIL WORD) (NIL POINTER) (* ; "Spares"))) (RECORD ROUTING (RTNET# RTHOPCOUNT RTGATEWAY# RTNDB RTTIMER RTRECENT)) (PUTPROPS \SERIALNUMBER MACRO (NIL (fetch (IFPAGE SerialNumber) of \InterfacePage))) (PUTPROPS \DEVICE.INPUT DOPVAL (1 MISC1 1)) (PUTPROPS \DEVICE.OUTPUT DOPVAL (2 MISC2 2)) (PUTPROPS \D0.STARTIO DOPVAL (1 MISC1 0)) (PUTPROP (QUOTE LLETHER) (QUOTE IMPORTDATE) (IDATE "19-Jan-93 10:49:30")) (RECORD BRUSH (BRUSHSHAPE BRUSHSIZE BRUSHCOLOR) BRUSHSHAPE _ (QUOTE ROUND) BRUSHSIZE _ 1) (PUTPROPS IMAGEOP MACRO (ARGS (CONS (QUOTE SPREADAPPLY*) (CONS (COND ((EQ (CAR (LISTP (CAR ARGS))) ( QUOTE QUOTE)) (LIST (QUOTE fetch) (LIST (QUOTE IMAGEOPS) (CADAR ARGS)) (QUOTE of) (LIST (QUOTE fetch) (QUOTE (STREAM IMAGEOPS)) (QUOTE of) (CADR ARGS)))) (T (HELP "IMAGEOP - OPNAME not quoted:" ARGS))) ( CDDR ARGS))))) (DATATYPE IMAGEOPS (IMAGETYPE IMCLOSEFN IMXPOSITION IMYPOSITION IMFONT IMLEFTMARGIN IMRIGHTMARGIN IMLINEFEED IMDRAWLINE IMDRAWCURVE IMDRAWCIRCLE IMDRAWELLIPSE IMFILLCIRCLE IMBLTSHADE IMBITBLT IMNEWPAGE IMMOVETO IMSCALE IMTERPRI IMTOPMARGIN IMBOTTOMMARGIN IMSPACEFACTOR IMFONTCREATE IMOPERATION IMCOLOR IMSTRINGWIDTH IMCHARWIDTH IMCHARWIDTHY IMBACKCOLOR IMBITMAPSIZE IMCLIPPINGREGION IMRESET IMDRAWPOLYGON IMFILLPOLYGON IMSCALEDBITBLT IMWRITEPIXEL IMCHARSET IMROTATE IMDRAWARC IMTRANSLATE IMSCALE2 IMPUSHSTATE IMPOPSTATE IMDEFAULTSTATE IMDRAWPOINT IMBLTCHAR IMXOFFSET IMYOFFSET) IMCLOSEFN _ (FUNCTION NILL) IMTERPRI _ (FUNCTION (LAMBDA (STREAM) (\OUTCHAR STREAM (CHARCODE EOL)))) IMNEWPAGE _ ( FUNCTION (LAMBDA (STREAM) (\OUTCHAR STREAM (CHARCODE ^L)))) IMOPERATION _ (FUNCTION NILL) IMCOLOR _ ( FUNCTION NILL) IMCLIPPINGREGION _ (FUNCTION NILL) IMRESET _ (FUNCTION NILL) IMBACKCOLOR _ (FUNCTION NILL) IMSTRINGWIDTH _ (FUNCTION (LAMBDA (STREAM STR RDTBL) (STRINGWIDTH STR (DSPFONT NIL STREAM) RDTBL RDTBL))) IMCHARWIDTH _ (FUNCTION (LAMBDA (STREAM CHARCODE) (CHARWIDTH CHARCODE (DSPFONT NIL STREAM))) ) IMMOVETO _ (FUNCTION (LAMBDA (STREAM X Y) (IMAGEOP (QUOTE IMXPOSITION) STREAM STREAM X) (IMAGEOP ( QUOTE IMYPOSITION) STREAM STREAM Y))) IMBITMAPSIZE _ (FUNCTION (LAMBDA (STREAM BITMAP DIMENSION) ( SELECTQ DIMENSION (WIDTH (TIMES (DSPSCALE NIL STREAM) (BITMAPWIDTH BITMAP))) (HEIGHT (TIMES (DSPSCALE NIL STREAM) (BITMAPHEIGHT BITMAP))) (NIL (CONS (TIMES (DSPSCALE NIL STREAM) (BITMAPWIDTH BITMAP)) ( TIMES (DSPSCALE NIL STREAM) (BITMAPHEIGHT BITMAP)))) (\ILLEGAL.ARG DIMENSION)))) IMWRITEPIXEL _ ( FUNCTION NILL) IMCHARSET _ (FUNCTION NILL) IMXPOSITION _ (FUNCTION NILL) IMYPOSITION _ (FUNCTION NILL) IMFONT _ (FUNCTION NILL) IMLEFTMARGIN _ (FUNCTION NILL) IMRIGHTMARGIN _ (FUNCTION NILL) IMLINEFEED _ (FUNCTION NILL) IMDRAWLINE _ (FUNCTION NILL) IMDRAWCURVE _ (FUNCTION NILL) IMDRAWCIRCLE _ (FUNCTION NILL) IMDRAWELLIPSE _ (FUNCTION NILL) IMFILLCIRCLE _ (FUNCTION NILL) IMBLTSHADE _ (FUNCTION NILL) IMBITBLT _ (FUNCTION NILL) IMSCALE _ (FUNCTION NILL) IMTOPMARGIN _ (FUNCTION NILL) IMBOTTOMMARGIN _ ( FUNCTION NILL) IMSPACEFACTOR _ (FUNCTION NILL) IMFONTCREATE _ (FUNCTION NILL) IMCHARWIDTHY _ (FUNCTION NILL) IMDRAWPOLYGON _ (FUNCTION \DRAWPOLYGON.GENERIC) IMDRAWPOINT _ (FUNCTION \DRAWPOINT.GENERIC) IMFILLPOLYGON _ (FUNCTION NILL) IMSCALEDBITBLT _ (FUNCTION NILL) IMROTATE _ (FUNCTION NILL) IMDRAWARC _ (FUNCTION NILL) IMTRANSLATE _ (FUNCTION NILL) IMPUSHSTATE _ (FUNCTION NILL) IMPOPSTATE _ (FUNCTION NILL) IMSCALE2 _ (FUNCTION NILL) IMDEFAULTSTATE _ (FUNCTION NILL) IMBLTCHAR _ (FUNCTION \MEDW.BLTCHAR) IMXOFFSET _ (FUNCTION \MEDW.XOFFSET) IMYOFFSET _ (FUNCTION \MEDW.YOFFSET)) (GLOBALVARS \NOIMAGEOPS) (PUTPROP (QUOTE IMAGEIO) (QUOTE IMPORTDATE) (IDATE "28-Jun-99 16:33:59")) (DATATYPE PROCESS ((PROCFX0 WORD) (* ; "= \STACKHI to make this look like a STACKP") (PROCFX WORD) (* ; "Stack pointer to this context when it is asleep") (PROCSTATUS BYTE) (* ; "Running or waiting") ( PROCNAME POINTER) (* ; "Name for convenience in type-in reference") (PROCPRIORITY BYTE) (* ; "Priority level, 0-4. Not currently used.") (PROCQUEUE POINTER) (* ; "Queue of processes at the same priority") (NIL BYTE) (NEXTPROCHANDLE POINTER) (* ; "Pointer to next one") (PROCTIMERSET FLAG) (* ; "True if PROCWAKEUPTIMER has an interesting value") ( PROCBEINGDELETED FLAG) (* ; "True if proc was deleted, but hasn't been removed from \PROCESSES yet") ( PROCDELETED FLAG) (PROCSYSTEMP FLAG) (PROCNEVERSTARTED FLAG) (NIL FLAG) (NIL FLAG) (NIL FLAG) ( PROCWAKEUPTIMER POINTER) (* ; "a largep recording the time this proc last went to sleep") ( PROCTIMERLINK POINTER) (* ; "For linking proc in timer queue") (PROCTIMERBOX POINTER) (* ; "Scratch box to use for PROCWAKEUPTIMER when user does not give one explicitly") (WAKEREASON POINTER) (* ; "Reason process is being run. From WAKE.PROCESS or timer or event wakeup; T from simple BLOCK") (PROCEVENTORLOCK POINTER) (* ; "EVENT or MONITOR lock that this proc is waiting for") (PROCFORM POINTER) (* ; "Form to EVAL to start it going") (RESTARTABLE POINTER) (* ; "T = autorestart on error, HARDRESET = restart only on hard reset, NIL = never restart") (PROCWINDOW POINTER) (* ; "Window this process lives in, if any") (PROCFINISHED POINTER) (* ; "True if proc finished. Value is indication of how: NORMAL, DELETED, ERROR") (PROCRESULT POINTER) (* ; "Value it returned if it finished normally") (PROCFINISHEVENT POINTER) (* ; "Optional EVENT to be notified when proc finishes") (PROCMAILBOX POINTER) (* ; "Message queue") ( PROCDRIBBLEOUTPUT POINTER) (* ; "Binding for *DRIBBLE-OUTPUT* in this process") (PROCINFOHOOK POINTER) (* ; "Optional user fn that displays info about process") (PROCTYPEAHEAD POINTER) (* ; "Buffer of typeahead destined for this proc") (PROCREMOTEINFO POINTER) (* ; "For Enterprise") ( PROCUSERDATA POINTER) (* ; "For PROCESSPROP") (PROCEVENTLINK POINTER) (* ; "Used to maintain EVENT queues") (PROCAFTEREXIT POINTER) (* ; "What to do with this process when coming back from a LOGOUT, etc") (PROCBEFOREEXIT POINTER) (* ; "If DON'T, can't logout") (PROCOWNEDLOCKS POINTER) (* ; "Pointer to first lock I currently own") ( PROCEVAPPLYRESULT POINTER) (* ; "For PROCESS.EVAL and PROCESS.APPLY when WAITFORRESULT is true") ( PROCTTYENTRYFN POINTER) (* ; "Is applied to a process when it becomes the tty process") (PROCTTYEXITFN POINTER) (* ; "Is applied to a process when it ceases to be the tty process") (PROCHARDRESETINFO POINTER) (* ; "HARDRESET stores info about unwind-protect cleanups here") (PROCRESTARTFORM POINTER) (* ; "use this instead of PROCFORM when restarting") (PROCOLDTTYPROC POINTER) (* ; "Process that had the tty when we got it") (NIL POINTER) (* ; "For expansion")) PROCTIMERBOX _ ( CREATECELL \FIXP) PROCFX0 _ \STACKHI) (PUTPROPS THIS.PROCESS MACRO (NIL \RUNNING.PROCESS)) (PUTPROPS TTY.PROCESS MACRO (X (COND ((CAR X) (QUOTE IGNOREMACRO)) (T (QUOTE \TTY.PROCESS))))) (PUTPROPS TTY.PROCESSP MACRO (X (COND ((CAR X) (QUOTE IGNOREMACRO)) (T (QUOTE (OR (NULL (THIS.PROCESS) ) (EQ (THIS.PROCESS) (TTY.PROCESS)))))))) (GLOBALVARS \RUNNING.PROCESS \TTY.PROCESS \PROC.RESTARTME \PROC.RESETME \PROC.ABORTME) (PUTPROP (QUOTE PROC) (QUOTE IMPORTDATE) (IDATE "17-Jun-99 21:58:52")) (PUTPROPS \BACKCHAR MACRO (OPENLAMBDA (STREAM) (* ; "Backs up over an NS character") (\BACKNSCHAR STREAM (UNFOLD (ACCESS-CHARSET STREAM) 256)))) (PUTPROPS \BACKNSCHAR MACRO ((ST SHIFTEDCHARSET COUNTERVAR) (COND ((\XCCSP ST) (\BACKXCCSCHAR ST SHIFTEDCHARSET COUNTERVAR)) (T (COND ((QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR ( CL:FUNCALL (ffetch (STREAM BACKCHARFN) of ST) ST T)))) (T (CL:FUNCALL (ffetch (STREAM BACKCHARFN) of ST) ST NIL))))))) (PUTPROPS \CHECKEOLC MACRO (OPENLAMBDA (CH EOLC STREAM PEEKBINFLG COUNTERVAR) (* ;; "Subtracts number of bytes read from COUNTERVAR, which may be NIL. In fact, should be NIL if PEEKBINFLG is T." ) (SELCHARQ CH (CR (SELECTC EOLC (CR.EOLC (CHARCODE EOL)) (CRLF.EOLC (COND (PEEKBINFLG (* ;; "T from PEEKC, compile-time constant. In this case, must leave the fileptr where it was, except for possibly advancing over character set shifts" ) (COND ((EQ (CHARCODE LF) (UNINTERRUPTABLY (\NSIN STREAM (UNFOLD (ACCESS-CHARSET STREAM) 256)) (* ;; "Read the NS CR. We know that there aren't any font-shift characters in front of the CR, because they would have already been read by the \NSPEEK that got the CR character. Since we are going to NS back the CR character, we don't need to update the counter variable" ) (PROG1 (\PEEKBIN STREAM T) (* ;; "LF must be in next BYTE after NS CR, regardless of coding. Character-set shifting bytes can't intervene. Then we back up over the CR that was \NSINed above." ) (\BACKNSCHAR STREAM)))) (CHARCODE EOL)) (T (CHARCODE CR)))) ((EQ (CHARCODE LF) (\PEEKBIN STREAM T)) (\BIN STREAM) (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (SUB1 COUNTERVAR))) (CHARCODE EOL)) (T ( CHARCODE CR)))) (CHARCODE CR))) (LF (COND ((EQ EOLC LF.EOLC) (CHARCODE EOL)) (T (CHARCODE LF)))) CH))) (PUTPROPS \INCHAR MACRO (OPENLAMBDA (STREAM COUNTERVAR) (* ; "returns a 16 bit character code") ( \CHECKEOLC (\NSIN STREAM (UNFOLD (ACCESS-CHARSET STREAM) 256) NIL COUNTERVAR) (FFETCH EOLCONVENTION OF STREAM) STREAM NIL COUNTERVAR))) (PUTPROPS \INCCODE MACRO (OPENLAMBDA (STREAM COUNTERVAR) (* ; "returns a 16 bit character code") ( \CHECKEOLC (\NSIN STREAM (UNFOLD (ACCESS-CHARSET STREAM) 256) NIL COUNTERVAR) (ffetch EOLCONVENTION of STREAM) STREAM NIL COUNTERVAR))) (PUTPROPS \PEEKCCODE MACRO (OPENLAMBDA (STREAM NOERROR) (\CHECKEOLC (\NSPEEK STREAM (UNFOLD ( ACCESS-CHARSET STREAM) 256) NIL NOERROR) (ffetch EOLCONVENTION of STREAM) STREAM T))) (PUTPROPS \NSIN MACRO ((ST SHIFTEDCSET SHIFTEDCSETVAR COUNTERVAR) (* ;;; "Dispatches to the appropriate character code decoder. If you want to support a new character encoding format, you have to write a decoder and add it here." ) (COND ((\XCCSP ST) (\XCCSIN ST SHIFTEDCSET SHIFTEDCSETVAR COUNTERVAR)) (T (COND ((QUOTE COUNTERVAR) (CL:MULTIPLE-VALUE-BIND (CODE NUM) (CL:FUNCALL (ffetch (STREAM INCCODEFN) of ST) ST T) (AND NUM (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR NUM))) CODE)) (T (CL:FUNCALL (ffetch (STREAM INCCODEFN) of ST) ST NIL))))))) (PUTPROPS \NSPEEK MACRO ((ST SHIFTEDCSET SHIFTEDCSETVAR NOERROR COUNTERVAR) (* ;;; "Dispatches to the appropriate character code decoder. If you want to support a new character encoding format, you have to write a decoder and add it here." ) (COND ((\XCCSP ST) (\XCCSPEEK ST (UNFOLD (ACCESS-CHARSET ST) 256) NIL NOERROR)) (T (COND ((QUOTE COUNTERVAR) (CL:MULTIPLE-VALUE-BIND (CODE NUM) (CL:FUNCALL (ffetch (STREAM PEEKCCODEFN) of ST) ST NOERROR T) (AND NUM (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR NUM))) CODE)) (T (CL:FUNCALL (ffetch ( STREAM PEEKCCODEFN) of ST) ST NOERROR NIL))))))) (PUTPROPS NUMERIC-CHARSET MACRO (= . ACCESS-CHARSET)) (PUTPROPS \CONV.JIS.TO.XCCS MACRO (OPENLAMBDA (KU TEN) (* ;;; "Some character code is not equivalent between JIS and XCCS. In such case, we have to convert the character to corresponding XCCS." ) (COND ((\NOT.EQUIVALENT.TO.XCCS KU) (\DO.CONV.JIS.TO.XCCS KU TEN)) (T (LOGOR (UNFOLD KU 256) TEN)))) ) (PUTPROPS \DO.CONV.JIS.TO.XCCS MACRO ((KU TEN) (* ;;; " Convert a JIS code divided into KU (high 8 bit) and TEN (low 8 bit) to an corresponding XCCS code.") (COND ((\INVALID.TENP TEN) *DEFAULT-NOT-CONVERTED-FAT-CODE*) (T (SELECTQ KU ((33 34 38) (* ; "1, 2 and 6 KU") (LET* ((CONVTABLE (\EXTARACT.CONV.TABLE KU)) (SET (\EXTRACT.SET TEN CONVTABLE)) (CODE (\EXTRACT.CODE TEN CONVTABLE))) (COND ((NEQ SET 255) (LOGOR (UNFOLD SET 256) CODE)) (T (COND ((EQ CODE 255) (* ; "Not defined in JIS.") *DEFAULT-NOT-CONVERTED-FAT-CODE*) (T (* ; "Defined in JIS but the displayable font is not assigned in the corresponding code in XCCS.") (COND ( *REPLACE-NO-FONT-CODE* *DEFAULT-NOT-CONVERTED-FAT-CODE*) (T (\EXTRACT.NO.FONT.CODE (LOGOR (UNFOLD KU 256) TEN)))))))))) (35 (* ; "3 KU") (* ; "Alpha numeric codes are all defined as single byte codes in XCCS.") TEN) (40 (* ; "8 KU") (COND ((< 0 TEN 33) (COND (*REPLACE-NO-FONT-CODE* *DEFAULT-NOT-CONVERTED-FAT-CODE*) (T (\EXTRACT.NO.FONT.CODE ( LOGOR KU TEN))))) (T *DEFAULT-NOT-CONVERTED-FAT-CODE*))) (116 (* ; "84 KU") (COND ((< 0 TEN 5) (LOGOR 29952 TEN)) (T *DEFAULT-NOT-CONVERTED-FAT-CODE*))) (117 (* ; "85 KU") (COND ((< 0 TEN 28) (LOGOR 29696 TEN)) (T *DEFAULT-NOT-CONVERTED-FAT-CODE*))) *DEFAULT-NOT-CONVERTED-FAT-CODE*))))) (PUTPROPS \CONV.XCCS.TO.JIS MACRO (OPENLAMBDA (OUTSTREAM CC) (* ;;; "Returns JIS code corresponding to XCCS charcode. Handle HANKAKU as well as ZENKAKU. If OUTSTREAM wants to convert ZENKAKUKANA to HANKAKUKANA, do so. Never returns two byte charcode for alpha-numeric character, they are all treated as single byte characode." ) (OR (COND ((\ASCIIP CC) CC) ((\NOT.EQUIVALENT.TO.JIS CC) (\DO.CONV.XCCS.TO.JIS CC)) (( \CONV.HANKAKU.TO.ZENKAKUP OUTSTREAM) (* ; "ZENKAKUKANA comes here, because their charcodes are equiavalent to JIS.") (\CONV.ZENKAKU.KANA CC)) (T CC)) CC))) (PUTPROPS \DO.CONV.XCCS.TO.JIS MACRO ((CC) (GETHASH CC *XCCS-TO-JIS-CONV-TABLE*))) (PUTPROPS \ASCIIP MACRO (OPENLAMBDA (CC) (AND (EQ (FOLDLO CC 256) 0) (< (LOGAND CC 255) 128)))) (PUTPROPS \NOT.EQUIVALENT.TO.JIS MACRO (OPENLAMBDA (CC) (OR (EQ (FOLDLO CC 256) 0) (EQ (FOLDLO CC 256) 33) (EQ (FOLDLO CC 256) 34) (EQ (FOLDLO CC 256) 38) (EQ (FOLDLO CC 256) 40) (EQ (FOLDLO CC 256) 239) (EQ (FOLDLO CC 256) 241)))) (PUTPROPS \CONV.HANKAKU.TO.ZENKAKUP MACRO ((OUTSTREAM) (STREAMPROP OUTSTREAM :HTOZP))) (PUTPROPS \CONV.ZENKAKU.KANA MACRO ((CHAR) (GETHASH CHAR *ZENKAKU-TO-HANKAKU-CONV-TABLE*))) (PUTPROPS \XCCSIN MACRO ((STREAM SHIFTEDCSET SHIFTEDCSETVAR COUNTERVAR) (* ;;; "returns a 16 bit character code. SHIFTEDCSET is STREAM's char set left shifted 8, SHIFTEDCSETVAR if non-NIL is the variable to set if char set changes. COUNTERVAR if non-NIL is decremented by number of bytes read. Doesn't do EOL conversion -- \INCHAR and \INCCODE do that." ) (LET ((CHAR (\BIN STREAM)) SCSET) (COND ((EQ CHAR NSCHARSETSHIFT) (* ; "Shifting character sets") ( ACCESS-CHARSET STREAM (SETQ SCSET (COND ((NEQ NSCHARSETSHIFT (SETQ CHAR (\BIN STREAM))) (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 2))) CHAR) ((PROGN (* ; "2 shift-bytes means not run-encoded") (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 3))) (EQ 0 (\BIN STREAM))) \NORUNCODE) (T (\NSIN.24BITENCODING.ERROR STREAM))))) (SETQ CHAR (\BIN STREAM)) (SETQ SCSET (COND ((QUOTE SHIFTEDCSETVAR) (* ; "CHARSETVAR=NIL means don't set") (SETQ SHIFTEDCSETVAR (UNFOLD SCSET 256))) (T (UNFOLD SCSET 256))))) (T (SETQ SCSET SHIFTEDCSET))) (COND (( EQ SCSET (UNFOLD \NORUNCODE 256)) (* ; "just read two bytes and combine them to a 16 bit value") (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 2))) (LOGOR (UNFOLD CHAR 256) (\BIN STREAM ))) (CHAR (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 1))) (AND CHAR (LOGOR SCSET CHAR))))))) (PUTPROPS \XCCSPEEK MACRO ((STREAM SHIFTEDCSET SHIFTEDCSETVAR NOERROR COUNTERVAR) (* ;; "Returns a 16 bit character code. Doesn't do EOL conversion--\INCHAR does that. May actually read the character-set shift, storing the result in the stream. COUNTERVAR, if given, is updated to reflect any such bytes that are actually read" ) (PROG ((CHAR (\PEEKBIN STREAM NOERROR)) SCSET) (COND ((NULL CHAR) (RETURN NIL)) ((EQ CHAR NSCHARSETSHIFT) (* ; "CHARSETVAR=NIL means don't set") (\BIN STREAM) (* ; "Consume the char shift byte") (ACCESS-CHARSET STREAM (SETQ SCSET (COND ((NEQ NSCHARSETSHIFT (SETQ CHAR (\BIN STREAM))) (* ; "Note: no eof error check on this \BIN -- an eof in the middle of a charset shift is an error") (AND ( QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 2))) CHAR) ((PROGN (* ; "2 shift-bytes means not run-encoded") (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 3))) (EQ 0 (\BIN STREAM))) \NORUNCODE) (T (\NSIN.24BITENCODING.ERROR STREAM))))) (SETQ SCSET (COND ((QUOTE SHIFTEDCSETVAR) (* ; "CHARSETVAR=NIL means don't set") (SETQ SHIFTEDCSETVAR ( UNFOLD SCSET 256))) (T (UNFOLD SCSET 256)))) (COND ((NULL (SETQ CHAR (\PEEKBIN STREAM NOERROR))) ( RETURN NIL)))) (T (SETQ SCSET SHIFTEDCSET))) (RETURN (COND ((EQ SCSET (UNFOLD \NORUNCODE 256)) (* ;; "just peek two bytes and combine them to a 16 bit value. Again, is an error if we hit eof in mid-character" ) (\BIN STREAM) (PROG1 (LOGOR (UNFOLD CHAR 256) (\PEEKBIN STREAM NOERROR)) (\BACKFILEPTR STREAM))) (T (LOGOR SHIFTEDCSET CHAR))))))) (PUTPROPS \BACKXCCSCHAR MACRO ((STREAM SHIFTEDCHARSET COUNTERVAR) (AND (\BACKFILEPTR STREAM) (COND (( COND (SHIFTEDCHARSET (EQ SHIFTEDCHARSET (UNFOLD \NORUNCODE 256))) (T (EQ \NORUNCODE (ACCESS-CHARSET STREAM)))) (COND ((\BACKFILEPTR STREAM) (AND (QUOTE COUNTERVAR) (add COUNTERVAR 2)) T) ((QUOTE COUNTERVAR) (add COUNTERVAR 1)))) ((QUOTE COUNTERVAR) (add COUNTERVAR 1)))))) (PUTPROPS \XCCSP MACRO (OPENLAMBDA (ST) (NOT (ffetch (STREAM NOTXCCS) of (\DTEST ST (QUOTE STREAM))))) ) (PUTPROPS \EXTRACT.NO.FONT.CODE MACRO ((JISCODE) (CDR (ASSOC JISCODE *JIS-TO-XCCS-CONV-NO-FONT-TABLE*) ))) (PUTPROPS \EXTARACT.CONV.TABLE MACRO ((KU) (CDR (ASSOC KU *JIS-TO-XCCS-CONV-TABLE-LIST*)))) (PUTPROPS \NOT.EQUIVALENT.TO.XCCS MACRO ((KU) (* ;;; " The JIS codes which are not equiavelent to XCCS reside in 1, 2, 3, 6, 8 and 84 KU. Although from 84-5 to 94-94 inclusive are not defined in JIS, that is they are GAIJI, they are also handled here." ) (OR (EQ KU 33) (EQ KU 34) (EQ KU 35) (EQ KU 38) (EQ KU 40) (EQ KU 116) (EQ KU 117)))) (PUTPROPS \EXTRACT.SET MACRO ((TEN TABLE) (ELT TABLE (IDIFFERENCE (UNFOLD (IDIFFERENCE TEN 32) 2) 1))) ) (PUTPROPS \EXTRACT.CODE MACRO ((TEN TABLE) (ELT TABLE (UNFOLD (IDIFFERENCE TEN 32) 2)))) (PUTPROPS \CHNAGE.KI.MODE MACRO (OPENLAMBDA (ST INPUTFLG ENTERP) (* ;;; "INPUTFLG is true if \CHNAGE.KI.MODE is called in the context in which ST is an input stream.") (COND (INPUTFLG (COND (ENTERP (freplace (STREAM IN.KANJIIN) of (\DTEST ST (QUOTE STREAM)) with T)) (T ( freplace (STREAM IN.KANJIIN) of (\DTEST ST (QUOTE STREAM)) with NIL)))) (T (COND (ENTERP (freplace ( STREAM OUT.KANJIIN) of (\DTEST ST (QUOTE STREAM)) with T)) (T (freplace (STREAM OUT.KANJIIN) of ( \DTEST ST (QUOTE STREAM)) with NIL))))))) (PUTPROPS \KIMODEP MACRO (OPENLAMBDA (ST INPUTFLG) (* ;;; "INPUTFLG is true if \KIMODEP is called in the context in which ST is an input stream.") (COND ( INPUTFLG (ffetch (STREAM IN.KANJIIN) of (\DTEST ST (QUOTE STREAM)))) (T (ffetch (STREAM OUT.KANJIIN) of (\DTEST ST (QUOTE STREAM))))))) (PUTPROPS \HANKAKUP MACRO ((CHAR) (< 160 CHAR 224))) (PUTPROPS \KANJIP MACRO ((CHAR) (< 12158 CHAR 29733))) (PUTPROPS \NOTGAIJIP MACRO ((CHAR) (OR (< 8480 CHAR 10305) (< 12158 CHAR 29733)))) (PUTPROPS \INVALID.TENP MACRO (OPENLAMBDA (TEN) (OR (< TEN 33) (< 126 TEN)))) (PUTPROPS \CONV.HANKAKU.KANA MACRO ((CHAR) (GETHASH CHAR *HANKAKU-TO-ZENKAKU-CONV-TABLE*))) (PUTPROPS \OUTKI MACRO ((STREAM) (\BOUT OUTSTREAM (CHARCODE ESC)) (\BOUT OUTSTREAM (CHARCODE $)) ( \BOUT OUTSTREAM (CHARCODE B)))) (PUTPROPS \OUTKO MACRO ((STREAM) (\BOUT OUTSTREAM (CHARCODE ESC)) (\BOUT OUTSTREAM (CHARCODE %()) ( \BOUT OUTSTREAM (CHARCODE J)))) (PUTPROPS \CONV.SJIS.TO.JIS MACRO (OPENLAMBDA (HI LO) (* ;;; "Convert Shift-JIS to JIS. The variable named CH1 and CH2 are set to the converted hight 8 bit and low 8bit of JIS code respectively." ) (SETQ CH1 (IDIFFERENCE HI (COND ((> HI 159) 177) (T 113)))) (SETQ CH1 (IPLUS (UNFOLD CH1 2) 1)) ( SETQ CH2 (COND ((> LO 158) (PROG1 (IDIFFERENCE LO 126) (SETQ CH1 (IPLUS CH1 1)))) (T (IDIFFERENCE LO ( COND ((> LO 126) (IPLUS 31 1)) (T 31)))))))) (PUTPROPS \CONV.JIS.TO.SJIS MACRO (OPENLAMBDA (HI LO) (* ;;; "Convert JIS to Shift-JIS. The variable named CH1 and CH2 are set to the converted hight 8 bit and low 8bit of Shift-JIS code respectively." ) (SETQ CH2 (COND ((ODDP HI) (SETQ CH2 (IPLUS LO 31)) (COND ((>= CH2 127) (IPLUS CH2 1)) (T CH2))) (T (IPLUS LO 126)))) (SETQ CH1 (IPLUS (FOLDLO (IDIFFERENCE HI 33) 2) 129)) (AND (> CH1 159) (SETQ CH1 ( IPLUS CH1 64))))) (PUTPROPS \SJIS.KANJI.FIRST.BYTEP MACRO (OPENLAMBDA (CHAR) (OR (< 127 CHAR 160) (< 223 CHAR 256)))) (PUTPROPS \EUC.KANJI.FIRST.BYTEP MACRO ((CHAR) (< 160 CHAR 255))) (PUTPROPS \GAIJIP MACRO ((CHAR) (EQ CHAR 143))) (PUTPROPS \EUC.HANKAKUP MACRO ((CHAR) (EQ CHAR 142))) (PUTPROP (QUOTE LLREAD) (QUOTE IMPORTDATE) (IDATE " 4-Aug-93 14:43:07")) (PUTPROPS EMPASSWORDLOC DMACRO (LAMBDA NIL (* lmm "24-MAR-83 06:46") (fetch (IFPAGE UserPswdAddr) of \InterfacePage))) (PUTPROPS \DECRYPT.PWD.CHAR MACRO ((CHAR) (LOGXOR CHAR 73))) (PUTPROP (QUOTE PASSWORDS) (QUOTE IMPORTDATE) (IDATE "16-May-90 21:02:21")) (RPAQQ MICASPERINCH 2540) (RPAQQ MICASPERMILLIMETER 100) (CONSTANTS (MICASPERINCH 2540) (MICASPERMILLIMETER 100)) (PUTPROP (QUOTE INTERPRESS) (QUOTE IMPORTDATE) (IDATE "16-Apr-2018 21:56:38")) (RPAQ MICASPERPT (FQUOTIENT 2540 72)) (RPAQQ IHALFMICASPERPT 17) (RPAQQ IMICASPERPT 35) (CONSTANTS (MICASPERPT (FQUOTIENT 2540 72)) (IHALFMICASPERPT 17) (IMICASPERPT 35)) (DEFMACRO \MICASTOPTS (MICAS) (COND ((NUMBERP MICAS) (QUOTIENT MICAS MICASPERPT)) (T (BQUOTE (QUOTIENT (\, MICAS) MICASPERPT))))) (PUTPROP (QUOTE HARDCOPY) (QUOTE IMPORTDATE) (IDATE "16-Apr-2018 22:15:08")) (FILESLOAD (SYSLOAD FROM VALUEOF DIRECTORIES) CMLARRAY-SUPPORT) (PUTPROP (QUOTE CMLARRAY) (QUOTE IMPORTDATE) (IDATE " 6-Jan-93 12:21:21")) (RPAQQ \MISCN-TABLE-LIST ((USER-SUBR 0 \USER-SUBR-UFN T) (CL:VALUES 1 CL::VALUES-UFN NIL) (CL:SXHASH 2 CL::SXHASH-UFN NIL) (CL::EQLHASHBITSFN 3 CL::EQLHASHBITSFN-UFN NIL) (STRINGHASHBITS 4 \STRINGHASHBITS-UFN NIL) (STRING-EQUAL-HASHBITS 5 \STRING-EQUAL-HASHBITS-UFN NIL) (CL:VALUES-LIST 6 CL::VALUES-LIST-UFN NIL) (LCFetchMethod 7 LCFetchMethod NIL) (LCFetchMethodOrHelp 8 NIL NIL) ( LCFindVarIndex 9 NIL NIL) (LCGetIVValue 10 NIL NIL) (LCPutIVValue 11 NIL NIL))) (RPAQQ \USER-SUBR-LIST ((DUMMY 10 DUMMY-UFN) (SAMPLE-USER-SUBR 0 SAMPLE-USER-SUBR-UFN))) (RPAQQ \INITSUBRS ((BACKGROUNDSUBR 6) (CHECKBCPLPASSWORD 7) (DISKPARTITION 8) (DSPBOUT 9) (DSPRATE 10) (GATHERSTATS 11) (GETPACKETBUFFER 12) (LISPFINISH 13) (MOREVMEMFILE 14) (RAID 15) (READRAWPBI 16) ( WRITERAWPBI 17) (SETSCREENCOLOR 18) (SHOWDISPLAY 19) (PUPLEVEL1STATE 20) (WRITESTATS 21) ( CONTEXTSWITCH 22) (COPYSYS0SUBR 23) (WRITEMAP 24) (UFS-GETFILENAME 34) (UFS-DELETEFILE 35) ( UFS-RENAMEFILE 36) (COM-READPAGES 37) (COM-WRITEPAGES 38) (COM-TRUNCATEFILE 39) (UFS-DIRECTORYNAMEP 41 ) (COM-GETFREEBLOCK 45) (SETUNIXTIME 48) (GETUNIXTIME 49) (COPYTIMESTATS 50) (UNIX-USERNAME 51) ( UNIX-FULLNAME 52) (UNIX-GETENV 53) (UNIX-GETPARM 54) (CHECK-SUM 55) (ETHER-SUSPEND 56) (ETHER-RESUME 57) (ETHER-AVAILABLE 58) (ETHER-RESET 59) (ETHER-GET 60) (ETHER-SEND 61) (ETHER-SETFILTER 62) ( ETHER-CHECK 63) (DSPCURSOR 64) (SETMOUSEXY 65) (DSP-VIDEOCOLOR 66) (DSP-SCREENWIDTH 67) ( DSP-SCREENHEIGHT 68) (BITBLTSUB 69) (BLTCHAR 70) (TEDIT.BLTCHAR 71) (BITBLT.BITMAP 72) ( BLTSHADE.BITMAP 73) (RS232C-CMD 74) (RS232C-READ-INIT 75) (RS232C-WRITE 76) (KEYBOARDBEEP 80) ( KEYBOARDMAP 81) (KEYBOARDSTATE 82) (VMEMSAVE 89) (LISP-FINISH 90) (NEWPAGE 91) (DORECLAIM 92) ( DUMMY-135Q 93) (NATIVE-MEMORY-REFERENCE 94) (OLD-COMPILE-LOAD-NATIVE 95) (DISABLEGC 96) ( COM-SETFILEINFO 103) (COM-OPENFILE 104) (COM-CLOSEFILE 105) (DSK-GETFILENAME 106) (DSK-DELETEFILE 107) (DSK-RENAMEFILE 108) (COM-NEXT-FILE 110) (COM-FINISH-FINFO 111) (COM-GEN-FILES 112) ( DSK-DIRECTORYNAMEP 113) (COM-GETFILEINFO 114) (COM-CHANGEDIR 116) (UNIX-HANDLECOMM 117) (RPC-CALL 119) (MESSAGE-READP 120) (MESSAGE-READ 121) (MONITOR-CONTROL 128) (GET-NATIVE-ADDR-FROM-LISP-PTR 131) ( GET-LISP-PTR-FROM-NATIVE-ADDR 132) (LOAD-NATIVE-FILE 133) (SUSPEND-LISP 134) (NEW-BLTCHAR 135) ( COLOR-INIT 136) (COLOR-SCREENMODE 137) (COLOR-MAP 138) (COLOR-BASE 139) (C-SlowBltChar 140) ( UNCOLORIZE-BITMAP 141) (COLORIZE-BITMAP 142) (COLOR-8BPPDRAWLINE 143) (TCP-OP 144) (WITH-SYMBOL 145) ( CAUSE-INTERRUPT 146) (OPEN-SOCKET 160) (CLOSE-SOCKET 161) (READ-SOCKET 162) (WRITE-SOCKET 163) ( CALL-C-FUNCTION 167) (DLD-LINK 168) (DLD-UNLINK-BY-FILE 169) (DLD-UNLINK-BY-SYMBOL 170) ( DLD-GET-SYMBOL 171) (DLD-GET-FUNC 172) (DLD-FUNCTION-EXECUTABLE-P 173) (DLD-LIST-UNDEFINED-SYMBOLS 174 ) (C-MALLOC 175) (C-FREE 176) (C-PUTBASEBYTE 177) (C-GETBASEBYTE 178) (CHAR-OPENFILE 200) (CHAR-BIN 201) (CHAR-BOUT 202) (CHAR-IOCTL 203) (CHAR-CLOSEFILE 204) (CHAR-EOFP 205) (CHAR-READP 206) (CHAR-BINS 207) (CHAR-BOUTS 208) (CHAR-FILLBUFFER 209))) (PUTPROP (QUOTE LLSUBRS) (QUOTE IMPORTDATE) (IDATE "17-Dec-92 14:28:41")) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP") (LISPXPRIN1 "EXPORTS GATHERED FROM {DSK}larry>ilisp>medley>sources> ON 16-Jan-2021 22:50:43" T) (LISPXTERPRI T) (PUTPROP (QUOTE FILESETS) (QUOTE IMPORTDATE) (IDATE "29-Jan-1998 16:26:53")) (RPAQQ MODARITHMACROS (CEIL FLOOR FOLDHI FOLDLO MODUP UNFOLD MOD)) (PUTPROPS CEIL MACRO ((X N) (FLOOR (IPLUS X (CONSTANT (SUB1 N))) N))) (PUTPROPS FLOOR MACRO ((X N) (LOGAND X (CONSTANT (LOGXOR (SUB1 N) -1))))) (PUTPROPS FOLDHI MACRO (X (PROG ((FORM (CAR X)) (DIVISOR (CAR (CONSTANTEXPRESSIONP (CADR X))))) (OR ( AND DIVISOR (POWEROFTWOP DIVISOR)) (\\ILLEGAL.ARG (CADR X))) (RETURN (LIST (QUOTE LRSH) (LIST (QUOTE IPLUS) FORM (SUB1 DIVISOR)) (SUB1 (INTEGERLENGTH DIVISOR))))))) (PUTPROPS FOLDLO MACRO (X (PROG ((FORM (CAR X)) (DIVISOR (CAR (CONSTANTEXPRESSIONP (CADR X))))) (OR ( AND DIVISOR (POWEROFTWOP DIVISOR)) (\\ILLEGAL.ARG (CADR X))) (RETURN (LIST (QUOTE LRSH) FORM (SUB1 ( INTEGERLENGTH DIVISOR))))))) (PUTPROPS MODUP MACRO (OPENLAMBDA (X N) (IDIFFERENCE (SUB1 N) (IMOD (SUB1 X) N)))) (PUTPROPS UNFOLD MACRO (X (PROG ((FORM (CAR X)) (DIVISOR (CAR (CONSTANTEXPRESSIONP (CADR X))))) (OR ( AND DIVISOR (POWEROFTWOP DIVISOR)) (\\ILLEGAL.ARG (CADR X))) (RETURN (LIST (QUOTE LLSH) FORM (SUB1 ( INTEGERLENGTH DIVISOR))))))) (PUTPROPS MOD MACRO (= . IMOD)) (RPAQQ BITSPERNIBBLE 4) (RPAQQ NIBBLESPERBYTE 2) (RPAQQ BITSPERBYTE 8) (RPAQQ BITSPERCELL 32) (RPAQQ BITSPERWORD 16) (RPAQQ BYTESPERCELL 4) (RPAQQ BYTESPERPAGE 512) (RPAQQ BYTESPERWORD 2) (RPAQQ CELLSPERPAGE 128) (RPAQQ CELLSPERSEGMENT 32768) (RPAQQ PAGESPERSEGMENT 256) (RPAQQ WORDSPERCELL 2) (RPAQQ WORDSPERPAGE 256) (RPAQQ WORDSPERSEGMENT 65536) (RPAQQ WORDSPERQUAD 4) (RPAQQ CELLSPERQUAD 2) (RPAQQ BYTESPERQUAD 8) (CONSTANTS BITSPERNIBBLE NIBBLESPERBYTE BITSPERBYTE BITSPERCELL BITSPERWORD BYTESPERCELL BYTESPERPAGE BYTESPERWORD CELLSPERPAGE CELLSPERSEGMENT PAGESPERSEGMENT WORDSPERCELL WORDSPERPAGE WORDSPERSEGMENT WORDSPERQUAD CELLSPERQUAD BYTESPERQUAD) (RPAQQ INTEGERSIZECONSTANTS ((BITS.PER.SMALLP (ADD1 BITSPERWORD)) (SMALLP.LENGTH (SUB1 BITS.PER.SMALLP )) (MAX.SMALLP (LOGOR (LSH 1 (SUB1 SMALLP.LENGTH)) (SUB1 (LSH 1 (SUB1 SMALLP.LENGTH))))) (MIN.SMALLP ( IDIFFERENCE -1 MAX.SMALLP)) (BITS.PER.FIXP BITSPERCELL) (FIXP.LENGTH (SUB1 BITS.PER.FIXP)) (MAX.FIXP ( LOGOR (LSH 1 (SUB1 FIXP.LENGTH)) (SUB1 (LSH 1 (SUB1 FIXP.LENGTH))))) (MIN.FIXP (IDIFFERENCE -1 MAX.FIXP)))) (RPAQ BITS.PER.SMALLP (ADD1 BITSPERWORD)) (RPAQ SMALLP.LENGTH (SUB1 BITS.PER.SMALLP)) (RPAQ MAX.SMALLP (LOGOR (LSH 1 (SUB1 SMALLP.LENGTH)) (SUB1 (LSH 1 (SUB1 SMALLP.LENGTH))))) (RPAQ MIN.SMALLP (IDIFFERENCE -1 MAX.SMALLP)) (RPAQ BITS.PER.FIXP BITSPERCELL) (RPAQ FIXP.LENGTH (SUB1 BITS.PER.FIXP)) (RPAQ MAX.FIXP (LOGOR (LSH 1 (SUB1 FIXP.LENGTH)) (SUB1 (LSH 1 (SUB1 FIXP.LENGTH))))) (RPAQ MIN.FIXP (IDIFFERENCE -1 MAX.FIXP)) (CONSTANTS (BITS.PER.SMALLP (ADD1 BITSPERWORD)) (SMALLP.LENGTH (SUB1 BITS.PER.SMALLP)) (MAX.SMALLP ( LOGOR (LSH 1 (SUB1 SMALLP.LENGTH)) (SUB1 (LSH 1 (SUB1 SMALLP.LENGTH))))) (MIN.SMALLP (IDIFFERENCE -1 MAX.SMALLP)) (BITS.PER.FIXP BITSPERCELL) (FIXP.LENGTH (SUB1 BITS.PER.FIXP)) (MAX.FIXP (LOGOR (LSH 1 ( SUB1 FIXP.LENGTH)) (SUB1 (LSH 1 (SUB1 FIXP.LENGTH))))) (MIN.FIXP (IDIFFERENCE -1 MAX.FIXP))) (PUTPROP (QUOTE MODARITH) (QUOTE IMPORTDATE) (IDATE "16-May-1990 20:46:21")) (RPAQQ WINDFLG T) (CONSTANTS (WINDFLG T)) (RPAQQ INITCONSTANTS ((* |;;;| "(LISPNAME VALUE BCPLNAME UCODENAME)") (CDRCODING 1 T T) (* \; "IF CDRCODING=0, CDR CODING IS OFF, OTHERWISE ON") (* |;;| "type numbers -- repeated on LLBASIC too") (\\SMALLP 1 SMALLTYPE |SmallType|) (\\FIXP 2 INTEGERTYPE |FixpType|) (\\FLOATP 3 FLTPTTYPE |FloatpType|) (\\LITATOM 4 ATOMTYPE |AtomType|) (\\LISTP 5 LISTTYPE |ListType|) (\\ARRAYP 6 ARRAYPTRTYPE |ArrayType|) (\\STRINGP 7 STRINGPTRTYPE) (\\STACKP 8) (\\CHARACTERP 9) (\\VMEMPAGEP 10 NIL |VMemPagePType|) (\\STREAM 11 NIL STREAMTYPE) (* |;;| "TYPE TABLE CONSTANTS - - - - - - - - - - - - - - - - - - - - - -") (\\TT.TYPEMASK 2047 |TTTypeMask| T ) (\\TT.NOREF 32768 NIL T) (\\TT.SYMBOLP 16384 NIL T) (\\TT.FIXP 8192) (\\TT.NUMBERP 4096) (\\TT.ATOM 2048) (* |;;| "page map - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") (|\\PMblockSize| 32 PMBLOCKSIZE) (|\\STATSsize| 8 T) (|\\NumPMTpages| 8) (|\\EmptyPMTEntry| 65535 T) ( |\\FirstVmemBlock| 2 T) (\\MAXVMPAGE 131069) (\\MAXVMSEGMENT 255) (* |;;| "interface page") ( |\\IFPValidKey| 5603 T) (* |;;| "MDS") (|\\FirstMDSPage| 16382) (|\\MaxMDSPage| 524285) ( |\\DefaultSecondMDSPage| 65532) (|\\MDSIncrement| 512) (|\\PagesPerMDSUnit| 2) (* \; "(FOLDLO \\MDSIncrement WORDSPERPAGE)") (* |;;| "arrays") (\\ARRAYSPACE (46 0)) (|\\FirstArraySegment| 46) (|\\FirstArrayPage| 11776) (\\ARRAYSPACE2 (64 0)) (|\\DefaultSecondArrayPage| 16384) (* |;;| "stack block constants") (|\\StackMask| 57344 T T) (|\\FxtnBlock| 49152 T T) (|\\GuardBlock| 57344 T T ) (|\\BFBlock| 32768 T T) (|\\FreeStackBlock| 40960 T T) (|\\NotStackBlock| 0) (* \; "none of the above") (|\\MinExtraStackWords| 32 T T) (* |;;| "backspace kludge") (ERASECHARCODE 0 T) ( * |;;| "GC constants") (\\HT1CNT 1024 NIL T) (\\HTSTKBIT 512 NIL T) (\\HTCNTMASK 64512 NIL T) ( \\HTMAINSIZE 65536 NIL T) (\\HTCOLLSIZE 1048576 NIL T) (* \; "HTCOLL size in words") (\\HTENDFREE 1 NIL T) (\\HTFREEPTR 0 NIL T) (* |;;| "pointers and lengths of various data spaces") (\\ATOMSPACE (0 0) (|ATOMspace| NIL) (|atomHiVal| NIL)) (|\\AtomHI| 0) (\\CHARHI 7) (* \; "overlap character space and the atom hash table space") (|\\AtomHashTable| (21 0) (|AHTspace| |AHTbase|)) (|\\AtomHTpages| 256 AHTSIZE) (|\\LastAtomPage| 255) (|\\MaxAtomFrLst| 65535) ( \\SMALLPOSPSPACE (14 0)) (|\\SmallPosHi| 14 |SMALLPOSspace| |smallpl|) (\\SMALLNEGSPACE (15 0)) ( |\\SmallNegHi| 15 |SMALLNEGspace| |smallneg|) (|\\NumSmallPages| 512) (* |;;| "PNAME SPACEin the old world; used for initial atoms now.") (\\PNPSPACE (8 0) (|PNPspace| |PNPbase|)) (\\PNAME.HI 8) (\\OLDATOMSPACE (44 0)) (* \; "NEW ATOM SPACE") (\\ATOM.HI 44) (* \; "HI PART OF NEW ATOM SPACE") (* |;;| "Definitions in old atom world") (\\DEFSPACE (10 0) (|DEFspace| |DEFbase|) (|DEFspace| |DEFbase|)) (\\DEF.HI 10) (\\VALSPACE (12 0) (|TOPVALspace| |TOPVALbase|) ( |VALspace| |VALbase|)) (\\VAL.HI 12) (\\PLISTSPACE (2 0) (|PLISTspace| |PLISTbase|)) (\\PLIST.HI 2) ( \\PAGEMAP (5 0) (|PAGEMAPspace| |PAGEMAPbase|)) (|\\NumPageMapPages| 256) (|\\PageMapTBL| (20 512) ( |PMTspace| |PMTbase|)) (|\\InterfacePage| (20 0) (|INTERFACEspace| |INTERFACEbase|) (|INTERFACEspace| |INTERFACEbase|)) (\\IOPAGE (0 65280)) (|\\DoveIORegion| (0 16384)) (\\IOCBPAGE (0 256)) (\\FPTOVP (2 0)) (|\\MDSTypeTable| (24 0) (|MDSTYPEspace| |MDSTYPEbase|) (|MDSTYPEspace| |MDSTYPEbase|)) ( |\\MDSTTsize| 1024 T) (* \; "in Pages") (\\MISCSTATS (20 2560) (|STATSspace| |MISCSTATSbase|)) ( |\\UFNTable| (20 3072) NIL (|STATSspace| |UFNTablebase|)) (|\\UFNTableSize| 2) (|\\DTDSpaceBase| (20 4096) (|DTDspace| |DTDbase|) (|DTDspace| |DTDbase|)) (|\\DTDSize| 18 T) (\\LISTPDTD (20 4186)) ( |\\EndTypeNumber| 2047) (\\LOCKEDPAGETABLE (20 28672)) (|\\NumLPTPages| 16) (\\STACKSPACE (1 0) ( |STACKspace| NIL) (|STACKspace| NIL)) (|\\GuardStackAddr| 61440) (|\\LastStackAddr| 65534) (\\STACKHI 1 T T) (\\HTMAIN (22 0) (|HTMAINspace| |HTMAINbase|) (|HTMAINspace| |HTMAINbase|)) (|\\HTMAINnpages| 256 T) (\\HTOVERFLOW (23 0) NIL (NIL |HTOVERFLOWbase|)) (\\HTBIGCOUNT (23 32768)) (\\HTCOLL (28 0) NIL (|HTCOLLspace| |HTCOLLbase|)) (\\DISPLAYREGION (18 0)) (|\\D1BCPLspace| 0 T |LEmubrHiVal|) ( |\\D0BCPLspace| 0 T) (* |;;| "Interface Page locations") (|\\CurrentFXP| 0 T T) (|\\ResetFXP| 1 T T) ( |\\SubovFXP| 2 T T) (|\\KbdFXP| 3 T T) (|\\HardReturnFXP| 4 T T) (\\GCFXP 5) (\\FAULTFXP 6 T T) ( |\\MiscFXP| 14 T T) (|\\TeleRaidFXP| 24 T T) (* |;;| "emulator segment locations") (DCB.EM 272) ( DISPINTERRUPT.EM 273) (CURSORBITMAP.EM 281) (KBDAD0.EM 65052) (KBDAD1.EM 65053) (KBDAD2.EM 65054) ( KBDAD3.EM 65055) (UTILIN.EM 65048) (CURSORX.EM 278) (CURSORY.EM 279) (MOUSEX.EM 276) (MOUSEY.EM 277) ( |\\LispKeyMask| 8192 T T) (|\\BcplKeyMask| 4352 T T) (* \; "Machine types") (\\MAIKO 3) (\\DOLPHIN 4) (\\DORADO 5) (\\DANDELION 6) (\\DAYBREAK 8) (* |;;| "FOR DLION (AND DAYBREAK)") (\\VP.DISPLAY 4608) ( \\NP.DISPLAY 202) (* \; "for Dorado display 1024x808 pixels / (16 pixels/word x 256 words/page)") ( \\NP.WIDEDOVEDISPLAY 243) (* \; "Wide Dove display 1152x864 pixels") (\\WIDEDOVEDISPLAYWIDTH 1152) ( \\RP.AFTERDISPLAY 206) (* \; "Includes 4 pages for cursor") (\\RP.AFTERDOVEDISPLAY 243) (* \; "if big screen") (\\RP.DISPLAY 0) (\\RP.TEMPDISPLAY 2561) (\\RP.MISCLOCKED 2804) (* \; "(+ \\RP.TEMPDISPLAY \\NP.WIDEDOVEDISPLAY)") (\\RP.STACK 768) (\\VP.STACK 256) (\\RP.MAP 256) ( \\NP.MAP 256) (\\RP.IOPAGE 512) (* \; "The DOVE IOCBPAGE can go anywhere, but should be under the 1mbyte range") (\\RP.DOVEIOCBPAGE 543) ( \\RP.DOVEIORGN 544) (\\VP.DOVEIORGN 64) (\\DOVEIORGNSIZE 64) (\\VP.IOPAGE 255) (\\VP.IFPAGE 5120) ( \\VP.FPTOVP 512) (\\NP.FPTOVP 4096) (\\RP.FPTOVP 1024) (\\RP.STARTBUFFERS 640) (\\VP.TYPETABLE 6144) ( \\NP.TYPETABLE 1024) (\\RP.TYPETABLE 5120) (\\VP.GCTABLE 5632) (\\NP.GCTABLE 256) (\\RP.GCTABLE 6144) (\\VP.GCOVERFLOW 5888) (\\NP.GCOVERFLOW 1) (\\RP.GCOVERFLOW 6400) (\\FP.IFPAGE 2) (\\VP.IOCBS 1) ( \\VP.PRIMARYMAP 5122) (\\VP.SECONDARYMAP 1280) (\\VP.LPT 5232) (\\VP.INITSCRATCH 8) (\\VP.RPT 128) ( \\VP.BUFFERS 218) (* \; "DLion processor commands") (\\DL.PROCESSORBUSY 32768) (\\DL.SETTOD 32769) ( \\DL.READTOD 32770) (\\DL.READPID 32771) (\\DL.BOOTBUTTON 32772))) (RPAQQ MISCSTATSLAYOUT ((STARTTIME FIXP |MSstrtTime|) (TOTALTIME FIXP) (SWAPWAITTIME FIXP T) ( PAGEFAULTS FIXP T) (SWAPWRITES FIXP T) (DISKIOTIME FIXP T) (DISKOPS FIXP T) (KEYBOARDWAITTIME FIXP T) (GCTIME FIXP T) (NETIOTIME FIXP T) (NETIOOPS FIXP T) (SWAPTEMP0 FIXP) (SWAPTEMP1 FIXP) (RCLKSECOND FIXP) (SECONDSCLOCK FIXP) (MILLISECONDSCLOCK FIXP) (BASECLOCK FIXP) (RCLKTEMP0 FIXP) (SECONDSTMP FIXP) (MILLISECONDSTMP FIXP) (BASETMP FIXP) (EXCESSTIMETMP FIXP) (CLOCKTEMP0 FIXP) (DISKTEMP0 FIXP) ( DISKTEMP1 FIXP) (TELERAIDTEMP1 FIXP) (TELERAIDTEMP2 FIXP) (TELERAIDTEMP3 FIXP) (LASTUSERACTION FIXP) ( DLMOUSETIMER FIXP) (DLMOUSETEMP FIXP))) (RPAQQ IFPAGELAYOUT ((|CurrentFXP| WORD) (* \; "First 7 items are FX values for user and 6 system contexts.") (|ResetFXP| WORD) (|SubovFXP| WORD) ( |KbdFXP| WORD) (|HardReturnFXP| WORD) (GCFXP WORD) (FAULTFXP WORD) (|EndOfStack| WORD) (* \; "Stack high-water mark: address of guard block at current end of stack") (|LVersion| WORD) (* \; "Lisp version, followed by min versions of microcode and Bcpl compatible with this Lisp") ( |MinRVersion| WORD) (|MinBVersion| WORD) (|RVersion| WORD) (* \; "Bcpl fills in the actual microcode, Bcpl versions.") (|BVersion| WORD) (|MachineType| WORD) ( |MiscFXP| WORD) (* \; "FX for MISC context") (|Key| WORD) (* \; "= IFPValidKey if vmem consistent.") ( |SerialNumber| WORD) (* \; "Pup host number (Dorado/Dolphin)") (|EmulatorSpace| WORD) (* \; "Hiloc of bcpl space (always zero now)") (|ScreenWidth| WORD) (|NxtPMAddr| WORD) (* \; "Next page to be allocated in secondary page map table") (|NActivePages| WORD) (* \; "Length of vmem in use") (|NDirtyPages| WORD) (* \; "not used, but maintained as = NActivePages") ( |filePnPMP0| WORD) (* \; "Sysout page number of first page of secondary page map table (\\PAGEMAP), which is where the secondary map pages themselves live" ) (|filePnPMT0| WORD) (* \; "Sysout page number of first page of primary page map table") (TELERAIDFXP WORD) (* \; "FX for TeleRaid server context") (NATIVE-START-MEM-PAGE WORD) (* \; "Unix page where native code starts") (NATIVE-LENGTH-PAGE WORD) (* \; "Unix page length of native code") (NATIVE-PAGE-OFFSET WORD) (* \; "Lisp Disk Page offset of native code") (|UserNameAddr| WORD) (* \; "Addresses in bcpl space (seg 0) of global user name and password") (|UserPswdAddr| WORD) (|StackBase| WORD) (* \; "Stack address where user stack starts") (FAULTHI WORD) (* \; "Microcode for page fault stores fault address here, then does context switch to FAULTFXP") (FAULTLO WORD) (DEVCONFIG WORD) (* \; "IT'S FOR KB,DISP TYPE") (* \; "Formerly REALPAGETABLE, back when it was always in Bcpl space.") (RPTSIZE WORD) (* \; "Number of entries in Real Page Table") (RPOFFSET WORD) (* \; "RP-RPOFFSET => index in table") ( MAXETHERBYTES WORD) (* \; "Number of bytes available in a pbi, not counting encapsulation (Dorado)") ( EMBUFVP WORD) (* \; "VP of a one-page emulator buffer") (|NSHost0| WORD) (* \; "Machine's 48-bit NS host number. Lisp manages to compute this on all machines except Dolphin, where Bcpl fills it in." ) (|NSHost1| WORD) (|NSHost2| WORD) (|MDSZone| WORD) (* \; "Obsolete -- was used by Dolphin 10MB network code.") (|MDSZoneLength| WORD) (EMUBUFFERS WORD) (* \; "Buffer space in segment 0 for swapping/disk activity") (EMUBUFLENGTH WORD) (* \; "Number of words of said space") (LASTNUMCHARS WORD) (* \; "No longer used?") (SYSDISK WORD) (* \; "Address of sysDisk in Bcpl space -- disk obj for boot partition.") (ISFMAP WORD) (* |;;| "The following 4 are for \\MISCAPPLY* -- note that they are not ref counted, so don't pass the only pointer to something this way!" ) (MISCSTACKFN FULLXPOINTER) (MISCSTACKARG1 FULLXPOINTER) (MISCSTACKARG2 FULLXPOINTER) ( MISCSTACKRESULT FULLXPOINTER) (|NRealPages| WORD) (* \; "Number pages of real memory") ( |LastLockedFilePage| WORD) (* \; "Last page of vmem that is locked--booting has to load at least that far.") (|LastDominoFilePage| WORD ) (* \; "Last sysout page reserved for Dandelion microcode") (|FPTOVPStart| WORD) (* \; "Sysout page where FPTOVP starts") (FAKEMOUSEBITS WORD) (* \; "Used to implement fake middle button on 2-button Dandelion.") (|DL24BitAddressable| WORD) (* \; "non-zero if DLion capable of addressing 32MB virtual memory") (REALPAGETABLEPTR FULLXPOINTER) (* \; "Address of real page table, set up by Bcpl (but not chained together)") (|DLLastVmemPage| WORD) (* \; "DLion booting microcode puts length of vmem file here.") (|FullSpaceUsed| WORD) (* \; "Non-zero if vmem beyond initial 8MB has been allocated.") (FAKEKBDAD4 WORD) (FAKEKBDAD5 WORD) (* |;;| "The following 9 items (6 words and 3 pointers) are 3 3-element vectors for the Dorado extended virtual memory code--indexed by 0,1,2 according to which of up to 3 virtual memory backing files you're working with." ) (|XVmemFmapBase| WORD) (* \; "Bcpl stores isf map pointer to each partition here. First is redundant with ISFMAP field above.") ( NIL WORD) (NIL WORD) (|XVmemFmapHighBase| WORD) (* \; "Bcpl stores the highest vm page contained in this or earlier partition.") (NIL WORD) (NIL WORD) ( |XVmemDiskBase| FULLXPOINTER) (* \; "Lisp stores disk objects here (just a convenient non-faulting contiguous block of storage).") (NIL FULLXPOINTER) (NIL FULLXPOINTER))) (RPAQQ MAIKO.IFPAGELAYOUT ((|CurrentFXP| WORD) (* \; "First 7 items are FX values for user and 6 system contexts.") (|ResetFXP| WORD) (|SubovFXP| WORD) ( |KbdFXP| WORD) (|HardReturnFXP| WORD) (GCFXP WORD) (FAULTFXP WORD) (|EndOfStack| WORD) (* \; "Stack high-water mark: address of guard block at current end of stack") (|LVersion| WORD) (* \; "Lisp version, followed by min versions of microcode and Bcpl compatible with this Lisp") ( |MinRVersion| WORD) (|MinBVersion| WORD) (|RVersion| WORD) (* \; "Bcpl fills in the actual microcode, Bcpl versions.") (|BVersion| WORD) (|MachineType| WORD) ( |MiscFXP| WORD) (* \; "FX for MISC context") (|Key| WORD) (* \; "= IFPValidKey if vmem consistent.") ( |SerialNumber| WORD) (* \; "Pup host number (Dorado/Dolphin)") (|EmulatorSpace| WORD) (* \; "Hiloc of bcpl space (always zero now)") (|ScreenWidth| WORD) (|NxtPMAddr| WORD) (* \; "Next page to be allocated in secondary page map table") (NIL WORD) (* \; "WAS NActivePages, Length of vmem in use") (NIL WORD) (* \; "WAS NDirtyPages, not used, but maintained as = NActivePages") (|filePnPMP0| WORD) (* \; "Sysout page number of first page of secondary page map table (\\PAGEMAP), which is where the secondary map pages themselves live" ) (|filePnPMT0| WORD) (* \; "Sysout page number of first page of primary page map table") (TELERAIDFXP WORD) (* \; "FX for TeleRaid server context") (NATIVE-START-MEM-PAGE WORD) (* \; "Unix page where native code starts") (NATIVE-LENGTH-PAGE WORD) (* \; "Unix page length of native code") (NATIVE-PAGE-OFFSET WORD) (* \; "Lisp Disk Page offset of native code") (|UserNameAddr| WORD) (* \; "Addresses in bcpl space (seg 0) of global user name and password") (|UserPswdAddr| WORD) (|StackBase| WORD) (* \; "Stack address where user stack starts") (FAULTHI WORD) (* \; "Microcode for page fault stores fault address here, then does context switch to FAULTFXP") (FAULTLO WORD) (DEVCONFIG WORD) (* \; "IT'S FOR KB,DISP TYPE") (* \; "Formerly REALPAGETABLE, back when it was always in Bcpl space.") (RPTSIZE WORD) (* \; "Number of entries in Real Page Table") (RPOFFSET WORD) (* \; "RP-RPOFFSET => index in table") ( MAXETHERBYTES WORD) (* \; "Number of bytes available in a pbi, not counting encapsulation (Dorado)") ( EMBUFVP WORD) (* \; "VP of a one-page emulator buffer") (|NSHost0| WORD) (* \; "Machine's 48-bit NS host number. Lisp manages to compute this on all machines except Dolphin, where Bcpl fills it in." ) (|NSHost1| WORD) (|NSHost2| WORD) (|MDSZone| WORD) (* \; "Obsolete -- was used by Dolphin 10MB network code.") (|MDSZoneLength| WORD) (EMUBUFFERS WORD) (* \; "Buffer space in segment 0 for swapping/disk activity") (EMUBUFLENGTH WORD) (* \; "Number of words of said space") (* |;;| "The following 2 are available if NEW_STOARGE is specified in C") (|ProcessSize| WORD) (* \; "Process size for which can be use as LISP space") (|StorageFullState| WORD) (* \; "Save last storage state") (ISFMAP WORD) (* |;;| "The following 4 are for \\MISCAPPLY* -- note that they are not ref counted, so don't pass the only pointer to something this way!" ) (MISCSTACKFN FULLXPOINTER) (MISCSTACKARG1 FULLXPOINTER) (MISCSTACKARG2 FULLXPOINTER) ( MISCSTACKRESULT FULLXPOINTER) (|NRealPages| WORD) (* \; "Number pages of real memory") ( |LastLockedFilePage| WORD) (* \; "Last page of vmem that is locked--booting has to load at least that far.") (|LastDominoFilePage| WORD ) (* \; "Last sysout page reserved for Dandelion microcode") (|FPTOVPStart| WORD) (* \; "Sysout page where FPTOVP starts") (FAKEMOUSEBITS WORD) (* \; "Used to implement fake middle button on 2-button Dandelion.") (|DL24BitAddressable| WORD) (* \; "non-zero if DLion capable of addressing 32MB virtual memory") (REALPAGETABLEPTR FULLXPOINTER) (* \; "Address of real page table, set up by Bcpl (but not chained together)") (SYSDISK WORD) (* \; "WAS DLLastVmemPage, DLion booting microcode puts length of vmem file here.") (|FullSpaceUsed| WORD) ( * \; "Non-zero if vmem beyond initial 8MB has been allocated.") (FAKEKBDAD4 WORD) (FAKEKBDAD5 WORD) (* |;;| "The following 9 items (6 words and 3 pointers) are 3 3-element vectors for the Dorado extended virtual memory code--indexed by 0,1,2 according to which of up to 3 virtual memory backing files you're working with." ) (|XVmemFmapBase| WORD) (* \; "Bcpl stores isf map pointer to each partition here. First is redundant with ISFMAP field above.") ( NIL WORD) (NIL WORD) (|XVmemFmapHighBase| WORD) (* \; "Bcpl stores the highest vm page contained in this or earlier partition.") (NIL WORD) (NIL WORD) ( |XVmemDiskBase| FULLXPOINTER) (* \; "Lisp stores disk objects here (just a convenient non-faulting contiguous block of storage).") (NIL FULLXPOINTER) (NIL FULLXPOINTER) (|DLLastVmemPage| FIXP) (* \; "DLion booting microcode puts length of vmem file here.") (|NActivePages| FIXP) (* \; "Length of vmem in use") (|NDirtyPages| FIXP) (* \; "not used, but maintained as = NActivePages"))) (RPAQQ IOPAGELAYOUT ((NIL 18 WORD) (DLMAINTPANEL WORD NIL T) (DLFLOPPYCMD WORD) (DLTTYPORTCMD WORD) ( DLPROCESSORCMD WORD) (NEWMOUSESTATE WORD) (DLBEEPCMD WORD) (DLRS232CMISCCOMMAND WORD) (DLRS232CPUTFLAG WORD) (DLRS232CGETFLAG WORD) (NIL 6 WORD) (DLFLOPPY WORD) (DLTTYOUT WORD) (NIL 1 WORD) (DLTTYIN WORD) (NIL 1 WORD) (DLPROCESSOR2 WORD) (DLPROCESSOR1 WORD) (DLPROCESSOR0 WORD) (NEWMOUSEX WORD) (NEWMOUSEY WORD) (DLBEEPFREQ WORD) (DLRS232CPARAMETERCSBLO WORD) (DLRS232CPARAMETERCSBHI WORD) ( DLRS232CSETRS366STATUS 3 WORD) (DLRS232CPUTCSBLO WORD) (DLRS232CPUTCSBHI WORD) (DLRS232CGETCSBLO WORD) (DLRS232CGETCSBHI WORD) (DLRS232CDEVICESTATUS WORD) (DLRS232CPARAMETEROUTCOME WORD) (DLTODVALID WORD) (DLTODLO WORD NIL T) (DLTODHI WORD) (DLTODLO2 WORD) (DLMOUSEX WORD NIL T) (DLMOUSEY WORD NIL T) ( DLUTILIN WORD NIL T) (DLKBDAD0 WORD NIL T) (DLKBDAD1 WORD NIL T) (DLKBDAD2 WORD NIL T) (DLKBDAD3 WORD NIL T) (DLKBDAD4 WORD NIL T) (DLKBDAD5 WORD NIL T) (DLLSEPIMAGECSB 32 WORD) (DLIOPHARDWARECONFIG WORD) (NIL 11 WORD) (DLRS232CPARAMETERCSBLO.11 WORD) (DLRS232CPARAMETERCSBHI.11 WORD) ( DLRS232CSETRS366STATUS.11 14 WORD) (NIL 60 WORD) (DLMAGTAPE 4 WORD) (DLETHERNET 12 WORD NIL T) (NIL 31 WORD) (DLDISPINTERRUPT WORD NIL T) (DLDISPCONTROL WORD) (DLDISPBORDER WORD) (DLCURSORX WORD NIL T) ( DLCURSORY WORD NIL T) (DLCURSORBITMAP 16 WORD NIL T))) (RPAQQ CDRCODING 1) (RPAQQ \\SMALLP 1) (RPAQQ \\FIXP 2) (RPAQQ \\FLOATP 3) (RPAQQ \\LITATOM 4) (RPAQQ \\LISTP 5) (RPAQQ \\ARRAYP 6) (RPAQQ \\STRINGP 7) (RPAQQ \\STACKP 8) (RPAQQ \\CHARACTERP 9) (RPAQQ \\VMEMPAGEP 10) (RPAQQ \\STREAM 11) (RPAQQ \\TT.TYPEMASK 2047) (RPAQQ \\TT.NOREF 32768) (RPAQQ \\TT.SYMBOLP 16384) (RPAQQ \\TT.FIXP 8192) (RPAQQ \\TT.NUMBERP 4096) (RPAQQ \\TT.ATOM 2048) (RPAQQ |\\PMblockSize| 32) (RPAQQ |\\STATSsize| 8) (RPAQQ |\\NumPMTpages| 8) (RPAQQ |\\EmptyPMTEntry| 65535) (RPAQQ |\\FirstVmemBlock| 2) (RPAQQ \\MAXVMPAGE 131069) (RPAQQ \\MAXVMSEGMENT 255) (RPAQQ |\\IFPValidKey| 5603) (RPAQQ |\\FirstMDSPage| 16382) (RPAQQ |\\MaxMDSPage| 524285) (RPAQQ |\\DefaultSecondMDSPage| 65532) (RPAQQ |\\MDSIncrement| 512) (RPAQQ |\\PagesPerMDSUnit| 2) (RPAQQ |\\FirstArraySegment| 46) (RPAQQ |\\FirstArrayPage| 11776) (RPAQQ |\\DefaultSecondArrayPage| 16384) (RPAQQ |\\StackMask| 57344) (RPAQQ |\\FxtnBlock| 49152) (RPAQQ |\\GuardBlock| 57344) (RPAQQ |\\BFBlock| 32768) (RPAQQ |\\FreeStackBlock| 40960) (RPAQQ |\\NotStackBlock| 0) (RPAQQ |\\MinExtraStackWords| 32) (RPAQQ ERASECHARCODE 0) (RPAQQ \\HT1CNT 1024) (RPAQQ \\HTSTKBIT 512) (RPAQQ \\HTCNTMASK 64512) (RPAQQ \\HTMAINSIZE 65536) (RPAQQ \\HTCOLLSIZE 1048576) (RPAQQ \\HTENDFREE 1) (RPAQQ \\HTFREEPTR 0) (RPAQQ |\\AtomHI| 0) (RPAQQ \\CHARHI 7) (RPAQQ |\\AtomHTpages| 256) (RPAQQ |\\LastAtomPage| 255) (RPAQQ |\\MaxAtomFrLst| 65535) (RPAQQ |\\SmallPosHi| 14) (RPAQQ |\\SmallNegHi| 15) (RPAQQ |\\NumSmallPages| 512) (RPAQQ \\PNAME.HI 8) (RPAQQ \\ATOM.HI 44) (RPAQQ \\DEF.HI 10) (RPAQQ \\VAL.HI 12) (RPAQQ \\PLIST.HI 2) (RPAQQ |\\NumPageMapPages| 256) (RPAQQ |\\MDSTTsize| 1024) (RPAQQ |\\UFNTableSize| 2) (RPAQQ |\\DTDSize| 18) (RPAQQ |\\EndTypeNumber| 2047) (RPAQQ |\\NumLPTPages| 16) (RPAQQ |\\GuardStackAddr| 61440) (RPAQQ |\\LastStackAddr| 65534) (RPAQQ \\STACKHI 1) (RPAQQ |\\HTMAINnpages| 256) (RPAQQ |\\D1BCPLspace| 0) (RPAQQ |\\D0BCPLspace| 0) (RPAQQ |\\CurrentFXP| 0) (RPAQQ |\\ResetFXP| 1) (RPAQQ |\\SubovFXP| 2) (RPAQQ |\\KbdFXP| 3) (RPAQQ |\\HardReturnFXP| 4) (RPAQQ \\GCFXP 5) (RPAQQ \\FAULTFXP 6) (RPAQQ |\\MiscFXP| 14) (RPAQQ |\\TeleRaidFXP| 24) (RPAQQ DCB.EM 272) (RPAQQ DISPINTERRUPT.EM 273) (RPAQQ CURSORBITMAP.EM 281) (RPAQQ KBDAD0.EM 65052) (RPAQQ KBDAD1.EM 65053) (RPAQQ KBDAD2.EM 65054) (RPAQQ KBDAD3.EM 65055) (RPAQQ UTILIN.EM 65048) (RPAQQ CURSORX.EM 278) (RPAQQ CURSORY.EM 279) (RPAQQ MOUSEX.EM 276) (RPAQQ MOUSEY.EM 277) (RPAQQ |\\LispKeyMask| 8192) (RPAQQ |\\BcplKeyMask| 4352) (RPAQQ \\MAIKO 3) (RPAQQ \\DOLPHIN 4) (RPAQQ \\DORADO 5) (RPAQQ \\DANDELION 6) (RPAQQ \\DAYBREAK 8) (RPAQQ \\VP.DISPLAY 4608) (RPAQQ \\NP.DISPLAY 202) (RPAQQ \\NP.WIDEDOVEDISPLAY 243) (RPAQQ \\WIDEDOVEDISPLAYWIDTH 1152) (RPAQQ \\RP.AFTERDISPLAY 206) (RPAQQ \\RP.AFTERDOVEDISPLAY 243) (RPAQQ \\RP.DISPLAY 0) (RPAQQ \\RP.TEMPDISPLAY 2561) (RPAQQ \\RP.MISCLOCKED 2804) (RPAQQ \\RP.STACK 768) (RPAQQ \\VP.STACK 256) (RPAQQ \\RP.MAP 256) (RPAQQ \\NP.MAP 256) (RPAQQ \\RP.IOPAGE 512) (RPAQQ \\RP.DOVEIOCBPAGE 543) (RPAQQ \\RP.DOVEIORGN 544) (RPAQQ \\VP.DOVEIORGN 64) (RPAQQ \\DOVEIORGNSIZE 64) (RPAQQ \\VP.IOPAGE 255) (RPAQQ \\VP.IFPAGE 5120) (RPAQQ \\VP.FPTOVP 512) (RPAQQ \\NP.FPTOVP 4096) (RPAQQ \\RP.FPTOVP 1024) (RPAQQ \\RP.STARTBUFFERS 640) (RPAQQ \\VP.TYPETABLE 6144) (RPAQQ \\NP.TYPETABLE 1024) (RPAQQ \\RP.TYPETABLE 5120) (RPAQQ \\VP.GCTABLE 5632) (RPAQQ \\NP.GCTABLE 256) (RPAQQ \\RP.GCTABLE 6144) (RPAQQ \\VP.GCOVERFLOW 5888) (RPAQQ \\NP.GCOVERFLOW 1) (RPAQQ \\RP.GCOVERFLOW 6400) (RPAQQ \\FP.IFPAGE 2) (RPAQQ \\VP.IOCBS 1) (RPAQQ \\VP.PRIMARYMAP 5122) (RPAQQ \\VP.SECONDARYMAP 1280) (RPAQQ \\VP.LPT 5232) (RPAQQ \\VP.INITSCRATCH 8) (RPAQQ \\VP.RPT 128) (RPAQQ \\VP.BUFFERS 218) (RPAQQ \\DL.PROCESSORBUSY 32768) (RPAQQ \\DL.SETTOD 32769) (RPAQQ \\DL.READTOD 32770) (RPAQQ \\DL.READPID 32771) (RPAQQ \\DL.BOOTBUTTON 32772) (CONSTANTS (CDRCODING 1) (\\SMALLP 1) (\\FIXP 2) (\\FLOATP 3) (\\LITATOM 4) (\\LISTP 5) (\\ARRAYP 6) ( \\STRINGP 7) (\\STACKP 8) (\\CHARACTERP 9) (\\VMEMPAGEP 10) (\\STREAM 11) (\\TT.TYPEMASK 2047) ( \\TT.NOREF 32768) (\\TT.SYMBOLP 16384) (\\TT.FIXP 8192) (\\TT.NUMBERP 4096) (\\TT.ATOM 2048) ( |\\PMblockSize| 32) (|\\STATSsize| 8) (|\\NumPMTpages| 8) (|\\EmptyPMTEntry| 65535) ( |\\FirstVmemBlock| 2) (\\MAXVMPAGE 131069) (\\MAXVMSEGMENT 255) (|\\IFPValidKey| 5603) ( |\\FirstMDSPage| 16382) (|\\MaxMDSPage| 524285) (|\\DefaultSecondMDSPage| 65532) (|\\MDSIncrement| 512 ) (|\\PagesPerMDSUnit| 2) (|\\FirstArraySegment| 46) (|\\FirstArrayPage| 11776) ( |\\DefaultSecondArrayPage| 16384) (|\\StackMask| 57344) (|\\FxtnBlock| 49152) (|\\GuardBlock| 57344) ( |\\BFBlock| 32768) (|\\FreeStackBlock| 40960) (|\\NotStackBlock| 0) (|\\MinExtraStackWords| 32) ( ERASECHARCODE 0) (\\HT1CNT 1024) (\\HTSTKBIT 512) (\\HTCNTMASK 64512) (\\HTMAINSIZE 65536) ( \\HTCOLLSIZE 1048576) (\\HTENDFREE 1) (\\HTFREEPTR 0) (|\\AtomHI| 0) (\\CHARHI 7) (|\\AtomHTpages| 256 ) (|\\LastAtomPage| 255) (|\\MaxAtomFrLst| 65535) (|\\SmallPosHi| 14) (|\\SmallNegHi| 15) ( |\\NumSmallPages| 512) (\\PNAME.HI 8) (\\ATOM.HI 44) (\\DEF.HI 10) (\\VAL.HI 12) (\\PLIST.HI 2) ( |\\NumPageMapPages| 256) (|\\MDSTTsize| 1024) (|\\UFNTableSize| 2) (|\\DTDSize| 18) (|\\EndTypeNumber| 2047) (|\\NumLPTPages| 16) (|\\GuardStackAddr| 61440) (|\\LastStackAddr| 65534) (\\STACKHI 1) ( |\\HTMAINnpages| 256) (|\\D1BCPLspace| 0) (|\\D0BCPLspace| 0) (|\\CurrentFXP| 0) (|\\ResetFXP| 1) ( |\\SubovFXP| 2) (|\\KbdFXP| 3) (|\\HardReturnFXP| 4) (\\GCFXP 5) (\\FAULTFXP 6) (|\\MiscFXP| 14) ( |\\TeleRaidFXP| 24) (DCB.EM 272) (DISPINTERRUPT.EM 273) (CURSORBITMAP.EM 281) (KBDAD0.EM 65052) ( KBDAD1.EM 65053) (KBDAD2.EM 65054) (KBDAD3.EM 65055) (UTILIN.EM 65048) (CURSORX.EM 278) (CURSORY.EM 279) (MOUSEX.EM 276) (MOUSEY.EM 277) (|\\LispKeyMask| 8192) (|\\BcplKeyMask| 4352) (\\MAIKO 3) ( \\DOLPHIN 4) (\\DORADO 5) (\\DANDELION 6) (\\DAYBREAK 8) (\\VP.DISPLAY 4608) (\\NP.DISPLAY 202) ( \\NP.WIDEDOVEDISPLAY 243) (\\WIDEDOVEDISPLAYWIDTH 1152) (\\RP.AFTERDISPLAY 206) (\\RP.AFTERDOVEDISPLAY 243) (\\RP.DISPLAY 0) (\\RP.TEMPDISPLAY 2561) (\\RP.MISCLOCKED 2804) (\\RP.STACK 768) (\\VP.STACK 256 ) (\\RP.MAP 256) (\\NP.MAP 256) (\\RP.IOPAGE 512) (\\RP.DOVEIOCBPAGE 543) (\\RP.DOVEIORGN 544) ( \\VP.DOVEIORGN 64) (\\DOVEIORGNSIZE 64) (\\VP.IOPAGE 255) (\\VP.IFPAGE 5120) (\\VP.FPTOVP 512) ( \\NP.FPTOVP 4096) (\\RP.FPTOVP 1024) (\\RP.STARTBUFFERS 640) (\\VP.TYPETABLE 6144) (\\NP.TYPETABLE 1024) (\\RP.TYPETABLE 5120) (\\VP.GCTABLE 5632) (\\NP.GCTABLE 256) (\\RP.GCTABLE 6144) ( \\VP.GCOVERFLOW 5888) (\\NP.GCOVERFLOW 1) (\\RP.GCOVERFLOW 6400) (\\FP.IFPAGE 2) (\\VP.IOCBS 1) ( \\VP.PRIMARYMAP 5122) (\\VP.SECONDARYMAP 1280) (\\VP.LPT 5232) (\\VP.INITSCRATCH 8) (\\VP.RPT 128) ( \\VP.BUFFERS 218) (\\DL.PROCESSORBUSY 32768) (\\DL.SETTOD 32769) (\\DL.READTOD 32770) (\\DL.READPID 32771) (\\DL.BOOTBUTTON 32772)) (RPAQQ \\MPERRORS ((\\MP.OBSOLETEVMEM 1) (\\MP.INVALIDVMEM 2 "Vmem inconsistent at startup") ( \\MP.IOCBPAGE 3 "No place for IOCB page at startup") (\\MP.MOB 4 "Map out of bounds") ( \\MP.INVALIDADDR 5) (\\MP.INVALIDVP 6) (\\MP.CHAIN.UNAVAIL 7 "Unavailable page on real page table chain") (\\MP.SELECTLOOP 8 "Loop in \\SELECTREALPAGE") ( \\MP.NEWPAGE 9 "Attempt to allocate already existing page") (\\MP.NEWMAPPAGE 10 "\\DONEWPAGE failed to allocate new map page") (\\MP.BADLOCKED 11 "Locked page occupies a file page needed to lock another") (\\MP.CLOCK0 12 "Arg to CLOCK0 not an integer box") (\\MP.RESIDENT 13 "Fault on resident page") (\\MP.STACKFAULT 14 "Fault on stack") (\\MP.VMEMTOOLONG 16 "Attempt to extend Vmem File beyond fixed limit (8mb)") ( \\MP.WRITING.LOCKED.PAGE 17 "Writing a locked page with UPDATEKEY = T") (\\MP.UNINTERRUPTABLE 18 "Error in uninterruptable system code") (\\MP.STACKFULL 19) (\\MP.MDSFULL 20) (\\MP.UNKNOWN.UFN 21) ( \\MP.ATOMSFULL 22) (\\MP.PNAMESFULL 23) (\\MP.USECOUNTOVERFLOW 24) (\\MP.MDSFULLWARNING 25) ( \\MP.BADMDSFREELIST 26) (\\MP.BADARRAYBLOCK 27) (\\MP.BADDELETEBLOCK 28) (\\MP.BADARRAYRECLAIM 29) ( \\MP.BIGREFCNTMISSING 30 "PTR refcnt previously overflowed, but not found in table.") ( \\MP.BIGREFCNTALREADYPRESENT 31 "PTR already in overflow table") (\\MP.DELREF0 32) (\\MP.PROCERROR 33) (\\MP.PROCNOFRAME 34 "Failed to build frame for PROCESS use") (\\MP.32MBINUSE 35) (\\MP.TOPUNWOUND 36 "Unexpected (RETTO T)") (\\MP.STACKRELEASED 37) (\\MP.FLUSHLOCKED 38) (\\MP.MAPNOTLOCKED 39) ( \\MP.UNLOCKINGMAP 40) (\\MP.SWAPDISKERROR 41 "Hard Disk Error in swapper") (\\MP.BADRUNTABLE 42 "Malformed run table for vmem file"))) (RPAQQ \\MP.OBSOLETEVMEM 1) (RPAQ \\MP.INVALIDVMEM 2 "Vmem inconsistent at startup") (RPAQ \\MP.IOCBPAGE 3 "No place for IOCB page at startup") (RPAQ \\MP.MOB 4 "Map out of bounds") (RPAQQ \\MP.INVALIDADDR 5) (RPAQQ \\MP.INVALIDVP 6) (RPAQ \\MP.CHAIN.UNAVAIL 7 "Unavailable page on real page table chain") (RPAQ \\MP.SELECTLOOP 8 "Loop in \\SELECTREALPAGE") (RPAQ \\MP.NEWPAGE 9 "Attempt to allocate already existing page") (RPAQ \\MP.NEWMAPPAGE 10 "\\DONEWPAGE failed to allocate new map page") (RPAQ \\MP.BADLOCKED 11 "Locked page occupies a file page needed to lock another") (RPAQ \\MP.CLOCK0 12 "Arg to CLOCK0 not an integer box") (RPAQ \\MP.RESIDENT 13 "Fault on resident page") (RPAQ \\MP.STACKFAULT 14 "Fault on stack") (RPAQ \\MP.VMEMTOOLONG 16 "Attempt to extend Vmem File beyond fixed limit (8mb)") (RPAQ \\MP.WRITING.LOCKED.PAGE 17 "Writing a locked page with UPDATEKEY = T") (RPAQ \\MP.UNINTERRUPTABLE 18 "Error in uninterruptable system code") (RPAQQ \\MP.STACKFULL 19) (RPAQQ \\MP.MDSFULL 20) (RPAQQ \\MP.UNKNOWN.UFN 21) (RPAQQ \\MP.ATOMSFULL 22) (RPAQQ \\MP.PNAMESFULL 23) (RPAQQ \\MP.USECOUNTOVERFLOW 24) (RPAQQ \\MP.MDSFULLWARNING 25) (RPAQQ \\MP.BADMDSFREELIST 26) (RPAQQ \\MP.BADARRAYBLOCK 27) (RPAQQ \\MP.BADDELETEBLOCK 28) (RPAQQ \\MP.BADARRAYRECLAIM 29) (RPAQ \\MP.BIGREFCNTMISSING 30 "PTR refcnt previously overflowed, but not found in table.") (RPAQ \\MP.BIGREFCNTALREADYPRESENT 31 "PTR already in overflow table") (RPAQQ \\MP.DELREF0 32) (RPAQQ \\MP.PROCERROR 33) (RPAQ \\MP.PROCNOFRAME 34 "Failed to build frame for PROCESS use") (RPAQQ \\MP.32MBINUSE 35) (RPAQ \\MP.TOPUNWOUND 36 "Unexpected (RETTO T)") (RPAQQ \\MP.STACKRELEASED 37) (RPAQQ \\MP.FLUSHLOCKED 38) (RPAQQ \\MP.MAPNOTLOCKED 39) (RPAQQ \\MP.UNLOCKINGMAP 40) (RPAQ \\MP.SWAPDISKERROR 41 "Hard Disk Error in swapper") (RPAQ \\MP.BADRUNTABLE 42 "Malformed run table for vmem file") (CONSTANTS (\\MP.OBSOLETEVMEM 1) (\\MP.INVALIDVMEM 2 "Vmem inconsistent at startup") (\\MP.IOCBPAGE 3 "No place for IOCB page at startup") (\\MP.MOB 4 "Map out of bounds") (\\MP.INVALIDADDR 5) ( \\MP.INVALIDVP 6) (\\MP.CHAIN.UNAVAIL 7 "Unavailable page on real page table chain") (\\MP.SELECTLOOP 8 "Loop in \\SELECTREALPAGE") (\\MP.NEWPAGE 9 "Attempt to allocate already existing page") ( \\MP.NEWMAPPAGE 10 "\\DONEWPAGE failed to allocate new map page") (\\MP.BADLOCKED 11 "Locked page occupies a file page needed to lock another") (\\MP.CLOCK0 12 "Arg to CLOCK0 not an integer box") (\\MP.RESIDENT 13 "Fault on resident page") (\\MP.STACKFAULT 14 "Fault on stack") (\\MP.VMEMTOOLONG 16 "Attempt to extend Vmem File beyond fixed limit (8mb)") ( \\MP.WRITING.LOCKED.PAGE 17 "Writing a locked page with UPDATEKEY = T") (\\MP.UNINTERRUPTABLE 18 "Error in uninterruptable system code") (\\MP.STACKFULL 19) (\\MP.MDSFULL 20) (\\MP.UNKNOWN.UFN 21) ( \\MP.ATOMSFULL 22) (\\MP.PNAMESFULL 23) (\\MP.USECOUNTOVERFLOW 24) (\\MP.MDSFULLWARNING 25) ( \\MP.BADMDSFREELIST 26) (\\MP.BADARRAYBLOCK 27) (\\MP.BADDELETEBLOCK 28) (\\MP.BADARRAYRECLAIM 29) ( \\MP.BIGREFCNTMISSING 30 "PTR refcnt previously overflowed, but not found in table.") ( \\MP.BIGREFCNTALREADYPRESENT 31 "PTR already in overflow table") (\\MP.DELREF0 32) (\\MP.PROCERROR 33) (\\MP.PROCNOFRAME 34 "Failed to build frame for PROCESS use") (\\MP.32MBINUSE 35) (\\MP.TOPUNWOUND 36 "Unexpected (RETTO T)") (\\MP.STACKRELEASED 37) (\\MP.FLUSHLOCKED 38) (\\MP.MAPNOTLOCKED 39) ( \\MP.UNLOCKINGMAP 40) (\\MP.SWAPDISKERROR 41 "Hard Disk Error in swapper") (\\MP.BADRUNTABLE 42 "Malformed run table for vmem file")) (GLOBALVARS \\ARRAYSPACE \\ARRAYSPACE2 \\ATOMSPACE |\\AtomHashTable| \\SMALLPOSPSPACE \\SMALLNEGSPACE \\PNPSPACE \\OLDATOMSPACE \\DEFSPACE \\VALSPACE \\PLISTSPACE \\PAGEMAP |\\PageMapTBL| |\\InterfacePage| \\IOPAGE |\\DoveIORegion| \\IOCBPAGE \\FPTOVP |\\MDSTypeTable| \\MISCSTATS |\\UFNTable| |\\DTDSpaceBase| \\LISTPDTD \\LOCKEDPAGETABLE \\STACKSPACE \\HTMAIN \\HTOVERFLOW \\HTBIGCOUNT \\HTCOLL \\DISPLAYREGION) (BLOCKRECORD MISCSTATS ((STARTTIME FIXP) (TOTALTIME FIXP) (SWAPWAITTIME FIXP) (PAGEFAULTS FIXP) ( SWAPWRITES FIXP) (DISKIOTIME FIXP) (DISKOPS FIXP) (KEYBOARDWAITTIME FIXP) (GCTIME FIXP) (NETIOTIME FIXP) (NETIOOPS FIXP) (SWAPTEMP0 FIXP) (SWAPTEMP1 FIXP) (RCLKSECOND FIXP) (SECONDSCLOCK FIXP) ( MILLISECONDSCLOCK FIXP) (BASECLOCK FIXP) (RCLKTEMP0 FIXP) (SECONDSTMP FIXP) (MILLISECONDSTMP FIXP) ( BASETMP FIXP) (EXCESSTIMETMP FIXP) (CLOCKTEMP0 FIXP) (DISKTEMP0 FIXP) (DISKTEMP1 FIXP) (TELERAIDTEMP1 FIXP) (TELERAIDTEMP2 FIXP) (TELERAIDTEMP3 FIXP) (LASTUSERACTION FIXP) (DLMOUSETIMER FIXP) (DLMOUSETEMP FIXP)) (CREATE (\\ALLOCBLOCK 31))) (BLOCKRECORD IFPAGE ((|CurrentFXP| WORD) (* \; "First 7 items are FX values for user and 6 system contexts.") (|ResetFXP| WORD) (|SubovFXP| WORD) ( |KbdFXP| WORD) (|HardReturnFXP| WORD) (GCFXP WORD) (FAULTFXP WORD) (|EndOfStack| WORD) (* \; "Stack high-water mark: address of guard block at current end of stack") (|LVersion| WORD) (* \; "Lisp version, followed by min versions of microcode and Bcpl compatible with this Lisp") ( |MinRVersion| WORD) (|MinBVersion| WORD) (|RVersion| WORD) (* \; "Bcpl fills in the actual microcode, Bcpl versions.") (|BVersion| WORD) (|MachineType| WORD) ( |MiscFXP| WORD) (* \; "FX for MISC context") (|Key| WORD) (* \; "= IFPValidKey if vmem consistent.") ( |SerialNumber| WORD) (* \; "Pup host number (Dorado/Dolphin)") (|EmulatorSpace| WORD) (* \; "Hiloc of bcpl space (always zero now)") (|ScreenWidth| WORD) (|NxtPMAddr| WORD) (* \; "Next page to be allocated in secondary page map table") (NIL WORD) (* \; "WAS NActivePages, Length of vmem in use") (NIL WORD) (* \; "WAS NDirtyPages, not used, but maintained as = NActivePages") (|filePnPMP0| WORD) (* \; "Sysout page number of first page of secondary page map table (\\PAGEMAP), which is where the secondary map pages themselves live" ) (|filePnPMT0| WORD) (* \; "Sysout page number of first page of primary page map table") (TELERAIDFXP WORD) (* \; "FX for TeleRaid server context") (NATIVE-START-MEM-PAGE WORD) (* \; "Unix page where native code starts") (NATIVE-LENGTH-PAGE WORD) (* \; "Unix page length of native code") (NATIVE-PAGE-OFFSET WORD) (* \; "Lisp Disk Page offset of native code") (|UserNameAddr| WORD) (* \; "Addresses in bcpl space (seg 0) of global user name and password") (|UserPswdAddr| WORD) (|StackBase| WORD) (* \; "Stack address where user stack starts") (FAULTHI WORD) (* \; "Microcode for page fault stores fault address here, then does context switch to FAULTFXP") (FAULTLO WORD) (DEVCONFIG WORD) (* \; "IT'S FOR KB,DISP TYPE") (* \; "Formerly REALPAGETABLE, back when it was always in Bcpl space.") (RPTSIZE WORD) (* \; "Number of entries in Real Page Table") (RPOFFSET WORD) (* \; "RP-RPOFFSET => index in table") ( MAXETHERBYTES WORD) (* \; "Number of bytes available in a pbi, not counting encapsulation (Dorado)") ( EMBUFVP WORD) (* \; "VP of a one-page emulator buffer") (|NSHost0| WORD) (* \; "Machine's 48-bit NS host number. Lisp manages to compute this on all machines except Dolphin, where Bcpl fills it in." ) (|NSHost1| WORD) (|NSHost2| WORD) (|MDSZone| WORD) (* \; "Obsolete -- was used by Dolphin 10MB network code.") (|MDSZoneLength| WORD) (EMUBUFFERS WORD) (* \; "Buffer space in segment 0 for swapping/disk activity") (EMUBUFLENGTH WORD) (* \; "Number of words of said space") (* |;;| "The following 2 are available if NEW_STOARGE is specified in C") (|ProcessSize| WORD) (* \; "Process size for which can be use as LISP space") (|StorageFullState| WORD) (* \; "Save last storage state") (ISFMAP WORD) (* |;;| "The following 4 are for \\MISCAPPLY* -- note that they are not ref counted, so don't pass the only pointer to something this way!" ) (MISCSTACKFN FULLXPOINTER) (MISCSTACKARG1 FULLXPOINTER) (MISCSTACKARG2 FULLXPOINTER) ( MISCSTACKRESULT FULLXPOINTER) (|NRealPages| WORD) (* \; "Number pages of real memory") ( |LastLockedFilePage| WORD) (* \; "Last page of vmem that is locked--booting has to load at least that far.") (|LastDominoFilePage| WORD ) (* \; "Last sysout page reserved for Dandelion microcode") (|FPTOVPStart| WORD) (* \; "Sysout page where FPTOVP starts") (FAKEMOUSEBITS WORD) (* \; "Used to implement fake middle button on 2-button Dandelion.") (|DL24BitAddressable| WORD) (* \; "non-zero if DLion capable of addressing 32MB virtual memory") (REALPAGETABLEPTR FULLXPOINTER) (* \; "Address of real page table, set up by Bcpl (but not chained together)") (SYSDISK WORD) (* \; "WAS DLLastVmemPage, DLion booting microcode puts length of vmem file here.") (|FullSpaceUsed| WORD) ( * \; "Non-zero if vmem beyond initial 8MB has been allocated.") (FAKEKBDAD4 WORD) (FAKEKBDAD5 WORD) (* |;;| "The following 9 items (6 words and 3 pointers) are 3 3-element vectors for the Dorado extended virtual memory code--indexed by 0,1,2 according to which of up to 3 virtual memory backing files you're working with." ) (|XVmemFmapBase| WORD) (* \; "Bcpl stores isf map pointer to each partition here. First is redundant with ISFMAP field above.") ( NIL WORD) (NIL WORD) (|XVmemFmapHighBase| WORD) (* \; "Bcpl stores the highest vm page contained in this or earlier partition.") (NIL WORD) (NIL WORD) ( |XVmemDiskBase| FULLXPOINTER) (* \; "Lisp stores disk objects here (just a convenient non-faulting contiguous block of storage).") (NIL FULLXPOINTER) (NIL FULLXPOINTER) (|DLLastVmemPage| FIXP) (* \; "DLion booting microcode puts length of vmem file here.") (|NActivePages| FIXP) (* \; "Length of vmem in use") (|NDirtyPages| FIXP) (* \; "not used, but maintained as = NActivePages")) ( CREATE (\\ALLOCBLOCK 43))) (BLOCKRECORD IOPAGE ((NIL 18 WORD) (DLMAINTPANEL WORD) (DLFLOPPYCMD WORD) (DLTTYPORTCMD WORD) ( DLPROCESSORCMD WORD) (NEWMOUSESTATE WORD) (DLBEEPCMD WORD) (DLRS232CMISCCOMMAND WORD) (DLRS232CPUTFLAG WORD) (DLRS232CGETFLAG WORD) (NIL 6 WORD) (DLFLOPPY WORD) (DLTTYOUT WORD) (NIL 1 WORD) (DLTTYIN WORD) (NIL 1 WORD) (DLPROCESSOR2 WORD) (DLPROCESSOR1 WORD) (DLPROCESSOR0 WORD) (NEWMOUSEX WORD) (NEWMOUSEY WORD) (DLBEEPFREQ WORD) (DLRS232CPARAMETERCSBLO WORD) (DLRS232CPARAMETERCSBHI WORD) ( DLRS232CSETRS366STATUS 3 WORD) (DLRS232CPUTCSBLO WORD) (DLRS232CPUTCSBHI WORD) (DLRS232CGETCSBLO WORD) (DLRS232CGETCSBHI WORD) (DLRS232CDEVICESTATUS WORD) (DLRS232CPARAMETEROUTCOME WORD) (DLTODVALID WORD) (DLTODLO WORD) (DLTODHI WORD) (DLTODLO2 WORD) (DLMOUSEX WORD) (DLMOUSEY WORD) (DLUTILIN WORD) ( DLKBDAD0 WORD) (DLKBDAD1 WORD) (DLKBDAD2 WORD) (DLKBDAD3 WORD) (DLKBDAD4 WORD) (DLKBDAD5 WORD) ( DLLSEPIMAGECSB 32 WORD) (DLIOPHARDWARECONFIG WORD) (NIL 11 WORD) (DLRS232CPARAMETERCSBLO.11 WORD) ( DLRS232CPARAMETERCSBHI.11 WORD) (DLRS232CSETRS366STATUS.11 14 WORD) (NIL 60 WORD) (DLMAGTAPE 4 WORD) ( DLETHERNET 12 WORD) (NIL 31 WORD) (DLDISPINTERRUPT WORD) (DLDISPCONTROL WORD) (DLDISPBORDER WORD) ( DLCURSORX WORD) (DLCURSORY WORD) (DLCURSORBITMAP 16 WORD)) (ACCESSFNS IOPAGE ((DLCURSORBITMAPPTR ( \\ADDBASE DATUM 240)) (DLCURSORYPTR (\\ADDBASE DATUM 239)) (DLCURSORXPTR (\\ADDBASE DATUM 238)) ( DLDISPINTERRUPTPTR (\\ADDBASE DATUM 235)) (DLETHERNETPTR (\\ADDBASE DATUM 192)) (DLKBDAD5PTR ( \\ADDBASE DATUM 67)) (DLKBDAD4PTR (\\ADDBASE DATUM 66)) (DLKBDAD3PTR (\\ADDBASE DATUM 65)) ( DLKBDAD2PTR (\\ADDBASE DATUM 64)) (DLKBDAD1PTR (\\ADDBASE DATUM 63)) (DLKBDAD0PTR (\\ADDBASE DATUM 62) ) (DLUTILINPTR (\\ADDBASE DATUM 61)) (DLMOUSEYPTR (\\ADDBASE DATUM 60)) (DLMOUSEXPTR (\\ADDBASE DATUM 59)) (DLTODLOPTR (\\ADDBASE DATUM 56)) (DLMAINTPANELPTR (\\ADDBASE DATUM 18)))) (CREATE (\\ALLOCBLOCK 128))) (PUTPROPS EMADDRESS MACRO (ARGS ((LAMBDA (ADDR) (COND ((EQ |\\D1BCPLspace| |\\D0BCPLspace|) (LIST ( BIG-VMEM-CODE (LIST (QUOTE OPCODES) (QUOTE GCONST) 0 0 (LRSH ADDR 8) (LOGAND ADDR 255)) (LIST (QUOTE OPCODES) (QUOTE GCONST) 0 (LRSH ADDR 8) (LOGAND ADDR 255))))) (T (BQUOTE (\\VAG2 (|fetch| |EmulatorSpace| |of| |\\InterfacePage|) \, ADDR))))) (EVAL (CAR ARGS))))) (PUTPROPS EMGETBASE MACRO ((OFFSET) (\\GETBASE (EMADDRESS OFFSET) 0))) (PUTPROPS EMPUTBASE MACRO ((OFFSET VAL) (\\PUTBASE (EMADDRESS OFFSET) 0 VAL))) (PUTPROPS EMULATORSEGMENT MACRO (NIL (|fetch| |EmulatorSpace| |of| |\\InterfacePage|))) (PUTPROPS EMPOINTER MACRO (X (COND ((NEQ |\\D1BCPLspace| |\\D0BCPLspace|) (LIST (QUOTE \\VAG2) (QUOTE (|fetch| (IFPAGE |EmulatorSpace|) |of| |\\InterfacePage|)) (CAR X))) ((ZEROP (CAR X)) NIL) (T (LIST ( QUOTE \\VAG2) |\\D0BCPLspace| (CAR X)))))) (PUTPROPS EMADDRESSP MACRO (X (LIST (QUOTE EQ) (LIST (QUOTE \\HILOC) (CAR X)) (COND ((EQ |\\D1BCPLspace| |\\D0BCPLspace|) |\\D0BCPLspace|) (T (QUOTE (|fetch| (IFPAGE |EmulatorSpace|) |of| |\\InterfacePage|))))))) (PUTPROP (QUOTE LLPARAMS) (QUOTE IMPORTDATE) (IDATE "31-Jan-1998 09:16:51")) (DATATYPE COMPILED-CLOSURE (FNHEADER ENVIRONMENT)) (RPAQQ \\COMPILED-CLOSURE 13) (CONSTANTS \\COMPILED-CLOSURE) (PUTPROPS \\EXTENDED.EQP MACRO (OPENLAMBDA (X Y) (COND ((EQ (NTYPX X) (NTYPX Y)) (SELECTC (NTYPX X) ( \\STACKP (EQ (|fetch| (STACKP EDFXP) |of| X) (|fetch| (STACKP EDFXP) |of| Y))) (\\COMPILED-CLOSURE ( EQDEFP X Y)) NIL))))) (PUTPROPS DPUTCODE MACRO ((FN CA SIZE) (SELECTQ (SYSTEMTYPE) (D (DEFC FN CA)) (/PUTPROP FN (QUOTE DCODE) CA)))) (PUTPROPS MCODEP MACRO ((X) (OR (ARRAYP X) (AND (LITATOM X) (ARRAYP (SELECTQ (SYSTEMTYPE) (D (GETD X)) (GETPROP X (QUOTE DCODE)))))))) (PUTPROPS CODELT MACRO ((CA N) (\\BYTELT CA N))) (PUTPROPS CODELT2 MACRO (OPENLAMBDA (DEF LC) (LOGOR (LLSH (CODELT DEF LC) BITSPERBYTE) (CODELT DEF ( ADD1 LC))))) (PUTPROPS CODESETA2 MACRO (OPENLAMBDA (DEF LC VALUE) (CODESETA DEF LC (LRSH VALUE BITSPERBYTE)) ( CODESETA DEF (ADD1 LC) (IMOD VALUE (CONSTANT (LLSH 1 BITSPERBYTE)))))) (PUTPROPS CODESETA MACRO ((CA N NV) (\\BYTESETA CA N NV))) (PUTPROPS BYTESPERNAMEENTRY MACRO (NIL (UNFOLD (CONSTANT (WORDSPERNAMEENTRY)) BYTESPERWORD))) (PUTPROPS BYTESPERNTOFFSETENTRY MACRO (NIL (UNFOLD (WORDSPERNAMEENTRY) BYTESPERWORD))) (PUTPROPS GETNAMEENTRY MACRO (OPENLAMBDA (DEF LC) (LET ((NUMBER 0)) (* |;;| "Must ALWAYS be called with DEF really being either a FNHEADER or a nametable pseudo-fnheader. Never use addbase to offset from it. This is because CODEBASEELT checks the BYTESWAPPED flag in the fnheader...." ) (FOR I FROM 0 TO (CONSTANT (SUB1 (BYTESPERNAMEENTRY))) DO (SETQ NUMBER (LOGOR (LLSH NUMBER BITSPERBYTE) (CODEBASELT DEF (IPLUS LC I))))) NUMBER))) (PUTPROPS GETNTFLAGS MACRO (OPENLAMBDA (DEF LC) (CODEBASELT DEF LC))) (PUTPROPS GETNTOFFSET MACRO (OPENLAMBDA (DEF LC) (NTSLOT-OFFSET (GETNTOFFSETENTRY DEF LC)))) (PUTPROPS GETNTOFFSETENTRY MACRO (OPENLAMBDA (DEF LC) (LET ((NUMBER 0)) (|for| I |from| 0 |to| ( CONSTANT (SUB1 (BYTESPERNTOFFSETENTRY))) |do| (SETQ NUMBER (LOGOR (LLSH NUMBER BITSPERBYTE) ( CODEBASELT DEF (IPLUS LC I))))) NUMBER))) (PUTPROPS GETNTTAG MACRO (OPENLAMBDA (DEF LC) (CODEBASELT DEF (ADD1 LC)))) (PUTPROPS SETNAMEENTRY MACRO (OPENLAMBDA (DEF LC VALUE) (FOR I FROM (CONSTANT (SUB1 (BYTESPERNAMEENTRY ))) TO 0 BY -1 DO (CODEBASESETA DEF (IPLUS LC I) (LOGAND VALUE (CONSTANT (SUB1 (LLSH 1 BITSPERBYTE)))) ) (SETQ VALUE (LRSH VALUE BITSPERBYTE))))) (PUTPROPS WORDSPERNTOFFSETENTRY MACRO (NIL (WORDSPERNAMEENTRY))) (PUTPROPS NTSLOT-OFFSET MACRO ((X) (LOGAND 255 X))) (DEFMACRO NEW-SYMBOL-CODE (NEW-SYMBOL-FORM OLD-SYMBOL-FORM) (* |;;| "Use one form or another, depending on whether we're compiling for new 3-byte atoms or old 2-byte atom numbers." ) (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) (* \; "NEW ATOMS") (BQUOTE (\\\, NEW-SYMBOL-FORM))) (T (BQUOTE (\\\, OLD-SYMBOL-FORM))))) (DEFOPTIMIZER BIG-VMEM-CODE (NEW-SYMBOL-FORM OLD-SYMBOL-FORM &ENVIRONMENT ENV) (* |;;| "Allow for differences between 4-byte pointers and 3-byte pointers..") (COND ((FMEMB :4-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\\\, NEW-SYMBOL-FORM))) (T (BQUOTE (\\\, OLD-SYMBOL-FORM))))) (DEFOPTIMIZER SETSTKNAMEENTRY (CODEARRAY OFFSET VAL &ENVIRONMENT ENV) (* |;;| "Set the name entry for a name-table entry.") (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (LET ((BASE (|fetch| (ARRAYP BASE) |of| (\\\, CODEARRAY))) (VALUE (\\\, VAL))) (COND (( FIXP VALUE) (* \; "A 20-byte atom #. Make it an atom.") (\\PUTBASEPTR BASE (\\\, OFFSET) (\\VAG2 |\\AtomHI| VALUE))) (T (* \; "A 3-byte atom. Just use it.") (\\PUTBASEPTR BASE (\\\, OFFSET) VALUE))) ))) (T (BQUOTE (LET ((BASE (|fetch| (ARRAYP BASE) |of| (\\\, CODEARRAY)))) (\\PUTBASE BASE (\\\, OFFSET) (\\\, VAL))))))) (DEFOPTIMIZER SETSTKNTOFFSETENTRY (BASE OFFSET VAL &ENVIRONMENT ENV) (* |;;| "Set the offset entry for a name-table entry.") (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\\PUTBASEFIXP (\\\, BASE) (\\\, OFFSET) (\\\, VAL)))) (T (BQUOTE (\\PUTBASE (\\\, BASE ) (\\\, OFFSET) (\\\, VAL)))))) (DEFOPTIMIZER GETSTKNAMEENTRY (BASE OFFSET &ENVIRONMENT ENV) (* |;;| "Get a name entry out of a name table. BASE is the start of the name table; OFFSET is in words, not bytes or name entries." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\\GETBASEPTR (\\\, BASE) ( \\\, OFFSET)))) (T (BQUOTE (\\GETBASE (\\\, BASE) (\\\, OFFSET)))))) (DEFOPTIMIZER GETSTKNTOFFSETENTRY (BASE OFFSET &ENVIRONMENT ENV) (COND ((FMEMB :3-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\\GETBASEFIXP (\\\, BASE) (\\\, OFFSET)))) (T (BQUOTE (\\GETBASE (\\\, BASE) (\\\, OFFSET)))))) (DEFOPTIMIZER WORDSPERNAMEENTRY (&ENVIRONMENT ENV) (* |;;| "Number of words in a name-table \"Name\" entry--the space for the symbol. 1 for old symbol systems, 2 for 3-byte-atom systesm." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (PROGN 2))) ((AND CROSSCOMPILING (FMEMB :3-BYTE-INIT (COMPILER::ENV-TARGET-ARCHITECTURE ENV))) (BQUOTE (PROGN 2))) (T ( BQUOTE (PROGN 1))))) (DEFOPTIMIZER SETSTKNTOFFSET (BASE OFFSET TYPE VAL &ENVIRONMENT ENV) (* |;;| "Set the offset entry for a name-table entry, from the symbol to fill in plus the variable-type marker value SHIFTED LEFT 14 BITS ALREADY." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (PROGN (\\FIXCODENUM (\\\, BASE) (IDIFFERENCE (\\\, OFFSET) BYTESPERWORD) (\\\, TYPE)) (\\FIXCODENUM (\\\, BASE) (\\\, OFFSET) ( \\\, VAL))))) (T (BQUOTE (\\FIXCODENUM (\\\, BASE) (\\\, OFFSET) (IPLUS (\\\, TYPE) (\\\, VAL))))))) (DEFOPTIMIZER SETSTKNAME-RAW (BASE OFFSET VAL &ENVIRONMENT ENV) (* |;;| "Set the name entry for a name-table entry. This version works with raw storage, as opposed to SETSTKNAMEENTRY, which works on an ARRAYP." ) (* |;;| "If this optimizer changes, change SETSTKNAMEENTRY as well.") (COND ((FMEMB :3-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (LET ((VALUE (\\\, VAL))) (COND ((FIXP VALUE) (* \; "A 20-byte atom #. Make it an atom.") (\\PUTBASEPTR (\\\, BASE) (\\\, OFFSET) (\\VAG2 |\\AtomHI| VALUE))) (T (* \; "A 3-byte atom. Just use it.") (\\PUTBASEPTR (\\\, BASE) (\\\, OFFSET) VALUE)))))) (T (BQUOTE (\\PUTBASE (\\\, BASE) (\\\, OFFSET) (\\\, VAL)))))) (DEFOPTIMIZER SETSTKNTOFFSET-RAW (BASE OFFSET TYPE VAL &ENVIRONMENT ENV) (* |;;| "Set the offset entry for a name-table entry. This version works on raw storage, vs SETSTKNAMEOFFSETENTRY, which is supposed to work on codearrays. Any changes here should be made there, as well. TYPE must already be shifted left by 14 bits." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (PROGN (\\PUTBASE (\\\, BASE) (\\\, OFFSET) (\\\, TYPE)) (\\PUTBASE (\\\, BASE) (IPLUS (\\\, OFFSET) 1) (\\\, VAL))))) (T (BQUOTE ( \\PUTBASE (\\\, BASE) (\\\, OFFSET) (IPLUS (\\\, TYPE) (\\\, VAL))))))) (DEFOPTIMIZER NEW-SYMBOL-CODE (NEW-SYMBOL-FORM OLD-SYMBOL-FORM &ENVIRONMENT ENV) (* |;;| "Allow for differences between 3-byte atoms and 2-byte atoms.") (COND ((FMEMB :3-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (\\\, NEW-SYMBOL-FORM))) (T (BQUOTE (\\\, OLD-SYMBOL-FORM))))) (DEFOPTIMIZER MAKE-NTENTRY (TYPE OFFSET &ENVIRONMENT ENV) (COND ((FMEMB :3-BYTE ( COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (IPLUS (CONSTANT (LLSH (\\\, TYPE) 16)) (\\\, OFFSET)) )) (T (BQUOTE (IPLUS (CONSTANT (\\\, TYPE)) (\\\, OFFSET)))))) (DEFOPTIMIZER NULL-NTENTRY (VALUE &ENVIRONMENT ENV) (* |;;| "Predicate: Is VALUE a null entry in a name table? I.e., does it result from fetching the entry at the end that`s all zeros? For 2-byte atoms, that's the same as being zero. For 3-byte atoms, it's the same as being NIL." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (NULL (\\\, VALUE)))) (T ( BQUOTE (EQ (\\\, VALUE) 0))))) (DEFOPTIMIZER NTSLOT-VARTYPE (X &ENVIRONMENT ENV) (* |;;| "Given the contents of a name-table Offset entry, return the variable-type bits at the top of the entry. THE RESULT IS RETURNED SHEFTED LEFT 14 BITS, THE USUAL REPRESENTATION." ) (COND ((FMEMB :3-BYTE (COMPILER::ENV-TARGET-ARCHITECTURE ENV)) (BQUOTE (LOGAND 49153 (LRSH (\\\, X) 16)))) (T (BQUOTE (LOGAND (\\\, X) 49152))))) (ACCESSFNS CODEARRAY ((STKMIN (CODELT2 DATUM 0) (CODESETA2 DATUM 0 NEWVALUE)) (NA (SIGNED (CODELT2 DATUM 2) BITSPERWORD) (CODESETA2 DATUM 2 (UNSIGNED NEWVALUE BITSPERWORD))) (PV (SIGNED (CODELT2 DATUM 4) BITSPERWORD) (CODESETA2 DATUM 4 (UNSIGNED NEWVALUE BITSPERWORD))) (STARTPC (CODELT2 DATUM 6) ( CODESETA2 DATUM 6 NEWVALUE)) (ARGTYPE (LOGAND (LRSH (CODELT DATUM 8) 4) 3) (CODESETA DATUM 8 (LOGOR ( LOGAND (CODELT DATUM 8) 207) (LLSH (LOGAND NEWVALUE 3) 4)))) (FRAMENAME (\\VAG2 (LOGAND (CODELT2 DATUM 8) 4095) (CODELT2 DATUM 10)) (\\FIXCODEPTR DATUM 11 (EVQ NEWVALUE))) (NTSIZE (CODELT2 DATUM 12) ( CODESETA2 DATUM 12 NEWVALUE)) (NLOCALS (CODELT DATUM 14) (CODESETA DATUM 14 NEWVALUE)) (FVAROFFSET ( CODELT DATUM 15) (CODESETA DATUM 15 NEWVALUE))) (ACCESSFNS CODEARRAY ((LSTARP (ILESSP (|fetch| ( CODEARRAY NA) |of| DATUM) 0)) (OVERHEADWORDS (PROGN 8)) (ALIGNED (IPLUS (|fetch| (CODEARRAY NTSIZE) |of| DATUM) (|fetch| (CODEARRAY OVERHEADWORDS) |of| T))) (FIXED NIL (|replace| (CODEARRAY STKMIN) |of| DATUM |with| (\\STKMIN DATUM))) (FRAMENAME# (PROGN 8))))) (RECORD OPCODE (OP# OPCODENAME OPNARGS OPPRINT LEVADJ UFNFN UNIMPL)) (GLOBALVARS \\OPCODES) (RPAQQ PVARCODE 32768) (RPAQQ FVARCODE 49152) (RPAQQ IVARCODE 0) (RPAQQ VARCODEMASK 49152) (CONSTANTS PVARCODE FVARCODE IVARCODE VARCODEMASK) (RPAQQ \\NT.IVARCODE 0) (RPAQQ \\NT.PVARCODE 2) (RPAQQ \\NT.FVARCODE 3) (CONSTANTS \\NT.IVARCODE \\NT.PVARCODE \\NT.FVARCODE) (PUTPROP (QUOTE LLCODE) (QUOTE IMPORTDATE) (IDATE "19-Jan-1993 10:45:33")) (RPAQQ \\ERRORMESSAGELIST ("SYSTEM ERROR" " " "STACK OVERFLOW" "ILLEGAL RETURN" "ARG NOT LIST" "HARD DISK ERROR" "ATTEMPT TO SET NIL OR T" "ATTEMPT TO RPLAC NIL" "UNDEFINED OR ILLEGAL GO" "FILE WON'T OPEN" "NON-NUMERIC ARG" "ATOM TOO LONG" "ATOM HASH TABLE FULL" "FILE NOT OPEN" "ARG NOT LITATOM" "! too many files open" "END OF FILE" "ERROR" "BREAK" "ILLEGAL STACK ARG" "FAULT IN EVAL" "ARRAYS FULL" "FILE SYSTEM RESOURCES EXCEEDED" "FILE NOT FOUND" "BAD SYSOUT FILE" "UNUSUAL CDR ARG LIST" "HASH TABLE FULL" "ILLEGAL ARG" "ARG NOT ARRAY" "ILLEGAL OR IMPOSSIBLE BLOCK" "STACK PTR HAS BEEN RELEASED" "STORAGE FULL" "ATTEMPT TO USE ITEM OF INCORRECT TYPE" "ILLEGAL DATA TYPE NUMBER" "DATA TYPES FULL" "ATTEMPT TO BIND NIL OR T" "! too many user interrupt characters" "! read-macro context error" "ILLEGAL READTABLE" "ILLEGAL TERMINAL TABLE" "! swapblock too big for buffer" "PROTECTION VIOLATION" "BAD FILE NAME" "USER BREAK" "UNBOUND ATOM" "UNDEFINED CAR OF FORM" "UNDEFINED FUNCTION" "CONTROL-E" "FLOATING UNDERFLOW" "FLOATING OVERFLOW" "OVERFLOW" "ARG NOT HARRAY" "TOO MANY ARGUMENTS")) (DEFOPTIMIZER LISPERROR (MESSAGE ARG) (BQUOTE (\\LISPERROR (\\\, ARG) (\\\, (CL:IF (CL:STRINGP MESSAGE ) (FOR X IN \\ERRORMESSAGELIST AS I FROM 0 WHEN (CL:EQUAL X MESSAGE) DO (RETURN I) FINALLY (RETURN ( HELP "Unknown error message" (LIST MESSAGE ARG)))) MESSAGE))))) (PUTPROP (QUOTE AERROR) (QUOTE IMPORTDATE) (IDATE "16-May-1990 11:58:35")) (RECORD BASEBYTESTREAM STREAM (SUBRECORD STREAM) (ACCESSFNS ((BIASOFFST (|fetch| (STREAM FW6) |of| DATUM) (|replace| (STREAM FW6) |of| DATUM |with| NEWVALUE)) (BBSNCHARS (|fetch| (STREAM FW7) |of| DATUM) (|replace| (STREAM FW7) |of| DATUM |with| NEWVALUE)) (WRITEXTENSIONFN (|fetch| (STREAM F1) |of| DATUM) (|replace| (STREAM F1) |of| DATUM |with| NEWVALUE))))) (PUTPROPS \\INSTREAMARG MACRO ((STRM NOERRORFLG) (\\GETSTREAM STRM (QUOTE INPUT) NOERRORFLG))) (PUTPROPS \\OUTSTREAMARG MACRO ((STRM NOERRORFLG) (\\GETSTREAM STRM (QUOTE OUTPUT) NOERRORFLG))) (PUTPROPS \\STREAMARG MACRO (OPENLAMBDA (STRM NOERRORFLG) (COND (NOERRORFLG (\\GETSTREAM STRM NIL T)) (T (\\DTEST STRM (QUOTE STREAM)))))) (PUTPROP (QUOTE AOFD) (QUOTE IMPORTDATE) (IDATE "13-Sep-1990 16:39:58")) (PUTPROPS .SPACECHECK. MACRO ((STRM N) (AND \\THISFILELINELENGTH (IGREATERP (IPLUS N (|fetch| CHARPOSITION |of| STRM)) \\THISFILELINELENGTH) (FRESHLINE STRM)))) (PUTPROPS \\CHECKRADIX MACRO (LAMBDA (R) (COND ((OR (NOT (SMALLP R)) (ILESSP R 1) (IGREATERP R 36)) ( \\INVALID.RADIX R)) (T R)))) (PUTPROPS \\XCCSFILEOUTCHARFN MACRO ((OUTSTREAM CHARCODE) (* |;;;| "Encoder for XCCS format. Default decoder.") (COND ((EQ CHARCODE (CHARCODE EOL)) (COND ((NOT ( \\RUNCODED OUTSTREAM)) (* \; "Charset is a constant 0") (\\BOUT OUTSTREAM (\\CHARSET (CHARCODE EOL)))) ((EQ (\\CHARSET (CHARCODE EOL)) (|ffetch| (STREAM CHARSET) |of| OUTSTREAM))) (T (\\BOUT OUTSTREAM NSCHARSETSHIFT) (\\BOUT OUTSTREAM (|freplace| (STREAM CHARSET) |of| OUTSTREAM |with| (\\CHARSET ( CHARCODE EOL)))))) (\\BOUT OUTSTREAM (SELECTC (|ffetch| EOLCONVENTION |of| OUTSTREAM) (CR.EOLC ( CHARCODE CR)) (LF.EOLC (CHARCODE LF)) (CRLF.EOLC (\\BOUT OUTSTREAM (CHARCODE CR)) (* |;;| "Don't put out high-order byte preceding LF. The CRLF is EOL only if the bytes are immediately adjacent in the stream, with no additional encoding bytes" ) (CHARCODE LF)) (SHOULDNT))) (|freplace| CHARPOSITION |of| OUTSTREAM |with| 0)) (T (COND ((NOT ( \\RUNCODED OUTSTREAM)) (\\BOUT OUTSTREAM (\\CHARSET CHARCODE)) (\\BOUT OUTSTREAM (\\CHAR8CODE CHARCODE ))) ((EQ (\\CHARSET CHARCODE) (|ffetch| (STREAM CHARSET) |of| OUTSTREAM)) (\\BOUT OUTSTREAM ( \\CHAR8CODE CHARCODE))) (T (\\BOUT OUTSTREAM NSCHARSETSHIFT) (\\BOUT OUTSTREAM (|freplace| (STREAM CHARSET) |of| OUTSTREAM |with| (\\CHARSET CHARCODE))) (\\BOUT OUTSTREAM (\\CHAR8CODE CHARCODE)))) ( |freplace| CHARPOSITION |of| OUTSTREAM |with| (PROGN (* \; "Ugh. Don't overflow") (IPLUS16 (|ffetch| CHARPOSITION |of| OUTSTREAM) 1))))))) (PUTPROP (QUOTE APRINT) (QUOTE IMPORTDATE) (IDATE "17-Jan-2020 05:51:20")) (GLOBALVARS \\BCPLDISPLAY) (ACCESSFNS LINEBUFFER ((LPARCOUNT (|fetch| FW6 |of| DATUM) (|replace| FW6 |of| DATUM |with| NEWVALUE)) (LBRKCOUNT (|fetch| FW7 |of| DATUM) (|replace| FW7 |of| DATUM |with| NEWVALUE)) (LINEBUFSTATE ( |fetch| F5 |of| DATUM) (|replace| F5 |of| DATUM |with| NEWVALUE)) (* \; "F4 is free. EJS, 7/8/85") ( KEYBOARDSTREAM (|fetch| F2 |of| DATUM) (|replace| F2 |of| DATUM |with| NEWVALUE)) (PEEKEDCHAR (|fetch| F3 |of| DATUM) (|replace| F3 |of| DATUM |with| NEWVALUE)) (* \; "Character read by PEEKC") (LBFLAGS ( |fetch| FW9 |of| DATUM) (|replace| FW9 |of| DATUM |with| NEWVALUE)) (* |;;| "True if peeked char was echoed when peeked. Could use this to determine whether to echo later or not, but that would be incompatible with Interlisp-10, so this field not used" )) (ACCESSFNS LINEBUFFER ((LBFLAGBASE (LOCF (|fetch| LBFLAGS |of| DATUM)))) (BLOCKRECORD LBFLAGBASE (( PEEKEDECHOFLG FLAG) (INSTRINGP FLAG))))) (RPAQQ LINEBUFFERSTATES (FILLING.LBS READING.LBS RETYPING.LBS)) (RPAQQ FILLING.LBS 0) (RPAQQ READING.LBS 1) (RPAQQ RETYPING.LBS 2) (CONSTANTS FILLING.LBS READING.LBS RETYPING.LBS) (PUTPROPS \\INTERMP MACRO ((OFD) (EQ OFD \\LINEBUF.OFD))) (PUTPROPS \\OUTTERMP MACRO ((OFD) (EQ OFD \\TERM.OFD))) (GLOBALVARS \\DEFAULTLINEBUF) (PUTPROP (QUOTE ATERM) (QUOTE IMPORTDATE) (IDATE "16-May-1990 12:08:04")) (DATATYPE HARRAYP ((NULLSLOTS WORD) (* \; "Number of NIL-NIL slots, which break chains") (LASTINDEX WORD) (* \; "Slot offset of last slot. Used in probe computations computations. Microcode support for \\ADDBASE4 would help" ) (HARRAYPBASE POINTER) (RECLAIMABLE FLAG) (* \; "True if keys can go away when no other refs") ( OVERFLOWACTION POINTER) (NUMSLOTS WORD) (* \; "The maximum number of logical slots--returned by HARRAYSIZE") (NUMKEYS WORD) (* \; "The number of distinct keys in the array") (HASHBITSFN POINTER) (EQUIVFN POINTER) (HASHUSERDATA POINTER))) (PUTPROPS \\EQHASHINGBITS MACRO (OPENLAMBDA (X) (* \; "Spread out objects whose low bits are in small arithmetic progression, esp atoms") (LOGXOR (\\HILOC X ) (LOGXOR (LLSH (LOGAND (\\LOLOC X) 8191) 3) (LRSH (\\LOLOC X) 9))))) (PUTPROPS \\ADDBASE2 MACRO (OPENLAMBDA (BASE N) (\\ADDBASE (\\ADDBASE BASE N) N))) (PUTPROPS \\ADDBASE4 MACRO (OPENLAMBDA (BASE N) (\\ADDBASE2 (\\ADDBASE2 BASE N) N))) (PUTPROPS HUNKSIZEFROMNUMBER MACRO ((NTYPX) (FOLDLO (|fetch| DTDSIZE |of| (\\GETDTD NTYPX)) WORDSPERCELL))) (PUTPROPS \\BYTELT DMACRO (OPENLAMBDA (A J) (\\GETBASEBYTE (|fetch| (ARRAYP BASE) |of| A) (IPLUS ( |fetch| (ARRAYP OFFST) |of| A) J)))) (PUTPROPS \\BYTESETA DMACRO (OPENLAMBDA (A J V) (\\PUTBASEBYTE (|fetch| (ARRAYP BASE) |of| A) (IPLUS ( |fetch| (ARRAYP OFFST) |of| A) J) V))) (PUTPROPS \\WORDELT DMACRO (OPENLAMBDA (A J) (CHECK (AND (ARRAYP A) (EQ 0 (|fetch| (ARRAYP ORIG) |of| A)) (EQ \\ST.POS16 (|fetch| (ARRAYP TYP) |of| A)))) (CHECK (IGREATERP (|fetch| (ARRAYP LENGTH) |of| A) J)) (\\GETBASE (|fetch| (ARRAYP BASE) |of| A) (IPLUS (|fetch| (ARRAYP OFFST) |of| A) J)))) (RPAQQ BLOCKGCTYPECONSTANTS ((CODEBLOCK.GCT 2) (PTRBLOCK.GCT 1) (UNBOXEDBLOCK.GCT 0))) (RPAQQ CODEBLOCK.GCT 2) (RPAQQ PTRBLOCK.GCT 1) (RPAQQ UNBOXEDBLOCK.GCT 0) (CONSTANTS (CODEBLOCK.GCT 2) (PTRBLOCK.GCT 1) (UNBOXEDBLOCK.GCT 0)) (RPAQQ ARRAYCONSTANTS (|\\ArrayBlockHeaderCells| |\\ArrayBlockHeaderWords| |\\ArrayBlockTrailerCells| |\\ArrayBlockTrailerWords| (|\\ArrayBlockOverheadCells| (IPLUS |\\ArrayBlockHeaderCells| |\\ArrayBlockTrailerCells|)) (|\\ArrayBlockOverheadWords| (IPLUS |\\ArrayBlockHeaderWords| |\\ArrayBlockTrailerWords|)) |\\ArrayBlockLinkingCells| (|\\MinArrayBlockSize| (IPLUS |\\ArrayBlockOverheadCells| |\\ArrayBlockLinkingCells|)) (|\\MaxArrayBlockSize| 65535) ( |\\MaxArrayNCells| (IDIFFERENCE |\\MaxArrayBlockSize| |\\ArrayBlockOverheadCells|)) |\\MaxArrayLen| ( \\ABPASSWORDSHIFT 3) (|\\ArrayBlockPassword| (LRSH 43690 \\ABPASSWORDSHIFT)) (|\\FreeArrayFlagWord| ( LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) (LLSH UNBOXEDBLOCK.GCT 1))) ( |\\UsedArrayFlagWord| (LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) 1)) ( |\\CodeArrayFlagWord| (LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) (LLSH CODEBLOCK.GCT 1) 1) ))) (RPAQQ |\\ArrayBlockHeaderCells| 1) (RPAQQ |\\ArrayBlockHeaderWords| 2) (RPAQQ |\\ArrayBlockTrailerCells| 1) (RPAQQ |\\ArrayBlockTrailerWords| 2) (RPAQ |\\ArrayBlockOverheadCells| (IPLUS |\\ArrayBlockHeaderCells| |\\ArrayBlockTrailerCells|)) (RPAQ |\\ArrayBlockOverheadWords| (IPLUS |\\ArrayBlockHeaderWords| |\\ArrayBlockTrailerWords|)) (RPAQQ |\\ArrayBlockLinkingCells| 2) (RPAQ |\\MinArrayBlockSize| (IPLUS |\\ArrayBlockOverheadCells| |\\ArrayBlockLinkingCells|)) (RPAQQ |\\MaxArrayBlockSize| 65535) (RPAQ |\\MaxArrayNCells| (IDIFFERENCE |\\MaxArrayBlockSize| |\\ArrayBlockOverheadCells|)) (RPAQQ |\\MaxArrayLen| 65535) (RPAQQ \\ABPASSWORDSHIFT 3) (RPAQ |\\ArrayBlockPassword| (LRSH 43690 \\ABPASSWORDSHIFT)) (RPAQ |\\FreeArrayFlagWord| (LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) (LLSH UNBOXEDBLOCK.GCT 1))) (RPAQ |\\UsedArrayFlagWord| (LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) 1)) (RPAQ |\\CodeArrayFlagWord| (LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) (LLSH CODEBLOCK.GCT 1) 1)) (CONSTANTS |\\ArrayBlockHeaderCells| |\\ArrayBlockHeaderWords| |\\ArrayBlockTrailerCells| |\\ArrayBlockTrailerWords| (|\\ArrayBlockOverheadCells| (IPLUS |\\ArrayBlockHeaderCells| |\\ArrayBlockTrailerCells|)) (|\\ArrayBlockOverheadWords| (IPLUS |\\ArrayBlockHeaderWords| |\\ArrayBlockTrailerWords|)) |\\ArrayBlockLinkingCells| (|\\MinArrayBlockSize| (IPLUS |\\ArrayBlockOverheadCells| |\\ArrayBlockLinkingCells|)) (|\\MaxArrayBlockSize| 65535) ( |\\MaxArrayNCells| (IDIFFERENCE |\\MaxArrayBlockSize| |\\ArrayBlockOverheadCells|)) |\\MaxArrayLen| ( \\ABPASSWORDSHIFT 3) (|\\ArrayBlockPassword| (LRSH 43690 \\ABPASSWORDSHIFT)) (|\\FreeArrayFlagWord| ( LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) (LLSH UNBOXEDBLOCK.GCT 1))) ( |\\UsedArrayFlagWord| (LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) 1)) ( |\\CodeArrayFlagWord| (LOGOR (LLSH |\\ArrayBlockPassword| \\ABPASSWORDSHIFT) (LLSH CODEBLOCK.GCT 1) 1) )) (RPAQQ ARRAYTYPES ((\\ST.BYTE 0) (\\ST.POS16 1) (\\ST.INT32 2) (\\ST.CODE 4) (\\ST.PTR 6) (\\ST.FLOAT 7) (\\ST.BIT 8) (\\ST.PTR2 11))) (RPAQQ \\ST.BYTE 0) (RPAQQ \\ST.POS16 1) (RPAQQ \\ST.INT32 2) (RPAQQ \\ST.CODE 4) (RPAQQ \\ST.PTR 6) (RPAQQ \\ST.FLOAT 7) (RPAQQ \\ST.BIT 8) (RPAQQ \\ST.PTR2 11) (CONSTANTS (\\ST.BYTE 0) (\\ST.POS16 1) (\\ST.INT32 2) (\\ST.CODE 4) (\\ST.PTR 6) (\\ST.FLOAT 7) ( \\ST.BIT 8) (\\ST.PTR2 11)) (RPAQQ \\MAX.CELLSPERHUNK 64) (CONSTANTS \\MAX.CELLSPERHUNK) (RPAQQ \\IN.MAKEINIT NIL) (CONSTANTS (\\IN.MAKEINIT)) (BLOCKRECORD SEQUENCEDESCRIPTOR ((ORIG BITS 1) (NIL BITS 1) (READONLY FLAG) (NIL BITS 1) (BASE POINTER ) (TYP BITS 4) (NIL BITS 4) (LENGTH BITS 24) (OFFST FIXP))) (DATATYPE ARRAYP ((* |;;| "Describes an INTERLISP ARRAYP, as opposed to a CL array.") (ORIG BITS 1) (* \; "Origin, 0 or 1") (NIL BITS 1) (READONLY FLAG) (* \; "probably no READONLY arrays now") (NIL BITS 1) (BASE POINTER) (TYP BITS 4) (* \; "Type of the contents") (NIL BITS 4) (LENGTH BITS 24) (* \; "Array's length") (OFFST FIXP) (* \; "Offset from BASE where the data really starts.")) (* |;;| "note that while ARRAYP is a DATATYPE, the allocation of it actually happens at MAKEINIT time under INITDATATYPE{NAMES}" )) (BLOCKRECORD ARRAYBLOCK ((PASSWORD BITS 13) (GCTYPE BITS 2) (* \; "Unboxed, Pointers, or Code") (INUSE FLAG) (ARLEN WORD) (FWD FULLXPOINTER) (* \; "Only when on free list") (BKWD FULLXPOINTER)) ( BLOCKRECORD ARRAYBLOCK ((ABFLAGS WORD) (* \; "Used for header and trailer"))) (ACCESSFNS ARRAYBLOCK (( DAT (\\ADDBASE DATUM |\\ArrayBlockHeaderWords|)) (TRAILER (\\ADDBASE2 DATUM (IDIFFERENCE (|fetch| ( ARRAYBLOCK ARLEN) |of| DATUM) |\\ArrayBlockTrailerCells|))))) (TYPE? (AND (EQ 0 (NTYPX DATUM)) (IGEQ ( \\HILOC DATUM) |\\FirstArraySegment|)))) (GLOBALVARS |\\NxtArrayPage| \\FREEBLOCKBUCKETS \\HUNKING?) (PUTPROPS HUNKSIZEFROMNUMBER MACRO ((NTYPX) (FOLDLO (|fetch| DTDSIZE |of| (\\GETDTD NTYPX)) WORDSPERCELL))) (PUTPROP (QUOTE LLARRAYELT) (QUOTE IMPORTDATE) (IDATE "15-Sep-1994 11:08:59")) (DEFOPTIMIZER PUTBASEPTRX (&REST ARGS) (CONS (QUOTE (OPENLAMBDA (DATUM OFFSET NEWVALUE) ( UNINTERRUPTABLY (\\PUTBASE DATUM OFFSET (LOGOR (LOGAND 61440 (\\GETBASE DATUM OFFSET)) (LOGAND ( \\HILOC NEWVALUE) 4095))) (\\PUTBASE DATUM (ADD1 OFFSET) (\\LOLOC NEWVALUE)) NEWVALUE))) ARGS)) (RPAQQ \\SMALLP 1) (RPAQQ \\FIXP 2) (RPAQQ \\FLOATP 3) (RPAQQ \\LITATOM 4) (RPAQQ \\LISTP 5) (RPAQQ \\ARRAYP 6) (RPAQQ \\STACKP 8) (RPAQQ \\VMEMPAGEP 10) (RPAQQ \\STREAM 11) (RPAQQ \\NEW-ATOM 21) (CONSTANTS \\SMALLP \\FIXP \\FLOATP \\LITATOM \\LISTP \\ARRAYP \\STACKP \\VMEMPAGEP \\STREAM \\NEW-ATOM) (RPAQQ \\BUILT-IN-SYSTEM-TYPES ((SMALLP) (FIXP 2) (FLOATP 2) (LITATOM) (LISTP 4 (0 2)) (ARRAYP 6 (0)) (STRINGP 6 (0)) (STACKP 2 NIL \\RECLAIMSTACKP) (CHARACTER) (VMEMPAGEP 256 NIL RELEASINGVMEMPAGE) ( STREAM) (BITMAP) (COMPILED-CLOSURE 4 (0 2)) (ONED-ARRAY 8 (0)) (TWOD-ARRAY 10 (0)) (GENERAL-ARRAY 10 ( 0 8)) (BIGNUM) (RATIO) (COMPLEX) (PATHNAME) (NEW-ATOM 10 (2 4 6)) (FILLER22) (FILLER23) (FILLER24) ( FILLER25) (FILLER26) (FILLER27) (FILLER28) (FILLER29) (FILLER30))) (BLOCKRECORD DTD ((NIL BITS 2) (DTDOBSOLETE FLAG) (* \; "True for type of a redeclared datatype--not allowed to allocate more of these") (DTDFINALIZABLE FLAG) (* \; "True if finalization exists for this type") (DTDNAME POINTER) (* \; "Type name -- a symbol ") (DTDCNT0 WORD) (* \; "Incremental box count -- this plus DTDOLDCNT is the true box count") (DTDSIZE WORD) (* \; "Length of datum in words") (DTDFREE FULLXPOINTER) (* \; "Pointer to first object on free chain, or NIL. Not used for LISTP") (DTDLOCKEDP FLAG) (* \; "True if objects of this type must be locked down (not pagefault)") (DTDHUNKP FLAG) (* \; "True if this type is used as an array hunk type") (DTDGCTYPE BITS 2) (* \; "For hunk datatypes, is analogous to arrayblock's GCTYPE") (DTDDESCRS POINTER) (DTDTYPESPECS POINTER) (DTDPTRS POINTER) (* \; "List of word offsets inside datum where reference-counted pointers are stored -- used by GC") ( DTDOLDCNT FIXP) (* \; "'Box count' -- number of objects of this type ever allocated") (DTDNEXTPAGE FIXP) (* \; "Currently only for LISTP pages -- page number of next page on chain of non-full cons pages") ( DTDTYPEENTRY WORD) (* |;;| "The word stored in the type table for objects of this type. Hi bits have numberp tags, ref countable, etc." ) (DTDSUPERTYPE WORD) (* \; "Type number of immediate supertype, or zero if none")) (ACCESSFNS DTD (( DTDCNTLOC (\\ADDBASE DATUM 4)) (DTDCNT (IPLUS (|fetch| DTDOLDCNT DATUM) (|fetch| DTDCNT0 DATUM)) ( UNINTERRUPTABLY (|replace| DTDOLDCNT |of| DATUM |with| NEWVALUE) (|replace| DTDCNT0 |of| DATUM |with| 0)))))) (PUTPROPS \\GETDTD MACRO ((|typeNum|) (ADDBASE |\\DTDSpaceBase| (ITIMES |typeNum| 18)))) (DEFOPTIMIZER \\TYPEMASK.UFN (&REST X) (LET ((CE (CONSTANTEXPRESSIONP (CADR X)))) (|if| CE |then| ( BQUOTE ((OPCODES TYPEMASK.N (\\\, (CAR CE))) (\\\, (CAR X)))) |else| (QUOTE IGNOREMACRO)))) (RPAQQ \\GUARDSTORAGEFULL 128) (RPAQQ \\GUARD1STORAGEFULL 64) (CONSTANTS \\GUARDSTORAGEFULL \\GUARD1STORAGEFULL) (GLOBALVARS |\\NxtMDSPage| |\\LeastMDSPage| |\\SecondArrayPage| |\\SecondMDSPage| \\MDSFREELISTPAGE |\\MaxSysTypeNum| |\\MaxTypeNumber| \\STORAGEFULL \\INTERRUPTSTATE \\PENDINGINTERRUPT) (PUTPROP (QUOTE LLDATATYPE) (QUOTE IMPORTDATE) (IDATE "28-Jun-1999 16:57:50")) (ACCESSFNS POINTER ((PAGE# (IPLUS (LLSH (\\HILOC DATUM) 8) (LRSH (\\LOLOC DATUM) 8))) (WORDINPAGE ( LOGAND (\\LOLOC DATUM) 255)) (CELLINPAGE (LRSH (|fetch| WORDINPAGE |of| DATUM) 1)) (BYTEINPAGE (LLSH ( |fetch| WORDINPAGE |of| DATUM) 1)) (SEGMENT# (\\HILOC DATUM)) (WORDINSEGMENT (\\LOLOC DATUM)) ( CELLINSEGMENT (LRSH (|fetch| WORDINSEGMENT |of| DATUM) 1)) (WORD# (|fetch| WORDINPAGE |of| DATUM)) ( DBLWORD# (|fetch| CELLINPAGE |of| DATUM)) (PAGEBASE (\\VAG2 (\\HILOC DATUM) (LOGAND (\\LOLOC DATUM) 65280)))) (CREATE (\\VAG2 (LRSH PAGE# 8) (LLSH (LOGAND PAGE# 255) 8)))) (ACCESSFNS WORD ((HIBYTE (LRSH DATUM 8)) (LOBYTE (LOGAND DATUM 255))) (CREATE (IPLUS (LLSH HIBYTE 8) LOBYTE))) (PUTPROPS PTRGTP MACRO (OPENLAMBDA (X Y) (OR (IGREATERP (\\HILOC X) (\\HILOC Y)) (AND (EQ (\\HILOC X) (\\HILOC Y)) (IGREATERP (\\LOLOC X) (\\LOLOC Y)))))) (PUTPROPS .COERCE.TO.SMALLPOSP. DMACRO (OPENLAMBDA (X) (COND ((SMALLPOSP X) X) (T (\\ILLEGAL.ARG X)))) ) (PUTPROPS .COERCE.TO.BYTE. DMACRO (OPENLAMBDA (X) (COND ((AND (SMALLPOSP X) (ILESSP X (CONSTANT (LLSH 1 BITSPERBYTE)))) X) (T (\\ILLEGAL.ARG X))))) (BLOCKRECORD LISTP ((* |;;| "Describes a CONS cell.") (CAR POINTER) (CDR POINTER)) (CREATE (CREATECELL \\LISTP)) (* |;;| "FOLLOWING ARE CDR-CODE FIELDS") (BLOCKRECORD LISTP ((CDRCODE BITS 4) (CARFIELD XPOINTER))) (* |;;| "For chaining together free cells on a page:") (BLOCKRECORD LISTP ((NEXTFREE BYTE) (NIL BITS 24))) (ACCESSFNS LISTP ((FULLCARFIELD NIL (\\PUTBASEPTR DATUM 0 NEWVALUE)))) (* |;;| "because replace of XPOINTER is slow, the CAR field is stored with PUTBASEPTR, even though that smashes the hi byte" )) (BLOCKRECORD CONSPAGE ((* |;;| "Describes a page of CONS cells, which (when free) are chained together thru the top byte.") (NIL 2 FIXP) (* \; "Empty cells, space for another 2 CONS cells if we can figure out how.") (CNT BYTE) (* \; "# of cells free on this page") (NEXTCELL BYTE) (* \; "WORD offset of next free cell (not guaranteed to be 0 if no free cells)") (NIL WORD) (* \; "Padding") (NEXTPAGE FIXP) (* \; "Next CONS page on the DTD's free list, for searching for cells."))) (RPAQQ CONSCONSTANTS (\\CDR.ONPAGE \\CDR.NIL \\CDR.INDIRECT \\CDR.MAXINDIRECT \\CONSPAGE.LAST)) (RPAQQ \\CDR.ONPAGE 8) (RPAQQ \\CDR.NIL 8) (RPAQQ \\CDR.INDIRECT 0) (RPAQQ \\CDR.MAXINDIRECT 7) (RPAQQ \\CONSPAGE.LAST 65535) (CONSTANTS \\CDR.ONPAGE \\CDR.NIL \\CDR.INDIRECT \\CDR.MAXINDIRECT \\CONSPAGE.LAST) (PUTPROPS LOCAL MACRO ((X) X)) (PUTPROPS ALLOCAL MACRO ((X) X)) (PUTPROP (QUOTE LLNEW) (QUOTE IMPORTDATE) (IDATE " 2-Feb-1995 16:21:44")) (PUTPROPS CHECK MACRO (ARGS (COND ((AND (BOUNDP (QUOTE CHECK)) CHECK) (CONS (QUOTE PROGN) (|for| I |in| ARGS |collect| (LIST (QUOTE OR) I (LIST (QUOTE RAID) (KWOTE (LIST (QUOTE |Check-failure:|) I))))) )) (T (CONS COMMENTFLG ARGS))))) (PUTPROPS |\\StatsZero| BYTEMACRO (OPENLAMBDA (N) (\\PUTBASE N 0 0) (\\PUTBASE N 1 0))) (PUTPROPS |\\StatsAdd1| DMACRO (OPENLAMBDA (A) (PROG ((LO (IPLUS16 (\\GETBASE A 1) 1))) (DECLARE ( LOCALVARS LO)) (* \; "Increment double word at A by 1") (\\PUTBASE A 1 LO) (COND ((EQ LO 0) (\\PUTBASE A 0 (ADD1 (\\GETBASE A 0)))))))) (PUTPROPS IPLUS16 MACRO ((X Y) (* \; "Kludge to do 16-bit plus") (\\LOLOC (\\ADDBASE X Y)))) (PUTPROPS SMALLPOSP MACRO (OPENLAMBDA (X) (AND (SMALLP X) (IGEQ X 0)))) (PROGN (PUTPROPS SETXVAR MACRO (X (BQUOTE (SETQ.NOREF \, (CADAR X) \, (CADR X))))) (PUTPROPS SETXVAR DMACRO (X (OR (AND (EQ (CAAR X) (QUOTE QUOTE)) (LITATOM (CADAR X))) (SHOULDNT)) (GLOBALVARS \\VALSPACE ) (LIST (QUOTE SETQ.NOREF) (CADAR X) (CADR X))))) (PUTPROPS SETQ.NOREF DMACRO ((VAR VAL) (\\PUTBASEPTR (LOCF (|fetch| (LITATOM VALUE) |of| (QUOTE VAR))) 0 VAL))) (PROGN (PUTPROPS IEQ MACRO ((X Y) (IEQP X Y))) (PUTPROPS IEQ DMACRO (= . EQ))) (RPAQQ |WordsPerPage| 256) (CONSTANTS |WordsPerPage|) (ACCESSFNS LITATOM ((DEFINITIONCELL (\\DEFCELL DATUM)) (PROPCELL (\\PROPCELL DATUM)) (VCELL (\\VALCELL DATUM)) (PNAMECELL (\\PNAMECELL DATUM))) (* |;;| "VCELL can also be accessed directly from a value index via the record VALINDEX (as in \\SETGLOBALVAL.UFN) --- Similarly, PNAMEINDEX accesses PNAMECELL for use by \\MKATOM and UNCOPYATOM" ) (TYPE? (LITATOM DATUM)) (BLOCKRECORD PROPCELL ((NIL BITS 4) (* \; "former flags locations") ( PROPLIST POINTER) (NIL BITS 8) (* \; "Package byte") (NIL BITS 8) (* \; "Flags from defcell") (* |;;| "PROPCell flags:") (NIL BITS 1) (GENSYMP FLAG) (FATPNAMEP FLAG) (NIL BITS 5) (* |;;| "Filler for final cell:") (NIL BITS 8)))) (SYNONYM CL:SYMBOL (LITATOM)) (ACCESSFNS VALINDEX ((VCELL (COND ((AND (FIXP DATUM) (ILESSP DATUM 65535)) (* \; "Xerox Lisp traditional symbol") (\\ADDBASE2 \\PNPSPACE (IPLUS \\NEWATOM-VALOFFSET (ITIMES 10 DATUM))) ) (T (* \; "New symbol") (* \; "'90/07/19 ON") (\\ADDBASE DATUM \\NEWATOM-VALOFFSET)))))) (BLOCKRECORD VCELL ((VALUE FULLPOINTER))) (BLOCKRECORD DEFINITIONCELL ((CCODEP FLAG) (FASTP FLAG) (ARGTYPE BITS 2) (* \; "Former flag location") (DEFPOINTER POINTER) (NIL POINTER) (* \; "Proplist cell") (NIL BITS 8) (* \; "package") (* |;;| "DEFCELL flags overflow from top 4 bits of the real cell:") (NIL BITS 4) (PSEUDOCODEP FLAG) (NIL BITS 3) (* |;;| "proplist falgs and filler:") (NIL BITS 16)) (BLOCKRECORD DEFINITIONCELL ((DEFCELLFLAGS BITS 4) (NIL POINTER) (* \; "defn ptr") (NIL BITS 4) (NIL POINTER) (* \; "filler for proplist ptr") ( NIL BITS 8) (AUXDEFCELLFLAGS BYTE) (NIL BITS 16)))) (BLOCKRECORD FNHEADER ((STKMIN WORD) (NA SIGNEDWORD) (PV SIGNEDWORD) (STARTPC WORD) (CLOSUREP FLAG) (* \; "T if this is a \"compiled closure\"") (BYTESWAPPED FLAG) (* \; "T if, on 386, we reswapped the code section of this function for faster access.") (ARGTYPE BITS 2) (* \; "0 = LAMBDA") (* \; "2 = LAMBDA nospread") (* \; "1 = NLAMBDA") (* \; "3 = NLAMBDA nospread") (* |;;| "4 NIL BITS USED TO BE HERE.") (\#FRAMENAME XPOINTER) (NTSIZE WORD) (* \; "Size of the Name Table, IN WORDS. This value is always rounded up to the next Quad-word in size, and there' guaranteed to be one entry of zeros in the length." ) (NLOCALS BYTE) (FVAROFFSET BYTE)) (ACCESSFNS FNHEADER ((LSTARP (ILESSP (|fetch| (FNHEADER NA) |of| DATUM) 0)) (OVERHEADWORDS (PROGN 8)) (NATIVE (PROGN NIL)) (* \; "T if this is a NATIVE-code function (never true!)") (ALIGNED (IPLUS (|fetch| (FNHEADER NTSIZE) |of| DATUM) (|fetch| (FNHEADER OVERHEADWORDS) |of| T))) (FIXED NIL (|replace| (FNHEADER STKMIN) |of| DATUM |with| (\\STKMIN DATUM T))) (NPVARWORDS (UNFOLD (ADD1 (|fetch| (FNHEADER PV) |of| DATUM)) WORDSPERQUAD )) (FRAMENAME (|fetch| (FNHEADER \#FRAMENAME) |of| DATUM) (UNINTERRUPTABLY (CHECK (NEQ (\\HILOC DATUM) \\STACKHI)) (\\DELREF (|fetch| (FNHEADER \#FRAMENAME) |of| DATUM)) (\\ADDREF NEWVALUE) (|replace| ( FNHEADER \#FRAMENAME) |of| DATUM |with| NEWVALUE)))))) (BLOCKRECORD PNAMECELL ((NIL BITS 4) (PNAMEBASE XPOINTER) (NIL POINTER) (* \; "val, def, prop cells") (NIL POINTER) (NIL POINTER) (PACKAGEINDEX BYTE) (NIL BITS 24) (* \; "filler for other flags")) ( BLOCKRECORD PNAMECELL ((FULLPNAMEBASE FULLXPOINTER) (* \; "Replacing this smashes PACKAGEINDEX to 0")) ) (ACCESSFNS PNAMECELL ((PACKAGE (LET ((I (FETCH (PNAMECELL PACKAGEINDEX) OF DATUM))) (* \; "This ugly construct allows cl:symbol-package to run in the init, where *PACKAGE-FROM-INDEX* is not yet bound." ) (COND ((EQ 0 I) NIL) (T (CL:AREF *PACKAGE-FROM-INDEX* I)))) (REPLACE (PNAMECELL PACKAGEINDEX) OF DATUM WITH (IF (NULL NEWVALUE) THEN *UNINTERNED-PACKAGE-INDEX* ELSE (CL::%PACKAGE-INDEX NEWVALUE)))))) ) (ACCESSFNS PACKAGEINDEX ((PACKAGE (IF (EQ 0 DATUM) (* \; "This ugly construct allows cl:symbol-package to run in the init, where *PACKAGE-FROM-INDEX* is not yet bound." ) THEN NIL ELSE (CL:AREF *PACKAGE-FROM-INDEX* DATUM))))) (BLOCKRECORD PNAMEBASE ((PNAMELENGTH BYTE) (* \; "Length is always here, be the pname thin or fat") ( PNAMEFATPADDINGBYTE BYTE) (* \; "This byte is zero for fat pnames so that the pname chars are word-aligned"))) (ACCESSFNS PNAMEINDEX ((PNAMECELL (COND ((AND (FIXP DATUM) (ILESSP DATUM 65535)) (* \; "Xerox Lisp traditional symbol") (\\ADDBASE \\OLDATOMSPACE (IPLUS \\NEWATOM-PNAMEOFFSET (ITIMES 10 DATUM)))) (T (* \; "New symbol") (* \; "'90/07/19 ON") (\\ADDBASE DATUM \\NEWATOM-PNAMEOFFSET)))))) (BLOCKRECORD NEW-ATOM ((* |;;| "An extended symbol, for expanding atom space. Kept in its own datatype.") (PNAME XPOINTER) (* \; "PNAME, same as litatom.") (VALUE POINTER) (DEF POINTER) (PROPLIST POINTER) (* |;;| "Flags that used to be above the pointers, e.g. package, ccodep, gensymp:") (NIL BITS 32))) (PUTPROPS \\DEFCELL MACRO ((ATOM) (\\ATOMCELL ATOM \\DEF.HI))) (PUTPROPS \\VALCELL MACRO ((ATOM) (\\ATOMCELL ATOM \\VAL.HI))) (PUTPROPS \\PNAMECELL MACRO ((ATOM) (\\ATOMCELL ATOM \\PNAME.HI))) (PUTPROPS \\ATOMVALINDEX DMACRO (OPENLAMBDA (X) (COND ((EQ (NTYPX X) \\LITATOM) (* \; "Original litatoms") (\\LOLOC X)) ((EQ (NTYPX X) \\NEW-ATOM) (* \; "new 3-byte symbols") X) (T ( SHOULDNT))))) (PUTPROPS \\ATOMDEFINDEX DMACRO (OPENLAMBDA (X) (COND ((EQ (NTYPX X) \\LITATOM) (* \; "Original litatoms") (\\LOLOC X)) ((EQ (NTYPX X) \\NEW-ATOM) (* \; "new 3-byte symbols") X) (T ( SHOULDNT))))) (PUTPROPS \\ATOMPNAMEINDEX DMACRO (OPENLAMBDA (X) (COND ((EQ (NTYPX X) \\LITATOM) (* \; "Original litatoms") (\\LOLOC X)) ((EQ (NTYPX X) \\NEW-ATOM) (* \; "new 3-byte symbols") X) (T ( SHOULDNT))))) (PUTPROPS \\ATOMPROPINDEX DMACRO ((X) (COND ((EQ (NTYPX X) \\LITATOM) (* \; "Original litatoms") ( \\LOLOC X)) ((EQ (NTYPX X) \\NEW-ATOM) (* \; "new 3-byte symbols") X) (T (SHOULDNT))))) (PUTPROPS \\INDEXATOMPNAME DMACRO (OPENLAMBDA (X) (COND ((FIXP X) (* \; "Xerox Lisp traditional symbol") (COND ((SMALLP X) (\\VAG2 |\\AtomHI| X)) (T (\\VAG2 (LRSH X 16) ( LOGAND X 65535))))) (T (* \; "New symbol") X)))) (PUTPROPS \\INDEXATOMVAL DMACRO (OPENLAMBDA (X) (COND ((FIXP X) (* \; "Xerox Lisp traditional symbol") (COND ((SMALLP X) (\\VAG2 |\\AtomHI| X)) (T (\\VAG2 (LRSH X 16) (LOGAND X 65535))))) (T (* \; "New symbol") X)))) (PUTPROPS \\INDEXATOMDEF DMACRO (OPENLAMBDA (X) (COND ((FIXP X) (* \; "Xerox Lisp traditional symbol") (COND ((SMALLP X) (\\VAG2 |\\AtomHI| X)) (T (\\VAG2 (LRSH X 16) (LOGAND X 65535))))) (T (* \; "New symbol") X)))) (PUTPROPS \\ATOMNUMBER DMACRO (= . \\LOLOC)) (GLOBALVARS |\\NxtPnByte| |\\CurPnPage| |\\NxtAtomPage| |\\AtomFrLst| |\\OneCharAtomBase| \\PNAMES.IN.BLOCKS? \\SCRATCHSTRING COMPILEATPUTDFLG) (RPAQQ \\PNAMELIMIT 255) (RPAQQ |\\CharsPerPnPage| 512) (CONSTANTS (\\PNAMELIMIT 255) (|\\CharsPerPnPage| 512)) (RPAQQ \\NEWATOM-PNAMEOFFSET 0) (RPAQQ \\NEWATOM-VALOFFSET 2) (RPAQQ \\NEWATOM-DEFOFFSET 4) (RPAQQ \\NEWATOM-PLISTOFFSET 6) (RPAQQ \\NEWATOM-TYPE# 21) (CONSTANTS (\\NEWATOM-PNAMEOFFSET 0) (\\NEWATOM-VALOFFSET 2) (\\NEWATOM-DEFOFFSET 4) ( \\NEWATOM-PLISTOFFSET 6) (\\NEWATOM-TYPE# 21)) (PUTPROPS \\MOVEWORDS MACRO (OPENLAMBDA (SBASE SOFFSET DBASE DOFFSET NWORDS) (\\BLT (\\ADDBASE DBASE DOFFSET) (\\ADDBASE SBASE SOFFSET) NWORDS))) (PUTPROP (QUOTE LLBASIC) (QUOTE IMPORTDATE) (IDATE "31-Jan-1998 09:55:50")) (ACCESSFNS STRINGP ((XREADONLY (|fetch| (ARRAY-HEADER READ-ONLY-P) |of| DATUM) (|replace| ( ARRAY-HEADER READ-ONLY-P) |of| DATUM |with| NEWVALUE)) (XBASE ((OPENLAMBDA (STRING) (COND ((|fetch| ( ARRAY-HEADER INDIRECT-P) |of| STRING) (%ARRAY-BASE STRING)) (T (|fetch| (ARRAY-HEADER BASE) |of| STRING)))) DATUM) ((OPENLAMBDA (STRING NV) (|replace| (ARRAY-HEADER INDIRECT-P) |of| STRING |with| NIL ) (|replace| (ARRAY-HEADER BASE) |of| STRING |with| NV) NV) DATUM NEWVALUE)) (TYP ((OPENLAMBDA (STRING ) (SELECTC (COND ((|fetch| (ARRAY-HEADER INDIRECT-P) |of| STRING) (%ARRAY-TYPE-NUMBER STRING)) (T ( |fetch| (ARRAY-HEADER TYPE-NUMBER) |of| STRING))) (%THIN-CHAR-TYPENUMBER \\ST.BYTE) ( %FAT-CHAR-TYPENUMBER \\ST.POS16) (SHOULDNT "Unknown type-number"))) DATUM) ((OPENLAMBDA (STRING NV) ( LET ((%NEW-TYPE-NUMBER (SELECTC NV (\\ST.BYTE %THIN-CHAR-TYPENUMBER) (\\ST.POS16 %FAT-CHAR-TYPENUMBER) (SHOULDNT "Unknown typ value")))) (COND ((|fetch| (ARRAY-HEADER INDIRECT-P) |of| STRING) ( %SET-ARRAY-TYPE-NUMBER STRING %NEW-TYPE-NUMBER)) (T (|replace| (ARRAY-HEADER TYPE-NUMBER) |of| STRING |with| %NEW-TYPE-NUMBER))))) DATUM NEWVALUE)) (LENGTH (|fetch| (ARRAY-HEADER FILL-POINTER) |of| DATUM) ((OPENLAMBDA (STRING NV) (|replace| (ARRAY-HEADER FILL-POINTER) |of| STRING |with| NV) (|replace| ( ARRAY-HEADER TOTAL-SIZE) |of| STRING |with| NV) (COND ((%GENERAL-ARRAY-P STRING) (|freplace| ( GENERAL-ARRAY DIMS) |of| STRING |with| (LIST NV)))) NV) DATUM NEWVALUE)) (OFFST ((OPENLAMBDA (STRING) (COND ((|fetch| (ARRAY-HEADER INDIRECT-P) |of| STRING) (%ARRAY-OFFSET STRING)) (T (|fetch| ( ARRAY-HEADER OFFSET) |of| STRING)))) DATUM) ((OPENLAMBDA (STRING NV) (COND ((NOT (EQ 0 NV)) (|replace| (ARRAY-HEADER DISPLACED-P) |of| STRING |with| T))) (COND ((|fetch| (ARRAY-HEADER INDIRECT-P) |of| STRING) (%SET-ARRAY-OFFSET STRING NV)) (T (|replace| (ARRAY-HEADER OFFSET) |of| STRING |with| NV)))) DATUM NEWVALUE)) (* |;;| "The rest of these fields only appear when smashing") (XFLAGS (LOGAND ( |fetch| (ARRAY-HEADER FLAGS) |of| DATUM) 15) ((OPENLAMBDA (STRING) (|replace| (ARRAY-HEADER ADJUSTABLE-P) |of| STRING |with| NIL) (|replace| (ARRAY-HEADER DISPLACED-P) |of| STRING |with| NIL) ( |replace| (ARRAY-HEADER FILL-POINTER-P) |of| STRING |with| NIL) (|replace| (ARRAY-HEADER EXTENDABLE-P) |of| STRING |with| NIL)) DATUM))) (ACCESSFNS STRINGP ((ORIG ((OPENLAMBDA (STRING) 1) DATUM) (( OPENLAMBDA (STRING NV) (COND ((NOT (EQ NV 1)) (ERROR "Il:stringp's are always origin 1"))) NV) DATUM NEWVALUE)) (* \; "An inoperative field") (SUBSTRINGED ((OPENLAMBDA (STRING) NIL) DATUM) ((OPENLAMBDA ( STRING NV) (OR (NULL NV) (ERROR "Substringed field not supported"))) DATUM NEWVALUE)) (READONLY ( |ffetch| (STRINGP XREADONLY) |of| DATUM) (|freplace| (STRINGP XREADONLY) |of| DATUM |with| NEWVALUE)) (FATSTRINGP ((OPENLAMBDA (STRING) (EQ (COND ((|fetch| (ARRAY-HEADER INDIRECT-P) |of| STRING) ( %ARRAY-TYPE-NUMBER STRING)) (T (|fetch| (ARRAY-HEADER TYPE-NUMBER) |of| STRING))) %FAT-CHAR-TYPENUMBER )) DATUM) ((OPENLAMBDA (STRING NV) (LET ((%NEW-TYPE-NUMBER (COND (NV %FAT-CHAR-TYPENUMBER) (T %THIN-CHAR-TYPENUMBER)))) (COND ((|fetch| (ARRAY-HEADER INDIRECT-P) |of| STRING) ( %SET-ARRAY-TYPE-NUMBER STRING %NEW-TYPE-NUMBER)) (T (|replace| (ARRAY-HEADER TYPE-NUMBER) |of| STRING |with| %NEW-TYPE-NUMBER))))) DATUM NEWVALUE)) (BASE (|ffetch| (STRINGP XBASE) |of| DATUM) (|freplace| (STRINGP XBASE) |of| DATUM |with| NEWVALUE)))) (CREATE (|create| ONED-ARRAY BASE _ XBASE READ-ONLY-P _ XREADONLY STRING-P _ T DISPLACED-P _ (NOT (EQ OFFST 0)) TYPE-NUMBER _ (COND ((EQ TYP \\ST.POS16) %FAT-CHAR-TYPENUMBER) (T %THIN-CHAR-TYPENUMBER)) OFFSET _ OFFST FILL-POINTER _ LENGTH TOTAL-SIZE _ LENGTH)) (TYPE? (CL:STRINGP DATUM)) OFFST _ 0 TYP _ \\ST.BYTE LENGTH _ 0) (GLOBALVARS |\\OneCharAtomBase|) (PUTDEF (QUOTE \\NUMSTR) (QUOTE RESOURCES) (QUOTE (NEW (ALLOCSTRING 128)))) (PUTDEF (QUOTE \\NUMSTR1) (QUOTE RESOURCES) (QUOTE (NEW (CONCAT)))) (PUTDEF (QUOTE \\PNAMESTRING) (QUOTE RESOURCES) (QUOTE (NEW (ALLOCSTRING \\PNAMELIMIT NIL NIL \\FATPNAMESTRINGP)))) (RPAQQ \\FATPNAMESTRINGP T) (CONSTANTS (\\FATPNAMESTRINGP T)) (PUTPROPS \\PNAMESTRINGPUTCHAR MACRO ((BASE OFFSET CODE) (* \; "For stuffing chars into resource \\PNAMESTRING") (\\PUTBASECHAR \\FATPNAMESTRINGP BASE OFFSET CODE))) (DEFOPTIMIZER FCHARACTER (NUM) (BQUOTE ((OPENLAMBDA (N) (COND ((IGREATERP N \\MAXTHINCHAR) (* \; "The character we're getting is NOT a thin character -- do it the hard way") (CHARACTER N)) (( IGREATERP N (CHARCODE 9)) (\\ADDBASE |\\OneCharAtomBase| (IDIFFERENCE N 10))) ((IGEQ N (CHARCODE 0)) ( IDIFFERENCE N (CHARCODE 0))) (T (* \; "The common case -- just add on the one-atom base.") (\\ADDBASE |\\OneCharAtomBase| N)))) (\\\, NUM)))) (I.S.OPR (QUOTE |inpname|) NIL (QUOTE (SUBPAIR (QUOTE ($$END $$BODY $$FATP $$BASE $$OFFSET)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (BQUOTE (|bind| $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END $$FATP |declare| (LOCALVARS $$END $$BODY $$FATP $$BASE $$OFFSET) |first| ( PROG NIL $$RETRY (COND ((STRINGP $$BODY) (SETQ $$BASE (|ffetch| (STRINGP BASE) |of| $$BODY)) (SETQ $$OFFSET (SUB1 (|ffetch| (STRINGP OFFST) |of| $$BODY))) (SETQ $$END (IPLUS $$OFFSET (|ffetch| (STRINGP LENGTH) |of| $$BODY))) (SETQ $$FATP (|ffetch| (STRINGP FATSTRINGP) |of| $$BODY))) ((LITATOM $$BODY) ( SETQ $$BASE (|ffetch| (LITATOM PNAMEBASE) |of| $$BODY)) (SETQ $$END (|ffetch| (PNAMEBASE PNAMELENGTH) |of| $$BASE)) (SETQ $$FATP (|ffetch| (LITATOM FATPNAMEP) |of| $$BODY))) (T (SETQ $$BODY (MKSTRING $$BODY)) (GO $$RETRY)))) |eachtime| (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) ( GO $$OUT)) (SETQ I.V. (COND ($$FATP (\\GETBASEFAT $$BASE $$OFFSET)) (T (\\GETBASETHIN $$BASE $$OFFSET) ))))))) T) (I.S.OPR (QUOTE |inatom|) NIL (QUOTE (SUBPAIR (QUOTE ($$OFFSET $$BODY $$BASE $$END $$FATP)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (|bind| $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END $$FATP |declare| (LOCALVARS $$OFFSET $$BODY $$BASE $$END $$FATP) |first| ( SETQ $$BASE (|ffetch| (LITATOM PNAMEBASE) |of| $$BODY)) (SETQ $$END (|ffetch| (PNAMEBASE PNAMELENGTH) |of| $$BASE)) (SETQ $$FATP (|ffetch| (LITATOM FATPNAMEP) |of| $$BODY)) |eachtime| (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (COND ($$FATP (\\GETBASEFAT $$BASE $$OFFSET)) (T (\\GETBASETHIN $$BASE $$OFFSET)))))))) T) (I.S.OPR (QUOTE |instring|) NIL (QUOTE (SUBPAIR (QUOTE ($$BODY $$END $$OFFSET $$BASE $$FATP)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (|bind| $$BODY _ BODY $$END $$OFFSET $$BASE $$FATP |declare| (LOCALVARS $$BODY $$END $$OFFSET $$BASE $$FATP) |first| (SETQ $$OFFSET (SUB1 (|ffetch| (STRINGP OFFST) |of| $$BODY))) (SETQ $$BASE (|ffetch| (STRINGP BASE) |of| $$BODY)) (SETQ $$END (IPLUS $$OFFSET (|ffetch| (STRINGP LENGTH) |of| $$BODY))) (SETQ $$FATP (|ffetch| (STRINGP FATSTRINGP) |of| $$BODY)) |eachtime| (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (COND ($$FATP (\\GETBASEFAT $$BASE $$OFFSET)) (T (\\GETBASETHIN $$BASE $$OFFSET)))))))) T) (I.S.OPR (QUOTE |infatatom|) NIL (QUOTE (SUBPAIR (QUOTE ($$OFFSET $$BODY $$BASE $$END)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (|bind| $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END |declare| (LOCALVARS $$OFFSET $$BODY $$BASE $$END) |first| (SETQ $$BASE (|ffetch| ( LITATOM PNAMEBASE) |of| $$BODY)) (SETQ $$END (|ffetch| (PNAMEBASE PNAMELENGTH) |of| $$BASE)) |eachtime| (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. ( \\GETBASEFAT $$BASE $$OFFSET)))))) T) (I.S.OPR (QUOTE |inthinatom|) NIL (QUOTE (SUBPAIR (QUOTE ($$OFFSET $$BODY $$BASE $$END)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (|bind| $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END |declare| (LOCALVARS $$OFFSET $$BODY $$BASE $$END) |first| (SETQ $$BASE (|ffetch| ( LITATOM PNAMEBASE) |of| $$BODY)) (SETQ $$END (|ffetch| (PNAMEBASE PNAMELENGTH) |of| $$BASE)) |eachtime| (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND (IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. ( \\GETBASETHIN $$BASE $$OFFSET)))))) T) (I.S.OPR (QUOTE |infatstring|) NIL (QUOTE (SUBPAIR (QUOTE ($$BODY $$END $$OFFSET $$BASE)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (|bind| $$BODY _ BODY $$END $$OFFSET $$BASE |declare| (LOCALVARS $$BODY $$END $$OFFSET $$BASE) |first| (SETQ $$OFFSET (SUB1 (|ffetch| ( STRINGP OFFST) |of| $$BODY))) (SETQ $$BASE (|ffetch| (STRINGP BASE) |of| $$BODY)) (SETQ $$END (IPLUS $$OFFSET (|ffetch| (STRINGP LENGTH) |of| $$BODY))) |eachtime| (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND ( IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (\\GETBASEFAT $$BASE $$OFFSET)))))) T) (I.S.OPR (QUOTE |inthinstring|) NIL (QUOTE (SUBPAIR (QUOTE ($$BODY $$END $$OFFSET $$BASE)) (LIST ( GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR) (GETDUMMYVAR)) (QUOTE (|bind| $$BODY _ BODY $$END $$OFFSET $$BASE |declare| (LOCALVARS $$BODY $$END $$OFFSET $$BASE) |first| (SETQ $$OFFSET (SUB1 (|ffetch| ( STRINGP OFFST) |of| $$BODY))) (SETQ $$BASE (|ffetch| (STRINGP BASE) |of| $$BODY)) (SETQ $$END (IPLUS $$OFFSET (|ffetch| (STRINGP LENGTH) |of| $$BODY))) |eachtime| (SETQ $$OFFSET (ADD1 $$OFFSET)) (AND ( IGREATERP $$OFFSET $$END) (GO $$OUT)) (SETQ I.V. (\\GETBASETHIN $$BASE $$OFFSET)))))) T) (PUTPROPS \\CHARCODEP DMACRO (OPENLAMBDA (X) (* \; "used to also say (ILEQ X \\MAXFATCHAR), but that's implied by the first two clauses") (AND (SMALLP X) (IGEQ X 0)))) (PUTPROPS \\FATCHARCODEP DMACRO (OPENLAMBDA (X) (* \; "Used to also say (ILEQ X \\MAXFATCHAR), but that's implied by the first two clauses") (AND (SMALLP X) (IGREATERP X \\MAXTHINCHAR)))) (PUTPROPS \\THINCHARCODEP DMACRO (OPENLAMBDA (X) (AND (SMALLP X) (IGEQ X 0) (ILEQ X \\MAXTHINCHAR)))) (PUTPROPS \\GETBASEFAT MACRO (= . \\GETBASE)) (PUTPROPS \\GETBASETHIN MACRO (= . \\GETBASEBYTE)) (PUTPROPS \\PUTBASEFAT MACRO (= . \\PUTBASE)) (PUTPROPS \\PUTBASETHIN MACRO (= . \\PUTBASEBYTE)) (PUTPROPS \\PUTBASECHAR MACRO (OPENLAMBDA (FATP BASE OFFSET CODE) (COND (FATP (\\PUTBASEFAT BASE OFFSET CODE)) (T (\\PUTBASETHIN BASE OFFSET CODE))))) (PUTPROPS \\GETBASECHAR MACRO ((FATP BASE N) (COND (FATP (\\GETBASEFAT BASE N)) (T (\\GETBASETHIN BASE N))))) (PUTPROPS \\CHARSET MACRO ((CHARCODE) (LRSH CHARCODE 8))) (PUTPROPS \\CHAR8CODE MACRO ((CHARCODE) (LOGAND CHARCODE 255))) (RPAQQ \\CHARMASK 255) (RPAQQ \\MAXCHAR 255) (RPAQQ \\MAXTHINCHAR 255) (RPAQQ \\MAXFATCHAR 65535) (RPAQQ \\MAXCHARSET 255) (RPAQQ NSCHARSETSHIFT 255) (RPAQQ \#STRINGPWORDS 4) (CONSTANTS (\\CHARMASK 255) (\\MAXCHAR 255) (\\MAXTHINCHAR 255) (\\MAXFATCHAR 65535) (\\MAXCHARSET 255 ) (NSCHARSETSHIFT 255) (\#STRINGPWORDS 4)) (PUTPROPS \\NATOMCHARS DMACRO ((AT) (|fetch| (LITATOM PNAMELENGTH) |of| AT))) (PUTPROPS \\NSTRINGCHARS DMACRO ((S) (|fetch| (STRINGP LENGTH) |of| S))) (PUTPROP (QUOTE LLCHAR) (QUOTE IMPORTDATE) (IDATE "11-Nov-2018 13:08:04")) (ACCESSFNS BF ((BFBLOCK (ADDSTACKBASE DATUM))) (* \; "basic frame pointer") (BLOCKRECORD BFBLOCK (( FLAGS BITS 3) (NIL BITS 3) (RESIDUAL FLAG) (* \; "true if this is not a full BF") (PADDING BITS 1) ( USECNT BITS 8) (IVAR WORD))) (TYPE? (IEQ (|fetch| (BF FLAGS) |of| DATUM) \\STK.BF)) (ACCESSFNS BF (( NARGS (IDIFFERENCE (FOLDLO (IDIFFERENCE DATUM (|fetch| (BF IVAR) |of| DATUM)) WORDSPERCELL) (|fetch| ( BF PADDING) |of| DATUM))) (SIZE (IPLUS 2 (IDIFFERENCE DATUM (|fetch| (BF IVAR) |of| DATUM)))) (CHECKED (AND (|type?| BF DATUM) (|for| I |from| (|fetch| (BF IVAR) |of| DATUM) |to| (IDIFFERENCE DATUM 2) |by| 2 |always| (IEQ \\STK.NOTFLAG (|fetch| (BF FLAGS) |of| I)))))))) (ACCESSFNS FX ((FXBLOCK (ADDSTACKBASE DATUM))) (* \; "frame extension index") (BLOCKRECORD FXBLOCK (( FLAGS BITS 3) (* \; "= \\STK.FX") (FAST FLAG) (NIL FLAG) (INCALL FLAG) (* \; "set when fncall microcode has to punt") (VALIDNAMETABLE FLAG) (* \; "if on, NAMETABLE field is filled in. If off, is same as FNHEADER") (NOPUSH FLAG) (* \; "when returning to this frame, don't push a value. Set by interrupt code") (USECNT BITS 8) (\#ALINK WORD) (* \; "low bit is SLOWP") (FNHEADER FULLXPOINTER) (NEXTBLOCK WORD) (PC WORD) (NAMETABLE# FULLXPOINTER) (\#BLINK WORD) (\#CLINK WORD))) (BLOCKRECORD FXBLOCK ((FLAGBYTE BYTE) (NIL BYTE) (NIL BITS 15) (* \; "most of the bits of #ALINK") (SLOWP FLAG) (* \; "if on, then BLINK and CLINK fields are valid. If off, they are implicit") (NIL FULLXPOINTER 2) ( NAMETABHI WORD) (NAMETABLO WORD))) (TYPE? (IEQ (|fetch| (FX FLAGS) |of| DATUM) \\STK.FX)) (ACCESSFNS FX ((NAMETABLE (COND ((|fetch| (FX VALIDNAMETABLE) |of| DATUM) (|fetch| (FX NAMETABLE#) |of| DATUM)) ( T (|fetch| (FX FNHEADER) |of| DATUM))) (PROGN (|replace| (FX FAST) |of| DATUM |with| NIL) (|replace| ( FX NAMETABLE#) |of| DATUM |with| NEWVALUE) (|replace| (FX VALIDNAMETABLE) |of| DATUM |with| T))) ( FRAMENAME (|fetch| (FNHEADER FRAMENAME) |of| (|fetch| (FX NAMETABLE) |of| DATUM))) (INVALIDP (EQ DATUM 0)) (* \; "true when A/CLink points at nobody, i.e. FX is bottom of stack") (FASTP (NOT (|fetch| (FX SLOWP) |of| DATUM)) (PROGN (CHECK (NULL NEWVALUE)) (COND ((|fetch| (FX FASTP) |of| DATUM) (|replace| ( FX \#BLINK) |of| DATUM |with| (|fetch| (FX DUMMYBF) |of| DATUM)) (|replace| (FX \#CLINK) |of| DATUM |with| (|fetch| (FX \#ALINK) |of| DATUM)) (|replace| (FX SLOWP) |of| DATUM |with| T))))) (BLINK (COND ((|fetch| (FX FASTP) |of| DATUM) (|fetch| (FX DUMMYBF) |of| DATUM)) (T (|fetch| (FX \#BLINK) |of| DATUM))) (PROGN (|replace| (FX \#BLINK) |of| DATUM |with| NEWVALUE) (COND ((|fetch| (FX FASTP) |of| DATUM) (|replace| (FX \#CLINK) |of| DATUM |with| (|fetch| (FX \#ALINK) |of| DATUM)) (|replace| (FX SLOWP) |of| DATUM |with| T))))) (CLINK (IDIFFERENCE (COND ((|fetch| (FX FASTP) |of| DATUM) (|fetch| ( FX \#ALINK) |of| DATUM)) (T (|fetch| (FX \#CLINK) |of| DATUM))) \\#ALINK.OFFSET) (PROGN (|replace| (FX \#CLINK) |of| DATUM |with| (IPLUS NEWVALUE \\#ALINK.OFFSET)) (COND ((|fetch| (FX FASTP) |of| DATUM) ( |replace| (FX \#BLINK) |of| DATUM |with| (|fetch| (FX DUMMYBF) |of| DATUM)) (|replace| (FX SLOWP) |of| DATUM |with| T))))) (ALINK (IDIFFERENCE (FLOOR (|fetch| (FX \#ALINK) |of| DATUM) WORDSPERCELL) \\#ALINK.OFFSET) (PROGN (COND ((|fetch| (FX FASTP) |of| DATUM) (|replace| (FX \#BLINK) |of| DATUM |with| (|fetch| (FX DUMMYBF) |of| DATUM)) (|replace| (FX \#CLINK) |of| DATUM |with| (|fetch| (FX \#ALINK) |of| DATUM)))) (|replace| (FX \#ALINK) |of| DATUM |with| (IPLUS NEWVALUE \\#ALINK.OFFSET ( SUB1 WORDSPERCELL))))) (ACLINK (SHOULDNT) (PROGN (COND ((|fetch| (FX FASTP) |of| DATUM) (|replace| (FX \#BLINK) |of| DATUM |with| (|fetch| (FX DUMMYBF) |of| DATUM)))) (|replace| (FX \#CLINK) |of| DATUM |with| (IPLUS NEWVALUE \\#ALINK.OFFSET)) (|replace| (FX \#ALINK) |of| DATUM |with| (IPLUS NEWVALUE \\#ALINK.OFFSET (SUB1 WORDSPERCELL))))) (* \; "replaces A & C Links at once more efficiently than separately") (DUMMYBF (IDIFFERENCE DATUM WORDSPERCELL)) (* |;;| "This is either an actual BF or \"residual\" BF that provides enough BF to find its IVAR slot. This means that when a FX is copied, the cell preceding the FX is copied too." ) (IVAR (|fetch| (BF IVAR) |of| (|fetch| (FX DUMMYBF) |of| DATUM))) (CHECKED (AND (|type?| FX DATUM) ( OR (IEQ (|fetch| (FX DUMMYBF) |of| DATUM) (|fetch| (FX BLINK) |of| DATUM)) (AND (|fetch| (BF RESIDUAL) |of| (|fetch| (FX DUMMYBF) |of| DATUM)) (IEQ (|fetch| (BF IVAR) |of| (|fetch| (FX DUMMYBF) |of| DATUM )) (|fetch| (BF IVAR) |of| (|fetch| (FX BLINK) |of| DATUM))))))) (FIRSTPVAR (IPLUS DATUM (|fetch| (FX FXSIZE) |of| T))) (* \; "stack offset of PVAR0") (FXSIZE (PROGN 10)) (* \; "fixed overhead from flags thru clink") (PADDING (PROGN 4)) (* \; "doublecell of garbage for microcode use") (FIRSTTEMP (IPLUS (|fetch| (FX FIRSTPVAR) |of| DATUM) ( |fetch| (FX NPVARWORDS) |of| DATUM) (|fetch| (FX PADDING) |of| DATUM))) (* \; "note that NPVARWORDS is obtained from the FNHEADER") (SIZE (IDIFFERENCE (|fetch| (FX NEXTBLOCK) |of| DATUM) DATUM))))) (ACCESSFNS FSB (* |;;| "FREE STACK BLOCK -- ") (* |;;| " A piece of stack space that's free.") (* |;;| "The first word contains 120000Q") (* |;;| "The 2nd word is the size of the block, in words.") (( FSBBLOCK (ADDSTACKBASE DATUM)) (CHECKED (IEQ (|fetch| (FSB FLAGWORD) |of| DATUM) \\STK.FSB.WORD))) ( BLOCKRECORD FSBBLOCK ((FLAGS BITS 3) (DUMMY BITS 13) (SIZE WORD))) (BLOCKRECORD FSBBLOCK ((FLAGWORD WORD) (SIZE WORD))) (* \; "free stack block") (TYPE? (IEQ (|fetch| (FSB FLAGS) |of| DATUM) \\STK.FSB)) ) (ACCESSFNS STK ((STKBLOCK (ADDSTACKBASE DATUM))) (* \; "unspecified stack block") (BLOCKRECORD STKBLOCK ((FLAGS BITS 3))) (BLOCKRECORD STKBLOCK ((FLAGWORD WORD)))) (RPAQQ \\#ALINK.OFFSET 10) (CONSTANTS \\#ALINK.OFFSET) (GLOBALVARS \\PENDINGINTERRUPT \\KBDSTACKBASE \\MISCSTACKBASE \\STACKOVERFLOW) (PUTPROPS \\MYALINK DMACRO (NIL ((OPCODES MYALINK)))) (PUTPROPS ADDSTACKBASE DMACRO (= . STACKADDBASE)) (PUTPROPS STACKADDBASE DMACRO ((N) (VAG2 \\STACKHI N))) (PUTPROPS STACKGETBASE DMACRO ((N) (\\GETBASE (STACKADDBASE N) 0))) (PUTPROPS STACKGETBASEPTR DMACRO ((N) (\\GETBASEPTR (STACKADDBASE N) 0))) (PUTPROPS STACKPUTBASE DMACRO ((N V) (\\PUTBASE (STACKADDBASE N) 0 V))) (PUTPROPS STACKPUTBASEPTR DMACRO ((N V) (\\PUTBASEPTR (STACKADDBASE N) 0 V))) (PUTPROPS \\MISCAPPLY* MACRO ((FN ARG1 ARG2) (UNINTERRUPTABLY (|replace| (IFPAGE MISCSTACKFN) |of| |\\InterfacePage| |with| FN) (|replace| (IFPAGE MISCSTACKARG1) |of| |\\InterfacePage| |with| ARG1) ( |replace| (IFPAGE MISCSTACKARG2) |of| |\\InterfacePage| |with| ARG2) (\\CONTEXTSWITCH |\\MiscFXP|) ( |fetch| (IFPAGE MISCSTACKRESULT) |of| |\\InterfacePage|)))) (BLOCKRECORD STACKP ((STACKP0 WORD) (EDFXP WORD)) (BLOCKRECORD STACKP ((STACKPOINTER FULLXPOINTER))) ( TYPE? (STACKP DATUM))) (RPAQQ STACKTYPES (\\STK.GUARD \\STK.FX \\STK.BF \\STK.NOTFLAG \\STK.FSB \\STK.FLAGS.SHIFT ( \\STK.FSB.WORD (LLSH \\STK.FSB \\STK.FLAGS.SHIFT)) (\\STK.GUARD.WORD (LLSH \\STK.GUARD \\STK.FLAGS.SHIFT)) (\\STK.BF.WORD (LLSH \\STK.BF \\STK.FLAGS.SHIFT)))) (RPAQQ \\STK.GUARD 7) (RPAQQ \\STK.FX 6) (RPAQQ \\STK.BF 4) (RPAQQ \\STK.NOTFLAG 0) (RPAQQ \\STK.FSB 5) (RPAQQ \\STK.FLAGS.SHIFT 13) (RPAQ \\STK.FSB.WORD (LLSH \\STK.FSB \\STK.FLAGS.SHIFT)) (RPAQ \\STK.GUARD.WORD (LLSH \\STK.GUARD \\STK.FLAGS.SHIFT)) (RPAQ \\STK.BF.WORD (LLSH \\STK.BF \\STK.FLAGS.SHIFT)) (CONSTANTS \\STK.GUARD \\STK.FX \\STK.BF \\STK.NOTFLAG \\STK.FSB \\STK.FLAGS.SHIFT (\\STK.FSB.WORD ( LLSH \\STK.FSB \\STK.FLAGS.SHIFT)) (\\STK.GUARD.WORD (LLSH \\STK.GUARD \\STK.FLAGS.SHIFT)) ( \\STK.BF.WORD (LLSH \\STK.BF \\STK.FLAGS.SHIFT))) (RPAQQ |\\StackAreaSize| 768) (RPAQ |\\InitStackSize| (ITIMES |\\StackAreaSize| 12)) (CONSTANTS |\\StackAreaSize| (|\\InitStackSize| (ITIMES |\\StackAreaSize| 12))) (RPAQQ \\MAXSAFEUSECOUNT 200) (CONSTANTS \\MAXSAFEUSECOUNT) (BLOCKRECORD NAMETABLESLOT ((VARTYPE BYTE) (VAROFFSET BYTE))) (BLOCKRECORD FVARSLOT ((BINDLO WORD) (BINDHI WORD)) (ACCESSFNS FVARSLOT ((LOOKEDUP (EVENP (|fetch| BINDLO |of| DATUM))) (BINDINGPTR (\\VAG2 (|fetch| BINDHI |of| DATUM) (|fetch| BINDLO |of| DATUM)) ( PROGN (|replace| BINDLO |of| DATUM |with| (\\LOLOC NEWVALUE)) (|replace| BINDHI |of| DATUM |with| ( \\HILOC NEWVALUE))))))) (BLOCKRECORD PVARSLOT ((PVHI BITS 4) (PVVALUE XPOINTER)) (ACCESSFNS PVARSLOT ((BOUND (EQ (|fetch| ( PVARSLOT PVHI) |of| DATUM) 0) (|if| (NULL NEWVALUE) |then| (|replace| (PVARSLOT PVHI) |of| DATUM |with| 255) |else| (ERROR "Illegal replace" NEWVALUE)))))) (BLOCKRECORD STKTEMPSLOT ((STKTMPHI BITS 4) (VALUE XPOINTER)) (ACCESSFNS STKTEMPSLOT ((BINDINGPTRP ( NEQ (|fetch| STKTMPHI |of| DATUM) 0))))) (BLOCKRECORD BINDMARKSLOT ((BINDMARKP FLAG) (NIL BITS 15)) (BLOCKRECORD BINDMARKSLOT ((BINDNEGVALUES WORD) (BINDLASTPVAR WORD))) (ACCESSFNS BINDMARKSLOT ((BINDNVALUES (PROGN (* \; "Value stored in high half is one's complement of number of values bound") (LOGXOR (|fetch| BINDNEGVALUES |of| DATUM) 65535)))))) (RPAQQ \\NT.IVAR 0) (RPAQQ \\NT.PVAR 128) (RPAQQ \\NT.FVAR 192) (CONSTANTS \\NT.IVAR \\NT.PVAR \\NT.FVAR) (PUTPROP (QUOTE LLSTK) (QUOTE IMPORTDATE) (IDATE " 6-Jan-1993 18:07:37")) (PUTPROPS WORDCONTENTS BYTEMACRO ((PTR) (\\GETBASE PTR 0))) (PUTPROPS SETWORDCONTENTS BYTEMACRO ((PTR N) (\\PUTBASE PTR 0 N))) (PUTPROPS WORDOFFSET BYTEMACRO ((PTR N) (\\ADDBASE PTR N))) (PUTPROPS \\RELEASECPAGE MACRO ((STREAM) (PROGN (* \; "Must be under an UNINTERRUPTABLY !") (COND (( |fetch| CBUFDIRTY |of| STREAM) (\\SETIODIRTY STREAM (|fetch| CPAGE |of| STREAM)) (|replace| CBUFDIRTY |of| STREAM |with| NIL))) (|replace| CBUFSIZE |of| STREAM |with| 0) (|replace| CBUFPTR |of| STREAM |with| NIL)))) (PUTPROP (QUOTE PMAP) (QUOTE IMPORTDATE) (IDATE " 3-Feb-2002 14:11:02")) (PUTPROPS ADDREF MACRO (OPENLAMBDA (PTR) (PROG1 PTR (\\ADDREF PTR)))) (PUTPROPS \\ADDREF DMACRO ((X) ((OPCODES GCREF 0) X))) (PUTPROPS DELETEREF MACRO (OPENLAMBDA (PTR) (PROG1 PTR (\\DELREF PTR)))) (PUTPROPS \\DELREF DMACRO ((X) ((OPCODES GCREF 1) X))) (PUTPROPS SCANREF MACRO (= . \\STKREF)) (PUTPROPS \\STKREF DMACRO ((X) ((OPCODES GCREF 2) X))) (PUTPROPS UNSCANREF MACRO ((PTR) (\\HTFIND PTR 3))) (PUTPROPS CREATEREF MACRO (= . \\CREATEREF)) (PUTPROPS \\CREATEREF MACRO (OPENLAMBDA (PTR) (PROG1 (\\DELREF PTR) (.INCREMENT.ALLOCATION.COUNT. 1))) ) (PUTPROPS .INCREMENT.ALLOCATION.COUNT. MACRO (OPENLAMBDA (N) (DECLARE (GLOBALVARS \\RECLAIM.COUNTDOWN) ) (AND \\RECLAIM.COUNTDOWN (COND ((IGREATERP \\RECLAIM.COUNTDOWN N) (SETQ \\RECLAIM.COUNTDOWN ( IDIFFERENCE \\RECLAIM.COUNTDOWN N))) (T (SETQ \\RECLAIM.COUNTDOWN) (\\DORECLAIM)))))) (PUTPROPS .CHECK.ALLOCATION.COUNT. MACRO (OPENLAMBDA (N) (DECLARE (GLOBALVARS \\RECLAIM.COUNTDOWN)) ( AND \\RECLAIM.COUNTDOWN (COND ((NOT (IGREATERP \\RECLAIM.COUNTDOWN N)) (SETQ \\RECLAIM.COUNTDOWN) ( \\DORECLAIM)))))) (PUTPROPS \\GCDISABLED MACRO (NIL (PROGN (DECLARE (GLOBALVARS \\GCDISABLED)) \\GCDISABLED))) (BLOCKRECORD HTOVERFLOW ((CASE BITS 4) (PTR XPOINTER)) (ACCESSFNS HTOVERFLOW ((CLEAR NIL (\\PUTBASEPTR DATUM 0 NIL))))) (BLOCKRECORD GC ((CNT BITS 15) (STKBIT FLAG) (HIBITS BITS 15) (LINKP FLAG) (NXTPTR FIXP)) (BLOCKRECORD GC ((STKCNT WORD))) (ACCESSFNS GC ((EMPTY (EQ 0 (\\GETBASEFIXP DATUM 0)) (\\PUTBASEFIXP DATUM 0 0)) ( CONTENTS (\\GETBASEFIXP DATUM 0) (\\PUTBASEFIXP DATUM 0 NEWVALUE)) (LINKPTR (LOGAND (\\GETBASEFIXP DATUM 0) -2) (\\PUTBASEFIXP DATUM 0 (LOGOR NEWVALUE 1)))))) (BLOCKRECORD HTCOLL ((* |;;| "An entry in the GC collision table. NEXTFREE is initialized to 2 by INITGC, as part of the MAKEINIT." ) (FREEPTR FIXP) (* \; "The GC table entry") (NEXTFREE FIXP) (* \; "If the entry is in use, points to the next entry in this collision chain. If not, offset (in 1/2-entries) of the next free one on the chain." ))) (PUTPROP (QUOTE LLGC) (QUOTE IMPORTDATE) (IDATE "19-Oct-1994 12:30:11")) (PUTPROPS \\SYNCODE DMACRO (OPENLAMBDA (TABLE CHAR) (CHECK (|type?| CHARTABLE TABLE)) (* \; "0 is either NONE.TC, REAL.CCE, or OTHER.RC") (COND ((IGREATERP CHAR \\MAXTHINCHAR) (OR (AND (|fetch| (CHARTABLE NSCHARHASH) |of| TABLE) (GETHASH CHAR (|fetch| (CHARTABLE NSCHARHASH) |of| TABLE))) 0)) (T (\\GETBASEBYTE TABLE CHAR))))) (PUTPROPS \\SETSYNCODE DMACRO (LAMBDA (TABLE CHAR CODE) (CHECK (|type?| CHARTABLE TABLE)) (* \; "0 is REAL.CCE, NONE.TC, OTHER.RC") (COND ((ILEQ CHAR \\MAXTHINCHAR) (\\PUTBASEBYTE TABLE CHAR CODE)) (T (\\SETFATSYNCODE TABLE CHAR CODE))))) (DATATYPE CHARTABLE ((CHARSET0 256 BYTE) (NSCHARHASH FULLPOINTER))) (RPAQQ CCECHOMODES (REAL.CCE IGNORE.CCE SIMULATE.CCE INDICATE.CCE)) (RPAQQ REAL.CCE 0) (RPAQQ IGNORE.CCE 8) (RPAQQ SIMULATE.CCE 16) (RPAQQ INDICATE.CCE 24) (CONSTANTS REAL.CCE IGNORE.CCE SIMULATE.CCE INDICATE.CCE) (RPAQQ TERMCLASSES (NONE.TC EOL.TC CHARDELETE.TC WORDDELETE.TC WORDSEPR.TC LINEDELETE.TC RETYPE.TC CTRLV.TC)) (RPAQQ NONE.TC 0) (RPAQQ EOL.TC 1) (RPAQQ CHARDELETE.TC 2) (RPAQQ WORDDELETE.TC 6) (RPAQQ WORDSEPR.TC 7) (RPAQQ LINEDELETE.TC 3) (RPAQQ RETYPE.TC 4) (RPAQQ CTRLV.TC 5) (CONSTANTS NONE.TC EOL.TC CHARDELETE.TC WORDDELETE.TC WORDSEPR.TC LINEDELETE.TC RETYPE.TC CTRLV.TC) (ACCESSFNS TERMCODE ((CCECHO (LOGAND DATUM 24)) (TERMCLASS (LOGAND DATUM 7))) (* \; "We assume that values are appropriately shifted") (CREATE (LOGOR CCECHO TERMCLASS))) (DATATYPE TERMTABLEP (TERMSA RAISEFLG DELCHARECHO LINEDELETE 1STCHDEL NTHCHDEL POSTCHDEL EMPTYCHDEL ( CONTROLFLG FLAG) (ECHOFLG FLAG)) TERMSA _ (|create| CHARTABLE)) (PUTPROPS \\GETREADMACRODEF MACRO ((C TBL) (GETHASH C (|fetch| READMACRODEFS |of| TBL)))) (PUTPROPS \\GTREADTABLE MACRO (ARGS (COND ((LITATOM (CAR ARGS)) (SUBPAIR (QUOTE (X . FLG)) ARGS (QUOTE (SELECTQ X ((NIL T) (\\DTEST *READTABLE* (QUOTE READTABLEP))) (\\GTREADTABLE1 X . FLG))))) (T (QUOTE IGNOREMACRO))))) (PUTPROPS \\GTREADTABLE1 DMACRO (ARGS (COND ((NULL (CDR ARGS)) (LIST (QUOTE \\DTEST) (CAR ARGS) (QUOTE (QUOTE READTABLEP)))) (T (QUOTE IGNOREMACRO))))) (RPAQQ MACROBIT 8) (RPAQQ BREAKBIT 16) (RPAQQ STOPATOMBIT 32) (RPAQQ ESCAPEBIT 64) (RPAQQ INNERESCAPEBIT 4) (CONSTANTS MACROBIT BREAKBIT STOPATOMBIT ESCAPEBIT INNERESCAPEBIT) (RPAQQ READCODEMASKS ((CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1)) (WAKEUPMASK (LOGOR MACROBIT 2)))) (RPAQ CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1)) (RPAQ WAKEUPMASK (LOGOR MACROBIT 2)) (CONSTANTS (CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1)) (WAKEUPMASK (LOGOR MACROBIT 2))) (RPAQQ READMACROCONTEXTS ((ALWAYS.RMC (LOGOR MACROBIT STOPATOMBIT BREAKBIT 0)) (FIRST.RMC (LOGOR MACROBIT 0)) (ALONE.RMC (LOGOR MACROBIT 1)))) (RPAQ ALWAYS.RMC (LOGOR MACROBIT STOPATOMBIT BREAKBIT 0)) (RPAQ FIRST.RMC (LOGOR MACROBIT 0)) (RPAQ ALONE.RMC (LOGOR MACROBIT 1)) (CONSTANTS (ALWAYS.RMC (LOGOR MACROBIT STOPATOMBIT BREAKBIT 0)) (FIRST.RMC (LOGOR MACROBIT 0)) ( ALONE.RMC (LOGOR MACROBIT 1))) (RPAQQ READCLASSES ((OTHER.RC 0) (SEPRCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT 0)) (BREAKCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 0)) (STRINGDELIM.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 1)) ( LEFTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 2)) (RIGHTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 3)) (LEFTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 4)) (RIGHTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 5)) (ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 6)) (MULTIPLE-ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 7)) (PACKAGEDELIM.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 1)))) (RPAQQ OTHER.RC 0) (RPAQ SEPRCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT 0)) (RPAQ BREAKCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 0)) (RPAQ STRINGDELIM.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 1)) (RPAQ LEFTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 2)) (RPAQ RIGHTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 3)) (RPAQ LEFTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 4)) (RPAQ RIGHTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 5)) (RPAQ ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 6)) (RPAQ MULTIPLE-ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 7)) (RPAQ PACKAGEDELIM.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 1)) (CONSTANTS (OTHER.RC 0) (SEPRCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT 0)) (BREAKCHAR.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 0)) (STRINGDELIM.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 1)) (LEFTPAREN.RC ( LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 2)) (RIGHTPAREN.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 3)) ( LEFTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 4)) (RIGHTBRACKET.RC (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 5)) (ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 6)) (MULTIPLE-ESCAPE.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 7)) (PACKAGEDELIM.RC (LOGOR ESCAPEBIT INNERESCAPEBIT 1))) (RPAQQ READMACROWAKEUPS ((IMMEDIATE.RMW (LOGOR MACROBIT 2)) (NONIMMEDIATE.RMW (LOGOR MACROBIT 0)))) (RPAQ IMMEDIATE.RMW (LOGOR MACROBIT 2)) (RPAQ NONIMMEDIATE.RMW (LOGOR MACROBIT 0)) (CONSTANTS (IMMEDIATE.RMW (LOGOR MACROBIT 2)) (NONIMMEDIATE.RMW (LOGOR MACROBIT 0))) (RPAQQ READMACROESCAPES ((ESC.RME ESCAPEBIT) (NOESC.RME 0))) (RPAQ ESC.RME ESCAPEBIT) (RPAQQ NOESC.RME 0) (CONSTANTS (ESC.RME ESCAPEBIT) (NOESC.RME 0)) (ACCESSFNS READCODE ((ESCAPE (LOGAND DATUM ESCAPEBIT)) (ESCQUOTE (BITTEST DATUM ESCAPEBIT)) (STOPATOM (BITTEST DATUM STOPATOMBIT)) (INNERESCQUOTE (BITTEST DATUM (LOGOR STOPATOMBIT INNERESCAPEBIT))) ( MACROCONTEXT (LOGAND DATUM CONTEXTMASK)) (MACROP (BITTEST DATUM MACROBIT)) (WAKEUP (LOGAND DATUM WAKEUPMASK)) (BREAK (BITTEST DATUM BREAKBIT)))) (RECORD READMACRODEF (MACROTYPE . MACROFN)) (DATATYPE READTABLEP ((READSA POINTER) (* \; "A CHARTABLE defining syntax of each char") ( READMACRODEFS POINTER) (* \; "A hash table associating macro chars with macro definitions") ( READMACROFLG FLAG) (* \; "True if read macros are enabled (turned off by Interlisp's crufty READMACROS function)") (ESCAPEFLG FLAG) (* \; "True if the char(s) with escape syntax are enabled (turned off by Interlisp's crufty ESCAPE function)" ) (COMMONLISP FLAG) (* \; "True if table is a Common Lisp read table and hence must obey Common Lisp syntax rules") (NUMBERBASE BITS 5) (* \; "Not used") (CASEINSENSITIVE FLAG) (* \; "If true, unescaped lowercase chars are converted to uppercase in symbols") (COMMONNUMSYNTAX FLAG) (* \; "True if number notation includes Common Lisp numbers: rationals as a/b, and the dfls exponent markers" ) (USESILPACKAGE FLAG) (* \; "If true, IL:READ ignores *PACKAGE* and reads in the IL package") (NIL 5 FLAG) (DISPATCHMACRODEFS POINTER) (* \; "An a-list of dispatching macro char and its dispatch definitions") (HASHMACROCHAR BYTE) (* \; "The character code used in this read table for the # dispatch macro") (ESCAPECHAR BYTE) (* \; "The character code used in this read table for single escape") (MULTESCAPECHAR BYTE) (* \; "The character code used in this read table for multiple escape") (PACKAGECHAR BYTE) (* \; "The character code used in this read table for package delimiter") (READTBLNAME POINTER) (* \; "The canonical 'name' of this read table")) READSA _ (|create| CHARTABLE)) (PUTPROP (QUOTE ATBL) (QUOTE IMPORTDATE) (IDATE "20-Apr-2018 17:35:56")) (DATATYPE STREAM ((* |;;| "First 8 words are fixed for BIN, BOUT opcodes. Used to require length of whole datatype be multiple of 4, but Dolphin dead now." ) (COFFSET WORD) (* \; "Offset in CPPTR of next bin or bout") (CBUFSIZE WORD) (* \; "Offset past last byte in that buffer") (PEEKEDCHARP FLAG) (* \; "if true, PEEKEDCHAR contains value of recent call to unread-char") (ACCESSBITS BITS 3) (* \; "What kind of access file is open for (read, write, append)") (CBUFPTR POINTER) (* \; "Pointer to current buffer") (BYTESIZE BYTE) (* \; "Byte size of stream, always 8 for now") (CHARSET BYTE) (* \; "the current character set for this stream. If 255, stream is not runcoded, so read-char consumes two bytes every time" ) (PEEKEDCHAR WORD) (* \; "value of unread-char call") (CHARPOSITION WORD) (* \; "Used by POSITION etc.") (CBUFMAXSIZE WORD) (* \; "on output, the size of the physical buffer--can't extend beyond this") (* |;;| "-------- Above fields (8 words) potentially known to microcode. --------") (NONDEFAULTDATEFLG FLAG) (REVALIDATEFLG FLAG) (MULTIBUFFERHINT FLAG) (* \; "True if stream likes to read and write more than one buffer at a time") (USERCLOSEABLE FLAG) (* \; "Can be closed by CLOSEF; NIL for terminal, dribble...") (FULLFILENAME POINTER) (* \; "Name by which file is known to user") (BINABLE FLAG) (* \; "BIN punts unless this bit on") (BOUTABLE FLAG) (* \; "BOUT punts unless this bit on") (EXTENDABLE FLAG) (* \; "BOUT punts when COFFSET ge CBUFFSIZE unless this bit set and COFFSET lt 512") (CBUFDIRTY FLAG) (* \; "true if BOUT has sullied the current buffer") (DEVICE POINTER) (* \; "FDEV of this guy") (USERVISIBLE FLAG) (* \; "Listed by OPENP; NIL for terminal, dribble ...") (EOLCONVENTION BITS 2) (* \; "End-of-line convention") (NOTXCCS FLAG) (* \; "True if the character encoding format is not XCCS.") ( VALIDATION POINTER) (* \; "A number somehow identifying file, used to determine if file has changed in our absence") (CPAGE POINTER) (* \; "CPAGE,,COFFSET constitutes current file pointer for most randaccess streams") (EPAGE POINTER) (EOFFSET WORD) (* \; "Page, byte offset of eof") (LINELENGTH WORD) (* \; "LINELENGTH of stream, or -1 for no line length") (* |;;| "----Following are device-specific fields----") (* |;;| "Available for device-specific uses, NOT for application use.") (F1 POINTER) (F2 POINTER) (F3 POINTER) (F4 POINTER) (F5 POINTER) (FW6 WORD) (FW7 WORD) (FW8 WORD) (FW9 WORD) (F10 POINTER) (* |;;| "----Following only filled in for open streams----") (STRMBINFN POINTER) (* \; "Either the BIN fn from the FDEV, or a trap") (STRMBOUTFN POINTER) (* \; "Either the BIN fn from the FDEV, or a trap") (OUTCHARFN POINTER) (* \; "Called by \\OUTCHAR, the normal character printer.") (ENDOFSTREAMOP POINTER) (* \; "Called if EOF and we try to read.") (OTHERPROPS POINTER) (* \; "PROP LIST for holding other info.") ( IMAGEOPS POINTER) (* \; "Image operations vector") (IMAGEDATA POINTER) (* \; "Image instance variables--format depends on IMAGEOPS value") (BUFFS POINTER) (* \; "Buffer chain for pmapped streams") (MAXBUFFERS WORD) (* \; "Max # of buffers the system will allocate.") (LASTCCODE WORD) (* \; "After READ, RATOM, etc, the charcode that will be returned (as a character) by LASTC. If there is none, this field is 65535." ) (EXTRASTREAMOP POINTER) (* \; "For use of applications programs, not devices")) (BLOCKRECORD STREAM ((NIL 2 WORD) (UCODEFLAGS1 BITS 1) (* |;;| "respecification of access bits:") (RANDOMWRITEABLE FLAG) ( * \; "File open for output (access = OUTPUT or BOTH)") (APPENDABLE FLAG) (* \; "File open for append (OUTPUT or APPEND or BOTH)") (READABLE FLAG) (* \; "File open for read (READ or BOTH)") (NIL POINTER))) (BLOCKRECORD STREAM ((NIL 4 WORD) (NIL BITS 14) ( * |;;| "JIS character encoding format specific, overrides CHARSET field.") (IN.KANJIIN FLAG) (* \; "True if input stream is in Kanji-in mode.") (OUT.KANJIIN FLAG) (* \; "True if output stream is in Kanji-in mode."))) (ACCESSFNS STREAM ((ACCESS \\GETACCESS \\SETACCESS) ( FULLNAME (OR (|fetch| (STREAM FULLFILENAME) |of| DATUM) DATUM)) (NAMEDP (AND (|fetch| (STREAM FULLFILENAME) |of| DATUM) T)))) (ACCESSFNS STREAM (EXTERNALFORMAT (LISTGET (|ffetch| (STREAM OTHERPROPS) |of| DATUM) (QUOTE EXTERNALFORMAT)) (LET ((PROPS (|ffetch| (STREAM OTHERPROPS) |of| DATUM) )) (|freplace| (STREAM NOTXCCS) |of| DATUM |with| T) (COND (PROPS (LISTPUT PROPS (QUOTE EXTERNALFORMAT ) NEWVALUE)) (T (|freplace| (STREAM OTHERPROPS) |of| DATUM |with| (LIST (QUOTE EXTERNALFORMAT) NEWVALUE)))) (|freplace| (STREAM OUTCHARFN) |of| DATUM |with| (|ffetch| (EXTERNALFORMAT FILEOUTCHARFN) |of| NEWVALUE)) (AND (|ffetch| (EXTERNALFORMAT EOLVALID) |of| NEWVALUE) (|freplace| (STREAM EOLCONVENTION) |of| DATUM |with| (|ffetch| (EXTERNALFORMAT EOL) |of| NEWVALUE)))))) (ACCESSFNS STREAM (EXTERNALFORMAT.NAME (LISTGET (|ffetch| (STREAM OTHERPROPS) |of| DATUM) (QUOTE EXTERNALFORMAT.NAME)) ( LET ((PROPS (|ffetch| (STREAM OTHERPROPS) |of| DATUM)) (NAME (COND ((LITATOM NEWVALUE) NEWVALUE) (T ( MKATOM NEWVALUE))))) (|freplace| (STREAM NOTXCCS) |of| DATUM |with| T) (COND (PROPS (LISTPUT PROPS ( QUOTE EXTERNALFORMAT.NAME) NAME)) (T (|freplace| (STREAM OTHERPROPS) |of| DATUM |with| (LIST (QUOTE EXTERNALFORMAT.NAME) NAME))))))) (ACCESSFNS STREAM (INCCODEFN (LET ((XFMT (LISTGET (|ffetch| (STREAM OTHERPROPS) |of| DATUM) (QUOTE EXTERNALFORMAT)))) (AND (|type?| EXTERNALFORMAT XFMT) (|fetch| ( EXTERNALFORMAT INCCODEFN) |of| XFMT))))) (ACCESSFNS STREAM (PEEKCCODEFN (LET ((XFMT (LISTGET (|ffetch| (STREAM OTHERPROPS) |of| DATUM) (QUOTE EXTERNALFORMAT)))) (AND (|type?| EXTERNALFORMAT XFMT) (|fetch| (EXTERNALFORMAT PEEKCCODEFN) |of| XFMT))))) (ACCESSFNS STREAM (BACKCHARFN (LET ((XFMT (LISTGET ( |ffetch| (STREAM OTHERPROPS) |of| DATUM) (QUOTE EXTERNALFORMAT)))) (AND (|type?| EXTERNALFORMAT XFMT) (|fetch| (EXTERNALFORMAT BACKCHARFN) |of| XFMT))))) (ACCESSFNS STREAM (FILEOUTCHARFN (|ffetch| (STREAM OUTCHARFN) |of| DATUM))) (SYNONYM CBUFPTR (CPPTR)) USERCLOSEABLE _ T USERVISIBLE _ T ACCESSBITS _ |NoBits| CPAGE _ 0 EPAGE _ 0 BUFFS _ NIL BYTESIZE _ 8 CBUFPTR _ NIL MAXBUFFERS _ (LET NIL (DECLARE ( GLOBALVARS \\STREAM.DEFAULT.MAXBUFFERS)) \\STREAM.DEFAULT.MAXBUFFERS) CHARPOSITION _ 0 LINELENGTH _ ( LET NIL (DECLARE (GLOBALVARS FILELINELENGTH)) FILELINELENGTH) OUTCHARFN _ (FUNCTION \\FILEOUTCHARFN) ENDOFSTREAMOP _ (FUNCTION \\EOSERROR) IMAGEOPS _ \\NOIMAGEOPS EOLCONVENTION _ (SELECTQ (SYSTEMTYPE) (D CR.EOLC) (VAX LF.EOLC) (JERICHO CRLF.EOLC) CR.EOLC) STRMBINFN _ (FUNCTION \\STREAM.NOT.OPEN) STRMBOUTFN _ (FUNCTION \\STREAM.NOT.OPEN) LASTCCODE _ 65535 NOTXCCS _ NIL) (PUTPROPS STREAMOP 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 "STREAMOP - OPNAME not quoted:" ARGS))) (CDDR ARGS))))) (RPAQQ |AppendBit| 2) (RPAQQ |NoBits| 0) (RPAQQ |ReadBit| 1) (RPAQQ |WriteBit| 4) (RPAQ |OutputBits| (LOGOR |AppendBit| |WriteBit|)) (RPAQ |BothBits| (LOGOR |ReadBit| |OutputBits|)) (RPAQQ \\NORUNCODE 255) (CONSTANTS |AppendBit| |NoBits| |ReadBit| |WriteBit| (|OutputBits| (LOGOR |AppendBit| |WriteBit|)) ( |BothBits| (LOGOR |ReadBit| |OutputBits|)) \\NORUNCODE) (PUTPROPS |TestMasked| MACRO ((BITS MASK) (NEQ (LOGAND BITS MASK) 0))) (PUTPROPS APPENDABLE MACRO ((STREAM) (|TestMasked| (|fetch| ACCESSBITS |of| STREAM) |AppendBit|))) (PUTPROPS APPENDONLY MACRO ((STREAM) (EQ (|fetch| ACCESSBITS |of| STREAM) |AppendBit|))) (PUTPROPS DIRTYABLE MACRO ((STREAM) (|TestMasked| (|fetch| ACCESSBITS |of| STREAM) (CONSTANT (LOGOR |AppendBit| |WriteBit|))))) (PUTPROPS OPENED MACRO ((STREAM) (NEQ (|fetch| ACCESSBITS |of| STREAM) |NoBits|))) (PUTPROPS OVERWRITEABLE MACRO ((STREAM) (|TestMasked| (|fetch| ACCESSBITS |of| STREAM) |WriteBit|))) (PUTPROPS READABLE MACRO ((STREAM) (|TestMasked| (|fetch| ACCESSBITS |of| STREAM) |ReadBit|))) (PUTPROPS READONLY MACRO ((STREAM) (EQ (|fetch| ACCESSBITS |of| STREAM) |ReadBit|))) (PUTPROPS WRITEABLE MACRO ((STREAM) (OR (OVERWRITEABLE STREAM) (AND (APPENDABLE STREAM) (\\EOFP STREAM ))))) (PUTPROPS \\RUNCODED MACRO (OPENLAMBDA (STREAM) (* |;;| "returns NIL is the stream is not runcoded, that is, if the stream has 16 bit bytes explicitly represented" ) (* \; "note that neq is ok since charsets are known to be SMALLP's") (NEQ (|fetch| CHARSET |of| STREAM) \\NORUNCODE))) (RPAQQ EOLCONVENTIONS ((CR.EOLC 0) (LF.EOLC 1) (CRLF.EOLC 2))) (RPAQQ CR.EOLC 0) (RPAQQ LF.EOLC 1) (RPAQQ CRLF.EOLC 2) (CONSTANTS (CR.EOLC 0) (LF.EOLC 1) (CRLF.EOLC 2)) (PUTPROPS FDEVOP DMACRO (ARGS (LET ((OPNAME (CAR ARGS)) (METHOD-DEVICE (CADR ARGS)) (TAIL (CDDR ARGS)) ) (COND ((AND (LISTP OPNAME) (EQ (CAR OPNAME) (QUOTE QUOTE))) (BQUOTE (SPREADAPPLY* (|fetch| (FDEV ( \\\, (CADR OPNAME))) |of| (\\\, METHOD-DEVICE)) (\\\,@ TAIL)))) (T (ERROR "OPNAME not quoted: " OPNAME )))))) (PUTPROPS \\RECOGNIZE-HACK DMACRO (ARGS (LET ((NAME (CAR ARGS)) (RECOG (CADR ARGS)) (DEVICE (CADDR ARGS))) (BQUOTE (|if| (|type?| STREAM (\\\, NAME)) |then| (\\\, NAME) |else| (FDEVOP (QUOTE GETFILENAME) (\\\, DEVICE) (\\\, NAME) (\\\, RECOG) (\\\, DEVICE))))))) (DATATYPE FDEV ((RESETABLE FLAG) (* \; "Obsolete") (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" ) (DEVICENAME POINTER) (* \; "Identifying name somehow") (REMOTEP FLAG) (* \; "true if device not local to machine") (SUBDIRECTORIES FLAG) (* \; "true if device has real subdirectories") (INPUT-INDIRECTED FLAG) (* \; "True for devices that indirect their input stream. Method INPUTSTREAM fetches it") ( OUTPUT-INDIRECTED FLAG) (* \; "True for devices that indirect their output stream. Method OUTPUTSTREAM fetches it") (DEVICEINFO POINTER) (* \; "arbitrary device-specific info stored here") (OPENFILELST POINTER) (* \; "Default place to keep list of streams open on this device") (* |;;| "-----Rest of record consists of device \"methods\"-----") (* |;;| "-----Following fields required of all devices-----") (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" ) (EVENTFN POINTER) (* \; "(device event), called before/after logout, sysout, makesys") (* |;;| "-----Following fields required of all named devices, e.g., ones that open files-----") ( DIRECTORYNAMEP POINTER) (* \; "(host/dir) => true if directory exists on host") (OPENFILE POINTER) (* \; "(name access recog otherinfo device) => new stream open on this device, or NIL if name not found") (CLOSEFILE POINTER) (* \; "(stream) => closes stream, returns it") (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" ) (GETFILENAME POINTER) (* \; "(name recog device) => full file name") (DELETEFILE POINTER) (* \; "(name) => deletes file so named, returning name, or NIL on failure. RECOG=OLDEST") (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" ) (RENAMEFILE POINTER) (* \; "(olddevice oldfile newdevice newfile) to rename file on this (olddevice) to a potentially different device." ) (OPENP POINTER) (* \; "(name access dev) => stream if name is open for access, or all open streams if name = NIL") ( REGISTERFILE POINTER) (* \; "(stream dev) => registers stream on its device") (UNREGISTERFILE POINTER) (* \; "(stream dev) => unregisters a stream from its device") (FREEPAGECOUNT POINTER) (* \; "(host/dir dev) => # of free pages on host/dir") (MAKEDIRECTORY POINTER) (* \; "(host/dir dev)") ( 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") ( BREAKCONNECTION POINTER) (* \; "(host fastp dev) => closes connections to host") (* |;;| "-----The following are required methods for operating on open streams-----") (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") (READCHAR POINTER) (* \; "(stream) => next input char") (WRITECHAR POINTER) (* \; "(stream char) => writes char to stream") ( PEEKCHAR POINTER) (UNREADCHAR POINTER) (READP POINTER) (* \; "(stream flag) => T if there is input available from stream right now") (EOFP POINTER) (* \; "(stream) => T if BIN would signal eof.") (BLOCKIN POINTER) (* \; "(stream buffer byteoffset nbytes)") (BLOCKOUT POINTER) (* \; "(stream buffer byteoffset nbytes)") (FORCEOUTPUT POINTER) (* \; "(stream waitForFinish) flushes out to device anything that is buffered awaiting transmission") ( GETFILEINFO POINTER) (* \; "(stream/name attribute device) => value of attribute for open stream or name of closed file") ( SETFILEINFO POINTER) (* \; "(stream/name attribute newvalue device) sets attribute of open stream or closed file of given name") (CHARSETFN POINTER) (* \; "(stream charset) => access function for the charset slot, for benefit of indirect streams. See IMCHARSET for changing it on a file." ) (INPUTSTREAM POINTER) (* \; "(stream) => indirected input stream") (OUTPUTSTREAM POINTER) (* \; "(stream) => indirected output stream") (* |;;| "-----Following are required of random-access streams-----") (GETFILEPTR POINTER) (GETEOFPTR POINTER) (SETFILEPTR POINTER) (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" ) (SETEOFPTR POINTER) (* \; "(stream length) => truncates or lengthens stream to indicated length") ( LASTC POINTER) (* \; "Should be possible only if RANDOMACCESSP") (* |;;| "-----Following used for buffered streams-----") (GETNEXTBUFFER POINTER) (* \; "(stream whatfor noerrorflg) => Disposes of current buffer and optionally reads next. whatfor is READ or WRITE. Can cause EOF error unless noerrorflg" ) (RELEASEBUFFER POINTER) (* \; "(stream) => Does whatever appropriate when CBUFPTR is released") (* |;;| "-----Following used for pagemapped streams-----") (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)" ) (WRITEPAGES POINTER) (* \; "(stream firstpage# buflist) writes from buflist to stream starting at firstpage# of stream") ( TRUNCATEFILE POINTER) (* \; "(stream page offset) make stream's eof be at page,offset, discarding anything after it") (* |;;| "-----For window system, argh-----") (WINDOWOPS POINTER) (* \; "window system operations") (WINDOWDATA POINTER) (* \; "data for window systems") (* |;;| "-----For any stream (here to not recompile everything)-----") (READCHARCODE POINTER) (* \; "Read a character code from the stream (cf BIN for bytes).")) 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) REGISTERFILE _ (FUNCTION NILL) OPENP _ (FUNCTION NILL) UNREGISTERFILE _ (FUNCTION NILL) READCHAR _ (FUNCTION \\GENERIC.READCHAR) WRITECHAR _ (FUNCTION \\GENERIC.WRITECHAR) PEEKCHAR _ ( FUNCTION \\GENERIC.PEEKCHAR) UNREADCHAR _ (FUNCTION \\GENERIC.UNREADCHAR) CHARSETFN _ (FUNCTION \\GENERIC.CHARSET) BREAKCONNECTION _ (FUNCTION NILL) READCHARCODE _ (FUNCTION \\GENERIC.READCCODE)) (RECORD FILEGENOBJ (NEXTFILEFN FILEINFOFN . GENFILESTATE)) (DATATYPE EXTERNALFORMAT ((EOLVALID FLAG) (* \; "If true, the value of EOL field will replace the EOLCONVENTION field of the resulted stream.") (EOL BITS 2) (NIL BITS 1) (INCCODEFN POINTER) (* \; "Called with two arguments -- STREAM and COUNTP") ( PEEKCCODEFN POINTER) (* \; "Called with three arguments -- STREAM, NOERROR and COUNTP") (BACKCHARFN POINTER) (* \; "Called with two arguments -- STREAM and COUNTP") (FILEOUTCHARFN POINTER) (* \; "Called with two arguments -- STREAM and CHARCODE")) EOLVALID _ NIL) (PUTPROPS \\OUTCHAR DMACRO (OPENLAMBDA (STREAM CHARCODE) (STREAMOP (QUOTE OUTCHARFN) STREAM STREAM CHARCODE))) (PUTPROPS \\DEVICE-OPEN-STREAMS MACRO (ARGS (LET ((DEVICE (CAR ARGS))) (BQUOTE (FDEVOP (QUOTE OPENP) ( \\\, DEVICE) NIL NIL (\\\, DEVICE)))))) (PUTPROPS \\CONVERT-PATHNAME DMACRO (OPENLAMBDA (PATHNAME?) (* |;;| "Coerce pathnames to Interlisp strings, for the benefit of antediluvian Interlisp-D file fns") ( CL:TYPECASE PATHNAME? (PATHNAME (INTERLISP-NAMESTRING PATHNAME?)) (T PATHNAME?)))) (DEFOPTIMIZER ACCESS-CHARSET (STREAM &OPTIONAL NEWVALUE) (BQUOTE ((OPENLAMBDA (STRM) (FDEVOP (QUOTE CHARSETFN) (|fetch| (STREAM DEVICE) |of| STRM) STRM (\\\, NEWVALUE))) (\\\, STREAM)))) (PUTPROPS \\DECFILEPTR MACRO ((STREAM X) (\\INCFILEPTR STREAM (IMINUS X)))) (PUTPROPS \\GETFILEPTR MACRO (OPENLAMBDA (STRM) (FDEVOP (QUOTE GETFILEPTR) (|fetch| DEVICE |of| STRM) STRM))) (PUTPROPS \\SIGNEDWIN MACRO ((STREAM) (SIGNED (\\WIN STREAM) BITSPERWORD))) (PUTPROPS \\SIGNEDWOUT MACRO ((STREAM N) (\\WOUT STREAM (UNSIGNED N BITSPERWORD)))) (PUTPROPS \\WIN MACRO (OPENLAMBDA (STREAM) (|create| WORD HIBYTE _ (\\BIN STREAM) LOBYTE _ (\\BIN STREAM)))) (PUTPROPS \\WOUT MACRO (OPENLAMBDA (STREAM W) (\\BOUT STREAM (|fetch| HIBYTE |of| W)) (\\BOUT STREAM ( |fetch| LOBYTE |of| W)))) (PUTPROPS \\BINS BYTEMACRO (OPENLAMBDA (STRM BASE OFF NBYTES) (FDEVOP (QUOTE BLOCKIN) (|fetch| (STREAM DEVICE) |of| STRM) STRM BASE OFF NBYTES))) (PUTPROPS \\BOUTS BYTEMACRO (OPENLAMBDA (STRM BASE OFF NBYTES) (FDEVOP (QUOTE BLOCKOUT) (|fetch| ( STREAM DEVICE) |of| STRM) STRM BASE OFF NBYTES))) (PUTPROPS \\EOFP BYTEMACRO (OPENLAMBDA (STRM) (FDEVOP (QUOTE EOFP) (|fetch| (STREAM DEVICE) |of| STRM) STRM))) (PUTPROPS SIZE.FROM.LENGTH MACRO (LAMBDA (LEN) (DECLARE (LOCALVARS LEN)) (AND LEN (FOLDHI LEN BYTESPERPAGE)))) (RPAQQ |BitsPerByte| 8) (RPAQ |ByteOffsetSize| (SELECTQ (SYSTEMTYPE) (VAX 10) 9)) (RPAQQ |WordsPerPage| 256) (CONSTANTS |BitsPerByte| (|ByteOffsetSize| (SELECTQ (SYSTEMTYPE) (VAX 10) 9)) |WordsPerPage|) (RPAQ \\MAXFILEPTR (SUB1 (LLSH 1 30))) (CONSTANTS (\\MAXFILEPTR (SUB1 (LLSH 1 30)))) (ACCESSFNS BYTEPTR ((PAGE (FOLDLO DATUM BYTESPERPAGE)) (OFFSET (MOD DATUM BYTESPERPAGE))) (TYPE? (AND (FIXP DATUM) (IGEQ DATUM 0) (ILEQ DATUM \\MAXFILEPTR))) (CREATE (IPLUS (UNFOLD PAGE BYTESPERPAGE) OFFSET))) (PUTPROP (QUOTE FILEIO) (QUOTE IMPORTDATE) (IDATE "13-Aug-2020 11:43:08")) (BLOCKRECORD FIXP ((HINUM WORD) (LONUM WORD)) (CREATE (CREATECELL \\FIXP)) (TYPE? (EQ (NTYPX DATUM) \\FIXP))) (RPAQQ MAX.SMALL.INTEGER 65535) (RPAQQ MAX.POS.HINUM 32767) (CONSTANTS (MAX.SMALL.INTEGER 65535) (MAX.POS.HINUM 32767)) (PUTPROPS .UNBOX. MACRO (ARGS (LET ((ARG-FORM (CAR ARGS)) (HIGH-VAR (CADR ARGS)) (LOW-VAR (CADDR ARGS) ) (BIGNUM-FORM (CADDDR ARGS))) (BQUOTE (PROG NIL UBLP (SELECTC (NTYPX (\\\, ARG-FORM)) (\\FIXP (SETQ ( \\\, HIGH-VAR) (|ffetch| (FIXP HINUM) |of| (\\\, ARG-FORM))) (SETQ (\\\, LOW-VAR) (|ffetch| (FIXP LONUM) |of| (\\\, ARG-FORM)))) (\\SMALLP (COND ((ILEQ 0 (\\\, ARG-FORM)) (SETQ (\\\, HIGH-VAR) 0) ( SETQ (\\\, LOW-VAR) (\\\, ARG-FORM))) (T (SETQ (\\\, HIGH-VAR) 65535) (SETQ (\\\, LOW-VAR) (\\LOLOC ( \\\, ARG-FORM)))))) (\\FLOATP (SETQ (\\\, ARG-FORM) (\\FIXP.FROM.FLOATP (\\\, ARG-FORM))) (GO UBLP)) ( COND ((TYPENAMEP (\\\, ARG-FORM) (QUOTE RATIO)) (SETQ (\\\, ARG-FORM) (IQUOTIENT (CL::RATIO-NUMERATOR (\\\, ARG-FORM)) (CL::RATIO-DENOMINATOR (\\\, ARG-FORM)))) (GO UBLP)) (\\\,@ (COND (BIGNUM-FORM ( BQUOTE (((CL:INTEGERP (\\\, ARG-FORM)) (\\\, BIGNUM-FORM))))) (T (BQUOTE (((CL:INTEGERP (\\\, ARG-FORM )) (\\ILLEGAL.ARG (\\\, ARG-FORM)))))))) (T (CL::%NOT-NONCOMPLEX-NUMBER-ERROR (\\\, ARG-FORM)))))))))) (PUTPROPS .NEGATE. MACRO ((HY LY) (COND ((EQ 0 LY) (AND (NEQ HY 0) (SETQ HY (ADD1 (IDIFFERENCE MAX.SMALL.INTEGER HY))))) (T (SETQ HY (IDIFFERENCE MAX.SMALL.INTEGER HY)) (SETQ LY (ADD1 (IDIFFERENCE MAX.SMALL.INTEGER LY))))))) (PUTPROPS .LLSH1. MACRO ((HI LO) (* \; "shift the pair left one, assuming no overflow") (SETQ HI (LLSH HI 1)) (SETQ LO (LLSH (COND ((IGREATERP LO MAX.POS.HINUM) (|add| HI 1) (LOGAND LO MAX.POS.HINUM)) (T LO)) 1)))) (PUTPROPS .LRSH1. MACRO ((HI LO) (SETQ LO (LRSH LO 1)) (COND ((NEQ (LOGAND HI 1) 0) (SETQ LO (IPLUS LO \\SIGNBIT)))) (SETQ HI (LRSH HI 1)))) (PUTPROPS .BOXIPLUS. MACRO (OPENLAMBDA (X Y) (PROG ((HX (\\GETBASE X 0)) (LX (\\GETBASE X 1)) HY LY) ( .UNBOX. Y HY LY) (SETQ HX (COND ((IGREATERP HX (IDIFFERENCE MAX.SMALL.INTEGER HY)) (IDIFFERENCE HX ( ADD1 (IDIFFERENCE MAX.SMALL.INTEGER HY)))) (T (IPLUS HX HY)))) (* |Add| |high| |parts|) (\\PUTBASE X 1 (COND ((IGREATERP LX (IDIFFERENCE MAX.SMALL.INTEGER LY)) (* |Carry| |into| |high| |part.|) (SETQ HX ( COND ((EQ HX MAX.SMALL.INTEGER) 0) (T (ADD1 HX)))) (IDIFFERENCE LX (ADD1 (IDIFFERENCE MAX.SMALL.INTEGER LY)))) (T (IPLUS LX LY)))) (\\PUTBASE X 0 HX) (RETURN X)))) (PUTPROPS |PutUnboxed| DMACRO (= . \\PUTFIXP)) (PUTPROP (QUOTE LLARITH) (QUOTE IMPORTDATE) (IDATE "16-May-1990 18:47:56")) (PUTPROPS POLYEVAL DMACRO ((X COEFFS DEGREE) (* \; "execute the POLYEVAL opcode on the value X, the array COEFFS with degree DEGREE") (\\FLOATBOX (( OPCODES UBFLOAT3 0) (\\FLOATUNBOX X) (|fetch| (ARRAYP BASE) |of| COEFFS) DEGREE)))) (BLOCKRECORD FLOATP ((SIGNBIT BITS 1) (EXPONENT BITS 8) (HIFRACTION BITS 7) (LOFRACTION BITS 16)) ( BLOCKRECORD FLOATP ((HIWORD WORD) (LOWORD WORD))) (BLOCKRECORD FLOATP ((NIL BITS 9) (LONGFRACTION BITS 23))) (BLOCKRECORD FLOATP ((FLOATCONTENTS BITS 32))) (BLOCKRECORD FLOATP ((NIL BITS 1) ( HIWORDNOSIGNBIT BITS 15))) (CREATE (\\FLOATBOX (\\VAG2 (LOGOR (LLSH SIGNBIT (PLUS 7 8)) (LLSH EXPONENT 7) HIFRACTION) LOFRACTION))) LOFRACTION _ 0 HIFRACTION _ 0 EXPONENT _ 0 SIGNBIT _ 0 (ACCESSFNS FLOATP ((EXP (LOGAND (LRSH (\\HILOC (\\FLOATUNBOX DATUM)) 7) 255)) (HIFRAC (LOGAND (\\HILOC (\\FLOATUNBOX DATUM)) 127))))) (RPAQQ MAX.DIGITS.ACCURACY 9) (CONSTANTS (MAX.DIGITS.ACCURACY 9)) (PUTPROPS \\CALLER.ARGS MACRO (X (LET ((ARGS (CAR X)) (FORMS (CDR X))) (BQUOTE (PROGN (\\SLOWRETURN) ( LET ((AL (\\MYALINK)) NEXT (\\\,@ (|for| VAR |in| ARGS |collect| (COND ((LISTP VAR) (LIST (CAR VAR) 0) ) (T VAR))))) (DECLARE (\\\,@ (|for| VAR |in| ARGS |when| (LISTP VAR) |collect| (BQUOTE (TYPE (\\\, ( SELECTQ (CADR VAR) ((FLOATING FLOATP) (CADR VAR)) (HELP))) (\\\, (CAR VAR))))))) (SETQ NEXT (|fetch| ( FX NEXTBLOCK) |of| AL)) (\\\,@ (|for| X |in| (REVERSE ARGS) |collect| (LET ((FORMS (BQUOTE ( \\.GETBASE32 \\STACKSPACE (SETQ NEXT (IDIFFERENCE NEXT WORDSPERCELL)))))) (COND ((LISTP X) (BQUOTE ( SETQ (\\\, (CAR X)) (\\FLOATBOX (\\\, FORMS))))) (T (BQUOTE (SETQ (\\\, X) (\\\, FORMS)))))))) ( \\MAKEFREEBLOCK NEXT (TIMES (\\\, (LENGTH ARGS)) WORDSPERCELL)) (|replace| (FX NEXTBLOCK) |of| AL |with| NEXT) (PROGN (\\\,@ FORMS)))))))) (PUTPROP (QUOTE LLFLOAT) (QUOTE IMPORTDATE) (IDATE "16-May-1990 19:26:51")) (DEFOPTIMIZER FONTPROP (&REST ARGS) (SELECTQ (AND (EQ (CAADR ARGS) (QUOTE QUOTE)) (CADADR ARGS)) ( ASCENT (LIST (QUOTE FONTASCENT) (CAR ARGS))) (DESCENT (LIST (QUOTE FONTDESCENT) (CAR ARGS))) (HEIGHT ( LIST (QUOTE FONTHEIGHT) (CAR ARGS))) (QUOTE IGNOREMACRO))) (DATATYPE FONTCLASS ((PRETTYFONT# BYTE) DISPLAYFD PRESSFD INTERPRESSFD OTHERFDS FONTCLASSNAME)) (DATATYPE FONTDESCRIPTOR ((FONTDEVICE POINTER) (FONTFAMILY POINTER) (FONTSIZE POINTER) (FONTFACE POINTER) (|\\SFAscent| WORD) (|\\SFDescent| WORD) (|\\SFHeight| WORD) (ROTATION WORD) (FBBOX SIGNEDWORD) (FBBOY SIGNEDWORD) (FBBDX SIGNEDWORD) (FBBDY SIGNEDWORD) (|\\SFLKerns| POINTER) ( |\\SFRWidths| POINTER) (FONTDEVICESPEC POINTER) (* \; "Holds the spec by which the font is known to the printing device, if coercion has been done") ( OTHERDEVICEFONTPROPS POINTER) (* \; "For individual devices to hang special information") (FONTSCALE POINTER) (\\SFFACECODE BITS 8) (FONTAVGCHARWIDTH WORD) (* \; "Set in FONTCREATE, used to fix up the linelength when DSPFONT is called") (FONTIMAGEWIDTHS POINTER) ( * \; "This is the image width, as opposed to the advanced width; initial hack for accents, kerning. Fields is referenced by FONTCREATE." ) (FONTCHARSETVECTOR POINTER) (* \; "A 256-pointer block, with one pointer per 'character set' --each group of 256 character codes. Each pointer is either NIL if there's no info for that charset, or is a CHARSETINFO, containing widths, char bitmap, etc for the characters in that charset." ) (FONTEXTRAFIELD2 POINTER)) FONTCHARSETVECTOR _ (\\CREATEFONTCHARSETVECTOR)) (RECORD FONTFACE (WEIGHT SLOPE EXPANSION) (ACCESSFNS ((COLOR (CDDDR DATUM) (RPLACD (CDDR DATUM) NEWVALUE)) (BACKCOLOR (COND ((CDDDR DATUM) (CAR (CDDDR DATUM)))) (PROGN (COND ((NULL (CDDDR DATUM)) ( RPLACD (CDDR DATUM) (LIST NIL NIL)))) (RPLACA (CDDDR DATUM) NEWVALUE))) (FORECOLOR (COND ((CDDDR DATUM ) (CADR (CDDDR DATUM)))) (PROGN (COND ((NULL (CDDDR DATUM)) (RPLACD (CDDR DATUM) (LIST NIL NIL)))) ( RPLACA (CDR (CDDDR DATUM)) NEWVALUE))))) WEIGHT _ (QUOTE MEDIUM) SLOPE _ (QUOTE REGULAR) EXPANSION _ ( QUOTE REGULAR) (TYPE? LISTP)) (DATATYPE CHARSETINFO (WIDTHS (* \; "The advance-width of each character, an array indexed by charcode. Usually the same as the imagewidth, but can differ for accents, kerns kerns. This is what should be used for stringwidth calculations." ) OFFSETS (* \; "Offset of each character into the image bitmap; X value of left edge") IMAGEWIDTHS ( * \; "imagewidths is not automagically allocated since it is not always needed") CHARSETBITMAP (* \; "Bitmap containing the character images, indexed by OFFSETS") YWIDTHS (CHARSETASCENT WORD) (* \; "Max ascent for all characters in this CHARSET") (CHARSETDESCENT WORD) (* \; "Max descent for all characters in this CHARSET") LEFTKERN) WIDTHS _ (\\CREATECSINFOELEMENT) OFFSETS _ (\\CREATECSINFOELEMENT)) (PUTPROPS FONTASCENT MACRO ((FONTSPEC) (|ffetch| |\\SFAscent| |of| (\\GETFONTDESC FONTSPEC)))) (PUTPROPS FONTDESCENT MACRO ((FONTSPEC) (|ffetch| |\\SFDescent| |of| (\\GETFONTDESC FONTSPEC)))) (PUTPROPS FONTHEIGHT MACRO ((FONTSPEC) (|ffetch| |\\SFHeight| |of| (\\GETFONTDESC FONTSPEC)))) (PUTPROPS \\FGETOFFSET DMACRO ((OFFSETSBLOCK CHAR8CODE) (\\GETBASE OFFSETSBLOCK CHAR8CODE))) (PUTPROPS \\FSETOFFSET DMACRO ((OFFSETSBLOCK CHAR8CODE OFFSET) (\\PUTBASE OFFSETSBLOCK CHAR8CODE OFFSET))) (PUTPROPS \\FGETWIDTH DMACRO ((WIDTHSBLOCK CHAR8CODE) (\\GETBASE WIDTHSBLOCK CHAR8CODE))) (PUTPROPS \\FSETWIDTH DMACRO ((WIDTHSBLOCK INDEX WIDTH) (\\PUTBASE WIDTHSBLOCK INDEX WIDTH))) (PUTPROPS \\FGETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE) (\\FGETWIDTH (|ffetch| (CHARSETINFO WIDTHS) |of| (\\GETCHARSETINFO (\\CHARSET CHARCODE) FONTDESC)) (\\CHAR8CODE CHARCODE)))) (PUTPROPS \\FSETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE WIDTH) (\\FSETWIDTH (|ffetch| ( CHARSETINFO WIDTHS) |of| (\\GETCHARSETINFO (\\CHARSET CHARCODE) FONTDESC)) (\\CHAR8CODE CHARCODE) WIDTH))) (PUTPROPS \\FGETIMAGEWIDTH MACRO ((IMAGEWIDTHSBLOCK CHAR8CODE) (\\GETBASE IMAGEWIDTHSBLOCK CHAR8CODE)) ) (PUTPROPS \\FSETIMAGEWIDTH DMACRO ((WIDTHSBLOCK INDEX WIDTH) (\\PUTBASE WIDTHSBLOCK INDEX WIDTH))) (PUTPROPS \\GETCHARSETINFO MACRO ((CHARSET FONTDESC NOSLUG?) (* |;;| "fetches the charsetinfo for charset CHARSET in fontdescriptor FONTDESC. If NIL, then creates the required charset." ) (* |;;| "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") (OR (\\GETBASEPTR (|ffetch| FONTCHARSETVECTOR |of| FONTDESC) (UNFOLD CHARSET 2)) (\\CREATECHARSET CHARSET FONTDESC NOSLUG?)))) (PUTPROPS \\CREATECSINFOELEMENT MACRO (NIL (\\ALLOCBLOCK (FOLDHI (IPLUS \\MAXTHINCHAR 3) WORDSPERCELL) ))) (PUTPROPS \\CREATEFONTCHARSETVECTOR MACRO (NIL (* \; "Allocates a block for the character set records" ) (\\ALLOCBLOCK (ADD1 \\MAXCHARSET) T))) (DEFMACRO \\CREATEKERNELEMENT NIL (BQUOTE (CL:MAKE-ARRAY (IPLUS \\MAXTHINCHAR 3) :ELEMENT-TYPE (QUOTE (SIGNED-BYTE 16)) :INITIAL-ELEMENT 0))) (DEFMACRO \\FSETLEFTKERN (LEFTKERNBLOCK INDEX KERNVALUE) (BQUOTE (CL:SETF (CL:AREF (\\\, LEFTKERNBLOCK ) (\\\, INDEX)) (\\\, KERNVALUE)))) (DEFMACRO \\FGETLEFTKERN (LEFTKERNBLOCK CHAR8CODE) (BQUOTE (CL:AREF (\\\, LEFTKERNBLOCK) (\\\, CHAR8CODE)))) (RPAQQ \\MAXNSCHAR 65535) (CONSTANTS (\\MAXNSCHAR 65535)) (PUTPROP (QUOTE FONT) (QUOTE IMPORTDATE) (IDATE "28-Jun-1999 16:29:49")) (BLOCKRECORD KEYACTION ((* |;;| "KEYACTION Table: For interpreting keystrokes. Stored as a 8-cell block of untyped pointer hunk storage." ) FLAGS (* \; "Flag byte per key# (one for down-transtion, 1 for up-.) to describe whether lockshifting occrrs, you ignore the transition, etc." ) CODES (* \; "Table of character codes generated by each key when no shift key is pressed.") SHIFTCODES (* \; "Table of character codes generated by each key when the shift key is pressed.") ARMED (* \; "Not sure...") INTERRUPTLIST (* \; "List of armed interrupts?") ALTGRAPHCODES (* \; "Table of codes to be generated when the ALT-GRAPH key is pressed.") DEADKEYLIST (* \; "Block of dead-key handlers, with the nominal up-transition fields filled by the shifted-case tables. Each \"table\" is an ALIST of orignal code => accented code. no entry means punt the accent.." )) FLAGS _ (\\ALLOCBLOCK (FOLDHI (IPLUS \\NKEYS \\NKEYS) BYTESPERCELL)) CODES _ (\\ALLOCBLOCK (FOLDHI (PLUS \\NKEYS \\NKEYS) WORDSPERCELL)) SHIFTCODES _ (\\ALLOCBLOCK (FOLDHI (PLUS \\NKEYS \\NKEYS) WORDSPERCELL)) ARMED _ (\\ALLOCBLOCK (FOLDHI (ADD1 \\MAXTHINCHAR) BITSPERCELL)) ALTGRAPHCODES _ ( \\ALLOCBLOCK (FOLDHI (PLUS \\NKEYS \\NKEYS) WORDSPERCELL)) DEADKEYLIST _ (\\ALLOCBLOCK (PLUS \\NKEYS \\NKEYS \\NKEYS \\NKEYS) T) (CREATE (\\ALLOCBLOCK 7 PTRBLOCK.GCT)) (TYPE? (AND (\\BLOCKDATAP DATUM) ( IGEQ (\\#BLOCKDATACELLS DATUM) 5) (OR (NULL (FETCH (KEYACTION INTERRUPTLIST) OF DATUM)) (LISTP (FETCH INTERRUPTLIST OF DATUM))) (\\BLOCKDATAP (FETCH (KEYACTION FLAGS) DATUM)) (\\BLOCKDATAP (FETCH ( KEYACTION CODES) DATUM)) (\\BLOCKDATAP (FETCH (KEYACTION ARMED) DATUM))))) (RPAQQ \\NKEYS 112) (CONSTANTS \\NKEYS) (DEFOPTIMIZER KEYDOWNP (KEYNAME) (BQUOTE (\\NEWKEYDOWNP (\\KEYNAMETONUMBER (\\\, KEYNAME))))) (PUTPROPS XKEYDOWNP MACRO ((KEYNAME) (KEYDOWNP1 (\\KEYNAMETONUMBER KEYNAME)))) (PUTPROPS KEYDOWNP1 MACRO (OPENLAMBDA (KEYNUMBER) (DECLARE (GLOBALVARS \\EM.KBDAD0 \\EM.KBDAD1 \\EM.KBDAD2 \\EM.KBDAD3 \\EM.UTILIN \\EM.KBDAD4 \\EM.KBDAD5)) (PROG NIL (RETURN (EQ 0 (LOGAND (LRSH ( LLSH 1 15) (PROGN (* (IMOD KEYNUMBER BITSPERWORD) - GETD |cause| IMOD |and| BITSPERWORD |not| |exported| |to| |user|) (LOGAND KEYNUMBER 15))) (\\GETBASE (SELECTQ (PROGN (* (FOLDLO KEYNUMBER BITSPERWORD) GETD |follows| |since| FOLDLO |and| BITSPERWORD |not| |exported| |to| |user|) (LRSH KEYNUMBER 4)) (0 \\EM.KBDAD0) (1 \\EM.KBDAD1) (2 \\EM.KBDAD2) (3 \\EM.KBDAD3) (4 \\EM.UTILIN) (5 (OR \\EM.KBDAD4 (RETURN))) (6 (OR \\EM.KBDAD5 (RETURN))) (RETURN)) 0))))))) (PUTPROPS \\NEWKEYDOWNP MACRO ((KEYNUMBER) (EQ 0 (\\GETBASEBIT \\LASTKEYSTATE KEYNUMBER)))) (GLOBALVARS \\KEYBOARD.DEVICE \\KEYBOARD.STREAM) (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) (PUTPROPS \\SETMOUSEXY MACRO ((XPOS YPOS) (PROGN (SELECTC \\MACHINETYPE (\\DAYBREAK ( |\\DoveMisc.SetMousePosition| XPOS YPOS)) (\\MAIKO (SUBRCALL SETMOUSEXY XPOS YPOS)) (\\DANDELION (|do| (PROGN (|replace| (IOPAGE NEWMOUSEX) |of| \\IOPAGE |with| XPOS) (|replace| (IOPAGE NEWMOUSEY) |of| \\IOPAGE |with| YPOS)) |repeatuntil| (ILESSP (|fetch| (IOPAGE NEWMOUSESTATE) |of| \\IOPAGE) 32768)) (* \; "smash position until mouse says it is not busy") (|replace| (IOPAGE NEWMOUSEX) |of| \\IOPAGE |with| XPOS) (|replace| (IOPAGE NEWMOUSEY) |of| \\IOPAGE |with| YPOS) (|replace| (IOPAGE NEWMOUSESTATE ) |of| \\IOPAGE |with| 32768)) NIL) (PROGN (\\PUTBASE \\EM.MOUSEX 0 XPOS) (\\PUTBASE \\EM.MOUSEY 0 YPOS))))) (GLOBALVARS \\EM.MOUSEX \\EM.MOUSEY \\EM.CURSORX \\EM.CURSORY \\EM.UTILIN \\EM.REALUTILIN \\EM.KBDAD0 \\EM.KBDAD1 \\EM.KBDAD2 \\EM.KBDAD3 \\EM.KBDAD4 \\EM.KBDAD5 \\EM.DISPINTERRUPT \\EM.DISPLAYHEAD \\EM.CURSORBITMAP \\MACHINETYPE \\DEFAULTKEYACTION \\COMMANDKEYACTION \\CURRENTKEYACTION \\PERIODIC.INTERRUPT \\PERIODIC.INTERRUPT.FREQUENCY) (PUTPROP (QUOTE LLKEY) (QUOTE IMPORTDATE) (IDATE "19-May-2018 13:32:12")) (DATATYPE PILOTBBT ((PBTDESTLO WORD) (PBTDESTHI WORD) (PBTDESTBIT WORD) (PBTDESTBPL SIGNEDWORD) ( PBTSOURCELO WORD) (PBTSOURCEHI WORD) (PBTSOURCEBIT WORD) (PBTSOURCEBPL SIGNEDWORD) (PBTWIDTH WORD) ( PBTHEIGHT WORD) (PBTFLAGS WORD) (NIL 5 WORD)) (BLOCKRECORD PILOTBBT ((NIL 7 WORD) (NIL BITS 4) ( PBTGRAYOFFSET BITS 4) (PBTGRAYWIDTHLESSONE BITS 4) (PBTGRAYHEIGHTLESSONE BITS 4) (NIL 2 WORD) ( PBTBACKWARD FLAG) (PBTDISJOINT FLAG) (PBTDISJOINTITEMS FLAG) (PBTUSEGRAY FLAG) (PBTSOURCETYPE BITS 1) (PBTOPERATION BITS 2) (NIL BITS 9))) (ACCESSFNS PILOTBBT ((PBTSOURCE (\\VAG2 (|fetch| PBTSOURCEHI |of| DATUM) (|fetch| PBTSOURCELO |of| DATUM)) (PROGN (|replace| PBTSOURCEHI |of| DATUM |with| (\\HILOC NEWVALUE)) (|replace| PBTSOURCELO |of| DATUM |with| (\\LOLOC NEWVALUE)))) (PBTDEST (\\VAG2 (|fetch| PBTDESTHI |of| DATUM) (|fetch| PBTDESTLO |of| DATUM)) (PROGN (|replace| PBTDESTHI |of| DATUM |with| ( \\HILOC NEWVALUE)) (|replace| PBTDESTLO |of| DATUM |with| (\\LOLOC NEWVALUE)))))) (SYSTEM)) (DATATYPE \\DISPLAYDATA (DDXPOSITION DDYPOSITION DDXOFFSET DDYOFFSET |DDDestination| |DDClippingRegion| DDFONT |DDSlowPrintingCase| DDWIDTHSCACHE DDOFFSETSCACHE DDCOLOR DDLINEFEED |DDRightMargin| |DDLeftMargin| |DDScroll| DDOPERATION DDSOURCETYPE (|DDClippingLeft| WORD) ( |DDClippingRight| WORD) (|DDClippingBottom| WORD) (|DDClippingTop| WORD) (NIL WORD) (DDHELDFLG FLAG) ( XWINDOWHINT XPOINTER) (DDPILOTBBT POINTER) DDXSCALE DDYSCALE DDCHARIMAGEWIDTHS DDEOLFN DDPAGEFULLFN |DDTexture| DDMICAXPOS DDMICAYPOS DDMICARIGHTMARGIN DDCHARSET (DDCHARSETASCENT WORD) (DDCHARSETDESCENT WORD) DDCHARHEIGHTDELTA (DDSPACEWIDTH WORD)) DDPILOTBBT _ (|create| PILOTBBT PBTDISJOINT _ T) |DDLeftMargin| _ 0 |DDRightMargin| _ SCREENWIDTH DDXPOSITION _ 0 DDYPOSITION _ 0 DDXOFFSET _ 0 DDYOFFSET _ 0 |DDClippingRegion| _ (|create| REGION) |DDDestination| _ |ScreenBitMap| DDXSCALE _ 1 DDYSCALE _ 1 |DDTexture| _ 0 (ACCESSFNS ((DDFOREGROUNDCOLOR (PROG ((VAL (|fetch| (\\DISPLAYDATA DDCOLOR) |of| DATUM))) (OR (FIXP VAL) (BITMAPP VAL) (AND (NULL VAL) 1) (CAR VAL) (MAXIMUMCOLOR ( BITSPERPIXEL (|fetch| (\\DISPLAYDATA |DDDestination|) |of| DATUM)))))) (DDBACKGROUNDCOLOR (OR (|fetch| (\\DISPLAYDATA |DDTexture|) |of| DATUM) 0)))) (SYSTEM)) (RECORD DISPLAYSTATE (ONOFF)) (RECORD DISPLAYINFO (DITYPE DIWIDTH DIHEIGHT DIBITSPERPIXEL DIWSOPS)) (PUTPROPS \\GETDISPLAYDATA MACRO (ARGS (COND ((CADR ARGS) (SUBPAIR (QUOTE (STRM STRMVAR)) ARGS (QUOTE (\\DTEST (|fetch| (STREAM IMAGEDATA) |of| (SETQ STRMVAR (\\OUTSTREAMARG STRM))) (QUOTE \\DISPLAYDATA)) ))) (T (SUBST (CAR ARGS) (QUOTE STRM) (QUOTE (\\DTEST (|fetch| (STREAM IMAGEDATA) |of| (\\OUTSTREAMARG STRM)) (QUOTE \\DISPLAYDATA)))))))) (PUTPROPS \\BITMASK MACRO ((N) (\\WORDELT BITMASKARRAY (LOGAND N 15)))) (PUTPROPS \\4BITMASK MACRO ((N) (\\WORDELT 4BITMASKARRAY (LOGAND N 3)))) (PUTPROPS \\NOTBITMASK MACRO ((N) (DECLARE (GLOBALVARS NOTBITMASKARRAY)) (\\WORDELT NOTBITMASKARRAY ( LOGAND N 15)))) (PUTPROPS \\NOT4BITMASK MACRO ((N) (\\WORDELT NOT4BITMASKARRAY (LOGAND N 3)))) (GLOBALVARS BITMASKARRAY NOTBITMASKARRAY 4BITMASKARRAY NOT4BITMASKARRAY) (RPAQQ WORDMASK 65535) (CONSTANTS (WORDMASK 65535)) (PUTPROPS \\INVALIDATEDISPLAYCACHE MACRO ((DISPLAYDATA) (* |This| |marks| |the| |character-printing| |caches| |of| |the| |displaystream| |as| |invalid.| |Needed| |when| |the| |font| |or| Y |position| |changes|) (|freplace| (\\DISPLAYDATA DDCHARSET) |of| DISPLAYDATA |with| MAX.SMALLP) (|freplace| ( \\DISPLAYDATA DDCHARSETASCENT) |of| DISPLAYDATA |with| MAX.SMALLP))) (PUTPROPS \\DSPGETCHARWIDTH MACRO ((CHARCODE DD) (\\FGETWIDTH (|ffetch| (\\DISPLAYDATA DDWIDTHSCACHE) |of| DD) CHARCODE))) (PUTPROPS \\DSPGETCHARIMAGEWIDTH MACRO ((CHARCODE DD) (\\FGETIMAGEWIDTH (|ffetch| (\\DISPLAYDATA DDCHARIMAGEWIDTHS) |of| DD) CHARCODE))) (PUTPROPS \\DSPGETCHAROFFSET MACRO ((CHARCODE DD) (\\GETBASE (|ffetch| (\\DISPLAYDATA DDOFFSETSCACHE) |of| DD) CHARCODE))) (PUTPROPS \\CONVERTOP MACRO ((OP) (* |rrb| "14-NOV-80 11:14") (* |Only| |for| |alto| |bitblt| !!) ( SELECTQ OP (|replace| 0 |of| NIL |with| NIL) (PAINT 1) (INVERT 2) (ERASE 3) 0))) (PUTPROPS |\\SFInvert| MACRO ((|BitMap| \y) (* |corrects| |for| |the| |fact| |that| |alto| |bitmaps| |are| |stored| |with| 0\,0 |as| |upper| |left| |while| |lisp| |bitmaps| |have| 0\,0 |as| |lower| |left.| |The| |correction| |is| |actually| |off| |by| |one| (|greater|) |because| \a |majority| |of| |the| |places| |that| |it| |is| |called| |actually| |need| |one| |more| |than| |corrected| Y |value.|) (IDIFFERENCE (|fetch| (BITMAP BITMAPHEIGHT) |of| |BitMap|) \y))) (PUTPROPS |\\SFReplicate| MACRO (LAMBDA (|pattern|) (LOGOR |pattern| (LLSH |pattern| 8) (SETQ |pattern| (LLSH |pattern| 4)) (LLSH |pattern| 8)))) (PUTPROPS \\SETPBTFUNCTION MACRO (OPENLAMBDA (BBT |SourceType| |Operation|) (PROGN (|replace| ( PILOTBBT PBTOPERATION) |of| BBT |with| (SELECTQ |Operation| (ERASE 1) (PAINT 2) (INVERT 3) 0)) ( |replace| (PILOTBBT PBTSOURCETYPE) |of| BBT |with| (COND ((EQ (EQ |SourceType| (QUOTE INVERT)) (EQ |Operation| (QUOTE ERASE))) 0) (T 1)))))) (PUTPROPS \\BITBLT1 MACRO ((|bbt|) (|BitBltSUBR| |bbt|))) (PUTPROP (QUOTE BITBLT) (QUOTE MACRO) (QUOTE (= . BKBITBLT))) (PROGN (PUTPROPS \\INSURETOPWDS DMACRO (OPENLAMBDA (DS) (OR (EQ DS \\TOPWDS) (COND ((FMEMB ( DSPDESTINATION NIL DS) \\SCREENBITMAPS) (\\TOTOPWDS DS)))))) (PUTPROPS \\INSURETOPWDS MACRO ((DS) (* |For| |non-window| |implementations|) (PROGN)))) (PUTPROPS .WHILE.TOP.DS. MACRO ((FIRST . REST) (PROG (DISPINTERRUPT SOFTCURSORUP) (* FIRST |should| |be| \a |displaystream| |and| \a |variable.| |This| |macro| |may| |also| |take| \a |soft| |cursor| |down,| |similar| |to| |the| |way| .WHILE.CURSOR.DOWN. |does,| |but| |only| |if| |FIRST's| |destination| |is| |the| |same| |as| |the| |soft| |cursor's| |destination.| *) (COND (\\SOFTCURSORP ( SETQ SOFTCURSORUP (AND \\SOFTCURSORUPP (EQ (DSPDESTINATION NIL FIRST) \\CURSORDESTINATION))) (COND ( SOFTCURSORUP (SETQ DISPINTERRUPT (\\GETBASE \\EM.DISPINTERRUPT 0)) (\\PUTBASE \\EM.DISPINTERRUPT 0 0) (\\SOFTCURSORDOWN))))) (\\INSURETOPWDS FIRST) (PROGN . REST) (COND (SOFTCURSORUP ( \\SOFTCURSORUPCURRENT) (\\PUTBASE \\EM.DISPINTERRUPT 0 DISPINTERRUPT)))))) (PUTPROPS .WHILE.CURSOR.DOWN. MACRO ((FIRST . REST) (PROG (DISPINTERRUPT SOFTCURSORUP) (* |This| |macro| |should| |wrap| |around| |any| |code| |that| |draws| |or| |bitblts| |directly| |from| |or| |to| \a |screen| |bitmap.| E.\g. DRAWGRAYBOX |in| HLDISPLAY |which| |puts| |up| \a |shadow| |box| |during| GETREGION. |The| |purpose| |of| |this| |macro| |is| |that| \a |soft| (|e.g.| |color|) |cursor's| |bits| |not| |be| |taken| |to| |be| |screen| |bits| |while| FIRST & REST |are| |done.| *) ( COND (\\SOFTCURSORP (SETQ SOFTCURSORUP \\SOFTCURSORUPP) (COND (SOFTCURSORUP (SETQ DISPINTERRUPT ( \\GETBASE \\EM.DISPINTERRUPT 0)) (\\PUTBASE \\EM.DISPINTERRUPT 0 0) (\\SOFTCURSORDOWN))))) (PROGN FIRST . REST) (COND (SOFTCURSORUP (\\SOFTCURSORUPCURRENT) (\\PUTBASE \\EM.DISPINTERRUPT 0 DISPINTERRUPT)))))) (ADDTOVAR GLOBALVARS \\TOPWDS) (DEFOPTIMIZER TTYDISPLAYSTREAM (&REST X) (COND ((NULL (CAR X)) (QUOTE \\TERM.OFD)) (T (QUOTE IGNOREMACRO)))) (GLOBALVARS BELLCNT BELLRATE TTYBACKGROUNDFNS |\\DisplayStoppedForLogout| \\CARET.UP) (PUTPROPS \\CHECKCARET MACRO ((X) (AND \\CARET.UP (\\CARET.DOWN X)))) (PUTPROPS \\DSPTRANSFORMX MACRO ((X DD) (* |transforms| |an| \x |coordinate| |into| |the| |destination| |coordinate.|) (IPLUS X (|fetch| (\\DISPLAYDATA DDXOFFSET) |of| DD)))) (PUTPROPS \\DSPTRANSFORMY MACRO ((Y DD) (* |transforms| |an| \y |coordinate| |into| |the| |destination| |coordinate.|) (IPLUS Y (|fetch| (\\DISPLAYDATA DDYOFFSET) |of| DD)))) (PUTPROPS \\OFFSETBOTTOM MACRO ((X) (* |gives| |the| |destination| |coordinate| |address| |of| |the| |origin.|) (|fetch| (\\DISPLAYDATA DDYOFFSET) |of| X))) (PUTPROPS \\OFFSETLEFT MACRO ((DD) (* |returns| |the| \x |origin| |of| |display| |data| |destination| |coordinates.|) (|fetch| (\\DISPLAYDATA DDXOFFSET) |of| DD))) (PUTPROPS DISPLAYINITIALIZEDP MACRO (NIL (* |always| |initialized| |now|) T)) (PUTPROPS DISPLAYSTARTEDP MACRO (NIL |\\DisplayStarted|)) (GLOBALVARS |\\DisplayStarted| |\\DisplayStreamsInitialized| |\\DisplayInitialed| WHOLEDISPLAY WHOLESCREEN SCREENWIDTH SCREENHEIGHT) (PUTPROP (QUOTE LLDISPLAY) (QUOTE IMPORTDATE) (IDATE "18-Apr-1994 00:20:42")) (RECORD REGION (LEFT BOTTOM WIDTH HEIGHT) LEFT _ -16383 BOTTOM _ -16383 WIDTH _ 32767 HEIGHT _ 32767 ( ACCESSFNS ((TOP (IPLUS (|fetch| (REGION BOTTOM) |of| DATUM) (|fetch| (REGION HEIGHT) |of| DATUM) -1)) (PTOP (IPLUS (|fetch| (REGION BOTTOM) |of| DATUM) (|fetch| (REGION HEIGHT) |of| DATUM))) (RIGHT (IPLUS (|fetch| (REGION LEFT) |of| DATUM) (|fetch| (REGION WIDTH) |of| DATUM) -1)) (PRIGHT (IPLUS (|fetch| ( REGION LEFT) |of| DATUM) (|fetch| (REGION WIDTH) |of| DATUM))))) (TYPE? (AND (EQLENGTH DATUM 4) (EVERY DATUM (FUNCTION NUMBERP)))) (SYSTEM)) (DATATYPE BITMAP ((BITMAPBASE POINTER) (BITMAPRASTERWIDTH WORD) (BITMAPHEIGHT WORD) (BITMAPWIDTH WORD) (BITMAPBITSPERPIXEL WORD)) BITMAPBITSPERPIXEL _ 1 (BLOCKRECORD BITMAP ((|BitMapHiLoc| WORD) ( |BitMapLoLoc| WORD)) (* \; "overlay initial pointer")) (SYSTEM)) (BLOCKRECORD BITMAPWORD ((BITS WORD)) (SYSTEM)) (RECORD POSITION (XCOORD . YCOORD) (TYPE? (AND (LISTP DATUM) (NUMBERP (CAR DATUM)) (NUMBERP (CDR DATUM )))) (SYSTEM)) (DATATYPE CURSOR (CUIMAGE CUMASK CUHOTSPOTX CUHOTSPOTY CUDATA) (ACCESSFNS ((CUBITSPERPIXEL (|fetch| ( BITMAP BITMAPBITSPERPIXEL) |of| (|fetch| (CURSOR CUIMAGE) |of| DATUM))))) (SYSTEM)) (RECORD MOUSEEVENT (MOUSEX MOUSEY MOUSEBUTTONS KEYBOARD MOUSETIME) (SYSTEM)) (RECORD SCREENREGION (SCREEN . REGION) (SUBRECORD REGION) (TYPE? (AND (LISTP DATUM) (|type?| SCREEN ( CAR DATUM)) (|type?| REGION (CDR DATUM)))) (SYSTEM)) (RECORD SCREENPOSITION (SCREEN . POSITION) (SUBRECORD POSITION) (TYPE? (AND (LISTP DATUM) (|type?| SCREEN (CAR DATUM)) (|type?| POSITION (CDR DATUM)))) (SYSTEM)) (PUTPROPS CURSORBITMAP MACRO (NIL |CursorBitMap|)) (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (ADDTOVAR GLOBALVARS |CursorBitMap|) (ARRAYRECORD POLYNOMIAL (A B C D) (CREATE (ARRAY 4 (QUOTE FLOATP))) (SYSTEM)) (RECORD SPLINE (\#KNOTS SPLINEX SPLINEY SPLINEDX SPLINEDY SPLINEDDX SPLINEDDY SPLINEDDDX SPLINEDDDY)) (PUTPROPS HALF MACRO ((X) (LRSH X 1))) (PUTPROPS \\FILLCIRCLEBLT MACRO (OPENLAMBDA (CX CY X Y) (* \; "calls bitblt twice to fill in one line of the circle.") (\\LINEBLT FCBBT (IDIFFERENCE CX X) (IPLUS CY Y) (IPLUS CX X) DESTINATIONBASE RASTERWIDTH LEFT RIGHT BOTTOM TOP GRAYWIDTH GRAYHEIGHT GRAYBASE NBITS ) (\\LINEBLT FCBBT (IDIFFERENCE CX X) (IDIFFERENCE CY Y) (IPLUS CX X) DESTINATIONBASE RASTERWIDTH LEFT RIGHT BOTTOM TOP GRAYWIDTH GRAYHEIGHT GRAYBASE NBITS))) (PUTDEF (QUOTE BITMAPS) (QUOTE FILEPKGCOMS) (QUOTE ((COM MACRO (X (VARS . X)))))) (PUTDEF (QUOTE CURSORS) (QUOTE FILEPKGCOMS) (QUOTE ((COM MACRO (X (E (MAPC (QUOTE X) (QUOTE PRINTCURSOR)))))))) (ADDTOVAR GLOBALVARS SCREENHEIGHT SCREENWIDTH |ScreenBitMap|) (RPAQQ BLACKSHADE 65535) (RPAQQ WHITESHADE 0) (CONSTANTS (BLACKSHADE 65535) (WHITESHADE 0)) (RPAQQ GRAYSHADE 43605) (ADDTOVAR GLOBALVARS GRAYSHADE) (RECORD HLS (HUE LIGHTNESS SATURATION)) (RECORD RGB (RED GREEN BLUE)) (PUTPROP (QUOTE ADISPLAY) (QUOTE IMPORTDATE) (IDATE "15-Sep-1994 17:07:04")) (ADDTOVAR SYSSPECVARS \\INTERRUPTABLE) (PUTPROPS UNINTERRUPTABLY INFO EVAL) (PUTPROPS UNINTERRUPTABLY DMACRO ((X . Y) ((LAMBDA (\\INTERRUPTABLE) (PROGN X . Y)) NIL))) (ADDTOVAR PRETTYPRINTMACROS (UNINTERRUPTABLY LAMBDA (FORM) (PROG ((POS (IPLUS 4 (POSITION)))) (PRIN1 "(") (PRIN2 (CAR FORM)) (OR (EQ COMMENTFLG (CAAR (SETQ FORM (CDR FORM)))) (TAB POS 0)) (PRINTDEF FORM POS T T FNSLST) (PRIN1 ")")))) (BLOCKRECORD INTERRUPTSTATE ((* |;;| "This is the structure used to communicate between the emulator and Lisp re interrupts. There is a bit per interrupt type, plus space for the character code that caused a keyboard interrupt." ) (* |;;| "This must match the INTSTAT definition in lispemul.h") (* |;;| "PENDING-INTERRUPT FLAGS:") (LOGMSGSPENDING FLAG) (* \; " Log/Console msgs need printing.") (ETHERINTERRUPT FLAG) (* \; "Ether packet read finished.") (IOINTERRUPT FLAG) (GCDISABLED FLAG) (* \; "No mroe room in GC tables." ) (VMEMFULL FLAG) (* \; "VMEM is full!!") (STACKOVERFLOW FLAG) (* \; "Stack overflowed.") (STORAGEFULL FLAG) (* \; "Ran out of storage, atoms, etc.") (WAITINGINTERRUPT FLAG) (* |;;| "INTERRUPTS-IN-PROCESS MASK:") (P-LOGMSGSPENDING FLAG) (* \; " Log/Console msgs need printing.") ( P-ETHERINTERRUPT FLAG) (* \; "Ether packet read finished.") (P-IOINTERRUPT FLAG) (P-GCDISABLED FLAG) ( * \; "No mroe room in GC tables.") (P-VMEMFULL FLAG) (* \; "VMEM is full!!") (P-STACKOVERFLOW FLAG) (* \; "Stack overflowed.") (P-STORAGEFULL FLAG) (* \; "Ran out of storage, atoms, etc.") ( P-WAITINGINTERRUPT FLAG) (INTCHARCODE WORD)) (BLOCKRECORD INTERRUPTSTATE ((* |;;| "Alternative view of the structure:") (PENDING BITS 8) (* \; "Pending-interrupt flags") (IN-PROGRESS BITS 8) (* \; "Mask to prevent re-interrupt for an interrupt in progress") (NIL WORD)))) (PUTPROPS \\TAKEINTERRUPT DMACRO ((PREFORM POSTFORM) (DECLARE (GLOBALVARS \\PENDINGINTERRUPT)) (COND ( (AND \\PENDINGINTERRUPT (INTERRUPTABLE~=NILUPTHESTACK)) PREFORM ((LAMBDA (\\INTERRUPTABLE) ( \\CALLINTERRUPTED)) T) POSTFORM)))) (PUTPROP (QUOTE AINTERRUPT) (QUOTE IMPORTDATE) (IDATE "17-Sep-1992 10:42:38")) (ACCESSFNS PUP ((PUPBASE (LOCF (|fetch| (ETHERPACKET EPBODY) |of| DATUM)))) (BLOCKRECORD PUPBASE (( PUPLENGTH WORD) (PUPTCONTROL BYTE) (PUPTYPE BYTE) (PUPID FIXP) (PUPDEST WORD) (PUPDESTSOCKET FIXP) ( PUPSOURCE WORD) (PUPSOURCESOCKET FIXP) (PUPDATASTART 266 WORD)) (BLOCKRECORD PUPBASE ((NIL WORD) ( TYPEWORD WORD) (PUPIDHI WORD) (PUPIDLO WORD) (PUPDESTNET BYTE) (PUPDESTHOST BYTE) (PUPDESTSOCKETHI WORD) (PUPDESTSOCKETLO WORD) (PUPSOURCENET BYTE) (PUPSOURCEHOST BYTE) (PUPSOURCESOCKETHI WORD) ( PUPSOURCESOCKETLO WORD)) (* \; "Temporary extra synonyms") (SYNONYM PUPDESTNET (DESTNET)) (SYNONYM PUPDESTHOST (DESTHOST)) (SYNONYM PUPDESTSOCKETHI (DESTSKTHI)) (SYNONYM PUPDESTSOCKETLO (DESTSKTLO)) ( SYNONYM PUPSOURCENET (SOURCENET)) (SYNONYM PUPSOURCEHOST (SOURCEHOST)) (SYNONYM PUPSOURCESOCKETHI ( SOURCESKTHI)) (SYNONYM PUPSOURCESOCKETLO (SOURCESKTLO))) (SYNONYM PUPDEST (DEST)) (SYNONYM PUPDESTSOCKET (DESTSKT)) (SYNONYM PUPSOURCE (SOURCE)) (SYNONYM PUPSOURCESOCKET (SOURCESKT)) (ACCESSFNS PUPDATASTART ((PUPCONTENTS (LOCF DATUM))))) (ACCESSFNS PUP ((PUPCHECKSUMBASE (|fetch| PUPBASE |of| DATUM)) (PUPCHECKSUMLOC (\\ADDBASE (|fetch| PUPBASE |of| DATUM) (FOLDLO (SUB1 (|fetch| PUPLENGTH |of| DATUM)) BYTESPERWORD)))) (BLOCKRECORD PUPCHECKSUMLOC ((PUPCHECKSUM WORD)))) (TYPE? (|type?| ETHERPACKET DATUM))) (ACCESSFNS PUPADDRESS ((PUPNET# (LRSH DATUM 8)) (PUPHOST# (LOGAND DATUM 255))) (CREATE (IPLUS (LLSH PUPNET# 8) PUPHOST#))) (PUTPROPS \\LOCALPUPADDRESS MACRO (NIL \\LOCALPUPNETHOST)) (PUTPROPS \\LOCALPUPHOSTNUMBER MACRO (NIL (|fetch| PUPHOST# |of| \\LOCALPUPNETHOST))) (PUTPROPS \\LOCALPUPNETNUMBER MACRO (NIL (|fetch| PUPNET# |of| \\LOCALPUPNETHOST))) (ACCESSFNS ERRORPUP ((ERRORPUPBASE (|fetch| PUPCONTENTS |of| DATUM))) (BLOCKRECORD ERRORPUPBASE (( ERRORPUPCOPY 10 WORD) (* \; "Copy of pup header") (ERRORPUPCODE WORD) (ERRORPUPARG WORD) (* \; "Usually zero") (ERRORPUPSTRINGBASE WORD) (* \; "Human readable message")))) (RPAQQ PUPERRORCODES ((\\PUPE.CHECKSUM 1) (\\PUPE.NOSOCKET 2) (\\PUPE.SOCKETFULL 3) ( \\PUPE.GATEWAY.BADPUP 513) (\\PUPE.NOROUTE 514) (\\PUPE.NOHOST 515) (\\PUPE.LOOPED 516) ( \\PUPE.TOOLARGE 517) (\\PUPE.WRONG.GATEWAY 518) (\\PUPE.GATEWAYFULL 519))) (RPAQQ \\PUPE.CHECKSUM 1) (RPAQQ \\PUPE.NOSOCKET 2) (RPAQQ \\PUPE.SOCKETFULL 3) (RPAQQ \\PUPE.GATEWAY.BADPUP 513) (RPAQQ \\PUPE.NOROUTE 514) (RPAQQ \\PUPE.NOHOST 515) (RPAQQ \\PUPE.LOOPED 516) (RPAQQ \\PUPE.TOOLARGE 517) (RPAQQ \\PUPE.WRONG.GATEWAY 518) (RPAQQ \\PUPE.GATEWAYFULL 519) (CONSTANTS (\\PUPE.CHECKSUM 1) (\\PUPE.NOSOCKET 2) (\\PUPE.SOCKETFULL 3) (\\PUPE.GATEWAY.BADPUP 513) ( \\PUPE.NOROUTE 514) (\\PUPE.NOHOST 515) (\\PUPE.LOOPED 516) (\\PUPE.TOOLARGE 517) ( \\PUPE.WRONG.GATEWAY 518) (\\PUPE.GATEWAYFULL 519)) (PUTPROPS BINDPUPS MACRO (X (CONS (LIST (QUOTE LAMBDA) (CAR X) (CONS (QUOTE PROGN) (CDR X))) (|in| ( CAR X) |collect| (LIST (QUOTE ALLOCATE.PUP)))))) (PUTPROPS BINDPUPS INFO BINDS) (ADDTOVAR PRETTYPRINTMACROS (BINDPUPS LAMBDA (FORM) (PROG ((POS (IPLUS 2 (POSITION)))) (PRIN1 "(") ( PRIN2 (CAR FORM)) (SPACES 1) (PRINTDEF (CADR FORM) (POSITION)) (OR (EQ COMMENTFLG (CAAR (SETQ FORM ( CDDR FORM)))) (TAB POS 0)) (PRINTDEF FORM POS T T FNSLST) (PRIN1 ")")))) (BLOCKRECORD PORT ((NETHOST WORD) (SOCKET FIXP)) (BLOCKRECORD PORT ((NET BYTE) (HOST BYTE) (SOCKETHI WORD) (SOCKETLO WORD)))) (ACCESSFNS ERRORPUP ((ERRORPUPBASE (|fetch| PUPCONTENTS |of| DATUM))) (BLOCKRECORD ERRORPUPBASE (( ERRORPUPCOPY 10 WORD) (* \; "Copy of pup header") (ERRORPUPCODE WORD) (ERRORPUPARG WORD) (* \; "Usually zero") (ERRORPUPSTRINGBASE WORD) (* \; "Human readable message")))) (GLOBALVARS \\ETHERWAIT1 \\ETHERTIMEOUT \\MAXETHERTRIES PUPTRACEFLG LOGINPASSWORDS) (GLOBALVARS PUPTRACEFILE PUPONLYTYPES PUPIGNORETYPES PUPPRINTMACROS) (RPAQQ \\PUPOVLEN 22) (RPAQQ \\MAX.PUPLENGTH 532) (RPAQQ \\TIME.GETPUP 5) (CONSTANTS (\\PUPOVLEN 22) (\\MAX.PUPLENGTH 532) (\\TIME.GETPUP 5)) (PUTPROPS PUPPRINTMACROS VARTYPE ALIST) (PUTPROPS \\GETPUPWORD DMACRO ((PUP WORD#) (\\GETBASE (|fetch| PUPCONTENTS |of| PUP) WORD#))) (PUTPROPS \\PUTPUPWORD DMACRO ((PUP WORD# VALUE) (\\PUTBASE (|fetch| PUPCONTENTS |of| PUP) WORD# VALUE ))) (PUTPROPS \\GETPUPBYTE DMACRO ((PUP BYTE#) (\\GETBASEBYTE (|fetch| PUPCONTENTS |of| PUP) BYTE#))) (PUTPROPS \\PUTPUPBYTE DMACRO ((PUP BYTE# VALUE) (\\PUTBASEBYTE (|fetch| PUPCONTENTS |of| PUP) BYTE# VALUE))) (RPAQQ RAWPUPTYPES ((\\PT.ECHOME 1) (\\PT.IAMECHO 2) (\\PT.IAMBADECHO 3) (\\PT.ERROR 4) (\\PT.RFC 8) ( \\PT.ABORT 9) (\\PT.END 10) (\\PT.ENDREPLY 11) (\\PT.DATA 16) (\\PT.ADATA 17) (\\PT.ACK 18) (\\PT.MARK 19) (\\PT.INTERRUPT 20) (\\PT.INTERRUPTREPLY 21) (\\PT.AMARK 22) (\\PT.GATEWAYREQUEST 128) ( \\PT.GATEWAYRESPONSE 129) (\\PT.ALTOTIMEREQUEST 134) (\\PT.ALTOTIMERESPONSE 135) (\\PT.MSGCHECK 136) ( \\PT.NEWMAIL 137) (\\PT.NONEWMAIL 138) (\\PT.NOMAILBOX 139) (\\PT.LAURELCHECK 140) (\\PT.NAMELOOKUP 144) (\\PT.NAMERESPONSE 145) (\\PT.NAME/ADDRERROR 146) (\\PT.ADDRLOOKUP 147) (\\PT.ADDRRESPONSE 148) ( \\PT.PRINTERSTATUS 128) (\\PT.STATUSRESPONSE 129) (\\PT.PRINTERCAPABILITY 130) ( \\PT.CAPABILITYRESPONSE 131) (\\PT.PRINTJOBSTATUS 132) (\\PT.PRINTJOBRESPONSE 133))) (RPAQQ \\PT.ECHOME 1) (RPAQQ \\PT.IAMECHO 2) (RPAQQ \\PT.IAMBADECHO 3) (RPAQQ \\PT.ERROR 4) (RPAQQ \\PT.RFC 8) (RPAQQ \\PT.ABORT 9) (RPAQQ \\PT.END 10) (RPAQQ \\PT.ENDREPLY 11) (RPAQQ \\PT.DATA 16) (RPAQQ \\PT.ADATA 17) (RPAQQ \\PT.ACK 18) (RPAQQ \\PT.MARK 19) (RPAQQ \\PT.INTERRUPT 20) (RPAQQ \\PT.INTERRUPTREPLY 21) (RPAQQ \\PT.AMARK 22) (RPAQQ \\PT.GATEWAYREQUEST 128) (RPAQQ \\PT.GATEWAYRESPONSE 129) (RPAQQ \\PT.ALTOTIMEREQUEST 134) (RPAQQ \\PT.ALTOTIMERESPONSE 135) (RPAQQ \\PT.MSGCHECK 136) (RPAQQ \\PT.NEWMAIL 137) (RPAQQ \\PT.NONEWMAIL 138) (RPAQQ \\PT.NOMAILBOX 139) (RPAQQ \\PT.LAURELCHECK 140) (RPAQQ \\PT.NAMELOOKUP 144) (RPAQQ \\PT.NAMERESPONSE 145) (RPAQQ \\PT.NAME/ADDRERROR 146) (RPAQQ \\PT.ADDRLOOKUP 147) (RPAQQ \\PT.ADDRRESPONSE 148) (RPAQQ \\PT.PRINTERSTATUS 128) (RPAQQ \\PT.STATUSRESPONSE 129) (RPAQQ \\PT.PRINTERCAPABILITY 130) (RPAQQ \\PT.CAPABILITYRESPONSE 131) (RPAQQ \\PT.PRINTJOBSTATUS 132) (RPAQQ \\PT.PRINTJOBRESPONSE 133) (CONSTANTS (\\PT.ECHOME 1) (\\PT.IAMECHO 2) (\\PT.IAMBADECHO 3) (\\PT.ERROR 4) (\\PT.RFC 8) ( \\PT.ABORT 9) (\\PT.END 10) (\\PT.ENDREPLY 11) (\\PT.DATA 16) (\\PT.ADATA 17) (\\PT.ACK 18) (\\PT.MARK 19) (\\PT.INTERRUPT 20) (\\PT.INTERRUPTREPLY 21) (\\PT.AMARK 22) (\\PT.GATEWAYREQUEST 128) ( \\PT.GATEWAYRESPONSE 129) (\\PT.ALTOTIMEREQUEST 134) (\\PT.ALTOTIMERESPONSE 135) (\\PT.MSGCHECK 136) ( \\PT.NEWMAIL 137) (\\PT.NONEWMAIL 138) (\\PT.NOMAILBOX 139) (\\PT.LAURELCHECK 140) (\\PT.NAMELOOKUP 144) (\\PT.NAMERESPONSE 145) (\\PT.NAME/ADDRERROR 146) (\\PT.ADDRLOOKUP 147) (\\PT.ADDRRESPONSE 148) ( \\PT.PRINTERSTATUS 128) (\\PT.STATUSRESPONSE 129) (\\PT.PRINTERCAPABILITY 130) ( \\PT.CAPABILITYRESPONSE 131) (\\PT.PRINTJOBSTATUS 132) (\\PT.PRINTJOBRESPONSE 133)) (RPAQ? PUPTYPES RAWPUPTYPES) (RPAQQ WELLKNOWNPUPSOCKETS ((\\PUPSOCKET.TELNET 1) (\\PUPSOCKET.ROUTING 2) (\\PUPSOCKET.FTP 3) ( \\PUPSOCKET.MISCSERVICES 4) (\\PUPSOCKET.ECHO 5) (\\PUPSOCKET.EFTP 16) (\\PUPSOCKET.PRINTERSTATUS 17) (\\PUPSOCKET.LEAF 35))) (RPAQQ \\PUPSOCKET.TELNET 1) (RPAQQ \\PUPSOCKET.ROUTING 2) (RPAQQ \\PUPSOCKET.FTP 3) (RPAQQ \\PUPSOCKET.MISCSERVICES 4) (RPAQQ \\PUPSOCKET.ECHO 5) (RPAQQ \\PUPSOCKET.EFTP 16) (RPAQQ \\PUPSOCKET.PRINTERSTATUS 17) (RPAQQ \\PUPSOCKET.LEAF 35) (CONSTANTS (\\PUPSOCKET.TELNET 1) (\\PUPSOCKET.ROUTING 2) (\\PUPSOCKET.FTP 3) ( \\PUPSOCKET.MISCSERVICES 4) (\\PUPSOCKET.ECHO 5) (\\PUPSOCKET.EFTP 16) (\\PUPSOCKET.PRINTERSTATUS 17) (\\PUPSOCKET.LEAF 35)) (PUTPROP (QUOTE PUP) (QUOTE IMPORTDATE) (IDATE "19-Jan-1993 11:14:09")) (PUTPROPS UNLESSRDSYS MACRO ((NORMAL RDSYS) NORMAL)) (PUTPROPS UNLESSINEW MACRO ((NORMAL I-NEW) NORMAL)) (PUTPROPS 1ST MACRO ((A . B) A)) (PUTPROPS 2ND MACRO ((A B . C) B)) (PUTPROPS LOCAL MACRO ((X) X)) (PUTPROPS ALLOCAL MACRO ((X) X)) (PUTPROPS ADDBASE DMACRO (= . \\ADDBASE)) (PUTPROPS GETBASE DMACRO (= . \\GETBASE)) (PUTPROPS GETBASEBYTE DMACRO (= . \\GETBASEBYTE)) (PUTPROPS GETBASEPTR DMACRO (= . \\GETBASEPTR)) (PUTPROPS HILOC DMACRO (= . \\HILOC)) (PUTPROPS LOLOC DMACRO (= . \\LOLOC)) (PUTPROPS PUTBASE DMACRO (= . \\PUTBASE)) (PUTPROPS PUTBASEBYTE DMACRO (= . \\PUTBASEBYTE)) (PUTPROPS PUTBASEPTR DMACRO (= . \\PUTBASEPTR)) (PUTPROPS REPLACEPTRFIELD DMACRO (= . \\RPLPTR)) (PUTPROPS VAG2 DMACRO (= . \\VAG2)) (PUTPROPS PAGEBASE MACRO ((PTR) (|fetch| (POINTER PAGEBASE) |of| PTR))) (PUTPROPS PAGELOC MACRO (OPENLAMBDA (PTR) (IPLUS (LLSH (\\HILOC PTR) 8) (LRSH (\\LOLOC PTR) 8)))) (PUTPROP (QUOTE RENAMEMACROS) (QUOTE IMPORTDATE) (IDATE "27-Apr-1994 15:43:27")) (PUTPROPS MOUSESTATE MACRO (ARGS (LIST (QUOTE PROGN) (QUOTE (GETMOUSESTATE)) (MOUSESTATE-EXPR (CAR ARGS) T)))) (PUTPROPS LASTMOUSESTATE MACRO (ARGS (MOUSESTATE-EXPR (CAR ARGS) T))) (PUTPROPS UNTILMOUSESTATE MACRO (ARGS (COND ((AND (CDR ARGS) (CADR ARGS) (NEQ (CADR ARGS) T)) (* |time| |argument| |is| |given| |and| |is| |not| T |or| NIL\; |compile| |in| |time| |keeping| |loop.|) (LIST (QUOTE PROG) (LIST (LIST (QUOTE TIMEOUT) (LIST (QUOTE IPLUS) (QUOTE (CLOCK 0)) (LIST (QUOTE OR) (LIST (QUOTE NUMBERP) (CADR ARGS)) 100))) (QUOTE (NOWTIME (CLOCK 0)))) (QUOTE LP) (LIST (QUOTE COND) ( LIST (CONS (QUOTE MOUSESTATE) (LIST (CAR ARGS) T)) (QUOTE (RETURN T)))) (QUOTE (COND ((IGREATERP ( CLOCK0 NOWTIME) TIMEOUT) (RETURN NIL)) (T (\\BACKGROUND)))) (QUOTE (GO LP)))) (T (LIST (QUOTE PROG) NIL (QUOTE LP) (LIST (QUOTE COND) (LIST (CONS (QUOTE MOUSESTATE) (LIST (CAR ARGS) T)) (QUOTE (RETURN T )))) (QUOTE (\\BACKGROUND)) (QUOTE (GO LP))))))) (PUTPROPS KEYSETSTATE MACRO (ARGS (LIST (QUOTE PROGN) (QUOTE (GETMOUSESTATE)) (MOUSESTATE-EXPR (CAR ARGS))))) (PUTPROPS LASTKEYSETSTATE MACRO (ARGS (MOUSESTATE-EXPR (CAR ARGS)))) (PUTPROPS WITHIN MACRO ((A B C) (AND (IGEQ A B) (ILESSP A (IPLUS B C))))) (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTMOUSEBUTTONS) (PUTPROPS IABS MACRO (OPENLAMBDA (A) (COND ((IGEQ A 0) A) (T (IMINUS A))))) (PUTPROP (QUOTE HLDISPLAY) (QUOTE IMPORTDATE) (IDATE "15-Mar-1994 10:48:02")) (PUTPROPS .COPYKEYDOWNP. MACRO (NIL (OR (KEYDOWNP (QUOTE LSHIFT)) (KEYDOWNP (QUOTE RSHIFT)) (KEYDOWNP (QUOTE COPY))))) (PUTPROPS WSOP MACRO (ARGS (LET ((METHOD (CADR (CAR ARGS))) (DISPLAY (CADR ARGS)) (OTHERARGS (CDDR ARGS))) (BQUOTE (SPREADAPPLY* (|fetch| (WSOPS (\\\, METHOD)) |of| (|fetch| (FDEV WINDOWOPS) |of| (\\\, DISPLAY))) (\\\, DISPLAY) (\\\,@ OTHERARGS)))))) (PUTPROPS \\COERCETODS MACRO (OPENLAMBDA (X) (COND ((|type?| WINDOW X) (|fetch| (WINDOW DSP) |of| X)) (T (\\ILLEGAL.ARG X))))) (PUTPROPS .WHILE.ON.TOP. MACRO ((FIRST . REST) (UNINTERRUPTABLY (\\INTERNALTOTOPW FIRST) . REST))) (PUTPROPS WINDOWOP DMACRO (ARGS (LET ((OPNAME (CAR ARGS)) (METHOD-DEVICE (CADR ARGS)) (TAIL (CDDR ARGS ))) (COND ((AND (LISTP OPNAME) (EQ (CAR OPNAME) (QUOTE QUOTE))) (BQUOTE (SPREADAPPLY* (|fetch| (SCREEN (\\\, (CADR OPNAME))) |of| (\\\, METHOD-DEVICE)) (\\\, METHOD-DEVICE) (\\\,@ TAIL)))) (T (ERROR "OPNAME not quoted: " OPNAME)))))) (RPAQQ |MinWindowWidth| 26) (RPAQQ |MinWindowHeight| 16) (CONSTANTS (|MinWindowWidth| 26) (|MinWindowHeight| 16)) (DATATYPE WINDOW (DSP (* \; "The display stream you use to actually printto the window.") NEXTW (* \; "Next window in the open-window list") SAVE (* \; "Saved image from anything this window's on top of") REG (* \; "Screen region this window occupies") BUTTONEVENTFN (* \; "FN called when left/middle mouse button goes up/down") RIGHTBUTTONFN (* \; "FN called when right mouse button goes up/down") CURSORINFN (* \; "Fn called when mouse enters window") CURSOROUTFN (* \; "Called when mouse leaves window") CURSORMOVEDFN (* \; "Called when mouse moves in window") REPAINTFN (* \; "Redisplay part of thie window") RESHAPEFN (* \; "Called when window is reshaped") EXTENT (* \; "Scrolling limits") USERDATA (* \; "Proplist to hold other window properites") VERTSCROLLREG (* \; "Region of vert scroll bar") HORIZSCROLLREG (* \; "Tegion of horiz scroll bar") SCROLLFN (* \; "Fn to scroll this window") VERTSCROLLWINDOW (* \; "Vert scroll bar") HORIZSCROLLWINDOW (* \; "Horiz scroll bar") CLOSEFN (* \; "Called at close time") MOVEFN (* \; "Called when window is moved") WTITLE (* \; "Window's title string, if any") NEWREGIONFN (* \; "Called to get new window shape") WBORDER (* \; "Window border-width, in pixels") PROCESS (* \; "Medley process associated with this window") WINDOWENTRYFN (* \; "Fn to call when kbd focus is switched here") SCREEN (* \; "Screen this window appears on") ( NATIVE-HANDLE FIXP) (* \; "Uniterpreted place for native window to store a C pointer to its private info") (NATIVE-INFO1 FIXP) ( * \; "Reserved in case the pointer must be 64 bits") (NATIVE-W1 WORD) (* \; "Word for use by native handler") (NATIVE-W2 WORD) (* \; "Word for use by native handler") (NATIVE-P1 POINTER) (* \; "Lisp pointer for use by native handler")) BUTTONEVENTFN _ (FUNCTION TOTOPW) WBORDER _ |WBorder| WINDOWENTRYFN _ (FUNCTION GIVE.TTY.PROCESS) (SYSTEM)) (DATATYPE SCREEN (SCONOFF SCDESTINATION SCWIDTH SCHEIGHT SCTOPW SCTOPWDS SCTITLEDS SCFDEV SCDS SCDATA (* |;;| "Space for native window manager interface to use.") (HANDLE FIXP) (* \; "Handle for emulator to store info about display for C code use.") (HANDLE2 FIXP) (* \; "Reserved in case HANDLE needs to be 64 bits on the C side.") (NATIVE-INFO POINTER) (* \; "POINTER for the private use of the emulator window code") NATIVETYPE (* \; "Symbol to tell what kind of native window system we're using.") (* |;;| "- - - Functional interface to screen management - - -") WINIMAGEOPS (* \; "IMAGEOPS to be used in display streas on this kind of screen") WINFDEV (* \; "FDEV for display streams on this screen") CREATEWFN (* \; "Create a window") OPENWFN (* \; "Open a window") CLOSEWFN (* \; "Close a window") MOVEWFN (* \; "Move a window") RELMOVEWFN (* \; "Move window, relative") SHRINKWFN (* \; "Shrink window to icon") EXPANDWFN (* \; "Expand icon to window") SHAPEWFN (* \; "Reshape a window") REDISPLAYFN (* \; "Redisplay (part of) a window") GETWINDOWPROPFN (* \; "Get window property value") PUTWINDOWPROPFN (* \; "Set window property value") BURYWFN (* \; "Move window behind all others") TOTOPWFN (* \; "Move iwindow in front of all others") IMPORTWFN (* \; "Take a native window and save its state internally") EXPORTWFN (* \; "Take a saved window state and open it on this screen, filling in screen and methods as needed.") DESTROYFN (* \; "Destroy this window, for GC finaliszation") SETCURSORFN (* \; "Set the cursor for this window.") PROMPTW (* \; "The prompt window for this screen") SHOWGCFN (* \; "Show GC indication; called with ON/OFF arg, t=>show gcing status, NIL=>turn off GC indicator.") DSPCREATEFN (* \; "Create a displaystream on this screen.") BBTTOWIN (* \; "BITBLT from a lisp bitmap to a window") BBTFROMWIN (* \; "BITBLT from a window to a lisp bitmap") BBTWINWIN (* \; "BITBLT from a window to another window.") SCCURSOR (* \; "CURSOR that's in effect for this screen by default.") SCKEYBOARD (* \; "Something about which keyboard we're receiving from.") SCDEPTH (* \; "# of bits per pixel on the screen. THIS WILL REPLACE SCBITSPERPIXEL ASAP.") SCCLOSEDOWN (* \; "Close down this screen cleanly, saving window state.") SCCLOSESCREEN (* \; "Close down thie screen cleanly, no state saving.") SCREOPEN (* \; "Reopen this screen?") SCCARETFLASH (* \; "Function to flash thecaret.") SCGETSCREENPOSITION (* \; "GETSCREENPOSITION") SCGETBOXSCREENPOSITION (* \; "GETBOXPOSITION") SCGETSCREENREGION (* \; "GETREGION") SCMOVEPOINTER (* \; "\\CURSORPOSITION")) SCONOFF _ (QUOTE OFF) (ACCESSFNS ((SCBITSPERPIXEL (COND ((|fetch| (SCREEN SCDESTINATION) |of| DATUM) (|fetch| (BITMAP BITMAPBITSPERPIXEL) |of| (|fetch| (SCREEN SCDESTINATION) |of| DATUM))) (T 1))) (SCREGION (|create| REGION LEFT _ 0 BOTTOM _ 0 WIDTH _ (|fetch| (SCREEN SCWIDTH) |of| DATUM) HEIGHT _ (|fetch| (SCREEN SCHEIGHT) |of| DATUM))))) (SYSTEM)) (GLOBALVARS WINDOWUSERFORMS ENDOFWINDOWUSERFORMS PROMPTWINDOW) (PUTPROP (QUOTE WINDOW) (QUOTE IMPORTDATE) (IDATE " 9-Apr-2000 17:36:29")) (PUTPROPS NNLITATOM MACRO (OPENLAMBDA (X) (AND X (LITATOM X)))) (PUTPROPS \\NULL.OR.FIXP MACRO (OPENLAMBDA (X) (OR (NULL X) (FIXP X)))) (PUTPROPS \\CHECKTYPE MACRO (X (PROG ((VAR (CAR X)) (PRED (CADR X))) (|if| (AND (LISTP PRED) (MEMB ( CAR PRED) (QUOTE (QUOTE FUNCTION)))) |then| (SETQ PRED (LIST (CADR PRED) VAR))) (RETURN (SUBPAIR ( QUOTE (MSG VAR PRED)) (LIST (CONCAT " is not a suitable value for the variable: " VAR) VAR PRED) (QUOTE (|until| PRED |do| (SETQ VAR ( ERROR VAR MSG))))))))) (PUTPROPS CANONICAL.TIMERUNITS MACRO (OPENLAMBDA (X) (* |Checks| |for| |common| |abbreviations| |before| |calling| |\\CanonicalizeTimerUnits|) (SELECTQ X ((TICKS MILLISECONDS SECONDS) (* |These| |are| |the| |canonical| |forms|) X) (NIL (QUOTE MILLISECONDS)) (|\\CanonicalizeTimerUnits| X)))) (PUTPROPS \\MACRO.EVAL DMACRO (Z (PROG ((X (EXPANDMACRO (CAR Z) T))) (|if| (EQ X (CAR Z)) |then| ( ERROR "No macro property -- \\MACRO.EVAL" X) |else| (RETURN (EVAL X)))))) (DEFOPTIMIZER \\MACRO.MX (FORM) FORM) (PUTPROP (QUOTE MACROAUX) (QUOTE IMPORTDATE) (IDATE "16-May-1990 20:26:31")) (RPAQQ MASK0WORD1\'S 32767) (RPAQQ MASK1WORD0\'S 32768) (RPAQQ MASKWORD1\'S 65535) (RPAQQ MASKHALFWORD1\'S 255) (RPAQQ BITSPERHALFWORD 8) (CONSTANTS MASK0WORD1\'S MASK1WORD0\'S MASKWORD1\'S MASKHALFWORD1\'S BITSPERHALFWORD) (PUTPROPS EQZEROP MACRO ((X) (EQ 0 X))) (PUTPROPS \\MOVETOBOX DMACRO (OPENLAMBDA (N D) (SELECTC (NTYPX N) (\\SMALLP (|replace| (FIXP HINUM) |of| D |with| 0) (|replace| (FIXP LONUM) |of| D |with| N)) (\\FIXP (|replace| (FIXP HINUM) |of| D |with| (|fetch| (FIXP HINUM) |of| N)) (|replace| (FIXP LONUM) |of| D |with| (|fetch| (FIXP LONUM) |of| N))) (\\ILLEGAL.ARG N)))) (PUTPROPS .XUNBOX. MACRO ((X HX LX) (|until| (SETQ LX (SELECTC (NTYPX X) (\\SMALLP (COND ((IGEQ X 0) ( SETQ HX 0) X) (T (SETQ HX MASKWORD1\'S) (\\LOLOC X)))) (\\FIXP (SETQ HX (|fetch| (FIXP HINUM) |of| X)) (|fetch| (FIXP LONUM) |of| X)) NIL)) |do| (SETQ X (LISPERROR "ILLEGAL ARG" X T))))) (PUTPROPS .XLLSH. MACRO ((HI LO N) (|if| (IGEQ N BITSPERWORD) |then| (* \; "Jump 16 bits in a single bound!") (SETQ HI LO) (SETQ LO 0) (SETQ N (IDIFFERENCE N BITSPERWORD))) ( |if| (IGEQ N BITSPERHALFWORD) |then| (* \; "Jump 8 bits in a single bound!") (SETQ HI (LOGOR ( .LOHALFWORDHI. HI) (.HIHALFWORDLO. LO))) (SETQ LO (.LOHALFWORDHI. LO)) (SETQ N (IDIFFERENCE N BITSPERHALFWORD))) (|if| (IGEQ N 4) |then| (* \; "Jump 4 bits in a single bound!") (SETQ HI (LOGOR ( LRSH LO (CONSTANT (IDIFFERENCE BITSPERWORD 4))) (LLSH (LOGAND HI (CONSTANT (MASK.1\'S 0 (IDIFFERENCE BITSPERWORD 4)))) 4))) (SETQ LO (LLSH (LOGAND LO (CONSTANT (MASK.1\'S 0 (IDIFFERENCE BITSPERWORD 4)))) 4)) (SETQ N (IDIFFERENCE N 4))) (* \; "MASK0WORD1'S should be same as (SUB1 (LSH 1 (SUB1 BITSPERWORD)))") (FRPTQ N (SETQ HI (LLSH (LOGAND HI MASK0WORD1\'S) 1)) (SETQ LO (LLSH (|if| (IGEQ LO MASK1WORD0\'S) |then| (|add| HI 1) (LOGAND LO MASK0WORD1\'S) |else| LO) 1))))) (PUTPROPS .XLLSH1. MACRO ((HI LO) (SETQ HI (LLSH (LOGAND HI MASK0WORD1\'S) 1)) (SETQ LO (LSH (COND (( IGEQ LO MASK1WORD0\'S) (SETQ HI (LOGOR HI 1)) (LOGAND LO MASK0WORD1\'S)) (T LO)) 1)))) (PUTPROPS .XLRSH. MACRO ((HI LO N) (|if| (IGEQ N BITSPERWORD) |then| (* \; "Jump 10 bits in a single bound!") (SETQ LO HI) (SETQ HI 0) (SETQ N (IDIFFERENCE N BITSPERWORD))) ( |if| (IGEQ N BITSPERHALFWORD) |then| (* \; "Jump 8 bits in a single bound!") (SETQ LO (LOGOR ( .HIHALFWORDLO. LO) (.LOHALFWORDHI. HI))) (SETQ HI (.HIHALFWORDLO. HI)) (SETQ N (IDIFFERENCE N BITSPERHALFWORD))) (|if| (IGEQ N 4) |then| (* \; "Jump 4 bits in a single bound!") (SETQ LO (LOGOR ( LLSH (LOGAND HI (CONSTANT (MASK.1\'S 0 4))) (CONSTANT (IDIFFERENCE BITSPERWORD 4))) (LRSH LO 4))) ( SETQ HI (LRSH HI 4)) (SETQ N (IDIFFERENCE N 4))) (* \; "MASK1WORD0'S should be same as \\SIGNBIT") ( FRPTQ N (SETQ LO (|if| (ODDP HI) |then| (LOGOR (LRSH LO 1) MASK1WORD0\'S) |else| (LRSH LO 1))) (SETQ HI (LRSH HI 1))))) (PUTPROPS .ADD.2WORD.INTEGERS. MACRO ((HX LX HY LY) (* \; "Ignores carry out of high-order word") ( SETQ HX (.SUMSMALLMOD. HX HY)) (SETQ LX (.SUMSMALLMOD. LX LY (SETQ HX (|if| (EQ HX MAX.SMALL.INTEGER) |then| 0 |else| (ADD1 HX))))))) (PUTPROPS .SUB.2WORD.INTEGERS. MACRO ((HX LX HY LY) (* \; "Ignores carry out of high-order word") ( SETQ HX (.DIFFERENCESMALLMOD. HX HY)) (SETQ LX (.DIFFERENCESMALLMOD. LX LY (SETQ HX (|if| (EQ HX 0) |then| MAX.SMALL.INTEGER |else| (SUB1 HX))))))) (PUTPROPS .32BITMUL. MACRO ((HR LR X Y) (PROG (HX LX HY LY) (|if| (ILESSP X Y) |then| (|swap| X Y)) (* \; "Y is the lesser of the two now") (.XUNBOX. X HX LX) (.XUNBOX. Y HY LY) LP (|if| (ODDP LY) |then| (.ADD.2WORD.INTEGERS. HR LR HX LX)) (|if| (EQ HY 0) |then| (SETQ LY (LRSH LY 1)) (|if| (EQ LY 0) |then| (RETURN)) |else| (.LRSH1. HY LY)) (* \; "Trim off highest bits, so that left-shifting doesn't generate FIXPs") (SETQ HX (LOGAND HX MASK0WORD1\'S)) (.LLSH1. HX LX) (GO LP)))) (PUTPROPS .SUMSMALLMOD. MACRO ((X Y OVERFLOWFORM) ((LAMBDA (|\\SumSmallModVar|) (DECLARE (LOCALVARS |\\SumSmallModVar|)) (IF (ILEQ X |\\SumSmallModVar|) THEN (IPLUS X Y) ELSE OVERFLOWFORM (IDIFFERENCE X (ADD1 |\\SumSmallModVar|)))) (IDIFFERENCE MAX.SMALL.INTEGER Y)))) (PUTPROPS .DIFFERENCESMALLMOD. MACRO ((X Y BORROWFORM) (IF (NOT (IGREATERP Y X)) THEN (IDIFFERENCE X Y ) ELSE BORROWFORM (ADD1 (IDIFFERENCE MAX.SMALL.INTEGER (IDIFFERENCE Y X)))))) (PUTPROPS \\GETBASENIBBLE DMACRO (OPENLAMBDA (BASE OFFST) ((LAMBDA (|\\Byte|) (DECLARE (LOCALVARS |\\Byte|)) (|if| (ODDP OFFST) |then| (LOGAND |\\Byte| (CONSTANT (MASK.1\'S 0 BITSPERNIBBLE))) |else| ( LRSH |\\Byte| BITSPERNIBBLE))) (\\GETBASEBYTE BASE (FOLDLO OFFST NIBBLESPERBYTE))))) (PUTPROPS \\PUTBASENIBBLE DMACRO (OPENLAMBDA (BASE OFFST VAL) ((LAMBDA (|\\ByteNo|) (DECLARE ( LOCALVARS |\\ByteNo|)) ((LAMBDA (|\\Byte|) (DECLARE (LOCALVARS |\\Byte|)) (\\PUTBASEBYTE BASE |\\ByteNo| (|if| (ODDP OFFST) |then| (LOGOR (LOGAND |\\Byte| (CONSTANT (MASK.1\'S BITSPERNIBBLE BITSPERNIBBLE))) VAL) |else| (LOGOR (LOGAND |\\Byte| (CONSTANT (MASK.1\'S 0 BITSPERNIBBLE))) (LLSH VAL BITSPERNIBBLE))))) (\\GETBASEBYTE BASE |\\ByteNo|))) (FOLDLO OFFST NIBBLESPERBYTE)))) (PUTPROPS \\GETBASEBIT DMACRO (OPENLAMBDA (BASE OFFST) ((LAMBDA (|\\ByteNo| |\\BitMask|) (DECLARE ( LOCALVARS |\\ByteNo| |\\BitMask|)) (|if| (EQ 0 (LOGAND |\\BitMask| (\\GETBASEBYTE BASE |\\ByteNo|))) |then| 0 |else| 1)) (FOLDLO OFFST BITSPERBYTE) (MASK.1\'S (IDIFFERENCE (CONSTANT (SUB1 BITSPERBYTE)) ( IMOD OFFST BITSPERBYTE)) 1)))) (PUTPROPS \\PUTBASEBIT DMACRO (OPENLAMBDA (BASE OFFST VAL) ((LAMBDA (|\\ByteNo| |\\BitMask| |\\Byte|) (DECLARE (LOCALVARS |\\ByteNo| |\\BitMask| |\\Byte|)) (SETQ |\\Byte| (\\GETBASEBYTE BASE |\\ByteNo|)) (|if| (|if| (EQ 0 (LOGAND |\\BitMask| |\\Byte|)) |then| (NOT (EQ 0 VAL)) |else| (EQ 0 VAL)) |then| ( \\PUTBASEBYTE BASE |\\ByteNo| (LOGXOR |\\BitMask| |\\Byte|))) VAL) (FOLDLO OFFST BITSPERBYTE) ( MASK.1\'S (IDIFFERENCE (CONSTANT (SUB1 BITSPERBYTE)) (IMOD OFFST BITSPERBYTE)) 1)))) (PUTPROP (QUOTE ADDARITH) (QUOTE IMPORTDATE) (IDATE "16-May-1990 11:46:37")) (RPAQQ \\MAXFILEPAGE 65534) (CONSTANTS \\MAXFILEPAGE) (PUTPROP (QUOTE LLFAULT) (QUOTE IMPORTDATE) (IDATE " 2-Jan-1993 12:26:58")) (PUTPROPS \\UPDATETIMERS MACRO (NIL (* * |Moves| |excess| |time| |from| |the| |processor| |clock| |to| |our| |software| |clocks.| |Needs| |to| |be| |run| |often,| |uninterruptably,| |preferably| |from| |the| |vertical| |retrace| |interrupt|) (* |Get| |processor| |clock|) (PROG ((EXCESS (\\BOXIDIFFERENCE (\\RCLK (LOCF (|fetch| RCLKTEMP0 |of| \\MISCSTATS))) (LOCF (|fetch| BASECLOCK |of| \\MISCSTATS))))) ( RETURN (COND ((OR (IGEQ EXCESS \\RCLKSECOND) (ILESSP EXCESS 0)) (* |More| |than| |one| |second| |has| |elapsed| |since| |we| |updated| |clocks|) (\\BOXIPLUS (LOCF (|fetch| BASECLOCK |of| \\MISCSTATS)) \\RCLKSECOND) (* |Increment| |base| |by| |one| |second|) (\\BOXIPLUS (LOCF (|fetch| MILLISECONDSCLOCK |of| \\MISCSTATS)) 1000) (* |Increment| |clocks| |by| 1 |second|) (\\BOXIPLUS (LOCF (|fetch| SECONDSCLOCK |of| \\MISCSTATS)) 1) T)))))) (RPAQQ \\RTCSECONDS 378) (RPAQQ \\RTCMILLISECONDS 380) (RPAQQ \\RTCBASE 382) (RPAQQ \\OFFSET.SECONDS 0) (RPAQQ \\OFFSET.MILLISECONDS 2) (RPAQQ \\OFFSET.BASE 4) (RPAQQ \\ALTO.RCLKSECOND 1680000) (RPAQQ \\ALTO.RCLKMILLISECOND 1680) (RPAQQ \\DLION.RCLKMILLISECOND 35) (RPAQQ \\DLION.RCLKSECOND 34746) (RPAQQ \\DOVE.RCLKMILLISECOND 63) (RPAQQ \\DOVE.RCLKSECOND 62500) (CONSTANTS (\\RTCSECONDS 378) (\\RTCMILLISECONDS 380) (\\RTCBASE 382) (\\OFFSET.SECONDS 0) ( \\OFFSET.MILLISECONDS 2) (\\OFFSET.BASE 4) (\\ALTO.RCLKSECOND 1680000) (\\ALTO.RCLKMILLISECOND 1680) ( \\DLION.RCLKMILLISECOND 35) (\\DLION.RCLKSECOND 34746) (\\DOVE.RCLKMILLISECOND 63) (\\DOVE.RCLKSECOND 62500)) (PUTPROPS ALTO.TO.LISP.DATE MACRO ((DATE) (LOGXOR DATE -2147483648))) (PUTPROPS LISP.TO.ALTO.DATE MACRO ((DATE) (LOGXOR DATE -2147483648))) (PUTPROP (QUOTE LLTIMER) (QUOTE IMPORTDATE) (IDATE "16-May-1990 20:13:11")) (DATATYPE SYSQUEUE ((NIL BYTE) (SYSQUEUEHEAD POINTER) (NIL BYTE) (SYSQUEUETAIL POINTER))) (BLOCKRECORD QABLEITEM ((NIL BITS 4) (QLINK POINTER) (* \; "Link to next thing in queue always in first pointer of datum, independent of what the datum is")) ( BLOCKRECORD QABLEITEM ((NIL BITS 4) (LINK POINTER) (* \; "Let's also be able to call it a LINK")))) (PUTPROPS \\QUEUEHEAD MACRO ((Q) (|fetch| (SYSQUEUE SYSQUEUEHEAD) |of| Q))) (PUTPROPS \\DETCONC MACRO (OPENLAMBDA (TQ) (PROG1 (\\PEEKTCONC TQ) (|if| (NULL (CAR (RPLACA TQ (CDAR TQ)))) |then| (RPLACD TQ))))) (PUTPROPS \\ENTCONC MACRO (= . TCONC)) (PUTPROPS \\PEEKTCONC MACRO (= . CAAR)) (DATATYPE ETHERPACKET ((NIL BYTE) (EPLINK POINTER) (* \; "For queue maintenence") (EPFLAGS BYTE) (* \; "optional flags for some applications") (EPUSERFIELD POINTER) (* \; "Arbitrary pointer for applications") (NIL BYTE) (EPPLIST POINTER) (* \; "Extra field for use as an A-list for properties") (EPTRANSMITTING FLAG) (* \; "True while packet is being transmitted and hence cannot be reused") (EPRECEIVING FLAG) (* \; "True when a packet has been seen at the head of the network's input queue at least once") (NIL BITS 6 ) (EPREQUEUE POINTER) (* \; "Where to requeue this packet after transmission") (NIL BYTE) (EPSOCKET POINTER) (NIL BYTE) (EPNETWORK POINTER) (EPTYPE WORD) (* \; "Type of packet to be encapsulated (PUP or XIP or 10TO3)") (NIL WORD) (EPTIMESTAMP FIXP) (* \; "Gets RCLK value when transmitted/received") (EPREQUEUEFN POINTER) (* \; "FN to perform requeueing") ( NIL 4 WORD) (* \; "Space for expansion") (* \; "Note: This next field wants to be quad+2 aligned so that the 10mb packet is quad+3 aligned") ( EPENCAPSULATION 8 WORD) (* \; "10mb encapsulation, or 3mb encapsulation with padding") (EPBODY 289 WORD) (* \; "Body of packet, header up to 16 words plus data up to 546 bytes"))) (ACCESSFNS ETHERAUX ((AUXPTR (CDR (ASSOC (QUOTE AUXPTR) (|fetch| EPPLIST |of| DATUM))) (\\EP.PUT.AUX DATUM (QUOTE AUXPTR) NEWVALUE)) (AUXWORD (OR (CDR (ASSOC (QUOTE AUXWORD) (|fetch| EPPLIST |of| DATUM)) ) 0) (\\EP.PUT.AUX DATUM (QUOTE AUXWORD) NEWVALUE)) (AUXBYTE (OR (CDR (ASSOC (QUOTE AUXBYTE) (|fetch| EPPLIST |of| DATUM))) 0) (\\EP.PUT.AUX DATUM (QUOTE AUXBYTE) NEWVALUE)))) (RPAQQ \\EPT.PUP 512) (RPAQQ \\EPT.XIP 1536) (RPAQQ \\3MBTYPE.XIP 1536) (RPAQQ \\10MBTYPE.XIP 1536) (RPAQQ \\EPT.10TO3 1537) (RPAQQ \\3MBTYPE.10TO3 1537) (RPAQQ \\EPT.UNKNOWN 255) (CONSTANTS \\EPT.PUP \\EPT.XIP \\3MBTYPE.XIP \\10MBTYPE.XIP \\EPT.10TO3 \\3MBTYPE.10TO3 \\EPT.UNKNOWN) (RPAQQ \\NULLCHECKSUM 65535) (CONSTANTS (\\NULLCHECKSUM 65535)) (DATATYPE NDB ((NETTYPE BYTE) (* \; "10 or 3 for now") (NDBNEXT POINTER) (* \; "Link to next NDB") ( NDBPUPNET# BYTE) (* \; "Pup number of this net. May be different from NS net number, though not in Xerox world") (NDBNSNET# POINTER) (* \; "Can be 32-bits, so might as well leave its box around") (NDBTASK# BYTE) (* \; "Task # of this network") (NDBBROADCASTP POINTER) (* \; "Function that returns true if packet is of broadcast type") (NDBPUPHOST# BYTE) (* \; "My pup address on this net. NS address is global to all nets, so not needed here") (NDBTRANSMITTER POINTER) (* \; "(NDB PACKET) -- fn to send a raw packet on this net. returns NIL on failure") (NIL BYTE) (NDBENCAPSULATOR POINTER) (* \; "(NDB PACKET HOST LENGTH TYPE) -- fn to encapsulate and send a higher-level packet on this net ") ( NDBCSB POINTER) (* \; "Pointer to CSB for this network") (NDBIQLENGTH BYTE) (NDBIQ POINTER) (* \; "Queue of empty packets for receiver") (NDBTQ POINTER) (* \; "Queue of packets to transmit") ( NDBTRANSLATIONS POINTER) (* \; "Cache of translations, 3:10 or 10:3 according to network") ( NDBETHERFLUSHER POINTER) (* \; "Turns off this ether. Args NDB") (NDBWATCHER POINTER) (NDBCANHEARSELF POINTER) (* \; "True if receiver can hear packets sent by transmitter") (NDBIPNET# POINTER) ( NDBIPHOST# POINTER) (NDBPUPTYPE WORD) (* \; "The packet encapsulation of PUP on this net") (NIL WORD) (NIL POINTER) (* \; "Spares"))) (RECORD ROUTING (RTNET# RTHOPCOUNT RTGATEWAY# RTNDB RTTIMER RTRECENT)) (PUTPROPS \\SERIALNUMBER MACRO (NIL (|fetch| (IFPAGE |SerialNumber|) |of| |\\InterfacePage|))) (PUTPROPS \\DEVICE.INPUT DOPVAL (1 MISC1 1)) (PUTPROPS \\DEVICE.OUTPUT DOPVAL (2 MISC2 2)) (PUTPROPS \\D0.STARTIO DOPVAL (1 MISC1 0)) (PUTPROP (QUOTE LLETHER) (QUOTE IMPORTDATE) (IDATE "19-Jan-1993 10:49:30")) (RECORD BRUSH (BRUSHSHAPE BRUSHSIZE BRUSHCOLOR) BRUSHSHAPE _ (QUOTE ROUND) BRUSHSIZE _ 1) (PUTPROPS IMAGEOP MACRO (ARGS (CONS (QUOTE SPREADAPPLY*) (CONS (COND ((EQ (CAR (LISTP (CAR ARGS))) ( QUOTE QUOTE)) (LIST (QUOTE |fetch|) (LIST (QUOTE IMAGEOPS) (CADAR ARGS)) (QUOTE |of|) (LIST (QUOTE |fetch|) (QUOTE (STREAM IMAGEOPS)) (QUOTE |of|) (CADR ARGS)))) (T (HELP "IMAGEOP - OPNAME not quoted:" ARGS))) (CDDR ARGS))))) (DATATYPE IMAGEOPS (IMAGETYPE IMCLOSEFN IMXPOSITION IMYPOSITION IMFONT IMLEFTMARGIN IMRIGHTMARGIN IMLINEFEED IMDRAWLINE IMDRAWCURVE IMDRAWCIRCLE IMDRAWELLIPSE IMFILLCIRCLE IMBLTSHADE IMBITBLT IMNEWPAGE IMMOVETO IMSCALE IMTERPRI IMTOPMARGIN IMBOTTOMMARGIN IMSPACEFACTOR IMFONTCREATE IMOPERATION IMCOLOR IMSTRINGWIDTH IMCHARWIDTH IMCHARWIDTHY IMBACKCOLOR IMBITMAPSIZE IMCLIPPINGREGION IMRESET IMDRAWPOLYGON IMFILLPOLYGON IMSCALEDBITBLT IMWRITEPIXEL IMCHARSET IMROTATE IMDRAWARC IMTRANSLATE IMSCALE2 IMPUSHSTATE IMPOPSTATE IMDEFAULTSTATE IMDRAWPOINT IMBLTCHAR IMXOFFSET IMYOFFSET) IMCLOSEFN _ (FUNCTION NILL) IMTERPRI _ (FUNCTION (LAMBDA (STREAM) (\\OUTCHAR STREAM (CHARCODE EOL)))) IMNEWPAGE _ (FUNCTION (LAMBDA (STREAM) (\\OUTCHAR STREAM (CHARCODE ^L)))) IMOPERATION _ (FUNCTION NILL) IMCOLOR _ (FUNCTION NILL) IMCLIPPINGREGION _ (FUNCTION NILL) IMRESET _ (FUNCTION NILL) IMBACKCOLOR _ (FUNCTION NILL) IMSTRINGWIDTH _ (FUNCTION (LAMBDA (STREAM STR RDTBL) (STRINGWIDTH STR (DSPFONT NIL STREAM) RDTBL RDTBL))) IMCHARWIDTH _ (FUNCTION (LAMBDA (STREAM CHARCODE) (CHARWIDTH CHARCODE (DSPFONT NIL STREAM))) ) IMMOVETO _ (FUNCTION (LAMBDA (STREAM X Y) (IMAGEOP (QUOTE IMXPOSITION) STREAM STREAM X) (IMAGEOP ( QUOTE IMYPOSITION) STREAM STREAM Y))) IMBITMAPSIZE _ (FUNCTION (LAMBDA (STREAM BITMAP DIMENSION) ( SELECTQ DIMENSION (WIDTH (TIMES (DSPSCALE NIL STREAM) (BITMAPWIDTH BITMAP))) (HEIGHT (TIMES (DSPSCALE NIL STREAM) (BITMAPHEIGHT BITMAP))) (NIL (CONS (TIMES (DSPSCALE NIL STREAM) (BITMAPWIDTH BITMAP)) ( TIMES (DSPSCALE NIL STREAM) (BITMAPHEIGHT BITMAP)))) (\\ILLEGAL.ARG DIMENSION)))) IMWRITEPIXEL _ ( FUNCTION NILL) IMCHARSET _ (FUNCTION NILL) IMXPOSITION _ (FUNCTION NILL) IMYPOSITION _ (FUNCTION NILL) IMFONT _ (FUNCTION NILL) IMLEFTMARGIN _ (FUNCTION NILL) IMRIGHTMARGIN _ (FUNCTION NILL) IMLINEFEED _ (FUNCTION NILL) IMDRAWLINE _ (FUNCTION NILL) IMDRAWCURVE _ (FUNCTION NILL) IMDRAWCIRCLE _ (FUNCTION NILL) IMDRAWELLIPSE _ (FUNCTION NILL) IMFILLCIRCLE _ (FUNCTION NILL) IMBLTSHADE _ (FUNCTION NILL) IMBITBLT _ (FUNCTION NILL) IMSCALE _ (FUNCTION NILL) IMTOPMARGIN _ (FUNCTION NILL) IMBOTTOMMARGIN _ ( FUNCTION NILL) IMSPACEFACTOR _ (FUNCTION NILL) IMFONTCREATE _ (FUNCTION NILL) IMCHARWIDTHY _ (FUNCTION NILL) IMDRAWPOLYGON _ (FUNCTION \\DRAWPOLYGON.GENERIC) IMDRAWPOINT _ (FUNCTION \\DRAWPOINT.GENERIC) IMFILLPOLYGON _ (FUNCTION NILL) IMSCALEDBITBLT _ (FUNCTION NILL) IMROTATE _ (FUNCTION NILL) IMDRAWARC _ (FUNCTION NILL) IMTRANSLATE _ (FUNCTION NILL) IMPUSHSTATE _ (FUNCTION NILL) IMPOPSTATE _ (FUNCTION NILL) IMSCALE2 _ (FUNCTION NILL) IMDEFAULTSTATE _ (FUNCTION NILL) IMBLTCHAR _ (FUNCTION \\MEDW.BLTCHAR ) IMXOFFSET _ (FUNCTION \\MEDW.XOFFSET) IMYOFFSET _ (FUNCTION \\MEDW.YOFFSET)) (GLOBALVARS \\NOIMAGEOPS) (PUTPROP (QUOTE IMAGEIO) (QUOTE IMPORTDATE) (IDATE "28-Jun-1999 16:33:59")) (DATATYPE PROCESS ((PROCFX0 WORD) (* \; "= \\STACKHI to make this look like a STACKP") (PROCFX WORD) ( * \; "Stack pointer to this context when it is asleep") (PROCSTATUS BYTE) (* \; "Running or waiting") (PROCNAME POINTER) (* \; "Name for convenience in type-in reference") (PROCPRIORITY BYTE) (* \; "Priority level, 0-4. Not currently used.") (PROCQUEUE POINTER) (* \; "Queue of processes at the same priority") (NIL BYTE) (NEXTPROCHANDLE POINTER) (* \; "Pointer to next one") (PROCTIMERSET FLAG) (* \; "True if PROCWAKEUPTIMER has an interesting value") ( PROCBEINGDELETED FLAG) (* \; "True if proc was deleted, but hasn't been removed from \\PROCESSES yet") (PROCDELETED FLAG) (PROCSYSTEMP FLAG) (PROCNEVERSTARTED FLAG) (NIL FLAG) (NIL FLAG) (NIL FLAG) ( PROCWAKEUPTIMER POINTER) (* \; "a largep recording the time this proc last went to sleep") ( PROCTIMERLINK POINTER) (* \; "For linking proc in timer queue") (PROCTIMERBOX POINTER) (* \; "Scratch box to use for PROCWAKEUPTIMER when user does not give one explicitly") (WAKEREASON POINTER) (* \; "Reason process is being run. From WAKE.PROCESS or timer or event wakeup; T from simple BLOCK" ) (PROCEVENTORLOCK POINTER) (* \; "EVENT or MONITOR lock that this proc is waiting for") (PROCFORM POINTER) (* \; "Form to EVAL to start it going") (RESTARTABLE POINTER) (* \; "T = autorestart on error, HARDRESET = restart only on hard reset, NIL = never restart") (PROCWINDOW POINTER) (* \; "Window this process lives in, if any") (PROCFINISHED POINTER) (* \; "True if proc finished. Value is indication of how: NORMAL, DELETED, ERROR") (PROCRESULT POINTER) (* \; "Value it returned if it finished normally") (PROCFINISHEVENT POINTER) (* \; "Optional EVENT to be notified when proc finishes") (PROCMAILBOX POINTER) (* \; "Message queue") ( PROCDRIBBLEOUTPUT POINTER) (* \; "Binding for *DRIBBLE-OUTPUT* in this process") (PROCINFOHOOK POINTER ) (* \; "Optional user fn that displays info about process") (PROCTYPEAHEAD POINTER) (* \; "Buffer of typeahead destined for this proc") (PROCREMOTEINFO POINTER) (* \; "For Enterprise") ( PROCUSERDATA POINTER) (* \; "For PROCESSPROP") (PROCEVENTLINK POINTER) (* \; "Used to maintain EVENT queues") (PROCAFTEREXIT POINTER) (* \; "What to do with this process when coming back from a LOGOUT, etc") (PROCBEFOREEXIT POINTER) (* \; "If DON'T, can't logout") (PROCOWNEDLOCKS POINTER) (* \; "Pointer to first lock I currently own") ( PROCEVAPPLYRESULT POINTER) (* \; "For PROCESS.EVAL and PROCESS.APPLY when WAITFORRESULT is true") ( PROCTTYENTRYFN POINTER) (* \; "Is applied to a process when it becomes the tty process") ( PROCTTYEXITFN POINTER) (* \; "Is applied to a process when it ceases to be the tty process") ( PROCHARDRESETINFO POINTER) (* \; "HARDRESET stores info about unwind-protect cleanups here") ( PROCRESTARTFORM POINTER) (* \; "use this instead of PROCFORM when restarting") (PROCOLDTTYPROC POINTER ) (* \; "Process that had the tty when we got it") (NIL POINTER) (* \; "For expansion")) PROCTIMERBOX _ (CREATECELL \\FIXP) PROCFX0 _ \\STACKHI) (PUTPROPS THIS.PROCESS MACRO (NIL \\RUNNING.PROCESS)) (PUTPROPS TTY.PROCESS MACRO (X (COND ((CAR X) (QUOTE IGNOREMACRO)) (T (QUOTE \\TTY.PROCESS))))) (PUTPROPS TTY.PROCESSP MACRO (X (COND ((CAR X) (QUOTE IGNOREMACRO)) (T (QUOTE (OR (NULL (THIS.PROCESS) ) (EQ (THIS.PROCESS) (TTY.PROCESS)))))))) (GLOBALVARS \\RUNNING.PROCESS \\TTY.PROCESS \\PROC.RESTARTME \\PROC.RESETME \\PROC.ABORTME) (PUTPROP (QUOTE PROC) (QUOTE IMPORTDATE) (IDATE "17-Jun-1999 21:58:52")) (PUTPROPS \\BACKCHAR MACRO (OPENLAMBDA (STREAM) (* \; "Backs up over an NS character") (\\BACKNSCHAR STREAM (UNFOLD (ACCESS-CHARSET STREAM) 256)))) (PUTPROPS \\BACKNSCHAR MACRO ((ST SHIFTEDCHARSET COUNTERVAR) (COND ((\\XCCSP ST) (\\BACKXCCSCHAR ST SHIFTEDCHARSET COUNTERVAR)) (T (COND ((QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR ( CL:FUNCALL (|ffetch| (STREAM BACKCHARFN) |of| ST) ST T)))) (T (CL:FUNCALL (|ffetch| (STREAM BACKCHARFN ) |of| ST) ST NIL))))))) (PUTPROPS \\CHECKEOLC MACRO (OPENLAMBDA (CH EOLC STREAM PEEKBINFLG COUNTERVAR) (* |;;| "Subtracts number of bytes read from COUNTERVAR, which may be NIL. In fact, should be NIL if PEEKBINFLG is T." ) (SELCHARQ CH (CR (SELECTC EOLC (CR.EOLC (CHARCODE EOL)) (CRLF.EOLC (COND (PEEKBINFLG (* |;;| "T from PEEKC, compile-time constant. In this case, must leave the fileptr where it was, except for possibly advancing over character set shifts" ) (COND ((EQ (CHARCODE LF) (UNINTERRUPTABLY (\\NSIN STREAM (UNFOLD (ACCESS-CHARSET STREAM) 256)) (* |;;| "Read the NS CR. We know that there aren't any font-shift characters in front of the CR, because they would have already been read by the \\NSPEEK that got the CR character. Since we are going to NS back the CR character, we don't need to update the counter variable" ) (PROG1 (\\PEEKBIN STREAM T) (* |;;| "LF must be in next BYTE after NS CR, regardless of coding. Character-set shifting bytes can't intervene. Then we back up over the CR that was \\NSINed above." ) (\\BACKNSCHAR STREAM)))) (CHARCODE EOL)) (T (CHARCODE CR)))) ((EQ (CHARCODE LF) (\\PEEKBIN STREAM T) ) (\\BIN STREAM) (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (SUB1 COUNTERVAR))) (CHARCODE EOL)) (T ( CHARCODE CR)))) (CHARCODE CR))) (LF (COND ((EQ EOLC LF.EOLC) (CHARCODE EOL)) (T (CHARCODE LF)))) CH))) (PUTPROPS \\INCHAR MACRO (OPENLAMBDA (STREAM COUNTERVAR) (* \; "returns a 16 bit character code") ( \\CHECKEOLC (\\NSIN STREAM (UNFOLD (ACCESS-CHARSET STREAM) 256) NIL COUNTERVAR) (FFETCH EOLCONVENTION OF STREAM) STREAM NIL COUNTERVAR))) (PUTPROPS \\INCCODE MACRO (OPENLAMBDA (STREAM COUNTERVAR) (* \; "returns a 16 bit character code") ( \\CHECKEOLC (\\NSIN STREAM (UNFOLD (ACCESS-CHARSET STREAM) 256) NIL COUNTERVAR) (|ffetch| EOLCONVENTION |of| STREAM) STREAM NIL COUNTERVAR))) (PUTPROPS \\PEEKCCODE MACRO (OPENLAMBDA (STREAM NOERROR) (\\CHECKEOLC (\\NSPEEK STREAM (UNFOLD ( ACCESS-CHARSET STREAM) 256) NIL NOERROR) (|ffetch| EOLCONVENTION |of| STREAM) STREAM T))) (PUTPROPS \\NSIN MACRO ((ST SHIFTEDCSET SHIFTEDCSETVAR COUNTERVAR) (* |;;;| "Dispatches to the appropriate character code decoder. If you want to support a new character encoding format, you have to write a decoder and add it here." ) (COND ((\\XCCSP ST) (\\XCCSIN ST SHIFTEDCSET SHIFTEDCSETVAR COUNTERVAR)) (T (COND ((QUOTE COUNTERVAR ) (CL:MULTIPLE-VALUE-BIND (CODE NUM) (CL:FUNCALL (|ffetch| (STREAM INCCODEFN) |of| ST) ST T) (AND NUM (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR NUM))) CODE)) (T (CL:FUNCALL (|ffetch| (STREAM INCCODEFN) |of| ST) ST NIL))))))) (PUTPROPS \\NSPEEK MACRO ((ST SHIFTEDCSET SHIFTEDCSETVAR NOERROR COUNTERVAR) (* |;;;| "Dispatches to the appropriate character code decoder. If you want to support a new character encoding format, you have to write a decoder and add it here." ) (COND ((\\XCCSP ST) (\\XCCSPEEK ST (UNFOLD (ACCESS-CHARSET ST) 256) NIL NOERROR)) (T (COND ((QUOTE COUNTERVAR) (CL:MULTIPLE-VALUE-BIND (CODE NUM) (CL:FUNCALL (|ffetch| (STREAM PEEKCCODEFN) |of| ST) ST NOERROR T) (AND NUM (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR NUM))) CODE)) (T (CL:FUNCALL (|ffetch| ( STREAM PEEKCCODEFN) |of| ST) ST NOERROR NIL))))))) (PUTPROPS NUMERIC-CHARSET MACRO (= . ACCESS-CHARSET)) (PUTPROPS \\CONV.JIS.TO.XCCS MACRO (OPENLAMBDA (KU TEN) (* |;;;| "Some character code is not equivalent between JIS and XCCS. In such case, we have to convert the character to corresponding XCCS." ) (COND ((\\NOT.EQUIVALENT.TO.XCCS KU) (\\DO.CONV.JIS.TO.XCCS KU TEN)) (T (LOGOR (UNFOLD KU 256) TEN)) ))) (PUTPROPS \\DO.CONV.JIS.TO.XCCS MACRO ((KU TEN) (* |;;;| " Convert a JIS code divided into KU (high 8 bit) and TEN (low 8 bit) to an corresponding XCCS code.") (COND ((\\INVALID.TENP TEN) *DEFAULT-NOT-CONVERTED-FAT-CODE*) (T (SELECTQ KU ((33 34 38) (* \; "1, 2 and 6 KU") (LET* ((CONVTABLE (\\EXTARACT.CONV.TABLE KU)) (SET (\\EXTRACT.SET TEN CONVTABLE)) ( CODE (\\EXTRACT.CODE TEN CONVTABLE))) (COND ((NEQ SET 255) (LOGOR (UNFOLD SET 256) CODE)) (T (COND (( EQ CODE 255) (* \; "Not defined in JIS.") *DEFAULT-NOT-CONVERTED-FAT-CODE*) (T (* \; "Defined in JIS but the displayable font is not assigned in the corresponding code in XCCS.") (COND ( *REPLACE-NO-FONT-CODE* *DEFAULT-NOT-CONVERTED-FAT-CODE*) (T (\\EXTRACT.NO.FONT.CODE (LOGOR (UNFOLD KU 256) TEN)))))))))) (35 (* \; "3 KU") (* \; "Alpha numeric codes are all defined as single byte codes in XCCS.") TEN) (40 (* \; "8 KU") (COND ((< 0 TEN 33) (COND (*REPLACE-NO-FONT-CODE* *DEFAULT-NOT-CONVERTED-FAT-CODE*) (T (\\EXTRACT.NO.FONT.CODE ( LOGOR KU TEN))))) (T *DEFAULT-NOT-CONVERTED-FAT-CODE*))) (116 (* \; "84 KU") (COND ((< 0 TEN 5) (LOGOR 29952 TEN)) (T *DEFAULT-NOT-CONVERTED-FAT-CODE*))) (117 (* \; "85 KU") (COND ((< 0 TEN 28) (LOGOR 29696 TEN)) (T *DEFAULT-NOT-CONVERTED-FAT-CODE*))) *DEFAULT-NOT-CONVERTED-FAT-CODE*))))) (PUTPROPS \\CONV.XCCS.TO.JIS MACRO (OPENLAMBDA (OUTSTREAM CC) (* |;;;| "Returns JIS code corresponding to XCCS charcode. Handle HANKAKU as well as ZENKAKU. If OUTSTREAM wants to convert ZENKAKUKANA to HANKAKUKANA, do so. Never returns two byte charcode for alpha-numeric character, they are all treated as single byte characode." ) (OR (COND ((\\ASCIIP CC) CC) ((\\NOT.EQUIVALENT.TO.JIS CC) (\\DO.CONV.XCCS.TO.JIS CC)) (( \\CONV.HANKAKU.TO.ZENKAKUP OUTSTREAM) (* \; "ZENKAKUKANA comes here, because their charcodes are equiavalent to JIS.") (\\CONV.ZENKAKU.KANA CC)) ( T CC)) CC))) (PUTPROPS \\DO.CONV.XCCS.TO.JIS MACRO ((CC) (GETHASH CC *XCCS-TO-JIS-CONV-TABLE*))) (PUTPROPS \\ASCIIP MACRO (OPENLAMBDA (CC) (AND (EQ (FOLDLO CC 256) 0) (< (LOGAND CC 255) 128)))) (PUTPROPS \\NOT.EQUIVALENT.TO.JIS MACRO (OPENLAMBDA (CC) (OR (EQ (FOLDLO CC 256) 0) (EQ (FOLDLO CC 256 ) 33) (EQ (FOLDLO CC 256) 34) (EQ (FOLDLO CC 256) 38) (EQ (FOLDLO CC 256) 40) (EQ (FOLDLO CC 256) 239) (EQ (FOLDLO CC 256) 241)))) (PUTPROPS \\CONV.HANKAKU.TO.ZENKAKUP MACRO ((OUTSTREAM) (STREAMPROP OUTSTREAM :HTOZP))) (PUTPROPS \\CONV.ZENKAKU.KANA MACRO ((CHAR) (GETHASH CHAR *ZENKAKU-TO-HANKAKU-CONV-TABLE*))) (PUTPROPS \\XCCSIN MACRO ((STREAM SHIFTEDCSET SHIFTEDCSETVAR COUNTERVAR) (* |;;;| "returns a 16 bit character code. SHIFTEDCSET is STREAM's char set left shifted 8, SHIFTEDCSETVAR if non-NIL is the variable to set if char set changes. COUNTERVAR if non-NIL is decremented by number of bytes read. Doesn't do EOL conversion -- \\INCHAR and \\INCCODE do that." ) (LET ((CHAR (\\BIN STREAM)) SCSET) (COND ((EQ CHAR NSCHARSETSHIFT) (* \; "Shifting character sets") (ACCESS-CHARSET STREAM (SETQ SCSET (COND ((NEQ NSCHARSETSHIFT (SETQ CHAR (\\BIN STREAM))) (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 2))) CHAR) ((PROGN (* \; "2 shift-bytes means not run-encoded") (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 3))) (EQ 0 (\\BIN STREAM))) \\NORUNCODE) (T (\\NSIN.24BITENCODING.ERROR STREAM))))) (SETQ CHAR (\\BIN STREAM)) (SETQ SCSET (COND ((QUOTE SHIFTEDCSETVAR) (* \; "CHARSETVAR=NIL means don't set") (SETQ SHIFTEDCSETVAR (UNFOLD SCSET 256))) (T (UNFOLD SCSET 256))))) (T (SETQ SCSET SHIFTEDCSET))) ( COND ((EQ SCSET (UNFOLD \\NORUNCODE 256)) (* \; "just read two bytes and combine them to a 16 bit value") (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR ( IDIFFERENCE COUNTERVAR 2))) (LOGOR (UNFOLD CHAR 256) (\\BIN STREAM))) (CHAR (AND (QUOTE COUNTERVAR) ( SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 1))) (AND CHAR (LOGOR SCSET CHAR))))))) (PUTPROPS \\XCCSPEEK MACRO ((STREAM SHIFTEDCSET SHIFTEDCSETVAR NOERROR COUNTERVAR) (* |;;| "Returns a 16 bit character code. Doesn't do EOL conversion--\\INCHAR does that. May actually read the character-set shift, storing the result in the stream. COUNTERVAR, if given, is updated to reflect any such bytes that are actually read" ) (PROG ((CHAR (\\PEEKBIN STREAM NOERROR)) SCSET) (COND ((NULL CHAR) (RETURN NIL)) ((EQ CHAR NSCHARSETSHIFT) (* \; "CHARSETVAR=NIL means don't set") (\\BIN STREAM) (* \; "Consume the char shift byte") (ACCESS-CHARSET STREAM (SETQ SCSET (COND ((NEQ NSCHARSETSHIFT (SETQ CHAR (\\BIN STREAM))) (* \; "Note: no eof error check on this \\BIN -- an eof in the middle of a charset shift is an error") (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 2))) CHAR) ((PROGN (* \; "2 shift-bytes means not run-encoded") (AND (QUOTE COUNTERVAR) (SETQ COUNTERVAR (IDIFFERENCE COUNTERVAR 3))) (EQ 0 (\\BIN STREAM))) \\NORUNCODE) (T (\\NSIN.24BITENCODING.ERROR STREAM))))) (SETQ SCSET (COND ((QUOTE SHIFTEDCSETVAR) (* \; "CHARSETVAR=NIL means don't set") (SETQ SHIFTEDCSETVAR ( UNFOLD SCSET 256))) (T (UNFOLD SCSET 256)))) (COND ((NULL (SETQ CHAR (\\PEEKBIN STREAM NOERROR))) ( RETURN NIL)))) (T (SETQ SCSET SHIFTEDCSET))) (RETURN (COND ((EQ SCSET (UNFOLD \\NORUNCODE 256)) (* |;;| "just peek two bytes and combine them to a 16 bit value. Again, is an error if we hit eof in mid-character" ) (\\BIN STREAM) (PROG1 (LOGOR (UNFOLD CHAR 256) (\\PEEKBIN STREAM NOERROR)) (\\BACKFILEPTR STREAM))) (T (LOGOR SHIFTEDCSET CHAR))))))) (PUTPROPS \\BACKXCCSCHAR MACRO ((STREAM SHIFTEDCHARSET COUNTERVAR) (AND (\\BACKFILEPTR STREAM) (COND ( (COND (SHIFTEDCHARSET (EQ SHIFTEDCHARSET (UNFOLD \\NORUNCODE 256))) (T (EQ \\NORUNCODE (ACCESS-CHARSET STREAM)))) (COND ((\\BACKFILEPTR STREAM) (AND (QUOTE COUNTERVAR) (|add| COUNTERVAR 2)) T) ((QUOTE COUNTERVAR) (|add| COUNTERVAR 1)))) ((QUOTE COUNTERVAR) (|add| COUNTERVAR 1)))))) (PUTPROPS \\XCCSP MACRO (OPENLAMBDA (ST) (NOT (|ffetch| (STREAM NOTXCCS) |of| (\\DTEST ST (QUOTE STREAM)))))) (PUTPROPS \\EXTRACT.NO.FONT.CODE MACRO ((JISCODE) (CDR (ASSOC JISCODE *JIS-TO-XCCS-CONV-NO-FONT-TABLE* )))) (PUTPROPS \\EXTARACT.CONV.TABLE MACRO ((KU) (CDR (ASSOC KU *JIS-TO-XCCS-CONV-TABLE-LIST*)))) (PUTPROPS \\NOT.EQUIVALENT.TO.XCCS MACRO ((KU) (* |;;;| " The JIS codes which are not equiavelent to XCCS reside in 1, 2, 3, 6, 8 and 84 KU. Although from 84-5 to 94-94 inclusive are not defined in JIS, that is they are GAIJI, they are also handled here." ) (OR (EQ KU 33) (EQ KU 34) (EQ KU 35) (EQ KU 38) (EQ KU 40) (EQ KU 116) (EQ KU 117)))) (PUTPROPS \\EXTRACT.SET MACRO ((TEN TABLE) (ELT TABLE (IDIFFERENCE (UNFOLD (IDIFFERENCE TEN 32) 2) 1)) )) (PUTPROPS \\EXTRACT.CODE MACRO ((TEN TABLE) (ELT TABLE (UNFOLD (IDIFFERENCE TEN 32) 2)))) (PUTPROPS \\CHNAGE.KI.MODE MACRO (OPENLAMBDA (ST INPUTFLG ENTERP) (* |;;;| "INPUTFLG is true if \\CHNAGE.KI.MODE is called in the context in which ST is an input stream.") (COND (INPUTFLG (COND (ENTERP (|freplace| (STREAM IN.KANJIIN) |of| (\\DTEST ST (QUOTE STREAM)) |with| T)) ( T (|freplace| (STREAM IN.KANJIIN) |of| (\\DTEST ST (QUOTE STREAM)) |with| NIL)))) (T (COND (ENTERP ( |freplace| (STREAM OUT.KANJIIN) |of| (\\DTEST ST (QUOTE STREAM)) |with| T)) (T (|freplace| (STREAM OUT.KANJIIN) |of| (\\DTEST ST (QUOTE STREAM)) |with| NIL))))))) (PUTPROPS \\KIMODEP MACRO (OPENLAMBDA (ST INPUTFLG) (* |;;;| "INPUTFLG is true if \\KIMODEP is called in the context in which ST is an input stream.") (COND ( INPUTFLG (|ffetch| (STREAM IN.KANJIIN) |of| (\\DTEST ST (QUOTE STREAM)))) (T (|ffetch| (STREAM OUT.KANJIIN) |of| (\\DTEST ST (QUOTE STREAM))))))) (PUTPROPS \\HANKAKUP MACRO ((CHAR) (< 160 CHAR 224))) (PUTPROPS \\KANJIP MACRO ((CHAR) (< 12158 CHAR 29733))) (PUTPROPS \\NOTGAIJIP MACRO ((CHAR) (OR (< 8480 CHAR 10305) (< 12158 CHAR 29733)))) (PUTPROPS \\INVALID.TENP MACRO (OPENLAMBDA (TEN) (OR (< TEN 33) (< 126 TEN)))) (PUTPROPS \\CONV.HANKAKU.KANA MACRO ((CHAR) (GETHASH CHAR *HANKAKU-TO-ZENKAKU-CONV-TABLE*))) (PUTPROPS \\OUTKI MACRO ((STREAM) (\\BOUT OUTSTREAM (CHARCODE ESC)) (\\BOUT OUTSTREAM (CHARCODE $)) ( \\BOUT OUTSTREAM (CHARCODE B)))) (PUTPROPS \\OUTKO MACRO ((STREAM) (\\BOUT OUTSTREAM (CHARCODE ESC)) (\\BOUT OUTSTREAM (CHARCODE \()) ( \\BOUT OUTSTREAM (CHARCODE J)))) (PUTPROPS \\CONV.SJIS.TO.JIS MACRO (OPENLAMBDA (HI LO) (* |;;;| "Convert Shift-JIS to JIS. The variable named CH1 and CH2 are set to the converted hight 8 bit and low 8bit of JIS code respectively." ) (SETQ CH1 (IDIFFERENCE HI (COND ((> HI 159) 177) (T 113)))) (SETQ CH1 (IPLUS (UNFOLD CH1 2) 1)) ( SETQ CH2 (COND ((> LO 158) (PROG1 (IDIFFERENCE LO 126) (SETQ CH1 (IPLUS CH1 1)))) (T (IDIFFERENCE LO ( COND ((> LO 126) (IPLUS 31 1)) (T 31)))))))) (PUTPROPS \\CONV.JIS.TO.SJIS MACRO (OPENLAMBDA (HI LO) (* |;;;| "Convert JIS to Shift-JIS. The variable named CH1 and CH2 are set to the converted hight 8 bit and low 8bit of Shift-JIS code respectively." ) (SETQ CH2 (COND ((ODDP HI) (SETQ CH2 (IPLUS LO 31)) (COND ((>= CH2 127) (IPLUS CH2 1)) (T CH2))) (T (IPLUS LO 126)))) (SETQ CH1 (IPLUS (FOLDLO (IDIFFERENCE HI 33) 2) 129)) (AND (> CH1 159) (SETQ CH1 ( IPLUS CH1 64))))) (PUTPROPS \\SJIS.KANJI.FIRST.BYTEP MACRO (OPENLAMBDA (CHAR) (OR (< 127 CHAR 160) (< 223 CHAR 256)))) (PUTPROPS \\EUC.KANJI.FIRST.BYTEP MACRO ((CHAR) (< 160 CHAR 255))) (PUTPROPS \\GAIJIP MACRO ((CHAR) (EQ CHAR 143))) (PUTPROPS \\EUC.HANKAKUP MACRO ((CHAR) (EQ CHAR 142))) (PUTPROP (QUOTE LLREAD) (QUOTE IMPORTDATE) (IDATE " 4-Aug-1993 14:43:07")) (PUTPROPS EMPASSWORDLOC DMACRO (LAMBDA NIL (* |lmm| "24-MAR-83 06:46") (|fetch| (IFPAGE |UserPswdAddr| ) |of| |\\InterfacePage|))) (PUTPROPS \\DECRYPT.PWD.CHAR MACRO ((CHAR) (LOGXOR CHAR 73))) (PUTPROP (QUOTE PASSWORDS) (QUOTE IMPORTDATE) (IDATE "16-May-1990 21:02:21")) (RPAQQ MICASPERINCH 2540) (RPAQQ MICASPERMILLIMETER 100) (CONSTANTS (MICASPERINCH 2540) (MICASPERMILLIMETER 100)) (PUTPROP (QUOTE INTERPRESS) (QUOTE IMPORTDATE) (IDATE "16-Apr-2018 21:56:38")) (RPAQ MICASPERPT (FQUOTIENT 2540 72)) (RPAQQ IHALFMICASPERPT 17) (RPAQQ IMICASPERPT 35) (CONSTANTS (MICASPERPT (FQUOTIENT 2540 72)) (IHALFMICASPERPT 17) (IMICASPERPT 35)) (DEFMACRO \\MICASTOPTS (MICAS) (COND ((NUMBERP MICAS) (QUOTIENT MICAS MICASPERPT)) (T (BQUOTE ( QUOTIENT (\\\, MICAS) MICASPERPT))))) (PUTPROP (QUOTE HARDCOPY) (QUOTE IMPORTDATE) (IDATE "16-Apr-2018 22:15:08")) (FILESLOAD (SYSLOAD FROM VALUEOF DIRECTORIES) CMLARRAY-SUPPORT) (PUTPROP (QUOTE CMLARRAY) (QUOTE IMPORTDATE) (IDATE " 6-Jan-1993 12:21:21")) (RPAQQ \\MISCN-TABLE-LIST ((USER-SUBR 0 \\USER-SUBR-UFN T) (CL:VALUES 1 CL::VALUES-UFN NIL) (CL:SXHASH 2 CL::SXHASH-UFN NIL) (CL::EQLHASHBITSFN 3 CL::EQLHASHBITSFN-UFN NIL) (STRINGHASHBITS 4 \\STRINGHASHBITS-UFN NIL) (STRING-EQUAL-HASHBITS 5 \\STRING-EQUAL-HASHBITS-UFN NIL) (CL:VALUES-LIST 6 CL::VALUES-LIST-UFN NIL) (|LCFetchMethod| 7 |LCFetchMethod| NIL) (|LCFetchMethodOrHelp| 8 NIL NIL) ( |LCFindVarIndex| 9 NIL NIL) (|LCGetIVValue| 10 NIL NIL) (|LCPutIVValue| 11 NIL NIL))) (RPAQQ \\USER-SUBR-LIST ((DUMMY 10 DUMMY-UFN) (SAMPLE-USER-SUBR 0 SAMPLE-USER-SUBR-UFN))) (RPAQQ \\INITSUBRS ((BACKGROUNDSUBR 6) (CHECKBCPLPASSWORD 7) (DISKPARTITION 8) (DSPBOUT 9) (DSPRATE 10 ) (GATHERSTATS 11) (GETPACKETBUFFER 12) (LISPFINISH 13) (MOREVMEMFILE 14) (RAID 15) (READRAWPBI 16) ( WRITERAWPBI 17) (SETSCREENCOLOR 18) (SHOWDISPLAY 19) (PUPLEVEL1STATE 20) (WRITESTATS 21) ( CONTEXTSWITCH 22) (COPYSYS0SUBR 23) (WRITEMAP 24) (UFS-GETFILENAME 34) (UFS-DELETEFILE 35) ( UFS-RENAMEFILE 36) (COM-READPAGES 37) (COM-WRITEPAGES 38) (COM-TRUNCATEFILE 39) (UFS-DIRECTORYNAMEP 41 ) (COM-GETFREEBLOCK 45) (SETUNIXTIME 48) (GETUNIXTIME 49) (COPYTIMESTATS 50) (UNIX-USERNAME 51) ( UNIX-FULLNAME 52) (UNIX-GETENV 53) (UNIX-GETPARM 54) (CHECK-SUM 55) (ETHER-SUSPEND 56) (ETHER-RESUME 57) (ETHER-AVAILABLE 58) (ETHER-RESET 59) (ETHER-GET 60) (ETHER-SEND 61) (ETHER-SETFILTER 62) ( ETHER-CHECK 63) (DSPCURSOR 64) (SETMOUSEXY 65) (DSP-VIDEOCOLOR 66) (DSP-SCREENWIDTH 67) ( DSP-SCREENHEIGHT 68) (BITBLTSUB 69) (BLTCHAR 70) (TEDIT.BLTCHAR 71) (BITBLT.BITMAP 72) ( BLTSHADE.BITMAP 73) (RS232C-CMD 74) (RS232C-READ-INIT 75) (RS232C-WRITE 76) (KEYBOARDBEEP 80) ( KEYBOARDMAP 81) (KEYBOARDSTATE 82) (VMEMSAVE 89) (LISP-FINISH 90) (NEWPAGE 91) (DORECLAIM 92) ( DUMMY-135Q 93) (NATIVE-MEMORY-REFERENCE 94) (OLD-COMPILE-LOAD-NATIVE 95) (DISABLEGC 96) ( COM-SETFILEINFO 103) (COM-OPENFILE 104) (COM-CLOSEFILE 105) (DSK-GETFILENAME 106) (DSK-DELETEFILE 107) (DSK-RENAMEFILE 108) (COM-NEXT-FILE 110) (COM-FINISH-FINFO 111) (COM-GEN-FILES 112) ( DSK-DIRECTORYNAMEP 113) (COM-GETFILEINFO 114) (COM-CHANGEDIR 116) (UNIX-HANDLECOMM 117) (RPC-CALL 119) (MESSAGE-READP 120) (MESSAGE-READ 121) (MONITOR-CONTROL 128) (GET-NATIVE-ADDR-FROM-LISP-PTR 131) ( GET-LISP-PTR-FROM-NATIVE-ADDR 132) (LOAD-NATIVE-FILE 133) (SUSPEND-LISP 134) (NEW-BLTCHAR 135) ( COLOR-INIT 136) (COLOR-SCREENMODE 137) (COLOR-MAP 138) (COLOR-BASE 139) (|C-SlowBltChar| 140) ( UNCOLORIZE-BITMAP 141) (COLORIZE-BITMAP 142) (COLOR-8BPPDRAWLINE 143) (TCP-OP 144) (WITH-SYMBOL 145) ( CAUSE-INTERRUPT 146) (OPEN-SOCKET 160) (CLOSE-SOCKET 161) (READ-SOCKET 162) (WRITE-SOCKET 163) ( CALL-C-FUNCTION 167) (DLD-LINK 168) (DLD-UNLINK-BY-FILE 169) (DLD-UNLINK-BY-SYMBOL 170) ( DLD-GET-SYMBOL 171) (DLD-GET-FUNC 172) (DLD-FUNCTION-EXECUTABLE-P 173) (DLD-LIST-UNDEFINED-SYMBOLS 174 ) (C-MALLOC 175) (C-FREE 176) (C-PUTBASEBYTE 177) (C-GETBASEBYTE 178) (CHAR-OPENFILE 200) (CHAR-BIN 201) (CHAR-BOUT 202) (CHAR-IOCTL 203) (CHAR-CLOSEFILE 204) (CHAR-EOFP 205) (CHAR-READP 206) (CHAR-BINS 207) (CHAR-BOUTS 208) (CHAR-FILLBUFFER 209))) (PUTPROP (QUOTE LLSUBRS) (QUOTE IMPORTDATE) (IDATE "17-Dec-1992 14:28:41")) STOP \ No newline at end of file diff --git a/lispusers/MEDLEY-FIX-DIRS b/lispusers/MEDLEY-FIX-DIRS index fa56b1ad..f518f711 100644 --- a/lispusers/MEDLEY-FIX-DIRS +++ b/lispusers/MEDLEY-FIX-DIRS @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP") (FILECREATED "16-Jan-2021 22:07:03" |{DSK}larry>ilisp>medley>lispusers>MEDLEY-FIX-DIRS.;8| 3195 |changes| |to:| (FNS MEDLEY-FIX-DIRS MAKE-WHEREIS-HASH FIX-MEDLEY-LINKS) (VARS MEDLEY-FIX-DIRSCOMS) |previous| |date:| "16-Jan-2021 00:39:09" |{DSK}larry>ilisp>medley>lispusers>MEDLEY-FIX-DIRS.;5|) (PRETTYCOMPRINT MEDLEY-FIX-DIRSCOMS) (RPAQQ MEDLEY-FIX-DIRSCOMS ((FNS FIX-MEDLEY-LINKS MEDLEY-FIX-DIRS) (VARS MEDLEY-FIX-DIRS) (FILES COMPAREDIRECTORIES WHERE-IS) (FNS MAKE-EXPORTS-ALL MAKE-WHEREIS-HASH))) (DEFINEQ (FIX-MEDLEY-LINKS (LAMBDA NIL (* \; "Edited 16-Jan-2021 21:27 by larry") (|ShellCommand| "scripts/fixlinks") (|ShellCommand| "/bin/sh /tmp/doit"))) (MEDLEY-FIX-DIRS (LAMBDA NIL (* \; "Edited 4-Jan-2021 15:42 by larry") (|for| X |in| MEDLEY-FIX-DIRS |join| (FIX-DIRECTORY-DATES (MEDLEYDIR (PRINT X T)))))) ) (RPAQQ MEDLEY-FIX-DIRS ("sources" "library" "lispusers" "internal/library" "greetfiles" "docs>Documentation Tools" "cltl2" "clos" "makesysout")) (FILESLOAD COMPAREDIRECTORIES WHERE-IS) (DEFINEQ (MAKE-EXPORTS-ALL (LAMBDA NIL (* \; "Edited 15-Jan-2021 13:57 by larry") (* "Edited May 3, 2018 by Ron Kaplan--relative to MEDLEYDIR/lispcore/. Don't know why it does the CORE/RENAME") (*  "Edited Aug 17 94 by Sybalsky -- point it to /king/export/lispcore as the truth directory.") (*  "Edited July 5, 1990 by Sybalsky -- point it to Pele as the truth directory.") (*  "Edited September 29, 1986 by van Melle") (CNDIR (MEDLEYDIR "sources")) (LOAD 'FILESETS) (RENAMEFILE (GATHEREXPORTS EXPORTFILES '{CORE}EXPORTS.ALL) (MEDLEYDIR "libary" "EXPORTS.ALL" T)))) (MAKE-WHEREIS-HASH (LAMBDA NIL (* \; "Edited 16-Jan-2021 22:04 by larry") (LET ((FILING.ENUMERATION.DEPTH 1) HASHFILE) (DRIBBLE (MEDLEYDIR "loadups" "WHEREIS.HASH.DRIBBLE" T)) (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (MEDLEYDIR "loadups" "XWHEREIS.HASH" T) :FILES (|for| X |in| MEDLEY-FIX-DIRS |collect| (CONCAT (MEDLEYDIR X) "*.;")) :NEW T)) (RENAMEFILE HASHFILE (MEDLEYDIR "loadups" "WHEREIS.HASH" T)) (DRIBBLE)))) ) (DECLARE\: DONTCOPY (FILEMAP (NIL (720 1170 (FIX-MEDLEY-LINKS 730 . 939) (MEDLEY-FIX-DIRS 941 . 1168)) (1397 3172 ( MAKE-EXPORTS-ALL 1407 . 2402) (MAKE-WHEREIS-HASH 2404 . 3170))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP") (FILECREATED "16-Jan-2021 23:12:42" |{DSK}larry>ilisp>medley>lispusers>MEDLEY-FIX-DIRS.;9| 3213 |changes| |to:| (FNS MAKE-EXPORTS-ALL MEDLEY-FIX-DIRS MAKE-WHEREIS-HASH FIX-MEDLEY-LINKS) (VARS MEDLEY-FIX-DIRSCOMS) |previous| |date:| "16-Jan-2021 00:39:09" |{DSK}larry>ilisp>medley>lispusers>MEDLEY-FIX-DIRS.;5|) (PRETTYCOMPRINT MEDLEY-FIX-DIRSCOMS) (RPAQQ MEDLEY-FIX-DIRSCOMS ((FNS FIX-MEDLEY-LINKS MEDLEY-FIX-DIRS) (VARS MEDLEY-FIX-DIRS) (FILES COMPAREDIRECTORIES WHERE-IS) (FNS MAKE-EXPORTS-ALL MAKE-WHEREIS-HASH))) (DEFINEQ (FIX-MEDLEY-LINKS (LAMBDA NIL (* \; "Edited 16-Jan-2021 21:27 by larry") (|ShellCommand| "scripts/fixlinks") (|ShellCommand| "/bin/sh /tmp/doit"))) (MEDLEY-FIX-DIRS (LAMBDA NIL (* \; "Edited 4-Jan-2021 15:42 by larry") (|for| X |in| MEDLEY-FIX-DIRS |join| (FIX-DIRECTORY-DATES (MEDLEYDIR (PRINT X T)))))) ) (RPAQQ MEDLEY-FIX-DIRS ("sources" "library" "lispusers" "internal/library" "greetfiles" "docs>Documentation Tools" "cltl2" "clos" "makesysout")) (FILESLOAD COMPAREDIRECTORIES WHERE-IS) (DEFINEQ (MAKE-EXPORTS-ALL (LAMBDA NIL (* \; "Edited 16-Jan-2021 22:49 by larry") (* "Edited May 3, 2018 by Ron Kaplan--relative to MEDLEYDIR/lispcore/. Don't know why it does the CORE/RENAME") (*  "Edited Aug 17 94 by Sybalsky -- point it to /king/export/lispcore as the truth directory.") (*  "Edited July 5, 1990 by Sybalsky -- point it to Pele as the truth directory.") (*  "Edited September 29, 1986 by van Melle") (CNDIR (MEDLEYDIR "sources")) (LOAD 'FILESETS) (RENAMEFILE (GATHEREXPORTS EXPORTFILES '{CORE}EXPORTS.ALL) (MEDLEYDIR "library" "EXPORTS.ALL" T)))) (MAKE-WHEREIS-HASH (LAMBDA NIL (* \; "Edited 16-Jan-2021 22:04 by larry") (LET ((FILING.ENUMERATION.DEPTH 1) HASHFILE) (DRIBBLE (MEDLEYDIR "loadups" "WHEREIS.HASH.DRIBBLE" T)) (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (MEDLEYDIR "loadups" "XWHEREIS.HASH" T) :FILES (|for| X |in| MEDLEY-FIX-DIRS |collect| (CONCAT (MEDLEYDIR X) "*.;")) :NEW T)) (RENAMEFILE HASHFILE (MEDLEYDIR "loadups" "WHEREIS.HASH" T)) (DRIBBLE)))) ) (DECLARE\: DONTCOPY (FILEMAP (NIL (737 1187 (FIX-MEDLEY-LINKS 747 . 956) (MEDLEY-FIX-DIRS 958 . 1185)) (1414 3190 ( MAKE-EXPORTS-ALL 1424 . 2420) (MAKE-WHEREIS-HASH 2422 . 3188))))) STOP \ No newline at end of file diff --git a/lispusers/MEDLEY-FIX-DIRS.LCOM b/lispusers/MEDLEY-FIX-DIRS.LCOM index c7d78ffed5e261c792f1f090a823e258f47642da..3438c45f36860f732ddb3c70d3eb088cc3ea1c22 100644 GIT binary patch delta 165 zcmeAXcqK3)gw5E>(8$VUVw4}F<;0a5+`Ki(8Hsu6sl`?`laH_|PF~N*Hd&WlmR+GH zGp|O0cjE07PKXX8C54H3R(h5-3dTl;#tLwKH3~H)`BpUw8g72U3cilsuDY%f0scWD z!Mct6T6lzNHt!flB-28$k|6#Ni^L2IcagEe<^Ni4S@eB%f_V*3e bRN$TL%cKR=&um)5yLk(fHq+(@EM3e1EC?kg diff --git a/loadups/system.hash b/loadups/system.hash deleted file mode 100644 index 176e6f23496894626c5e70ec7c22bd388cd9bbc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1857132 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

puHVU}rdK&+Q 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�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ⅅQheY^ThuRbhk!5>;6wkzefjKZzUq&L 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

mQ9rs> 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�Bn|KwwmVH8f2$CGfr8%0&1C)B$}t%z5oTYF+?+r3gCf znmpQ%7SX;Y9-bUB&_!DuZ^|T;0sK{ z)gpluY6D3~=A1KX1a%Vxji_A)0~z!Kg%g$7aiflQYs8ooKHfjj_2aWHpT_#{8P{KT z1G#>Rp{ZS+Xw~JTNFrB0MtrSi*osu5Gb(IdWN@xDgfCQJ6T!-V(G}@}7fB3XI!N2N zWD(@3jzBxL=2|y9K-jChYme?*5ld(0jsx*-(|r#-4(j!ob}tcVRni6(Ht2v($4qfh z8^26I>M|oPg3O0lt!!wG`0Kxoty2Usp0}!z-?6}UAc7ppT5a;%nIbWRjF@&zx_^oU zju1!+%|nCujv!|R&k+y`zrU|yRJ5f_rzkho*2I*F+r*N~*~Cl>_yq@843mCw8L7gh zGQ5>t)TbVrOf(NgE|-Uv7V0DavmPmRT#Nd5OBT6QREu~PSuL_qSPXAmY^I}s-d~oD)&R0h*Z`tj z*Z^``*gyYCSYne?x&dcOd#lVPn5N71&}0I7D00y}w6sumTpF3w17^_*q)nkbG?`Ey zid-lUO(+ziqSdZJEH%mos!X_6i*f;5s6rvt&I*Zw${u5Hz(Ea-g&y+4_;B;aUa4w) zOsQsktP;iem_ohm@84kY`ZIdlLgIeyU}&LAMQpTKB4YzpEacwVg>0Zog>0ae2-!dt z3dtKR>cQw!g|2Y}4kbgp9gqs)uzU!+w)ShGReS~ovj;AWqOuRIyfd)%8ZiS{&-(Sk zP>jOM6EU=!;Dg|ttQ3v?`15>_K%Ea)Ped6&2)A}|Sy*=fW`SKp zjsU;sGgU~gw~c)`#X6iG(y4LUZ2!YIn%F;AO3>SOMb?M>ckeOhXE1PJYt!?A*p2Zh zm?~1#xH&qDfiAl{RifdVrUEiS>lit(C!#iAr{Lc8sp?!7xsp{yYOGVhVhuwn973al zKpE{AP>!}WuQKYcspUqJ&J6b{``h+O5ub&B_Wu}OVRWO}oSwR=vT8Rx%!Vdy#HU)f zZy`-YIsvHatTirfv?Rh88qf^87)hkhvAMa4ZZX)wOif6XURED0#i1Rim+3FuyF(

Dg#%Md*)P-|b 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

?su&G$<%~`@6XaT`p_UHmZ+?NU{176GSq%}Z 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.;3 15992 changes to%: (VARS SYNCLISPFILESCOMS MEDLEY-INIT-VARS) (FNS MEDLEYDIR MEDLEY-INIT-VARS) previous date%: "12-Dec-2020 16:12:05" {DSK}larry>ilisp>medley>makesysout>SYNCLISPFILES.;1 ) (PRETTYCOMPRINT SYNCLISPFILESCOMS) (RPAQQ SYNCLISPFILESCOMS [(FNS MEDLEYDIR INTERLISPMODE MEDLEY-INIT-VARS) (COMMANDS cd pwd) (FNS shell) (VARS MEDLEY-INIT-VARS) (FNS SYNCLISPFILES ENDLOADUP MEDLEYVERSION NOPUPPATCH) (INITVARS (WRITELISPSYSOUTFLAG T)) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (P (KEYACTION 'LOCK '(LOCKTOGGLE . IGNORE)) (SYNCLISPFILES))) (PROP FILETYPE SYNCLISPFILES) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA shell) (NLAML) (LAMA]) (DEFINEQ (MEDLEYDIR [LAMBDA (DIRNAME FILENAME OUTPUT) (* ; "Edited 14-Dec-2020 17:12 by larry") (if (NULL DIRNAME) then (if (OR (NOT (BOUNDP 'MEDLEYDIR)) (NOT MEDLEYDIR)) then (OR (SETQ MEDLEYDIR (DIRECTORYNAME (OR (UNIX-GETENV "MEDLEYDIR") T))) (DIRECTORYNAME T)) elseif (STRPOS "/" MEDLEYDIR) then (SETQ MEDLEYDIR (DIRECTORYNAME MEDLEYDIR)) else MEDLEYDIR) elseif (LISTP DIRNAME) then (for X in DIRNAME collect (MEDLEYDIR X)) elseif FILENAME then (SETQ FILENAME (CONCAT (MEDLEYDIR DIRNAME) FILENAME)) (if OUTPUT then FILENAME else (OR (INFILEP FILENAME) (ERROR "No such medley file" FILENAME))) else (OR (DIRECTORYNAME (CONCAT (MEDLEYDIR) DIRNAME)) (ERROR "No such medley directory" DIRNAME]) (INTERLISPMODE [LAMBDA (OLD?) (* N.H.Briggs " 2-Feb-88 14:26") (PROCESSPROP 'EXEC 'PROFILE (XCL:COPY-PROFILE (if OLD? then "OLD-INTERLISP-T" else "INTERLISP"))) (XCL:SET-DEFAULT-EXEC-TYPE (if OLD? then "OLD-INTERLISP-T" else "INTERLISP")) (SETQ *DEFAULT-MAKEFILE-ENVIRONMENT* (LIST :READTABLE (if OLD? then "OLD-INTERLISP-FILE" else "INTERLISP") :PACKAGE "INTERLISP"]) (MEDLEY-INIT-VARS [LAMBDA (CLEAR) (* ; "Edited 14-Dec-2020 17:30 by larry") (* ;; "MEDLEY-INIT-VARS has variables that might need to get reset. ") (if CLEAR then (SETQ MEDLEYDIR NIL) (SETQ XCL::*WHERE-IS-CASH-FILES* NIL) (for X in MEDLEY-INIT-VARS do (SET (CAR X))) elseif [OR (NOT (BOUNDP 'MEDLEYDIR)) (AND (NULL MEDLEYDIR) (NULL (MEDLEYDIR] then (PRINTOUT T "WARNING: MEDLEYDIR not set correctly" " set it and call (MEDLEY-INIT-VARS) again" T) else [for X in MEDLEY-INIT-VARS do (SET (CAR X) (EVAL (CADR X] (* ;; "WHEREIS doesn't follow conventions") (CL:WHEN (GETD 'XCL::ADD-WHERE-IS-DATABASE) (SETQ XCL::*WHERE-IS-CASH-FILES* NIL) (XCL::ADD-WHERE-IS-DATABASE (MEDLEYDIR "loadups" "WHEREIS.HASH")) (XCL::ADD-WHERE-IS-DATABASE (MEDLEYDIR "loadups" "system.hash"))) NIL]) ) (DEFCOMMAND cd (DIR) (/CNDIR DIR)) (DEFCOMMAND pwd NIL (DIRECTORYNAME T)) (DEFINEQ (shell [NLAMBDA LINE (* ;  "Edited 7-Sep-2020 13:28 by rmk:") [SETQ LINE (CONCATLIST (for X in LINE join (LIST X " "] (CL:WITH-OPEN-FILE (STREAM "{NODIRCORE}shell-dribble.txt" :DIRECTION :IO) (ShellCommand LINE STREAM) (SETFILEPTR STREAM 0) (until (EOFP STREAM) collect (CL:READ-LINE STREAM :EOF-ERROR-P NIL :EOF-VALUE NIL]) ) (RPAQQ MEDLEY-INIT-VARS ([LISPUSERSDIRECTORIES (MEDLEYDIR '("library" "lispusers" "internal/library"] [LISPSOURCEDIRECTORIES (MEDLEYDIR '("sources"] (LISPSOURCEDIRECTORY (CAR LISPSOURCEDIRECTORIES)) (IRM.HOST&DIR (MEDLEYDIR '"docs/dinfo")) (IRM.DINFOGRAPH) (DIRECTORIES (APPEND LISPUSERSDIRECTORIES LISPSOURCEDIRECTORIES)) [LOGINHOST/DIR (DIRECTORYNAME (OR (UNIX-GETENV "LOGINDIR") (UNIX-GETENV "HOME"] [USERGREETFILES `((,LOGINHOST/DIR "INIT" COM) (,LOGINHOST/DIR "INIT"] [DISPLAYFONTDIRECTORIES (MEDLEYDIR '("fonts/displayfonts" "fonts/altofonts"] [POSTSCRIPTFONTDIRECTORIES (MEDLEYDIR '("fonts/postscriptfonts"] [INTERPRESSFONTDIRECTORIES (MEDLEYDIR '("fonts/ipfonts"] (XCL::*WHERE-IS-CASH-FILES*))) (DEFINEQ (SYNCLISPFILES [LAMBDA (NODRIBBLE KEEPPUP) (* ; "Edited 5-Dec-2020 12:34 by larry") (* ;  "Edited 23-Oct-2020 23:51 by rmk:") (* ;  "Edited 20-Apr-2018 18:28 by rmk:") (* ;; "This ensures that files in the xlisp.sysout are as up-to-date as possible with respect to lispcore/sources. Reload (compiled, if possible) files that correspond to symbolic files whose filedates are later than the filedate in the system. If you want a new compilation of a file that has not been modified to be included, then you must make a trivial update of the symbolic file and recompile it, to give it a new, later date. This is because it is unsafe as a general default to load compiled files with dates later than the sysout, and the sysout doesn't record the dates of loaded compiled files, just their symbolic versions.") (* ;; " Should be run while connected to MEDLEYDIR") (CLRPROMPT) (MEDLEY-INIT-VARS) (if (WINDOWP LOGOW) then (CLOSEW LOGOW)) (MOVD 'NILL 'LOGOW) (SETQ LISPMAKESYSDATE MAKESYSDATE) (LET (SKIPFILES (SOURCEDIR (MEDLEYDIR "sources"))) (SETQ MAKESYSFILENAME (MEDLEYDIR "loadups" "xlisp.sysout" T)) (* ;;  "FASLOAD has to come first, unconditionally, to get the DFASL file dates converted properly.") (CL:UNLESS NODRIBBLE (DRIBBLE (MEDLEYDIR "loadups" "xlisp.dribble" T))) (BKSYSBUF " ") (PRINTOUT T T "Synchronizing Lisp sysout at " (DATE) T) (PRINTOUT T 5 (CDAR (GETP 'SYNCLISPFILES 'FILEDATES)) T 5 "created " (CAAR (GETP 'SYNCLISPFILES 'FILEDATES)) T T) (push SKIPFILES 'FASLOAD) (LOAD (MEDLEYDIR "sources" "FASLOAD.DFASL") 'SYSLOAD) (push SKIPFILES 'ATBL) (* ;  "Whole file can't be reloaded--smashes readtabl") (LOADFNS '(\ATBLSET \MAPCHARTABLE RESETREADTABLE) (MEDLEYDIR "sources" "ATBL.LCOM") 'SYSLOAD) (LOADVARS '\KEYNAMES (MEDLEYDIR "sources" "LLKEY") 'SYSLOAD) (* ; "Extended keynames for Mac/PC") (push SKIPFILES 'LLKEY) (* ; "Loading whole file freezes") (push SKIPFILES 'MAIKOLOADUPFNS) (* ;  "Can't reload even if compiled files are later") (push SKIPFILES 'SUNFONT) (* ;  "Old font organization, not relevant") (for LF FF CFILE LOADEDDATE FILEDATE IFILEDATE NOCOMPILEDFILES CFILES (COUNT _ 0) in (LDIFFERENCE SYSFILES SKIPFILES) do [[SETQ LOADEDDATE (CAAR (GETP LF 'FILEDATES] (* ;  "Date of symbolic file whose compile file was loaded") (CL:UNLESS LOADEDDATE (PRINTOUT T T LF " does not have a loaded filedate, probably not a Lisp file; skipped" T) (GO $$ITERATE)) (SETQ FF (PACKFILENAME.STRING 'NAME LF 'BODY SOURCEDIR)) (SETQ FILEDATE (FILEDATE FF)) (* ; "Date of current source file") (CL:UNLESS FILEDATE (PRINTOUT T LF " does not have a file-directory date, not updated" T) (GO $$ITERATE)) (SETQ CFILES (for EXT in *COMPILED-EXTENSIONS* when (SETQ CFILE (INFILEP (PACKFILENAME.STRING 'EXTENSION EXT 'BODY FF))) collect CFILE)) (SETQ CFILE (COND [CFILES (* ;;  "If more than one (LCOM, DFASL), pick the newest one.") (for CF in CFILES largest (IDATE (FILEDATE CF T] (T (PRINTOUT T "Note: No compiled file for " LF T) (push NOTCOMPILEDFILES LF) FF))) (SETQ IFILEDATE (IDATE FILEDATE)) (CL:UNLESS (IGREATERP IFILEDATE 0) (PRINTOUT T "Funny file date " FILEDATE " for " LF ", not updated" T) (GO $$ITERATE)) (* ;; "Load the compiled file if the date of the symbolic file is later than the symbolic file-date in the sysout. If an updated source and compiled file were copied from another directory, we update the FILEDATES property to point to the new location. If the loaded and file dates are the same, then update the FILEDATES property to point to the possibly new path name and version even if we don't need to load.") (SETQ LOADEDDATE (IDATE LOADEDDATE)) (if (IGREATERP IFILEDATE LOADEDDATE) then (add COUNT 1) (LOAD CFILE 'SYSLOAD) (CL:WHEN [STREQUAL FILEDATE (CAAR (GETP LF 'FILEDATES] (* ;; "If copied, the compiled file may install the original location. Not sure what happens with copied DFASLs") (RPLACD (CAR (GETP LF 'FILEDATES)) (INFILEP FF))) elseif (IEQP IFILEDATE LOADEDDATE) then (RPLACD (CAR (GETP LF 'FILEDATES)) (INFILEP FF] finally (PRINTOUT T T T COUNT " files loaded" T) (CL:WHEN NOCOMPILEDFILES (PRINTOUT T "Symbolic files loaded: " .PPVTL NOCOMPILEDFILES T T))) (* ;; "Load from patch directory") (for PF (COUNT _ 0) in (FILDIR (PACKFILENAME.STRING 'NAME "*.;" 'BODY (MEDLEYDIR "/patches/"))) do (for EXT CFILE in *COMPILED-EXTENSIONS* when (SETQ CFILE (INFILEP (PACKFILENAME.STRING 'EXTENSION EXT 'BODY PF))) do (add COUNT 1) (LOAD CFILE 'SYSLOAD) (* ; "symbolic file date") (RETURN) finally (PRINTOUT T "Note: No compiled file for " PF T) (add COUNT 1) (LOAD PF 'SYSLOAD)) finally (PRINTOUT T T T COUNT " files loaded" T)) (CL:UNLESS KEEPPUP (NOPUPPATCH)) (ENDLOADUP) (CL:WHEN WRITELISPSYSOUTFLAG (* ;; "So we print out the new version number") (SETQ MAKESYSFILENAME (OUTFILEP MAKESYSFILENAME)) (PRINTOUT T "Creating updated LISP sysout on " MAKESYSFILENAME T) (CLRPROMPT) (BKSYSBUF (CONCAT "(IL:MAKESYS %"" MAKESYSFILENAME "%" %"Medley Lisp Sysout%")"))) (CL:UNLESS NODRIBBLE (DRIBBLE]) (ENDLOADUP [LAMBDA NIL (* ; "Edited 10-Dec-2020 21:49 by larry") (* ; "Edited 11-Oct-90 11:02 by jds") (* ;; "set up for NONET configuration; sites with ethernet can load in init from other places") (* ;; "All records existing at this point in time have been loaded as part of the system.") [MAPC USERRECLST (FUNCTION (LAMBDA (R) (RECORDPRIORITY R 'SYSTEM] (MEDLEY-INIT-VARS T) (for X in SYSTEMINITVARS when (NOT (ASSOC X MEDLEY-INIT-VARS)) do (SETTOPVAL (CAR X) (COPY (CDR X]) (MEDLEYVERSION [LAMBDA NIL (* ;  "Edited 25-Mar-2018 22:07 by rmk:") (* ; "Edited 11-Nov-98 22:02 by rmk:") (SELECTQ (LISPVERSION) (39424 '|1.1|) (39539 '|1.15|) (40960 '|1.2|) (4928 '|2.0|) (21000 '|2.1|) (35000 '|3.5|) (35010 '|3.5|) (HELP "UNRECOGNIZED MEDLEY VERSION" (LISPVERSION]) (NOPUPPATCH [LAMBDA NIL (* ;  "Edited 14-May-2018 12:22 by rmk:") (* ;; "Fix it so pup stuff never gets run") (SETQ \PROCESSES (DREMOVE (FIND.PROCESS '\PUPGATELISTENER) \PROCESSES)) (SETQ \FILEDEVICES (for F in \FILEDEVICES unless (STRPOS "LEAF" F) collect F)) (MOVD 'NILL '\CANONICALIZE.PUP.HOSTNAME]) ) (RPAQ? WRITELISPSYSOUTFLAG T) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (KEYACTION 'LOCK '(LOCKTOGGLE . IGNORE)) (SYNCLISPFILES) ) (PUTPROPS SYNCLISPFILES FILETYPE :TCOMPL) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA shell) (ADDTOVAR NLAML ) (ADDTOVAR LAMA ) ) (PUTPROPS SYNCLISPFILES COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (1179 4418 (MEDLEYDIR 1189 . 2425) (INTERLISPMODE 2427 . 3240) (MEDLEY-INIT-VARS 3242 . 4416)) (4495 5011 (shell 4505 . 5009)) (5883 15588 (SYNCLISPFILES 5893 . 13843) (ENDLOADUP 13845 . 14555) (MEDLEYVERSION 14557 . 15096) (NOPUPPATCH 15098 . 15586))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "16-Jan-2021 23:12:02" {DSK}larry>ilisp>medley>makesysout>SYNCLISPFILES.;2 15835 changes to%: (FNS MEDLEY-INIT-VARS) previous date%: "14-Dec-2020 18:36:57" {DSK}larry>ilisp>medley>makesysout>SYNCLISPFILES.;1 ) (PRETTYCOMPRINT SYNCLISPFILESCOMS) (RPAQQ SYNCLISPFILESCOMS [(FNS MEDLEYDIR INTERLISPMODE MEDLEY-INIT-VARS) (COMMANDS cd pwd) (FNS shell) (VARS MEDLEY-INIT-VARS) (FNS SYNCLISPFILES ENDLOADUP MEDLEYVERSION NOPUPPATCH) (INITVARS (WRITELISPSYSOUTFLAG T)) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (P (KEYACTION 'LOCK '(LOCKTOGGLE . IGNORE)) (SYNCLISPFILES))) (PROP FILETYPE SYNCLISPFILES) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA shell) (NLAML) (LAMA]) (DEFINEQ (MEDLEYDIR [LAMBDA (DIRNAME FILENAME OUTPUT) (* ; "Edited 14-Dec-2020 17:12 by larry") (if (NULL DIRNAME) then (if (OR (NOT (BOUNDP 'MEDLEYDIR)) (NOT MEDLEYDIR)) then (OR (SETQ MEDLEYDIR (DIRECTORYNAME (OR (UNIX-GETENV "MEDLEYDIR") T))) (DIRECTORYNAME T)) elseif (STRPOS "/" MEDLEYDIR) then (SETQ MEDLEYDIR (DIRECTORYNAME MEDLEYDIR)) else MEDLEYDIR) elseif (LISTP DIRNAME) then (for X in DIRNAME collect (MEDLEYDIR X)) elseif FILENAME then (SETQ FILENAME (CONCAT (MEDLEYDIR DIRNAME) FILENAME)) (if OUTPUT then FILENAME else (OR (INFILEP FILENAME) (ERROR "No such medley file" FILENAME))) else (OR (DIRECTORYNAME (CONCAT (MEDLEYDIR) DIRNAME)) (ERROR "No such medley directory" DIRNAME]) (INTERLISPMODE [LAMBDA (OLD?) (* N.H.Briggs " 2-Feb-88 14:26") (PROCESSPROP 'EXEC 'PROFILE (XCL:COPY-PROFILE (if OLD? then "OLD-INTERLISP-T" else "INTERLISP"))) (XCL:SET-DEFAULT-EXEC-TYPE (if OLD? then "OLD-INTERLISP-T" else "INTERLISP")) (SETQ *DEFAULT-MAKEFILE-ENVIRONMENT* (LIST :READTABLE (if OLD? then "OLD-INTERLISP-FILE" else "INTERLISP") :PACKAGE "INTERLISP"]) (MEDLEY-INIT-VARS [LAMBDA (CLEAR) (* ; "Edited 16-Jan-2021 22:59 by larry") (* ;; "MEDLEY-INIT-VARS has variables that might need to get reset. ") (if CLEAR then (SETQ MEDLEYDIR NIL) (SETQ XCL::*WHERE-IS-CASH-FILES* NIL) (for X in MEDLEY-INIT-VARS do (SET (CAR X))) elseif [OR (NOT (BOUNDP 'MEDLEYDIR)) (AND (NULL MEDLEYDIR) (NULL (MEDLEYDIR] then (PRINTOUT T "WARNING: MEDLEYDIR not set correctly" " set it and call (MEDLEY-INIT-VARS) again" T) else [for X in MEDLEY-INIT-VARS do (SET (CAR X) (EVAL (CADR X] (* ;; "WHEREIS doesn't follow conventions") (CL:WHEN (GETD 'XCL::ADD-WHERE-IS-DATABASE) (SETQ XCL::*WHERE-IS-CASH-FILES* NIL) (XCL::ADD-WHERE-IS-DATABASE (MEDLEYDIR "loadups" "WHEREIS.HASH"))) NIL]) ) (DEFCOMMAND cd (DIR) (/CNDIR DIR)) (DEFCOMMAND pwd NIL (DIRECTORYNAME T)) (DEFINEQ (shell [NLAMBDA LINE (* ;  "Edited 7-Sep-2020 13:28 by rmk:") [SETQ LINE (CONCATLIST (for X in LINE join (LIST X " "] (CL:WITH-OPEN-FILE (STREAM "{NODIRCORE}shell-dribble.txt" :DIRECTION :IO) (ShellCommand LINE STREAM) (SETFILEPTR STREAM 0) (until (EOFP STREAM) collect (CL:READ-LINE STREAM :EOF-ERROR-P NIL :EOF-VALUE NIL]) ) (RPAQQ MEDLEY-INIT-VARS ([LISPUSERSDIRECTORIES (MEDLEYDIR '("library" "lispusers" "internal/library"] [LISPSOURCEDIRECTORIES (MEDLEYDIR '("sources"] (LISPSOURCEDIRECTORY (CAR LISPSOURCEDIRECTORIES)) (IRM.HOST&DIR (MEDLEYDIR '"docs/dinfo")) (IRM.DINFOGRAPH) (DIRECTORIES (APPEND LISPUSERSDIRECTORIES LISPSOURCEDIRECTORIES)) [LOGINHOST/DIR (DIRECTORYNAME (OR (UNIX-GETENV "LOGINDIR") (UNIX-GETENV "HOME"] [USERGREETFILES `((,LOGINHOST/DIR "INIT" COM) (,LOGINHOST/DIR "INIT"] [DISPLAYFONTDIRECTORIES (MEDLEYDIR '("fonts/displayfonts" "fonts/altofonts"] [POSTSCRIPTFONTDIRECTORIES (MEDLEYDIR '("fonts/postscriptfonts"] [INTERPRESSFONTDIRECTORIES (MEDLEYDIR '("fonts/ipfonts"] (XCL::*WHERE-IS-CASH-FILES*))) (DEFINEQ (SYNCLISPFILES [LAMBDA (NODRIBBLE KEEPPUP) (* ; "Edited 5-Dec-2020 12:34 by larry") (* ;  "Edited 23-Oct-2020 23:51 by rmk:") (* ;  "Edited 20-Apr-2018 18:28 by rmk:") (* ;; "This ensures that files in the xlisp.sysout are as up-to-date as possible with respect to lispcore/sources. Reload (compiled, if possible) files that correspond to symbolic files whose filedates are later than the filedate in the system. If you want a new compilation of a file that has not been modified to be included, then you must make a trivial update of the symbolic file and recompile it, to give it a new, later date. This is because it is unsafe as a general default to load compiled files with dates later than the sysout, and the sysout doesn't record the dates of loaded compiled files, just their symbolic versions.") (* ;; " Should be run while connected to MEDLEYDIR") (CLRPROMPT) (MEDLEY-INIT-VARS) (if (WINDOWP LOGOW) then (CLOSEW LOGOW)) (MOVD 'NILL 'LOGOW) (SETQ LISPMAKESYSDATE MAKESYSDATE) (LET (SKIPFILES (SOURCEDIR (MEDLEYDIR "sources"))) (SETQ MAKESYSFILENAME (MEDLEYDIR "loadups" "xlisp.sysout" T)) (* ;;  "FASLOAD has to come first, unconditionally, to get the DFASL file dates converted properly.") (CL:UNLESS NODRIBBLE (DRIBBLE (MEDLEYDIR "loadups" "xlisp.dribble" T))) (BKSYSBUF " ") (PRINTOUT T T "Synchronizing Lisp sysout at " (DATE) T) (PRINTOUT T 5 (CDAR (GETP 'SYNCLISPFILES 'FILEDATES)) T 5 "created " (CAAR (GETP 'SYNCLISPFILES 'FILEDATES)) T T) (push SKIPFILES 'FASLOAD) (LOAD (MEDLEYDIR "sources" "FASLOAD.DFASL") 'SYSLOAD) (push SKIPFILES 'ATBL) (* ;  "Whole file can't be reloaded--smashes readtabl") (LOADFNS '(\ATBLSET \MAPCHARTABLE RESETREADTABLE) (MEDLEYDIR "sources" "ATBL.LCOM") 'SYSLOAD) (LOADVARS '\KEYNAMES (MEDLEYDIR "sources" "LLKEY") 'SYSLOAD) (* ; "Extended keynames for Mac/PC") (push SKIPFILES 'LLKEY) (* ; "Loading whole file freezes") (push SKIPFILES 'MAIKOLOADUPFNS) (* ;  "Can't reload even if compiled files are later") (push SKIPFILES 'SUNFONT) (* ;  "Old font organization, not relevant") (for LF FF CFILE LOADEDDATE FILEDATE IFILEDATE NOCOMPILEDFILES CFILES (COUNT _ 0) in (LDIFFERENCE SYSFILES SKIPFILES) do [[SETQ LOADEDDATE (CAAR (GETP LF 'FILEDATES] (* ;  "Date of symbolic file whose compile file was loaded") (CL:UNLESS LOADEDDATE (PRINTOUT T T LF " does not have a loaded filedate, probably not a Lisp file; skipped" T) (GO $$ITERATE)) (SETQ FF (PACKFILENAME.STRING 'NAME LF 'BODY SOURCEDIR)) (SETQ FILEDATE (FILEDATE FF)) (* ; "Date of current source file") (CL:UNLESS FILEDATE (PRINTOUT T LF " does not have a file-directory date, not updated" T) (GO $$ITERATE)) (SETQ CFILES (for EXT in *COMPILED-EXTENSIONS* when (SETQ CFILE (INFILEP (PACKFILENAME.STRING 'EXTENSION EXT 'BODY FF))) collect CFILE)) (SETQ CFILE (COND [CFILES (* ;;  "If more than one (LCOM, DFASL), pick the newest one.") (for CF in CFILES largest (IDATE (FILEDATE CF T] (T (PRINTOUT T "Note: No compiled file for " LF T) (push NOTCOMPILEDFILES LF) FF))) (SETQ IFILEDATE (IDATE FILEDATE)) (CL:UNLESS (IGREATERP IFILEDATE 0) (PRINTOUT T "Funny file date " FILEDATE " for " LF ", not updated" T) (GO $$ITERATE)) (* ;; "Load the compiled file if the date of the symbolic file is later than the symbolic file-date in the sysout. If an updated source and compiled file were copied from another directory, we update the FILEDATES property to point to the new location. If the loaded and file dates are the same, then update the FILEDATES property to point to the possibly new path name and version even if we don't need to load.") (SETQ LOADEDDATE (IDATE LOADEDDATE)) (if (IGREATERP IFILEDATE LOADEDDATE) then (add COUNT 1) (LOAD CFILE 'SYSLOAD) (CL:WHEN [STREQUAL FILEDATE (CAAR (GETP LF 'FILEDATES] (* ;; "If copied, the compiled file may install the original location. Not sure what happens with copied DFASLs") (RPLACD (CAR (GETP LF 'FILEDATES)) (INFILEP FF))) elseif (IEQP IFILEDATE LOADEDDATE) then (RPLACD (CAR (GETP LF 'FILEDATES)) (INFILEP FF] finally (PRINTOUT T T T COUNT " files loaded" T) (CL:WHEN NOCOMPILEDFILES (PRINTOUT T "Symbolic files loaded: " .PPVTL NOCOMPILEDFILES T T))) (* ;; "Load from patch directory") (for PF (COUNT _ 0) in (FILDIR (PACKFILENAME.STRING 'NAME "*.;" 'BODY (MEDLEYDIR "/patches/"))) do (for EXT CFILE in *COMPILED-EXTENSIONS* when (SETQ CFILE (INFILEP (PACKFILENAME.STRING 'EXTENSION EXT 'BODY PF))) do (add COUNT 1) (LOAD CFILE 'SYSLOAD) (* ; "symbolic file date") (RETURN) finally (PRINTOUT T "Note: No compiled file for " PF T) (add COUNT 1) (LOAD PF 'SYSLOAD)) finally (PRINTOUT T T T COUNT " files loaded" T)) (CL:UNLESS KEEPPUP (NOPUPPATCH)) (ENDLOADUP) (CL:WHEN WRITELISPSYSOUTFLAG (* ;; "So we print out the new version number") (SETQ MAKESYSFILENAME (OUTFILEP MAKESYSFILENAME)) (PRINTOUT T "Creating updated LISP sysout on " MAKESYSFILENAME T) (CLRPROMPT) (BKSYSBUF (CONCAT "(IL:MAKESYS %"" MAKESYSFILENAME "%" %"Medley Lisp Sysout%")"))) (CL:UNLESS NODRIBBLE (DRIBBLE]) (ENDLOADUP [LAMBDA NIL (* ; "Edited 10-Dec-2020 21:49 by larry") (* ; "Edited 11-Oct-90 11:02 by jds") (* ;; "set up for NONET configuration; sites with ethernet can load in init from other places") (* ;; "All records existing at this point in time have been loaded as part of the system.") [MAPC USERRECLST (FUNCTION (LAMBDA (R) (RECORDPRIORITY R 'SYSTEM] (MEDLEY-INIT-VARS T) (for X in SYSTEMINITVARS when (NOT (ASSOC X MEDLEY-INIT-VARS)) do (SETTOPVAL (CAR X) (COPY (CDR X]) (MEDLEYVERSION [LAMBDA NIL (* ;  "Edited 25-Mar-2018 22:07 by rmk:") (* ; "Edited 11-Nov-98 22:02 by rmk:") (SELECTQ (LISPVERSION) (39424 '|1.1|) (39539 '|1.15|) (40960 '|1.2|) (4928 '|2.0|) (21000 '|2.1|) (35000 '|3.5|) (35010 '|3.5|) (HELP "UNRECOGNIZED MEDLEY VERSION" (LISPVERSION]) (NOPUPPATCH [LAMBDA NIL (* ;  "Edited 14-May-2018 12:22 by rmk:") (* ;; "Fix it so pup stuff never gets run") (SETQ \PROCESSES (DREMOVE (FIND.PROCESS '\PUPGATELISTENER) \PROCESSES)) (SETQ \FILEDEVICES (for F in \FILEDEVICES unless (STRPOS "LEAF" F) collect F)) (MOVD 'NILL '\CANONICALIZE.PUP.HOSTNAME]) ) (RPAQ? WRITELISPSYSOUTFLAG T) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (KEYACTION 'LOCK '(LOCKTOGGLE . IGNORE)) (SYNCLISPFILES) ) (PUTPROPS SYNCLISPFILES FILETYPE :TCOMPL) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA shell) (ADDTOVAR NLAML ) (ADDTOVAR LAMA ) ) (PUTPROPS SYNCLISPFILES COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (1107 4261 (MEDLEYDIR 1117 . 2353) (INTERLISPMODE 2355 . 3168) (MEDLEY-INIT-VARS 3170 . 4259)) (4338 4854 (shell 4348 . 4852)) (5726 15431 (SYNCLISPFILES 5736 . 13686) (ENDLOADUP 13688 . 14398) (MEDLEYVERSION 14400 . 14939) (NOPUPPATCH 14941 . 15429))))) STOP \ No newline at end of file diff --git a/makesysout/SYNCLISPFILES.LCOM b/makesysout/SYNCLISPFILES.LCOM index aa4840f0c40d6dfcda18766f2ae09c82e45a18c1..5f6a2857936e00365125bb46e4554f507b801ade 100644 GIT binary patch delta 197 zcmeBif8{#CPuNV?D=|;k$iT=@!N}Ok(8$WbbYh}6qtV2*rW4<&1uB>#wXlh|>s=%9^ zk(igBTC7l#uWF^B;pP`S`8A^q8^{h-tI58M5)+FpH^(ulu`o`V+{!kUWkWZE#^gly P?UOAy{5H39uu1~}LLfCZ delta 316 zcmaFm+T%XKPuN7)B{f;s$iT=z!O+6W*xbs%U}B;-qw&PGrpzv$K@)H5S{oW6)adEy zDJi5RmZYXAC?Sg*nppw0o0=$T@@lww`nWm=xjKfpx=cRLC^0#j(L%>q!O+yw(nx_f zIU_MIJ+)Y&Bwy7^K_kpDC|Dsl($Cq)GdKXGFWA}NcXEQPB&V;di;rt0&;^qdWrZgn zVC0nL1z8K!gki6dm4WHxNJgv83QTG&jH@QQvrU!FX8-~)!3AP*f{6Va|Ccdn7@C<( z&SID01G+~6Zi&L=2W;ErOidJ&iYtptQgih(5{omG6bwx)6_j%F6H`hHij^i$We;HF K-TaiDRT=