From 00bb81aec459dafba78f9f63f878795d75d0aae8 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Fri, 12 Feb 2021 17:03:01 -0800 Subject: [PATCH 01/37] Interlisp macros (including BQUOTE) can't be used in interpreted code until DWIMIFY is loaded --- sources/ASKUSER | 2 +- sources/ASKUSER.LCOM | Bin 12039 -> 12014 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/ASKUSER b/sources/ASKUSER index 84927ed4..694375fc 100644 --- a/sources/ASKUSER +++ b/sources/ASKUSER @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "10-Aug-2020 21:18:50" {DSK}kaplan>Local>medley3.5>lispcore>sources>ASKUSER.;5 51071 changes to%: (FNS ASKUSER) (VARS ASKUSERCOMS) previous date%: "16-May-90 12:04:15" {DSK}kaplan>Local>medley3.5>lispcore>sources>ASKUSER.;1) (* ; " Copyright (c) 1986, 1987, 1990, 2020 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT ASKUSERCOMS) (RPAQQ ASKUSERCOMS [(FNS ASKUSER ASKUSERLOOKUP ASKUSERCHAR ASKUSER$ ASKUSER1 ASKUSERSETUP ASKUSEREXPLAIN ASKUSERPRIN1 MAKEKEYLST) (* ;; "RMK: Avoid literal CR's on files.") (INITVARS [DEFAULTKEYLST `([Y ,(CONCAT "es" (CHARACTER (CHARCODE EOL] (N ,(CONCAT "o" (CHARACTER (CHARCODE EOL] (ASKUSERTTBL (COPYTERMTABLE))) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (CONTROL T ASKUSERTTBL) (ECHOMODE NIL ASKUSERTTBL))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (RECORDS ASKUSER OPTIONS) (GLOBALVARS DEFAULTKEYLST ASKUSERTTBL)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA]) (DEFINEQ (ASKUSER [LAMBDA (WAIT DEFAULT MESS KEYLST TYPEAHEAD LISPXPRNTFLG OPTIONSLST FILE) (DECLARE (SPECVARS LISPXPRNTFLG OPTIONSLST FILE)) (* ; "Edited 10-Aug-2020 20:58 by rmk:") (* ; "Edited 10-Aug-87 15:45 by jop") (* ;  "reads characters one at a time echoing and/or prompting as indicated by KEYLST") (* ;; "RMK: Changed literal ^M's and spaces to use the (CHARACTER (CHARCODE construct), for readability and to allow for EOL conversion from other file systems. We want this always to be the internal EOL (=CR).") (RESETLST (COND ((NULL KEYLST) (* ;  "Yes, no recognized without conforimation") (SETQ KEYLST DEFAULTKEYLST))) (PROG [OLDTTBL CHAR TEM KEYLST1 ANSWER BUFS (ORIGKEYLST KEYLST) (ORIGMESS MESS) (ORIGDEFAULT DEFAULT) (NC 1) KEY PROMPTSTRING OPTIONS NOECHOFLG CONFIRMFLG NOCASEFLG PRINTLST ECHOEDFLG (EOL (CHARACTER (CHARCODE EOL))) (SPACE (CHARACTER (CHARCODE SPACE] (COND ((NULL FILE) (SETQ FILE T)) ((NEQ FILE T) (GO MESS))) (SETQ OLDTTBL (GETTERMTABLE)) (RESETSAVE (SETTERMTABLE ASKUSERTTBL)) (* ;; "ASKUSERTTBL has (CONTROL T) and (RAISE T) performed. The latter means that if the user types lower case characters, they are converted to uppercase. Note however that this will recognize lower case y and n. This is so the caller can provide y or n as a default, and distinguish the default cse from the case where the user types lowercase y or n (which will be converted to uppercase automatically by the terminal table) ASKUSERTTBL also has (ECHOMODE NIL) performed so can handle mistypings and confirations properly.") (* ;  "File can be a file name or a string") (COND (TYPEAHEAD (* ; "TYPEAHEAD permitted") (SETQ TYPEAHEAD (READP T)) (* ;  "used in case there is a mistake. in this case all typeahead is restored.") (GO MESS))) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF)) (* ;; "Clear and save typeahead. This call to CLBUFS will ring the bells if there is any typeahead to warn the user to stop typing.") (COND [(LISTP MESS) (ASKUSERPRIN1 (CAR MESS)) (COND ((SETQ MESS (CDR MESS)) (ASKUSERPRIN1 " ")) (T (ASKUSERPRIN1 " ? "] (MESS (ASKUSERPRIN1 MESS) (SETQ MESS NIL))) (* ;; "The problem with user interactions such as this where typeahead is not allowed is that we have no way of knowing WHEN the user types something, i.e. if he typed it after seeing part of the message or no, without doing a DOBE before doing any printing, and this is not desirable as it produces a noticeable snag in teletype output. --- Therefore what we do is the following: all typeahead before the call to ASKUSER is cleared and saved for later restoration, and n the event ther is any typeahead, bells are rung to warn the user to stop typing. (this is done by the call to CLBUFS above.) --- After that we print something, either the first part of the message or the message itself, to give the user time to respond to the warning to stop typing. IN this interval, anything that is typed is thrown away. After printing the message, we do a DOBE, and then check to see if user has typed anything. If he has, this material is discarded, and bells printed again to warn him.") (DOBE) (COND ((READP T) (PRINTBELLS) (DOBE) (CLEARBUF T))) MESS (* ;  "MESS is either an atom or string or a list, in which case it is MAPRINTed") (COND ((NULL MESS) (* ;  "Either user didnt supply a message or else was printed above.") ) ((NLISTP MESS) (ASKUSERPRIN1 MESS)) (T (MAPRINT MESS T NIL " ? " NIL NIL LISPXPRNTFLG))) (COND ((OR (NOT (NUMBERP WAIT)) (NULL DEFAULT)) (* ;  "is : either a number, meaning wait that many seconds or NIL, meaning wait forever") (GO READLP))) [COND ((AND DEFAULT (NLISTP DEFAULT)) (SETQ DEFAULT (LIST DEFAULT] (COND ((NULL (WAITFORINPUT (ITIMES WAIT 1000))) (* ;  "Assume DEFAULT if nothing typed in WAIT/4 seconds.") (PRIN1 "..." T) (SETQ CHAR (CAR DEFAULT)) (GO INTERP))) READLP [COND ((AND (STRINGP FILE) (NOT (READP FILE T))) (SETQ FILE T) (SETQ OLDTTBL (GETTERMTABLE)) (RESETSAVE (SETTERMTABLE ASKUSERTTBL] (* ; "the string ran out") (SETQ CHAR (PEEKC FILE)) (* ;  "PEEKC used so that in case of $ as a key, askuser can do a READ.") (SETQ ECHOEDFLG NIL) (* ;  "this character has not yet been echoed. or read") (SETQ DEFAULT NIL) INTERP (* ;; "KEYLST is a list of elements of the form (KEY PROMPTSTRING . OPTIONS), where KEY is an atom or string (including the empty string) that characters are to be matched against, PROMPTSTRING a string or atom (NIL is equivalent to ''), and OPTIONS a list in property list format which can contain the properties (KEYLST CONFIRMFLG RETURN EXPLAINSTRING NOECHOFLG KEYSTRING PROMPTON COMPLETEON AUTOCOMPLETEFLG) Default options for the entire keylst can be supplied as an argument to ASKUSER --- --- A key is considered to be complete when (1) all of its characters have been matched and it is the only key left, i.e. there are no other keys for which this key is a substring, (2) all of its characters have been matched, and CONFIRMFLG is NIL, and the next character matches one of the keys on its KEYLST, (3) all of its characters have been matched, and a confirming character is typed, i.e. a c.r., space, or member of CONFIRMFLG (This option is used for implementing TENEX protocosl, where CONFIRMFLG is ($)) or (4) there is only one key left and a confirming character is typed. --- --- When a key is complete, PROMPTSTRING is printed. Then if CONFIRMFLG is non-NIL and the key was not completed via a confirming character (case 3 and 4 above) askuser waits for a confirming character. --- --- After confirmation, if KEYLST is non NIL, askuser descends into KEYLST. Otherwise askuser returns a value which is the value of (eval of) the RETURN field, if non-NIL, otherwise the result of packing all the keys or keystrings, if present --- see below on the path. --- At any point, the user can type an alt-mode which is equivalent to typing the next n shared characters. (if there are none, a bell is rung.) Typing a confirming character has the same effect as typing an alt-mode, i.e. the next n shared characters will be supplied. If the key is the only key left, confirmation is not required. (this is case 4 above). If the key is not the only key left, a bell is rung. --- --- special options: --- EXPLAINSTRING if non-nil, used in place of key/keystring + promptstring when user types a ? --- NOECHOFLG if non-nil, characters that are matched are not echoed --- KEYSTRING if non-nil, characters that are matched are echoed from keystring. The main reason for this feature echoing, since ASKUSER converts everything to a canonical upper case form, keys will always be represented in uppercase. KEYSTRING can be used to provide for lower case echoing, and for returning a lower case value. i.e. if the RETURN option is not specified, and KEYSTRING is specified, then KEYSTRING will be used in constructing the value to be returned, rather than KEY. --- PROMPTON if non-NIL, PROMPTSTRING is printed only when the key is confirmed with a member of PROMPTON. This feature is used for implementing TENEX protocols, in which case PROMPTON would be ($) Note that this doesnt make much sense unless CONFIRMFLG is also non-NIL and includes the elements on PROMPTON --- --- COMPLETEON when a confirming character is typed, the n characters that are supplied are not echoed unless the confirming charactter is a member of COMPLETEON. This is used for implementing tenex protocols in which case COMPLETEON is ($), i.e. user could complete a command with space or c.r. but completion and prompting would take place only for $ --- --- AUTOCOMPLETEFLG if T, says supply characters as soon as they are unambiguous, i.e. act as though alt-mode were typed after each character (but dont ring a bell) --- MACROCHARS, a list of characters and forms. if one of the characters is typed, and doesnt match as a key, then the form is evaluated for effect and everything else stays the same, e.g. ? could have been implemented this way. this feature is probably most useful when MACROCHARS is supplied on OPTIONSLST since one probably wants a global set of MACROCHARS for a call single call to askuser. --- --- & as a key matches any character. --- --- '' can be used as a key It starts out with all of its characters matched, so that it is complete if it is the only key left, (1) above, or the next character mtches one of the keys on its KEYLST, etc. --- --- $ can be used as a key to match the result of doing a READ. For example, the filepkg has as one of its entries on its keylst ('' 'file/list: ' KEYLST ($)) which means that if a character is typpd that does not match any of the other charactters on its keylst, the prompt message file/list: is printed, and a read is then performed and eturned as the value of the call to askuser. --- --- --- For the more common useage, KEY is the same as (KEY NIL CONFIRMFLG T), and (KEY . PROMPT) the same as (KEY PROMPT)") [SETQ KEYLST1 (for ENTRY in KEYLST eachtime (ASKUSERSETUP ENTRY) collect ENTRY when (COND ((ASKUSERCHAR CHAR (SETQ TEM (NTHCHAR KEY NC))) (* ;  "char matches the corresponding character in key.") T) ((OR TEM $$VAL (EQ CHAR '?)) (* ;; "There was another character in the key, and char didnt match it. The $$VAL check is to insure that once there has been a match with a character in a key atthis level, we do not treat space or c.r. as terminators, so that space and c.r. can be used as keys themselves, nor do we descend into subkeylists, and so thatthe user can specify a default match via '' as a place marker, and have it operate ONLY when other elements are not matched by placing it last on the keylst. e.g. if keylst is of the form ((c.r. --) -- ('' -- subkeylst)) and a c.r. is typed, matching wont go into subkeylst ADDTOFILES uses this feature") NIL) ((AND (NULL (ASKUSERLOOKUP 'CONFIRMFLG)) (ASKUSERLOOKUP 'KEYLST) (ASKUSER1 ENTRY CHAR)) (* ;; "We have already matched all the characters in key, and entry contains a lower keylst. and char matches one of its elements, therefore do any prompting necessary for this key, and descend") (SETQ ANSWER (NCONC1 ANSWER (OR (ASKUSERLOOKUP 'KEYSTRING) KEY))) [AND (NULL NOECHOFLG) (SETQ PRINTLST (NCONC1 PRINTLST (OR (ASKUSERLOOKUP 'KEYSTRING) KEY] [AND PROMPTSTRING (SETQ PRINTLST (NCONC1 PRINTLST (PRIN1 PROMPTSTRING T] (* ;; "PRINTLST is maintained to implement the ? feature and to be able to replay the output to put on the history.") (SETQ KEYLST (ASKUSERLOOKUP 'KEYLST)) (SETQ NC 1) (* ;  "CHAR will then be matched aainst the lower keylst.") (GO INTERP)) ([COND ((LISTP CONFIRMFLG) (MEMB CHAR CONFIRMFLG)) (T (OR (EQ CHAR EOL) (EQ CHAR SPACE] (* ;; "all of its characters were matched, and this character was a c.r. or space. e.g. CHARLST= (CLISP CLISPFLG CLISPTRANFLG) and CLISP c.r. has been typed The check is made after the other checks so that space and carriage return themselves can be used in keys. Note that it doesnt matter whether confirmflg is T or not, the user can still use c.r. or space to terminate a key.") (AND (NULL NOECHOFLG) (SETQ PRINTLST (NCONC1 PRINTLST CHAR))) T] (ASKUSERSETUP (CAR KEYLST)) [COND (KEYLST1 (SETQ KEYLST KEYLST1) (GO RIGHT)) ((AND (NULL ANSWER) (EQ NC 1) (NULL DEFAULT) (OR (EQ CHAR SPACE) (EQ CHAR EOL))) (* ;  "user typed eol or space simply to keep dwim from defaulting on him.") (AND (NULL NOECHOFLG) (PRIN1 CHAR T)) (AND (READC FILE)) (GO READLP)) ([OR [EQ CHAR (CONSTANT (CHARACTER (CHARCODE ESCAPE] (COND ((LISTP CONFIRMFLG) (MEMB CHAR CONFIRMFLG)) (T (OR (EQ CHAR EOL) (EQ CHAR SPACE] (* ;; "altmode c.r. or space says supply characters from atoms in this level of keylst until there are two or more atms with different characters at thatposition. C.R. and space is same as alt mode except if there is only one atom, then return without confirmation after supplying the characters. If thee are not atms with common characters beyond this point, then ring a bell and take no action.") [COND ((NULL (SETQ TEM (ASKUSER$ KEYLST CHAR NC))) (GO WRONG)) (T (SETQ NC (ADD1 TEM] (AND (NULL DEFAULT) (READC FILE)) (COND ((NULL (CDR KEYLST)) (* ;  "only one. Therefore this character completes the key,") (GO COMPLETED)) ((OR (EQ CHAR SPACE) (EQ CHAR EOL)) (PRIN1 (CHARACTER (CHARCODE BELL)) T) (* ; "print a bell.") )) (GO NEXT)) ((OR (SYNTAXP (SETQ TEM (CHCON1 CHAR)) 'CHARDELETE) (SYNTAXP TEM 'LINEDELETE)) (* ; "control-a, q,") (GO RETRY)) ([AND (NULL DEFAULT) (EQ FILE T) (SETQ TEM (FASSOC CHAR (ASKUSERLOOKUP 'MACROCHARS] (READC T) (SETTERMTABLE OLDTTBL) (EVAL (CDR TEM)) (SETTERMTABLE ASKUSERTTBL) (GO READLP)) ((AND (NULL DEFAULT) (EQ CHAR '?) (EQ FILE T)) (TERPRI T) (READC T) [NLSETQ (PROGN (PRIN1 (OR (fetch (OPTIONS EXPLAINSTRING) of OPTIONSLST) (CONCAT "one of:" EOL)) T) (ASKUSEREXPLAIN KEYLST PRINTLST OPTIONSLST (OR (ASKUSERLOOKUP 'EXPLAINDELIMITER) EOL] (TERPRI T) [AND ORIGMESS (COND ((NLISTP ORIGMESS) (ASKUSERPRIN1 ORIGMESS)) (T (MAPRINT ORIGMESS T NIL " ? " NIL NIL LISPXPRNTFLG] [MAPC PRINTLST (FUNCTION (LAMBDA (X) (PRIN1 X T] (AND (NEQ NC 1) (PRIN1 (SUBSTRING [COND ((NLISTP (CAR KEYLST)) (CAR KEYLST)) (T (OR (fetch (ASKUSER KEYSTRING) of (CAR KEYLST)) (fetch (ASKUSER KEY) of (CAR KEYLST] 1 (SUB1 NC)) T)) (* ;; "These are the characters that have been matched on this level key, but not yet added to answer or printlst.") (GO READLP)) ([SETQ KEYLST1 (find X in KEYLST suchthat (SELECTC X ([LIST '& (CHARACTER (CHARCODE ESCAPE)) (PACKC (CHARCODE (ESCAPE ESCAPE] (SETQ KEY X) T) (AND (LISTP X) (SELECTC (CAR X) ('& (COND ((OR [NULL (SETQ TEM (LISTGET1 X 'CLASS] (APPLY* TEM CHAR)) (SETQ KEY (CAR X)) T))) ([LIST (CHARACTER (CHARCODE ESCAPE)) (PACKC (CHARCODE (ESCAPE ESCAPE] (SETQ KEY (CAR X)) T) (AND (LISTP (CAR X)) (SETQ KEY (CAR X] (COND ((EQ KEY '&) [SETQ KEYLST (LIST (CONS CHAR (AND (LISTP KEYLST1) (CDR KEYLST1] (GO RIGHT)) (T (* ; "altmode. or double-altmode") (* (AND (EQ FILE T)  (PRIN1 CHAR T))) (* ;; "The character would not have been echoed since the PEEKC was done with echomode off. Since it has already been seen by LISP, it wold not be echoed by the READ below, even though ECHOMODE would then be turned on. Therefore must print it.") (SETTERMTABLE OLDTTBL) (OR (PROG1 [NLSETQ (COND ([EQ KEY (CONSTANT (CHARACTER (CHARCODE ESCAPE] (SETQ TEM (READ FILE T))) [[EQ KEY (CONSTANT (PACKC (CHARCODE (ESCAPE ESCAPE] (LET (READBUF) (DECLARE (SPECVARS READBUF)) (* ;; "since READ is used, rather than lispxread for $ key, we should not have readline be affected by readbuf, e.g. if user is redoing an event contaig an askuser, he wants to type in tuff again.") (SETQ TEM (READLINE T] (T (SETQ TEM (EVAL KEY] (SETTERMTABLE ASKUSERTTBL)) (GO RETRY)) (SETQ KEYLST (LIST (create ASKUSER using (LISTP KEYLST1) KEY _ TEM))) (SETQ NC (ADD1 (NCHARS TEM))) (SETQ ECHOEDFLG T) (* ;  "so that the character terminatng the read wont be echoed twice") [COND [(SYNTAXP [SETQ TEM (CHCON1 (SETQ CHAR (LASTC FILE] 'SEPR T) (* ;  "character was included as part of the read") (replace OPTIONS of (CAR KEYLST) with (CONS 'CONFIRMFLG (CONS (LIST CHAR) (fetch OPTIONS of (CAR KEYLST] ((SYNTAXP TEM 'BREAK T) (* ; "e.g. read of a lit") (GO READLP)) (T (SETQ CHAR (READC FILE] (* ;; "(COND ((EQ KEY (CONSTANT (CHARACTER (CHARCODE ESCAPE)))) (* (61 . 965) 130 ASSIST.;8 NIL) (SETQ CHAR (READC FILE))) ((EQ KEY (CONSTANT (PACKC (CHARCODE (ESCAPE ESCAPE))))) (SETQ CHAR (LASTC FILE)) (replace OPTIONS of (CAR KEYLST) with (CONS (QUOTE CONFIRMFLG) (CONS (QUOTE (] )) (fetch (ASKUSER OPTIONS) of (CAR KEYLST)))))) ((LISTP KEY) (* (73 . 955) 107 ASSIST.;30 NIL)) (T (SHOULDNT)))") (SETQ DEFAULT '(T)) (* ;; "so wont attempt to read the character again. reason we have to read it here, in the case of read, is that it has already been echoed, and in the case of a lower keylst, there would be no way to psass on the information about it having been echoed without setting echoedflg to T. thus we cant go back to READLP, sice that wold set echoflg to NIL.") (GO INTERP] WRONG (* ; "user typed invalid answer") (AND (NEQ FILE T) (ERROR!)) (AND (NULL DEFAULT) (READC FILE)) (COND (TYPEAHEAD (GO RETRY1))) (PRINTBELLS) (DOBE) (CLEARBUF T) (GO READLP) RIGHT (* ; "character matched.") (AND (NULL DEFAULT) (READC FILE)) RIGHT1 (ASKUSERSETUP (CAR KEYLST)) (COND ((OR (CDR KEYLST) (ILESSP NC (NCHARS KEY))) (* ;  "More than one candidate. or this candidate not finished yet.") (AND (NULL NOECHOFLG) (EQ FILE T) (SETQ TEM (COND ((SETQ TEM (ASKUSERLOOKUP 'KEYSTRING)) (* ;; "primarily to allow specifying of echoing in lower case, even though askuser always converts to uppercase when it reads.") (NTHCHAR TEM NC)) (T CHAR))) (PRIN1 TEM T)) (SETQ NC (ADD1 NC)) [COND ((AND (ASKUSERLOOKUP 'AUTOCOMPLETEFLG) (SETQ TEM (ASKUSER$ KEYLST CHAR NC))) (COND ((AND (NULL (CDR KEYLST)) (EQ (SETQ NC TEM) (NCHARS KEY))) (GO COMPLETED)) (T (SETQ NC (ADD1 TEM] (GO NEXT))) (* ;  "There is only one entry left, and all of its characters are matched.") (AND (NULL NOECHOFLG) (EQ FILE T) (EQ NC (NCHARS KEY)) (SETQ TEM (COND ((SETQ TEM (ASKUSERLOOKUP 'KEYSTRING)) (NTHCHAR TEM NC)) (T CHAR))) (PRIN1 TEM T)) (* ;; "the character is the last one in the key. the case where a c.r. was typed to terminate a key is handled below.") COMPLETED (SETQ ANSWER (NCONC1 ANSWER (OR (ASKUSERLOOKUP 'KEYSTRING) KEY))) [AND (NULL NOECHOFLG) (SETQ PRINTLST (NCONC1 PRINTLST (OR (ASKUSERLOOKUP 'KEYSTRING) KEY] [AND PROMPTSTRING (OR [NULL (SETQ TEM (ASKUSERLOOKUP 'PROMPTON] (MEMB CHAR TEM)) (SETQ PRINTLST (NCONC1 PRINTLST (PRIN1 PROMPTSTRING T] (* ;; "If PROMPTON is present, must wait till after confirmation to see if confirming charactter is PROMPTON (usually $). this enables tenex like protocols.") (AND (NULL NOECHOFLG) (EQ FILE T) (IGREATERP NC (NCHARS KEY)) (PRIN1 (COND ([AND (EQ CHAR EOL) (NULL (ASKUSERLOOKUP 'KEYLST] (* ;; "space is echoed for all confirming characters except on a terminal leaf,in which char isused itself.") CHAR) (T SPACE)) T)) (COND ([OR (NULL CONFIRMFLG) (COND ((LISTP CONFIRMFLG) (MEMB CHAR CONFIRMFLG)) (T (OR (EQ CHAR EOL) (EQ CHAR SPACE] (* ;; "CONFIRMFLG can be a list of characters that are acceptable for confirming. e.g. ($) can be used to implemente tenex like protocols.") (GO CONFIRMED)) (T (GO CONFIRM))) NEXT (SETQ DEFAULT (CDR DEFAULT)) (* ;; "DEFAULT stays one behind the current character so that we can tell if the character came from a default list.") (COND ((NULL DEFAULT) (GO READLP)) (T (SETQ CHAR (CAR DEFAULT)) (GO INTERP))) (GO INTERP) CONFIRM (COND ((ASKUSERLOOKUP 'PROMPTCONFIRMFLG) (PRIN1 " [confirm] " T))) [COND ((AND (STRINGP FILE) (NOT (READP FILE T))) (SETQ FILE T) (SETQ OLDTTBL (GETTERMTABLE)) (RESETSAVE (SETTERMTABLE ASKUSERTTBL] [SETQ CHAR (COND ((SETQ DEFAULT (CDR DEFAULT)) (CAR DEFAULT)) (T (READC FILE] (COND ((OR (SYNTAXP (SETQ TEM (CHCON1 CHAR)) 'CHARDELETE) (SYNTAXP TEM 'LINEDELETE)) (* ; "control-a or q") (GO RETRY)) [(LISTP CONFIRMFLG) (COND ((MEMB CHAR CONFIRMFLG) (* ; "used for TENEX mode.") [AND PROMPTSTRING (SETQ TEM (ASKUSERLOOKUP 'PROMPTON)) (MEMB CHAR TEM) (SETQ PRINTLST (NCONC1 PRINTLST (PRIN1 PROMPTSTRING T] (AND (NULL NOECHOFLG) (PRIN1 SPACE T)) (GO CONFIRMED] ((OR (EQ CHAR SPACE) (EQ CHAR EOL)) [COND ((NULL NOECHOFLG) (SETQ PRINTLST (NCONC1 PRINTLST (PRIN1 (COND ((NULL (ASKUSERLOOKUP 'KEYLST)) CHAR) (T SPACE)) T] (GO CONFIRMED)) ([SETQ TEM (FASSOC CHAR (ASKUSERLOOKUP 'MACROCHARS] (SETTERMTABLE OLDTTBL) (EVAL (CDR TEM)) (SETTERMTABLE ASKUSERTTBL) (GO CONFIRM))) (COND ((NEQ CHAR '?) (PRIN1 (PACKC (CHARCODE (BELL ?))) T) (DOBE) (CLEARBUF T))) (PRIN1 " [confirm] " T) (GO CONFIRM) CONFIRMED (COND ((SETQ TEM (ASKUSERLOOKUP 'KEYLST)) (SETQ KEYLST TEM) (SETQ NC 1) (GO NEXT))) (COND (LISPXPRNTFLG [MAPC PRINTLST (FUNCTION (LAMBDA (X) (ASKUSERPRIN1 X T] (* ;  "fakes the printing for the history list.") )) (COND (BUFS (BKBUFS BUFS))) (RETURN (COND [(SETQ TEM (OR (FMEMB 'RETURN OPTIONS) (FMEMB 'RETURN OPTIONSLST))) (SETTERMTABLE OLDTTBL) (COND ([SETQ TEM (NLSETQ (EVAL (CADR TEM] (* ;; "ASKUSERLOOKUP (QUOTE not) used since then couldnt distinguish case where RETURN NIL was specified from case where RETURN was not specified at all.") (* ;; "This permits user to return ANSWER as a list itself, or to take some other action, and then restart by simply generateing an error.") (CAR TEM)) (T (SETTERMTABLE ASKUSERTTBL) (GO RETRY] (ANSWER (PACK ANSWER)) (T (NOTCHECKED) KEY))) RETRY (COND (TYPEAHEAD (GO RETRY1))) (PRIN1 "___" T) (TERPRI T) (DOBE) (CLEARBUF T) (SETQ KEYLST ORIGKEYLST) (SETQ PRINTLST NIL) (SETQ NC 1) (SETQ ANSWER NIL) (GO READLP) RETRY1 (* ;; "User has typed ahead before the call to askuser1 and his resonse is invalid. therefore assume he didnt know that askuser would be called and his typeahead was intended for what follows. clear and ave the typeahead and continue with interaction.") (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF)) [SETQ TEM (APPLY 'CONCAT (NCONC ANSWER [AND (NEQ NC 1) (LIST (SUBSTRING (COND ((LISTP (CAR KEYLST)) (CAAR KEYLST)) (T (CAR KEYLST))) 1 (SUB1 NC] (LIST CHAR] [COND ((NULL BUFS) (SETQ BUFS (CONS NIL TEM))) (T (RPLACD BUFS (COND ((CDR BUFS) (CONCAT TEM (CDR BUFS))) (T TEM] (SETQ TYPEAHEAD NIL) (* ; "so this is only done once") (SETQ ANSWER NIL) (SETQ KEYLST ORIGKEYLST) (SETQ MESS ORIGMESS) (SETQ DEFAULT ORIGDEFAULT) (SETQ PRINTLST NIL) (TERPRI T) (GO MESS)))]) (ASKUSERLOOKUP [LAMBDA (FIELD) (* bvm%: "26-Apr-86 17:14") (* * this wuld be just a fetch, xcept want to lok it up on optionslst if not  found on options.) (CADR (OR (FMEMB FIELD OPTIONS) (FMEMB FIELD OPTIONSLST]) (ASKUSERCHAR [LAMBDA (C1 C2) (* bvm%: "26-Apr-86 17:27") (COND ((EQ C1 C2)) ((AND (NULL NOCASEFLG) C2) (SETQ C1 (CHCON1 C1)) (SETQ C2 (CHCON1 C2)) (COND [(AND (IGEQ C1 (CHARCODE a)) (ILEQ C1 (CHARCODE z))) (EQ C2 (IDIFFERENCE C1 (IDIFFERENCE (CHARCODE a) (CHARCODE A] ((AND (IGEQ C2 (CHARCODE a)) (ILEQ C2 (CHARCODE z))) (EQ C1 (IDIFFERENCE C2 (IDIFFERENCE (CHARCODE a) (CHARCODE A]) (ASKUSER$ [LAMBDA (KEYLST CHAR NC) (* bvm%: "26-Apr-86 17:13") (for ENTRY bind NC0 KEY0 TEM in KEYLST eachtime [SETQ KEY (COND ((NLISTP ENTRY) ENTRY) (T (fetch (ASKUSER KEY) of ENTRY] when [AND [NEQ KEY (CONSTANT (CHARACTER (CHARCODE ESCAPE] (NEQ KEY (CONSTANT (PACKC (CHARCODE (ESCAPE ESCAPE] do [COND ((NULL KEY0) (* first time through) [SETQ KEY0 (COND ((NLISTP (CAR KEYLST)) (CAR KEYLST)) (T (fetch (ASKUSER KEY) of (CAR KEYLST] (SETQ NC0 (NCHARS KEY0))) (T (* Goes through keylst and looks at each key and determines the largest N for  which NTHCHAR of thatcharacter is equal for every atom.) (SETQ NC0 (for I from 1 to NC0 while (EQ (NTHCHARCODE KEY I) (NTHCHARCODE KEY0 I)) finally (RETURN (SUB1 I] finally (COND ((OR (NULL NC0) (ILESSP NC0 NC)) (* all atoms have different characters  at this position.) (RETURN NIL))) (ASKUSERSETUP (CAR KEYLST)) [SETQ TEM (AND (OR [NULL (SETQ TEM (ASKUSERLOOKUP 'COMPLETEON] (MEMB CHAR TEM)) (SUBSTRING (OR (ASKUSERLOOKUP 'KEYSTRING) KEY) NC (COND ((EQ (NCHARS KEY0) NC0) (* reason for this is in case KEYSTRING is longer, will get all of it.) -1) (T NC0] (* if COMPLETEON is $ means only complete on alt-mode.  this is used for tenex type protocol) (AND (NULL NOECHOFLG) TEM (PRIN1 TEM T)) (* Reason for not just using value of noechoflg is that askusersetup oul have  set noechoflg to T when reading from a string in order to suppress echoing of  the character, but this does not mean that we do not echo the characters that  are supplied for copleting.) (RETURN NC0]) (ASKUSER1 [LAMBDA (ENTRY CHAR) (* DD%: "26-Oct-81 12:34") (* We know that ENTRY contains a subkeylst.  This function sees if char could conceivably match one of the entries on  keylst.) (thereis ENTRY bind TEM in (fetch (ASKUSER KEYLST) of ENTRY) eachtime [SETQ TEM (COND ((NLISTP ENTRY) ENTRY) (T (fetch (ASKUSER KEY) of ENTRY] suchthat (OR (EQ TEM '&) [EQ TEM (CONSTANT (CHARACTER (CHARCODE ESCAPE] [EQ TEM (CONSTANT (PACKC (CHARCODE (ESCAPE ESCAPE] (LISTP TEM) (EQ (SETQ TEM (NTHCHAR TEM 1)) CHAR) (AND (NULL TEM) (LISTP ENTRY) (LISTP (CDR ENTRY)) (ASKUSER1 ENTRY CHAR]) (ASKUSERSETUP [LAMBDA (ENTRY) (* bvm%: "26-Apr-86 17:13") (* Sets free variables KEY,  CONFIRMFLG, QUIETFLG, and PROMPTSTRING) (PROG (TEM) [COND [(NLISTP ENTRY) (SETQ KEY ENTRY) (SETQ PROMPTSTRING NIL) (SETQ OPTIONS NIL) (* The default is for NOECHOFLG to be NIL and CONFIRMFLG to be T.) (SETQ CONFIRMFLG (COND ((SETQ TEM (MEMB 'CONFIRMFLG OPTIONSLST)) (CADR TEM)) (T T] [(NLISTP (CDR ENTRY)) (SETQ KEY (CAR ENTRY)) (SETQ PROMPTSTRING (CDR ENTRY)) (SETQ OPTIONS NIL) (SETQ CONFIRMFLG (COND ((SETQ TEM (MEMB 'CONFIRMFLG OPTIONSLST)) (CADR TEM)) (T T] (T (SETQ KEY (fetch (ASKUSER KEY) of ENTRY)) (SETQ PROMPTSTRING (fetch (ASKUSER PROMPTSTRING) of ENTRY)) (SETQ OPTIONS (fetch (ASKUSER OPTIONS) of ENTRY)) (SETQ CONFIRMFLG (ASKUSERLOOKUP 'CONFIRMFLG] (SETQ NOECHOFLG (ASKUSERLOOKUP 'NOECHOFLG)) (SETQ NOCASEFLG (ASKUSERLOOKUP 'NOCASEFLG)) (AND ECHOEDFLG (SETQ NOECHOFLG T)) (COND ((AND (NEQ FILE T) (STRINGP FILE) (READP FILE T)) (SETQ NOECHOFLG T) (SETQ PROMPTSTRING NIL) (* askusersetup is called after the character has been read.  Thus, this sets noechoflg to T and promptstring to NIL only if there are more  characters to be read. However, the check on whether or not the character JUST  read is to bechoed alsoincludes an (EQ FILE T) check) ]) (ASKUSEREXPLAIN [LAMBDA (KEYLST PREV OPTIONSLST DELIMITER) (* bvm%: "26-Apr-86 17:13") (MAPC KEYLST (FUNCTION (LAMBDA (ENTRY) (PROG (KEY CONFIRMFLG NOECHOFLG PROMPTSTRING TEM OPTIONS (FILE T)) (ASKUSERSETUP ENTRY) (COND ((SETQ TEM (ASKUSERLOOKUP 'KEYLST)) (* entry is of the form  (key prompt charlst)) (ASKUSEREXPLAIN TEM [COND ((SETQ TEM (fetch (OPTIONS EXPLAINSTRING) of OPTIONS)) (* reason for not using askuserlookup is that don't want top level  explainstring on ptionslst, if any. doesnt make sense to print it each time.  it is printed only once.) (APPEND PREV (LIST TEM))) (T (APPEND PREV (AND (NULL NOECHOFLG) (LIST (OR (ASKUSERLOOKUP 'KEYSTRING) KEY))) (AND PROMPTSTRING (LIST PROMPTSTRING] OPTIONSLST DELIMITER) (RETURN))) [MAPC PREV (FUNCTION (LAMBDA (X) (COND ((LISTP X) (MAPRINT X T)) (T (PRIN1 X T] [COND [(SETQ TEM (fetch (OPTIONS EXPLAINSTRING) of OPTIONS)) (COND ((LISTP TEM) (MAPRINT TEM T)) (T (PRIN1 TEM T] ((SETQ TEM (OR (ASKUSERLOOKUP 'KEYSTRING) KEY)) (AND (NULL NOECHOFLG) [NEQ TEM (CONSTANT (CHARACTER (CHARCODE ESCAPE] (NEQ TEM '&) (PRIN1 TEM T)) (* If the user wants to explain the & or $, he can include the appropriate text  in the prompt field.) (AND PROMPTSTRING (PRIN1 PROMPTSTRING T] (AND (NEQ (POSITION T) 0) (PRIN1 DELIMITER T)) (RETURN]) (ASKUSERPRIN1 [LAMBDA (X NODOFLG) (* wt%: % 4-DEC-75 00%:39) (* does a lispxprin1 if lispxprntflg is non-NIL.  used to be done by having everythin printed with lispxprin1 and doing a  resetsave on lisxpprintflg, but this costs several conses each call.) (COND ((NULL LISPXPRNTFLG) (OR NODOFLG (PRIN1 X T))) (T (LISPXPRIN1 X T NIL NODOFLG))) X]) (MAKEKEYLST [LAMBDA (LST DEFAULTKEY LCASFLG AUTOCOMPLETEFLG) (* wt%: "14-NOV-78 02:03") (PROG (TEM) (RETURN (NCONC [SETQ TEM (MAPCAR LST (FUNCTION (LAMBDA (KEY) (LIST KEY NIL 'KEYSTRING (CONCAT (COND ((AND LCASFLG (EQUAL KEY (U-CASE KEY))) (* when ucasep gets in system, use it  instead) (L-CASE KEY)) (T KEY)) " ") 'CONFIRMFLG T 'AUTOCOMPLETEFLG AUTOCOMPLETEFLG 'RETURN (KWOTE KEY] [for X in TEM bind KEYSTRING as I from 1 collect (SETQ KEYSTRING (LISTGET X 'KEYSTRING)) (LIST I KEYSTRING 'NOECHOFLG T 'EXPLAINSTRING (CONCAT I " - " KEYSTRING) 'CONFIRMFLG T 'RETURN (LIST 'PROGN '(TERPRI T) (KWOTE (CAR X] (COND [(NULL DEFAULTKEY) (LIST '("No - none of the above " "" CONFIRMFLG T AUTOCOMPLETEFLG T RETURN NIL] ((LISTP DEFAULTKEY) (* so user can specify no default key by simply calling with defaultkey=T) (LIST DEFAULTKEY]) ) (* ;; "RMK: Avoid literal CR's on files.") (RPAQ? DEFAULTKEYLST `[[Y ,(CONCAT "es" (CHARACTER (CHARCODE EOL] (N ,(CONCAT "o" (CHARACTER (CHARCODE EOL]) (RPAQ? ASKUSERTTBL (COPYTERMTABLE)) (DECLARE%: DONTEVAL@LOAD DOCOPY (CONTROL T ASKUSERTTBL) (ECHOMODE NIL ASKUSERTTBL) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (RECORD ASKUSER (KEY PROMPTSTRING . OPTIONS) (SYSTEM)) (PROPRECORD OPTIONS (KEYLST CONFIRMFLG RETURN EXPLAINSTRING NOECHOFLG KEYSTRING PROMPTON COMPLETEON AUTOCOMPLETEFLG MACROCHARS NOCASEFLG PROMPTCONFIRMFLG CLASS ) (SYSTEM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DEFAULTKEYLST ASKUSERTTBL) ) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA ) ) (PUTPROPS ASKUSER COPYRIGHT ("Venue & Xerox Corporation" 1986 1987 1990 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (1432 50029 (ASKUSER 1442 . 37029) (ASKUSERLOOKUP 37031 . 37359) (ASKUSERCHAR 37361 . 38020) (ASKUSER$ 38022 . 40930) (ASKUSER1 40932 . 41963) (ASKUSERSETUP 41965 . 44094) (ASKUSEREXPLAIN 44096 . 47291) (ASKUSERPRIN1 47293 . 47769) (MAKEKEYLST 47771 . 50027))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "12-Feb-2021 17:00:02" {DSK}larry>ilisp>medley>sources>ASKUSER.;8 51035 changes to%: (VARS ASKUSERCOMS) previous date%: "10-Aug-2020 21:18:50" {DSK}larry>ilisp>medley>sources>ASKUSER.;7) (* ; " Copyright (c) 1986, 1987, 1990, 2020, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT ASKUSERCOMS) (RPAQQ ASKUSERCOMS [(FNS ASKUSER ASKUSERLOOKUP ASKUSERCHAR ASKUSER$ ASKUSER1 ASKUSERSETUP ASKUSEREXPLAIN ASKUSERPRIN1 MAKEKEYLST) (* ;; "RMK: Avoid literal CR's on files.") (INITVARS [DEFAULTKEYLST (LIST [LIST 'Y (CONCAT "es" (CHARACTER (CHARCODE EOL] (LIST 'N (CONCAT "o" (CHARACTER (CHARCODE EOL] (ASKUSERTTBL (COPYTERMTABLE))) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (CONTROL T ASKUSERTTBL) (ECHOMODE NIL ASKUSERTTBL))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (RECORDS ASKUSER OPTIONS) (GLOBALVARS DEFAULTKEYLST ASKUSERTTBL)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA]) (DEFINEQ (ASKUSER [LAMBDA (WAIT DEFAULT MESS KEYLST TYPEAHEAD LISPXPRNTFLG OPTIONSLST FILE) (DECLARE (SPECVARS LISPXPRNTFLG OPTIONSLST FILE)) (* ; "Edited 10-Aug-2020 20:58 by rmk:") (* ; "Edited 10-Aug-87 15:45 by jop") (* ;  "reads characters one at a time echoing and/or prompting as indicated by KEYLST") (* ;; "RMK: Changed literal ^M's and spaces to use the (CHARACTER (CHARCODE construct), for readability and to allow for EOL conversion from other file systems. We want this always to be the internal EOL (=CR).") (RESETLST (COND ((NULL KEYLST) (* ;  "Yes, no recognized without conforimation") (SETQ KEYLST DEFAULTKEYLST))) (PROG [OLDTTBL CHAR TEM KEYLST1 ANSWER BUFS (ORIGKEYLST KEYLST) (ORIGMESS MESS) (ORIGDEFAULT DEFAULT) (NC 1) KEY PROMPTSTRING OPTIONS NOECHOFLG CONFIRMFLG NOCASEFLG PRINTLST ECHOEDFLG (EOL (CHARACTER (CHARCODE EOL))) (SPACE (CHARACTER (CHARCODE SPACE] (COND ((NULL FILE) (SETQ FILE T)) ((NEQ FILE T) (GO MESS))) (SETQ OLDTTBL (GETTERMTABLE)) (RESETSAVE (SETTERMTABLE ASKUSERTTBL)) (* ;; "ASKUSERTTBL has (CONTROL T) and (RAISE T) performed. The latter means that if the user types lower case characters, they are converted to uppercase. Note however that this will recognize lower case y and n. This is so the caller can provide y or n as a default, and distinguish the default cse from the case where the user types lowercase y or n (which will be converted to uppercase automatically by the terminal table) ASKUSERTTBL also has (ECHOMODE NIL) performed so can handle mistypings and confirations properly.") (* ;  "File can be a file name or a string") (COND (TYPEAHEAD (* ; "TYPEAHEAD permitted") (SETQ TYPEAHEAD (READP T)) (* ;  "used in case there is a mistake. in this case all typeahead is restored.") (GO MESS))) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF)) (* ;; "Clear and save typeahead. This call to CLBUFS will ring the bells if there is any typeahead to warn the user to stop typing.") (COND [(LISTP MESS) (ASKUSERPRIN1 (CAR MESS)) (COND ((SETQ MESS (CDR MESS)) (ASKUSERPRIN1 " ")) (T (ASKUSERPRIN1 " ? "] (MESS (ASKUSERPRIN1 MESS) (SETQ MESS NIL))) (* ;; "The problem with user interactions such as this where typeahead is not allowed is that we have no way of knowing WHEN the user types something, i.e. if he typed it after seeing part of the message or no, without doing a DOBE before doing any printing, and this is not desirable as it produces a noticeable snag in teletype output. --- Therefore what we do is the following: all typeahead before the call to ASKUSER is cleared and saved for later restoration, and n the event ther is any typeahead, bells are rung to warn the user to stop typing. (this is done by the call to CLBUFS above.) --- After that we print something, either the first part of the message or the message itself, to give the user time to respond to the warning to stop typing. IN this interval, anything that is typed is thrown away. After printing the message, we do a DOBE, and then check to see if user has typed anything. If he has, this material is discarded, and bells printed again to warn him.") (DOBE) (COND ((READP T) (PRINTBELLS) (DOBE) (CLEARBUF T))) MESS (* ;  "MESS is either an atom or string or a list, in which case it is MAPRINTed") (COND ((NULL MESS) (* ;  "Either user didnt supply a message or else was printed above.") ) ((NLISTP MESS) (ASKUSERPRIN1 MESS)) (T (MAPRINT MESS T NIL " ? " NIL NIL LISPXPRNTFLG))) (COND ((OR (NOT (NUMBERP WAIT)) (NULL DEFAULT)) (* ;  "is : either a number, meaning wait that many seconds or NIL, meaning wait forever") (GO READLP))) [COND ((AND DEFAULT (NLISTP DEFAULT)) (SETQ DEFAULT (LIST DEFAULT] (COND ((NULL (WAITFORINPUT (ITIMES WAIT 1000))) (* ;  "Assume DEFAULT if nothing typed in WAIT/4 seconds.") (PRIN1 "..." T) (SETQ CHAR (CAR DEFAULT)) (GO INTERP))) READLP [COND ((AND (STRINGP FILE) (NOT (READP FILE T))) (SETQ FILE T) (SETQ OLDTTBL (GETTERMTABLE)) (RESETSAVE (SETTERMTABLE ASKUSERTTBL] (* ; "the string ran out") (SETQ CHAR (PEEKC FILE)) (* ;  "PEEKC used so that in case of $ as a key, askuser can do a READ.") (SETQ ECHOEDFLG NIL) (* ;  "this character has not yet been echoed. or read") (SETQ DEFAULT NIL) INTERP (* ;; "KEYLST is a list of elements of the form (KEY PROMPTSTRING . OPTIONS), where KEY is an atom or string (including the empty string) that characters are to be matched against, PROMPTSTRING a string or atom (NIL is equivalent to ''), and OPTIONS a list in property list format which can contain the properties (KEYLST CONFIRMFLG RETURN EXPLAINSTRING NOECHOFLG KEYSTRING PROMPTON COMPLETEON AUTOCOMPLETEFLG) Default options for the entire keylst can be supplied as an argument to ASKUSER --- --- A key is considered to be complete when (1) all of its characters have been matched and it is the only key left, i.e. there are no other keys for which this key is a substring, (2) all of its characters have been matched, and CONFIRMFLG is NIL, and the next character matches one of the keys on its KEYLST, (3) all of its characters have been matched, and a confirming character is typed, i.e. a c.r., space, or member of CONFIRMFLG (This option is used for implementing TENEX protocosl, where CONFIRMFLG is ($)) or (4) there is only one key left and a confirming character is typed. --- --- When a key is complete, PROMPTSTRING is printed. Then if CONFIRMFLG is non-NIL and the key was not completed via a confirming character (case 3 and 4 above) askuser waits for a confirming character. --- --- After confirmation, if KEYLST is non NIL, askuser descends into KEYLST. Otherwise askuser returns a value which is the value of (eval of) the RETURN field, if non-NIL, otherwise the result of packing all the keys or keystrings, if present --- see below on the path. --- At any point, the user can type an alt-mode which is equivalent to typing the next n shared characters. (if there are none, a bell is rung.) Typing a confirming character has the same effect as typing an alt-mode, i.e. the next n shared characters will be supplied. If the key is the only key left, confirmation is not required. (this is case 4 above). If the key is not the only key left, a bell is rung. --- --- special options: --- EXPLAINSTRING if non-nil, used in place of key/keystring + promptstring when user types a ? --- NOECHOFLG if non-nil, characters that are matched are not echoed --- KEYSTRING if non-nil, characters that are matched are echoed from keystring. The main reason for this feature echoing, since ASKUSER converts everything to a canonical upper case form, keys will always be represented in uppercase. KEYSTRING can be used to provide for lower case echoing, and for returning a lower case value. i.e. if the RETURN option is not specified, and KEYSTRING is specified, then KEYSTRING will be used in constructing the value to be returned, rather than KEY. --- PROMPTON if non-NIL, PROMPTSTRING is printed only when the key is confirmed with a member of PROMPTON. This feature is used for implementing TENEX protocols, in which case PROMPTON would be ($) Note that this doesnt make much sense unless CONFIRMFLG is also non-NIL and includes the elements on PROMPTON --- --- COMPLETEON when a confirming character is typed, the n characters that are supplied are not echoed unless the confirming charactter is a member of COMPLETEON. This is used for implementing tenex protocols in which case COMPLETEON is ($), i.e. user could complete a command with space or c.r. but completion and prompting would take place only for $ --- --- AUTOCOMPLETEFLG if T, says supply characters as soon as they are unambiguous, i.e. act as though alt-mode were typed after each character (but dont ring a bell) --- MACROCHARS, a list of characters and forms. if one of the characters is typed, and doesnt match as a key, then the form is evaluated for effect and everything else stays the same, e.g. ? could have been implemented this way. this feature is probably most useful when MACROCHARS is supplied on OPTIONSLST since one probably wants a global set of MACROCHARS for a call single call to askuser. --- --- & as a key matches any character. --- --- '' can be used as a key It starts out with all of its characters matched, so that it is complete if it is the only key left, (1) above, or the next character mtches one of the keys on its KEYLST, etc. --- --- $ can be used as a key to match the result of doing a READ. For example, the filepkg has as one of its entries on its keylst ('' 'file/list: ' KEYLST ($)) which means that if a character is typpd that does not match any of the other charactters on its keylst, the prompt message file/list: is printed, and a read is then performed and eturned as the value of the call to askuser. --- --- --- For the more common useage, KEY is the same as (KEY NIL CONFIRMFLG T), and (KEY . PROMPT) the same as (KEY PROMPT)") [SETQ KEYLST1 (for ENTRY in KEYLST eachtime (ASKUSERSETUP ENTRY) collect ENTRY when (COND ((ASKUSERCHAR CHAR (SETQ TEM (NTHCHAR KEY NC))) (* ;  "char matches the corresponding character in key.") T) ((OR TEM $$VAL (EQ CHAR '?)) (* ;; "There was another character in the key, and char didnt match it. The $$VAL check is to insure that once there has been a match with a character in a key atthis level, we do not treat space or c.r. as terminators, so that space and c.r. can be used as keys themselves, nor do we descend into subkeylists, and so thatthe user can specify a default match via '' as a place marker, and have it operate ONLY when other elements are not matched by placing it last on the keylst. e.g. if keylst is of the form ((c.r. --) -- ('' -- subkeylst)) and a c.r. is typed, matching wont go into subkeylst ADDTOFILES uses this feature") NIL) ((AND (NULL (ASKUSERLOOKUP 'CONFIRMFLG)) (ASKUSERLOOKUP 'KEYLST) (ASKUSER1 ENTRY CHAR)) (* ;; "We have already matched all the characters in key, and entry contains a lower keylst. and char matches one of its elements, therefore do any prompting necessary for this key, and descend") (SETQ ANSWER (NCONC1 ANSWER (OR (ASKUSERLOOKUP 'KEYSTRING) KEY))) [AND (NULL NOECHOFLG) (SETQ PRINTLST (NCONC1 PRINTLST (OR (ASKUSERLOOKUP 'KEYSTRING) KEY] [AND PROMPTSTRING (SETQ PRINTLST (NCONC1 PRINTLST (PRIN1 PROMPTSTRING T] (* ;; "PRINTLST is maintained to implement the ? feature and to be able to replay the output to put on the history.") (SETQ KEYLST (ASKUSERLOOKUP 'KEYLST)) (SETQ NC 1) (* ;  "CHAR will then be matched aainst the lower keylst.") (GO INTERP)) ([COND ((LISTP CONFIRMFLG) (MEMB CHAR CONFIRMFLG)) (T (OR (EQ CHAR EOL) (EQ CHAR SPACE] (* ;; "all of its characters were matched, and this character was a c.r. or space. e.g. CHARLST= (CLISP CLISPFLG CLISPTRANFLG) and CLISP c.r. has been typed The check is made after the other checks so that space and carriage return themselves can be used in keys. Note that it doesnt matter whether confirmflg is T or not, the user can still use c.r. or space to terminate a key.") (AND (NULL NOECHOFLG) (SETQ PRINTLST (NCONC1 PRINTLST CHAR))) T] (ASKUSERSETUP (CAR KEYLST)) [COND (KEYLST1 (SETQ KEYLST KEYLST1) (GO RIGHT)) ((AND (NULL ANSWER) (EQ NC 1) (NULL DEFAULT) (OR (EQ CHAR SPACE) (EQ CHAR EOL))) (* ;  "user typed eol or space simply to keep dwim from defaulting on him.") (AND (NULL NOECHOFLG) (PRIN1 CHAR T)) (AND (READC FILE)) (GO READLP)) ([OR [EQ CHAR (CONSTANT (CHARACTER (CHARCODE ESCAPE] (COND ((LISTP CONFIRMFLG) (MEMB CHAR CONFIRMFLG)) (T (OR (EQ CHAR EOL) (EQ CHAR SPACE] (* ;; "altmode c.r. or space says supply characters from atoms in this level of keylst until there are two or more atms with different characters at thatposition. C.R. and space is same as alt mode except if there is only one atom, then return without confirmation after supplying the characters. If thee are not atms with common characters beyond this point, then ring a bell and take no action.") [COND ((NULL (SETQ TEM (ASKUSER$ KEYLST CHAR NC))) (GO WRONG)) (T (SETQ NC (ADD1 TEM] (AND (NULL DEFAULT) (READC FILE)) (COND ((NULL (CDR KEYLST)) (* ;  "only one. Therefore this character completes the key,") (GO COMPLETED)) ((OR (EQ CHAR SPACE) (EQ CHAR EOL)) (PRIN1 (CHARACTER (CHARCODE BELL)) T) (* ; "print a bell.") )) (GO NEXT)) ((OR (SYNTAXP (SETQ TEM (CHCON1 CHAR)) 'CHARDELETE) (SYNTAXP TEM 'LINEDELETE)) (* ; "control-a, q,") (GO RETRY)) ([AND (NULL DEFAULT) (EQ FILE T) (SETQ TEM (FASSOC CHAR (ASKUSERLOOKUP 'MACROCHARS] (READC T) (SETTERMTABLE OLDTTBL) (EVAL (CDR TEM)) (SETTERMTABLE ASKUSERTTBL) (GO READLP)) ((AND (NULL DEFAULT) (EQ CHAR '?) (EQ FILE T)) (TERPRI T) (READC T) [NLSETQ (PROGN (PRIN1 (OR (fetch (OPTIONS EXPLAINSTRING) of OPTIONSLST) (CONCAT "one of:" EOL)) T) (ASKUSEREXPLAIN KEYLST PRINTLST OPTIONSLST (OR (ASKUSERLOOKUP 'EXPLAINDELIMITER) EOL] (TERPRI T) [AND ORIGMESS (COND ((NLISTP ORIGMESS) (ASKUSERPRIN1 ORIGMESS)) (T (MAPRINT ORIGMESS T NIL " ? " NIL NIL LISPXPRNTFLG] [MAPC PRINTLST (FUNCTION (LAMBDA (X) (PRIN1 X T] (AND (NEQ NC 1) (PRIN1 (SUBSTRING [COND ((NLISTP (CAR KEYLST)) (CAR KEYLST)) (T (OR (fetch (ASKUSER KEYSTRING) of (CAR KEYLST)) (fetch (ASKUSER KEY) of (CAR KEYLST] 1 (SUB1 NC)) T)) (* ;; "These are the characters that have been matched on this level key, but not yet added to answer or printlst.") (GO READLP)) ([SETQ KEYLST1 (find X in KEYLST suchthat (SELECTC X ([LIST '& (CHARACTER (CHARCODE ESCAPE)) (PACKC (CHARCODE (ESCAPE ESCAPE] (SETQ KEY X) T) (AND (LISTP X) (SELECTC (CAR X) ('& (COND ((OR [NULL (SETQ TEM (LISTGET1 X 'CLASS] (APPLY* TEM CHAR)) (SETQ KEY (CAR X)) T))) ([LIST (CHARACTER (CHARCODE ESCAPE)) (PACKC (CHARCODE (ESCAPE ESCAPE] (SETQ KEY (CAR X)) T) (AND (LISTP (CAR X)) (SETQ KEY (CAR X] (COND ((EQ KEY '&) [SETQ KEYLST (LIST (CONS CHAR (AND (LISTP KEYLST1) (CDR KEYLST1] (GO RIGHT)) (T (* ; "altmode. or double-altmode") (* (AND (EQ FILE T)  (PRIN1 CHAR T))) (* ;; "The character would not have been echoed since the PEEKC was done with echomode off. Since it has already been seen by LISP, it wold not be echoed by the READ below, even though ECHOMODE would then be turned on. Therefore must print it.") (SETTERMTABLE OLDTTBL) (OR (PROG1 [NLSETQ (COND ([EQ KEY (CONSTANT (CHARACTER (CHARCODE ESCAPE] (SETQ TEM (READ FILE T))) [[EQ KEY (CONSTANT (PACKC (CHARCODE (ESCAPE ESCAPE] (LET (READBUF) (DECLARE (SPECVARS READBUF)) (* ;; "since READ is used, rather than lispxread for $ key, we should not have readline be affected by readbuf, e.g. if user is redoing an event contaig an askuser, he wants to type in tuff again.") (SETQ TEM (READLINE T] (T (SETQ TEM (EVAL KEY] (SETTERMTABLE ASKUSERTTBL)) (GO RETRY)) (SETQ KEYLST (LIST (create ASKUSER using (LISTP KEYLST1) KEY _ TEM))) (SETQ NC (ADD1 (NCHARS TEM))) (SETQ ECHOEDFLG T) (* ;  "so that the character terminatng the read wont be echoed twice") [COND [(SYNTAXP [SETQ TEM (CHCON1 (SETQ CHAR (LASTC FILE] 'SEPR T) (* ;  "character was included as part of the read") (replace OPTIONS of (CAR KEYLST) with (CONS 'CONFIRMFLG (CONS (LIST CHAR) (fetch OPTIONS of (CAR KEYLST] ((SYNTAXP TEM 'BREAK T) (* ; "e.g. read of a lit") (GO READLP)) (T (SETQ CHAR (READC FILE] (* ;; "(COND ((EQ KEY (CONSTANT (CHARACTER (CHARCODE ESCAPE)))) (* (61 . 965) 130 ASSIST.;8 NIL) (SETQ CHAR (READC FILE))) ((EQ KEY (CONSTANT (PACKC (CHARCODE (ESCAPE ESCAPE))))) (SETQ CHAR (LASTC FILE)) (replace OPTIONS of (CAR KEYLST) with (CONS (QUOTE CONFIRMFLG) (CONS (QUOTE (] )) (fetch (ASKUSER OPTIONS) of (CAR KEYLST)))))) ((LISTP KEY) (* (73 . 955) 107 ASSIST.;30 NIL)) (T (SHOULDNT)))") (SETQ DEFAULT '(T)) (* ;; "so wont attempt to read the character again. reason we have to read it here, in the case of read, is that it has already been echoed, and in the case of a lower keylst, there would be no way to psass on the information about it having been echoed without setting echoedflg to T. thus we cant go back to READLP, sice that wold set echoflg to NIL.") (GO INTERP] WRONG (* ; "user typed invalid answer") (AND (NEQ FILE T) (ERROR!)) (AND (NULL DEFAULT) (READC FILE)) (COND (TYPEAHEAD (GO RETRY1))) (PRINTBELLS) (DOBE) (CLEARBUF T) (GO READLP) RIGHT (* ; "character matched.") (AND (NULL DEFAULT) (READC FILE)) RIGHT1 (ASKUSERSETUP (CAR KEYLST)) (COND ((OR (CDR KEYLST) (ILESSP NC (NCHARS KEY))) (* ;  "More than one candidate. or this candidate not finished yet.") (AND (NULL NOECHOFLG) (EQ FILE T) (SETQ TEM (COND ((SETQ TEM (ASKUSERLOOKUP 'KEYSTRING)) (* ;; "primarily to allow specifying of echoing in lower case, even though askuser always converts to uppercase when it reads.") (NTHCHAR TEM NC)) (T CHAR))) (PRIN1 TEM T)) (SETQ NC (ADD1 NC)) [COND ((AND (ASKUSERLOOKUP 'AUTOCOMPLETEFLG) (SETQ TEM (ASKUSER$ KEYLST CHAR NC))) (COND ((AND (NULL (CDR KEYLST)) (EQ (SETQ NC TEM) (NCHARS KEY))) (GO COMPLETED)) (T (SETQ NC (ADD1 TEM] (GO NEXT))) (* ;  "There is only one entry left, and all of its characters are matched.") (AND (NULL NOECHOFLG) (EQ FILE T) (EQ NC (NCHARS KEY)) (SETQ TEM (COND ((SETQ TEM (ASKUSERLOOKUP 'KEYSTRING)) (NTHCHAR TEM NC)) (T CHAR))) (PRIN1 TEM T)) (* ;; "the character is the last one in the key. the case where a c.r. was typed to terminate a key is handled below.") COMPLETED (SETQ ANSWER (NCONC1 ANSWER (OR (ASKUSERLOOKUP 'KEYSTRING) KEY))) [AND (NULL NOECHOFLG) (SETQ PRINTLST (NCONC1 PRINTLST (OR (ASKUSERLOOKUP 'KEYSTRING) KEY] [AND PROMPTSTRING (OR [NULL (SETQ TEM (ASKUSERLOOKUP 'PROMPTON] (MEMB CHAR TEM)) (SETQ PRINTLST (NCONC1 PRINTLST (PRIN1 PROMPTSTRING T] (* ;; "If PROMPTON is present, must wait till after confirmation to see if confirming charactter is PROMPTON (usually $). this enables tenex like protocols.") (AND (NULL NOECHOFLG) (EQ FILE T) (IGREATERP NC (NCHARS KEY)) (PRIN1 (COND ([AND (EQ CHAR EOL) (NULL (ASKUSERLOOKUP 'KEYLST] (* ;; "space is echoed for all confirming characters except on a terminal leaf,in which char isused itself.") CHAR) (T SPACE)) T)) (COND ([OR (NULL CONFIRMFLG) (COND ((LISTP CONFIRMFLG) (MEMB CHAR CONFIRMFLG)) (T (OR (EQ CHAR EOL) (EQ CHAR SPACE] (* ;; "CONFIRMFLG can be a list of characters that are acceptable for confirming. e.g. ($) can be used to implemente tenex like protocols.") (GO CONFIRMED)) (T (GO CONFIRM))) NEXT (SETQ DEFAULT (CDR DEFAULT)) (* ;; "DEFAULT stays one behind the current character so that we can tell if the character came from a default list.") (COND ((NULL DEFAULT) (GO READLP)) (T (SETQ CHAR (CAR DEFAULT)) (GO INTERP))) (GO INTERP) CONFIRM (COND ((ASKUSERLOOKUP 'PROMPTCONFIRMFLG) (PRIN1 " [confirm] " T))) [COND ((AND (STRINGP FILE) (NOT (READP FILE T))) (SETQ FILE T) (SETQ OLDTTBL (GETTERMTABLE)) (RESETSAVE (SETTERMTABLE ASKUSERTTBL] [SETQ CHAR (COND ((SETQ DEFAULT (CDR DEFAULT)) (CAR DEFAULT)) (T (READC FILE] (COND ((OR (SYNTAXP (SETQ TEM (CHCON1 CHAR)) 'CHARDELETE) (SYNTAXP TEM 'LINEDELETE)) (* ; "control-a or q") (GO RETRY)) [(LISTP CONFIRMFLG) (COND ((MEMB CHAR CONFIRMFLG) (* ; "used for TENEX mode.") [AND PROMPTSTRING (SETQ TEM (ASKUSERLOOKUP 'PROMPTON)) (MEMB CHAR TEM) (SETQ PRINTLST (NCONC1 PRINTLST (PRIN1 PROMPTSTRING T] (AND (NULL NOECHOFLG) (PRIN1 SPACE T)) (GO CONFIRMED] ((OR (EQ CHAR SPACE) (EQ CHAR EOL)) [COND ((NULL NOECHOFLG) (SETQ PRINTLST (NCONC1 PRINTLST (PRIN1 (COND ((NULL (ASKUSERLOOKUP 'KEYLST)) CHAR) (T SPACE)) T] (GO CONFIRMED)) ([SETQ TEM (FASSOC CHAR (ASKUSERLOOKUP 'MACROCHARS] (SETTERMTABLE OLDTTBL) (EVAL (CDR TEM)) (SETTERMTABLE ASKUSERTTBL) (GO CONFIRM))) (COND ((NEQ CHAR '?) (PRIN1 (PACKC (CHARCODE (BELL ?))) T) (DOBE) (CLEARBUF T))) (PRIN1 " [confirm] " T) (GO CONFIRM) CONFIRMED (COND ((SETQ TEM (ASKUSERLOOKUP 'KEYLST)) (SETQ KEYLST TEM) (SETQ NC 1) (GO NEXT))) (COND (LISPXPRNTFLG [MAPC PRINTLST (FUNCTION (LAMBDA (X) (ASKUSERPRIN1 X T] (* ;  "fakes the printing for the history list.") )) (COND (BUFS (BKBUFS BUFS))) (RETURN (COND [(SETQ TEM (OR (FMEMB 'RETURN OPTIONS) (FMEMB 'RETURN OPTIONSLST))) (SETTERMTABLE OLDTTBL) (COND ([SETQ TEM (NLSETQ (EVAL (CADR TEM] (* ;; "ASKUSERLOOKUP (QUOTE not) used since then couldnt distinguish case where RETURN NIL was specified from case where RETURN was not specified at all.") (* ;; "This permits user to return ANSWER as a list itself, or to take some other action, and then restart by simply generateing an error.") (CAR TEM)) (T (SETTERMTABLE ASKUSERTTBL) (GO RETRY] (ANSWER (PACK ANSWER)) (T (NOTCHECKED) KEY))) RETRY (COND (TYPEAHEAD (GO RETRY1))) (PRIN1 "___" T) (TERPRI T) (DOBE) (CLEARBUF T) (SETQ KEYLST ORIGKEYLST) (SETQ PRINTLST NIL) (SETQ NC 1) (SETQ ANSWER NIL) (GO READLP) RETRY1 (* ;; "User has typed ahead before the call to askuser1 and his resonse is invalid. therefore assume he didnt know that askuser would be called and his typeahead was intended for what follows. clear and ave the typeahead and continue with interaction.") (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF)) [SETQ TEM (APPLY 'CONCAT (NCONC ANSWER [AND (NEQ NC 1) (LIST (SUBSTRING (COND ((LISTP (CAR KEYLST)) (CAAR KEYLST)) (T (CAR KEYLST))) 1 (SUB1 NC] (LIST CHAR] [COND ((NULL BUFS) (SETQ BUFS (CONS NIL TEM))) (T (RPLACD BUFS (COND ((CDR BUFS) (CONCAT TEM (CDR BUFS))) (T TEM] (SETQ TYPEAHEAD NIL) (* ; "so this is only done once") (SETQ ANSWER NIL) (SETQ KEYLST ORIGKEYLST) (SETQ MESS ORIGMESS) (SETQ DEFAULT ORIGDEFAULT) (SETQ PRINTLST NIL) (TERPRI T) (GO MESS)))]) (ASKUSERLOOKUP [LAMBDA (FIELD) (* bvm%: "26-Apr-86 17:14") (* * this wuld be just a fetch, xcept want to lok it up on optionslst if not  found on options.) (CADR (OR (FMEMB FIELD OPTIONS) (FMEMB FIELD OPTIONSLST]) (ASKUSERCHAR [LAMBDA (C1 C2) (* bvm%: "26-Apr-86 17:27") (COND ((EQ C1 C2)) ((AND (NULL NOCASEFLG) C2) (SETQ C1 (CHCON1 C1)) (SETQ C2 (CHCON1 C2)) (COND [(AND (IGEQ C1 (CHARCODE a)) (ILEQ C1 (CHARCODE z))) (EQ C2 (IDIFFERENCE C1 (IDIFFERENCE (CHARCODE a) (CHARCODE A] ((AND (IGEQ C2 (CHARCODE a)) (ILEQ C2 (CHARCODE z))) (EQ C1 (IDIFFERENCE C2 (IDIFFERENCE (CHARCODE a) (CHARCODE A]) (ASKUSER$ [LAMBDA (KEYLST CHAR NC) (* bvm%: "26-Apr-86 17:13") (for ENTRY bind NC0 KEY0 TEM in KEYLST eachtime [SETQ KEY (COND ((NLISTP ENTRY) ENTRY) (T (fetch (ASKUSER KEY) of ENTRY] when [AND [NEQ KEY (CONSTANT (CHARACTER (CHARCODE ESCAPE] (NEQ KEY (CONSTANT (PACKC (CHARCODE (ESCAPE ESCAPE] do [COND ((NULL KEY0) (* first time through) [SETQ KEY0 (COND ((NLISTP (CAR KEYLST)) (CAR KEYLST)) (T (fetch (ASKUSER KEY) of (CAR KEYLST] (SETQ NC0 (NCHARS KEY0))) (T (* Goes through keylst and looks at each key and determines the largest N for  which NTHCHAR of thatcharacter is equal for every atom.) (SETQ NC0 (for I from 1 to NC0 while (EQ (NTHCHARCODE KEY I) (NTHCHARCODE KEY0 I)) finally (RETURN (SUB1 I] finally (COND ((OR (NULL NC0) (ILESSP NC0 NC)) (* all atoms have different characters  at this position.) (RETURN NIL))) (ASKUSERSETUP (CAR KEYLST)) [SETQ TEM (AND (OR [NULL (SETQ TEM (ASKUSERLOOKUP 'COMPLETEON] (MEMB CHAR TEM)) (SUBSTRING (OR (ASKUSERLOOKUP 'KEYSTRING) KEY) NC (COND ((EQ (NCHARS KEY0) NC0) (* reason for this is in case KEYSTRING is longer, will get all of it.) -1) (T NC0] (* if COMPLETEON is $ means only complete on alt-mode.  this is used for tenex type protocol) (AND (NULL NOECHOFLG) TEM (PRIN1 TEM T)) (* Reason for not just using value of noechoflg is that askusersetup oul have  set noechoflg to T when reading from a string in order to suppress echoing of  the character, but this does not mean that we do not echo the characters that  are supplied for copleting.) (RETURN NC0]) (ASKUSER1 [LAMBDA (ENTRY CHAR) (* DD%: "26-Oct-81 12:34") (* We know that ENTRY contains a subkeylst.  This function sees if char could conceivably match one of the entries on  keylst.) (thereis ENTRY bind TEM in (fetch (ASKUSER KEYLST) of ENTRY) eachtime [SETQ TEM (COND ((NLISTP ENTRY) ENTRY) (T (fetch (ASKUSER KEY) of ENTRY] suchthat (OR (EQ TEM '&) [EQ TEM (CONSTANT (CHARACTER (CHARCODE ESCAPE] [EQ TEM (CONSTANT (PACKC (CHARCODE (ESCAPE ESCAPE] (LISTP TEM) (EQ (SETQ TEM (NTHCHAR TEM 1)) CHAR) (AND (NULL TEM) (LISTP ENTRY) (LISTP (CDR ENTRY)) (ASKUSER1 ENTRY CHAR]) (ASKUSERSETUP [LAMBDA (ENTRY) (* bvm%: "26-Apr-86 17:13") (* Sets free variables KEY,  CONFIRMFLG, QUIETFLG, and PROMPTSTRING) (PROG (TEM) [COND [(NLISTP ENTRY) (SETQ KEY ENTRY) (SETQ PROMPTSTRING NIL) (SETQ OPTIONS NIL) (* The default is for NOECHOFLG to be NIL and CONFIRMFLG to be T.) (SETQ CONFIRMFLG (COND ((SETQ TEM (MEMB 'CONFIRMFLG OPTIONSLST)) (CADR TEM)) (T T] [(NLISTP (CDR ENTRY)) (SETQ KEY (CAR ENTRY)) (SETQ PROMPTSTRING (CDR ENTRY)) (SETQ OPTIONS NIL) (SETQ CONFIRMFLG (COND ((SETQ TEM (MEMB 'CONFIRMFLG OPTIONSLST)) (CADR TEM)) (T T] (T (SETQ KEY (fetch (ASKUSER KEY) of ENTRY)) (SETQ PROMPTSTRING (fetch (ASKUSER PROMPTSTRING) of ENTRY)) (SETQ OPTIONS (fetch (ASKUSER OPTIONS) of ENTRY)) (SETQ CONFIRMFLG (ASKUSERLOOKUP 'CONFIRMFLG] (SETQ NOECHOFLG (ASKUSERLOOKUP 'NOECHOFLG)) (SETQ NOCASEFLG (ASKUSERLOOKUP 'NOCASEFLG)) (AND ECHOEDFLG (SETQ NOECHOFLG T)) (COND ((AND (NEQ FILE T) (STRINGP FILE) (READP FILE T)) (SETQ NOECHOFLG T) (SETQ PROMPTSTRING NIL) (* askusersetup is called after the character has been read.  Thus, this sets noechoflg to T and promptstring to NIL only if there are more  characters to be read. However, the check on whether or not the character JUST  read is to bechoed alsoincludes an (EQ FILE T) check) ]) (ASKUSEREXPLAIN [LAMBDA (KEYLST PREV OPTIONSLST DELIMITER) (* bvm%: "26-Apr-86 17:13") (MAPC KEYLST (FUNCTION (LAMBDA (ENTRY) (PROG (KEY CONFIRMFLG NOECHOFLG PROMPTSTRING TEM OPTIONS (FILE T)) (ASKUSERSETUP ENTRY) (COND ((SETQ TEM (ASKUSERLOOKUP 'KEYLST)) (* entry is of the form  (key prompt charlst)) (ASKUSEREXPLAIN TEM [COND ((SETQ TEM (fetch (OPTIONS EXPLAINSTRING) of OPTIONS)) (* reason for not using askuserlookup is that don't want top level  explainstring on ptionslst, if any. doesnt make sense to print it each time.  it is printed only once.) (APPEND PREV (LIST TEM))) (T (APPEND PREV (AND (NULL NOECHOFLG) (LIST (OR (ASKUSERLOOKUP 'KEYSTRING) KEY))) (AND PROMPTSTRING (LIST PROMPTSTRING] OPTIONSLST DELIMITER) (RETURN))) [MAPC PREV (FUNCTION (LAMBDA (X) (COND ((LISTP X) (MAPRINT X T)) (T (PRIN1 X T] [COND [(SETQ TEM (fetch (OPTIONS EXPLAINSTRING) of OPTIONS)) (COND ((LISTP TEM) (MAPRINT TEM T)) (T (PRIN1 TEM T] ((SETQ TEM (OR (ASKUSERLOOKUP 'KEYSTRING) KEY)) (AND (NULL NOECHOFLG) [NEQ TEM (CONSTANT (CHARACTER (CHARCODE ESCAPE] (NEQ TEM '&) (PRIN1 TEM T)) (* If the user wants to explain the & or $, he can include the appropriate text  in the prompt field.) (AND PROMPTSTRING (PRIN1 PROMPTSTRING T] (AND (NEQ (POSITION T) 0) (PRIN1 DELIMITER T)) (RETURN]) (ASKUSERPRIN1 [LAMBDA (X NODOFLG) (* wt%: % 4-DEC-75 00%:39) (* does a lispxprin1 if lispxprntflg is non-NIL.  used to be done by having everythin printed with lispxprin1 and doing a  resetsave on lisxpprintflg, but this costs several conses each call.) (COND ((NULL LISPXPRNTFLG) (OR NODOFLG (PRIN1 X T))) (T (LISPXPRIN1 X T NIL NODOFLG))) X]) (MAKEKEYLST [LAMBDA (LST DEFAULTKEY LCASFLG AUTOCOMPLETEFLG) (* wt%: "14-NOV-78 02:03") (PROG (TEM) (RETURN (NCONC [SETQ TEM (MAPCAR LST (FUNCTION (LAMBDA (KEY) (LIST KEY NIL 'KEYSTRING (CONCAT (COND ((AND LCASFLG (EQUAL KEY (U-CASE KEY))) (* when ucasep gets in system, use it  instead) (L-CASE KEY)) (T KEY)) " ") 'CONFIRMFLG T 'AUTOCOMPLETEFLG AUTOCOMPLETEFLG 'RETURN (KWOTE KEY] [for X in TEM bind KEYSTRING as I from 1 collect (SETQ KEYSTRING (LISTGET X 'KEYSTRING)) (LIST I KEYSTRING 'NOECHOFLG T 'EXPLAINSTRING (CONCAT I " - " KEYSTRING) 'CONFIRMFLG T 'RETURN (LIST 'PROGN '(TERPRI T) (KWOTE (CAR X] (COND [(NULL DEFAULTKEY) (LIST '("No - none of the above " "" CONFIRMFLG T AUTOCOMPLETEFLG T RETURN NIL] ((LISTP DEFAULTKEY) (* so user can specify no default key by simply calling with defaultkey=T) (LIST DEFAULTKEY]) ) (* ;; "RMK: Avoid literal CR's on files.") (RPAQ? DEFAULTKEYLST [LIST [LIST 'Y (CONCAT "es" (CHARACTER (CHARCODE EOL] (LIST 'N (CONCAT "o" (CHARACTER (CHARCODE EOL]) (RPAQ? ASKUSERTTBL (COPYTERMTABLE)) (DECLARE%: DONTEVAL@LOAD DOCOPY (CONTROL T ASKUSERTTBL) (ECHOMODE NIL ASKUSERTTBL) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (RECORD ASKUSER (KEY PROMPTSTRING . OPTIONS) (SYSTEM)) (PROPRECORD OPTIONS (KEYLST CONFIRMFLG RETURN EXPLAINSTRING NOECHOFLG KEYSTRING PROMPTON COMPLETEON AUTOCOMPLETEFLG MACROCHARS NOCASEFLG PROMPTCONFIRMFLG CLASS ) (SYSTEM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DEFAULTKEYLST ASKUSERTTBL) ) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA ) ) (PUTPROPS ASKUSER COPYRIGHT ("Venue & Xerox Corporation" 1986 1987 1990 2020 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (1373 49970 (ASKUSER 1383 . 36970) (ASKUSERLOOKUP 36972 . 37300) (ASKUSERCHAR 37302 . 37961) (ASKUSER$ 37963 . 40871) (ASKUSER1 40873 . 41904) (ASKUSERSETUP 41906 . 44035) (ASKUSEREXPLAIN 44037 . 47232) (ASKUSERPRIN1 47234 . 47710) (MAKEKEYLST 47712 . 49968))))) STOP \ No newline at end of file diff --git a/sources/ASKUSER.LCOM b/sources/ASKUSER.LCOM index 3592900ef3b5171504caa2fe39c716c3e185549e..9420aa8e425f7bc77fe02a3d771433ca16534d82 100644 GIT binary patch delta 544 zcmZpVdlx&wFTzOIEj3Bk$iT=@!O+~wz`)ADR7pWYDLFs4ATuX5MIk>=K}n(7CD^;x zCL=#L)h;KosHoB|GbgjSz%Dm6B`3Agt~kH6C^@y*&N0|KG}tvr&)Py$fp_8-Wx?c( z#Ju#>VpS`Jy!?`k%)Io8FJFFscq$HN4rtku7L6R^uvobZcGBj1v5g=w0*8 z224LRMSMJiLliV1WMHU&h^s=R=Hx%RTJorZewqpz&i;PRjv)%XO8LOBo@}cpJ9(Op z3pX!NI3&p5M88KL0)KpD)4PVYfkpj4HV;b0jhHL4~SH7_V*0{hD}hI jV^Hwq&AQg4xBz4q$O#A+#ON*IQ2?a_O-)`uPaj?YXjGq| delta 561 zcmbu5J4?f06o$zpBA=ijIw%|?NRaTXV` zeE*@l=;j|0e}uERXv7K*-3n)T&jrrI^L~1J_F#}_YN^7|UfAk11HTSo8)!h+IlFk1 ztww$~lCRuO;I?Hw^xQyh`SrjbB>A))G^36ec6~Vt`(4kEWW_F4ZO!5{X$-^B#v<}A z-FCx|HYFIZhHtAGQQ(w*gG&er0eGILq3-tLxAgzHn3Pg`anTqt`GT&gmZmsbjyzH; z=hKk^N{hm-2xBzpg)tqIH|#$|Ozx>IYlkbj18!dcF(C;lNlZ_xM11mb#MTY z7q+%A_6ug&DVT7~BqoAX2 DQ1z$+ From ea85de4c37116df6d86b4d42275e9b432dd9f1bb Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Fri, 12 Feb 2021 19:30:21 -0800 Subject: [PATCH 02/37] defoptimizer won't work on early init, remove it (not important) --- sources/LLKEY | 4 ++-- sources/LLKEY.LCOM | Bin 64460 -> 65915 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/LLKEY b/sources/LLKEY index 04a57a3d..2347367f 100644 --- a/sources/LLKEY +++ b/sources/LLKEY @@ -1,4 +1,4 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "19-May-2018 13:32:12" {DSK}kaplan>Local>medley3.5>lispcore>sources>LLKEY.;4 199267 changes to%: (VARS LLKEYCOMS \KEYNAMES) previous date%: " 9-Apr-2000 16:28:23" {DSK}kaplan>Local>medley3.5>lispcore>sources>LLKEY.;1) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1992, 1999, 1920, 2000, 2018 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT LLKEYCOMS) (RPAQQ LLKEYCOMS [(COMS (* ; "Access to keyboard") (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF \PUTSYSBUF \PEEKSYSBUF) (INITVARS (\LONGSYSBUF)) (INITVARS (\\KEYBOARDWAITBOX.GLOBALRESOURCE)) (DECLARE%: DONTCOPY (RESOURCES \KEYBOARDWAITBOX)) (DECLARE%: DONTCOPY (CONSTANTS (\SYSBUFSIZE 200)) (MACROS \GETREALSYSBUF))) [DECLARE%: DOCOPY DONTEVAL@LOAD (COMS (* ;  "Here because it must be done in init before PROC loaded") (P (MOVD? 'NILL 'CARET] (COMS (* ; "Key handler") (FNS \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) (INITVARS (\MOUSECHORDTICKS) (\MOUSECHORDMILLISECONDS 50)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\KEYBOARDINIT))) [DECLARE%: DONTCOPY (MACROS .NOTELASTUSERACTION) (CONSTANTS ALLUP \CTRLMASK \METABIT) (CONSTANTS * DLMOUSEBITS) (CONSTANTS * DLMOUSESTATES) (CONSTANTS * TRANSITIONFLAGS) (MACROS \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) (EXPORT (RECORDS KEYACTION) (CONSTANTS \NKEYS)) (RECORDS RING) (COMS (* ;  "can get rid of shiftstate after clients have been fixed") (RECORDS SHIFTSTATE) (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP)) (CONSTANTS NRINGINDEXWORDS) (CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] (DECLARE%: EVAL@COMPILE (VARS \KEYNAMES)) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun.") (VARS \ORIGKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DORADOKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS \MAIKOKEYACTIONS \MAIKOKEYACTIONST4 \MAIKO-JLE-KEYACTIONS \TOSHIBA-KEYACTIONS) (VARS (KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL)) (INITVARS (\KEYBOARD.META 256) (\MODIFIED.KEYACTIONS)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) )) (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (COMS (* ; "Key interpretation") (FNS KEYACTION KEYACTIONTABLE KEYBOARDTYPE RESETKEYACTION \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS \KEYACTION1 KEYDOWNP KEYNUMBERP \KEYNAMETONUMBER MODIFY.KEYACTIONS METASHIFT SHIFTDOWNP) (* ;  "To support office style 1108 & 1186 keyboards") (FNS SETUP.OFFICE.KEYBOARD) (OPTIMIZERS \KEYNAMETONUMBER) (MACROS \TEMPCOPYTIMER) (* ;  "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (EXPORT (OPTIMIZERS KEYDOWNP))) (EXPORT (MACROS XKEYDOWNP KEYDOWNP1 \NEWKEYDOWNP))) (COMS (* ; "A raw keyboard device/stream") (FNS \INIT.KEYBOARD.STREAM) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\INIT.KEYBOARD.STREAM))) (EXPORT (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM))) (COMS (* ; "Hook for a periodic interrupt") (FNS \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \PERIODIC.INTERRUPTFRAME) (INITVARS (\KEYBUFFERING) (\PERIODIC.INTERRUPT) (\TIMER.INTERRUPT.PENDING) (\PERIODIC.INTERRUPT.FREQUENCY 77))) (LOCALVARS . T) [COMS (* ;  "cursor and mouse related functions.") (FNS \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN) (FNS CURSOR.INIT \CURSORDESTINATION \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN CURSORPROP GETCURSORPROP PUTCURSORPROP \CURSORBITSPERPIXEL \CURSORIMAGEPROPNAME \CURSORMASKPROPNAME) (FNS CURSORCREATE CURSOR \CURSOR-VALID-P \CURSORUP \CURSORPOSITION \CURSORDOWN ADJUSTCURSORPOSITION CURSORPOSITION CURSORSCREEN CURSOREXIT FLIPCURSOR FLIPCURSORBAR LASTMOUSEX LASTMOUSEY CREATEPOSITION POSITIONP CURSORHOTSPOT) (PROPS (CURSORPROP ARGNAMES)) (INITVARS (\CURSORHOTSPOTX 0) (\CURSORHOTSPOTY 0) (\CURRENTCURSOR NIL) (\SOFTCURSORWIDTH NIL) (\SOFTCURSORHEIGHT NIL) (\SOFTCURSORP NIL) (\SOFTCURSORUPP NIL) (\SOFTCURSORUPBM NIL) (\SOFTCURSORDOWNBM NIL) (\SOFTCURSORBBT1 NIL) (\SOFTCURSORBBT2 NIL) (\SOFTCURSORBBT3 NIL) (\SOFTCURSORBBT4 NIL) (\SOFTCURSORBBT5 NIL) (\SOFTCURSORBBT6 NIL) (\CURSORSCREEN NIL) (\CURSORDESTINATION NIL) (\CURSORDESTHEIGHT 808) (\CURSORDESTWIDTH 1024) (\CURSORDESTRASTERWIDTH 64) (\CURSORDESTLINE 0) (\CURSORDESTLINEBASE NIL)) (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) (FNS GETMOUSESTATE \EVENTKEYS) [EXPORT (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD] (DECLARE%: DONTCOPY (EXPORT (MACROS \SETMOUSEXY)) (MACROS \XMOUSECOORD \YMOUSECOORD)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION)) (VARS (\SFPosition (CREATEPOSITION] [COMS (DECLARE%: DONTCOPY (RECORDS KEYBOARDEVENT) (CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] (COMS (FNS MACHINETYPE SETMAINTPANEL) (* ; "DLion beeper") (FNS BEEPON BEEPOFF)) (EXPORT (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)) (FNS WITHOUT-INTERRUPTS) (COMS (* ;  "Compile locked fns together for locality") (BLOCKS (NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN))) [DECLARE%: DONTCOPY (ADDVARS [INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND ] (RDCOMS (FNS \SETIOPOINTERS] (PROP FILETYPE LLKEY) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML WITHOUT-INTERRUPTS ) (LAMA CURSORPROP METASHIFT MOUSECHORDWAIT]) (* ; "Access to keyboard") (DEFINEQ (BKSYSCHARCODE [LAMBDA (CHAR) (* rrb "30-Dec-83 11:56") (OR (\PUTSYSBUF CHAR) (PROGN (SETQ \LONGSYSBUF (NCONC \LONGSYSBUF (bind C while (SETQ C (\GETREALSYSBUF)) collect C))) (\PUTSYSBUF CHAR]) (\CLEARSYSBUF [LAMBDA (ALLFLG) (* mpl "27-Jun-85 20:04") (DECLARE (GLOBALVARS \PROCESSES)) (COND ((OR ALLFLG (TTY.PROCESSP)) (SETQ \LONGSYSBUF) (replace (RING READ) of \SYSBUFFER with 0))) (COND (ALLFLG (for PROC in \PROCESSES do (replace PROCTYPEAHEAD of PROC with NIL))) ((THIS.PROCESS) (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL]) (\GETKEY [LAMBDA NIL (* lmm "18-Apr-85 00:07") (DECLARE (GLOBALVARS \KEYBOARDWAIT1 \KEYBOARDWAIT2)) (COND [(AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS))) (pop (fetch PROCTYPEAHEAD of (THIS.PROCESS] (T (WAIT.FOR.TTY) (OR (\GETSYSBUF) (GLOBALRESOURCE (\KEYBOARDWAITBOX) (* Busy-wait loop that gets next  character) (\CLOCK0 \KEYBOARDWAITBOX) (bind C do (COND ((SETQ C (\GETSYSBUF)) (\BOXIPLUS (LOCF (fetch KEYBOARDWAITTIME of \MISCSTATS)) (CLOCKDIFFERENCE \KEYBOARDWAITBOX)) (RETURN C))) (\TTYBACKGROUND) (\WAIT.FOR.TTY]) (\NSYSBUFCHARS [LAMBDA NIL (* JonL " 7-May-84 01:50") (* Tells how many characters can be \GETSYSBUFed.  Used by \SAVESYSBUF.) (IPLUS (LENGTH \LONGSYSBUF) (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ 0 R) 0) ((IGREATERP W R) (IDIFFERENCE W R)) (T (IDIFFERENCE W (IDIFFERENCE R \SYSBUFSIZE]) (\SAVESYSBUF [LAMBDA NIL (* JonL " 7-May-84 01:50") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (PROG (TA (BUF \SAVEDSYSBUFFER) (NC (\NSYSBUFCHARS)) (J 0)) [COND ((TTY.PROCESSP) [COND ([AND (THIS.PROCESS) (SETQ TA (fetch PROCTYPEAHEAD of (THIS.PROCESS] (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL) (add NC (LENGTH TA)) [COND ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for CH in TA do (RPLCHARCODE BUF (add J 1) CH))) ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for I from (ADD1 J) to NC do (* Test on J means that we'll ignore extra chars typed since we got the  length. Test on \GETSYSBUF so we don't get screwed if buffer gets cleared  while during this loop) (RPLCHARCODE BUF I (OR (\GETSYSBUF) (PROGN (SETQ NC (SUB1 I)) (RETURN] (RETURN (AND (NOT (EQ 0 NC)) (SUBSTRING BUF 1 NC]) (\SYSBUFP [LAMBDA NIL (* JonL " 7-May-84 01:52") (OR [AND (TTY.PROCESSP) (OR \LONGSYSBUF (NOT (EQ 0 (fetch (RING READ) of \SYSBUFFER] (AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS]) (\GETSYSBUF [LAMBDA NIL (* lmm " 9-JUL-83 00:56") (OR (AND \LONGSYSBUF (pop \LONGSYSBUF)) (\GETREALSYSBUF]) (\PUTSYSBUF [LAMBDA (CHAR) (* rmk%: "27-Nov-84 17:51") (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ R W) (* Full) NIL) (T (\PUTBASEFAT \SYSBUFFER W CHAR) (AND (EQ 0 R) (replace (RING READ) of \SYSBUFFER with W)) (* Return random non-NIL value to  indicate success for BKSYSBUF) [replace (RING WRITE) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST W) \SYSBUFFER.FIRST) (T (ADD1 W] T]) (\PEEKSYSBUF [LAMBDA (STREAM) (* bvm%: " 8-Feb-85 17:50") (PROG (R) WAIT (until (\SYSBUFP) do (BLOCK)) (RETURN (if (TTY.PROCESSP) then (if \LONGSYSBUF then (CAR \LONGSYSBUF) elseif (NEQ (SETQ R (fetch (RING READ) of \SYSBUFFER)) 0) then (* Here's the vanilla case) (\GETBASEFAT \SYSBUFFER R) else (* Foo an interrupt could have sneaked in here and gobbled down the remaining  characters) (GO WAIT)) elseif (THIS.PROCESS) then (CAR (fetch PROCTYPEAHEAD of (THIS.PROCESS))) else (SHOULDNT]) ) (RPAQ? \LONGSYSBUF ) (RPAQ? \\KEYBOARDWAITBOX.GLOBALRESOURCE ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE [PUTDEF '\KEYBOARDWAITBOX 'RESOURCES '(NEW (CREATECELL \FIXP] ) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (RPAQQ \SYSBUFSIZE 200) (CONSTANTS (\SYSBUFSIZE 200)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \GETREALSYSBUF MACRO [NIL (PROG ((R (fetch (RING READ) of \SYSBUFFER))) (RETURN (AND (NOT (EQ 0 R)) (PROG1 (\GETBASEFAT \SYSBUFFER R) (AND [EQ (fetch (RING WRITE) of \SYSBUFFER) (replace (RING READ) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST R) \SYSBUFFER.FIRST) (T (ADD1 R] (replace (RING READ) of \SYSBUFFER with 0)))]) ) ) (DECLARE%: DOCOPY DONTEVAL@LOAD (* ; "Here because it must be done in init before PROC loaded") (MOVD? 'NILL 'CARET) ) (* ; "Key handler") (DEFINEQ (\KEYBOARDINIT [LAMBDA NIL (* ; "Edited 19-Nov-87 16:46 by Snow") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (* ;  "Sets up keyboard decoding tables.") (SETQ \CURRENTKEYACTION (SETQ \DEFAULTKEYACTION (KEYACTIONTABLE))) (* ;  "added \commandkeyaction 11-19-87 WAS") (SETQ \COMMANDKEYACTION (KEYACTIONTABLE)) (SETQ \INTERRUPTSTATE (\ALLOCLOCKED 2)) (PROGN (SETQ \SYSBUFFER (\ALLOCBLOCK (FOLDHI (ADD1 \SYSBUFFER.LAST) WORDSPERCELL))) (replace (RING READ) of \SYSBUFFER with 0) (replace (RING WRITE) of \SYSBUFFER with \SYSBUFFER.FIRST)) (SETQ \SAVEDSYSBUFFER (ALLOCSTRING \SYSBUFSIZE NIL NIL T)) (SETQ \LASTUSERACTION (LOCF (fetch LASTUSERACTION of \MISCSTATS))) (PROGN (SETQ \KEYBOARDEVENTQUEUE (\ALLOCLOCKED (FOLDHI (PLUS \KEYBOARDEVENT.LAST \KEYBOARDEVENT.SIZE) WORDSPERCELL))) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with \KEYBOARDEVENT.FIRST)) (SETQ \LASTKEYSTATE (create KEYBOARDEVENT)) (SETQ \SHIFTSTATE (create SHIFTSTATE)) (SETQ \MOUSETIMERTEMP (SETUPTIMER 0 NIL 'TICKS)) (MOUSECHORDWAIT \MOUSECHORDMILLISECONDS) (\KEYBOARDON]) (\KEYBOARDEVENTFN [LAMBDA (FDEV EVENT EXTRA) (* ; "Edited 11-Oct-90 09:49 by jds") (DECLARE (GLOBALVARS \KEYBOARD.BEFORETYPE \DORADOKEYACTIONS \DLIONKEYACTIONS \MAIKO.BEFOREKEYTYPE)) (SELECTQ EVENT ((BEFORELOGOUT BEFOREMAKESYS BEFORESYSOUT BEFORESAVEVM) (SETQ \KEYBOARD.BEFORETYPE \MACHINETYPE) (SETQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (SETQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) ((AFTERLOGOUT AFTERMAKESYS AFTERSYSOUT AFTERSAVEVM) (* ;  "Restarting a world. If we changed machines, fix up the key actions to match the new machine.") (* ; "(COND ((NEQ \\MACHINETYPE \\KEYBOARD.BEFORETYPE) ; Changed machines. Change Keyactions. (|for| X |in| (\\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) |do| (KEYACTION (CAR X) (CDR X) \\COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \\DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT))))") [COND ((OR (NEQ \MACHINETYPE \KEYBOARD.BEFORETYPE) (NEQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) (* ;  "Changed machines. Change Keyactions.") [COND ((NEQ (MACHINETYPE) 'MAIKO) (* ;; "Non-SUN, so just change machine-specific key actions:") (for X in (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION))) (T (* ;;  "On a SUN: Some keyactions contradict %"normal%" ones, so reset them all.") (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION] (MOUSECHORDWAIT (MOUSECHORDWAIT))) ((EQ (MACHINETYPE) 'MAIKO) (* ;; "Same machine type. SO only worry if we're on SUNs, where the keyboard type can differ between machines.") (COND ((NEQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT]) NIL]) (\ALLOCLOCKED [LAMBDA (NCELLS) (* lmm "20-Apr-85 13:08") (* allocate a block of NCELLS cells  and lock it) (PROG [(BLOCK (\ALLOCBLOCK NCELLS NIL (IMIN NCELLS CELLSPERPAGE] (\LOCKCELL BLOCK (FOLDHI (IPLUS (fetch (POINTER WORDINPAGE) of BLOCK) (UNFOLD NCELLS WORDSPERCELL)) WORDSPERPAGE)) (RETURN BLOCK]) (\SETIOPOINTERS [LAMBDA NIL (* ; "Edited 28-Apr-88 01:10 by MASINTER") (SELECTC (SETTOPVAL '\MACHINETYPE (fetch MachineType of \InterfacePage)) ((LIST \DOLPHIN \DORADO) (SETTOPVAL '\EM.MOUSEX (EMADDRESS MOUSEX.EM)) (SETTOPVAL '\EM.MOUSEY (EMADDRESS MOUSEY.EM)) (SETTOPVAL '\EM.CURSORX (EMADDRESS CURSORX.EM)) (SETTOPVAL '\EM.CURSORY (EMADDRESS CURSORY.EM)) (SETTOPVAL '\EM.REALUTILIN (EMADDRESS UTILIN.EM)) (SETTOPVAL '\EM.KBDAD0 (EMADDRESS KBDAD0.EM)) (SETTOPVAL '\EM.KBDAD1 (EMADDRESS KBDAD1.EM)) (SETTOPVAL '\EM.KBDAD2 (EMADDRESS KBDAD2.EM)) (SETTOPVAL '\EM.KBDAD3 (EMADDRESS KBDAD3.EM)) (SETTOPVAL '\EM.KBDAD4 (LOCF (fetch FAKEKBDAD4 of \InterfacePage))) (\PUTBASE \EM.KBDAD4 0 ALLUP) (SETTOPVAL '\EM.KBDAD5 (LOCF (fetch FAKEKBDAD5 OF \InterfacePage))) (\PUTBASE \EM.KBDAD5 0 ALLUP) (SETTOPVAL '\EM.DISPINTERRUPT (EMADDRESS DISPINTERRUPT.EM)) (SETTOPVAL '\EM.CURSORBITMAP (EMADDRESS CURSORBITMAP.EM)) (SETTOPVAL '\EM.DISPLAYHEAD (EMADDRESS DCB.EM)) (SETTOPVAL 'SCREENWIDTH (UNFOLD (fetch ScreenWidth of \InterfacePage) BITSPERWORD))) ((LIST \DANDELION \MAIKO) (SETTOPVAL '\EM.MOUSEX (fetch DLMOUSEXPTR of \IOPAGE)) (SETTOPVAL '\EM.MOUSEY (fetch DLMOUSEYPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN (fetch DLUTILINPTR of \IOPAGE)) (* ;; "Where the hardware bits live, vs. where the Lisp software sees them after reinterpretation by keyhandler") ) (SETTOPVAL '\EM.KBDAD0 (fetch DLKBDAD0PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD1 (fetch DLKBDAD1PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD2 (fetch DLKBDAD2PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD3 (fetch DLKBDAD3PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD4 (fetch DLKBDAD4PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD5 (fetch DLKBDAD5PTR of \IOPAGE)) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORBITMAP (fetch DLCURSORBITMAPPTR of \IOPAGE)) (SETTOPVAL '\EM.DISPLAYHEAD NIL) (SETTOPVAL 'SCREENWIDTH (SELECTC \MACHINETYPE (\MAIKO (SUBRCALL DSP-SCREENWIDTH)) 1024))) (\DAYBREAK (PROG ((KBDBASE (\DoveMisc.GetKBDBase))) (SETTOPVAL '\EM.KBDAD0 (\ADDBASE KBDBASE 1)) (SETTOPVAL '\EM.KBDAD1 (\ADDBASE KBDBASE 2)) (SETTOPVAL '\EM.KBDAD2 (\ADDBASE KBDBASE 3)) (SETTOPVAL '\EM.KBDAD3 (\ADDBASE KBDBASE 4)) (SETTOPVAL '\EM.KBDAD4 (\ADDBASE KBDBASE 5)) (SETTOPVAL '\EM.KBDAD5 (\ADDBASE KBDBASE 6)) (SETTOPVAL '\EM.MOUSEX (\DoveMisc.GetMouseXBase)) (SETTOPVAL '\EM.MOUSEY (\DoveMisc.GetMouseYBase)) (SETTOPVAL '\EM.CURSORBITMAP (\DoveDisplay.GetCursorBitmapBase)) (* These three set this way to  prevent address faults) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN KBDBASE) (* Where the hardware bits live, vs. where the Lisp software sees them after  reinterpretation by keyhandler) ) (SETTOPVAL 'SCREENWIDTH (\DoveDisplay.ScreenWidth)))) (RAID)) (SETTOPVAL '\EM.UTILIN (LOCF (fetch (IFPAGE FAKEMOUSEBITS) of \InterfacePage]) (\KEYBOARDOFF [LAMBDA NIL (* ; "Edited 20-Apr-88 10:28 by MASINTER") (\PUTBASE \EM.DISPINTERRUPT 0 (LOGAND (LOGXOR 65535 \LispKeyMask) (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE NIL]) (\KEYBOARDON [LAMBDA (NOCHECK) (* ; "Edited 24-Apr-88 00:03 by MASINTER") (\SETIOPOINTERS) (\PUTBASE \EM.DISPINTERRUPT 0 (LOGOR \LispKeyMask (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE T]) (\KEYHANDLER [LAMBDA NIL (* lmm "30-MAR-83 20:40") (\KEYHANDLER1]) (\KEYHANDLER1 [LAMBDA NIL (* ; "Edited 30-Mar-88 10:40 by Snow") (PROG ((OLD0 ALLUP) (OLD1 ALLUP) (OLD2 ALLUP) (OLD3 ALLUP) (OLD4 ALLUP) (OLD5 ALLUP) (OLDU ALLUP) (OLDFAKEU ALLUP) (LOOPCNT 10) (PERIODCNT 60) (MOUSESTATE \DLMOUSE.UP) (MOUSETIMER (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) (MOUSETEMP (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) CURSORX CURSORY YHOT) (SETQ \KEYBUFFERING NIL) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) LP (\CONTEXTSWITCH \KbdFXP) [COND (\PERIODIC.INTERRUPT (* eventually can be replaced with  general timer mechanism) (COND ((IGREATERP PERIODCNT 0) (* Continue counting down to zero) (SETQ PERIODCNT (SUB1 PERIODCNT))) ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \PERIODIC.INTERRUPTFRAME)) (* When we've counted down, then keep trying to cause the interrupt, and  reset the counter when it finally happens) (SETQ PERIODCNT (SUB1 (OR \PERIODIC.INTERRUPT.FREQUENCY 1] [COND ((OR (NEQ (\GETBASE \EM.MOUSEX 0) CURSORX) (NEQ (\GETBASE \EM.MOUSEY 0) CURSORY)) (\TRACKCURSOR (SETQ CURSORX (\GETBASE \EM.MOUSEX 0)) (SETQ CURSORY (\GETBASE \EM.MOUSEY 0] [COND ((OR [COND ((OR (NEQ OLDU (\GETBASE \EM.REALUTILIN 0)) (COND ((AND (EQ MOUSESTATE \DLMOUSE.WAITING) (IGREATERP (\BOXIDIFFERENCE (\RCLK MOUSETEMP) MOUSETIMER) 0)) (* Timer expired on seeing both left and right down, so set state to normal) (SETQ MOUSESTATE \DLMOUSE.NORMAL) T))) (SETQ MOUSESTATE (\DOMOUSECHORDING (SETQ OLDU (\GETBASE \EM.REALUTILIN 0)) MOUSESTATE)) (NEQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (NEQ OLD0 (\GETBASE \EM.KBDAD0 0)) (NEQ OLD1 (\GETBASE \EM.KBDAD1 0)) (NEQ OLD2 (\GETBASE \EM.KBDAD2 0)) (NEQ OLD3 (\GETBASE \EM.KBDAD3 0)) (NEQ OLD4 (\GETBASE \EM.KBDAD4 0)) (NEQ OLD5 (\GETBASE \EM.KBDAD5 0))) (COND ((EQ 0 (LOGAND (\GETBASE \EM.KBDAD2 0) 2114)) (* Ctrl-shift-DEL panic interrupt --  switch to TeleRaid immediately) (swap (fetch (IFPAGE TELERAIDFXP) of \InterfacePage) (fetch (IFPAGE KbdFXP) of \InterfacePage)) (\KEYBOARDOFF) (SETQ OLD2 (\GETBASE \EM.KBDAD2 0)) (GO LP))) [PROG ((W (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE)) (R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) WPTR) (COND ((EQ R W) (* eventqueue full!) (RETURN))) (SETQ WPTR (\ADDBASE \KEYBOARDEVENTQUEUE W)) (\RCLK (LOCF (fetch TIME of WPTR))) [with KEYBOARDEVENT WPTR (PROGN (SETQ W0 (SETQ OLD0 (\GETBASE \EM.KBDAD0 0))) (SETQ W1 (SETQ OLD1 (\GETBASE \EM.KBDAD1 0))) (SETQ W2 (SETQ OLD2 (\GETBASE \EM.KBDAD2 0))) (SETQ W3 (SETQ OLD3 (\GETBASE \EM.KBDAD3 0))) (SETQ W4 (SETQ OLD4 (\GETBASE \EM.KBDAD4 0))) (SETQ W5 (SETQ OLD5 (\GETBASE \EM.KBDAD5 0))) (SETQ WU (SETQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (COND ((EQ R 0) (* Queue was empty) (replace (RING READ) of \KEYBOARDEVENTQUEUE with W))) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ W \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS W \KEYBOARDEVENT.SIZE] (OR \KEYBUFFERING (SETQ \KEYBUFFERING T] [COND [\KEYBUFFERING (COND ((EQ \KEYBUFFERING T) (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \DOBUFFEREDTRANSITIONS)) (SETQ \KEYBUFFERING 'STARTED) (* don't call until  \DOBUFFEREDTRANSITIONS is done) ] (T (COND (\PENDINGINTERRUPT (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \INTERRUPTFRAME)) (SETQ \PENDINGINTERRUPT] [COND ((AND (NEQ \MACHINETYPE \MAIKO) (ILEQ (SETQ LOOPCNT (SUB1 LOOPCNT)) 0)) (* Only do this once in a while) (SETQ LOOPCNT (COND ((\UPDATETIMERS) (* Timer was updated, so do it next time around, too, in case we just came  back from RAID or other bcpl code) 1) (T 20] (COND ([AND NIL \TIMER.INTERRUPT.PENDING (IGREATERP (\BOXIDIFFERENCE (\RCLK (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) 0) (COND ((EQ \TIMER.INTERRUPT.PENDING '\MOUSECHANGE) (SETQ OLDU NIL) T) (T (\CAUSEINTERRUPT \KbdFXP (FUNCTION \TIMER.INTERRUPTFRAME] (SETQ \TIMER.INTERRUPT.PENDING))) (GO LP]) (\RESETKEYBOARD [LAMBDA NIL (* ; "Edited 30-Mar-88 10:07 by Snow") (\SETIOPOINTERS) (* Called with lisp keyboard disabled whenever Lisp is resumed from bcpl  logout or copysys.) (SETQ \KEYBUFFERING NIL) (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK) (EQ \MACHINETYPE \MAIKO)) (* Initialize fake mouse bits to all  up) (\PUTBASE \EM.UTILIN 0 ALLUP))) (with KEYBOARDEVENT \LASTKEYSTATE (SETQ W0 (\GETBASE \EM.KBDAD0 0)) (SETQ W1 (\GETBASE \EM.KBDAD1 0)) (SETQ W2 (\GETBASE \EM.KBDAD2 0)) (SETQ W3 (\GETBASE \EM.KBDAD3 0)) (SETQ W4 (\GETBASE \EM.KBDAD4 0)) (SETQ W5 (\GETBASE \EM.KBDAD5 0)) (SETQ WU (\GETBASE \EM.REALUTILIN 0)) (SETQ LOCK (XKEYDOWNP 'LOCK)) (SETQ 1SHIFT NIL) (SETQ 2SHIFT NIL) (SETQ CTRL NIL) (SETQ META NIL) (SETQ FONT NIL) (SETQ USERMODE1 NIL) (SETQ USERMODE2 NIL) (SETQ USERMODE3 NIL) (SETQ MOUSESTATE \DLMOUSE.UP)) (SETQ \TIMER.INTERRUPT.PENDING) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING READ) of \SYSBUFFER with 0) (SETQ \LONGSYSBUF) (\DAYTIME0 \LASTUSERACTION) (\KEYBOARDON]) (\DOMOUSECHORDING [LAMBDA (REALUTILIN STATE) (* bvm%: " 9-Oct-85 11:24") (* Handles mouse transitions on a DLion.  REALUTILIN is the actual util word from the processor.  STATE is our internal state. Sets contents of \EM.UTILIN to reflect the  virtual mouse state, which may contain a middle mouse button even where there  is only a two-button mouse. Returns new state) (PROG (LRSTATE) [COND ((OR (NULL \MOUSECHORDTICKS) (EQ (SETQ LRSTATE (LOGXOR (LOGAND REALUTILIN \MOUSE.ALLBITS) \MOUSE.ALLBITS)) 0)) (* Not interpreting chording, or both LEFT and RIGHT are up --  real state and virtual state the same) (SETQ STATE \DLMOUSE.UP)) (T (* Either L or R or both are down, so have to decide about Middle) (SELECTC STATE ((LIST \DLMOUSE.UP \DLMOUSE.WAITING) (SETQ REALUTILIN (LOGOR REALUTILIN \MOUSE.LRBIT)) (* Turn off the L and/or R bits) (COND ((EQ LRSTATE \MOUSE.LRBIT) (* Both L and R down at once, interpret as MIDDLE without waiting) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) REALUTILIN)) (SETQ STATE \DLMOUSE.MIDDLE)) ((NEQ STATE \DLMOUSE.WAITING) (* Only one of L and R down. Set timer, and ignore the down bit for now) (\BOXIPLUS (\RCLK (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) \MOUSECHORDTICKS) (SETQ STATE \DLMOUSE.WAITING)))) (\DLMOUSE.MIDDLE (* State is middle and at least one of L and R is still down, so consider it  to be still only middle) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LRBIT))) (SELECTC LRSTATE (\MOUSE.LEFTBIT (* Right came up. Henceforth treat  right transparently) (SETQ STATE \DLMOUSE.MIDDLE&RIGHT)) (\MOUSE.RIGHTBIT (* Left came up. Henceforth treat  left transparently) (SETQ STATE \DLMOUSE.MIDDLE&LEFT)) NIL)) (\DLMOUSE.MIDDLE&RIGHT (* Only ignore LEFT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LEFTBIT)))) (\DLMOUSE.MIDDLE&LEFT (* Only ignore RIGHT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.RIGHTBIT)))) (PROGN (* Remaining state is \DLMOUSE.NORMAL which means treat mouse normally, and  the only interesting transition is back to \DLMOUSE.UP) ] (\PUTBASE \EM.UTILIN 0 REALUTILIN) (RETURN STATE]) (\DOTRANSITIONS [LAMBDA (KEYBASE OLD NEW) (* ; "Edited 1-Feb-92 11:59 by jds") (* ;; "OLD and NEW are keyboard state words that are known to have changed. KEYBASE is the number in hardware order of the key corresponding to the first bit in these words. This function figures out the indices of transitioning keys and calls the decoder.") (for I (BITMASK _ (LLSH 1 15)) from 0 to 15 do [OR (EQ 0 (LOGAND BITMASK (LOGXOR OLD NEW))) (\DECODETRANSITION (IPLUS I KEYBASE) (EQ 0 (LOGAND NEW BITMASK] (SETQ BITMASK (LRSH BITMASK 1))) T]) (\DECODETRANSITION [LAMBDA (KEYNUMBER DOWNFLG) (* ; "Edited 19-Nov-87 16:29 by Snow") (* ;; "KEYNUMBER is the key number in the hardware keyboard layout, DOWNFLG is T if the key just went down. PENDINGINTERRUPT, bound in \KEYHANDLER, is set to the decoded character if it is an interrupt.") (.NOTELASTUSERACTION) (PROG ((TI (\TRANSINDEX KEYNUMBER DOWNFLG)) (KEYSTATE \LASTKEYSTATE) ASCIICODE SHIFTED) (SELECTC (TRANSITIONFLAGS \CURRENTKEYACTION TI) (IGNORE.TF (RETURN)) (LOCKSHIFT.TF (* ;  "Take shift action if either Shift or Caps Lock is down") (IF (fetch (KEYBOARDEVENT SHIFTORLOCK) of KEYSTATE) THEN (SETQ SHIFTED T))) (NOLOCKSHIFT.TF (* ;  "Take shift action only when Shift is down") (IF (fetch (KEYBOARDEVENT SHIFT) of KEYSTATE) THEN (SETQ SHIFTED T))) (EVENT.TF (RETURN)) (1SHIFTUP.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with NIL) (RETURN)) (1SHIFTDOWN.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with T) (RETURN)) (2SHIFTUP.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with NIL) (RETURN)) (2SHIFTDOWN.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with T) (RETURN)) (LOCKUP.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with NIL) (RETURN)) (LOCKDOWN.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with T) (RETURN)) (LOCKTOGGLE.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT LOCK) of KEYSTATE))) (RETURN)) (CTRLUP.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with NIL) (RETURN)) (CTRLDOWN.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with T) (RETURN)) (METAUP.TF (replace (KEYBOARDEVENT META) of KEYSTATE with NIL) (RETURN)) (METADOWN.TF (replace (KEYBOARDEVENT META) of KEYSTATE with T) (RETURN)) (FONTUP.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with NIL) (RETURN)) (FONTDOWN.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with T) (RETURN)) (FONTTOGGLE.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT FONT) of KEYSTATE))) (RETURN)) (USERMODE1UP.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with NIL) (RETURN)) (USERMODE1DOWN.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with T) (RETURN)) (USERMODE1TOGGLE.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE1) of KEYSTATE))) (RETURN)) (USERMODE2UP.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with NIL) (RETURN)) (USERMODE2DOWN.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with T) (RETURN)) (USERMODE2TOGGLE.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE2) of KEYSTATE))) (RETURN)) (USERMODE3UP.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with NIL) (RETURN)) (USERMODE3DOWN.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with T) (RETURN)) (USERMODE3TOGGLE.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE3) of KEYSTATE))) (RETURN)) (SHOULDNT)) (* ;;  "Only the LOCKSHIFT and NOLOCKSHIFT cases make it to here, having set SHIFTED if appropriate.") [SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \CURRENTKEYACTION TI)) (T (TRANSITIONCODE \CURRENTKEYACTION TI] [COND ((OR (fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) [IF (IGREATERP ASCIICODE 127) THEN (* ;; "Non-ascii interpretation--what is cntrl/meta supposed to mean? Try using the original interpretation. This way we can type ^E or Meta-D even if Russian keyboard is set, but doesn't mess up simple ascii remappings, such as bs->del.") (SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \COMMANDKEYACTION TI)) (T (TRANSITIONCODE \COMMANDKEYACTION TI] [COND ((fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (SETQ ASCIICODE (LOGAND ASCIICODE \CTRLMASK] (COND ((AND (OR (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) (ILESSP ASCIICODE \KEYBOARD.META)) (SETQ ASCIICODE (LOGOR ASCIICODE \KEYBOARD.META] (COND ((ASSOC ASCIICODE (fetch INTERRUPTLIST of \CURRENTKEYACTION)) (SETQ PENDINGINTERRUPT T) (replace WAITINGINTERRUPT of \INTERRUPTSTATE with T) (replace INTCHARCODE of \INTERRUPTSTATE with ASCIICODE)) (T (\PUTSYSBUF ASCIICODE]) (MOUSECHORDWAIT [LAMBDA MSECS (* MPL "21-Jun-85 16:31") (DECLARE (GLOBALVARS \RCLKMILLISECOND)) (PROG1 (AND \MOUSECHORDTICKS \MOUSECHORDMILLISECONDS) (COND ((IGREATERP MSECS 0) (SETQ \MOUSECHORDTICKS (AND (ARG MSECS 1) (IMIN MAX.SMALLP (ITIMES (SETQ \MOUSECHORDMILLISECONDS (OR (SMALLP (ARG MSECS 1)) 50)) \RCLKMILLISECOND]) (\TRACKCURSOR [LAMBDA (CURSORX CURSORY) (* ; "Edited 30-Mar-88 11:11 by Snow") (DECLARE (GLOBALVARS \CURSORDESTHEIGHT \CURSORDESTWIDTH)) (.NOTELASTUSERACTION) [COND ((OR [COND ((IGEQ CURSORX (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX)) (* Large cursor values are either out of bounds to the right or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORX 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORX 65535)) \CURSORHOTSPOTX) 0) (* Cursor pos + hotspot is still off to the left  (the IPLUS is an optimization of (\XMOUSECOORD))%, so clip to effective zero) (SETQ CURSORX (COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTX) BITSPERWORD] (T (SETQ CURSORX (SUB1 (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX] (IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT HARDCURSORHEIGHT))) (* repeat test so that both X and Y will get clipped each cycle.  This keeps the cursor from moving off the screen.) [COND ((IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY)) (* Large cursor values are either out of bounds to the bottom or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORY 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORY 65535)) \CURSORHOTSPOTY) 0) (* Cursor pos + hotspot is still off to the top, so clip to effective zero) (SETQ CURSORY (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTY) BITSPERWORD] (T (SETQ CURSORY (SUB1 (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY] (* If need to clip mouse, do so here. \SETMOUSEXY MACRO takes dlion  complexities into account.) (COND ((NEQ \MACHINETYPE \MAIKO) (\SETMOUSEXY CURSORX CURSORY] (COND (\SOFTCURSORUPP (\SOFTCURSORPOSITION CURSORX CURSORY))) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Have to kick DAYBREAK IOP to track the cursor.  *) (\DoveDisplay.SetCursorPosition CURSORX CURSORY))) (\PUTBASE \EM.CURSORX 0 CURSORX) (\PUTBASE \EM.CURSORY 0 CURSORY]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \SUN.TYPE3KEYBOARD 0) (RPAQQ \SUN.TYPE4KEYBOARD 1) (RPAQQ \SUN.JLEKEYBOARD 2) (RPAQQ \TOSHIBA.JIS 7) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) ) (RPAQ? \MOUSECHORDTICKS ) (RPAQ? \MOUSECHORDMILLISECONDS 50) (DECLARE%: DONTEVAL@LOAD DOCOPY (\KEYBOARDINIT) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS .NOTELASTUSERACTION MACRO (NIL (\BLT \LASTUSERACTION (LOCF (fetch SECONDSTMP of \MISCSTATS)) WORDSPERCELL))) ) (DECLARE%: EVAL@COMPILE (RPAQQ ALLUP 65535) (RPAQQ \CTRLMASK 159) (RPAQQ \METABIT 128) (CONSTANTS ALLUP \CTRLMASK \METABIT) ) (RPAQQ DLMOUSEBITS ((\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6))) (DECLARE%: EVAL@COMPILE (RPAQQ \MOUSE.LEFTBIT 4) (RPAQQ \MOUSE.RIGHTBIT 2) (RPAQQ \MOUSE.MIDDLEBIT 1) (RPAQQ \MOUSE.ALLBITS 7) (RPAQQ \MOUSE.LRBIT 6) (CONSTANTS (\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6)) ) (RPAQQ DLMOUSESTATES ((\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5))) (DECLARE%: EVAL@COMPILE (RPAQQ \DLMOUSE.UP 0) (RPAQQ \DLMOUSE.WAITING 1) (RPAQQ \DLMOUSE.NORMAL 2) (RPAQQ \DLMOUSE.MIDDLE 3) (RPAQQ \DLMOUSE.MIDDLE&LEFT 4) (RPAQQ \DLMOUSE.MIDDLE&RIGHT 5) (CONSTANTS (\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5)) ) (RPAQQ TRANSITIONFLAGS (ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF)) (DECLARE%: EVAL@COMPILE (RPAQQ ALTGRDOWN.TF 27) (RPAQQ ALTGRUP.TF 28) (RPAQQ ALTGRTOGGLE.TF 29) (RPAQQ CTRLDOWN.TF 5) (RPAQQ CTRLUP.TF 4) (RPAQQ DEADKEY.TF 30) (RPAQQ IGNORE.TF 0) (RPAQQ EVENT.TF 1) (RPAQQ LOCKDOWN.TF 8) (RPAQQ LOCKSHIFT.TF 2) (RPAQQ LOCKTOGGLE.TF 14) (RPAQQ LOCKUP.TF 7) (RPAQQ NOLOCKSHIFT.TF 3) (RPAQQ 1SHIFTDOWN.TF 6) (RPAQQ 1SHIFTUP.TF 9) (RPAQQ 2SHIFTDOWN.TF 11) (RPAQQ 2SHIFTUP.TF 10) (RPAQQ METADOWN.TF 13) (RPAQQ METAUP.TF 12) (RPAQQ FONTDOWN.TF 24) (RPAQQ FONTUP.TF 25) (RPAQQ FONTTOGGLE.TF 26) (RPAQQ USERMODE1UP.TF 15) (RPAQQ USERMODE1DOWN.TF 16) (RPAQQ USERMODE1TOGGLE.TF 17) (RPAQQ USERMODE2UP.TF 18) (RPAQQ USERMODE2DOWN.TF 19) (RPAQQ USERMODE2TOGGLE.TF 20) (RPAQQ USERMODE3UP.TF 21) (RPAQQ USERMODE3DOWN.TF 22) (RPAQQ USERMODE3TOGGLE.TF 23) (CONSTANTS ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \TRANSINDEX MACRO ((KEYNUMBER DOWNFLG) (COND (DOWNFLG (IPLUS \NKEYS KEYNUMBER)) (T KEYNUMBER)))) (PUTPROPS ARMEDCODE MACRO ((TABLE CHAR) (\GETBASEBIT (fetch (KEYACTION ARMED) TABLE) CHAR))) (PUTPROPS TRANSITIONALTGRCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION ALTGRAPHCODES) of TABLE) CHAR))) (PUTPROPS TRANSITIONSHIFTCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION SHIFTCODES) TABLE) CHAR))) (PUTPROPS TRANSITIONCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION CODES) TABLE) CHAR))) (PUTPROPS TRANSITIONFLAGS MACRO ((TABLE CHAR) (\GETBASEBYTE (fetch (KEYACTION FLAGS) TABLE) CHAR))) (PUTPROPS TRANSITIONDEADLIST MACRO ((TABLE CHAR SHIFTED) (\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1)))) (PUTPROPS CHECKFORDEADKEY MACRO [(KEYCODE TABLE CHAR SHIFTED) (LET ((CODE KEYCODE)) (COND [(IEQP CODE 65535) `(DEADKEY ,(\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1] (T CODE]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \NKEYS 112) (CONSTANTS \NKEYS) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (BLOCKRECORD RING ((READ WORD) (WRITE WORD))) ) (* ; "can get rid of shiftstate after clients have been fixed") (DECLARE%: EVAL@COMPILE (ACCESSFNS SHIFTSTATE [[DUMMYSHIFT (NOT (EQ 0 (LOGAND (\GETBASEBYTE DATUM 0) (LOGOR 1 2] [DUMMY1SHIFT [NOT (EQ 0 (LOGAND 1 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 1 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 1] [DUMMY2SHIFT [NOT (EQ 0 (LOGAND 2 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 2 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 2] [DUMMYLOCK [NOT (EQ 0 (LOGAND 4 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 4 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 4] [DUMMYSHIFTORLOCK (NOT (EQ 0 (\GETBASEBYTE DATUM 0))) (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (HELP " Can't turn on SHIFTORLOCK" )) (T 0] [DUMMYCTRL (NOT (EQ 0 (\GETBASEBYTE DATUM 1))) (\PUTBASEBYTE DATUM 1 (COND (NEWVALUE 1) (T 0] [DUMMYMETA (NOT (EQ 0 (\GETBASEBYTE DATUM 2))) (\PUTBASEBYTE DATUM 2 (COND (NEWVALUE 1) (T 0] [DUMMYFONT (NEQ 0 (LOGAND (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 3] [DUMMYUSERMODE1 (NEQ 0 (LOGAND (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 0] [DUMMYUSERMODE2 (NEQ 0 (LOGAND (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 1] [DUMMYUSERMODE3 (NEQ 0 (LOGAND (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 2] [DUMMYALTGRAPH (NEQ 0 (LOGAND (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 4] (DUMMYDEADKEYPENDING (NEQ 0 (LOGAND (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 5] (CREATE (\ALLOCBLOCK (FOLDHI 3 BYTESPERCELL)))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP) ) (DECLARE%: EVAL@COMPILE (RPAQQ NRINGINDEXWORDS 2) (CONSTANTS NRINGINDEXWORDS) ) (DECLARE%: EVAL@COMPILE (RPAQ \SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (RPAQ \SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE))) [CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] ) ) (DECLARE%: EVAL@COMPILE (RPAQQ \KEYNAMES ((5 %% FIVE) (4 $ FOUR) (6 ~ SIX) (e E) (7 & SEVEN) (d D) (u U) (v V) (0 %) ZERO) (k K) (- %) (p P) (/ ?) (\ %| FONT LOOKS) (LF SAME) (BS <-) (3 %# THREE) (2 @ TWO) (w W) (q Q) (s S) (a A) (9 %( NINE) (i I) (x X) (o O) (l L) (%, <) (%' %") (%] }) (BLANK-MIDDLE OPEN DBK-HELP) (BLANK-TOP KEYBOARD DBK-META) (1 ! ONE) (ESC ESCAPE ->) (TAB =>) (f F) (CTRL PROP'S EDIT) (c C) (j J) (b B) (z Z) (LSHIFT) (%. >) (; %:) (CR <-%|) (_ ^) (DEL DELETE) (SKIP NEXT) (r R) (t T) (g G) (y Y) (h H) (8 * EIGHT) (n N) (m M) (LOCK) (SPACE) (%[ {) (= +) (RSHIFT) (BLANK-BOTTOM STOP) (MOVE) (UNDO) (UTIL0 SUN-KEYPAD=) (UTIL1 SUN-KEYPAD/) (UTIL2 SUPER/SUB) (UTIL3 CASE) (UTIL4 STRIKEOUT) (UTIL5 KEYPAD2) (UTIL6 KEYPAD3 PGDN) (UTIL7 SUN-LF) (PAD1 LEFTKEY CAPSLOCK KEYPAD+) (PAD2 LEFTMIDDLEKEY NUMLOCK KEYPAD-) (PAD3 MIDDLEKEY SCROLLLOCK KEYPAD*) (PAD4 RIGHTMIDDLEKEY BREAK KEYPAD/ SUN-PAUSE) (PAD5 RIGHTKEY DOIT PRTSC) (LEFT RED MOUSERED) (RIGHT BLUE MOUSEBLUE) (MIDDLE YELLOW MOUSEYELLOW) (MARGINS) (K41 KEYPAD7 HOME) (K42 KEYPAD8) (K43 KEYPAD9 PGUP) (K44 KEYPAD4) (K45 KEYPAD5) (K46 SUN-LEFT-SPACE) (K47 KEYPAD6) (K48 RIGHT-COMMAND SUN-RIGHT-SPACE) (COPY) (FIND) (AGAIN) (HELP) (DEF'N EXPAND) (K4E KEYPAD1 END) (ALWAYS-ON-1) (ALWAYS-ON-2) (CENTER) (K52 KEYPAD0 INS) (BOLD) (ITALICS) (UNDERLINE) (SUPERSCRIPT) (SUBSCRIPT) (LARGER SMALLER) (K59 KEYPAD%| KEYPAD.) (K5A KEYPAD\ KEYPAD, SUN-F10) (K5B SUN-F11) (K5C SUN-F12) (DEFAULTS SUN-PROP) (K5E SUN-PRTSC) (K5F SUN-OPEN))) ) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun." ) (RPAQQ \ORIGKEYACTIONS ((0 (53 "%%" NOLOCKSHIFT)) (1 (52 "$" NOLOCKSHIFT)) (2 (54 "~" NOLOCKSHIFT)) (3 ("e" "E" LOCKSHIFT)) (4 (55 "&" NOLOCKSHIFT)) (5 ("d" "D" LOCKSHIFT)) (6 ("u" "U" LOCKSHIFT)) (7 ("v" "V" LOCKSHIFT)) (8 (48 ")" NOLOCKSHIFT)) (9 ("k" "K" LOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (11 ("p" "P" LOCKSHIFT)) (12 ("/" "?" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (15 (8 8 NOLOCKSHIFT)) (16 (51 "#" NOLOCKSHIFT)) (17 (50 "@" NOLOCKSHIFT)) (18 ("w" "W" LOCKSHIFT)) (19 ("q" "Q" LOCKSHIFT)) (20 ("s" "S" LOCKSHIFT)) (21 ("a" "A" LOCKSHIFT)) (22 (57 "(" NOLOCKSHIFT)) (23 ("i" "I" LOCKSHIFT)) (24 ("x" "X" LOCKSHIFT)) (25 ("o" "O" LOCKSHIFT)) (26 ("l" "L" LOCKSHIFT)) (27 ("," "<" NOLOCKSHIFT)) (28 ("'" "%"" NOLOCKSHIFT)) (29 ("]" "}" NOLOCKSHIFT)) (30 (194 194 NOLOCKSHIFT)) (31 (193 193 NOLOCKSHIFT)) (32 (49 "!" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (34 (9 9 NOLOCKSHIFT)) (35 ("f" "F" LOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (37 ("c" "C" LOCKSHIFT)) (38 ("j" "J" LOCKSHIFT)) (39 ("b" "B" LOCKSHIFT)) (40 ("z" "Z" LOCKSHIFT)) (41 1SHIFTDOWN . 1SHIFTUP) (42 ("." ">" NOLOCKSHIFT)) (43 (";" ":" NOLOCKSHIFT)) (44 (13 13 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)) (46 (127 535 NOLOCKSHIFT)) (47 ("(" "[" NOLOCKSHIFT)) (48 ("r" "R" LOCKSHIFT)) (49 ("t" "T" LOCKSHIFT)) (50 ("g" "G" LOCKSHIFT)) (51 ("y" "Y" LOCKSHIFT)) (52 ("h" "H" LOCKSHIFT)) (53 (56 "*" NOLOCKSHIFT)) (54 ("n" "N" LOCKSHIFT)) (55 ("m" "M" LOCKSHIFT)) (56 LOCKDOWN . LOCKUP) (57 (32 32 NOLOCKSHIFT)) (58 ("[" "{" NOLOCKSHIFT)) (59 ("=" "+" NOLOCKSHIFT)) (60 2SHIFTDOWN . 2SHIFTUP) (61 (195 195 NOLOCKSHIFT)) (63 (")" "]" NOLOCKSHIFT)) (77 EVENT . EVENT) (78 EVENT . EVENT) (79 EVENT . EVENT) (102 LOCKDOWN) (103 LOCKUP))) (RPAQQ \DLIONKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 ("\" "|" NOLOCKSHIFT)) (45 (96 "~" NOLOCKSHIFT)) (OPEN METADOWN . METAUP) (PROP'S CTRLDOWN . CTRLUP) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPERSCRIPT ("2,113" "2,153" NOLOCKSHIFT)) (SUBSCRIPT ("2,114" "2,154" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (DEFAULTS ("2,115" "2,155" NOLOCKSHIFT)) (93 (27 "2,64" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (31 ("2,5" "2,45" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (80 ("2,13" "2,53" NOLOCKSHIFT)) (FONT ("2,112" "2,152" NOLOCKSHIFT)))) (RPAQQ \DLIONOSDKEYACTIONS ((56 LOCKTOGGLE))) (RPAQQ \DORADOKEYACTIONS ((2 (54 "~" NOLOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)))) (RPAQQ \DOVEKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (56 CTRLDOWN . CTRLUP) (65 (27 27 NOLOCKSHIFT)) (71 (39 34 NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (108 (96 126 NOLOCKSHIFT)) (DBK-META METADOWN . METAUP) (DBK-HELP ("2,1" "2,41" NOLOCKSHIFT)) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (EDIT ("2,5" "2,45" NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (CASE ("2,104" "2,144" NOLOCKSHIFT)) (STRIKEOUT ("2,105" "2,145" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPER/SUB ("2,107" "2,147" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (MARGINS ("2,111" "2,151" NOLOCKSHIFT)) (LOOKS ("2,112" "2,152" NOLOCKSHIFT)) (CAPSLOCK LOCKTOGGLE) (NUMLOCK ("2,11" "-" NOLOCKSHIFT)) (SCROLLLOCK ("2,12" 180 NOLOCKSHIFT)) (BREAK (2 184 NOLOCKSHIFT)) (DOIT ("2,13" "2,53" NOLOCKSHIFT)) (KEYPAD7 ("2,14" 55 NOLOCKSHIFT)) (KEYPAD8 (173 56 NOLOCKSHIFT)) (KEYPAD9 ("2,15" 57 NOLOCKSHIFT)) (KEYPAD4 (172 52 NOLOCKSHIFT)) (KEYPAD5 ("2,16" 53 NOLOCKSHIFT)) (KEYPAD6 (174 54 NOLOCKSHIFT)) (KEYPAD1 ("2,17" 49 NOLOCKSHIFT)) (KEYPAD2 (175 50 NOLOCKSHIFT)) (KEYPAD3 ("2,20" 51 NOLOCKSHIFT)) (KEYPAD0 ("2,21" 48 NOLOCKSHIFT)) (KEYPAD%| ("|" 46 NOLOCKSHIFT)) (KEYPAD\ ("\" 44 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)))) (RPAQQ \DOVEOSDKEYACTIONS ((56 LOCKDOWN . LOCKUP) (36 CTRLDOWN . CTRLUP) (CAPSLOCK ("2,5" "2,45" NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONS ((61 (5 7 NOLOCKSHIFT)) (91 (520 552 NOLOCKSHIFT)) (92 (513 545 NOLOCKSHIFT)) (30 (513 545 NOLOCKSHIFT)) (63 (516 548 NOLOCKSHIFT)) (93 (532 564 NOLOCKSHIFT)) (62) (111 (329 263 NOLOCKSHIFT)) (89) (90 (515 547 NOLOCKSHIFT)) (73 (521 521 NOLOCKSHIFT)) (74 (522 522 NOLOCKSHIFT)) (75 (2 2 NOLOCKSHIFT)) (81 (524 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 (525 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 (526 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 (527 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 (528 51 NOLOCKSHIFT)) (98 (529 48 NOLOCKSHIFT)) (76 (523 555 NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 (577 609 NOLOCKSHIFT)) (99 (578 610 NOLOCKSHIFT)) (100 (579 611 NOLOCKSHIFT)) (67 (580 612 NOLOCKSHIFT)) (68 (581 613 NOLOCKSHIFT)) (101 (582 614 NOLOCKSHIFT)) (66 (583 615 NOLOCKSHIFT)) (104 (584 616 NOLOCKSHIFT)) (80 (585 617 NOLOCKSHIFT)) (13 (23 21 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (2 (54 94 NOLOCKSHIFT)) (10 (45 95 NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 (96 126 NOLOCKSHIFT)) (31 METADOWN . METAUP) (14 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 (530 562 NOLOCKSHIFT)) (105 (92 124 NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONST4 ((61 ("^E" "^G" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (30 ("2,1" "2,41" NOLOCKSHIFT)) (109 ("2,25" "2,65" NOLOCKSHIFT)) (63 ("2,4" "2,44" NOLOCKSHIFT)) (14 METADOWN . METAUP) (93 ("2,24" "2,64" NOLOCKSHIFT)) (62) (111 ("1,111" "1,79" NOLOCKSHIFT)) (89) (90 ("2,3" "2,43" NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 ("2,17" 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (98 ("2,21" 48 NOLOCKSHIFT)) (76 ("2,13" "2,13" NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 ("2,101" "2,141" NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (100 ("2,103" "2,143" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (68 ("2,105" "2,145" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (33 ("ESC" "ESC" NOLOCKSHIFT)) (64 IGNORE . IGNORE) (65 (27 27 NOLOCKSHIFT)) (95 IGNORE . IGNORE) (96 IGNORE . IGNORE) (102 IGNORE . IGNORE) (2 ("6" "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 ("`" "~" NOLOCKSHIFT)) (31 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (86 IGNORE . IGNORE) (88 IGNORE . IGNORE) (105 ("\" "|" NOLOCKSHIFT)))) (RPAQQ \MAIKO-JLE-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("\" "_" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (14 METADOWN . METAUP) (15 (8 8 NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (30 ("]" "}" NOLOCKSHIFT)) (31 METADOWN . METAUP) (33 ("ESC" "ESC" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (43 (";" "+" NOLOCKSHIFT)) (45 ("^" "~" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (56 LOCKTOGGLE . IGNORE) (58 ("@" "`" NOLOCKSHIFT)) (59 ("-" "=" NOLOCKSHIFT)) (61 ("^E" "^G" NOLOCKSHIFT)) (62) (63 ("2,4" "2,44" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (71 (10 10 NOLOCKSHIFT)) (72 (766 766 NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (86 (765 765 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (88 (770 771 NOLOCKSHIFT)) (90 ("2,3" "2,43" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (96 IGNORE . IGNORE) (98 ("2,21" 48 NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (102 IGNORE . IGNORE) (103 (767 768 NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (105 ("\" "|" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (109 (769 769 NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (111 ("1,111" "1,79" NOLOCKSHIFT)))) (RPAQQ \TOSHIBA-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("-" "=" NOLOCKSHIFT)) (59 ("^" "~" NOLOCKSHIFT)) (45 ("\" "|" NOLOCKSHIFT)) (58 ("@" "`" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (105 ("]" "}" NOLOCKSHIFT)) (43 (";" "+" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (15 (23 95 NOLOCKSHIFT)) (13 (8 8 NOLOCKSHIFT)) (86 METADOWN . METAUP) (73 (530 562 NOLOCKSHIFT)) (88 ("2,24" "2,64" NOLOCKSHIFT)) (98 IGNORE . IGNORE) (75 ("2,11" "2,11" NOLOCKSHIFT)) (110 ("2,12" "2,12" NOLOCKSHIFT)) (74 ("^B" "^B" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (173 56 NOLOCKSHIFT)) (95 ("2,15" 57 NOLOCKSHIFT)) (81 (172 52 NOLOCKSHIFT)) (82 ("2,16" 53 NOLOCKSHIFT)) (83 (174 54 NOLOCKSHIFT)) (84 ("2,17" 49 NOLOCKSHIFT)) (85 (175 50 NOLOCKSHIFT)) (87 ("2,20" 51 NOLOCKSHIFT)) (94 ("2,21" 48 NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 LOCKTOGGLE))) (RPAQQ KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL) (RPAQ? \KEYBOARD.META 256) (RPAQ? \MODIFIED.KEYACTIONS ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS) ) (* ; "Key interpretation") (DEFINEQ (KEYACTION [LAMBDA (KEYNAME ACTIONS TABLE) (* ; "Edited 19-Nov-87 16:19 by Snow") (LET ((NUMB (OR (SMALLP KEYNAME) (\KEYNAMETONUMBER KEYNAME))) (TABLE (OR TABLE \CURRENTKEYACTION))) (OR (TYPE? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (* ;  "Make sure he supplied a valid TABLE argument.") (CONS (\KEYACTION1 (\TRANSINDEX NUMB T) (AND ACTIONS (OR (CAR ACTIONS) 'IGNORE)) TABLE) (\KEYACTION1 (\TRANSINDEX NUMB NIL) (AND ACTIONS (OR (CDR ACTIONS) 'IGNORE)) TABLE]) (KEYACTIONTABLE [LAMBDA (OLD) (* ; "Edited 23-Mar-92 12:44 by jds") (* ;; "Create a fresh key action table (or copy OLD so it can be modified without danger). Returns a fresh keyaction table.") (COND (OLD (* ;; "He supplied an existing table; create a copy of it:") (OR (type? KEYACTION OLD) (\ILLEGAL.ARG OLD)) (* ;  "Make sure the argument IS a key action table.") (create KEYACTION copying OLD)) (T (* ;; "Create a completely fresh table, filled in from \ORIGKEYACTIONS, and the machine-specific exceptions:") (PROG1 (SETQ OLD (create KEYACTION)) (for X in (APPEND (COPY \ORIGKEYACTIONS) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) OLD)))]) (KEYBOARDTYPE [LAMBDA NIL (* ; "Edited 6-Nov-95 15:35 by ") (* ; "Edited 17-Feb-95 14:36 by rmk:") (* ;  "Edited 16-Jun-92 11:03 by kaplan") (* ;; "Returns a symbol identifying the currently connected keyboard type. For now, infers it from the machine type, defaults to NIL (= unknown).") (LET ((MT (MACHINETYPE))) (SELECTQ MT (MAIKO (OR [CADR (SASSOC (L-CASE (UNIX-GETENV "LDEKBDTYPE")) '(("type3" SUN3) ("type4" SUN4) ("type5" SUN5] (MKATOM (U-CASE (UNIX-GETENV "LDEKBDTYPE"))) (AND (STREQUAL "dos" (UNIX-GETPARM "ARCH")) 'FULL-IBMPC))) ((DORADO DANDELION DOVE) MT) NIL]) (RESETKEYACTION [LAMBDA (TABLE FROM RESETINTERRUPTS) (* ; "Edited 19-Nov-87 16:55 by Snow") (* ;; "Resets the actions of key transitions in the keyaction table TABLE, copying in the actions from FROM. If RESETINTERRUPTS is true, also copies the interrupt-character settings from FROM.") (DECLARE (GLOBALVARS \DEFAULTKEYACTION)) (* ;; "do some type checking first.") (OR (type? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (OR FROM (SETQ FROM \DEFAULTKEYACTION)) (OR (type? KEYACTION FROM) (\ILLEGAL.ARG TABLE)) (* ;; "do the resetting.") (\BLT (fetch (KEYACTION FLAGS) of TABLE) (fetch (KEYACTION FLAGS) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION FLAGS) of TABLE)) 1)) (\BLT (fetch (KEYACTION CODES) of TABLE) (fetch (KEYACTION CODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION CODES) of TABLE)) 1)) (\BLT (fetch (KEYACTION SHIFTCODES) of TABLE) (fetch (KEYACTION SHIFTCODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION SHIFTCODES) of TABLE)) 1)) [if RESETINTERRUPTS then (\BLT (fetch (KEYACTION ARMED) of TABLE) (fetch (KEYACTION ARMED) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION ARMED) of TABLE)) 1)) (replace (KEYACTION INTERRUPTLIST) of TABLE with (COPY (fetch (KEYACTION INTERRUPTLIST) of FROM] TABLE]) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS [LAMBDA NIL (* ; "Edited 18-Sep-90 22:36 by jds") (* ;;  "Return a list of machine-specific keyactions appropriate to the machine you're running on.") (* ;; "Also take account (on Maiko implementations) of whether we're running under X or not -- the CAPS-LOCK key works differently.") (SELECTC \MACHINETYPE (\DORADO \DORADOKEYACTIONS) (\DANDELION \DLIONKEYACTIONS) (\MAIKO (LET [(CAPS-LOCK-ACTIONS (COND ((EQUAL (UNIX-GETPARM "DISPLAY") "X") '((56 LOCKDOWN . LOCKUP) (72 LOCKDOWN . LOCKUP] (* ;; "If we're running under X windows, CAPS-LOCK-ACTIONS, appended to the normal keyactions, will reset the keyboard appropriately.") (COND ((EQUAL \SUN.TYPE3KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONS CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.TYPE4KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONST4 CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.JLEKEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) \MAIKO-JLE-KEYACTIONS) ((EQUAL \TOSHIBA.JIS (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (* ; "Toshiba JIS") (APPEND \MAIKOKEYACTIONST4 \TOSHIBA-KEYACTIONS)) (T (* ; "default is type3") \MAIKOKEYACTIONS)))) (\DAYBREAK (* ;  "Moving to a daybreak. Need to distinguish among the various kinds of keyboard.") (* ;; "For now, we only distinguish between the office keyboards (1 = US, 2 = Euro, 3 = Japanese, 4 = ADM-3), and some yet-to-be-determined Lisp-keyboard number") (COND ((ILEQ (\DoveMisc.ReadKeyboardType) 4) (* ;  "It's an office keyboard. Set it up right!") (APPEND \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (T (* ;  "Lisp keyboard. Leave the Dove keyactions as they were.") \DOVEKEYACTIONS))) NIL]) (\KEYACTION1 [LAMBDA (TI ACTION TABLE) (* ; "Edited 4-Mar-92 13:59 by jds") (PROG1 (SELECTC (TRANSITIONFLAGS TABLE TI) (IGNORE.TF 'IGNORE) ((LIST LOCKSHIFT.TF NOLOCKSHIFT.TF) [LET (CODE) (LIST (CHECKFORDEADKEY (TRANSITIONCODE TABLE TI) TABLE TI NIL) (CHECKFORDEADKEY (TRANSITIONSHIFTCODE TABLE TI) TABLE TI T) (TRANSITIONALTGRCODE TABLE TI) (COND ((EQ LOCKSHIFT.TF (TRANSITIONFLAGS TABLE TI)) 'LOCKSHIFT) (T 'NOLOCKSHIFT]) (EVENT.TF 'EVENT) (CTRLDOWN.TF 'CTRLDOWN) (CTRLUP.TF 'CTRLUP) (DEADKEY.TF (LIST 'DEADKEY (TRANSITIONDEADLIST TABLE TI) (TRANSITIONDEADLIST TABLE TI T))) (1SHIFTDOWN.TF '1SHIFTDOWN) (1SHIFTUP.TF '1SHIFTUP) (2SHIFTDOWN.TF '2SHIFTDOWN) (2SHIFTUP.TF '2SHIFTUP) (LOCKDOWN.TF 'LOCKDOWN) (LOCKUP.TF 'LOCKUP) (LOCKTOGGLE.TF 'LOCKTOGGLE) (METADOWN.TF 'METADOWN) (METAUP.TF 'METAUP) (FONTUP.TF 'FONTUP) (FONTDOWN.TF 'FONTDOWN) (FONTTOGGLE.TF 'FONTTOGGLE) (USERMODE1UP.TF 'USERMODE1UP) (USERMODE1DOWN.TF 'USERMODE1DOWN) (USERMODE1TOGGLE.TF 'USERMODE1TOGGLE) (USERMODE2UP.TF 'USERMODE2UP) (USERMODE2DOWN.TF 'USERMODE2DOWN) (USERMODE2TOGGLE.TF 'USERMODE2TOGGLE) (USERMODE3UP.TF 'USERMODE3UP) (USERMODE3DOWN.TF 'USERMODE3DOWN) (USERMODE3TOGGLE.TF 'USERMODE3TOGGLE) (ALTGRUP.TF 'ALTGRUP) (ALTGRDOWN.TF 'ALTGRDOWN) (ALTGRTOGGLE.TF 'ALTGRTOGGLE) (SHOULDNT)) [SELECTQ ACTION ((NIL NOCHANGE)) (IGNORE (change (TRANSITIONFLAGS TABLE TI) IGNORE.TF)) (EVENT (change (TRANSITIONFLAGS TABLE TI) EVENT.TF)) (CTRLUP (change (TRANSITIONFLAGS TABLE TI) CTRLUP.TF)) (CTRLDOWN (change (TRANSITIONFLAGS TABLE TI) CTRLDOWN.TF)) (1SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 1SHIFTUP.TF)) (1SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 1SHIFTDOWN.TF)) (2SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 2SHIFTUP.TF)) (2SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 2SHIFTDOWN.TF)) (LOCKUP (change (TRANSITIONFLAGS TABLE TI) LOCKUP.TF)) (LOCKDOWN (change (TRANSITIONFLAGS TABLE TI) LOCKDOWN.TF)) (LOCKTOGGLE (change (TRANSITIONFLAGS TABLE TI) LOCKTOGGLE.TF)) (METAUP (change (TRANSITIONFLAGS TABLE TI) METAUP.TF)) (METADOWN (change (TRANSITIONFLAGS TABLE TI) METADOWN.TF)) (FONTUP (change (TRANSITIONFLAGS TABLE TI) FONTUP.TF)) (FONTDOWN (change (TRANSITIONFLAGS TABLE TI) FONTDOWN.TF)) (FONTTOGGLE (change (TRANSITIONFLAGS TABLE TI) FONTTOGGLE.TF)) (USERMODE1UP (change (TRANSITIONFLAGS TABLE TI) USERMODE1UP.TF)) (USERMODE1DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE1DOWN.TF)) (USERMODE1TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE1TOGGLE.TF)) (USERMODE2UP (change (TRANSITIONFLAGS TABLE TI) USERMODE2UP.TF)) (USERMODE2DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE2DOWN.TF)) (USERMODE2TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE2TOGGLE.TF)) (USERMODE3UP (change (TRANSITIONFLAGS TABLE TI) USERMODE3UP.TF)) (USERMODE3DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE3DOWN.TF)) (USERMODE3TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE3TOGGLE.TF)) (ALTGRUP (change (TRANSITIONFLAGS TABLE TI) ALTGRUP.TF)) (ALTGRDOWN (change (TRANSITIONFLAGS TABLE TI) ALTGRDOWN.TF)) (ALTGRTOGGLE (change (TRANSITIONFLAGS TABLE TI) ALTGRTOGGLE.TF)) (PROG (CODE SHIFTCODE ALTGRCODE ACT DEAD SHIFTDEAD) (COND ([AND [OR (AND (AND (LISTP (CAR (LISTP ACTION))) (EQ (CAAR (LISTP ACTION)) 'DEADKEY)) [SETQ DEAD (for PAIR in (CADAR (LISTP ACTION)) collect (* ;;  "Make sure we'll take string charcode specs in the deadkey list.") (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ CODE 65535)) [\CHARCODEP (SETQ CODE (\GETCHARCODE (CAR (LISTP ACTION] (SETQ CODE (APPLY* (FUNCTION CHARCODE) (CAR (LISTP ACTION] [OR (AND (AND (LISTP (CADR (LISTP ACTION))) (EQ (CAADR (LISTP ACTION)) 'DEADKEY)) [SETQ SHIFTDEAD (for PAIR in (CADADR (LISTP ACTION)) collect (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ SHIFTCODE 65535) (SETQ ACT (CDR ACTION))) [\CHARCODEP (SETQ SHIFTCODE (\GETCHARCODE (CAR (SETQ ACT (LISTP (CDR ACTION] (SETQ SHIFTCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) (AND [OR [\CHARCODEP (SETQ ALTGRCODE (\GETCHARCODE (CAR ACT] (SETQ ALTGRCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) NIL] (change (TRANSITIONCODE TABLE TI) CODE) (change (TRANSITIONSHIFTCODE TABLE TI) SHIFTCODE) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH TI 1) DEAD) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (IPLUS \NKEYS \NKEYS TI) 1) SHIFTDEAD) (AND ALTGRCODE (change (TRANSITIONALTGRCODE TABLE TI) ALTGRCODE))) (T (\ILLEGAL.ARG ACTION])]) (KEYDOWNP [LAMBDA (KEYNAME) (* lmm "18-Apr-85 02:09") (* T if the indicated key is  instantaneously down.) (\NEWKEYDOWNP (\KEYNAMETONUMBER KEYNAME]) (KEYNUMBERP [LAMBDA (X) (* ; "Edited 16-Jan-96 13:16 by rmk") (AND (SMALLP X) (IGEQ X 0) (ILESSP X \NKEYS) X]) (\KEYNAMETONUMBER [LAMBDA (KEYNAME) (* rmk%: " 2-SEP-83 10:29") (DECLARE (GLOBALVARS \KEYNAMES)) (* The fast case is when KEYNAME is  lower-case) (for X N in \KEYNAMES as I from 0 when (EQMEMB KEYNAME X) do (RETURN I) finally (RETURN (OR (AND (NEQ KEYNAME (SETQ N (L-CASE KEYNAME))) (for Y in \KEYNAMES as I from 0 when (EQMEMB N Y) do (RETURN I))) (\ILLEGAL.ARG KEYNAME]) (MODIFY.KEYACTIONS [LAMBDA (KeyActions SaveCurrent?) (* ; "Edited 2-Feb-89 15:38 by GADENER") (PROG1 [if SaveCurrent? then (SETQ \MODIFIED.KEYACTIONS (for ITEM in KeyActions collect (CONS (CAR ITEM) (KEYACTION (CAR ITEM] [for action in KeyActions do (for table in '(\CURRENTKEYACTION \COMMANDKEYACTION) do (KEYACTION (CAR action) (CDR action) (EVAL table])]) (METASHIFT [LAMBDA FLG (* ; "Edited 19-Nov-87 16:59 by Snow") (* ;; "Sets interpretation of swat key to first arg, where T means meta-shift, NIL means original setting. Returns previous setting") (PROG ((METASTATUS '(METADOWN . METAUP)) OLDSETTING) [SETQ OLDSETTING (KEYACTION 'BLANK-BOTTOM (AND (IGREATERP FLG 0) (COND ((EQ (ARG FLG 1) T) METASTATUS) (T (OR (ARG FLG 1) (CDR (ASSOC 'BLANK-BOTTOM \ORIGKEYACTIONS] (RETURN (COND ((EQUAL OLDSETTING METASTATUS) T) (T OLDSETTING]) (SHIFTDOWNP [LAMBDA (SHIFT) (* lmm "18-Apr-85 01:07") (* Tells whether a given shift is  down) (SELECTQ SHIFT (LOCK (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (META (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE))) (1SHIFT (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE)) (2SHIFT (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE)) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE))) (CTRL (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (FONT (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (USERMODE1 (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (USERMODE2 (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (USERMODE3 (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (\ILLEGAL.ARG SHIFT]) ) (* ; "To support office style 1108 & 1186 keyboards") (DEFINEQ (SETUP.OFFICE.KEYBOARD [LAMBDA NIL (* jds " 8-Oct-85 16:27") (SELECTQ (MACHINETYPE) (DANDELION (MODIFY.KEYACTIONS \DLIONOSDKEYACTIONS)) (DOVE (MODIFY.KEYACTIONS \DOVEOSDKEYACTIONS)) NIL]) ) (DEFOPTIMIZER \KEYNAMETONUMBER (&REST X) [LET [(CE (CONSTANTEXPRESSIONP (CAR X] (COND (CE (\KEYNAMETONUMBER (CAR CE))) (T 'IGNOREMACRO]) (DECLARE%: EVAL@COMPILE (PUTPROPS \TEMPCOPYTIMER MACRO ((X) (PROGN (\BLT \MOUSETIMERTEMP (LOCF X) WORDSPERCELL) \MOUSETIMERTEMP))) ) (* ; "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED") (DEFOPTIMIZER KEYDOWNP (KEYNAME) `(\NEWKEYDOWNP (\KEYNAMETONUMBER ,KEYNAME))) (* "END EXPORTED DEFINITIONS") ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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)))) ) (* "END EXPORTED DEFINITIONS") (* ; "A raw keyboard device/stream") (DEFINEQ (\INIT.KEYBOARD.STREAM [LAMBDA NIL (* ; "Edited 4-Sep-87 10:25 by jds") (* ;; "Initialize the %"Keyboard%" device: Set up the FDEV and the prototype keyboard stream in their respective global variables.") (DECLARE (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM)) [\DEFINEDEVICE 'KEYBOARD (SETQ \KEYBOARD.DEVICE (create FDEV DEVICENAME _ 'KEYBOARD CLOSEFILE _ (FUNCTION NILL) EVENTFN _ (FUNCTION \KEYBOARDEVENTFN) BIN _ (FUNCTION \GETKEY) PEEKBIN _ (FUNCTION \PEEKSYSBUF) READP _ (FUNCTION \SYSBUFP) EOFP _ (FUNCTION NILL) GETFILENAME _ (FUNCTION (LAMBDA (X MODE) (if (EQ MODE 'INPUT) then \KEYBOARD.STREAM] (SETQ \KEYBOARD.STREAM (create STREAM USERCLOSEABLE _ NIL USERVISIBLE _ NIL FULLFILENAME _ '{KEYBOARD} DEVICE _ \KEYBOARD.DEVICE ACCESS _ 'INPUT]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\INIT.KEYBOARD.STREAM) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM) ) (* "END EXPORTED DEFINITIONS") (* ; "Hook for a periodic interrupt") (DEFINEQ (\DOBUFFEREDTRANSITIONS [LAMBDA (\INTERRUPTABLE) (DECLARE (SPECVARS \INTERRUPTABLE)) (* ; "Edited 1-Feb-92 11:59 by jds") (SETQ \KEYBUFFERING 'INPROGRESS) (LET ((PENDINGINTERRUPT)) (DECLARE (SPECVARS PENDINGINTERRUPT)) (* ; "Used by \DECODETRANSITION") [bind R RPTR until (EQ 0 (SETQ R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) ) do (SETQ RPTR (\ADDBASE \KEYBOARDEVENTQUEUE R)) (* ; "get pointer to this event") (* ;  "handle simple keyboard words by calling \DOTRANSITIONS for each word") [COND ((NEQ (fetch (KEYBOARDEVENT W0) of RPTR) (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE )) (\DOTRANSITIONS 0 (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W0) of RPTR)) (replace (KEYBOARDEVENT W0) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W0) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W1) of RPTR) (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE )) (\DOTRANSITIONS 16 (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W1) of RPTR)) (replace (KEYBOARDEVENT W1) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W1) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W2) of RPTR) (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE )) (\DOTRANSITIONS 32 (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W2) of RPTR)) (replace (KEYBOARDEVENT W2) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W2) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W3) of RPTR) (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE )) (\DOTRANSITIONS 48 (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W3) of RPTR)) (replace (KEYBOARDEVENT W3) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W3) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W4) of RPTR) (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE )) (\DOTRANSITIONS 80 (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W4) of RPTR)) (replace (KEYBOARDEVENT W4) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W4) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W5) of RPTR) (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE )) (\DOTRANSITIONS 96 (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W5) of RPTR)) (replace (KEYBOARDEVENT W5) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W5) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT WU) of RPTR) (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE )) (\DOTRANSITIONS 64 (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT WU) of RPTR)) (replace (KEYBOARDEVENT WU) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT WU) of RPTR] (* ;;; "now remove event from queue") (COND ((EQ [replace (RING READ) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ R \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS \KEYBOARDEVENT.SIZE R] (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE )) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0] (PROGN (* ; "update dummy shift state") (replace DUMMY1SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 1SHIFT ) of \LASTKEYSTATE )) (replace DUMMY2SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 2SHIFT ) of \LASTKEYSTATE )) (replace DUMMYLOCK of \SHIFTSTATE with (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (replace DUMMYCTRL of \SHIFTSTATE with (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (replace DUMMYMETA of \SHIFTSTATE with (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (replace DUMMYFONT of \SHIFTSTATE with (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (replace DUMMYUSERMODE1 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (replace DUMMYUSERMODE2 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (replace DUMMYUSERMODE3 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (replace DUMMYALTGRAPH of \SHIFTSTATE with (fetch (KEYBOARDEVENT ALTGRAPH) of \LASTKEYSTATE)) (replace DUMMYDEADKEYPENDING of \SHIFTSTATE with (fetch ( KEYBOARDEVENT DEADKEYPENDING ) of \LASTKEYSTATE) )) (* ;; "Note: there is a window between the test of READ above and the setting of \KEYBUFFERING below where a keyboard transition can be ignored until the next transition causes \KEYBUFFERING to be set again") (COND ((NOT (OR PENDINGINTERRUPT \PENDINGINTERRUPT)) (* ;  "No interrupt noticed this time or on any previous invocation") (SETQ \KEYBUFFERING NIL)) ((NOT (\GETBASEPTR (\STKSCAN '\INTERRUPTABLE) 0)) (* ;  "We're not interruptable, so try again later") (SETQ \PENDINGINTERRUPT T) (SETQ \KEYBUFFERING NIL)) (T (SETQ \PENDINGINTERRUPT NIL) (SETQ \KEYBUFFERING NIL) (LET ((\INTERRUPTABLE T)) (INTERRUPTED]) (\TIMER.INTERRUPTFRAME [LAMBDA NIL (* lmm "22-Apr-85 09:47") (* place holder for periodic  interrupts) (if NIL then (APPLY* \PERIODIC.INTERRUPT) (if \PERIODIC.INTERRUPT then (SETUPTIMER (QUOTIENT (TIMES \PERIODIC.INTERRUPT.FREQUENCY \RCLKSECOND) 77) (LOCF (fetch DLMOUSETIMER of \MISCSTATS)) 'TICKS) (SETQ \TIMER.INTERRUPT.PENDING T]) (\PERIODIC.INTERRUPTFRAME [LAMBDA NIL (DECLARE (GLOBALVARS \PERIODIC.INTERRUPT)) (* lmm "16-Jul-85 16:22") (LET ((FN \PERIODIC.INTERRUPT)) (AND FN (SPREADAPPLY* FN]) ) (RPAQ? \KEYBUFFERING ) (RPAQ? \PERIODIC.INTERRUPT ) (RPAQ? \TIMER.INTERRUPT.PENDING ) (RPAQ? \PERIODIC.INTERRUPT.FREQUENCY 77) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (* ; "cursor and mouse related functions.") (DEFINEQ (\HARDCURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 2-Jan-2000 18:10 by kaplan") (* ;  "version of \CURSORUP that knows about the possibility of the cursor being on the color screen.") (PROG (IMAGE) (SETQ \SOFTCURSORP NIL) (SETQ \CURRENTCURSOR NEWCURSOR) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION))) (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR] (BITBLT IMAGE 0 0 CursorBitMap 0 (IDIFFERENCE HARDCURSORHEIGHT (fetch (BITMAP BITMAPHEIGHT ) of IMAGE)) HARDCURSORWIDTH HARDCURSORHEIGHT (COND (INVERTFLG 'INVERT) (T 'INPUT)) 'REPLACE) (SELECTC \MACHINETYPE (\DAYBREAK (\DoveDisplay.SetCursorShape CursorBitMap)) (\MAIKO (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR))) NIL]) (\HARDCURSORPOSITION [LAMBDA (XPOS YPOS) (* kbr%: "13-Jun-85 21:24") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS)) NIL]) (\HARDCURSORDOWN [LAMBDA NIL (* kbr%: "23-Apr-85 18:26") (\CLEARBM (CURSORBITMAP]) ) (DEFINEQ (CURSOR.INIT [LAMBDA NIL (* kbr%: "23-Jan-86 17:34") (PROG (DESTBPL) (* Assorted globals for doing the  color cursor. *) (SETQ \CURSORDESTINATION ScreenBitMap) (SETQ \SOFTCURSORUPBM NIL) (SETQ \SOFTCURSORDOWNBM NIL) (SETQ \CURSORDESTLINE 0) (SETQ \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of ScreenBitMap)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of ScreenBitMap)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of ScreenBitMap)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of ScreenBitMap)) (* Initialize PILOTBBTs.  *) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (* These PILOTBBTs are the mixing areas for forming the color cursor image.  *) (* Does SCREEN to DOWNBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT1 (create PILOTBBT PBTSOURCEBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT1) (* Does DOWNBM to UPBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT2 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT2) (* Does MASK to UPBM via INPUT,  ERASE. *) (SETQ \SOFTCURSORBBT3 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 1 PBTOPERATION _ 1)) (\LOCKCELL \SOFTCURSORBBT3) (* Does IMAGE to UPBM via INPUT,  PAINT. *) (SETQ \SOFTCURSORBBT4 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 2)) (\LOCKCELL \SOFTCURSORBBT4) (* Does UPBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT5 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT5) (* Does DOWNBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT6 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT6) (* Lock things down.  *) ]) (\CURSORDESTINATION [LAMBDA (DESTINATION) (* kbr%: " 2-Sep-85 20:13") (* Change DESTINATION of  \CURRENTCURSOR, assuming it is down.  *) (PROG (DESTBPL) (COND ((NOT (EQ DESTINATION \CURSORDESTINATION)) (UNINTERRUPTABLY [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CURSOR CUIMAGE) of \CURRENTCURSOR )) (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION))) (\CURSORBITSPERPIXEL \CURRENTCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION] (\SETMOUSEXY 0 0) (\PUTBASE \EM.CURSORX 0 0) (\PUTBASE \EM.CURSORY 0 0) (SETQ \CURSORDESTLINE 0) (SETQ.NOREF \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of DESTINATION)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of DESTINATION)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of DESTINATION)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of DESTINATION )) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT1 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT5 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT6 with DESTBPL) (SETQ \CURSORDESTINATION DESTINATION))]) (\SOFTCURSORUP [LAMBDA (NEWCURSOR) (* kbr%: " 2-Sep-85 20:15") (* Put soft NEWCURSOR up, assuming soft cursor is down.  *) (PROG (IMAGE MASK WIDTH BWIDTH HEIGHT CURSORBITSPERPIXEL CURSORBPL UPBMBASE DOWNBMBASE) (* Get cursor IMAGE & MASK.  *) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) (SETQ MASK (fetch (CURSOR CUMASK) of NEWCURSOR)) (SETQ WIDTH (fetch (BITMAP BITMAPWIDTH) of IMAGE)) (SETQ HEIGHT (fetch (BITMAP BITMAPHEIGHT) of IMAGE)) (SETQ CURSORBITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE)) (* Create new UPBM & DOWNBM caches  if necessary. *) (COND ((NOT (AND (type? BITMAP \SOFTCURSORUPBM) (EQ (fetch (BITMAP BITMAPWIDTH) of \SOFTCURSORUPBM) WIDTH) (EQ (fetch (BITMAP BITMAPHEIGHT) of \SOFTCURSORUPBM) HEIGHT) (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of \SOFTCURSORUPBM) CURSORBITSPERPIXEL))) (SETQ \SOFTCURSORWIDTH WIDTH) (SETQ \SOFTCURSORHEIGHT HEIGHT) (SETQ \SOFTCURSORUPBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ \SOFTCURSORDOWNBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ UPBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM)) (\TEMPLOCKPAGES UPBMBASE 1) (SETQ DOWNBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM)) (\TEMPLOCKPAGES DOWNBMBASE 1) (SETQ CURSORBPL (UNFOLD (fetch (BITMAP BITMAPRASTERWIDTH) of IMAGE) BITSPERWORD)) (SETQ BWIDTH (ITIMES (fetch (BITMAP BITMAPWIDTH) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE))) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT1 with CURSORBPL) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT2 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT2 with DOWNBMBASE) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT2 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT2 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT3 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT3 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT3 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT4 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT4 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT4 with HEIGHT) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT5 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT6 with CURSORBPL))) (* Change PILOTBBTs.  *) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT3 with (fetch (BITMAP BITMAPBASE ) of MASK)) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT4 with (fetch (BITMAP BITMAPBASE ) of IMAGE)) (* Put up new \CURRENTCURSOR.  *) (SETQ \CURRENTCURSOR NEWCURSOR) (\TEMPLOCKPAGES \CURRENTCURSOR 1) (SETQ \SOFTCURSORP T) (\SOFTCURSORUPCURRENT]) (\SOFTCURSORUPCURRENT [LAMBDA NIL (* kbr%: "18-Aug-85 15:09") (* Put soft \CURRENTCURSOR up, assuming soft cursor is down.  *) (PROG (DISPINTERRUPT X Y XBASE YBASE WIDTH HEIGHT BITSPERPIXEL MINUSDESTRASTERWIDTH DEST DESTBIT SOURCEOFFSET UPBMSOURCE DOWNBMSOURCE SOURCEBIT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP T) (* Roughly, we want to  (BITBLT CURSOR XBASE YBASE SCREEN X  Y WIDTH HEIGHT) *) (SETQ X (SIGNED (\GETBASE \EM.MOUSEX 0) BITSPERWORD)) (SETQ Y (SIGNED (\GETBASE \EM.MOUSEY 0) BITSPERWORD)) (SETQ XBASE 0) (SETQ YBASE 0) (SETQ WIDTH \SOFTCURSORWIDTH) (SETQ HEIGHT \SOFTCURSORHEIGHT) (* Clip off screen parts of cursor.  *) [COND ((IGREATERP 0 X) (* Some of cursor is to left of  screen. *) (SETQ XBASE (IMINUS X)) (SETQ WIDTH (IDIFFERENCE WIDTH XBASE)) (SETQ X 0)) ((IGREATERP (IPLUS X WIDTH) \CURSORDESTWIDTH) (* Some of cursor is to right of  screen. *) (SETQ WIDTH (IDIFFERENCE \CURSORDESTWIDTH X] (COND ((ILESSP WIDTH 0) (GO EXIT))) [COND ((IGREATERP 0 Y) (* Some of cursor is to above of  screen. *) (SETQ YBASE (IMINUS Y)) (SETQ HEIGHT (IDIFFERENCE HEIGHT YBASE)) (SETQ Y 0)) ((IGREATERP (IPLUS Y HEIGHT) \CURSORDESTHEIGHT) (* Some of cursor is to below of  screen. *) (SETQ HEIGHT (IDIFFERENCE \CURSORDESTHEIGHT Y] (COND ((ILESSP HEIGHT 0) (GO EXIT))) (* These loops reset \CURSORDESTLINEBASE while avoiding large number  arithmetic. *) [COND [(IGREATERP \CURSORDESTLINE Y) (SETQ MINUSDESTRASTERWIDTH (IMINUS \CURSORDESTRASTERWIDTH)) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (SUB1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE MINUSDESTRASTERWIDTH] ((ILESSP \CURSORDESTLINE Y) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (ADD1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE \CURSORDESTRASTERWIDTH] (* Reset PILOTBBTs.  *) (SETQ BITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of \CURRENTCURSOR)) (SETQ X (ITIMES BITSPERPIXEL X)) (SETQ XBASE (ITIMES BITSPERPIXEL XBASE)) (SETQ WIDTH (ITIMES BITSPERPIXEL WIDTH)) (SETQ DEST \CURSORDESTLINEBASE) (SETQ DESTBIT X) (SETQ SOURCEOFFSET (ITIMES YBASE (fetch (BITMAP BITMAPRASTERWIDTH) of \SOFTCURSORUPBM ))) (SETQ UPBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM) SOURCEOFFSET)) (SETQ DOWNBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM) SOURCEOFFSET)) (SETQ SOURCEBIT XBASE) (* TBW%: Most of these fields only need to be set if we are clipping this  time or the previous time we put the cursor up.  *) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT1 with DOWNBMSOURCE) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT1 with SOURCEBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT1 with DEST) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT1 with DESTBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT1 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT1 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT5 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT5 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT5 with UPBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT5 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT5 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT5 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT6 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT6 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT6 with DOWNBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT6 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT6 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT6 with HEIGHT) (* Save background behind cursor.  *) (\PILOTBITBLT \SOFTCURSORBBT1 0) (* Compute cursor appearance.  UPBM = (OR IMAGE (AND DOWNBM  (NOT MASK))) *) (\PILOTBITBLT \SOFTCURSORBBT2 0) (\PILOTBITBLT \SOFTCURSORBBT3 0) (\PILOTBITBLT \SOFTCURSORBBT4 0) (* Put color cursor up.  *) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT5 0) EXIT (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORPOSITION [LAMBDA (X Y) (* kbr%: "18-Aug-85 14:50") (* Move soft cursor.  *) (PROG (DISPINTERRUPT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) [COND ((OR (NOT (EQ (\GETBASE \EM.CURSORX 0) X)) (NOT (EQ (\GETBASE \EM.CURSORY 0) Y))) (COND (\SOFTCURSORUPP (\SOFTCURSORDOWN) (\SOFTCURSORUPCURRENT] (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORDOWN [LAMBDA NIL (* kbr%: " 6-Jul-85 00:09") (* Take COLOR cursor down.  *) (PROG (DISPINTERRUPT) (* \SOFTCURSORUPP must be set to NIL  before BITBLTing. *) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP NIL) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT6 0) (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (CURSORPROP [LAMBDA X (* kbr%: "11-Jan-86 20:03") (COND ((IGREATERP X 2) (PUTCURSORPROP (ARG X 1) (ARG X 2) (ARG X 3))) ((EQ X 2) (GETCURSORPROP (ARG X 1) (ARG X 2))) (T (\ILLEGAL.ARG NIL]) (GETCURSORPROP [LAMBDA (CURSOR PROP) (* kbr%: "26-Apr-85 11:18") (LISTGET (fetch (CURSOR CUDATA) of CURSOR) PROP]) (PUTCURSORPROP [LAMBDA (CURSOR PROP VALUE) (* kbr%: "26-Apr-85 11:18") (PROG (OLDDATA OLDVALUE) (SETQ OLDDATA (fetch (CURSOR CUDATA) of CURSOR)) [COND [OLDDATA (SETQ OLDVALUE (LISTGET OLDDATA PROP)) (COND (VALUE (LISTPUT OLDDATA PROP VALUE)) (OLDVALUE (COND [(EQ (CAR OLDDATA) PROP) (replace (CURSOR CUDATA) of CURSOR with (CDDR (fetch (CURSOR CUDATA) of CURSOR] (T (FOR TAIL ON (CDR OLDDATA) BY (CDDR TAIL) WHEN (EQ (CADR TAIL) PROP) DO (FRPLACD TAIL (CDDDR TAIL)) (RETURN] (VALUE (replace (CURSOR CUDATA) of CURSOR with (LIST PROP VALUE] (RETURN OLDVALUE]) (\CURSORBITSPERPIXEL [LAMBDA (CURSOR NEWBITSPERPIXEL) (* kbr%: "12-May-85 17:15") (* Swap in NEWBITSPERPIXEL IMAGE and MASK, creating them if necessary.  *) (PROG (OLDBITSPERPIXEL OLDIMAGE OLDMASK WHITE BLACK NEWIMAGE NEWMASK) (SETQ OLDBITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of CURSOR)) (COND ((EQ OLDBITSPERPIXEL NEWBITSPERPIXEL) (RETURN))) (* Save OLDIMAGE and OLDMASK.  *) (SETQ OLDIMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (SETQ OLDMASK (fetch (CURSOR CUMASK) of CURSOR)) (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME OLDBITSPERPIXEL) OLDIMAGE) (CURSORPROP CURSOR (\CURSORMASKPROPNAME OLDBITSPERPIXEL) OLDMASK) (* Unsave NEWIMAGE and NEWMASK if possible, otherwise create them.  *) [COND [(SETQ NEWIMAGE (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME NEWBITSPERPIXEL))) (* Use cached NEWIMAGE & NEWMASK.  *) (SETQ NEWMASK (CURSORPROP CURSOR (\CURSORMASKPROPNAME NEWBITSPERPIXEL] (T (* Create NEWIMAGE & NEWMASK.  *) (SETQ WHITE (MASK.1'S 0 NEWBITSPERPIXEL)) (SETQ BLACK 0) (SETQ NEWIMAGE (COLORIZEBITMAP (CURSORPROP CURSOR 'IMAGE1) BLACK WHITE NEWBITSPERPIXEL)) (SETQ NEWMASK (COLORIZEBITMAP (CURSORPROP CURSOR 'MASK1) BLACK WHITE NEWBITSPERPIXEL] (replace (CURSOR CUIMAGE) of CURSOR with NEWIMAGE) (replace (CURSOR CUMASK) of CURSOR with NEWMASK]) (\CURSORIMAGEPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'IMAGE1) (4 'IMAGE4) (8 'IMAGE8) (SHOULDNT]) (\CURSORMASKPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'MASK1) (4 'MASK4) (8 'MASK8) (SHOULDNT]) ) (DEFINEQ (CURSORCREATE [LAMBDA (IMAGE MASK HOTSPOTX HOTSPOTY DATA) (* ; "Edited 10-Jul-92 16:32 by cat") (* ; "Edited 31-Jul-87 10:01 by jds") (* ;; "creates a cursor from a bitmap. HOTSPOTX and HOTSPOTY specify the hotspot.") (* ;; "INVARIANTS: the hot spot X and Y must be in the range 0..(width - 1) and 0..(height - 1), respectively.") (PROG (CURSOR) (COND ((OR (FIXP MASK) (POSITIONP MASK)) (* ;; "If Mask is a fixp then we presume this is the old arg list (bitmap x y). the cursor filepkgtype has been changed to write the new arg list. The other is provided for (dubious) compatibility") (SETQ HOTSPOTY HOTSPOTX) (SETQ HOTSPOTX MASK) (SETQ MASK NIL))) (* ;; "Make sure that the image and mask bitmaps are no larger than the hardware cursor, i.e. 16x16 bits [AR 8916 7/31/87]:") (COND ((OR (IGREATERP (BITMAPWIDTH IMAGE) 16) (IGREATERP (BITMAPHEIGHT IMAGE) 16)) (* ; "IMAGE is too big.") (\ILLEGAL.ARG IMAGE)) ((NOT MASK) (* ; "No mask, so it's OK") ) ((OR (IGREATERP (BITMAPWIDTH MASK) 16) (IGREATERP (BITMAPHEIGHT MASK) 16)) (* ; "MASK is too big.") (\ILLEGAL.ARG MASK))) [COND ((POSITIONP HOTSPOTX) (* ;;  "The hot spot can be specified as a position in one arg, rather than X and Y in two:") (SETQ HOTSPOTY (fetch (POSITION YCOORD) of HOTSPOTX)) (SETQ HOTSPOTX (fetch (POSITION XCOORD) of HOTSPOTX] (SETQ CURSOR (create CURSOR CUIMAGE _ IMAGE CUMASK _ (OR MASK IMAGE) CUHOTSPOTX _ (IMAX 0 (IMIN (SUB1 (BITMAPWIDTH IMAGE)) (OR (FIXP HOTSPOTX) 0))) CUHOTSPOTY _ [IMAX 0 (IMIN (SUB1 (BITMAPHEIGHT IMAGE)) (OR (FIXP HOTSPOTY) (SUB1 (BITMAPHEIGHT IMAGE] CUDATA _ DATA)) (RETURN CURSOR]) (CURSOR [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 24-Mar-87 18:30 by jds") (* ;; "Installs NEWCURSOR as the cursor and returns the old cursor state. If INVERTFLG is non-NIL, the cursor image is inverted during installation. If NEWCURSOR is NIL, just returns the current cursor state.") (DECLARE (GLOBALVARS DEFAULTCURSOR \SOFTCURSORP)) (PROG (OLDCURSOR) (SETQ OLDCURSOR \CURRENTCURSOR) (COND ((EQ NEWCURSOR T) (* ;  "If NEWCURSOR is T, use the system default cursor.") (SETQ NEWCURSOR DEFAULTCURSOR))) (COND [(\CURSOR-VALID-P NEWCURSOR \SOFTCURSORP) (* ;  "Only install the cursor if it's a real, valid one.") (\CURSORDOWN) (\CURSORUP NEWCURSOR INVERTFLG) (* ;  "set after adjustment to avoid confusion about hotspot during adjustment.") (SETQ \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (SETQ \CURSORHOTSPOTY (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR] (NEWCURSOR (* ; "NEWCURSOR = NIL means just return the old one, so only error if one got specified that wasn't valid.") (\ILLEGAL.ARG NEWCURSOR))) (RETURN OLDCURSOR]) (\CURSOR-VALID-P [LAMBDA (CURSOR SOFT?) (* ; "Edited 25-Mar-87 09:41 by jds") (* ;; "It returns T if CURSOR is a valid cursor. Validity depends on whether it's meant to be displayed using the cursor hardware or the cursor software.") (* ;; "This is really wed to the D-machine display architecture. ") (AND (CURSORP CURSOR) (COND (SOFT? T) (T (LET ((IMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (HOTSPOT-X (fetch (CURSOR CUHOTSPOTX) of CURSOR)) (HOTSPOT-Y (fetch (CURSOR CUHOTSPOTY) of CURSOR))) (* ;; "The bitmap must be <= 16x16, and the hot spot must be within the cursor if we're using hardware cursor.") (AND (>= 16 (BITMAPWIDTH IMAGE)) (>= 16 (BITMAPHEIGHT IMAGE)) (<= 0 HOTSPOT-X) (< HOTSPOT-X 16) (<= 0 HOTSPOT-Y) (< HOTSPOT-Y 16]) (\CURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* kbr%: "18-Aug-85 14:38") (UNINTERRUPTABLY (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (COND ((AND (EQ (fetch (CURSOR CUIMAGE) of NEWCURSOR) (fetch (CURSOR CUMASK) of NEWCURSOR)) (ILEQ (fetch (BITMAP BITMAPWIDTH) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORWIDTH) (ILEQ (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORHEIGHT) (EQ \CURSORDESTINATION ScreenBitMap)) (\HARDCURSORUP NEWCURSOR INVERTFLG)) (T (\SOFTCURSORUP NEWCURSOR))) (ADJUSTCURSORPOSITION (IDIFFERENCE \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (IDIFFERENCE (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR)) \CURSORHOTSPOTY)))]) (\CURSORPOSITION [LAMBDA (XPOS YPOS) (* ; "Edited 19-Mar-98 14:41 by jds") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND (NIL (* ;; "Removed 2000/1/3 JDS so mousr cursors work.") (ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND (NIL (ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (COND (\SOFTCURSORP (\SOFTCURSORPOSITION XPOS YPOS))) [PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Need to notify DAYBREAK IOP to  move cursor. *) (\DoveDisplay.SetCursorPosition XPOS YPOS] NIL]) (\CURSORDOWN [LAMBDA NIL (* kbr%: "12-Jun-85 17:21") (UNINTERRUPTABLY (COND (\SOFTCURSORP (\SOFTCURSORDOWN)) (T (\HARDCURSORDOWN))))]) (ADJUSTCURSORPOSITION [LAMBDA (DELTAX DELTAY) (* kbr%: " 6-Jan-86 11:55") (COND [(POSITIONP DELTAX) (\CURSORPOSITION (IPLUS (fetch (POSITION XCOORD) of DELTAX) (\XMOUSECOORD)) (IPLUS (fetch (POSITION YCOORD) of DELTAX) (\YMOUSECOORD] (T (\CURSORPOSITION (IPLUS (OR DELTAX 0) (\XMOUSECOORD)) (IPLUS (OR DELTAY 0) (\YMOUSECOORD]) (CURSORPOSITION [LAMBDA (NEWPOSITION DISPLAYSTREAM OLDPOSITION) (* kbr%: "13-Feb-86 15:53") (PROG (DD) (SETQ DD (\GETDISPLAYDATA DISPLAYSTREAM)) (OR (type? POSITION OLDPOSITION) (SETQ OLDPOSITION (create POSITION))) (freplace (POSITION XCOORD) of OLDPOSITION with (\DSPUNTRANSFORMX (\XMOUSECOORD ) DD)) (freplace (POSITION YCOORD) of OLDPOSITION with (\DSPUNTRANSFORMY (\YMOUSECOORD ) DD)) (COND ((type? POSITION NEWPOSITION) (\CURSORPOSITION (\DSPTRANSFORMX (fetch (POSITION XCOORD) of NEWPOSITION) DD) (\DSPTRANSFORMY (fetch (POSITION YCOORD) of NEWPOSITION) DD))) ((type? SCREENPOSITION NEWPOSITION) (CURSORSCREEN (fetch (SCREENPOSITION SCREEN) of NEWPOSITION) (fetch (SCREENPOSITION XCOORD) of NEWPOSITION) (fetch (SCREENPOSITION YCOORD) of NEWPOSITION))) (NEWPOSITION (\ILLEGAL.ARG NEWPOSITION))) (RETURN OLDPOSITION]) (CURSORSCREEN [LAMBDA (SCREEN XCOORD YCOORD) (* gbn%: "25-Jan-86 16:53") (* * sets up SCREEN to be the current screen, XCOORD %, YCOORD is initial pos  of cursor on SCREEN) (COND ((NULL XCOORD) (SETQ XCOORD 0))) (COND ((NULL YCOORD) (SETQ YCOORD 0))) (PROG (DESTINATION) (SETQ DESTINATION (fetch (SCREEN SCDESTINATION) of SCREEN)) (\CURSORDOWN) (SETQ \CURSORSCREEN SCREEN) (\CURSORDESTINATION DESTINATION) (\CURSORUP \CURRENTCURSOR) (\CURSORPOSITION XCOORD YCOORD]) (CURSOREXIT [LAMBDA NIL (* gbn%: "25-Jan-86 16:52") (* * called when cursor moves off the screen edge) (DECLARE (GLOBALVARS LASTSCREEN LASTMOUSEX LASTMOUSEY)) (PROG (SCREEN XCOORD YCOORD SCREEN2 XCOORD2 YCOORD2) (SETQ SCREEN LASTSCREEN) (SETQ XCOORD LASTMOUSEX) (SETQ YCOORD LASTMOUSEY) (SETQ SCREEN2 (COND ((EQ SCREEN \MAINSCREEN) \COLORSCREEN) (T \MAINSCREEN))) (* generalize for more than two  screens (or alternate physical  arrangement of screens.)) (COND ((EQ XCOORD 0) (SETQ XCOORD2 (IDIFFERENCE (fetch (SCREEN SCWIDTH) of SCREEN2) 2))) ((EQ XCOORD (SUB1 (fetch (SCREEN SCWIDTH) of SCREEN))) (SETQ XCOORD2 1)) (T (RETURN))) [SETQ YCOORD2 (IQUOTIENT (ITIMES YCOORD (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN2)) ) (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN] (CURSORSCREEN SCREEN2 XCOORD2 YCOORD2]) (FLIPCURSOR +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "12-Feb-2021 19:16:08" {DSK}larry>ilisp>medley>sources>LLKEY.;7 201254 changes to%: (RESOURCES \KEYBOARDWAITBOX) (VARS LLKEYCOMS ALLUP \CTRLMASK \METABIT DLMOUSEBITS DLMOUSESTATES TRANSITIONFLAGS ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF \NKEYS NRINGINDEXWORDS) (RECORDS KEYACTION RING SHIFTSTATE) (MACROS \GETREALSYSBUF .NOTELASTUSERACTION \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF \PUTSYSBUF \PEEKSYSBUF \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) previous date%: "19-May-2018 13:32:12" {DSK}larry>ilisp>medley>sources>LLKEY.;6) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1992, 1999, 1920, 2000, 2018, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT LLKEYCOMS) (RPAQQ LLKEYCOMS [(COMS (* ; "Access to keyboard") (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF \PUTSYSBUF \PEEKSYSBUF) (INITVARS (\LONGSYSBUF)) (INITVARS (\\KEYBOARDWAITBOX.GLOBALRESOURCE)) (DECLARE%: DONTCOPY (RESOURCES \KEYBOARDWAITBOX)) (DECLARE%: DONTCOPY (CONSTANTS (\SYSBUFSIZE 200)) (MACROS \GETREALSYSBUF))) [DECLARE%: DOCOPY DONTEVAL@LOAD (COMS (* ;  "Here because it must be done in init before PROC loaded") (P (MOVD? 'NILL 'CARET] (COMS (* ; "Key handler") (FNS \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) (INITVARS (\MOUSECHORDTICKS) (\MOUSECHORDMILLISECONDS 50)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\KEYBOARDINIT))) [DECLARE%: DONTCOPY (MACROS .NOTELASTUSERACTION) (CONSTANTS ALLUP \CTRLMASK \METABIT) (CONSTANTS * DLMOUSEBITS) (CONSTANTS * DLMOUSESTATES) (CONSTANTS * TRANSITIONFLAGS) (MACROS \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) (EXPORT (RECORDS KEYACTION) (CONSTANTS \NKEYS)) (RECORDS RING) (COMS (* ;  "can get rid of shiftstate after clients have been fixed") (RECORDS SHIFTSTATE) (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP)) (CONSTANTS NRINGINDEXWORDS) (CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] (DECLARE%: EVAL@COMPILE (VARS \KEYNAMES)) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun.") (VARS \ORIGKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DORADOKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS \MAIKOKEYACTIONS \MAIKOKEYACTIONST4 \MAIKO-JLE-KEYACTIONS \TOSHIBA-KEYACTIONS) (VARS (KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL)) (INITVARS (\KEYBOARD.META 256) (\MODIFIED.KEYACTIONS)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) )) (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (COMS (* ; "Key interpretation") (FNS KEYACTION KEYACTIONTABLE KEYBOARDTYPE RESETKEYACTION \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS \KEYACTION1 KEYDOWNP KEYNUMBERP \KEYNAMETONUMBER MODIFY.KEYACTIONS METASHIFT SHIFTDOWNP) (* ;  "To support office style 1108 & 1186 keyboards") (FNS SETUP.OFFICE.KEYBOARD) (OPTIMIZERS) (MACROS \TEMPCOPYTIMER) (* ;  "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (EXPORT (OPTIMIZERS KEYDOWNP))) (EXPORT (MACROS XKEYDOWNP KEYDOWNP1 \NEWKEYDOWNP))) (COMS (* ; "A raw keyboard device/stream") (FNS \INIT.KEYBOARD.STREAM) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\INIT.KEYBOARD.STREAM))) (EXPORT (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM))) (COMS (* ; "Hook for a periodic interrupt") (FNS \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \PERIODIC.INTERRUPTFRAME) (INITVARS (\KEYBUFFERING) (\PERIODIC.INTERRUPT) (\TIMER.INTERRUPT.PENDING) (\PERIODIC.INTERRUPT.FREQUENCY 77))) (LOCALVARS . T) [COMS (* ;  "cursor and mouse related functions.") (FNS \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN) (FNS CURSOR.INIT \CURSORDESTINATION \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN CURSORPROP GETCURSORPROP PUTCURSORPROP \CURSORBITSPERPIXEL \CURSORIMAGEPROPNAME \CURSORMASKPROPNAME) (FNS CURSORCREATE CURSOR \CURSOR-VALID-P \CURSORUP \CURSORPOSITION \CURSORDOWN ADJUSTCURSORPOSITION CURSORPOSITION CURSORSCREEN CURSOREXIT FLIPCURSOR FLIPCURSORBAR LASTMOUSEX LASTMOUSEY CREATEPOSITION POSITIONP CURSORHOTSPOT) (PROPS (CURSORPROP ARGNAMES)) (INITVARS (\CURSORHOTSPOTX 0) (\CURSORHOTSPOTY 0) (\CURRENTCURSOR NIL) (\SOFTCURSORWIDTH NIL) (\SOFTCURSORHEIGHT NIL) (\SOFTCURSORP NIL) (\SOFTCURSORUPP NIL) (\SOFTCURSORUPBM NIL) (\SOFTCURSORDOWNBM NIL) (\SOFTCURSORBBT1 NIL) (\SOFTCURSORBBT2 NIL) (\SOFTCURSORBBT3 NIL) (\SOFTCURSORBBT4 NIL) (\SOFTCURSORBBT5 NIL) (\SOFTCURSORBBT6 NIL) (\CURSORSCREEN NIL) (\CURSORDESTINATION NIL) (\CURSORDESTHEIGHT 808) (\CURSORDESTWIDTH 1024) (\CURSORDESTRASTERWIDTH 64) (\CURSORDESTLINE 0) (\CURSORDESTLINEBASE NIL)) (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) (FNS GETMOUSESTATE \EVENTKEYS) [EXPORT (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD] (DECLARE%: DONTCOPY (EXPORT (MACROS \SETMOUSEXY)) (MACROS \XMOUSECOORD \YMOUSECOORD)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION)) (VARS (\SFPosition (CREATEPOSITION] [COMS (DECLARE%: DONTCOPY (RECORDS KEYBOARDEVENT) (CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] (COMS (FNS MACHINETYPE SETMAINTPANEL) (* ; "DLion beeper") (FNS BEEPON BEEPOFF)) (EXPORT (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)) (FNS WITHOUT-INTERRUPTS) (COMS (* ;  "Compile locked fns together for locality") (BLOCKS (NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN))) [DECLARE%: DONTCOPY (ADDVARS [INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND ] (RDCOMS (FNS \SETIOPOINTERS] (PROP FILETYPE LLKEY) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML WITHOUT-INTERRUPTS ) (LAMA CURSORPROP METASHIFT MOUSECHORDWAIT]) (* ; "Access to keyboard") (DEFINEQ (BKSYSCHARCODE [LAMBDA (CHAR) (* rrb "30-Dec-83 11:56") (OR (\PUTSYSBUF CHAR) (PROGN (SETQ \LONGSYSBUF (NCONC \LONGSYSBUF (bind C while (SETQ C (\GETREALSYSBUF)) collect C))) (\PUTSYSBUF CHAR]) (\CLEARSYSBUF [LAMBDA (ALLFLG) (* mpl "27-Jun-85 20:04") (DECLARE (GLOBALVARS \PROCESSES)) (COND ((OR ALLFLG (TTY.PROCESSP)) (SETQ \LONGSYSBUF) (replace (RING READ) of \SYSBUFFER with 0))) (COND (ALLFLG (for PROC in \PROCESSES do (replace PROCTYPEAHEAD of PROC with NIL))) ((THIS.PROCESS) (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL]) (\GETKEY [LAMBDA NIL (* lmm "18-Apr-85 00:07") (DECLARE (GLOBALVARS \KEYBOARDWAIT1 \KEYBOARDWAIT2)) (COND [(AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS))) (pop (fetch PROCTYPEAHEAD of (THIS.PROCESS] (T (WAIT.FOR.TTY) (OR (\GETSYSBUF) (GLOBALRESOURCE (\KEYBOARDWAITBOX) (* Busy-wait loop that gets next  character) (\CLOCK0 \KEYBOARDWAITBOX) (bind C do (COND ((SETQ C (\GETSYSBUF)) (\BOXIPLUS (LOCF (fetch KEYBOARDWAITTIME of \MISCSTATS)) (CLOCKDIFFERENCE \KEYBOARDWAITBOX)) (RETURN C))) (\TTYBACKGROUND) (\WAIT.FOR.TTY]) (\NSYSBUFCHARS [LAMBDA NIL (* JonL " 7-May-84 01:50") (* Tells how many characters can be  \GETSYSBUFed. Used by \SAVESYSBUF.) (IPLUS (LENGTH \LONGSYSBUF) (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ 0 R) 0) ((IGREATERP W R) (IDIFFERENCE W R)) (T (IDIFFERENCE W (IDIFFERENCE R \SYSBUFSIZE]) (\SAVESYSBUF [LAMBDA NIL (* JonL " 7-May-84 01:50") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (PROG (TA (BUF \SAVEDSYSBUFFER) (NC (\NSYSBUFCHARS)) (J 0)) [COND ((TTY.PROCESSP) [COND ([AND (THIS.PROCESS) (SETQ TA (fetch PROCTYPEAHEAD of (THIS.PROCESS] (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL) (add NC (LENGTH TA)) [COND ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for CH in TA do (RPLCHARCODE BUF (add J 1) CH))) ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for I from (ADD1 J) to NC do (* Test on J means that we'll ignore extra chars typed since we got the length.  Test on \GETSYSBUF so we don't get screwed if buffer gets cleared while during  this loop) (RPLCHARCODE BUF I (OR (\GETSYSBUF) (PROGN (SETQ NC (SUB1 I)) (RETURN] (RETURN (AND (NOT (EQ 0 NC)) (SUBSTRING BUF 1 NC]) (\SYSBUFP [LAMBDA NIL (* JonL " 7-May-84 01:52") (OR [AND (TTY.PROCESSP) (OR \LONGSYSBUF (NOT (EQ 0 (fetch (RING READ) of \SYSBUFFER] (AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS]) (\GETSYSBUF [LAMBDA NIL (* lmm " 9-JUL-83 00:56") (OR (AND \LONGSYSBUF (pop \LONGSYSBUF)) (\GETREALSYSBUF]) (\PUTSYSBUF [LAMBDA (CHAR) (* rmk%: "27-Nov-84 17:51") (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ R W) (* Full) NIL) (T (\PUTBASEFAT \SYSBUFFER W CHAR) (AND (EQ 0 R) (replace (RING READ) of \SYSBUFFER with W)) (* Return random non-NIL value to  indicate success for BKSYSBUF) [replace (RING WRITE) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST W) \SYSBUFFER.FIRST) (T (ADD1 W] T]) (\PEEKSYSBUF [LAMBDA (STREAM) (* bvm%: " 8-Feb-85 17:50") (PROG (R) WAIT (until (\SYSBUFP) do (BLOCK)) (RETURN (if (TTY.PROCESSP) then (if \LONGSYSBUF then (CAR \LONGSYSBUF) elseif (NEQ (SETQ R (fetch (RING READ) of \SYSBUFFER)) 0) then (* Here's the vanilla case) (\GETBASEFAT \SYSBUFFER R) else (* Foo an interrupt could have  sneaked in here and gobbled down the  remaining characters) (GO WAIT)) elseif (THIS.PROCESS) then (CAR (fetch PROCTYPEAHEAD of (THIS.PROCESS))) else (SHOULDNT]) ) (RPAQ? \LONGSYSBUF ) (RPAQ? \\KEYBOARDWAITBOX.GLOBALRESOURCE ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE [PUTDEF '\KEYBOARDWAITBOX 'RESOURCES '(NEW (CREATECELL \FIXP] ) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (RPAQQ \SYSBUFSIZE 200) (CONSTANTS (\SYSBUFSIZE 200)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \GETREALSYSBUF MACRO [NIL (PROG ((R (fetch (RING READ) of \SYSBUFFER))) (RETURN (AND (NOT (EQ 0 R)) (PROG1 (\GETBASEFAT \SYSBUFFER R) (AND [EQ (fetch (RING WRITE) of \SYSBUFFER) (replace (RING READ) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST R) \SYSBUFFER.FIRST) (T (ADD1 R] (replace (RING READ) of \SYSBUFFER with 0)))]) ) ) (DECLARE%: DOCOPY DONTEVAL@LOAD (* ; "Here because it must be done in init before PROC loaded") (MOVD? 'NILL 'CARET) ) (* ; "Key handler") (DEFINEQ (\KEYBOARDINIT [LAMBDA NIL (* ; "Edited 19-Nov-87 16:46 by Snow") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (* ;  "Sets up keyboard decoding tables.") (SETQ \CURRENTKEYACTION (SETQ \DEFAULTKEYACTION (KEYACTIONTABLE))) (* ;  "added \commandkeyaction 11-19-87 WAS") (SETQ \COMMANDKEYACTION (KEYACTIONTABLE)) (SETQ \INTERRUPTSTATE (\ALLOCLOCKED 2)) (PROGN (SETQ \SYSBUFFER (\ALLOCBLOCK (FOLDHI (ADD1 \SYSBUFFER.LAST) WORDSPERCELL))) (replace (RING READ) of \SYSBUFFER with 0) (replace (RING WRITE) of \SYSBUFFER with \SYSBUFFER.FIRST)) (SETQ \SAVEDSYSBUFFER (ALLOCSTRING \SYSBUFSIZE NIL NIL T)) (SETQ \LASTUSERACTION (LOCF (fetch LASTUSERACTION of \MISCSTATS))) (PROGN (SETQ \KEYBOARDEVENTQUEUE (\ALLOCLOCKED (FOLDHI (PLUS \KEYBOARDEVENT.LAST \KEYBOARDEVENT.SIZE) WORDSPERCELL))) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with \KEYBOARDEVENT.FIRST)) (SETQ \LASTKEYSTATE (create KEYBOARDEVENT)) (SETQ \SHIFTSTATE (create SHIFTSTATE)) (SETQ \MOUSETIMERTEMP (SETUPTIMER 0 NIL 'TICKS)) (MOUSECHORDWAIT \MOUSECHORDMILLISECONDS) (\KEYBOARDON]) (\KEYBOARDEVENTFN [LAMBDA (FDEV EVENT EXTRA) (* ; "Edited 11-Oct-90 09:49 by jds") (DECLARE (GLOBALVARS \KEYBOARD.BEFORETYPE \DORADOKEYACTIONS \DLIONKEYACTIONS \MAIKO.BEFOREKEYTYPE)) (SELECTQ EVENT ((BEFORELOGOUT BEFOREMAKESYS BEFORESYSOUT BEFORESAVEVM) (SETQ \KEYBOARD.BEFORETYPE \MACHINETYPE) (SETQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (SETQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) ((AFTERLOGOUT AFTERMAKESYS AFTERSYSOUT AFTERSAVEVM) (* ;  "Restarting a world. If we changed machines, fix up the key actions to match the new machine.") (* ; "(COND ((NEQ \\MACHINETYPE \\KEYBOARD.BEFORETYPE) ; Changed machines. Change Keyactions. (|for| X |in| (\\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) |do| (KEYACTION (CAR X) (CDR X) \\COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \\DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT))))") [COND ((OR (NEQ \MACHINETYPE \KEYBOARD.BEFORETYPE) (NEQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) (* ;  "Changed machines. Change Keyactions.") [COND ((NEQ (MACHINETYPE) 'MAIKO) (* ;; "Non-SUN, so just change machine-specific key actions:") (for X in (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION))) (T (* ;;  "On a SUN: Some keyactions contradict %"normal%" ones, so reset them all.") (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION] (MOUSECHORDWAIT (MOUSECHORDWAIT))) ((EQ (MACHINETYPE) 'MAIKO) (* ;; "Same machine type. SO only worry if we're on SUNs, where the keyboard type can differ between machines.") (COND ((NEQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT]) NIL]) (\ALLOCLOCKED [LAMBDA (NCELLS) (* lmm "20-Apr-85 13:08") (* allocate a block of NCELLS cells  and lock it) (PROG [(BLOCK (\ALLOCBLOCK NCELLS NIL (IMIN NCELLS CELLSPERPAGE] (\LOCKCELL BLOCK (FOLDHI (IPLUS (fetch (POINTER WORDINPAGE) of BLOCK) (UNFOLD NCELLS WORDSPERCELL)) WORDSPERPAGE)) (RETURN BLOCK]) (\SETIOPOINTERS [LAMBDA NIL (* ;  "Edited 28-Apr-88 01:10 by MASINTER") (SELECTC (SETTOPVAL '\MACHINETYPE (fetch MachineType of \InterfacePage)) ((LIST \DOLPHIN \DORADO) (SETTOPVAL '\EM.MOUSEX (EMADDRESS MOUSEX.EM)) (SETTOPVAL '\EM.MOUSEY (EMADDRESS MOUSEY.EM)) (SETTOPVAL '\EM.CURSORX (EMADDRESS CURSORX.EM)) (SETTOPVAL '\EM.CURSORY (EMADDRESS CURSORY.EM)) (SETTOPVAL '\EM.REALUTILIN (EMADDRESS UTILIN.EM)) (SETTOPVAL '\EM.KBDAD0 (EMADDRESS KBDAD0.EM)) (SETTOPVAL '\EM.KBDAD1 (EMADDRESS KBDAD1.EM)) (SETTOPVAL '\EM.KBDAD2 (EMADDRESS KBDAD2.EM)) (SETTOPVAL '\EM.KBDAD3 (EMADDRESS KBDAD3.EM)) (SETTOPVAL '\EM.KBDAD4 (LOCF (fetch FAKEKBDAD4 of \InterfacePage))) (\PUTBASE \EM.KBDAD4 0 ALLUP) (SETTOPVAL '\EM.KBDAD5 (LOCF (fetch FAKEKBDAD5 OF \InterfacePage))) (\PUTBASE \EM.KBDAD5 0 ALLUP) (SETTOPVAL '\EM.DISPINTERRUPT (EMADDRESS DISPINTERRUPT.EM)) (SETTOPVAL '\EM.CURSORBITMAP (EMADDRESS CURSORBITMAP.EM)) (SETTOPVAL '\EM.DISPLAYHEAD (EMADDRESS DCB.EM)) (SETTOPVAL 'SCREENWIDTH (UNFOLD (fetch ScreenWidth of \InterfacePage) BITSPERWORD))) ((LIST \DANDELION \MAIKO) (SETTOPVAL '\EM.MOUSEX (fetch DLMOUSEXPTR of \IOPAGE)) (SETTOPVAL '\EM.MOUSEY (fetch DLMOUSEYPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN (fetch DLUTILINPTR of \IOPAGE)) (* ;; "Where the hardware bits live, vs. where the Lisp software sees them after reinterpretation by keyhandler") ) (SETTOPVAL '\EM.KBDAD0 (fetch DLKBDAD0PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD1 (fetch DLKBDAD1PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD2 (fetch DLKBDAD2PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD3 (fetch DLKBDAD3PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD4 (fetch DLKBDAD4PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD5 (fetch DLKBDAD5PTR of \IOPAGE)) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORBITMAP (fetch DLCURSORBITMAPPTR of \IOPAGE)) (SETTOPVAL '\EM.DISPLAYHEAD NIL) (SETTOPVAL 'SCREENWIDTH (SELECTC \MACHINETYPE (\MAIKO (SUBRCALL DSP-SCREENWIDTH)) 1024))) (\DAYBREAK (PROG ((KBDBASE (\DoveMisc.GetKBDBase))) (SETTOPVAL '\EM.KBDAD0 (\ADDBASE KBDBASE 1)) (SETTOPVAL '\EM.KBDAD1 (\ADDBASE KBDBASE 2)) (SETTOPVAL '\EM.KBDAD2 (\ADDBASE KBDBASE 3)) (SETTOPVAL '\EM.KBDAD3 (\ADDBASE KBDBASE 4)) (SETTOPVAL '\EM.KBDAD4 (\ADDBASE KBDBASE 5)) (SETTOPVAL '\EM.KBDAD5 (\ADDBASE KBDBASE 6)) (SETTOPVAL '\EM.MOUSEX (\DoveMisc.GetMouseXBase)) (SETTOPVAL '\EM.MOUSEY (\DoveMisc.GetMouseYBase)) (SETTOPVAL '\EM.CURSORBITMAP (\DoveDisplay.GetCursorBitmapBase)) (* These three set this way to  prevent address faults) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN KBDBASE) (* Where the hardware bits live, vs. where the Lisp software sees them after  reinterpretation by keyhandler) ) (SETTOPVAL 'SCREENWIDTH (\DoveDisplay.ScreenWidth)))) (RAID)) (SETTOPVAL '\EM.UTILIN (LOCF (fetch (IFPAGE FAKEMOUSEBITS) of \InterfacePage]) (\KEYBOARDOFF [LAMBDA NIL (* ;  "Edited 20-Apr-88 10:28 by MASINTER") (\PUTBASE \EM.DISPINTERRUPT 0 (LOGAND (LOGXOR 65535 \LispKeyMask) (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE NIL]) (\KEYBOARDON [LAMBDA (NOCHECK) (* ;  "Edited 24-Apr-88 00:03 by MASINTER") (\SETIOPOINTERS) (\PUTBASE \EM.DISPINTERRUPT 0 (LOGOR \LispKeyMask (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE T]) (\KEYHANDLER [LAMBDA NIL (* lmm "30-MAR-83 20:40") (\KEYHANDLER1]) (\KEYHANDLER1 [LAMBDA NIL (* ; "Edited 30-Mar-88 10:40 by Snow") (PROG ((OLD0 ALLUP) (OLD1 ALLUP) (OLD2 ALLUP) (OLD3 ALLUP) (OLD4 ALLUP) (OLD5 ALLUP) (OLDU ALLUP) (OLDFAKEU ALLUP) (LOOPCNT 10) (PERIODCNT 60) (MOUSESTATE \DLMOUSE.UP) (MOUSETIMER (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) (MOUSETEMP (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) CURSORX CURSORY YHOT) (SETQ \KEYBUFFERING NIL) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) LP (\CONTEXTSWITCH \KbdFXP) [COND (\PERIODIC.INTERRUPT (* eventually can be replaced with  general timer mechanism) (COND ((IGREATERP PERIODCNT 0) (* Continue counting down to zero) (SETQ PERIODCNT (SUB1 PERIODCNT))) ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \PERIODIC.INTERRUPTFRAME)) (* When we've counted down, then keep trying to cause the interrupt, and reset  the counter when it finally happens) (SETQ PERIODCNT (SUB1 (OR \PERIODIC.INTERRUPT.FREQUENCY 1] [COND ((OR (NEQ (\GETBASE \EM.MOUSEX 0) CURSORX) (NEQ (\GETBASE \EM.MOUSEY 0) CURSORY)) (\TRACKCURSOR (SETQ CURSORX (\GETBASE \EM.MOUSEX 0)) (SETQ CURSORY (\GETBASE \EM.MOUSEY 0] [COND ((OR [COND ((OR (NEQ OLDU (\GETBASE \EM.REALUTILIN 0)) (COND ((AND (EQ MOUSESTATE \DLMOUSE.WAITING) (IGREATERP (\BOXIDIFFERENCE (\RCLK MOUSETEMP) MOUSETIMER) 0)) (* Timer expired on seeing both left  and right down, so set state to  normal) (SETQ MOUSESTATE \DLMOUSE.NORMAL) T))) (SETQ MOUSESTATE (\DOMOUSECHORDING (SETQ OLDU (\GETBASE \EM.REALUTILIN 0)) MOUSESTATE)) (NEQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (NEQ OLD0 (\GETBASE \EM.KBDAD0 0)) (NEQ OLD1 (\GETBASE \EM.KBDAD1 0)) (NEQ OLD2 (\GETBASE \EM.KBDAD2 0)) (NEQ OLD3 (\GETBASE \EM.KBDAD3 0)) (NEQ OLD4 (\GETBASE \EM.KBDAD4 0)) (NEQ OLD5 (\GETBASE \EM.KBDAD5 0))) (COND ((EQ 0 (LOGAND (\GETBASE \EM.KBDAD2 0) 2114)) (* Ctrl-shift-DEL panic interrupt --  switch to TeleRaid immediately) (swap (fetch (IFPAGE TELERAIDFXP) of \InterfacePage) (fetch (IFPAGE KbdFXP) of \InterfacePage)) (\KEYBOARDOFF) (SETQ OLD2 (\GETBASE \EM.KBDAD2 0)) (GO LP))) [PROG ((W (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE)) (R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) WPTR) (COND ((EQ R W) (* eventqueue full!) (RETURN))) (SETQ WPTR (\ADDBASE \KEYBOARDEVENTQUEUE W)) (\RCLK (LOCF (fetch TIME of WPTR))) [with KEYBOARDEVENT WPTR (PROGN (SETQ W0 (SETQ OLD0 (\GETBASE \EM.KBDAD0 0))) (SETQ W1 (SETQ OLD1 (\GETBASE \EM.KBDAD1 0))) (SETQ W2 (SETQ OLD2 (\GETBASE \EM.KBDAD2 0))) (SETQ W3 (SETQ OLD3 (\GETBASE \EM.KBDAD3 0))) (SETQ W4 (SETQ OLD4 (\GETBASE \EM.KBDAD4 0))) (SETQ W5 (SETQ OLD5 (\GETBASE \EM.KBDAD5 0))) (SETQ WU (SETQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (COND ((EQ R 0) (* Queue was empty) (replace (RING READ) of \KEYBOARDEVENTQUEUE with W))) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ W \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS W \KEYBOARDEVENT.SIZE] (OR \KEYBUFFERING (SETQ \KEYBUFFERING T] [COND [\KEYBUFFERING (COND ((EQ \KEYBUFFERING T) (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \DOBUFFEREDTRANSITIONS)) (SETQ \KEYBUFFERING 'STARTED) (* don't call until  \DOBUFFEREDTRANSITIONS is done) ] (T (COND (\PENDINGINTERRUPT (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \INTERRUPTFRAME)) (SETQ \PENDINGINTERRUPT] [COND ((AND (NEQ \MACHINETYPE \MAIKO) (ILEQ (SETQ LOOPCNT (SUB1 LOOPCNT)) 0)) (* Only do this once in a while) (SETQ LOOPCNT (COND ((\UPDATETIMERS) (* Timer was updated, so do it next time around, too, in case we just came back  from RAID or other bcpl code) 1) (T 20] (COND ([AND NIL \TIMER.INTERRUPT.PENDING (IGREATERP (\BOXIDIFFERENCE (\RCLK (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) 0) (COND ((EQ \TIMER.INTERRUPT.PENDING '\MOUSECHANGE) (SETQ OLDU NIL) T) (T (\CAUSEINTERRUPT \KbdFXP (FUNCTION \TIMER.INTERRUPTFRAME] (SETQ \TIMER.INTERRUPT.PENDING))) (GO LP]) (\RESETKEYBOARD [LAMBDA NIL (* ; "Edited 30-Mar-88 10:07 by Snow") (\SETIOPOINTERS) (* Called with lisp keyboard  disabled whenever Lisp is resumed  from bcpl logout or copysys.) (SETQ \KEYBUFFERING NIL) (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK) (EQ \MACHINETYPE \MAIKO)) (* Initialize fake mouse bits to all  up) (\PUTBASE \EM.UTILIN 0 ALLUP))) (with KEYBOARDEVENT \LASTKEYSTATE (SETQ W0 (\GETBASE \EM.KBDAD0 0)) (SETQ W1 (\GETBASE \EM.KBDAD1 0)) (SETQ W2 (\GETBASE \EM.KBDAD2 0)) (SETQ W3 (\GETBASE \EM.KBDAD3 0)) (SETQ W4 (\GETBASE \EM.KBDAD4 0)) (SETQ W5 (\GETBASE \EM.KBDAD5 0)) (SETQ WU (\GETBASE \EM.REALUTILIN 0)) (SETQ LOCK (XKEYDOWNP 'LOCK)) (SETQ 1SHIFT NIL) (SETQ 2SHIFT NIL) (SETQ CTRL NIL) (SETQ META NIL) (SETQ FONT NIL) (SETQ USERMODE1 NIL) (SETQ USERMODE2 NIL) (SETQ USERMODE3 NIL) (SETQ MOUSESTATE \DLMOUSE.UP)) (SETQ \TIMER.INTERRUPT.PENDING) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING READ) of \SYSBUFFER with 0) (SETQ \LONGSYSBUF) (\DAYTIME0 \LASTUSERACTION) (\KEYBOARDON]) (\DOMOUSECHORDING [LAMBDA (REALUTILIN STATE) (* bvm%: " 9-Oct-85 11:24") (* Handles mouse transitions on a DLion.  REALUTILIN is the actual util word from the processor.  STATE is our internal state. Sets contents of \EM.UTILIN to reflect the virtual  mouse state, which may contain a middle mouse button even where there is only a  two-button mouse. Returns new state) (PROG (LRSTATE) [COND ((OR (NULL \MOUSECHORDTICKS) (EQ (SETQ LRSTATE (LOGXOR (LOGAND REALUTILIN \MOUSE.ALLBITS) \MOUSE.ALLBITS)) 0)) (* Not interpreting chording, or both LEFT and RIGHT are up --  real state and virtual state the same) (SETQ STATE \DLMOUSE.UP)) (T (* Either L or R or both are down,  so have to decide about Middle) (SELECTC STATE ((LIST \DLMOUSE.UP \DLMOUSE.WAITING) (SETQ REALUTILIN (LOGOR REALUTILIN \MOUSE.LRBIT)) (* Turn off the L and/or R bits) (COND ((EQ LRSTATE \MOUSE.LRBIT) (* Both L and R down at once,  interpret as MIDDLE without waiting) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) REALUTILIN)) (SETQ STATE \DLMOUSE.MIDDLE)) ((NEQ STATE \DLMOUSE.WAITING) (* Only one of L and R down. Set timer, and ignore the down bit for now) (\BOXIPLUS (\RCLK (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) \MOUSECHORDTICKS) (SETQ STATE \DLMOUSE.WAITING)))) (\DLMOUSE.MIDDLE (* State is middle and at least one of L and R is still down, so consider it to  be still only middle) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LRBIT))) (SELECTC LRSTATE (\MOUSE.LEFTBIT (* Right came up. Henceforth treat  right transparently) (SETQ STATE \DLMOUSE.MIDDLE&RIGHT)) (\MOUSE.RIGHTBIT (* Left came up. Henceforth treat  left transparently) (SETQ STATE \DLMOUSE.MIDDLE&LEFT)) NIL)) (\DLMOUSE.MIDDLE&RIGHT (* Only ignore LEFT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LEFTBIT)))) (\DLMOUSE.MIDDLE&LEFT (* Only ignore RIGHT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.RIGHTBIT)))) (PROGN (* Remaining state is \DLMOUSE.NORMAL which means treat mouse normally, and the  only interesting transition is back to \DLMOUSE.UP) ] (\PUTBASE \EM.UTILIN 0 REALUTILIN) (RETURN STATE]) (\DOTRANSITIONS [LAMBDA (KEYBASE OLD NEW) (* ; "Edited 1-Feb-92 11:59 by jds") (* ;; "OLD and NEW are keyboard state words that are known to have changed. KEYBASE is the number in hardware order of the key corresponding to the first bit in these words. This function figures out the indices of transitioning keys and calls the decoder.") (for I (BITMASK _ (LLSH 1 15)) from 0 to 15 do [OR (EQ 0 (LOGAND BITMASK (LOGXOR OLD NEW))) (\DECODETRANSITION (IPLUS I KEYBASE) (EQ 0 (LOGAND NEW BITMASK] (SETQ BITMASK (LRSH BITMASK 1))) T]) (\DECODETRANSITION [LAMBDA (KEYNUMBER DOWNFLG) (* ; "Edited 19-Nov-87 16:29 by Snow") (* ;; "KEYNUMBER is the key number in the hardware keyboard layout, DOWNFLG is T if the key just went down. PENDINGINTERRUPT, bound in \KEYHANDLER, is set to the decoded character if it is an interrupt.") (.NOTELASTUSERACTION) (PROG ((TI (\TRANSINDEX KEYNUMBER DOWNFLG)) (KEYSTATE \LASTKEYSTATE) ASCIICODE SHIFTED) (SELECTC (TRANSITIONFLAGS \CURRENTKEYACTION TI) (IGNORE.TF (RETURN)) (LOCKSHIFT.TF (* ;  "Take shift action if either Shift or Caps Lock is down") (IF (fetch (KEYBOARDEVENT SHIFTORLOCK) of KEYSTATE) THEN (SETQ SHIFTED T))) (NOLOCKSHIFT.TF (* ;  "Take shift action only when Shift is down") (IF (fetch (KEYBOARDEVENT SHIFT) of KEYSTATE) THEN (SETQ SHIFTED T))) (EVENT.TF (RETURN)) (1SHIFTUP.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with NIL) (RETURN)) (1SHIFTDOWN.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with T) (RETURN)) (2SHIFTUP.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with NIL) (RETURN)) (2SHIFTDOWN.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with T) (RETURN)) (LOCKUP.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with NIL) (RETURN)) (LOCKDOWN.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with T) (RETURN)) (LOCKTOGGLE.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT LOCK) of KEYSTATE))) (RETURN)) (CTRLUP.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with NIL) (RETURN)) (CTRLDOWN.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with T) (RETURN)) (METAUP.TF (replace (KEYBOARDEVENT META) of KEYSTATE with NIL) (RETURN)) (METADOWN.TF (replace (KEYBOARDEVENT META) of KEYSTATE with T) (RETURN)) (FONTUP.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with NIL) (RETURN)) (FONTDOWN.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with T) (RETURN)) (FONTTOGGLE.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT FONT) of KEYSTATE))) (RETURN)) (USERMODE1UP.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with NIL) (RETURN)) (USERMODE1DOWN.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with T) (RETURN)) (USERMODE1TOGGLE.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE1) of KEYSTATE))) (RETURN)) (USERMODE2UP.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with NIL) (RETURN)) (USERMODE2DOWN.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with T) (RETURN)) (USERMODE2TOGGLE.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE2) of KEYSTATE))) (RETURN)) (USERMODE3UP.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with NIL) (RETURN)) (USERMODE3DOWN.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with T) (RETURN)) (USERMODE3TOGGLE.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE3) of KEYSTATE))) (RETURN)) (SHOULDNT)) (* ;;  "Only the LOCKSHIFT and NOLOCKSHIFT cases make it to here, having set SHIFTED if appropriate.") [SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \CURRENTKEYACTION TI)) (T (TRANSITIONCODE \CURRENTKEYACTION TI] [COND ((OR (fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) [IF (IGREATERP ASCIICODE 127) THEN (* ;; "Non-ascii interpretation--what is cntrl/meta supposed to mean? Try using the original interpretation. This way we can type ^E or Meta-D even if Russian keyboard is set, but doesn't mess up simple ascii remappings, such as bs->del.") (SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \COMMANDKEYACTION TI)) (T (TRANSITIONCODE \COMMANDKEYACTION TI] [COND ((fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (SETQ ASCIICODE (LOGAND ASCIICODE \CTRLMASK] (COND ((AND (OR (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) (ILESSP ASCIICODE \KEYBOARD.META)) (SETQ ASCIICODE (LOGOR ASCIICODE \KEYBOARD.META] (COND ((ASSOC ASCIICODE (fetch INTERRUPTLIST of \CURRENTKEYACTION)) (SETQ PENDINGINTERRUPT T) (replace WAITINGINTERRUPT of \INTERRUPTSTATE with T) (replace INTCHARCODE of \INTERRUPTSTATE with ASCIICODE)) (T (\PUTSYSBUF ASCIICODE]) (MOUSECHORDWAIT [LAMBDA MSECS (* MPL "21-Jun-85 16:31") (DECLARE (GLOBALVARS \RCLKMILLISECOND)) (PROG1 (AND \MOUSECHORDTICKS \MOUSECHORDMILLISECONDS) [COND ((IGREATERP MSECS 0) (SETQ \MOUSECHORDTICKS (AND (ARG MSECS 1) (IMIN MAX.SMALLP (ITIMES (SETQ \MOUSECHORDMILLISECONDS (OR (SMALLP (ARG MSECS 1)) 50)) \RCLKMILLISECOND])]) (\TRACKCURSOR [LAMBDA (CURSORX CURSORY) (* ; "Edited 30-Mar-88 11:11 by Snow") (DECLARE (GLOBALVARS \CURSORDESTHEIGHT \CURSORDESTWIDTH)) (.NOTELASTUSERACTION) [COND ((OR [COND ((IGEQ CURSORX (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX)) (* Large cursor values are either out of bounds to the right or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORX 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORX 65535)) \CURSORHOTSPOTX) 0) (* Cursor pos + hotspot is still off to the left  (the IPLUS is an optimization of (\XMOUSECOORD))%, so clip to effective zero) (SETQ CURSORX (COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTX) BITSPERWORD] (T (SETQ CURSORX (SUB1 (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX] (IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT HARDCURSORHEIGHT))) (* repeat test so that both X and Y will get clipped each cycle.  This keeps the cursor from moving off the screen.) [COND ((IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY)) (* Large cursor values are either out of bounds to the bottom or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORY 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORY 65535)) \CURSORHOTSPOTY) 0) (* Cursor pos + hotspot is still off to the top, so clip to effective zero) (SETQ CURSORY (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTY) BITSPERWORD] (T (SETQ CURSORY (SUB1 (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY] (* If need to clip mouse, do so here. \SETMOUSEXY MACRO takes dlion  complexities into account.) (COND ((NEQ \MACHINETYPE \MAIKO) (\SETMOUSEXY CURSORX CURSORY] (COND (\SOFTCURSORUPP (\SOFTCURSORPOSITION CURSORX CURSORY))) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Have to kick DAYBREAK IOP to  track the cursor. *) (\DoveDisplay.SetCursorPosition CURSORX CURSORY))) (\PUTBASE \EM.CURSORX 0 CURSORX) (\PUTBASE \EM.CURSORY 0 CURSORY]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \SUN.TYPE3KEYBOARD 0) (RPAQQ \SUN.TYPE4KEYBOARD 1) (RPAQQ \SUN.JLEKEYBOARD 2) (RPAQQ \TOSHIBA.JIS 7) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) ) (RPAQ? \MOUSECHORDTICKS ) (RPAQ? \MOUSECHORDMILLISECONDS 50) (DECLARE%: DONTEVAL@LOAD DOCOPY (\KEYBOARDINIT) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS .NOTELASTUSERACTION MACRO (NIL (\BLT \LASTUSERACTION (LOCF (fetch SECONDSTMP of \MISCSTATS)) WORDSPERCELL))) ) (DECLARE%: EVAL@COMPILE (RPAQQ ALLUP 65535) (RPAQQ \CTRLMASK 159) (RPAQQ \METABIT 128) (CONSTANTS ALLUP \CTRLMASK \METABIT) ) (RPAQQ DLMOUSEBITS ((\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6))) (DECLARE%: EVAL@COMPILE (RPAQQ \MOUSE.LEFTBIT 4) (RPAQQ \MOUSE.RIGHTBIT 2) (RPAQQ \MOUSE.MIDDLEBIT 1) (RPAQQ \MOUSE.ALLBITS 7) (RPAQQ \MOUSE.LRBIT 6) (CONSTANTS (\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6)) ) (RPAQQ DLMOUSESTATES ((\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5))) (DECLARE%: EVAL@COMPILE (RPAQQ \DLMOUSE.UP 0) (RPAQQ \DLMOUSE.WAITING 1) (RPAQQ \DLMOUSE.NORMAL 2) (RPAQQ \DLMOUSE.MIDDLE 3) (RPAQQ \DLMOUSE.MIDDLE&LEFT 4) (RPAQQ \DLMOUSE.MIDDLE&RIGHT 5) (CONSTANTS (\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5)) ) (RPAQQ TRANSITIONFLAGS (ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF)) (DECLARE%: EVAL@COMPILE (RPAQQ ALTGRDOWN.TF 27) (RPAQQ ALTGRUP.TF 28) (RPAQQ ALTGRTOGGLE.TF 29) (RPAQQ CTRLDOWN.TF 5) (RPAQQ CTRLUP.TF 4) (RPAQQ DEADKEY.TF 30) (RPAQQ IGNORE.TF 0) (RPAQQ EVENT.TF 1) (RPAQQ LOCKDOWN.TF 8) (RPAQQ LOCKSHIFT.TF 2) (RPAQQ LOCKTOGGLE.TF 14) (RPAQQ LOCKUP.TF 7) (RPAQQ NOLOCKSHIFT.TF 3) (RPAQQ 1SHIFTDOWN.TF 6) (RPAQQ 1SHIFTUP.TF 9) (RPAQQ 2SHIFTDOWN.TF 11) (RPAQQ 2SHIFTUP.TF 10) (RPAQQ METADOWN.TF 13) (RPAQQ METAUP.TF 12) (RPAQQ FONTDOWN.TF 24) (RPAQQ FONTUP.TF 25) (RPAQQ FONTTOGGLE.TF 26) (RPAQQ USERMODE1UP.TF 15) (RPAQQ USERMODE1DOWN.TF 16) (RPAQQ USERMODE1TOGGLE.TF 17) (RPAQQ USERMODE2UP.TF 18) (RPAQQ USERMODE2DOWN.TF 19) (RPAQQ USERMODE2TOGGLE.TF 20) (RPAQQ USERMODE3UP.TF 21) (RPAQQ USERMODE3DOWN.TF 22) (RPAQQ USERMODE3TOGGLE.TF 23) (CONSTANTS ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \TRANSINDEX MACRO ((KEYNUMBER DOWNFLG) (COND (DOWNFLG (IPLUS \NKEYS KEYNUMBER)) (T KEYNUMBER)))) (PUTPROPS ARMEDCODE MACRO ((TABLE CHAR) (\GETBASEBIT (fetch (KEYACTION ARMED) TABLE) CHAR))) (PUTPROPS TRANSITIONALTGRCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION ALTGRAPHCODES) of TABLE) CHAR))) (PUTPROPS TRANSITIONSHIFTCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION SHIFTCODES) TABLE) CHAR))) (PUTPROPS TRANSITIONCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION CODES) TABLE) CHAR))) (PUTPROPS TRANSITIONFLAGS MACRO ((TABLE CHAR) (\GETBASEBYTE (fetch (KEYACTION FLAGS) TABLE) CHAR))) (PUTPROPS TRANSITIONDEADLIST MACRO ((TABLE CHAR SHIFTED) (\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1)))) (PUTPROPS CHECKFORDEADKEY MACRO [(KEYCODE TABLE CHAR SHIFTED) (LET ((CODE KEYCODE)) (COND [(IEQP CODE 65535) `(DEADKEY ,(\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1] (T CODE]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \NKEYS 112) (CONSTANTS \NKEYS) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (BLOCKRECORD RING ((READ WORD) (WRITE WORD))) ) (* ; "can get rid of shiftstate after clients have been fixed") (DECLARE%: EVAL@COMPILE (ACCESSFNS SHIFTSTATE [[DUMMYSHIFT (NOT (EQ 0 (LOGAND (\GETBASEBYTE DATUM 0) (LOGOR 1 2] [DUMMY1SHIFT [NOT (EQ 0 (LOGAND 1 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 1 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 1] [DUMMY2SHIFT [NOT (EQ 0 (LOGAND 2 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 2 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 2] [DUMMYLOCK [NOT (EQ 0 (LOGAND 4 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 4 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 4] [DUMMYSHIFTORLOCK (NOT (EQ 0 (\GETBASEBYTE DATUM 0))) (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (HELP " Can't turn on SHIFTORLOCK" )) (T 0] [DUMMYCTRL (NOT (EQ 0 (\GETBASEBYTE DATUM 1))) (\PUTBASEBYTE DATUM 1 (COND (NEWVALUE 1) (T 0] [DUMMYMETA (NOT (EQ 0 (\GETBASEBYTE DATUM 2))) (\PUTBASEBYTE DATUM 2 (COND (NEWVALUE 1) (T 0] [DUMMYFONT (NEQ 0 (LOGAND (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 3] [DUMMYUSERMODE1 (NEQ 0 (LOGAND (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 0] [DUMMYUSERMODE2 (NEQ 0 (LOGAND (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 1] [DUMMYUSERMODE3 (NEQ 0 (LOGAND (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 2] [DUMMYALTGRAPH (NEQ 0 (LOGAND (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 4] (DUMMYDEADKEYPENDING (NEQ 0 (LOGAND (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 5] (CREATE (\ALLOCBLOCK (FOLDHI 3 BYTESPERCELL)))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP) ) (DECLARE%: EVAL@COMPILE (RPAQQ NRINGINDEXWORDS 2) (CONSTANTS NRINGINDEXWORDS) ) (DECLARE%: EVAL@COMPILE (RPAQ \SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (RPAQ \SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE))) [CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] ) ) (DECLARE%: EVAL@COMPILE (RPAQQ \KEYNAMES ((5 %% FIVE) (4 $ FOUR) (6 ~ SIX) (e E) (7 & SEVEN) (d D) (u U) (v V) (0 %) ZERO) (k K) (- %) (p P) (/ ?) (\ %| FONT LOOKS) (LF SAME) (BS <-) (3 %# THREE) (2 @ TWO) (w W) (q Q) (s S) (a A) (9 %( NINE) (i I) (x X) (o O) (l L) (%, <) (%' %") (%] }) (BLANK-MIDDLE OPEN DBK-HELP) (BLANK-TOP KEYBOARD DBK-META) (1 ! ONE) (ESC ESCAPE ->) (TAB =>) (f F) (CTRL PROP'S EDIT) (c C) (j J) (b B) (z Z) (LSHIFT) (%. >) (; %:) (CR <-%|) (_ ^) (DEL DELETE) (SKIP NEXT) (r R) (t T) (g G) (y Y) (h H) (8 * EIGHT) (n N) (m M) (LOCK) (SPACE) (%[ {) (= +) (RSHIFT) (BLANK-BOTTOM STOP) (MOVE) (UNDO) (UTIL0 SUN-KEYPAD=) (UTIL1 SUN-KEYPAD/) (UTIL2 SUPER/SUB) (UTIL3 CASE) (UTIL4 STRIKEOUT) (UTIL5 KEYPAD2) (UTIL6 KEYPAD3 PGDN) (UTIL7 SUN-LF) (PAD1 LEFTKEY CAPSLOCK KEYPAD+) (PAD2 LEFTMIDDLEKEY NUMLOCK KEYPAD-) (PAD3 MIDDLEKEY SCROLLLOCK KEYPAD*) (PAD4 RIGHTMIDDLEKEY BREAK KEYPAD/ SUN-PAUSE) (PAD5 RIGHTKEY DOIT PRTSC) (LEFT RED MOUSERED) (RIGHT BLUE MOUSEBLUE) (MIDDLE YELLOW MOUSEYELLOW) (MARGINS) (K41 KEYPAD7 HOME) (K42 KEYPAD8) (K43 KEYPAD9 PGUP) (K44 KEYPAD4) (K45 KEYPAD5) (K46 SUN-LEFT-SPACE) (K47 KEYPAD6) (K48 RIGHT-COMMAND SUN-RIGHT-SPACE) (COPY) (FIND) (AGAIN) (HELP) (DEF'N EXPAND) (K4E KEYPAD1 END) (ALWAYS-ON-1) (ALWAYS-ON-2) (CENTER) (K52 KEYPAD0 INS) (BOLD) (ITALICS) (UNDERLINE) (SUPERSCRIPT) (SUBSCRIPT) (LARGER SMALLER) (K59 KEYPAD%| KEYPAD.) (K5A KEYPAD\ KEYPAD, SUN-F10) (K5B SUN-F11) (K5C SUN-F12) (DEFAULTS SUN-PROP) (K5E SUN-PRTSC) (K5F SUN-OPEN))) ) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun." ) (RPAQQ \ORIGKEYACTIONS ((0 (53 "%%" NOLOCKSHIFT)) (1 (52 "$" NOLOCKSHIFT)) (2 (54 "~" NOLOCKSHIFT)) (3 ("e" "E" LOCKSHIFT)) (4 (55 "&" NOLOCKSHIFT)) (5 ("d" "D" LOCKSHIFT)) (6 ("u" "U" LOCKSHIFT)) (7 ("v" "V" LOCKSHIFT)) (8 (48 ")" NOLOCKSHIFT)) (9 ("k" "K" LOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (11 ("p" "P" LOCKSHIFT)) (12 ("/" "?" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (15 (8 8 NOLOCKSHIFT)) (16 (51 "#" NOLOCKSHIFT)) (17 (50 "@" NOLOCKSHIFT)) (18 ("w" "W" LOCKSHIFT)) (19 ("q" "Q" LOCKSHIFT)) (20 ("s" "S" LOCKSHIFT)) (21 ("a" "A" LOCKSHIFT)) (22 (57 "(" NOLOCKSHIFT)) (23 ("i" "I" LOCKSHIFT)) (24 ("x" "X" LOCKSHIFT)) (25 ("o" "O" LOCKSHIFT)) (26 ("l" "L" LOCKSHIFT)) (27 ("," "<" NOLOCKSHIFT)) (28 ("'" "%"" NOLOCKSHIFT)) (29 ("]" "}" NOLOCKSHIFT)) (30 (194 194 NOLOCKSHIFT)) (31 (193 193 NOLOCKSHIFT)) (32 (49 "!" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (34 (9 9 NOLOCKSHIFT)) (35 ("f" "F" LOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (37 ("c" "C" LOCKSHIFT)) (38 ("j" "J" LOCKSHIFT)) (39 ("b" "B" LOCKSHIFT)) (40 ("z" "Z" LOCKSHIFT)) (41 1SHIFTDOWN . 1SHIFTUP) (42 ("." ">" NOLOCKSHIFT)) (43 (";" ":" NOLOCKSHIFT)) (44 (13 13 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)) (46 (127 535 NOLOCKSHIFT)) (47 ("(" "[" NOLOCKSHIFT)) (48 ("r" "R" LOCKSHIFT)) (49 ("t" "T" LOCKSHIFT)) (50 ("g" "G" LOCKSHIFT)) (51 ("y" "Y" LOCKSHIFT)) (52 ("h" "H" LOCKSHIFT)) (53 (56 "*" NOLOCKSHIFT)) (54 ("n" "N" LOCKSHIFT)) (55 ("m" "M" LOCKSHIFT)) (56 LOCKDOWN . LOCKUP) (57 (32 32 NOLOCKSHIFT)) (58 ("[" "{" NOLOCKSHIFT)) (59 ("=" "+" NOLOCKSHIFT)) (60 2SHIFTDOWN . 2SHIFTUP) (61 (195 195 NOLOCKSHIFT)) (63 (")" "]" NOLOCKSHIFT)) (77 EVENT . EVENT) (78 EVENT . EVENT) (79 EVENT . EVENT) (102 LOCKDOWN) (103 LOCKUP))) (RPAQQ \DLIONKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 ("\" "|" NOLOCKSHIFT)) (45 (96 "~" NOLOCKSHIFT)) (OPEN METADOWN . METAUP) (PROP'S CTRLDOWN . CTRLUP) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPERSCRIPT ("2,113" "2,153" NOLOCKSHIFT)) (SUBSCRIPT ("2,114" "2,154" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (DEFAULTS ("2,115" "2,155" NOLOCKSHIFT)) (93 (27 "2,64" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (31 ("2,5" "2,45" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (80 ("2,13" "2,53" NOLOCKSHIFT)) (FONT ("2,112" "2,152" NOLOCKSHIFT)))) (RPAQQ \DLIONOSDKEYACTIONS ((56 LOCKTOGGLE))) (RPAQQ \DORADOKEYACTIONS ((2 (54 "~" NOLOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)))) (RPAQQ \DOVEKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (56 CTRLDOWN . CTRLUP) (65 (27 27 NOLOCKSHIFT)) (71 (39 34 NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (108 (96 126 NOLOCKSHIFT)) (DBK-META METADOWN . METAUP) (DBK-HELP ("2,1" "2,41" NOLOCKSHIFT)) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (EDIT ("2,5" "2,45" NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (CASE ("2,104" "2,144" NOLOCKSHIFT)) (STRIKEOUT ("2,105" "2,145" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPER/SUB ("2,107" "2,147" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (MARGINS ("2,111" "2,151" NOLOCKSHIFT)) (LOOKS ("2,112" "2,152" NOLOCKSHIFT)) (CAPSLOCK LOCKTOGGLE) (NUMLOCK ("2,11" "-" NOLOCKSHIFT)) (SCROLLLOCK ("2,12" 180 NOLOCKSHIFT)) (BREAK (2 184 NOLOCKSHIFT)) (DOIT ("2,13" "2,53" NOLOCKSHIFT)) (KEYPAD7 ("2,14" 55 NOLOCKSHIFT)) (KEYPAD8 (173 56 NOLOCKSHIFT)) (KEYPAD9 ("2,15" 57 NOLOCKSHIFT)) (KEYPAD4 (172 52 NOLOCKSHIFT)) (KEYPAD5 ("2,16" 53 NOLOCKSHIFT)) (KEYPAD6 (174 54 NOLOCKSHIFT)) (KEYPAD1 ("2,17" 49 NOLOCKSHIFT)) (KEYPAD2 (175 50 NOLOCKSHIFT)) (KEYPAD3 ("2,20" 51 NOLOCKSHIFT)) (KEYPAD0 ("2,21" 48 NOLOCKSHIFT)) (KEYPAD%| ("|" 46 NOLOCKSHIFT)) (KEYPAD\ ("\" 44 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)))) (RPAQQ \DOVEOSDKEYACTIONS ((56 LOCKDOWN . LOCKUP) (36 CTRLDOWN . CTRLUP) (CAPSLOCK ("2,5" "2,45" NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONS ((61 (5 7 NOLOCKSHIFT)) (91 (520 552 NOLOCKSHIFT)) (92 (513 545 NOLOCKSHIFT)) (30 (513 545 NOLOCKSHIFT)) (63 (516 548 NOLOCKSHIFT)) (93 (532 564 NOLOCKSHIFT)) (62) (111 (329 263 NOLOCKSHIFT)) (89) (90 (515 547 NOLOCKSHIFT)) (73 (521 521 NOLOCKSHIFT)) (74 (522 522 NOLOCKSHIFT)) (75 (2 2 NOLOCKSHIFT)) (81 (524 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 (525 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 (526 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 (527 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 (528 51 NOLOCKSHIFT)) (98 (529 48 NOLOCKSHIFT)) (76 (523 555 NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 (577 609 NOLOCKSHIFT)) (99 (578 610 NOLOCKSHIFT)) (100 (579 611 NOLOCKSHIFT)) (67 (580 612 NOLOCKSHIFT)) (68 (581 613 NOLOCKSHIFT)) (101 (582 614 NOLOCKSHIFT)) (66 (583 615 NOLOCKSHIFT)) (104 (584 616 NOLOCKSHIFT)) (80 (585 617 NOLOCKSHIFT)) (13 (23 21 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (2 (54 94 NOLOCKSHIFT)) (10 (45 95 NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 (96 126 NOLOCKSHIFT)) (31 METADOWN . METAUP) (14 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 (530 562 NOLOCKSHIFT)) (105 (92 124 NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONST4 ((61 ("^E" "^G" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (30 ("2,1" "2,41" NOLOCKSHIFT)) (109 ("2,25" "2,65" NOLOCKSHIFT)) (63 ("2,4" "2,44" NOLOCKSHIFT)) (14 METADOWN . METAUP) (93 ("2,24" "2,64" NOLOCKSHIFT)) (62) (111 ("1,111" "1,79" NOLOCKSHIFT)) (89) (90 ("2,3" "2,43" NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 ("2,17" 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (98 ("2,21" 48 NOLOCKSHIFT)) (76 ("2,13" "2,13" NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 ("2,101" "2,141" NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (100 ("2,103" "2,143" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (68 ("2,105" "2,145" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (33 ("ESC" "ESC" NOLOCKSHIFT)) (64 IGNORE . IGNORE) (65 (27 27 NOLOCKSHIFT)) (95 IGNORE . IGNORE) (96 IGNORE . IGNORE) (102 IGNORE . IGNORE) (2 ("6" "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 ("`" "~" NOLOCKSHIFT)) (31 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (86 IGNORE . IGNORE) (88 IGNORE . IGNORE) (105 ("\" "|" NOLOCKSHIFT)))) (RPAQQ \MAIKO-JLE-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("\" "_" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (14 METADOWN . METAUP) (15 (8 8 NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (30 ("]" "}" NOLOCKSHIFT)) (31 METADOWN . METAUP) (33 ("ESC" "ESC" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (43 (";" "+" NOLOCKSHIFT)) (45 ("^" "~" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (56 LOCKTOGGLE . IGNORE) (58 ("@" "`" NOLOCKSHIFT)) (59 ("-" "=" NOLOCKSHIFT)) (61 ("^E" "^G" NOLOCKSHIFT)) (62) (63 ("2,4" "2,44" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (71 (10 10 NOLOCKSHIFT)) (72 (766 766 NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (86 (765 765 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (88 (770 771 NOLOCKSHIFT)) (90 ("2,3" "2,43" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (96 IGNORE . IGNORE) (98 ("2,21" 48 NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (102 IGNORE . IGNORE) (103 (767 768 NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (105 ("\" "|" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (109 (769 769 NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (111 ("1,111" "1,79" NOLOCKSHIFT)))) (RPAQQ \TOSHIBA-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("-" "=" NOLOCKSHIFT)) (59 ("^" "~" NOLOCKSHIFT)) (45 ("\" "|" NOLOCKSHIFT)) (58 ("@" "`" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (105 ("]" "}" NOLOCKSHIFT)) (43 (";" "+" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (15 (23 95 NOLOCKSHIFT)) (13 (8 8 NOLOCKSHIFT)) (86 METADOWN . METAUP) (73 (530 562 NOLOCKSHIFT)) (88 ("2,24" "2,64" NOLOCKSHIFT)) (98 IGNORE . IGNORE) (75 ("2,11" "2,11" NOLOCKSHIFT)) (110 ("2,12" "2,12" NOLOCKSHIFT)) (74 ("^B" "^B" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (173 56 NOLOCKSHIFT)) (95 ("2,15" 57 NOLOCKSHIFT)) (81 (172 52 NOLOCKSHIFT)) (82 ("2,16" 53 NOLOCKSHIFT)) (83 (174 54 NOLOCKSHIFT)) (84 ("2,17" 49 NOLOCKSHIFT)) (85 (175 50 NOLOCKSHIFT)) (87 ("2,20" 51 NOLOCKSHIFT)) (94 ("2,21" 48 NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 LOCKTOGGLE))) (RPAQQ KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL) (RPAQ? \KEYBOARD.META 256) (RPAQ? \MODIFIED.KEYACTIONS ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS) ) (* ; "Key interpretation") (DEFINEQ (KEYACTION [LAMBDA (KEYNAME ACTIONS TABLE) (* ; "Edited 19-Nov-87 16:19 by Snow") (LET ((NUMB (OR (SMALLP KEYNAME) (\KEYNAMETONUMBER KEYNAME))) (TABLE (OR TABLE \CURRENTKEYACTION))) (OR (TYPE? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (* ;  "Make sure he supplied a valid TABLE argument.") (CONS (\KEYACTION1 (\TRANSINDEX NUMB T) (AND ACTIONS (OR (CAR ACTIONS) 'IGNORE)) TABLE) (\KEYACTION1 (\TRANSINDEX NUMB NIL) (AND ACTIONS (OR (CDR ACTIONS) 'IGNORE)) TABLE]) (KEYACTIONTABLE [LAMBDA (OLD) (* ; "Edited 23-Mar-92 12:44 by jds") (* ;; "Create a fresh key action table (or copy OLD so it can be modified without danger). Returns a fresh keyaction table.") (COND (OLD (* ;; "He supplied an existing table; create a copy of it:") (OR (type? KEYACTION OLD) (\ILLEGAL.ARG OLD)) (* ;  "Make sure the argument IS a key action table.") (create KEYACTION copying OLD)) (T (* ;; "Create a completely fresh table, filled in from \ORIGKEYACTIONS, and the machine-specific exceptions:") (PROG1 (SETQ OLD (create KEYACTION)) (for X in (APPEND (COPY \ORIGKEYACTIONS) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) OLD)))]) (KEYBOARDTYPE [LAMBDA NIL (* ; "Edited 6-Nov-95 15:35 by ") (* ; "Edited 17-Feb-95 14:36 by rmk:") (* ;  "Edited 16-Jun-92 11:03 by kaplan") (* ;; "Returns a symbol identifying the currently connected keyboard type. For now, infers it from the machine type, defaults to NIL (= unknown).") (LET ((MT (MACHINETYPE))) (SELECTQ MT (MAIKO (OR [CADR (SASSOC (L-CASE (UNIX-GETENV "LDEKBDTYPE")) '(("type3" SUN3) ("type4" SUN4) ("type5" SUN5] (MKATOM (U-CASE (UNIX-GETENV "LDEKBDTYPE"))) (AND (STREQUAL "dos" (UNIX-GETPARM "ARCH")) 'FULL-IBMPC))) ((DORADO DANDELION DOVE) MT) NIL]) (RESETKEYACTION [LAMBDA (TABLE FROM RESETINTERRUPTS) (* ; "Edited 19-Nov-87 16:55 by Snow") (* ;; "Resets the actions of key transitions in the keyaction table TABLE, copying in the actions from FROM. If RESETINTERRUPTS is true, also copies the interrupt-character settings from FROM.") (DECLARE (GLOBALVARS \DEFAULTKEYACTION)) (* ;; "do some type checking first.") (OR (type? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (OR FROM (SETQ FROM \DEFAULTKEYACTION)) (OR (type? KEYACTION FROM) (\ILLEGAL.ARG TABLE)) (* ;; "do the resetting.") (\BLT (fetch (KEYACTION FLAGS) of TABLE) (fetch (KEYACTION FLAGS) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION FLAGS) of TABLE)) 1)) (\BLT (fetch (KEYACTION CODES) of TABLE) (fetch (KEYACTION CODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION CODES) of TABLE)) 1)) (\BLT (fetch (KEYACTION SHIFTCODES) of TABLE) (fetch (KEYACTION SHIFTCODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION SHIFTCODES) of TABLE)) 1)) [if RESETINTERRUPTS then (\BLT (fetch (KEYACTION ARMED) of TABLE) (fetch (KEYACTION ARMED) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION ARMED) of TABLE)) 1)) (replace (KEYACTION INTERRUPTLIST) of TABLE with (COPY (fetch (KEYACTION INTERRUPTLIST) of FROM] TABLE]) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS [LAMBDA NIL (* ; "Edited 18-Sep-90 22:36 by jds") (* ;;  "Return a list of machine-specific keyactions appropriate to the machine you're running on.") (* ;; "Also take account (on Maiko implementations) of whether we're running under X or not -- the CAPS-LOCK key works differently.") (SELECTC \MACHINETYPE (\DORADO \DORADOKEYACTIONS) (\DANDELION \DLIONKEYACTIONS) (\MAIKO (LET [(CAPS-LOCK-ACTIONS (COND ((EQUAL (UNIX-GETPARM "DISPLAY") "X") '((56 LOCKDOWN . LOCKUP) (72 LOCKDOWN . LOCKUP] (* ;; "If we're running under X windows, CAPS-LOCK-ACTIONS, appended to the normal keyactions, will reset the keyboard appropriately.") (COND ((EQUAL \SUN.TYPE3KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONS CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.TYPE4KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONST4 CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.JLEKEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) \MAIKO-JLE-KEYACTIONS) ((EQUAL \TOSHIBA.JIS (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (* ; "Toshiba JIS") (APPEND \MAIKOKEYACTIONST4 \TOSHIBA-KEYACTIONS)) (T (* ; "default is type3") \MAIKOKEYACTIONS)))) (\DAYBREAK (* ;  "Moving to a daybreak. Need to distinguish among the various kinds of keyboard.") (* ;; "For now, we only distinguish between the office keyboards (1 = US, 2 = Euro, 3 = Japanese, 4 = ADM-3), and some yet-to-be-determined Lisp-keyboard number") (COND ((ILEQ (\DoveMisc.ReadKeyboardType) 4) (* ;  "It's an office keyboard. Set it up right!") (APPEND \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (T (* ;  "Lisp keyboard. Leave the Dove keyactions as they were.") \DOVEKEYACTIONS))) NIL]) (\KEYACTION1 [LAMBDA (TI ACTION TABLE) (* ; "Edited 4-Mar-92 13:59 by jds") (PROG1 (SELECTC (TRANSITIONFLAGS TABLE TI) (IGNORE.TF 'IGNORE) ((LIST LOCKSHIFT.TF NOLOCKSHIFT.TF) [LET (CODE) (LIST (CHECKFORDEADKEY (TRANSITIONCODE TABLE TI) TABLE TI NIL) (CHECKFORDEADKEY (TRANSITIONSHIFTCODE TABLE TI) TABLE TI T) (TRANSITIONALTGRCODE TABLE TI) (COND ((EQ LOCKSHIFT.TF (TRANSITIONFLAGS TABLE TI)) 'LOCKSHIFT) (T 'NOLOCKSHIFT]) (EVENT.TF 'EVENT) (CTRLDOWN.TF 'CTRLDOWN) (CTRLUP.TF 'CTRLUP) (DEADKEY.TF (LIST 'DEADKEY (TRANSITIONDEADLIST TABLE TI) (TRANSITIONDEADLIST TABLE TI T))) (1SHIFTDOWN.TF '1SHIFTDOWN) (1SHIFTUP.TF '1SHIFTUP) (2SHIFTDOWN.TF '2SHIFTDOWN) (2SHIFTUP.TF '2SHIFTUP) (LOCKDOWN.TF 'LOCKDOWN) (LOCKUP.TF 'LOCKUP) (LOCKTOGGLE.TF 'LOCKTOGGLE) (METADOWN.TF 'METADOWN) (METAUP.TF 'METAUP) (FONTUP.TF 'FONTUP) (FONTDOWN.TF 'FONTDOWN) (FONTTOGGLE.TF 'FONTTOGGLE) (USERMODE1UP.TF 'USERMODE1UP) (USERMODE1DOWN.TF 'USERMODE1DOWN) (USERMODE1TOGGLE.TF 'USERMODE1TOGGLE) (USERMODE2UP.TF 'USERMODE2UP) (USERMODE2DOWN.TF 'USERMODE2DOWN) (USERMODE2TOGGLE.TF 'USERMODE2TOGGLE) (USERMODE3UP.TF 'USERMODE3UP) (USERMODE3DOWN.TF 'USERMODE3DOWN) (USERMODE3TOGGLE.TF 'USERMODE3TOGGLE) (ALTGRUP.TF 'ALTGRUP) (ALTGRDOWN.TF 'ALTGRDOWN) (ALTGRTOGGLE.TF 'ALTGRTOGGLE) (SHOULDNT)) [SELECTQ ACTION ((NIL NOCHANGE)) (IGNORE (change (TRANSITIONFLAGS TABLE TI) IGNORE.TF)) (EVENT (change (TRANSITIONFLAGS TABLE TI) EVENT.TF)) (CTRLUP (change (TRANSITIONFLAGS TABLE TI) CTRLUP.TF)) (CTRLDOWN (change (TRANSITIONFLAGS TABLE TI) CTRLDOWN.TF)) (1SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 1SHIFTUP.TF)) (1SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 1SHIFTDOWN.TF)) (2SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 2SHIFTUP.TF)) (2SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 2SHIFTDOWN.TF)) (LOCKUP (change (TRANSITIONFLAGS TABLE TI) LOCKUP.TF)) (LOCKDOWN (change (TRANSITIONFLAGS TABLE TI) LOCKDOWN.TF)) (LOCKTOGGLE (change (TRANSITIONFLAGS TABLE TI) LOCKTOGGLE.TF)) (METAUP (change (TRANSITIONFLAGS TABLE TI) METAUP.TF)) (METADOWN (change (TRANSITIONFLAGS TABLE TI) METADOWN.TF)) (FONTUP (change (TRANSITIONFLAGS TABLE TI) FONTUP.TF)) (FONTDOWN (change (TRANSITIONFLAGS TABLE TI) FONTDOWN.TF)) (FONTTOGGLE (change (TRANSITIONFLAGS TABLE TI) FONTTOGGLE.TF)) (USERMODE1UP (change (TRANSITIONFLAGS TABLE TI) USERMODE1UP.TF)) (USERMODE1DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE1DOWN.TF)) (USERMODE1TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE1TOGGLE.TF)) (USERMODE2UP (change (TRANSITIONFLAGS TABLE TI) USERMODE2UP.TF)) (USERMODE2DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE2DOWN.TF)) (USERMODE2TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE2TOGGLE.TF)) (USERMODE3UP (change (TRANSITIONFLAGS TABLE TI) USERMODE3UP.TF)) (USERMODE3DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE3DOWN.TF)) (USERMODE3TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE3TOGGLE.TF)) (ALTGRUP (change (TRANSITIONFLAGS TABLE TI) ALTGRUP.TF)) (ALTGRDOWN (change (TRANSITIONFLAGS TABLE TI) ALTGRDOWN.TF)) (ALTGRTOGGLE (change (TRANSITIONFLAGS TABLE TI) ALTGRTOGGLE.TF)) (PROG (CODE SHIFTCODE ALTGRCODE ACT DEAD SHIFTDEAD) (COND ([AND [OR (AND (AND (LISTP (CAR (LISTP ACTION))) (EQ (CAAR (LISTP ACTION)) 'DEADKEY)) [SETQ DEAD (for PAIR in (CADAR (LISTP ACTION)) collect (* ;;  "Make sure we'll take string charcode specs in the deadkey list.") (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ CODE 65535)) [\CHARCODEP (SETQ CODE (\GETCHARCODE (CAR (LISTP ACTION] (SETQ CODE (APPLY* (FUNCTION CHARCODE) (CAR (LISTP ACTION] [OR (AND (AND (LISTP (CADR (LISTP ACTION))) (EQ (CAADR (LISTP ACTION)) 'DEADKEY)) [SETQ SHIFTDEAD (for PAIR in (CADADR (LISTP ACTION)) collect (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ SHIFTCODE 65535) (SETQ ACT (CDR ACTION))) [\CHARCODEP (SETQ SHIFTCODE (\GETCHARCODE (CAR (SETQ ACT (LISTP (CDR ACTION] (SETQ SHIFTCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) (AND [OR [\CHARCODEP (SETQ ALTGRCODE (\GETCHARCODE (CAR ACT] (SETQ ALTGRCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) NIL] (change (TRANSITIONCODE TABLE TI) CODE) (change (TRANSITIONSHIFTCODE TABLE TI) SHIFTCODE) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH TI 1) DEAD) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (IPLUS \NKEYS \NKEYS TI) 1) SHIFTDEAD) (AND ALTGRCODE (change (TRANSITIONALTGRCODE TABLE TI) ALTGRCODE))) (T (\ILLEGAL.ARG ACTION])]) (KEYDOWNP [LAMBDA (KEYNAME) (* lmm "18-Apr-85 02:09") (* T if the indicated key is  instantaneously down.) (\NEWKEYDOWNP (\KEYNAMETONUMBER KEYNAME]) (KEYNUMBERP [LAMBDA (X) (* ; "Edited 16-Jan-96 13:16 by rmk") (AND (SMALLP X) (IGEQ X 0) (ILESSP X \NKEYS) X]) (\KEYNAMETONUMBER [LAMBDA (KEYNAME) (* rmk%: " 2-SEP-83 10:29") (DECLARE (GLOBALVARS \KEYNAMES)) (* The fast case is when KEYNAME is  lower-case) (for X N in \KEYNAMES as I from 0 when (EQMEMB KEYNAME X) do (RETURN I) finally (RETURN (OR (AND (NEQ KEYNAME (SETQ N (L-CASE KEYNAME))) (for Y in \KEYNAMES as I from 0 when (EQMEMB N Y) do (RETURN I))) (\ILLEGAL.ARG KEYNAME]) (MODIFY.KEYACTIONS [LAMBDA (KeyActions SaveCurrent?) (* ; "Edited 2-Feb-89 15:38 by GADENER") (PROG1 [if SaveCurrent? then (SETQ \MODIFIED.KEYACTIONS (for ITEM in KeyActions collect (CONS (CAR ITEM) (KEYACTION (CAR ITEM] [for action in KeyActions do (for table in '(\CURRENTKEYACTION \COMMANDKEYACTION) do (KEYACTION (CAR action) (CDR action) (EVAL table])]) (METASHIFT [LAMBDA FLG (* ; "Edited 19-Nov-87 16:59 by Snow") (* ;; "Sets interpretation of swat key to first arg, where T means meta-shift, NIL means original setting. Returns previous setting") (PROG ((METASTATUS '(METADOWN . METAUP)) OLDSETTING) [SETQ OLDSETTING (KEYACTION 'BLANK-BOTTOM (AND (IGREATERP FLG 0) (COND ((EQ (ARG FLG 1) T) METASTATUS) (T (OR (ARG FLG 1) (CDR (ASSOC 'BLANK-BOTTOM \ORIGKEYACTIONS] (RETURN (COND ((EQUAL OLDSETTING METASTATUS) T) (T OLDSETTING]) (SHIFTDOWNP [LAMBDA (SHIFT) (* lmm "18-Apr-85 01:07") (* Tells whether a given shift is  down) (SELECTQ SHIFT (LOCK (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (META (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE))) (1SHIFT (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE)) (2SHIFT (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE)) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE))) (CTRL (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (FONT (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (USERMODE1 (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (USERMODE2 (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (USERMODE3 (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (\ILLEGAL.ARG SHIFT]) ) (* ; "To support office style 1108 & 1186 keyboards") (DEFINEQ (SETUP.OFFICE.KEYBOARD [LAMBDA NIL (* jds " 8-Oct-85 16:27") (SELECTQ (MACHINETYPE) (DANDELION (MODIFY.KEYACTIONS \DLIONOSDKEYACTIONS)) (DOVE (MODIFY.KEYACTIONS \DOVEOSDKEYACTIONS)) NIL]) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \TEMPCOPYTIMER MACRO ((X) (PROGN (\BLT \MOUSETIMERTEMP (LOCF X) WORDSPERCELL) \MOUSETIMERTEMP))) ) (* ; "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED") (DEFOPTIMIZER KEYDOWNP (KEYNAME) `(\NEWKEYDOWNP (\KEYNAMETONUMBER ,KEYNAME))) (* "END EXPORTED DEFINITIONS") ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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)))) ) (* "END EXPORTED DEFINITIONS") (* ; "A raw keyboard device/stream") (DEFINEQ (\INIT.KEYBOARD.STREAM [LAMBDA NIL (* ; "Edited 4-Sep-87 10:25 by jds") (* ;; "Initialize the %"Keyboard%" device: Set up the FDEV and the prototype keyboard stream in their respective global variables.") (DECLARE (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM)) [\DEFINEDEVICE 'KEYBOARD (SETQ \KEYBOARD.DEVICE (create FDEV DEVICENAME _ 'KEYBOARD CLOSEFILE _ (FUNCTION NILL) EVENTFN _ (FUNCTION \KEYBOARDEVENTFN) BIN _ (FUNCTION \GETKEY) PEEKBIN _ (FUNCTION \PEEKSYSBUF) READP _ (FUNCTION \SYSBUFP) EOFP _ (FUNCTION NILL) GETFILENAME _ (FUNCTION (LAMBDA (X MODE) (if (EQ MODE 'INPUT) then \KEYBOARD.STREAM] (SETQ \KEYBOARD.STREAM (create STREAM USERCLOSEABLE _ NIL USERVISIBLE _ NIL FULLFILENAME _ '{KEYBOARD} DEVICE _ \KEYBOARD.DEVICE ACCESS _ 'INPUT]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\INIT.KEYBOARD.STREAM) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM) ) (* "END EXPORTED DEFINITIONS") (* ; "Hook for a periodic interrupt") (DEFINEQ (\DOBUFFEREDTRANSITIONS [LAMBDA (\INTERRUPTABLE) (DECLARE (SPECVARS \INTERRUPTABLE)) (* ; "Edited 1-Feb-92 11:59 by jds") (SETQ \KEYBUFFERING 'INPROGRESS) (LET ((PENDINGINTERRUPT)) (DECLARE (SPECVARS PENDINGINTERRUPT)) (* ; "Used by \DECODETRANSITION") [bind R RPTR until (EQ 0 (SETQ R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) ) do (SETQ RPTR (\ADDBASE \KEYBOARDEVENTQUEUE R)) (* ; "get pointer to this event") (* ;  "handle simple keyboard words by calling \DOTRANSITIONS for each word") [COND ((NEQ (fetch (KEYBOARDEVENT W0) of RPTR) (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE )) (\DOTRANSITIONS 0 (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W0) of RPTR)) (replace (KEYBOARDEVENT W0) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W0) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W1) of RPTR) (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE )) (\DOTRANSITIONS 16 (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W1) of RPTR)) (replace (KEYBOARDEVENT W1) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W1) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W2) of RPTR) (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE )) (\DOTRANSITIONS 32 (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W2) of RPTR)) (replace (KEYBOARDEVENT W2) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W2) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W3) of RPTR) (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE )) (\DOTRANSITIONS 48 (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W3) of RPTR)) (replace (KEYBOARDEVENT W3) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W3) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W4) of RPTR) (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE )) (\DOTRANSITIONS 80 (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W4) of RPTR)) (replace (KEYBOARDEVENT W4) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W4) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W5) of RPTR) (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE )) (\DOTRANSITIONS 96 (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W5) of RPTR)) (replace (KEYBOARDEVENT W5) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W5) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT WU) of RPTR) (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE )) (\DOTRANSITIONS 64 (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT WU) of RPTR)) (replace (KEYBOARDEVENT WU) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT WU) of RPTR] (* ;;; "now remove event from queue") (COND ((EQ [replace (RING READ) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ R \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS \KEYBOARDEVENT.SIZE R] (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE )) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0] (PROGN (* ; "update dummy shift state") (replace DUMMY1SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 1SHIFT ) of \LASTKEYSTATE )) (replace DUMMY2SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 2SHIFT ) of \LASTKEYSTATE )) (replace DUMMYLOCK of \SHIFTSTATE with (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (replace DUMMYCTRL of \SHIFTSTATE with (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (replace DUMMYMETA of \SHIFTSTATE with (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (replace DUMMYFONT of \SHIFTSTATE with (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (replace DUMMYUSERMODE1 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (replace DUMMYUSERMODE2 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (replace DUMMYUSERMODE3 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (replace DUMMYALTGRAPH of \SHIFTSTATE with (fetch (KEYBOARDEVENT ALTGRAPH) of \LASTKEYSTATE)) (replace DUMMYDEADKEYPENDING of \SHIFTSTATE with (fetch ( KEYBOARDEVENT DEADKEYPENDING ) of \LASTKEYSTATE) )) (* ;; "Note: there is a window between the test of READ above and the setting of \KEYBUFFERING below where a keyboard transition can be ignored until the next transition causes \KEYBUFFERING to be set again") (COND ((NOT (OR PENDINGINTERRUPT \PENDINGINTERRUPT)) (* ;  "No interrupt noticed this time or on any previous invocation") (SETQ \KEYBUFFERING NIL)) ((NOT (\GETBASEPTR (\STKSCAN '\INTERRUPTABLE) 0)) (* ;  "We're not interruptable, so try again later") (SETQ \PENDINGINTERRUPT T) (SETQ \KEYBUFFERING NIL)) (T (SETQ \PENDINGINTERRUPT NIL) (SETQ \KEYBUFFERING NIL) (LET ((\INTERRUPTABLE T)) (INTERRUPTED]) (\TIMER.INTERRUPTFRAME [LAMBDA NIL (* lmm "22-Apr-85 09:47") (* place holder for periodic  interrupts) (if NIL then (APPLY* \PERIODIC.INTERRUPT) (if \PERIODIC.INTERRUPT then (SETUPTIMER (QUOTIENT (TIMES \PERIODIC.INTERRUPT.FREQUENCY \RCLKSECOND) 77) (LOCF (fetch DLMOUSETIMER of \MISCSTATS)) 'TICKS) (SETQ \TIMER.INTERRUPT.PENDING T]) (\PERIODIC.INTERRUPTFRAME [LAMBDA NIL (DECLARE (GLOBALVARS \PERIODIC.INTERRUPT)) (* lmm "16-Jul-85 16:22") (LET ((FN \PERIODIC.INTERRUPT)) (AND FN (SPREADAPPLY* FN]) ) (RPAQ? \KEYBUFFERING ) (RPAQ? \PERIODIC.INTERRUPT ) (RPAQ? \TIMER.INTERRUPT.PENDING ) (RPAQ? \PERIODIC.INTERRUPT.FREQUENCY 77) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (* ; "cursor and mouse related functions.") (DEFINEQ (\HARDCURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 2-Jan-2000 18:10 by kaplan") (* ;  "version of \CURSORUP that knows about the possibility of the cursor being on the color screen.") (PROG (IMAGE) (SETQ \SOFTCURSORP NIL) (SETQ \CURRENTCURSOR NEWCURSOR) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION))) (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR] (BITBLT IMAGE 0 0 CursorBitMap 0 (IDIFFERENCE HARDCURSORHEIGHT (fetch (BITMAP BITMAPHEIGHT ) of IMAGE)) HARDCURSORWIDTH HARDCURSORHEIGHT (COND (INVERTFLG 'INVERT) (T 'INPUT)) 'REPLACE) (SELECTC \MACHINETYPE (\DAYBREAK (\DoveDisplay.SetCursorShape CursorBitMap)) (\MAIKO (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR))) NIL]) (\HARDCURSORPOSITION [LAMBDA (XPOS YPOS) (* kbr%: "13-Jun-85 21:24") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS)) NIL]) (\HARDCURSORDOWN [LAMBDA NIL (* kbr%: "23-Apr-85 18:26") (\CLEARBM (CURSORBITMAP]) ) (DEFINEQ (CURSOR.INIT [LAMBDA NIL (* kbr%: "23-Jan-86 17:34") (PROG (DESTBPL) (* Assorted globals for doing the  color cursor. *) (SETQ \CURSORDESTINATION ScreenBitMap) (SETQ \SOFTCURSORUPBM NIL) (SETQ \SOFTCURSORDOWNBM NIL) (SETQ \CURSORDESTLINE 0) (SETQ \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of ScreenBitMap)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of ScreenBitMap)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of ScreenBitMap)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of ScreenBitMap)) (* Initialize PILOTBBTs.  *) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (* These PILOTBBTs are the mixing areas for forming the color cursor image.  *) (* Does SCREEN to DOWNBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT1 (create PILOTBBT PBTSOURCEBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT1) (* Does DOWNBM to UPBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT2 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT2) (* Does MASK to UPBM via INPUT,  ERASE. *) (SETQ \SOFTCURSORBBT3 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 1 PBTOPERATION _ 1)) (\LOCKCELL \SOFTCURSORBBT3) (* Does IMAGE to UPBM via INPUT,  PAINT. *) (SETQ \SOFTCURSORBBT4 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 2)) (\LOCKCELL \SOFTCURSORBBT4) (* Does UPBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT5 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT5) (* Does DOWNBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT6 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT6) (* Lock things down.  *) ]) (\CURSORDESTINATION [LAMBDA (DESTINATION) (* kbr%: " 2-Sep-85 20:13") (* Change DESTINATION of  \CURRENTCURSOR, assuming it is down.  *) (PROG (DESTBPL) (COND ((NOT (EQ DESTINATION \CURSORDESTINATION)) (UNINTERRUPTABLY [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CURSOR CUIMAGE) of \CURRENTCURSOR )) (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION))) (\CURSORBITSPERPIXEL \CURRENTCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION] (\SETMOUSEXY 0 0) (\PUTBASE \EM.CURSORX 0 0) (\PUTBASE \EM.CURSORY 0 0) (SETQ \CURSORDESTLINE 0) (SETQ.NOREF \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of DESTINATION)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of DESTINATION)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of DESTINATION)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of DESTINATION )) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT1 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT5 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT6 with DESTBPL) (SETQ \CURSORDESTINATION DESTINATION))]) (\SOFTCURSORUP [LAMBDA (NEWCURSOR) (* kbr%: " 2-Sep-85 20:15") (* Put soft NEWCURSOR up, assuming soft cursor is down.  *) (PROG (IMAGE MASK WIDTH BWIDTH HEIGHT CURSORBITSPERPIXEL CURSORBPL UPBMBASE DOWNBMBASE) (* Get cursor IMAGE & MASK.  *) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) (SETQ MASK (fetch (CURSOR CUMASK) of NEWCURSOR)) (SETQ WIDTH (fetch (BITMAP BITMAPWIDTH) of IMAGE)) (SETQ HEIGHT (fetch (BITMAP BITMAPHEIGHT) of IMAGE)) (SETQ CURSORBITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE)) (* Create new UPBM & DOWNBM caches  if necessary. *) (COND ((NOT (AND (type? BITMAP \SOFTCURSORUPBM) (EQ (fetch (BITMAP BITMAPWIDTH) of \SOFTCURSORUPBM) WIDTH) (EQ (fetch (BITMAP BITMAPHEIGHT) of \SOFTCURSORUPBM) HEIGHT) (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of \SOFTCURSORUPBM) CURSORBITSPERPIXEL))) (SETQ \SOFTCURSORWIDTH WIDTH) (SETQ \SOFTCURSORHEIGHT HEIGHT) (SETQ \SOFTCURSORUPBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ \SOFTCURSORDOWNBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ UPBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM)) (\TEMPLOCKPAGES UPBMBASE 1) (SETQ DOWNBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM)) (\TEMPLOCKPAGES DOWNBMBASE 1) (SETQ CURSORBPL (UNFOLD (fetch (BITMAP BITMAPRASTERWIDTH) of IMAGE) BITSPERWORD)) (SETQ BWIDTH (ITIMES (fetch (BITMAP BITMAPWIDTH) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE))) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT1 with CURSORBPL) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT2 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT2 with DOWNBMBASE) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT2 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT2 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT3 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT3 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT3 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT4 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT4 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT4 with HEIGHT) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT5 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT6 with CURSORBPL))) (* Change PILOTBBTs.  *) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT3 with (fetch (BITMAP BITMAPBASE ) of MASK)) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT4 with (fetch (BITMAP BITMAPBASE ) of IMAGE)) (* Put up new \CURRENTCURSOR.  *) (SETQ \CURRENTCURSOR NEWCURSOR) (\TEMPLOCKPAGES \CURRENTCURSOR 1) (SETQ \SOFTCURSORP T) (\SOFTCURSORUPCURRENT]) (\SOFTCURSORUPCURRENT [LAMBDA NIL (* kbr%: "18-Aug-85 15:09") (* Put soft \CURRENTCURSOR up, assuming soft cursor is down.  *) (PROG (DISPINTERRUPT X Y XBASE YBASE WIDTH HEIGHT BITSPERPIXEL MINUSDESTRASTERWIDTH DEST DESTBIT SOURCEOFFSET UPBMSOURCE DOWNBMSOURCE SOURCEBIT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP T) (* Roughly, we want to  (BITBLT CURSOR XBASE YBASE SCREEN X  Y WIDTH HEIGHT) *) (SETQ X (SIGNED (\GETBASE \EM.MOUSEX 0) BITSPERWORD)) (SETQ Y (SIGNED (\GETBASE \EM.MOUSEY 0) BITSPERWORD)) (SETQ XBASE 0) (SETQ YBASE 0) (SETQ WIDTH \SOFTCURSORWIDTH) (SETQ HEIGHT \SOFTCURSORHEIGHT) (* Clip off screen parts of cursor.  *) [COND ((IGREATERP 0 X) (* Some of cursor is to left of  screen. *) (SETQ XBASE (IMINUS X)) (SETQ WIDTH (IDIFFERENCE WIDTH XBASE)) (SETQ X 0)) ((IGREATERP (IPLUS X WIDTH) \CURSORDESTWIDTH) (* Some of cursor is to right of  screen. *) (SETQ WIDTH (IDIFFERENCE \CURSORDESTWIDTH X] (COND ((ILESSP WIDTH 0) (GO EXIT))) [COND ((IGREATERP 0 Y) (* Some of cursor is to above of  screen. *) (SETQ YBASE (IMINUS Y)) (SETQ HEIGHT (IDIFFERENCE HEIGHT YBASE)) (SETQ Y 0)) ((IGREATERP (IPLUS Y HEIGHT) \CURSORDESTHEIGHT) (* Some of cursor is to below of  screen. *) (SETQ HEIGHT (IDIFFERENCE \CURSORDESTHEIGHT Y] (COND ((ILESSP HEIGHT 0) (GO EXIT))) (* These loops reset \CURSORDESTLINEBASE while avoiding large number  arithmetic. *) [COND [(IGREATERP \CURSORDESTLINE Y) (SETQ MINUSDESTRASTERWIDTH (IMINUS \CURSORDESTRASTERWIDTH)) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (SUB1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE MINUSDESTRASTERWIDTH] ((ILESSP \CURSORDESTLINE Y) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (ADD1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE \CURSORDESTRASTERWIDTH] (* Reset PILOTBBTs.  *) (SETQ BITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of \CURRENTCURSOR)) (SETQ X (ITIMES BITSPERPIXEL X)) (SETQ XBASE (ITIMES BITSPERPIXEL XBASE)) (SETQ WIDTH (ITIMES BITSPERPIXEL WIDTH)) (SETQ DEST \CURSORDESTLINEBASE) (SETQ DESTBIT X) (SETQ SOURCEOFFSET (ITIMES YBASE (fetch (BITMAP BITMAPRASTERWIDTH) of \SOFTCURSORUPBM ))) (SETQ UPBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM) SOURCEOFFSET)) (SETQ DOWNBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM) SOURCEOFFSET)) (SETQ SOURCEBIT XBASE) (* TBW%: Most of these fields only need to be set if we are clipping this  time or the previous time we put the cursor up.  *) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT1 with DOWNBMSOURCE) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT1 with SOURCEBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT1 with DEST) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT1 with DESTBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT1 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT1 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT5 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT5 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT5 with UPBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT5 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT5 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT5 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT6 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT6 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT6 with DOWNBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT6 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT6 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT6 with HEIGHT) (* Save background behind cursor.  *) (\PILOTBITBLT \SOFTCURSORBBT1 0) (* Compute cursor appearance.  UPBM = (OR IMAGE (AND DOWNBM  (NOT MASK))) *) (\PILOTBITBLT \SOFTCURSORBBT2 0) (\PILOTBITBLT \SOFTCURSORBBT3 0) (\PILOTBITBLT \SOFTCURSORBBT4 0) (* Put color cursor up.  *) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT5 0) EXIT (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORPOSITION [LAMBDA (X Y) (* kbr%: "18-Aug-85 14:50") (* Move soft cursor.  *) (PROG (DISPINTERRUPT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) [COND ((OR (NOT (EQ (\GETBASE \EM.CURSORX 0) X)) (NOT (EQ (\GETBASE \EM.CURSORY 0) Y))) (COND (\SOFTCURSORUPP (\SOFTCURSORDOWN) (\SOFTCURSORUPCURRENT] (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORDOWN [LAMBDA NIL (* kbr%: " 6-Jul-85 00:09") (* Take COLOR cursor down.  *) (PROG (DISPINTERRUPT) (* \SOFTCURSORUPP must be set to NIL  before BITBLTing. *) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP NIL) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT6 0) (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (CURSORPROP [LAMBDA X (* kbr%: "11-Jan-86 20:03") (COND ((IGREATERP X 2) (PUTCURSORPROP (ARG X 1) (ARG X 2) (ARG X 3))) ((EQ X 2) (GETCURSORPROP (ARG X 1) (ARG X 2))) (T (\ILLEGAL.ARG NIL]) (GETCURSORPROP [LAMBDA (CURSOR PROP) (* kbr%: "26-Apr-85 11:18") (LISTGET (fetch (CURSOR CUDATA) of CURSOR) PROP]) (PUTCURSORPROP [LAMBDA (CURSOR PROP VALUE) (* kbr%: "26-Apr-85 11:18") (PROG (OLDDATA OLDVALUE) (SETQ OLDDATA (fetch (CURSOR CUDATA) of CURSOR)) [COND [OLDDATA (SETQ OLDVALUE (LISTGET OLDDATA PROP)) (COND (VALUE (LISTPUT OLDDATA PROP VALUE)) (OLDVALUE (COND [(EQ (CAR OLDDATA) PROP) (replace (CURSOR CUDATA) of CURSOR with (CDDR (fetch (CURSOR CUDATA) of CURSOR] (T (FOR TAIL ON (CDR OLDDATA) BY (CDDR TAIL) WHEN (EQ (CADR TAIL) PROP) DO (FRPLACD TAIL (CDDDR TAIL)) (RETURN] (VALUE (replace (CURSOR CUDATA) of CURSOR with (LIST PROP VALUE] (RETURN OLDVALUE]) (\CURSORBITSPERPIXEL [LAMBDA (CURSOR NEWBITSPERPIXEL) (* kbr%: "12-May-85 17:15") (* Swap in NEWBITSPERPIXEL IMAGE and MASK, creating them if necessary.  *) (PROG (OLDBITSPERPIXEL OLDIMAGE OLDMASK WHITE BLACK NEWIMAGE NEWMASK) (SETQ OLDBITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of CURSOR)) (COND ((EQ OLDBITSPERPIXEL NEWBITSPERPIXEL) (RETURN))) (* Save OLDIMAGE and OLDMASK.  *) (SETQ OLDIMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (SETQ OLDMASK (fetch (CURSOR CUMASK) of CURSOR)) (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME OLDBITSPERPIXEL) OLDIMAGE) (CURSORPROP CURSOR (\CURSORMASKPROPNAME OLDBITSPERPIXEL) OLDMASK) (* Unsave NEWIMAGE and NEWMASK if possible, otherwise create them.  *) [COND [(SETQ NEWIMAGE (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME NEWBITSPERPIXEL))) (* Use cached NEWIMAGE & NEWMASK.  *) (SETQ NEWMASK (CURSORPROP CURSOR (\CURSORMASKPROPNAME NEWBITSPERPIXEL] (T (* Create NEWIMAGE & NEWMASK.  *) (SETQ WHITE (MASK.1'S 0 NEWBITSPERPIXEL)) (SETQ BLACK 0) (SETQ NEWIMAGE (COLORIZEBITMAP (CURSORPROP CURSOR 'IMAGE1) BLACK WHITE NEWBITSPERPIXEL)) (SETQ NEWMASK (COLORIZEBITMAP (CURSORPROP CURSOR 'MASK1) BLACK WHITE NEWBITSPERPIXEL] (replace (CURSOR CUIMAGE) of CURSOR with NEWIMAGE) (replace (CURSOR CUMASK) of CURSOR with NEWMASK]) (\CURSORIMAGEPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'IMAGE1) (4 'IMAGE4) (8 'IMAGE8) (SHOULDNT]) (\CURSORMASKPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'MASK1) (4 'MASK4) (8 'MASK8) (SHOULDNT]) ) (DEFINEQ (CURSORCREATE [LAMBDA (IMAGE MASK HOTSPOTX HOTSPOTY DATA) (* ; "Edited 10-Jul-92 16:32 by cat") (* ; "Edited 31-Jul-87 10:01 by jds") (* ;; "creates a cursor from a bitmap. HOTSPOTX and HOTSPOTY specify the hotspot.") (* ;; "INVARIANTS: the hot spot X and Y must be in the range 0..(width - 1) and 0..(height - 1), respectively.") (PROG (CURSOR) (COND ((OR (FIXP MASK) (POSITIONP MASK)) (* ;; "If Mask is a fixp then we presume this is the old arg list (bitmap x y). the cursor filepkgtype has been changed to write the new arg list. The other is provided for (dubious) compatibility") (SETQ HOTSPOTY HOTSPOTX) (SETQ HOTSPOTX MASK) (SETQ MASK NIL))) (* ;; "Make sure that the image and mask bitmaps are no larger than the hardware cursor, i.e. 16x16 bits [AR 8916 7/31/87]:") (COND ((OR (IGREATERP (BITMAPWIDTH IMAGE) 16) (IGREATERP (BITMAPHEIGHT IMAGE) 16)) (* ; "IMAGE is too big.") (\ILLEGAL.ARG IMAGE)) ((NOT MASK) (* ; "No mask, so it's OK") ) ((OR (IGREATERP (BITMAPWIDTH MASK) 16) (IGREATERP (BITMAPHEIGHT MASK) 16)) (* ; "MASK is too big.") (\ILLEGAL.ARG MASK))) [COND ((POSITIONP HOTSPOTX) (* ;;  "The hot spot can be specified as a position in one arg, rather than X and Y in two:") (SETQ HOTSPOTY (fetch (POSITION YCOORD) of HOTSPOTX)) (SETQ HOTSPOTX (fetch (POSITION XCOORD) of HOTSPOTX] (SETQ CURSOR (create CURSOR CUIMAGE _ IMAGE CUMASK _ (OR MASK IMAGE) CUHOTSPOTX _ (IMAX 0 (IMIN (SUB1 (BITMAPWIDTH IMAGE)) (OR (FIXP HOTSPOTX) 0))) CUHOTSPOTY _ [IMAX 0 (IMIN (SUB1 (BITMAPHEIGHT IMAGE)) (OR (FIXP HOTSPOTY) (SUB1 (BITMAPHEIGHT IMAGE] CUDATA _ DATA)) (RETURN CURSOR]) (CURSOR [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 24-Mar-87 18:30 by jds") (* ;; "Installs NEWCURSOR as the cursor and returns the old cursor state. If INVERTFLG is non-NIL, the cursor image is inverted during installation. If NEWCURSOR is NIL, just returns the current cursor state.") (DECLARE (GLOBALVARS DEFAULTCURSOR \SOFTCURSORP)) (PROG (OLDCURSOR) (SETQ OLDCURSOR \CURRENTCURSOR) (COND ((EQ NEWCURSOR T) (* ;  "If NEWCURSOR is T, use the system default cursor.") (SETQ NEWCURSOR DEFAULTCURSOR))) (COND [(\CURSOR-VALID-P NEWCURSOR \SOFTCURSORP) (* ;  "Only install the cursor if it's a real, valid one.") (\CURSORDOWN) (\CURSORUP NEWCURSOR INVERTFLG) (* ;  "set after adjustment to avoid confusion about hotspot during adjustment.") (SETQ \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (SETQ \CURSORHOTSPOTY (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR] (NEWCURSOR (* ; "NEWCURSOR = NIL means just return the old one, so only error if one got specified that wasn't valid.") (\ILLEGAL.ARG NEWCURSOR))) (RETURN OLDCURSOR]) (\CURSOR-VALID-P [LAMBDA (CURSOR SOFT?) (* ; "Edited 25-Mar-87 09:41 by jds") (* ;; "It returns T if CURSOR is a valid cursor. Validity depends on whether it's meant to be displayed using the cursor hardware or the cursor software.") (* ;; "This is really wed to the D-machine display architecture. ") (AND (CURSORP CURSOR) (COND (SOFT? T) (T (LET ((IMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (HOTSPOT-X (fetch (CURSOR CUHOTSPOTX) of CURSOR)) (HOTSPOT-Y (fetch (CURSOR CUHOTSPOTY) of CURSOR))) (* ;; "The bitmap must be <= 16x16, and the hot spot must be within the cursor if we're using hardware cursor.") (AND (>= 16 (BITMAPWIDTH IMAGE)) (>= 16 (BITMAPHEIGHT IMAGE)) (<= 0 HOTSPOT-X) (< HOTSPOT-X 16) (<= 0 HOTSPOT-Y) (< HOTSPOT-Y 16]) (\CURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* kbr%: "18-Aug-85 14:38") (UNINTERRUPTABLY (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (COND ((AND (EQ (fetch (CURSOR CUIMAGE) of NEWCURSOR) (fetch (CURSOR CUMASK) of NEWCURSOR)) (ILEQ (fetch (BITMAP BITMAPWIDTH) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORWIDTH) (ILEQ (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORHEIGHT) (EQ \CURSORDESTINATION ScreenBitMap)) (\HARDCURSORUP NEWCURSOR INVERTFLG)) (T (\SOFTCURSORUP NEWCURSOR))) (ADJUSTCURSORPOSITION (IDIFFERENCE \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (IDIFFERENCE (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR)) \CURSORHOTSPOTY)))]) (\CURSORPOSITION [LAMBDA (XPOS YPOS) (* ; "Edited 19-Mar-98 14:41 by jds") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND (NIL (* ;; "Removed 2000/1/3 JDS so mousr cursors work.") (ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND (NIL (ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (COND (\SOFTCURSORP (\SOFTCURSORPOSITION XPOS YPOS))) [PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Need to notify DAYBREAK IOP to  move cursor. *) (\DoveDisplay.SetCursorPosition XPOS YPOS] NIL]) (\CURSORDOWN [LAMBDA NIL (* kbr%: "12-Jun-85 17:21") (UNINTERRUPTABLY (COND (\SOFTCURSORP (\SOFTCURSORDOWN)) (T (\HARDCURSORDOWN))))]) (ADJUSTCURSORPOSITION [LAMBDA (DELTAX DELTAY) (* kbr%: " 6-Jan-86 11:55") (COND [(POSITIONP DELTAX) (\CURSORPOSITION (IPLUS (fetch (POSITION XCOORD) of DELTAX) (\XMOUSECOORD)) (IPLUS (fetch (POSITION YCOORD) of DELTAX) (\YMOUSECOORD] (T (\CURSORPOSITION (IPLUS (OR DELTAX 0) (\XMOUSECOORD)) (IPLUS (OR DELTAY 0) (\YMOUSECOORD]) (CURSORPOSITION [LAMBDA (NEWPOSITION DISPLAYSTREAM OLDPOSITION) (* kbr%: "13-Feb-86 15:53") (PROG (DD) (SETQ DD (\GETDISPLAYDATA DISPLAYSTREAM)) (OR (type? POSITION OLDPOSITION) (SETQ OLDPOSITION (create POSITION))) (freplace (POSITION XCOORD) of OLDPOSITION with (\DSPUNTRANSFORMX (\XMOUSECOORD ) DD)) (freplace (POSITION YCOORD) of OLDPOSITION with (\DSPUNTRANSFORMY (\YMOUSECOORD ) DD)) (COND ((type? POSITION NEWPOSITION) (\CURSORPOSITION (\DSPTRANSFORMX (fetch (POSITION XCOORD) of NEWPOSITION) DD) (\DSPTRANSFORMY (fetch (POSITION YCOORD) of NEWPOSITION) DD))) ((type? SCREENPOSITION NEWPOSITION) (CURSORSCREEN (fetch (SCREENPOSITION SCREEN) of NEWPOSITION) (fetch (SCREENPOSITION XCOORD) of NEWPOSITION) (fetch (SCREENPOSITION YCOORD) of NEWPOSITION))) (NEWPOSITION (\ILLEGAL.ARG NEWPOSITION))) (RETURN OLDPOSITION]) (CURSORSCREEN [LAMBDA (SCREEN XCOORD YCOORD) (* gbn%: "25-Jan-86 16:53") (* * sets up SCREEN to be the current screen, XCOORD %, YCOORD is initial pos  of cursor on SCREEN) (COND ((NULL XCOORD) (SETQ XCOORD 0))) (COND ((NULL YCOORD) (SETQ YCOORD 0))) (PROG (DESTINATION) (SETQ DESTINATION (fetch (SCREEN SCDESTINATION) of SCREEN)) (\CURSORDOWN) (SETQ \CURSORSCREEN SCREEN) (\CURSORDESTINATION DESTINATION) (\CURSORUP \CURRENTCURSOR) (\CURSORPOSITION XCOORD YCOORD]) (CURSOREXIT [LAMBDA NIL (* gbn%: "25-Jan-86 16:52") (* * called when cursor moves off the screen edge) (DECLARE (GLOBALVARS LASTSCREEN LASTMOUSEX LASTMOUSEY)) (PROG (SCREEN XCOORD YCOORD SCREEN2 XCOORD2 YCOORD2) (SETQ SCREEN LASTSCREEN) (SETQ XCOORD LASTMOUSEX) (SETQ YCOORD LASTMOUSEY) (SETQ SCREEN2 (COND ((EQ SCREEN \MAINSCREEN) \COLORSCREEN) (T \MAINSCREEN))) (* generalize for more than two  screens (or alternate physical  arrangement of screens.)) (COND ((EQ XCOORD 0) (SETQ XCOORD2 (IDIFFERENCE (fetch (SCREEN SCWIDTH) of SCREEN2) 2))) ((EQ XCOORD (SUB1 (fetch (SCREEN SCWIDTH) of SCREEN))) (SETQ XCOORD2 1)) (T (RETURN))) [SETQ YCOORD2 (IQUOTIENT (ITIMES YCOORD (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN2)) ) (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN] (CURSORSCREEN SCREEN2 XCOORD2 YCOORD2]) (FLIPCURSOR [LAMBDA NIL (* ; "Edited 24-Apr-88 00:04 by MASINTER") (PROG (ADDR) (COND @@ -32,4 +32,4 @@ (fetch (CURSOR CUHOTSPOTY) of \CURRENTCURSOR )))) - NIL]) (LASTMOUSEX [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse x position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMX LASTMOUSEX (\GETDISPLAYDATA DS]) (LASTMOUSEY [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse y position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMY LASTMOUSEY (\GETDISPLAYDATA DS]) (CREATEPOSITION [LAMBDA (XCOORD YCOORD) (* rmk%: " 6-Aug-84 13:43") (create POSITION XCOORD _ (OR XCOORD 0) YCOORD _ (OR YCOORD 0]) (POSITIONP [LAMBDA (X) (* rrb "25-AUG-82 11:04") (* is X a position? For now just a cons check but should be made a datatype.) (AND (LISTP X) (NUMBERP (CAR X)) (NUMBERP (CDR X)) X]) (CURSORHOTSPOT [LAMBDA (NEWPOSITION) (* gbn%: "26-Jan-86 15:36") (* returns the current cursor hot spot and sets the hot spot to NEWPOSITON if  one is given.) (PROG1 (create POSITION XCOORD _ \CURSORHOTSPOTX YCOORD _ \CURSORHOTSPOTY) (COND ((POSITIONP NEWPOSITION) (SETQ \CURSORHOTSPOTX (fetch (POSITION YCOORD) of NEWPOSITION)) (SETQ \CURSORHOTSPOTY (fetch (POSITION YCOORD) of NEWPOSITION]) ) (PUTPROPS CURSORPROP ARGNAMES (NIL (CURSOR PROP {NEWVALUE}) . U)) (RPAQ? \CURSORHOTSPOTX 0) (RPAQ? \CURSORHOTSPOTY 0) (RPAQ? \CURRENTCURSOR NIL) (RPAQ? \SOFTCURSORWIDTH NIL) (RPAQ? \SOFTCURSORHEIGHT NIL) (RPAQ? \SOFTCURSORP NIL) (RPAQ? \SOFTCURSORUPP NIL) (RPAQ? \SOFTCURSORUPBM NIL) (RPAQ? \SOFTCURSORDOWNBM NIL) (RPAQ? \SOFTCURSORBBT1 NIL) (RPAQ? \SOFTCURSORBBT2 NIL) (RPAQ? \SOFTCURSORBBT3 NIL) (RPAQ? \SOFTCURSORBBT4 NIL) (RPAQ? \SOFTCURSORBBT5 NIL) (RPAQ? \SOFTCURSORBBT6 NIL) (RPAQ? \CURSORSCREEN NIL) (RPAQ? \CURSORDESTINATION NIL) (RPAQ? \CURSORDESTHEIGHT 808) (RPAQ? \CURSORDESTWIDTH 1024) (RPAQ? \CURSORDESTRASTERWIDTH 64) (RPAQ? \CURSORDESTLINE 0) (RPAQ? \CURSORDESTLINEBASE NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) ) (DEFINEQ (GETMOUSESTATE [LAMBDA NIL (* kbr%: " 6-Jul-85 14:16") (* Reads the current state of the  mouse and keyboard) (SETQ LASTMOUSEX (\XMOUSECOORD)) (SETQ LASTMOUSEY (\YMOUSECOORD)) (SETQ LASTMOUSEBUTTONS (LOGXOR (LOGAND (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) \MOUSE.ALLBITS) \MOUSE.ALLBITS)) (SETQ LASTKEYBOARD (\EVENTKEYS)) (SETQ LASTSCREEN \CURSORSCREEN) NIL]) (\EVENTKEYS [LAMBDA NIL (* rmk%: " 4-JUN-81 22:58") (* Returns the state of the various keys that are represented in mouse events) (LOGOR (COND ((KEYDOWNP 'LOCK) 128) (T 0)) (COND ((KEYDOWNP 'LSHIFT) 64) (T 0)) (COND ((KEYDOWNP 'CTRL) 32) (T 0)) (COND ((KEYDOWNP 'RSHIFT) 8) (T 0)) (COND ((KEYDOWNP 'BLANK-TOP) 4) (T 0)) (COND ((KEYDOWNP 'BLANK-MIDDLE) 2) (T 0)) (COND ((KEYDOWNP 'BLANK-BOTTOM) 1) (T 0]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (PUTPROPS \XMOUSECOORD MACRO (NIL (IPLUS \CURSORHOTSPOTX (SIGNED (\GETBASE \EM.CURSORX 0) BITSPERWORD)))) (PUTPROPS \YMOUSECOORD MACRO [NIL (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) (IPLUS \CURSORHOTSPOTY (SIGNED (\GETBASE \EM.CURSORY 0) BITSPERWORD]) ) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION) (RPAQ \SFPosition (CREATEPOSITION)) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (BLOCKRECORD KEYBOARDEVENT ((W0 WORD) (W1 WORD) (W2 WORD) (W3 WORD) (WU WORD) (W4 WORD) (W5 WORD) (TIME FIXP) (MOUSESTATE BITS 3) (1SHIFT FLAG) (2SHIFT FLAG) (LOCK FLAG) (CTRL FLAG) (META FLAG) (FONT FLAG) (USERMODE1 FLAG) (USERMODE2 FLAG) (USERMODE3 FLAG) (ALTGRAPH FLAG) (DEADKEYPENDING FLAG) (* ; "T if the last key was a dead (accent) key, and we should generate an accented character if possible.") (NIL BITS 2) (MOUSEX WORD) (MOUSEY WORD) (DEADKEY-ALIST XPOINTER) (* ;  "The ALIST describing accents possible from teh last dead key.") ) (CREATE (\ALLOCBLOCK (FOLDHI \KEYBOARDEVENT.SIZE WORDSPERCELL))) W0 _ ALLUP W1 _ ALLUP W2 _ ALLUP W3 _ ALLUP W4 _ ALLUP W5 _ ALLUP WU _ ALLUP MOUSESTATE _ \DLMOUSE.UP [ACCESSFNS KEYBOARDEVENT ((SIZE (INDEXF (fetch MOUSEY of DATUM))) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) DATUM) (fetch (KEYBOARDEVENT 2SHIFT) DATUM))) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT SHIFT) DATUM) (fetch (KEYBOARDEVENT LOCK) DATUM] LOCK _ (XKEYDOWNP 'LOCK) TIME _ 0 DEADKEYPENDING _ NIL) ) (DECLARE%: EVAL@COMPILE (RPAQ \KEYBOARDEVENT.FIRST NRINGINDEXWORDS) (RPAQQ \KEYBOARDEVENT.SIZE 14) (RPAQ \KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383))) [CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] ) ) (DEFINEQ (MACHINETYPE [LAMBDA NIL (* ; "Edited 30-Mar-88 10:27 by Snow") (SELECTC (fetch MachineType of \InterfacePage) (\DORADO 'DORADO) (\DANDELION 'DANDELION) (\DAYBREAK (* This is \DAYBREAK internally) 'DOVE) (\MAIKO 'MAIKO) NIL]) (SETMAINTPANEL [LAMBDA (N) (* mpl "21-Jul-85 18:15") (SELECTC \MACHINETYPE (\DANDELION (replace DLMAINTPANEL of \IOPAGE with N)) (\DOLPHIN ((OPCODES MISC1 3) (\DTEST N 'SMALLP))) (\DAYBREAK ((OPCODES DOVEMISC 2) (\DTEST N 'SMALLP))) NIL]) ) (* ; "DLion beeper") (DEFINEQ (BEEPON [LAMBDA (FREQ) (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPFREQ of \IOPAGE with (IQUOTIENT 1843200 (IMAX FREQ 29))) (replace DLBEEPCMD of \IOPAGE with 32768)) (\DAYBREAK (\DoveMisc.BeepOn FREQ)) (\MAIKO (SUBRCALL KEYBOARDBEEP T FREQ)) (PROGN NIL)) NIL]) (BEEPOFF [LAMBDA NIL (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPCMD of \IOPAGE with 32769)) (\DAYBREAK (\DoveMisc.BeepOff)) (\MAIKO (SUBRCALL KEYBOARDBEEP NIL NIL)) (PROGN NIL)) NIL]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (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) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (WITHOUT-INTERRUPTS [NLAMBDA (FORM) (* lmm "18-Apr-85 02:53") (PROG (VAL) (\KEYBOARDOFF) (SETQ VAL (DISPLAYDOWN FORM)) (\KEYBOARDON) (RETURN VAL]) ) (* ; "Compile locked fns together for locality") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN) ) (DECLARE%: DONTCOPY (ADDTOVAR INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND)))) (ADDTOVAR RDCOMS (FNS \SETIOPOINTERS)) ) (PUTPROPS LLKEY FILETYPE :BCOMPL) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML WITHOUT-INTERRUPTS) (ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT) ) (PUTPROPS LLKEY COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1989 1990 1992 1999 1920 2000 2018)) (DECLARE%: DONTCOPY (FILEMAP (NIL (14799 21895 (BKSYSCHARCODE 14809 . 15158) (\CLEARSYSBUF 15160 . 15718) (\GETKEY 15720 . 16895) (\NSYSBUFCHARS 16897 . 17537) (\SAVESYSBUF 17539 . 19151) (\SYSBUFP 19153 . 19457) ( \GETSYSBUF 19459 . 19639) (\PUTSYSBUF 19641 . 20855) (\PEEKSYSBUF 20857 . 21893)) (23192 59371 ( \KEYBOARDINIT 23202 . 24925) (\KEYBOARDEVENTFN 24927 . 29627) (\ALLOCLOCKED 29629 . 30219) ( \SETIOPOINTERS 30221 . 34690) (\KEYBOARDOFF 34692 . 35039) (\KEYBOARDON 35041 . 35353) (\KEYHANDLER 35355 . 35486) (\KEYHANDLER1 35488 . 42806) (\RESETKEYBOARD 42808 . 44317) (\DOMOUSECHORDING 44319 . 47990) (\DOTRANSITIONS 47992 . 48669) (\DECODETRANSITION 48671 . 55360) (MOUSECHORDWAIT 55362 . 56045) (\TRACKCURSOR 56047 . 59369)) (93113 116472 (KEYACTION 93123 . 93967) (KEYACTIONTABLE 93969 . 95151) (KEYBOARDTYPE 95153 . 96255) (RESETKEYACTION 96257 . 98016) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 98018 . 101425) (\KEYACTION1 101427 . 112048) (KEYDOWNP 112050 . 112385) (KEYNUMBERP 112387 . 112585) (\KEYNAMETONUMBER 112587 . 113281) (MODIFY.KEYACTIONS 113283 . 114144) (METASHIFT 114146 . 115090) ( SHIFTDOWNP 115092 . 116470)) (116535 116831 (SETUP.OFFICE.KEYBOARD 116545 . 116829)) (119841 121553 ( \INIT.KEYBOARD.STREAM 119851 . 121551)) (121818 138195 (\DOBUFFEREDTRANSITIONS 121828 . 137258) ( \TIMER.INTERRUPTFRAME 137260 . 137985) (\PERIODIC.INTERRUPTFRAME 137987 . 138193)) (138449 142526 ( \HARDCURSORUP 138459 . 140341) (\HARDCURSORPOSITION 140343 . 142379) (\HARDCURSORDOWN 142381 . 142524) ) (142527 166587 (CURSOR.INIT 142537 . 146237) (\CURSORDESTINATION 146239 . 148557) (\SOFTCURSORUP 148559 . 153813) (\SOFTCURSORUPCURRENT 153815 . 160851) (\SOFTCURSORPOSITION 160853 . 161618) ( \SOFTCURSORDOWN 161620 . 162328) (CURSORPROP 162330 . 162672) (GETCURSORPROP 162674 . 162862) ( PUTCURSORPROP 162864 . 164019) (\CURSORBITSPERPIXEL 164021 . 166137) (\CURSORIMAGEPROPNAME 166139 . 166363) (\CURSORMASKPROPNAME 166365 . 166585)) (166588 184538 (CURSORCREATE 166598 . 169273) (CURSOR 169275 . 171087) (\CURSOR-VALID-P 171089 . 172176) (\CURSORUP 172178 . 173893) (\CURSORPOSITION 173895 . 176423) (\CURSORDOWN 176425 . 176658) (ADJUSTCURSORPOSITION 176660 . 177238) (CURSORPOSITION 177240 . 178782) (CURSORSCREEN 178784 . 179440) (CURSOREXIT 179442 . 180833) (FLIPCURSOR 180835 . 181961) ( FLIPCURSORBAR 181963 . 182943) (LASTMOUSEX 182945 . 183199) (LASTMOUSEY 183201 . 183455) ( CREATEPOSITION 183457 . 183663) (POSITIONP 183665 . 183949) (CURSORHOTSPOT 183951 . 184536)) (185776 187324 (GETMOUSESTATE 185786 . 186445) (\EVENTKEYS 186447 . 187322)) (193751 194547 (MACHINETYPE 193761 . 194161) (SETMAINTPANEL 194163 . 194545)) (194577 195716 (BEEPON 194587 . 195240) (BEEPOFF 195242 . 195714)) (196167 196430 (WITHOUT-INTERRUPTS 196177 . 196428))))) STOP \ No newline at end of file + NIL]) (LASTMOUSEX [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse x position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMX LASTMOUSEX (\GETDISPLAYDATA DS]) (LASTMOUSEY [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse y position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMY LASTMOUSEY (\GETDISPLAYDATA DS]) (CREATEPOSITION [LAMBDA (XCOORD YCOORD) (* rmk%: " 6-Aug-84 13:43") (create POSITION XCOORD _ (OR XCOORD 0) YCOORD _ (OR YCOORD 0]) (POSITIONP [LAMBDA (X) (* rrb "25-AUG-82 11:04") (* is X a position? For now just a cons check but should be made a datatype.) (AND (LISTP X) (NUMBERP (CAR X)) (NUMBERP (CDR X)) X]) (CURSORHOTSPOT [LAMBDA (NEWPOSITION) (* gbn%: "26-Jan-86 15:36") (* returns the current cursor hot spot and sets the hot spot to NEWPOSITON if  one is given.) (PROG1 (create POSITION XCOORD _ \CURSORHOTSPOTX YCOORD _ \CURSORHOTSPOTY) (COND ((POSITIONP NEWPOSITION) (SETQ \CURSORHOTSPOTX (fetch (POSITION YCOORD) of NEWPOSITION)) (SETQ \CURSORHOTSPOTY (fetch (POSITION YCOORD) of NEWPOSITION]) ) (PUTPROPS CURSORPROP ARGNAMES (NIL (CURSOR PROP {NEWVALUE}) . U)) (RPAQ? \CURSORHOTSPOTX 0) (RPAQ? \CURSORHOTSPOTY 0) (RPAQ? \CURRENTCURSOR NIL) (RPAQ? \SOFTCURSORWIDTH NIL) (RPAQ? \SOFTCURSORHEIGHT NIL) (RPAQ? \SOFTCURSORP NIL) (RPAQ? \SOFTCURSORUPP NIL) (RPAQ? \SOFTCURSORUPBM NIL) (RPAQ? \SOFTCURSORDOWNBM NIL) (RPAQ? \SOFTCURSORBBT1 NIL) (RPAQ? \SOFTCURSORBBT2 NIL) (RPAQ? \SOFTCURSORBBT3 NIL) (RPAQ? \SOFTCURSORBBT4 NIL) (RPAQ? \SOFTCURSORBBT5 NIL) (RPAQ? \SOFTCURSORBBT6 NIL) (RPAQ? \CURSORSCREEN NIL) (RPAQ? \CURSORDESTINATION NIL) (RPAQ? \CURSORDESTHEIGHT 808) (RPAQ? \CURSORDESTWIDTH 1024) (RPAQ? \CURSORDESTRASTERWIDTH 64) (RPAQ? \CURSORDESTLINE 0) (RPAQ? \CURSORDESTLINEBASE NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) ) (DEFINEQ (GETMOUSESTATE [LAMBDA NIL (* kbr%: " 6-Jul-85 14:16") (* Reads the current state of the  mouse and keyboard) (SETQ LASTMOUSEX (\XMOUSECOORD)) (SETQ LASTMOUSEY (\YMOUSECOORD)) (SETQ LASTMOUSEBUTTONS (LOGXOR (LOGAND (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) \MOUSE.ALLBITS) \MOUSE.ALLBITS)) (SETQ LASTKEYBOARD (\EVENTKEYS)) (SETQ LASTSCREEN \CURSORSCREEN) NIL]) (\EVENTKEYS [LAMBDA NIL (* rmk%: " 4-JUN-81 22:58") (* Returns the state of the various keys that are represented in mouse events) (LOGOR (COND ((KEYDOWNP 'LOCK) 128) (T 0)) (COND ((KEYDOWNP 'LSHIFT) 64) (T 0)) (COND ((KEYDOWNP 'CTRL) 32) (T 0)) (COND ((KEYDOWNP 'RSHIFT) 8) (T 0)) (COND ((KEYDOWNP 'BLANK-TOP) 4) (T 0)) (COND ((KEYDOWNP 'BLANK-MIDDLE) 2) (T 0)) (COND ((KEYDOWNP 'BLANK-BOTTOM) 1) (T 0]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (PUTPROPS \XMOUSECOORD MACRO (NIL (IPLUS \CURSORHOTSPOTX (SIGNED (\GETBASE \EM.CURSORX 0) BITSPERWORD)))) (PUTPROPS \YMOUSECOORD MACRO [NIL (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) (IPLUS \CURSORHOTSPOTY (SIGNED (\GETBASE \EM.CURSORY 0) BITSPERWORD]) ) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION) (RPAQ \SFPosition (CREATEPOSITION)) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (BLOCKRECORD KEYBOARDEVENT ((W0 WORD) (W1 WORD) (W2 WORD) (W3 WORD) (WU WORD) (W4 WORD) (W5 WORD) (TIME FIXP) (MOUSESTATE BITS 3) (1SHIFT FLAG) (2SHIFT FLAG) (LOCK FLAG) (CTRL FLAG) (META FLAG) (FONT FLAG) (USERMODE1 FLAG) (USERMODE2 FLAG) (USERMODE3 FLAG) (ALTGRAPH FLAG) (DEADKEYPENDING FLAG) (* ; "T if the last key was a dead (accent) key, and we should generate an accented character if possible.") (NIL BITS 2) (MOUSEX WORD) (MOUSEY WORD) (DEADKEY-ALIST XPOINTER) (* ;  "The ALIST describing accents possible from teh last dead key.") ) (CREATE (\ALLOCBLOCK (FOLDHI \KEYBOARDEVENT.SIZE WORDSPERCELL))) W0 _ ALLUP W1 _ ALLUP W2 _ ALLUP W3 _ ALLUP W4 _ ALLUP W5 _ ALLUP WU _ ALLUP MOUSESTATE _ \DLMOUSE.UP [ACCESSFNS KEYBOARDEVENT ((SIZE (INDEXF (fetch MOUSEY of DATUM))) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) DATUM) (fetch (KEYBOARDEVENT 2SHIFT) DATUM))) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT SHIFT) DATUM) (fetch (KEYBOARDEVENT LOCK) DATUM] LOCK _ (XKEYDOWNP 'LOCK) TIME _ 0 DEADKEYPENDING _ NIL) ) (DECLARE%: EVAL@COMPILE (RPAQ \KEYBOARDEVENT.FIRST NRINGINDEXWORDS) (RPAQQ \KEYBOARDEVENT.SIZE 14) (RPAQ \KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383))) [CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] ) ) (DEFINEQ (MACHINETYPE [LAMBDA NIL (* ; "Edited 30-Mar-88 10:27 by Snow") (SELECTC (fetch MachineType of \InterfacePage) (\DORADO 'DORADO) (\DANDELION 'DANDELION) (\DAYBREAK (* This is \DAYBREAK internally) 'DOVE) (\MAIKO 'MAIKO) NIL]) (SETMAINTPANEL [LAMBDA (N) (* mpl "21-Jul-85 18:15") (SELECTC \MACHINETYPE (\DANDELION (replace DLMAINTPANEL of \IOPAGE with N)) (\DOLPHIN ((OPCODES MISC1 3) (\DTEST N 'SMALLP))) (\DAYBREAK ((OPCODES DOVEMISC 2) (\DTEST N 'SMALLP))) NIL]) ) (* ; "DLion beeper") (DEFINEQ (BEEPON [LAMBDA (FREQ) (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPFREQ of \IOPAGE with (IQUOTIENT 1843200 (IMAX FREQ 29))) (replace DLBEEPCMD of \IOPAGE with 32768)) (\DAYBREAK (\DoveMisc.BeepOn FREQ)) (\MAIKO (SUBRCALL KEYBOARDBEEP T FREQ)) (PROGN NIL)) NIL]) (BEEPOFF [LAMBDA NIL (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPCMD of \IOPAGE with 32769)) (\DAYBREAK (\DoveMisc.BeepOff)) (\MAIKO (SUBRCALL KEYBOARDBEEP NIL NIL)) (PROGN NIL)) NIL]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (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) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (WITHOUT-INTERRUPTS [NLAMBDA (FORM) (* lmm "18-Apr-85 02:53") (PROG (VAL) (\KEYBOARDOFF) (SETQ VAL (DISPLAYDOWN FORM)) (\KEYBOARDON) (RETURN VAL]) ) (* ; "Compile locked fns together for locality") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN) ) (DECLARE%: DONTCOPY (ADDTOVAR INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND)))) (ADDTOVAR RDCOMS (FNS \SETIOPOINTERS)) ) (PUTPROPS LLKEY FILETYPE :BCOMPL) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML WITHOUT-INTERRUPTS) (ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT) ) (PUTPROPS LLKEY COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1989 1990 1992 1999 1920 2000 2018 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (16213 23529 (BKSYSCHARCODE 16223 . 16572) (\CLEARSYSBUF 16574 . 17132) (\GETKEY 17134 . 18309) (\NSYSBUFCHARS 18311 . 19053) (\SAVESYSBUF 19055 . 20664) (\SYSBUFP 20666 . 20970) ( \GETSYSBUF 20972 . 21152) (\PUTSYSBUF 21154 . 22367) (\PEEKSYSBUF 22369 . 23527)) (24826 61660 ( \KEYBOARDINIT 24836 . 26556) (\KEYBOARDEVENTFN 26558 . 31258) (\ALLOCLOCKED 31260 . 31850) ( \SETIOPOINTERS 31852 . 36388) (\KEYBOARDOFF 36390 . 36804) (\KEYBOARDON 36806 . 37185) (\KEYHANDLER 37187 . 37318) (\KEYHANDLER1 37320 . 44766) (\RESETKEYBOARD 44768 . 46416) (\DOMOUSECHORDING 46418 . 50238) (\DOTRANSITIONS 50240 . 50917) (\DECODETRANSITION 50919 . 57608) (MOUSECHORDWAIT 57610 . 58274) (\TRACKCURSOR 58276 . 61658)) (95402 118761 (KEYACTION 95412 . 96256) (KEYACTIONTABLE 96258 . 97440) (KEYBOARDTYPE 97442 . 98544) (RESETKEYACTION 98546 . 100305) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 100307 . 103714) (\KEYACTION1 103716 . 114337) (KEYDOWNP 114339 . 114674) (KEYNUMBERP 114676 . 114874) (\KEYNAMETONUMBER 114876 . 115570) (MODIFY.KEYACTIONS 115572 . 116433) (METASHIFT 116435 . 117379) ( SHIFTDOWNP 117381 . 118759)) (118824 119120 (SETUP.OFFICE.KEYBOARD 118834 . 119118)) (121823 123535 ( \INIT.KEYBOARD.STREAM 121833 . 123533)) (123800 140177 (\DOBUFFEREDTRANSITIONS 123810 . 139240) ( \TIMER.INTERRUPTFRAME 139242 . 139967) (\PERIODIC.INTERRUPTFRAME 139969 . 140175)) (140431 144508 ( \HARDCURSORUP 140441 . 142323) (\HARDCURSORPOSITION 142325 . 144361) (\HARDCURSORDOWN 144363 . 144506) ) (144509 168569 (CURSOR.INIT 144519 . 148219) (\CURSORDESTINATION 148221 . 150539) (\SOFTCURSORUP 150541 . 155795) (\SOFTCURSORUPCURRENT 155797 . 162833) (\SOFTCURSORPOSITION 162835 . 163600) ( \SOFTCURSORDOWN 163602 . 164310) (CURSORPROP 164312 . 164654) (GETCURSORPROP 164656 . 164844) ( PUTCURSORPROP 164846 . 166001) (\CURSORBITSPERPIXEL 166003 . 168119) (\CURSORIMAGEPROPNAME 168121 . 168345) (\CURSORMASKPROPNAME 168347 . 168567)) (168570 186520 (CURSORCREATE 168580 . 171255) (CURSOR 171257 . 173069) (\CURSOR-VALID-P 173071 . 174158) (\CURSORUP 174160 . 175875) (\CURSORPOSITION 175877 . 178405) (\CURSORDOWN 178407 . 178640) (ADJUSTCURSORPOSITION 178642 . 179220) (CURSORPOSITION 179222 . 180764) (CURSORSCREEN 180766 . 181422) (CURSOREXIT 181424 . 182815) (FLIPCURSOR 182817 . 183943) ( FLIPCURSORBAR 183945 . 184925) (LASTMOUSEX 184927 . 185181) (LASTMOUSEY 185183 . 185437) ( CREATEPOSITION 185439 . 185645) (POSITIONP 185647 . 185931) (CURSORHOTSPOT 185933 . 186518)) (187758 189306 (GETMOUSESTATE 187768 . 188427) (\EVENTKEYS 188429 . 189304)) (195733 196529 (MACHINETYPE 195743 . 196143) (SETMAINTPANEL 196145 . 196527)) (196559 197698 (BEEPON 196569 . 197222) (BEEPOFF 197224 . 197696)) (198149 198412 (WITHOUT-INTERRUPTS 198159 . 198410))))) STOP \ No newline at end of file diff --git a/sources/LLKEY.LCOM b/sources/LLKEY.LCOM index b231786848a537c06c836064d5810dcac947a8ae..7f7c86870954f115261402af2422e2378ab2e855 100644 GIT binary patch delta 1697 zcmah}-)|d55XNbU2+C1tD`-h0rfvf^k}coa=h%i?y4>wu7T*u|b{!{@C6Xo_`& zC#U|pHGaFksHDv1^^}rPWRQy`IbX^Y;*f~1bvCwI?dCdkHX#n58m#i!`!_lp&2oEn zdwZ|kYPY&u<&EZgySZ2Hc6PVdn%%N(SIBbuy}2YvcaAPkuH9JO{HWQTEd~1rS57xv zw#?>hroN#045Z-xK|Z*C_^1c1O_1VFs07)x3g&LR4Qx+{?f~S6*`?FzIIOSkh@9g8 z_KTENwIr+Yq?9nJO?01VoEQ+7pIh2UDY^ft1(b}es5v+;26j5LB`L7(&YXtCB32R> zt$R*z_1>F3Fl@)GF)~j%8(_voI-+9kYc8Xldah|}76Z-ZmT!1?kKYja&EMf-_?tSs1>EdwQI=CEscTk*?8dX9n5k*W(D!6@^ z2=z5V;wH^txmcY{k4?@YDM-1&IFeeT0ofBd`Gzcz7g{0%BZ1{G4F6XB))!_V!0r8aVD9A z26Z{{{aTerqH5tezPU^gGta)R=4EJLqMqg(X`FaaRi(dmQ69g7*Jt~Y24*xs8Ney1 iacWby{}3L0)$jfAr{16Z_^U|rbWPN|(i8ZwiQCQ$;DnU^|rKGHWc{g6T%lOatz&4f%U z7Lj82f)d=ibSJ2zTeEQ`g8#tZP(@G>!Ry3UQFncd$K#%J?>pz-`|Y6b-Ivo3mMfWA zt+Y2Q#P~Gu@oZek@^J=OrtIxBYOYfOuMP}E?#SlC-D|e*H2vImso|FDIn^td+}w^+ zah<(*G?{a2exvL)ot*FOHp`BmQ`H5s8oip};NjD$YQ(wSX!_GxsC%u=TD=N2EUbmu zfay@!bzLy`Fu4VM`nRZPG|E7w)IurDpK)HuCKITa;Ua87QHex}Xc4(R+&{K|615QF zGZ`T@2j$IDz3TYT@=!FpBvKPXN0OnLu!h!jQ6nY?jiz&}=I#2SNTf1AGqYl&i9L zm5pV+pw4$O-PZDia!`N-6p1b?`n;lBgi^a`anO4+_%LzU)1$WEPhJ|RydB)wI(*V; zf0{J+Q?ORFEpye(+nAe}1M|9JtFmt4@RAuskIR@AP7#vn|HS45SVJe2=oab}B}*}M zNT%Z9F!F{-<)}t15t7NoU!mX)!}N`Xe!BHzfZL+lmZB;;7o3@Sb^q+~NG+plGw8hh zEbYsrU=%GyQ*IFY4+YrEl$aK*aKNg>0+y8su#%zUFW8rrBBCa$EMickNW&B2GTz9H r9IesOpIx3rLLSyz9JLK>hcd4llxU(vjh`igXJ0!5{Tvs;eTe)3|9u`k From 43372329cf80c3ad1340c92558cbea5406d306b8 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Fri, 12 Feb 2021 19:35:09 -0800 Subject: [PATCH 03/37] LLFAULT had init problems, cleaned up --- sources/LLFAULT | 2 +- sources/LLFAULT.LCOM | Bin 46819 -> 39720 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/LLFAULT b/sources/LLFAULT index 07031b64..c5cb6d3d 100644 --- a/sources/LLFAULT +++ b/sources/LLFAULT @@ -1 +1 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED " 2-Jan-93 12:26:58" {DSK}sybalsky>3-BYTE-ATOMS>LLFAULT.;1 550130Q changes to%: (VARS \MAXFILEPAGE) (FNS \MAIKO.FAULTINIT) previous date%: " 5-Nov-92 18:39:48" |{PELE:MV:ENVOS}SOURCES>LLFAULT.;8|) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT LLFAULTCOMS) (RPAQQ LLFAULTCOMS [(VARS (FAULTTEST T)) (COMS (* ;  "Bootstrap code, run once when an image is booted") (FNS \FAULTINIT \D01.FAULTINIT \D01.ASSIGNBUFFERS \MAIKO.FAULTINIT \MAIKO.NEWFAULTINIT \MAIKO.ASSIGNBUFFERS \M-VMEMSAVE \MAIKO.NEWPAGE) (* ;; "For setting up (and maybe eventually removing?) MAIKO-specific versions of the generic low-levle functions:") (FNS \MAIKO.DO.MOVDS) (ADDVARS (\MAIKO.MOVDS (TRUE \LOCKEDPAGEP) (\MAIKO.NEWPAGE \NEWPAGE) (\MAIKO.NEWPAGE \DONEWPAGE) (NILL \LOCKPAGES) (NILL \DOLOCKPAGES) (NILL \DOTEMPLOCKPAGES) (NILL \TEMPUNLOCKPAGES) (NILL \UNLOCKPAGES) (NILL \WRITEDIRTYPAGE) (NILL \DIRTYBACKGROUND) (ZERO \COUNTREALPAGES) (NILL \SHOWPAGETABLE) (NILL CHECKPAGEMAP) (EVQ \PAGEFAULT) (EVQ \LOADVMEMPAGE) (NILL \LOADVMEMPAGE) (TRUE \MOVEVMEMFILEPAGE) (TRUE \VALIDADDRESSP))) (FNS \DOVE.FAULTINIT \DL.FAULTINIT \DL.NEWFAULTINIT \DL.UNMAPPAGES \DL.MARK.PAGES.UNAVAILABLE \DL.ASSIGNBUFFERS \CHAIN.UP.RPT)) (COMS (* ; "Pagefault handler") (FNS \FAULTHANDLER \PAGEFAULT \INVALIDADDR \INVALIDVP \FLUSHPAGE \LOADVMEMPAGE \MOVEREALPAGE \LOOKUPPAGEMAP \VALIDADDRESSP \LOCKEDPAGEP \SELECTREALPAGE \SPECIALRP \TRANSFERPAGE \UPDATECHAIN)) (COMS (* ;  "Allocating and locking new pages") (FNS \NEWPAGE \DONEWPAGE \ASSURE.FPTOVP.PAGE \MAKESPACEFORLOCKEDPAGE \MOVEVMEMFILEPAGE \NEWEPHEMERALPAGE \DONEWEPHEMERALPAGE \LOCKPAGES \DOLOCKPAGES \TEMPLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \UNLOCKPAGES)) (COMS (* ; "Writing out the vmem") (FNS \FLUSHVM \LOGOUT0 \DOFLUSHVM \RELEASEWORKINGSET \WRITEDIRTYPAGE \WRITEDIRTYPAGE1 \COUNTREALPAGES)) (COMS (* ; "VMEM.PURE.STATE hack") (FNS \DOCOMPRESSVMEM VMEM.PURE.STATE)) (COMS (* ;; "Handling the backing store getting too full--keep running, but if we overflow, we can never \FLUSHVM because there is no place to write some pages") (FNS 32MBADDRESSABLE \SET.VMEM.FULL.STATE \SET.LASTVMEMFILEPAGE \DOVMEMFULLINTERRUPT \FLUSHVMOK?)) (INITVARS (\UPDATECHAINFREQ 100) (\PAGEFAULTCOUNTER 0) (\DIRTYPAGECOUNTER 0) (\DIRTYPAGEHINT 0) (\LASTACCESSEDVMEMPAGE 0) (\MAXSHORTSEEK 1000) (\MINSHORTSEEK 20) (\MAXCLEANPROBES 20) (\VMEM.INHIBIT.WRITE) (\VMEM.PURE.LIMIT) (\VMEM.FULL.STATE) (\GUARDVMEMFULL 500) (VMEM.COMPRESS.FLG) (\DOFAULTINIT 0) (\VMEMACCESSFN) (\SYSTEMCACHEVARS) (\MAXSWAPBUFFERS 1) (\EXTENDINGVMEMFILE) (\MaxScreenPage 0) (\NEWVMEMPAGEADDED)) (INITVARS (\LASTDIRTYCNT) (\LASTDIRTYFOUND) (\LASTDIRTYSCANPTR) (\DIRTYSEEKMAX 50)) (COMS (* ;  "Errors signaled in the maintenance panel") (FNS \MP.ERROR)) (COMS (* ;  "Debugging code. Some of this also runs renamed for extra TeleRaid help") (FNS \ACTONVMEMFILE \SHOWPAGETABLE CHECKPAGEMAP CHECKFPTOVP CHECKFPTOVP1 \PRINTFPTOVP \PRINTVP)) (E (RESETSAVE (RADIX 8))) (DECLARE%: EVAL@COMPILE DONTCOPY (MACROS \ACTONVMEMFILE .VMEM.CONSISTENTP. .LOCKABLERP.) (COMS (* ; "Virtual page flags") (CONSTANTS \VMAP.DIRTY \VMAP.CLEAN \VMAP.REF \VMAP.VACANT \VMAP.FLAGS \VMAP.NOTFLAGS) (RECORDS VMEMFLAGS) (MACROS LOGNOT16)) (COMS (* ; "RPT constants") (CONSTANTS \RPT.EMPTY \RPT.UNAVAILABLE \PAGETABLESTOPFLG \RPTENTRYLENGTH) (RECORDS RPT RPT1) (MACROS RPFROMRPT RPTFROMRP NPAGESMACRO)) (COMS (* ; "Virtual to file pagemap") (EXPORT (CONSTANTS \MAXFILEPAGE)) (CONSTANTS \EMPTYPMTENTRY) (RECORDS VP) (MACROS .PAGEMAPBASE.)) (COMS (* ; "FP to VP stuff") (RECORDS FPTOVP) (CONSTANTS \NO.VMEM.PAGE) (MACROS DLRPFROMFP DLFPFROMRP)) (PROP DOPVAL \TOUCHPAGE TIMES3) (COMS (* ; "Locked page table") (MACROS .LOCKEDVPBASE. .LOCKEDVPMASK.)) (CONSTANTS \MAXDIRTYSCANCOUNT \MINVMEMSPAREPAGES \DLBUFFERPAGES) (CONSTANTS 2MBPAGES) (GLOBALVARS \UPDATECHAINFREQ \REALPAGETABLE \RPTLAST \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \PAGEFAULTCOUNTER \LASTDIRTYCNT \LASTDIRTYFOUND \LASTDIRTYSCANPTR \MACHINETYPE \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYSEEKMAX \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \VMEMACCESSFN \SYSTEMCACHEVARS \LASTVMEMFILEPAGE \EXTENDINGVMEMFILE \MaxScreenPage \NEWVMEMPAGEADDED) (GLOBALVARS \#SWAPBUFFERS \#EMUBUFFERS \#DISKBUFFERS \MAXSWAPBUFFERS \EMUSWAPBUFFERS \EMUBUFFERS \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND) (MACROS RWMufMan) (CONSTANTS (DOLOCKCHECKS NIL))) [COMS (* ;;; "MAKEINIT stuff") (FNS ADDPME CHECKIFPAGE DUMPINITPAGES MAKEROOMFORPME MAPPAGES READPAGEMAP READPAGEMAPBLOCK SETUPPAGEMAP) (DECLARE%: DONTCOPY (MACROS CHECKIF) (ADDVARS (INEWCOMS (FNS DUMPINITPAGES) (VARS INITCONSTANTS) (FNS SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES)) (RDCOMS (FNS READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE \LOCKEDPAGEP \LOOKUPPAGEMAP CHECKPAGEMAP CHECKFPTOVP CHECKFPTOVP1 \SHOWPAGETABLE \PRINTFPTOVP)) (EXPANDMACROFNS CHECKIF .LOCKEDVPBASE. .LOCKEDVPMASK. .PAGEMAPBASE.) (MKI.SUBFNS (\NEWPAGE . MKI.NEWPAGE) (\LOCKPAGES . MKI.LOCKPAGES)) (RD.SUBFNS (\NEWPAGE . VNEWPAGE) (\LOCKPAGES . VLOCKPAGES)) (RDPTRS (\REALPAGETABLE)) (RDVALS (\RPTSIZE))) EVAL@COMPILE (ADDVARS (DONTCOMPILEFNS DUMPINITPAGES SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE] (FNS \LOCKFN \LOCKCODE \LOCKVAR \LOCKCELL \LOCKWORDS) [DECLARE%: DONTCOPY (ADDVARS (INEWCOMS (FNS \LOCKFN \LOCKVAR \LOCKCELL \LOCKWORDS \LOCKCODE) (ALLOCAL (ADDVARS (LOCKEDFNS \FAULTHANDLER \FAULTINIT \DOVE.FAULTINIT \D01.FAULTINIT \DL.FAULTINIT \CHAIN.UP.RPT \MAKESPACEFORLOCKEDPAGE \PAGEFAULT \WRITEMAP \LOOKUPPAGEMAP \LOCKEDPAGEP \LOADVMEMPAGE \MOVEREALPAGE \INVALIDADDR \INVALIDVP \SELECTREALPAGE \TRANSFERPAGE \SPECIALRP \UPDATECHAIN \MARKPAGEVACANT \FLUSHPAGE \CLEARWORDS \FLUSHVM \DONEWPAGE \ASSURE.FPTOVP.PAGE \DONEWEPHEMERALPAGE \WRITEDIRTYPAGE1 \COPYSYS0 \COPYSYS0SUBR \RELEASEWORKINGSET \DOFLUSHVM \DOLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \MP.ERROR RAID \DL.NEWFAULTINIT \DL.MARK.PAGES.UNAVAILABLE \DL.UNMAPPAGES \DL.ASSIGNBUFFERS \D01.ASSIGNBUFFERS \DOCOMPRESSVMEM \MOVEVMEMFILEPAGE \SET.VMEM.FULL.STATE \HINUM \LONUM \ATOMCELL SETTOPVAL) (LOCKEDVARS \REALPAGETABLE \RPTLAST \PAGEFAULTCOUNTER \UPDATECHAINFREQ \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \MACHINETYPE \VMEMACCESSFN \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND \MAXSWAPBUFFERS \EMUBUFFERS \#EMUBUFFERS \#SWAPBUFFERS \#DISKBUFFERS \RCLKSECOND \RCLKMILLISECOND \VALSPACE \EMUSWAPBUFFERS \EM.CURSORBITMAP \PAGEMAP \PageMapTBL \IOCBPAGE \IOPAGE \MISCSTATS \DEFSPACE \InterfacePage \LASTVMEMFILEPAGE \DoveIORegion \MaxScreenPage \NEWVMEMPAGEADDED] (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA VMEM.PURE.STATE]) (RPAQQ FAULTTEST T) (* ; "Bootstrap code, run once when an image is booted") (DEFINEQ (\FAULTINIT [LAMBDA NIL (* ; "Edited 30-Mar-88 17:30 by Snow") (* ;;; "retrieves some constants from Interface page for the swapper and performs other initialization that must happen immediately. Called when starting up, and also when \FAULTHANDLER context starts, in case init hasn't happened yet, as e.g. from MAKEINIT") (SETQ \MACHINETYPE (fetch MachineType of \InterfacePage)) [PROG NIL (COND ((EQ \MACHINETYPE \MAIKO) (\MAIKO.FAULTINIT) (RETURN NIL))) (OR (NEQ (fetch FPTOVPStart of \InterfacePage) 0) (\MP.ERROR \MP.OBSOLETEVMEM "No FPTOVP")) (COND ((AND (NEQ 0 (fetch (IFPAGE FullSpaceUsed) of \InterfacePage)) (SELECTC \MACHINETYPE (\DORADO NIL) (\DANDELION (EQ 0 (fetch (IFPAGE DL24BitAddressable) of \InterfacePage ))) (\DAYBREAK NIL) T)) (\MP.ERROR \MP.32MBINUSE "Sysout contains virtual pages not addressable by machine" ))) (SETQ \LASTDIRTYSCANPTR) (SELECTC \MACHINETYPE (\DANDELION (\DL.FAULTINIT)) (\DAYBREAK (\DOVE.FAULTINIT)) (\D01.FAULTINIT)) (* ;  "Have to set \EM.CURSORBITMAP before faults can happen") (* ;; "But you can't call \SETIOPOINTERS on a Daybreak until after the Dove IO Region is mapped, which happens in \DL.NEWFAULTINIT") (\SETIOPOINTERS) (COND ((IGREATERP (fetch (IFPAGE NActivePages) of \InterfacePage) (IDIFFERENCE \LASTVMEMFILEPAGE \GUARDVMEMFULL)) (* ; "Vmem getting full!") (\SET.VMEM.FULL.STATE] (COND ((EQ (PROG1 \DOFAULTINIT (SETQ \DOFAULTINIT NIL)) T) (* ;  "true after \FLUSHVM. Need to rebuild some contexts") (replace (IFPAGE KbdFXP) of \InterfacePage with (\MAKEFRAME (COND ((fetch (LITATOM CCODEP) of '\KEYHANDLER) (FUNCTION \KEYHANDLER)) (T '\DUMMYKEYHANDLER)) \KBDSTACKBASE (IPLUS \KBDSTACKBASE \StackAreaSize) 0 0)) (replace (IFPAGE MiscFXP) of \InterfacePage with (\MAKEFRAME (FUNCTION \DOMISCAPPLY) \MISCSTACKBASE (IPLUS \MISCSTACKBASE \StackAreaSize) 0 0)) T]) (\D01.FAULTINIT [LAMBDA NIL (* bvm%: "20-Oct-86 18:19") (SETQ \VMEMACCESSFN (FUNCTION \M44ACTONVMEMFILE)) (SETQ \REALPAGETABLE (fetch (IFPAGE REALPAGETABLEPTR) of \InterfacePage)) (* ;; "Note: these SETQ's do not reference count, since the values are all smallp's and emulator addresses (in atom space)") (SETQ \RPOFFSET (SIGNED (fetch (IFPAGE RPOFFSET) of \InterfacePage) BITSPERWORD)) (SETQ \RPTSIZE (fetch (IFPAGE RPTSIZE) of \InterfacePage)) (* ;  "Initialize the software clocks from alto emulator") (\BLT (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) (EMADDRESS \RTCSECONDS) (UNFOLD 3 WORDSPERCELL)) [SETQ \RCLKMILLISECOND (CONSTANT (OR (SMALLP \ALTO.RCLKMILLISECOND) (ERROR \ALTO.RCLKMILLISECOND "\ALTO.RCLKMILLISECOND isn't a SMALLP???"] (* ;;; "\ALTO.RCLKMILLISECOND must be a SMALLP here so as not to cause any refcnt or pagefault activity. \RCLKSECOND is large and has to live on \MISCSTATS, since there is no convenient way to lock a random cell.") (SETQ.NOREF \RCLKSECOND (LOCF (fetch RCLKSECOND of \MISCSTATS))) (* ;;; "Note the SETQ.NOREF for \RCLKSECOND in order to guarantee no refcnt'ing (which might pagefault) Note that these LOADBYTE expressions are compiled as constants") (replace (FIXP HINUM) of \RCLKSECOND with (LOADBYTE \ALTO.RCLKSECOND 16 16)) (replace (FIXP LONUM) of \RCLKSECOND with (LOADBYTE \ALTO.RCLKSECOND 0 16)) [COND ((AND (EQ \MACHINETYPE \DORADO) (ILEQ 5124 (fetch RVersion of \InterfacePage))) (replace NSHost0 of \InterfacePage with 0) (replace NSHost1 of \InterfacePage with 21898) (replace NSHost2 of \InterfacePage with (IPLUS (MASK.1'S 15 1) (for I (N _ 0) from 1168 to 1175 do (* ;  "Mufflers `2220Q' thru `2227Q' hold the bits of the basic serial number") [SETQ N (IPLUS (LLSH N 1) (COND ((BITTEST (RWMufMan I) (MASK.1'S 15 1)) 0) (T 1] finally (RETURN N] (\CHAIN.UP.RPT) (\D01.ASSIGNBUFFERS]) (\D01.ASSIGNBUFFERS [LAMBDA NIL (* bvm%: "20-Oct-86 18:21") (PROGN (* ; "Assign swap buffer") (SETQ \EMBUFVP (fetch (IFPAGE EMBUFVP) of \InterfacePage)) (SETQ \EMBUFBASE (EMPOINTER (UNFOLD \EMBUFVP WORDSPERPAGE))) (SETQ \EMBUFRP (\READRP \EMBUFVP))) (PROG ((EMBUF (fetch (IFPAGE EMUBUFFERS) of \InterfacePage)) (EMLEN (fetch (IFPAGE EMUBUFLENGTH) of \InterfacePage)) EXTRALEN NPAGES) [add EMLEN (IDIFFERENCE EMBUF (SETQ EMBUF (CEIL EMBUF WORDSPERPAGE] (* ;  "Round up to a page boundary and throw out the excess") (SETQ EXTRALEN (IMOD EMLEN WORDSPERPAGE)) (add EXTRALEN (COND ((ILESSP EXTRALEN 100) (TIMES 2 WORDSPERPAGE)) (T WORDSPERPAGE))) (SETQ NPAGES (FOLDLO (SETQ EMLEN (IDIFFERENCE EMLEN EXTRALEN)) WORDSPERPAGE)) (OR (IGEQ NPAGES 4) (RAID "No swap buffer space")) (SETQ \TELERAIDBUFFER (EMPOINTER EMBUF)) (SETQ \EMUBUFFERS (\ADDBASE \TELERAIDBUFFER WORDSPERPAGE)) (SETQ \#EMUBUFFERS (SETQ NPAGES (SUB1 NPAGES))) (SETQ \#SWAPBUFFERS (IMIN \MAXSWAPBUFFERS (IQUOTIENT NPAGES 2))) (SETQ \#DISKBUFFERS (IDIFFERENCE \#EMUBUFFERS \#SWAPBUFFERS)) (SETQ \EMUDISKBUFFERS \EMUBUFFERS) (SETQ \EMUDISKBUFEND (\ADDBASE \EMUDISKBUFFERS (UNFOLD \#DISKBUFFERS WORDSPERPAGE))) (SETQ \EMUSWAPBUFFERS \EMUDISKBUFEND) (\INITBFS (\ADDBASE \EMUBUFFERS (UNFOLD NPAGES WORDSPERPAGE)) EXTRALEN T]) (\MAIKO.FAULTINIT [LAMBDA NIL (* ; "Edited 2-Jan-93 12:25 by jds") (SETQ \VMEMACCESSFN (FUNCTION NILL)) (* ; "This variable must be the name of function that may be ACTONVMEMFILE that may write back from VP to FP. But , in Katana type, this function may be required (by tt)") (SETQ \IOCBPAGE (create POINTER PAGE# _ \VP.IOCBS)) (* ;; "MOVD all the Maiko-specific low-level functions onto their generic counterparts:") (\MAIKO.DO.MOVDS) (\MAIKO.NEWFAULTINIT) (SETQ \RCLKMILLISECOND 1000) (SETQ \RCLKSECOND 1000000) (\RCLK (LOCF (fetch BASECLOCK of \MISCSTATS))) (* ; "Reset base clock ") (\PUTBASEPTR (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) 0 NIL) (* ; "Clear the seconds timer (by tt)") (\PUTBASEPTR (LOCF (fetch MILLISECONDSCLOCK of \MISCSTATS)) 0 NIL) (* ; "Clear the milliseconds timer") (* SETQ \LASTVMEMFILEPAGE  (fetch (IFPAGE DLLastVmemPage) of  \InterfacePage)) (\SETIOPOINTERS]) (\MAIKO.NEWFAULTINIT [LAMBDA NIL (* ; "Edited 26-Feb-88 14:07 by Osamu Nakamura") (* ;; "We have just started up on a Katana. Boot code (SYSOUT Loader) may map FP to VP(VP is same map to RP). Therefore, in this function, only done the initialization of the gloval variables (particularly, the variables about Buffers). And, there is not /REALPAGETABLE in Katana.") (PROG ((NBUFFERS (IDIFFERENCE \DLBUFFERPAGES 2))) (* ; "Allocate buffers") (\MAIKO.ASSIGNBUFFERS (create POINTER PAGE# _ \VP.BUFFERS) NBUFFERS]) (\MAIKO.ASSIGNBUFFERS [LAMBDA (BASE NPAGES) (* ; "Edited 14-May-88 18:31 by JMTurn") (PROGN (* ;  "Allocate a page to hold name and password, and perhaps other ephemeral things") (replace (IFPAGE UserNameAddr) of \InterfacePage with (\LOLOC (\ADDBASE BASE 1 ))) (replace (IFPAGE UserPswdAddr) of \InterfacePage with (\LOLOC (\ADDBASE BASE 33))) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -1)) (PROGN (* ; "Assign swap buffer") (SETQ \EMBUFBASE BASE) (SETQ \EMBUFVP (fetch (POINTER PAGE#) of BASE)) (SETQ \EMBUFRP \EMBUFVP) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -1)) (PROGN (* ; "Assign ether buffers") (replace (IFPAGE MDSZoneLength) of \InterfacePage with (UNFOLD 2 WORDSPERPAGE) ) (replace (IFPAGE MDSZone) of \InterfacePage with (\LOLOC BASE)) (SETQ BASE (\ADDBASE BASE (UNFOLD 2 WORDSPERPAGE))) (SETQ \TELERAIDBUFFER BASE) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -3)) (PROGN (* ; "Divvy up buffer space") (SETQ \#SWAPBUFFERS (SETQ \#EMUBUFFERS NPAGES)) (SETQ \#DISKBUFFERS 0) (SETQ \EMUSWAPBUFFERS (SETQ \EMUBUFFERS BASE]) (\M-VMEMSAVE [LAMBDA NIL (* ; "Edited 20-Apr-88 10:28 by MASINTER") (PROG ((SCRATCHBUF \EMUSWAPBUFFERS)) (replace (IFPAGE MISCSTACKRESULT) of \InterfacePage with T) [COND (\VMEM.PURE.LIMIT (* ;  "Maintaining file consistency: move high water mark up") (COND (VMEM.COMPRESS.FLG (\DOCOMPRESSVMEM))) (SETQ \VMEM.PURE.LIMIT (fetch (IFPAGE NActivePages) of \InterfacePage] (COND ((.VMEM.CONSISTENTP.) (replace (IFPAGE Key) of \InterfacePage with (LOGNOT16 \IFPValidKey)) (* ;  "Invalidate vmem and write out the Interface page") (* ;; "following form doesn't eval for KATANA (\TRANSFERPAGE IFPVP \FirstVmemBlock (RPTFROMRP (\READRP IFPVP)) T NIL)") )) (replace (IFPAGE Key) of \InterfacePage with \IFPValidKey) (\BLT SCRATCHBUF \InterfacePage WORDSPERPAGE) (* ;  "Make its current fx point at user context, i.e. the \FLUSHVM frame") (replace (IFPAGE CurrentFXP) of SCRATCHBUF with (fetch (IFPAGE MiscFXP) of \InterfacePage)) (SUBRCALL VMEMSAVE) (RETURN NIL]) (\MAIKO.NEWPAGE [LAMBDA (BASE NOERROR LOCK?) (* ; "Edited 20-Apr-88 10:28 by MASINTER") (SUBRCALL NEWPAGE BASE]) ) (* ;; "For setting up (and maybe eventually removing?) MAIKO-specific versions of the generic low-levle functions:" ) (DEFINEQ (\MAIKO.DO.MOVDS [LAMBDA NIL (* ;  "Edited 2-Nov-92 03:57 by sybalsky:mv:envos") (* ;; "MOVD all the Maiko-specific low-level functions onto their generic counterparts. This function is called from \MAIKO.FAULTINIT when the system is started up, and called explicitly during the LOADUP process to get everything in a state to run the ethernet.") (* ;; "THIS IS WHERE CHANGES SHOULD HAPPEN TO MAKE SUN LOADUPS RUN ON D-MACHINES (BY ADDING A \MAIKO.UNDO.MOVDS CALL AT VMEM SAVING TIME, AND ADDING A SYBMOL TO SAVE THE GENERIC DEFINITION ON TO THE MOVDS LIST.") (FOR PAIR IN \MAIKO.MOVDS DO (* ;; "This is like MOVD, but absolutely no consing is done, frame names are not changed, etc. So that no CONSING happens before all the MOVDs are finished -- prevents new-page allocation.") (LET [(FROMCELL (fetch (LITATOM DEFINITIONCELL) of (CAR PAIR))) (TOCELL (fetch (LITATOM DEFINITIONCELL) of (CADR PAIR] (UNINTERRUPTABLY (replace (DEFINITIONCELL DEFPOINTER) of TOCELL with (fetch (DEFINITIONCELL DEFPOINTER) of FROMCELL)) (replace (DEFINITIONCELL DEFCELLFLAGS) of TOCELL with (fetch (DEFINITIONCELL DEFCELLFLAGS) of FROMCELL)) (replace (DEFINITIONCELL AUXDEFCELLFLAGS) of TOCELL with (fetch (DEFINITIONCELL AUXDEFCELLFLAGS) of FROMCELL)))]) ) (ADDTOVAR \MAIKO.MOVDS (TRUE \LOCKEDPAGEP) (\MAIKO.NEWPAGE \NEWPAGE) (\MAIKO.NEWPAGE \DONEWPAGE) (NILL \LOCKPAGES) (NILL \DOLOCKPAGES) (NILL \DOTEMPLOCKPAGES) (NILL \TEMPUNLOCKPAGES) (NILL \UNLOCKPAGES) (NILL \WRITEDIRTYPAGE) (NILL \DIRTYBACKGROUND) (ZERO \COUNTREALPAGES) (NILL \SHOWPAGETABLE) (NILL CHECKPAGEMAP) (EVQ \PAGEFAULT) (EVQ \LOADVMEMPAGE) (NILL \LOADVMEMPAGE) (TRUE \MOVEVMEMFILEPAGE) (TRUE \VALIDADDRESSP)) (DEFINEQ (\DOVE.FAULTINIT [LAMBDA NIL (* ; "Edited 18-Sep-87 16:01 by bvm:") (DECLARE (GLOBALVARS \RCLKMILLISECOND \RCLKSECOND)) (SETQ \VMEMACCESSFN (FUNCTION \DOVE.ACTONVMEMFILE)) (SETQ \IOCBPAGE (create POINTER PAGE# _ \VP.IOCBS)) (COND ((NOT (.VMEM.CONSISTENTP.)) (\MP.ERROR \MP.INVALIDVMEM))) (SETMAINTPANEL 1188) (\DL.NEWFAULTINIT) (SETMAINTPANEL 1189) (SETQ \RCLKMILLISECOND \DOVE.RCLKMILLISECOND) (SETQ.NOREF \RCLKSECOND (LOCF (fetch RCLKSECOND of \MISCSTATS))) (* ;  "Unfortunately, \DOVE.RCLKSECOND is not smallp") (replace (FIXP HINUM) of \RCLKSECOND with (CONSTANT (\HINUM \DOVE.RCLKSECOND))) (replace (FIXP LONUM) of \RCLKSECOND with (CONSTANT (\LONUM \DOVE.RCLKSECOND))) (\RCLK (LOCF (fetch BASECLOCK of \MISCSTATS))) (* ; "Reset base clock") (\DoveMisc.ReadGMT (LOCF (fetch SECONDSCLOCK of \MISCSTATS))) (SETMAINTPANEL 1190) (\PUTBASEPTR (LOCF (fetch MILLISECONDSCLOCK of \MISCSTATS)) 0 NIL) (* ; "Clear the milliseconds timer") (\DoveMisc.ReadHostID (LOCF (fetch NSHost0 of \InterfacePage))) (SETMAINTPANEL 1191) [SETQ \LASTVMEMFILEPAGE (COND (NIL (* ; "For now, don't assume vmem is any bigger than the part in use now. Local file system init will set it to the truth.") (SETQ \VMEM.FULL.STATE 0)(* ; "Flag to keep pages from being written off the end. Setting it now prevents bogus vmem full interrupt at startup time.") (fetch (IFPAGE NActivePages) of \InterfacePage)) (T (* ;  "Microcode is supposed to fill this in") (fetch (IFPAGE DLLastVmemPage) of \InterfacePage] (\DoveDisk.Init) (SETMAINTPANEL 1192) (\DoveDisplay.TurnOn]) (\DL.FAULTINIT [LAMBDA NIL (* bvm%: "20-Oct-86 18:22") (SETQ \VMEMACCESSFN (FUNCTION \DL.ACTONVMEMFILE)) (SETQ \IOCBPAGE (create POINTER PAGE# _ \VP.IOCBS)) (COND ((NOT (.VMEM.CONSISTENTP.)) (\MP.ERROR \MP.INVALIDVMEM))) (\DL.NEWFAULTINIT) (SETQ \RCLKMILLISECOND \DLION.RCLKMILLISECOND) (* ;  "These are fortunately both small") (SETQ \RCLKSECOND \DLION.RCLKSECOND) (\RCLK (LOCF (fetch BASECLOCK of \MISCSTATS))) (* ; "Reset base clock") [COND ((EQ (fetch DLTODVALID of \IOPAGE) 0) (* ;  "Time not valid, so store zero in the clock") (\PUTBASEPTR (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) 0 NIL)) (T (bind TMP (BASE _ (LOCF (fetch SECONDSCLOCK of \MISCSTATS))) do (* ;  "Loop until clock reads the same as we wrote, in case it was being updated") (\PUTBASE BASE 1 (SETQ TMP (fetch DLTODLO of \IOPAGE))) (\PUTBASE BASE 0 (fetch DLTODHI of \IOPAGE)) repeatuntil (EQ (fetch DLTODLO of \IOPAGE) TMP] (\PUTBASEPTR (LOCF (fetch MILLISECONDSCLOCK of \MISCSTATS)) 0 NIL) (* ; "Clear the milliseconds timer") (repeatwhile (IGEQ (fetch DLPROCESSORCMD of \IOPAGE) \DL.PROCESSORBUSY)) (* ; "Wait for IOP readiness") (replace DLPROCESSORCMD of \IOPAGE with \DL.READPID) (* ;  "Ask it to give the processor ID (3 words)") (repeatwhile (IGEQ (fetch DLPROCESSORCMD of \IOPAGE) \DL.PROCESSORBUSY)) (replace NSHost0 of \InterfacePage with (fetch DLPROCESSOR0 of \IOPAGE)) (replace NSHost1 of \InterfacePage with (fetch DLPROCESSOR1 of \IOPAGE)) (replace NSHost2 of \InterfacePage with (fetch DLPROCESSOR2 of \IOPAGE)) (SETQ \LASTVMEMFILEPAGE (fetch (IFPAGE DLLastVmemPage) of \InterfacePage)) (\DL.DISKINIT T]) (\DL.NEWFAULTINIT [LAMBDA NIL (* ; "Edited 21-Oct-87 15:40 by bvm:") (* ;; "We have just started up on a DLion or Daybreak. Boot code has loaded the first n pages of the sysout into pages 2 thru n-3, except for the area covered by the map and IO page, and has built the map accordingly. Our principal task is to build \REALPAGETABLE") (PROG ((NREALPAGES (fetch (IFPAGE NRealPages) of \InterfacePage)) (FIRSTBUFFERRP \RP.STARTBUFFERS) (SCRATCHVP \VP.INITSCRATCH) (SCRATCHBASE (create POINTER PAGE# _ \VP.INITSCRATCH)) FIRSTUSEFULRP IFPAGERP IOCBRP RPTBASE VP RPTPAGES FIRSTRP NDISPLAYPAGES) [do (COND ((for I from 0 to (SUB1 \DLBUFFERPAGES) as (FPBASE _ (\ADDBASE \FPTOVP (DLFPFROMRP FIRSTBUFFERRP))) by (\ADDBASE FPBASE 1) do (COND ([OR (NOT (fetch FPOCCUPIED of FPBASE)) (\LOCKEDPAGEP (SETQ VP (fetch FPVIRTUALPAGE of FPBASE] (* ;; "Can't use as buffer. This is just a check for consistency; you should pick \RP.STARTBUFFERS so that this isn't a problem") (RETURN T))) (* ;  "Unmap this page so we can use it for buffers") (\WRITEMAP VP 0 \VMAP.VACANT))(* ; "Bad starting place, try again") (add FIRSTBUFFERRP 1)) (T (RETURN] (SETQ FIRSTUSEFULRP (+ FIRSTBUFFERRP \DLBUFFERPAGES)) (PROGN (* ;  "Copy vital info that booting left in page 1") [COND ((EQ \MACHINETYPE \DAYBREAK) (* ;; "Use first buffer page for IOCB page. Used to have to place this in a real page whose page-in-segment number was the same as that of \VP.IOCBS, but that constraint is now lifted for Daybreak.") (SETQ IOCBRP FIRSTBUFFERRP) (add FIRSTBUFFERRP 1)) (T (SETQ IOCBRP (+ (LOGAND (SUB1 (IMIN NREALPAGES 3072)) 65280) \VP.IOCBS)) (* ;; "Put IOCB page near the end of memory, but in the first 1.5 mb so that Burdock can see it. Temporary until Steve fixes swap code to not care what RP contains IOCB's") [SETQ VP (fetch FPVIRTUALPAGE of (\ADDBASE \FPTOVP (DLFPFROMRP IOCBRP] (COND ((\LOCKEDPAGEP VP) (\MP.ERROR \MP.IOCBPAGE)) (T (* ;  "Unmap whoever lived in our target page") (\WRITEMAP VP 0 \VMAP.VACANT] (\WRITEMAP \VP.IOCBS IOCBRP \VMAP.CLEAN) (\WRITEMAP SCRATCHVP 1 \VMAP.CLEAN) (\BLT \IOCBPAGE SCRATCHBASE WORDSPERPAGE)) (PROGN (* ;  "Copy InterfacePage out of segment zero") (\WRITEMAP SCRATCHVP FIRSTBUFFERRP \VMAP.CLEAN) (\BLT SCRATCHBASE \InterfacePage WORDSPERPAGE) (\WRITEMAP \VP.IFPAGE (SETQ IFPAGERP FIRSTBUFFERRP) \VMAP.CLEAN) (add FIRSTBUFFERRP 1)) [PROGN (* ;  "Unmap everything that fell somewhere we can't use") (\DL.UNMAPPAGES (ADD1 \FP.IFPAGE) (DLFPFROMRP \RP.IOPAGE)) (* ;  "real segment zero, map or IOPAGE") (COND ((EQ \MACHINETYPE \DANDELION) (for NEXTBANK0 from 2MBPAGES by 2MBPAGES until (> NEXTBANK0 NREALPAGES) do (* ;; "All the `shadows of the display bank' in higher memory have restricted use; take them out of commission for now") (\DL.UNMAPPAGES NEXTBANK0 (+ NEXTBANK0 PAGESPERSEGMENT -1] (PROGN (* ; "Copy Display into segment zero") [SETQ NDISPLAYPAGES (COND ((EQ \MACHINETYPE \DANDELION) (* ;; "Only lock the standard screen's worth of pages on DLion, even if there are more because the sysout came from wide Daybreak. Only this many need to be in the display bank, besides which there is a cursor bank after the display; the rest can be vanilla locked pages.") \NP.DISPLAY) (T (IMAX \NP.DISPLAY (ADD1 \MaxScreenPage] (* ;  "Number of display pages in use in this image") (for I from 0 to (SUB1 NDISPLAYPAGES) do (\WRITEMAP (+ SCRATCHVP I) (+ \RP.DISPLAY I) \VMAP.CLEAN)) (* ;  "Point scratch area at real segment zero") (\BLT SCRATCHBASE (create POINTER PAGE# _ \VP.DISPLAY) (UNFOLD NDISPLAYPAGES WORDSPERPAGE)) (* ;  "Copy display from wherever boot put it") (for I from 0 to (SUB1 NDISPLAYPAGES) do (\WRITEMAP (+ SCRATCHVP I) 0 \VMAP.VACANT) (\WRITEMAP (+ \VP.DISPLAY I) (+ \RP.DISPLAY I) \VMAP.CLEAN)) (* ;  "Display is now where hardware wants it, so enable display") (replace (IOPAGE DLDISPCONTROL) of \IOPAGE with 0)) (COND ((EQ \MACHINETYPE \DAYBREAK) (* ;  "If on a daybreak, map the I/O region. Have to do this before calling \DoveDisplay.ScreenWidth") (for I from 0 to (SUB1 \DOVEIORGNSIZE) do (\WRITEMAP (+ \VP.DOVEIORGN I ) (+ \RP.DOVEIORGN I) \VMAP.CLEAN)) (\DoveIO.InitializeIORegionPtrs))) [PROG ((RPSIZE (- NREALPAGES (SETQ \RPOFFSET -1))) (FIRSTVP \VP.RPT)) (SETQ FIRSTRP (COND ((OR (> NDISPLAYPAGES \NP.DISPLAY) (AND (EQ \MACHINETYPE \DAYBREAK) (EQ (\DoveDisplay.ScreenWidth) \WIDEDOVEDISPLAYWIDTH))) (* ;; "Sysout was made on a large screen daybreak, or is now being run on one. Need to make sure there is space for all that display") \RP.AFTERDOVEDISPLAY) (T \RP.AFTERDISPLAY))) (* ;  "Construct real page table in segment zero after the display") [COND ((> RPSIZE (CONSTANT (EXPT 2 15))) (* ;  "We only have 15 bits for real page table numbers, so have to sacrifice the rest of memory") (SETQ RPSIZE (CONSTANT (EXPT 2 15] [SETQ RPTPAGES (PROGN (* ;; "This is a way of computing (FOLDHI RPSIZE*3 WORDSPERPAGE) that won't overflow when memory exceeds 10.6MB -- the first term computes RPSIZE*3/256, the second performs the FOLDHI directly on the now much smaller remainder.") (+ (TIMES3 (FOLDLO RPSIZE WORDSPERPAGE)) (FOLDHI (TIMES3 (IMOD RPSIZE WORDSPERPAGE)) WORDSPERPAGE] (COND ((> (+ RPTPAGES FIRSTRP) PAGESPERSEGMENT) (* ;; "No space in bank zero, so put RPT in first segment after 2 megabytes, where the first `shadow' display bank lives. No shadow bank on Daybreak, but this is as good a place as any") (SETQ FIRSTRP (IMIN 2MBPAGES (- NREALPAGES RPTPAGES))) (* ;  "IMIN because we could be on a wide-display Daybreak with small memory") [COND ((> (+ FIRSTVP RPTPAGES) \VP.BUFFERS) (* ;  "Move virtual assignment backwards if necessary") (SETQ FIRSTVP (COND ((< RPTPAGES \VP.BUFFERS) (- \VP.BUFFERS RPTPAGES)) ((<= RPTPAGES PAGESPERSEGMENT) (* ;  "Can't fit real page table in display bank at all, so overlap smallneg space") (UNFOLD \SmallNegHi PAGESPERSEGMENT)) (T (* ;  "Ack, more than 10.6 MB, have to slop over into smallpos space") (- (+ (UNFOLD \SmallNegHi PAGESPERSEGMENT) PAGESPERSEGMENT) RPTPAGES] (\DL.UNMAPPAGES (DLFPFROMRP FIRSTRP) (DLFPFROMRP (+ FIRSTRP RPTPAGES -1))) (* ; "Unmap the pages in which RPT lives. This was already done on DLion, but can't hurt to do it again") )) (for I from 0 to (SUB1 RPTPAGES) do (* ;  "Assign pages to real page table now") (\WRITEMAP (+ FIRSTVP I) (+ FIRSTRP I) \VMAP.CLEAN)) (SETQ \REALPAGETABLE (create POINTER PAGE# _ FIRSTVP)) (\CLEARWORDS \REALPAGETABLE RPSIZE) (\CLEARWORDS (\ADDBASE \REALPAGETABLE RPSIZE) RPSIZE) (\CLEARWORDS (\ADDBASE (\ADDBASE \REALPAGETABLE RPSIZE) RPSIZE) RPSIZE) (* ;  "Clear table in three steps, since 3*RPSIZE overflows after 10MB") (SETQ \RPTSIZE RPSIZE) (COND [(EQ \MACHINETYPE \DANDELION) (for NEXTBANK0 from 2MBPAGES by 2MBPAGES until (> NEXTBANK0 NREALPAGES) do (* ;  "Mark the shadow display bank pages unavailable") (\DL.MARK.PAGES.UNAVAILABLE NEXTBANK0 (+ NEXTBANK0 PAGESPERSEGMENT -1] (T (* ;; "RPT itself occupies unavailable pages; on DLion these were marked unavailable either in segment zero after display or as part of shadow bank") (\DL.MARK.PAGES.UNAVAILABLE FIRSTRP (+ FIRSTRP RPTPAGES -1)) (* ;  "Also, Dove IO region is unavailable") (\DL.MARK.PAGES.UNAVAILABLE \RP.DOVEIORGN (SUB1 (+ \RP.DOVEIORGN \DOVEIORGNSIZE] (PROGN (* ;; "Fill in special cases in RPT -- the display, which is not where FPTOVP says it is, and all the pages that are unavailable for one reason or another. Note: any page marked unavailable here MUST be unmapped by now, either because booting never put it where FPTOVP says it would be, there's no page there to begin with, or there's an explicit call to \WRITEMAP or \DL.UNMAPPAGES to unmap it above") (SETQ RPTBASE \REALPAGETABLE) [for I from 0 to (SUB1 NDISPLAYPAGES) do (SETQ RPTBASE (\ADDBASE RPTBASE \RPTENTRYLENGTH)) (* ; "Fill in Display pages") (replace (RPT VP) of RPTBASE with (+ \VP.DISPLAY I)) (replace (RPT FILEPAGE) of RPTBASE with (DLFPFROMRP (+ \RP.TEMPDISPLAY I] (\DL.MARK.PAGES.UNAVAILABLE NDISPLAYPAGES \RP.IOPAGE) (* ;  "Mark rest of segment zero plus Map and IOPAGE unavailable") ) [PROGN (* ;  "fill in main part of RPT by reading FPTOVP") (for I from (ADD1 \RP.IOPAGE) to (SUB1 NREALPAGES) as [FPBASE _ (\ADDBASE \FPTOVP (DLFPFROMRP (ADD1 \RP.IOPAGE] by (\ADDBASE FPBASE 1) as [RPTBASE _ (fetch RPTRBASE of (RPTFROMRP (ADD1 \RP.IOPAGE ] by (\ADDBASE RPTBASE \RPTENTRYLENGTH) bind (LASTREALPAGE _ (DLRPFROMFP (fetch (IFPAGE NActivePages) of \InterfacePage))) do (* ;; "Fill in rest of RPT from \FPTOVP. Could optimize this a little by special casing the area occupied by the display, but this is simpler") (COND ((fetch (RPT UNAVAILABLE) of RPTBASE)) ((AND (<= I LASTREALPAGE) (fetch FPOCCUPIED of FPBASE) [NOT (fetch (VMEMFLAGS VACANT) of (\READFLAGS (SETQ VP (fetch FPVIRTUALPAGE of FPBASE] (EQ I (\READRP VP))) (* ;; "There is a VP assigned to this filepage, and it is still there. False for display that got moved and any real pages that didn't get filled. LASTREALPAGE is in case the real memory is larger than the sysout -- FPTOVP does not exist all the way") (replace (RPT VP) of RPTBASE with VP) (replace (RPT FILEPAGE) of RPTBASE with (DLFPFROMRP I))) (T (replace (RPT EMPTY) of RPTBASE with T] (PROGN (* ;  "Touch up RPT with the exceptions") (SETQ RPTBASE (fetch RPTRBASE of (RPTFROMRP IFPAGERP))) (* ; "Interface Page") (replace (RPT VP) of RPTBASE with \VP.IFPAGE) (replace (RPT FILEPAGE) of RPTBASE with \FP.IFPAGE) (replace (RPT UNAVAILABLE) of (fetch RPTRBASE of (RPTFROMRP IOCBRP)) with T) (* ; "\IOCBPAGE") (\DL.MARK.PAGES.UNAVAILABLE FIRSTBUFFERRP (SUB1 FIRSTUSEFULRP)) (* ;  "buffer pages unavailable to swapper") ) (\CHAIN.UP.RPT) (PROG ((NBUFFERS (- FIRSTUSEFULRP FIRSTBUFFERRP))) (* ; "Allocate buffers") (for I from 0 to (SUB1 NBUFFERS) do (\WRITEMAP (+ \VP.BUFFERS I) (+ FIRSTBUFFERRP I) \VMAP.CLEAN)) (\DL.ASSIGNBUFFERS (create POINTER PAGE# _ \VP.BUFFERS) NBUFFERS]) (\DL.UNMAPPAGES [LAMBDA (FIRSTFP LASTFP) (* bvm%: "14-Jan-84 14:20") (* ;;; "At initialization time, unmap anything that originally lived in filepages FIRSTFP thru LASTFP") (for FP from FIRSTFP to LASTFP as (FPBASE _ (\ADDBASE \FPTOVP FIRSTFP)) by (\ADDBASE FPBASE 1) when (fetch FPOCCUPIED of FPBASE) do (\WRITEMAP (fetch FPVIRTUALPAGE of FPBASE) 0 \VMAP.VACANT]) (\DL.MARK.PAGES.UNAVAILABLE [LAMBDA (FIRSTRP LASTRP) (* bvm%: "14-Jan-84 14:32") (for I from FIRSTRP to LASTRP as (RPTBASE _ (fetch RPTRBASE of (RPTFROMRP FIRSTRP))) by (\ADDBASE RPTBASE \RPTENTRYLENGTH) do (replace (RPT UNAVAILABLE) of RPTBASE with T]) (\DL.ASSIGNBUFFERS [LAMBDA (BASE NPAGES) (* bvm%: "29-Jan-85 19:05") (PROGN (* ;  "Allocate a page to hold name and password, and perhaps other ephemeral things") (\CLEARWORDS BASE WORDSPERPAGE) (replace (IFPAGE UserNameAddr) of \InterfacePage with (\LOLOC (\ADDBASE BASE 1 ))) (replace (IFPAGE UserPswdAddr) of \InterfacePage with (\LOLOC (\ADDBASE BASE 33))) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -1)) (PROGN (* ; "Assign swap buffer") (SETQ \EMBUFBASE BASE) (SETQ \EMBUFVP (fetch (POINTER PAGE#) of BASE)) (SETQ \EMBUFRP (\READRP \EMBUFVP)) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -1)) (PROGN (* ; "Assign ether buffers") (replace (IFPAGE MDSZoneLength) of \InterfacePage with (UNFOLD 2 WORDSPERPAGE) ) (replace (IFPAGE MDSZone) of \InterfacePage with (\LOLOC BASE)) (SETQ BASE (\ADDBASE BASE (UNFOLD 2 WORDSPERPAGE))) (SETQ \TELERAIDBUFFER BASE) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -3)) (PROGN (* ; "Divvy up buffer space") (SETQ \#SWAPBUFFERS (SETQ \#EMUBUFFERS NPAGES)) (SETQ \#DISKBUFFERS 0) (SETQ \EMUSWAPBUFFERS (SETQ \EMUBUFFERS BASE]) (\CHAIN.UP.RPT [LAMBDA NIL (* bvm%: "18-Dec-84 16:07") (* ;;; "Maps over the Real Page Table as constructed so far and fleshes it out. Assumes that the table is built, has all its VP and FILEPAGE entries set, and that the empty and unavailable entries are so marked. Finishes the job by chaining together the available pages and setting the LOCKED bits") (PROG ((RPTBASE \REALPAGETABLE) (LASTEMPTY \REALPAGETABLE) (LASTUSED (\ADDBASE \REALPAGETABLE 1)) FIRSTUSED) (SETQ FIRSTUSED LASTUSED) (* ;; "The `entry' \REALPAGETABLE is a dummy that points to the least recently used entry. We use the second word of that dummy as a temporary chain head for the used pages, so that we can put all the empty pages at the front of the queue.") [for I from 1 to (SUB1 \RPTSIZE) do (SETQ RPTBASE (\ADDBASE RPTBASE \RPTENTRYLENGTH)) (COND ((fetch (RPT UNAVAILABLE) of RPTBASE)) ((fetch (RPT EMPTY) of RPTBASE) (replace (RPT NEXTRP) of LASTEMPTY with I) (replace (RPT LOCKED) of RPTBASE with NIL) (SETQ LASTEMPTY RPTBASE)) (T (replace (RPT NEXTRP) of LASTUSED with I) (replace (RPT LOCKED) of RPTBASE with (\LOCKEDPAGEP (fetch (RPT VP) of RPTBASE))) (SETQ LASTUSED RPTBASE] (* ;  "Finally, link the end of empty chain to front of in use chain") (replace (RPT NEXTRP) of LASTEMPTY with (fetch (RPT NEXTRP) of FIRSTUSED )) (replace (RPT NEXTRP) of (SETQ \RPTLAST LASTUSED) with \PAGETABLESTOPFLG) (replace (RPT UNAVAILABLE) of \REALPAGETABLE with T) (* ; "Dummy first entry") ]) ) (* ; "Pagefault handler") (DEFINEQ (\FAULTHANDLER [LAMBDA NIL (* ; "Edited 27-Sep-88 00:47 by jds") (PROG NIL LP [OR (AND \DOFAULTINIT (\FAULTINIT)) (\PAGEFAULT (\VAG2 (LOGAND 255 (fetch (IFPAGE FAULTHI) of \InterfacePage)) (fetch (IFPAGE FAULTLO) of \InterfacePage] (\CONTEXTSWITCH \FAULTFXP) (GO LP]) (\PAGEFAULT [LAMBDA (PTR) (* bvm%: "13-Aug-85 16:38") (\CLOCK0 (LOCF (fetch SWAPTEMP0 of \MISCSTATS))) (* ; "Note time of start") (PROG ((VP (fetch (POINTER PAGE#) of PTR)) FLAGS FILEPAGE) (COND ((fetch (VP INVALID) of VP) (* ;  "Map out of bounds on Dolphin always produces -1 as the vp. Don't know about other machines") (\MP.ERROR \MP.MOB "Page Fault: Map out of bounds" (AND (NEQ VP 65535) PTR) T)) ([NOT (fetch (VMEMFLAGS VACANT) of (SETQ FLAGS (\READFLAGS VP] (\MP.ERROR \MP.RESIDENT "Fault on resident page" PTR T)) ((EQ (SETQ FILEPAGE (\LOOKUPPAGEMAP VP)) 0) (\INVALIDADDR PTR)) (T (COND ((EQ (\HILOC PTR) \STACKHI) (* ;  "should never happen. For debugging") (\MP.ERROR \MP.STACKFAULT "Fault on stack" PTR T))) (\LOADVMEMPAGE VP FILEPAGE))) (COND (\NEWVMEMPAGEADDED (* ;  "Only happens if VMEM.PURE.STATE on") (\ASSURE.FPTOVP.PAGE))) [\BOXIPLUS (LOCF (fetch SWAPWAITTIME of \MISCSTATS)) (\BOXIDIFFERENCE (\CLOCK0 (LOCF (fetch SWAPTEMP1 of \MISCSTATS))) (LOCF (fetch SWAPTEMP0 of \MISCSTATS] (* ; "Count the time used.") (RETURN PTR]) (\INVALIDADDR [LAMBDA (ADDR) (* bvm%: " 6-AUG-83 22:25") (\MP.ERROR \MP.INVALIDADDR "Invalid address" ADDR T]) (\INVALIDVP [LAMBDA (VP) (* bvm%: " 6-AUG-83 22:25") (\MP.ERROR \MP.INVALIDVP "Invalid VP" VP]) (\FLUSHPAGE [LAMBDA (RPTINDEX FROMFLUSHVM) (* bvm%: "13-Aug-85 16:35") (* ;;; "Write out real page RPTINDEX if it is dirty.") (PROG ((RPTR (fetch RPTRBASE of RPTINDEX)) VP FP NEWFP) (COND ([AND (fetch (RPT OCCUPIED) of RPTR) (fetch (VMEMFLAGS DIRTY) of (\READFLAGS (SETQ VP (fetch (RPT VP) of RPTR] (* ; "Yes, page is dirty") (SETQ FP (fetch (RPT FILEPAGE) of RPTR)) [COND [(AND \VMEM.PURE.LIMIT (NOT FROMFLUSHVM)) (* ;  "Don't sully vmem; write page out beyond the original end of vmem") (COND ((ILEQ FP \VMEM.PURE.LIMIT) (COND ((fetch (RPT LOCKED) of RPTR) (\MP.ERROR \MP.WRITING.LOCKED.PAGE))) (SETQ NEWFP (add (fetch NActivePages of \InterfacePage) 1)) (COND ((IGREATERP NEWFP (IDIFFERENCE \LASTVMEMFILEPAGE \GUARDVMEMFULL)) (\SET.VMEM.FULL.STATE))) (SETQ \NEWVMEMPAGEADDED T) (\PUTBASE (.PAGEMAPBASE. VP) 0 NEWFP) (\PUTBASE \FPTOVP NEWFP VP) (\PUTBASE \FPTOVP FP \NO.VMEM.PAGE) (replace (RPT FILEPAGE) of RPTR with (SETQ FP NEWFP] ((.VMEM.CONSISTENTP.) (replace (IFPAGE Key) of \InterfacePage with (LOGNOT16 \IFPValidKey)) (* ;  "Invalidate vmem and write out the Interface page") (SETQ \DIRTYPAGEHINT 0) (* ;  "So that the dirty page background writer wakes up") (PROG ((IFVP (fetch (POINTER PAGE#) of \InterfacePage))) (\TRANSFERPAGE IFVP \FirstVmemBlock (RPTFROMRP (\READRP IFVP)) T NIL] (* ; "Write it out") (COND ((IGREATERP \DIRTYPAGEHINT 0) (add \DIRTYPAGEHINT -1))) (\TRANSFERPAGE VP FP RPTINDEX T NIL]) (\LOADVMEMPAGE [LAMBDA (VPAGE FILEPAGE NEWPAGEFLG LOCK? DONTMOVETOPFLG) (* bvm%: "10-Aug-85 18:08") (* ;; "Fault in virtual page VPAGE known to live in FILEPAGE on the vmem. NEWPAGEFLG is true if the page is new, so should just be cleared, not loaded from vmem file. If LOCK? is true, locks down the page as well. In this case, if on Dandelion, we also check for page wanting to live in a particular real page. If DONTMOVETOPFLG is true, the real page we put this page in is not promoted to the front of the LRU queue of pages") (COND ((IGREATERP \PAGEFAULTCOUNTER \UPDATECHAINFREQ) (\UPDATECHAIN))) (add \PAGEFAULTCOUNTER 1) (PROG ((RPTINDEX (\SELECTREALPAGE FILEPAGE LOCK? DONTMOVETOPFLG)) RPTBASE SPECIALRP) (SETQ RPTBASE (fetch RPTRBASE of RPTINDEX)) [COND ((AND LOCK? (OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (SETQ SPECIALRP (\SPECIALRP VPAGE))) (* ; "Must actually put FILEPAGE into special RP, and thus move old contents of SPECIALRP into RPTINDEX") (LET* ((SRINDEX (RPTFROMRP SPECIALRP)) (SRPTR (fetch RPTRBASE of SRINDEX))) (\MOVEREALPAGE SRINDEX SRPTR RPTINDEX RPTBASE) (SETQ RPTINDEX SRINDEX) (SETQ RPTBASE SRPTR] (* ;  "Fill in new RPTINDEX with appropriate data") (replace (RPT VP) of RPTBASE with VPAGE) (replace (RPT FILEPAGE) of RPTBASE with FILEPAGE) (replace (RPT LOCKED) of RPTBASE with LOCK?) (COND ([AND DOLOCKCHECKS (NOT LOCK?) (EQ (LRSH VPAGE 8) (CONSTANT (\HILOC \PAGEMAP] (\MP.ERROR \MP.MAPNOTLOCKED "Page of page map being loaded but not locked" VPAGE))) (\TRANSFERPAGE VPAGE FILEPAGE RPTINDEX NIL NEWPAGEFLG]) (\MOVEREALPAGE [LAMBDA (SOURCEINDEX SOURCERPT DESTINDEX DESTRPT) (* bvm%: "14-Aug-85 13:53") (* ;;; "Moves the page, if any, currently living in real page table SOURCEINDEX & SOURCERPT into the page indicated by DESTINDEX & DESTRPT. The destination is assumed to have been vacated") (CHECK (NOT (fetch (RPT LOCKED) of SOURCERPT))) (replace (RPT LOCKED) of DESTRPT with NIL) [COND ((fetch (RPT OCCUPIED) of SOURCERPT) (* ;  "Page was not vacant to start with") (LET* ((SOURCEVP (fetch (RPT VP) of SOURCERPT)) (SOURCEFLAGS (\READFLAGS SOURCEVP))) (replace (RPT VP) of DESTRPT with SOURCEVP) (replace (RPT FILEPAGE) of DESTRPT with (fetch (RPT FILEPAGE) of SOURCERPT)) (\WRITEMAP \EMBUFVP (RPFROMRPT DESTINDEX) 0) (* ; "Map buffer to target page") (\BLT \EMBUFBASE (create POINTER PAGE# _ SOURCEVP) WORDSPERPAGE) (* ; "move data to buffer page") (\WRITEMAP \EMBUFVP \EMBUFRP 0) (* ;  "Restore buffer to its proper page") (\WRITEMAP SOURCEVP (RPFROMRPT DESTINDEX) SOURCEFLAGS) (* ; "Set flags and new RP for page") ] DESTINDEX]) (\LOOKUPPAGEMAP [LAMBDA (VP) (* bvm%: "20-Oct-86 18:26") (* ;; "Returns the pagemap entry for VP, which is expected to be in bounds. High bit of result is the lock bit. Zero denotes absence") (LET [(PRIMENTRY (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP] (COND ((EQ PRIMENTRY \EMPTYPMTENTRY) 0) (T (\GETBASE \PAGEMAP (IPLUS PRIMENTRY (fetch (VP SECONDARYKEY) of VP]) (\VALIDADDRESSP [LAMBDA (BASE) (* bvm%: "16-Jun-86 11:30") (NEQ 0 (\LOOKUPPAGEMAP (fetch (POINTER PAGE#) of BASE]) (\LOCKEDPAGEP [LAMBDA (VP TEMP) (* bvm%: "18-Feb-85 18:08") (* ;;; "True if VP is locked. If TEMP is NIL consults only the locked page table; otherwise, also checks for `temporary' locked page") (OR (NEQ 0 (LOGAND (.LOCKEDVPMASK. VP) (\GETBASE (.LOCKEDVPBASE. VP) 0))) (UNLESSRDSYS (AND TEMP (NOT (fetch (VMEMFLAGS VACANT) of (\READFLAGS VP))) (fetch (RPT LOCKED) of (fetch RPTRBASE of (RPTFROMRP (\READRP VP]) (\SELECTREALPAGE [LAMBDA (NEWFP LOCK? DONTMOVETOPFLG) (* bvm%: "10-Aug-85 18:08") (* ;; "Selects a real page, flushing it if necessary, and returns the RPT index of the page. NEWFP, if supplied, is the filepage that will be read into here. This might influence page choice by minimizing seek time. LOCK? means caller intends to lock the page, which constrains which real pages it can fall into. The selected page is moved to the back of the LRU queue, so that it won't be selected again soon, unless DONTMOVETOPFLG is true. If DONTMOVETOPFLG is REMOVE then the page is spliced out of the chain forever.") (PROG ((TRIES 0) (CNTR \MAXCLEANPROBES) (DISTANCE \MINSHORTSEEK) PREVRPT PREVINDEX RPTINDEX RPTBASE FP FLAGS) RETRY (SETQ PREVRPT \REALPAGETABLE) (until (EQ (SETQ RPTINDEX (fetch (RPT NEXTRP) of PREVRPT)) \PAGETABLESTOPFLG) do (SETQ RPTBASE (fetch RPTRBASE of RPTINDEX)) [COND ((fetch (RPT EMPTY) of RPTBASE) (RETURN PREVRPT)) ((NOT (fetch (RPT OCCUPIED) of RPTBASE)) (\MP.ERROR \MP.CHAIN.UNAVAIL "UNAVAILABLE page on Chain")) ([AND (NOT (fetch (RPT LOCKED) of RPTBASE)) [NOT (fetch (VMEMFLAGS REFERENCED) of (SETQ FLAGS (\READFLAGS (fetch (RPT VP) of RPTBASE ] (OR (NOT LOCK?) (.LOCKABLERP. (RPFROMRPT RPTINDEX] (* ;; "Page is unlocked and unreferenced, so is good candidate for flushing. LOCK? check is to avoid locking a page into a real page that might be desired by code that cares about real pages") (COND ([OR (NOT (fetch (VMEMFLAGS DIRTY) of FLAGS)) (PROGN (SETQ FP (fetch (RPT FILEPAGE) of RPTBASE)) (COND ((SELECTQ \VMEM.INHIBIT.WRITE (NIL [SELECTQ \VMEM.FULL.STATE (NIL (* ; "Normal, can write anything") T) (T (* ;  "Vmem is full and clean, don't write anything") NIL) (PROGN (* ;  "Vmem is full, but sullied, so might as well write anything for which there is space") (AND (ILEQ FP \LASTVMEMFILEPAGE) (OR (NULL \VMEM.PURE.LIMIT) (IGREATERP FP \VMEM.PURE.LIMIT ]) (NEW (* ;  "Only allowed to write old pages, since new pages might just have to get moved a second time") (ILEQ FP \VMEM.PURE.LIMIT)) (PROGN (* ;  "We are forbidden from writing any page") NIL)) (COND ((OR (ILEQ CNTR 0) (NULL NEWFP) (ILESSP (IABS (IDIFFERENCE FP NEWFP)) DISTANCE)) (* ;  "Page is near replacement, or we have given up trying for closeness") T) (T (* ;  "Page is too far away from replacement page") (SETQ CNTR (SUB1 CNTR)) [COND ((ILESSP DISTANCE \MAXSHORTSEEK) (* ; "Get more liberal") (SETQ DISTANCE (LLSH DISTANCE 1] NIL] [COND (DOLOCKCHECKS (COND ((fetch (RPT LOCKED) of RPTBASE) (\MP.ERROR \MP.FLUSHLOCKED "Attempt to displace locked page" RPTBASE)) ((EQ (fetch (RPT VPSEG) of RPTBASE) (CONSTANT (\HILOC \PAGEMAP))) (\MP.ERROR \MP.MAPNOTLOCKED "A page of the page map is not locked" RPTBASE ] (\FLUSHPAGE RPTINDEX) (\WRITEMAP (fetch (RPT VP) of RPTBASE) 0 \VMAP.VACANT) (replace (RPT EMPTY) of RPTBASE with T) (RETURN PREVRPT] (SETQ PREVRPT RPTBASE) (SETQ PREVINDEX RPTINDEX) finally (* ;; "Couldn't find an unreffed page because all pages were touched since last \UPDATECHAIN. Do another, which clears ref bits, and try again") (COND ((EQ TRIES 0) (SETQ TRIES 1) (\UPDATECHAIN)) [(AND (EQ TRIES 1) \VMEM.INHIBIT.WRITE) (SETQ \VMEM.INHIBIT.WRITE) (COND ((AND (NEQ \MACHINETYPE \DANDELION) (NEQ \MACHINETYPE \DAYBREAK)) (* ;; "Don't call RAID on a DLion, since the interface is so bad. Dorado user might want to know that we're smashing \VMEM.INHIBIT.WRITE") (RAID "No clean vmem pages to reuse, must write one. ^N to continue" ] (T (\MP.ERROR \MP.SELECTLOOP "Loop in \SELECTREALPAGE"))) (GO RETRY)) (SELECTQ DONTMOVETOPFLG (NIL (* ;  "Move this page to head of chain, so that it won't be picked again soon") (replace (RPT NEXTRP) of PREVRPT with (fetch (RPT NEXTRP) of RPTBASE)) (* ; "Splice RPTINDEX out of chain") (replace (RPT NEXTRP) of \RPTLAST with RPTINDEX) (* ; "Put new page at end of chain") (replace (RPT NEXTRP) of (SETQ \RPTLAST RPTBASE) with \PAGETABLESTOPFLG)) (REMOVE (* ;  "Splice this page out of chain altogether") (replace (RPT NEXTRP) of PREVRPT with (fetch (RPT NEXTRP) of RPTBASE)) (replace (RPT NEXTRP) of RPTBASE with \PAGETABLESTOPFLG)) NIL) (RETURN RPTINDEX]) (\SPECIALRP [LAMBDA (VP) (* edited%: " 9-Aug-85 17:14") (* ;; "for \DANDELION, some virtual pages must be mapped into special real pages. This function returns the corresponding real page") (SELECTC (FOLDLO VP PAGESPERSEGMENT) ((FOLDLO \VP.STACK PAGESPERSEGMENT) (IPLUS VP (IDIFFERENCE \RP.STACK \VP.STACK))) ((FOLDLO \VP.DISPLAY PAGESPERSEGMENT) (IPLUS VP (IDIFFERENCE \RP.DISPLAY \VP.DISPLAY))) NIL]) (\TRANSFERPAGE [LAMBDA (VP FILEPAGE RPTINDEX WRITE? NEWPAGE?) (* MPL "27-Jul-85 21:28") (* ;; "Transfers virtual page VP between page FILEPAGE of the vmem and real page RPTINDEX. WRITE? indicates direction of transfer. If NEWPAGE?, then page does not exist on file, and is simply cleared") (PROG (NEWFLAGS) (COND (WRITE? (FLIPCURSORBAR 15)) (T (FLIPCURSORBAR 0))) (SETQ NEWFLAGS (COND (NEWPAGE? \VMAP.DIRTY) (WRITE? (LOGAND (\READFLAGS VP) (LOGNOT16 \VMAP.DIRTY))) (T 0))) (COND ((AND WRITE? (fetch (RPT LOCKED) of (fetch RPTRBASE of RPTINDEX))) (* ;; "Writing a locked page: can't diddle map, because others might die, so do this in the straightforward way") (\BLT \EMBUFBASE (create POINTER PAGE# _ VP) WORDSPERPAGE) (* ;  "Copy page into buffer, then write the buffer out") (\ACTONVMEMFILE FILEPAGE \EMBUFBASE 1 T) (SETQ \LASTACCESSEDVMEMPAGE FILEPAGE)) ((NOT NEWPAGE?) (* ;  "Map the buffer page into the target real page, read/write the page, then set the map back") (\WRITEMAP VP 0 \VMAP.VACANT) (* ;  "Unmap VP so that we don't have two virtual pages pointing at same real page") (\WRITEMAP \EMBUFVP (RPFROMRPT RPTINDEX) 0) (* ; "Map buffer to target page") (\ACTONVMEMFILE FILEPAGE \EMBUFBASE 1 WRITE?) (* ; "Do the i/o") (\WRITEMAP \EMBUFVP \EMBUFRP 0) (* ;  "Restore buffer to its proper page") (SETQ \LASTACCESSEDVMEMPAGE FILEPAGE))) (\WRITEMAP VP (RPFROMRPT RPTINDEX) NEWFLAGS) (* ; "Set flags for page") (COND (NEWPAGE? (* ;  "Not on file yet, so clear it. Couldn't do this sooner because the flags weren't set") (\CLEARWORDS (create POINTER PAGE# _ VP) WORDSPERPAGE))) (COND (WRITE? (FLIPCURSORBAR 15) (\BOXIPLUS (LOCF (fetch SWAPWRITES of \MISCSTATS)) 1)) (T (FLIPCURSORBAR 0) (\BOXIPLUS (LOCF (fetch PAGEFAULTS of \MISCSTATS)) 1]) (\UPDATECHAIN [LAMBDA NIL (* bvm%: "30-Jul-85 15:20") (* ;  "Sorts the page chain by reference bit") (CHECK (NOT \INTERRUPTABLE)) (PROG ((RPTINDEX (fetch (RPT NEXTRP) of \REALPAGETABLE)) (CHAIN0 \REALPAGETABLE) (CHAIN1 (\ADDBASE \REALPAGETABLE 2)) RPTR VP FLAGS HEAD1) (SETQ HEAD1 CHAIN1) (* ;; "HEAD1 = CHAIN1 is just a holding cell for the second Chain we temporarily create inside here. Use the unused third word of the dummy header entry of \REALPAGETABLE") (replace (RPT NEXTRP) of CHAIN0 with \PAGETABLESTOPFLG) (replace (RPT NEXTRP) of CHAIN1 with \PAGETABLESTOPFLG) (do (SETQ RPTR (fetch RPTRBASE of RPTINDEX)) (SETQ VP (fetch (RPT VP) of RPTR)) [SETQ FLAGS (COND ((fetch (RPT EMPTY) of RPTR) 0) (T (\READFLAGS VP] (COND ((OR (fetch (RPT LOCKED) of RPTR) (PROGN (COND ([AND DOLOCKCHECKS (EQ (fetch (RPT VPSEG) of RPTR) (CONSTANT (\HILOC \PAGEMAP] (\MP.ERROR \MP.MAPNOTLOCKED "A page of the page map is not locked" RPTR))) (fetch (VMEMFLAGS REFERENCED) of FLAGS))) (* ;  "Page referenced or locked, put on CHAIN1") (\WRITEMAP VP (RPFROMRPT RPTINDEX) (LOGAND FLAGS (LOGNOT16 \VMAP.REF))) (* ; "Turn off ref bit") (replace (RPT NEXTRP) of CHAIN1 with RPTINDEX) (SETQ CHAIN1 RPTR)) (T (* ;  "Page was not referenced recently, put on CHAIN0") (replace (RPT NEXTRP) of CHAIN0 with RPTINDEX) (SETQ CHAIN0 RPTR))) (SETQ RPTINDEX (fetch (RPT NEXTRP) of RPTR)) (* ; "Look at next page in old chain") repeatuntil (EQ RPTINDEX \PAGETABLESTOPFLG)) (replace (RPT NEXTRP) of CHAIN1 with \PAGETABLESTOPFLG) (* ; "End of the line") (replace (RPT NEXTRP) of CHAIN0 with (fetch (RPT NEXTRP) of HEAD1)) (* ;  "Link end of CHAIN0 to beginning of CHAIN1") (SETQ \RPTLAST (COND ((EQ HEAD1 CHAIN1) (* ; "Nothing on CHAIN1 ??!!") CHAIN0) (T CHAIN1))) (* ;  "Pointer to end of complete chain") (SETQ \DIRTYPAGECOUNTER (SETQ \PAGEFAULTCOUNTER 0]) ) (* ; "Allocating and locking new pages") (DEFINEQ (\NEWPAGE [LAMBDA (BASE NOERROR LOCK?) (* ;  "Edited 24-Oct-92 12:45 by sybalsky:mv:envos") (* ;;; "Creates and returns a new page located at virtual addr BASE") (* ;; "If LOCK?, lock the page into real memory (A NOP on nonXerox machines!)") (UNINTERRUPTABLY (COND [(NOT (\MISCAPPLY* (FUNCTION \DONEWPAGE) BASE LOCK?)) (* ; "Failed, page exists") (COND ((NOT NOERROR) (\MP.ERROR \MP.NEWPAGE "Attempt to allocate already existing page" BASE T))) (COND (LOCK? (\LOCKPAGES BASE 1] ((IGREATERP (fetch (IFPAGE NActivePages) of \InterfacePage) (IDIFFERENCE \LASTVMEMFILEPAGE \GUARDVMEMFULL)) (* ; "Vmem getting full!") (\SET.VMEM.FULL.STATE))) BASE)]) (\DONEWPAGE [LAMBDA (BASE LOCK? INTERNALFLG) (* bvm%: "13-Aug-85 16:32") (* ;;; "Allocates new page at BASE, locking it if LOCK? is true. Returns vmemfile page# on success, NIL if page already exists. Must be run in safe context! because it can cause vmem activity") (AND \DOFAULTINIT (\FAULTINIT)) (* ;  "Only an issue when INIT.SYSOUT starts. Perhaps there is a better place to put this") (PROG ((VP (fetch (POINTER PAGE#) of BASE)) MAPBASE LOCKBASE FILEPAGE NEXTPM ERRCODE) (RETURN (COND ((fetch (VP INVALID) of VP) (\INVALIDVP VP) NIL) (T (SETQ MAPBASE (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP))) (COND ((EQ MAPBASE \EMPTYPMTENTRY) (* ;  "Need to create a new second-level block") (SETQ NEXTPM (fetch (IFPAGE NxtPMAddr) of \InterfacePage)) [COND ((EVENP NEXTPM WORDSPERPAGE) (* ;; "Need a new secondary pagemap page. This recursion is ok, because we know that SETUPPAGEMAP assures that the pagemap pages for all the pages in secondary map space were created at MAKEINIT time") (OR (\DONEWPAGE (\ADDBASE \PAGEMAP NEXTPM) T T) (RETURN (\MP.ERROR \MP.NEWMAPPAGE "\DONEWPAGE failed to allocate new map page"] (\PUTBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP) NEXTPM) (replace (IFPAGE NxtPMAddr) of \InterfacePage with (IPLUS NEXTPM \PMblockSize)) (SETQ MAPBASE NEXTPM))) [SETQ MAPBASE (\ADDBASE \PAGEMAP (IPLUS MAPBASE (fetch (VP SECONDARYKEY) of VP] (COND ((NEQ (\GETBASE MAPBASE 0) 0) (* ; "Page exists") (RETURN NIL))) (SETQ FILEPAGE (add (fetch (IFPAGE NActivePages) of \InterfacePage ) 1)) (replace (IFPAGE NDirtyPages) of \InterfacePage with FILEPAGE) (* ; "Currently a redundant field") [COND (LOCK? (SETQ FILEPAGE (\MAKESPACEFORLOCKEDPAGE VP FILEPAGE)) (\PUTBASE (SETQ LOCKBASE (.LOCKEDVPBASE. VP)) 0 (LOGOR (.LOCKEDVPMASK. VP) (\GETBASE LOCKBASE 0] (\PUTBASE \FPTOVP FILEPAGE VP) (\PUTBASE MAPBASE 0 FILEPAGE) (\LOADVMEMPAGE VP FILEPAGE T LOCK?) (COND (INTERNALFLG (SETQ \NEWVMEMPAGEADDED T)) (T (* ;  "Make sure \FPTOVP extended if necessary") (\ASSURE.FPTOVP.PAGE))) FILEPAGE]) (\ASSURE.FPTOVP.PAGE [LAMBDA NIL (* bvm%: "13-Aug-85 16:29") (* ;; "Called at the end of some swapping operation that added one or more pages to the vmem file, setting \NEWVMEMPAGEADDED true. If we're going to need a new page of \FPTOVP soon, do it now while there's still maneuvering room. The allowance below is for the worst case, which can happen when VMEM.PURE.STATE is on and \NEWPAGE was called needing a new pagemap page as well, in which case we could have as many as the following new vmem pages before we're home safe --- 1: \NEWPAGE added a page --- 2: a page was displaced by the new page and written to the end of the vmem --- 3: a new pagemap page was needed --- 4: it displaced a page to end of vmem --- 5: the new \FPTOVP page below --- 6: a page displaced by same. --- --- Alternatively, it could have been the new \FPTOVP page that needed a new pagemap block. Will never have both needing a new pagemap block, since there are several pagemap blocks per page") (LET ((FILEPAGE (fetch (IFPAGE NActivePages) of \InterfacePage))) (COND ((IGREATERP (IMOD FILEPAGE WORDSPERPAGE) (IDIFFERENCE WORDSPERPAGE 7)) (* ;  "This is a no-op if the page has already been allocated") (\DONEWPAGE (\ADDBASE \FPTOVP (CEIL FILEPAGE WORDSPERPAGE)) T T))) (SETQ \NEWVMEMPAGEADDED NIL]) (\MAKESPACEFORLOCKEDPAGE [LAMBDA (VP FILEPAGE) (* bvm%: "29-Jun-86 17:44") (* ;; "VP is a page to be locked, FILEPAGE its home. Returns a possibly new file page where VP will now live, after having kicked the former resident of the new file page into VP's old FILEPAGE") (PROG (DESIREDFP OLDVP FPBASE) [SETQ DESIREDFP (SELECTC (FOLDLO VP PAGESPERSEGMENT) ((FOLDLO \VP.STACK PAGESPERSEGMENT) (IPLUS VP (IDIFFERENCE (DLFPFROMRP \RP.STACK) \VP.STACK))) ((FOLDLO \VP.DISPLAY PAGESPERSEGMENT) (* ;  "Display lives in a fixed place in file, but does not land there initially") (IPLUS VP (IDIFFERENCE (DLFPFROMRP \RP.TEMPDISPLAY) \VP.DISPLAY))) ((FOLDLO \VP.FPTOVP PAGESPERSEGMENT) (* ;  "A new page of FPTOVP has to be continguous on file with other such pages") (IPLUS VP (IDIFFERENCE (DLFPFROMRP \RP.FPTOVP) \VP.FPTOVP))) (COND ((AND (ILEQ FILEPAGE (fetch LastLockedFilePage of \InterfacePage )) (IGREATERP FILEPAGE (DLFPFROMRP \RP.MISCLOCKED))) (* ;  "Page is in a good place already. It probably was once locked, then unlocked") (RETURN FILEPAGE)) (T (* ;  "Put it after all the other locked pages") (add (fetch LastLockedFilePage of \InterfacePage) 1] (COND ((AND (fetch FPOCCUPIED of (SETQ FPBASE (\ADDBASE \FPTOVP DESIREDFP))) (NEQ (SETQ OLDVP (fetch FPVIRTUALPAGE of FPBASE)) VP)) (* ;  "Someone else lives here, so move it out") (\MOVEVMEMFILEPAGE OLDVP DESIREDFP FILEPAGE))) (RETURN DESIREDFP]) (\MOVEVMEMFILEPAGE [LAMBDA (VP OLDFP NEWFP) (* bvm%: "18-Nov-84 14:14") (PROG ((FLAGS (\READFLAGS VP)) RP) (COND ((fetch (VMEMFLAGS VACANT) of FLAGS) (* ;  "Page not resident, so pull it in") (\LOADVMEMPAGE VP OLDFP) (SETQ FLAGS \VMAP.CLEAN)) ((\LOCKEDPAGEP VP) (\MP.ERROR \MP.BADLOCKED "Locked page is in the way" VP))) (\WRITEMAP VP (SETQ RP (\READRP VP)) (LOGOR FLAGS \VMAP.DIRTY)) (* ;  "Mark page dirty, so that it will eventually be written to its new home") (replace (RPT FILEPAGE) of (fetch RPTRBASE of (RPTFROMRP RP)) with NEWFP) (* ; "Tell RPT where VP now lives") (\PUTBASE (.PAGEMAPBASE. VP) 0 NEWFP) (* ; "Tell \PAGEMAP about it") (\PUTBASE \FPTOVP NEWFP VP) (* ; "... and \FPTOVP") ]) (\NEWEPHEMERALPAGE [LAMBDA (BASE NOERROR) (* bvm%: "26-NOV-82 15:40") (* ;;; "Creates and returns a new page located at virtual addr BASE, mapping it permanently into some real page but leaving it out of the vmem file") (\MISCAPPLY* (FUNCTION \DONEWEPHEMERALPAGE) BASE NOERROR]) (\DONEWEPHEMERALPAGE [LAMBDA (BASE NOERROR) (* bvm%: "30-Oct-86 16:47") (* ;;; "Creates and returns a new page located at virtual addr BASE, mapping it permanently into some real page but leaving it out of the vmem file") (LET ((VP (fetch (POINTER PAGE#) of BASE)) MAPBASE PREVRP RPTINDEX RPTR) (COND ((fetch (VP INVALID) of VP) (\INVALIDVP VP) NIL) ([OR (AND (NEQ (SETQ MAPBASE (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP))) \EMPTYPMTENTRY) (NEQ (\GETBASE \PAGEMAP (IPLUS MAPBASE (fetch (VP SECONDARYKEY) of VP))) 0)) (NOT (fetch (VMEMFLAGS VACANT) of (\READFLAGS VP] (* ;  "Page is in the vmem already, so no hope") (COND ((NOT NOERROR) (\MP.ERROR \MP.NEWPAGE "Page already exists " BASE T))) BASE) (T (COND ((IGREATERP \PAGEFAULTCOUNTER \UPDATECHAINFREQ) (\UPDATECHAIN))) (add \PAGEFAULTCOUNTER 1) (SETQ RPTINDEX (\SELECTREALPAGE NIL T 'REMOVE)) (* ; "Find a page to put this in") (SETQ RPTR (fetch RPTRBASE of RPTINDEX)) (* ;  "Fill in new RPTINDEX with appropriate data") (replace (RPT VP) of RPTR with \RPT.UNAVAILABLE) (replace (RPT FILEPAGE) of RPTR with VP) (* ; "For debugging only") (FLIPCURSORBAR 0) (\WRITEMAP VP (RPFROMRPT RPTINDEX) \VMAP.DIRTY) (* ; "Set flags for page") (\CLEARWORDS (create POINTER PAGE# _ VP) WORDSPERPAGE) (* ; "Clear new page") (FLIPCURSORBAR 0) (\BOXIPLUS (LOCF (fetch PAGEFAULTS of \MISCSTATS)) 1) (COND (\NEWVMEMPAGEADDED (\ASSURE.FPTOVP.PAGE))) BASE]) (\LOCKPAGES [LAMBDA (BASE NPAGES) (* bvm%: "26-NOV-82 15:17") (* ;; "Needs to be done in safe stack context because might cause vmem transfer") (\MISCAPPLY* (FUNCTION \DOLOCKPAGES) BASE NPAGES) BASE]) (\DOLOCKPAGES [LAMBDA (BASE NPAGES) (* ; "Edited 21-Oct-87 15:49 by bvm:") (for I from 0 to (SUB1 NPAGES) bind (VP _ (fetch (POINTER PAGE#) of BASE)) FILEPAGE MAPBASE RPTBASE RPINDEX RP MASK LOCKBASE do [COND ((fetch (VP INVALID) of VP) (\INVALIDVP VP)) [(EQ (SETQ MAPBASE (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP))) \EMPTYPMTENTRY) (\INVALIDADDR (ADDBASE BASE (UNFOLD I WORDSPERPAGE] (T [SETQ MAPBASE (\ADDBASE \PAGEMAP (IPLUS MAPBASE (fetch (VP SECONDARYKEY) of VP] (SETQ FILEPAGE (\GETBASE MAPBASE 0)) (COND ((EQ 0 (LOGAND (SETQ MASK (.LOCKEDVPMASK. VP)) (\GETBASE (SETQ LOCKBASE (.LOCKEDVPBASE. VP)) 0))) (* ; "Not locked yet") (COND ((fetch VACANT of (\READFLAGS VP)) (* ;  "Bring locked page into core so we can move it if necessary") (\LOADVMEMPAGE VP FILEPAGE NIL T))) [SETQ RPINDEX (RPTFROMRP (SETQ RP (\READRP VP] (SETQ RPTBASE (fetch RPTRBASE of RPINDEX)) [COND ((AND (NOT (.LOCKABLERP. RP)) (NOT (\SPECIALRP VP))) (* ;; "Page already swapped in, but lives in a real page that might need to get bumped (e.g., for stack), so move it now. If \SPECIALRP is true then we know that the page got swapped into the right place, so no need to move it.") (LET* ((NEWINDEX (\SELECTREALPAGE NIL T)) (NEWRPT (fetch RPTRBASE of NEWINDEX))) (\MOVEREALPAGE RPINDEX RPTBASE NEWINDEX NEWRPT) (replace (RPT EMPTY) of RPTBASE with T) (* ; "Mark vacated RPT entry empty") (SETQ RPTBASE NEWRPT) (SETQ RP (RPFROMRPT NEWINDEX] (COND ((NEQ FILEPAGE (SETQ FILEPAGE (\MAKESPACEFORLOCKEDPAGE VP FILEPAGE))) (* ;; "Moving to a new page, so have to mark this locked page dirty so that it will eventually get written to its new home") (\WRITEMAP VP RP (LOGOR \VMAP.DIRTY \VMAP.REF)) (replace (RPT FILEPAGE) of RPTBASE with FILEPAGE) (\PUTBASE \FPTOVP FILEPAGE VP) (\PUTBASE MAPBASE 0 FILEPAGE))) (\PUTBASE LOCKBASE 0 (LOGOR MASK (\GETBASE LOCKBASE 0))) (* ; "Set lock bit in page map") (replace (RPT LOCKED) of RPTBASE with T] (add VP 1) finally (COND (\NEWVMEMPAGEADDED (* ;  "If we had to load or rearrange pages, vmem could have gotten bigger if VMEM.PURE.STATE on") (\ASSURE.FPTOVP.PAGE]) (\TEMPLOCKPAGES [LAMBDA (BASE NPAGES) (* bvm%: "10-Aug-85 18:17") (* ;;; "`Temporarily' locks BASE for NPAGES, i.e. ensures that the swapper will not move the pages. Information vanishes at logout etc.") (\MISCAPPLY* (FUNCTION \DOTEMPLOCKPAGES) BASE NPAGES]) (\DOTEMPLOCKPAGES [LAMBDA (BASE NPAGES) (* ; "Edited 21-Oct-87 15:49 by bvm:") (* ;; "`Temporarily' locks BASE for NPAGES, i.e. ensures that the swapper will not move the pages. Information vanishes at logout etc. This function must be locked because it manipulates the page table table. Runs in MISC context") (to NPAGES as VP from (fetch (POINTER PAGE#) of BASE) bind RPTBASE RPINDEX RP do (\TOUCHPAGE BASE) (* ; "Touch page in case not resident") [SETQ RPINDEX (RPTFROMRP (SETQ RP (\READRP VP] (SETQ RPTBASE (fetch RPTRBASE of RPINDEX)) [COND ((NOT (.LOCKABLERP. RP)) (* ;; "Page already swapped in, but lives in a real page that might need to get bumped (e.g., for stack), so move it now") (LET* ((NEWINDEX (\SELECTREALPAGE NIL T)) (NEWRPT (fetch RPTRBASE of NEWINDEX))) (\MOVEREALPAGE RPINDEX RPTBASE NEWINDEX NEWRPT) (replace (RPT EMPTY) of RPTBASE with T) (* ; "Mark vacated RPT entry empty") (SETQ RPTBASE NEWRPT] (replace (RPT LOCKED) of RPTBASE with T) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE]) (\TEMPUNLOCKPAGES [LAMBDA (BASE NPAGES) (* bvm%: "30-Jul-85 16:58") (* ;; "Unlocks pages that were locked by \TEMPLOCKPAGES. This function must be locked because it manipulates the page table") (while (IGREATERP NPAGES 0) bind (VP _ (fetch (POINTER PAGE#) of BASE)) RPTR do (UNINTERRUPTABLY (\TOUCHPAGE BASE) (* ;  "Touch page in case not resident. Should only happen if page wasn't locked to begin with") (COND ((AND (NEQ (SETQ RPTR (\READRP VP)) 0) (EQ [fetch (RPT VP) of (SETQ RPTR (fetch RPTRBASE of (RPTFROMRP RPTR] VP)) (COND ([AND DOLOCKCHECKS (EQ (LRSH VP 8) (CONSTANT (\HILOC \PAGEMAP] (\MP.ERROR \MP.UNLOCKINGMAP "Attempt to unlock map page" VP))) (replace (RPT LOCKED) of RPTR with NIL)) (T (HELP "Page table changed out from under me!" VP)))) (add VP 1) (add NPAGES -1) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE]) (\UNLOCKPAGES [LAMBDA (BASE NPAGES) (* bvm%: "30-Jul-85 16:58") (* ;;; "Unlocks NPAGES virtual pages from BASE onward") (UNINTERRUPTABLY (for I from 0 to (SUB1 NPAGES) bind (VP _ (fetch (POINTER PAGE#) of BASE)) MASK LOCKBASE do (COND ((fetch (VP INVALID) of VP) (\INVALIDVP VP)) ((NEQ 0 (LOGAND (SETQ MASK (.LOCKEDVPMASK. VP)) (\GETBASE (SETQ LOCKBASE (.LOCKEDVPBASE. VP)) 0))) (* ;  "Yes, page was locked, so turn the bit off now") (COND ([AND DOLOCKCHECKS (EQ (LRSH VP 8) (CONSTANT (\HILOC \PAGEMAP] (\MP.ERROR \MP.UNLOCKINGMAP "Attempt to unlock map page" VP))) (\PUTBASE LOCKBASE 0 (LOGXOR MASK (\GETBASE LOCKBASE 0))) (* ;  "Update pagemap, then update real page table") (replace (RPT LOCKED) of (fetch RPTRBASE of (RPTFROMRP (\READRP VP))) with NIL))) (add VP 1)))]) ) (* ; "Writing out the vmem") (DEFINEQ (\FLUSHVM [LAMBDA (MAIKO.SYSOUTFILE) (* ; "Edited 6-Jan-89 19:23 by Hayata") (* ;; "Writes out all dirty pages to vmem, making it consistent. Returns NIL now, T if Bcpl starts up the vmem") (COND ((\FLUSHVMOK?) (COND [(EQ \MACHINETYPE \MAIKO) (PROMPTPRINT "Saving sysout, taking mouse down.") (* ;; "check free space.") (\MAIKO.CHECKFREESPACE MAIKO.SYSOUTFILE) (UNINTERRUPTABLY (PROG NIL (SELECTQ (\MISCAPPLY* (FUNCTION \DOFLUSHVM) MAIKO.SYSOUTFILE) (NIL (SETQ \DIRTYPAGEHINT 32767) (RETURN NIL)) (1 (ERROR "Can not find sysout file")) (2 (ERROR "FILE-SYSTEM-RESOURCES-EXCEEDED")) (3 (ERROR "Can not open sysout file")) (4 (ERROR "Can not seek sysout file")) (5 (ERROR "Can not write sysout file")) (6 (ERROR "Connection timed out")) NIL) (SETQ \DOFAULTINIT T) (\CONTEXTSWITCH \FAULTFXP) (for VAR in \SYSTEMCACHEVARS do (SET VAR NIL)) (RETURN T)))] (T (UNINTERRUPTABLY (* ;  "Write stuff out from a safe place") (PROG1 (COND ((\MISCAPPLY* (FUNCTION \DOFLUSHVM)) (* ; "Return from Bcpl startup. Need to rebuild the context, since it was not written out consistently") (SETQ \DOFAULTINIT T) (* ;; "Tell pagefault handler to initialize itself. Want the initialization to happen in Fault context to avoid stack overflow messiness") (\CONTEXTSWITCH \FAULTFXP) (for VAR in \SYSTEMCACHEVARS do (SET VAR NIL)) T)) (SETQ \DIRTYPAGEHINT 32767)))]) (\LOGOUT0 [LAMBDA (FAST) (* ; "Edited 18-Jul-88 04:14 by masinter") [COND ((OR (EQ (fetch MachineType of \InterfacePage) \DORADO) (EQ (fetch MachineType of \InterfacePage) \DOLPHIN)) (* ;; "If we're running on a Dolphin or Dorado, we update the alto's clock. Note that Dandelions and Daybreaks don't have alto clocks, so this wouldn't work on them") (\BLT (EMADDRESS \RTCSECONDS) (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) (UNFOLD 3 WORDSPERCELL] (UNINTERRUPTABLY (OR (AND [OR (NOT FAST) (AND (EQ FAST '?) (NOT (.VMEM.CONSISTENTP.] (\FLUSHVM)) (SELECTC \MACHINETYPE (\DAYBREAK (\DoveMisc.BootButton)) (SUBRCALL LISPFINISH FAST))))]) (\DOFLUSHVM [LAMBDA (MAIKO.SYSOUTFILE) (* ; "Edited 6-Jan-89 19:23 by Hayata") (* ;;; "Write everything out in a resumable way. Value is NIL if returned from directly, T if from saved state. Always invoked via \MISCAPPLY*") (CHECK (NOT \INTERRUPTABLE)) (* ;  "NOTE: need stats gathering off in here. Also avoid touching pages") (PROG ((IFPVP (fetch (POINTER PAGE#) of \InterfacePage)) (SCRATCHBUF \EMUSWAPBUFFERS) IFPRPT) (replace (IFPAGE MISCSTACKRESULT) of \InterfacePage with T) (* ; "This will make it look like we have returned from BCPL if caller gets control from the saved state") [COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (* ;  "Mark all active stack pages dirty, since the microcode doesn't") (for VP from \VP.STACK to (IPLUS \VP.STACK (fetch HIBYTE of (fetch EndOfStack of \InterfacePage ))) as RP from \RP.STACK do (\WRITEMAP VP RP (LOGOR \VMAP.REF \VMAP.DIRTY))) (* ;  "Similarly, the GC table does not get marked dirty") (for VP from \VP.GCTABLE to (IPLUS \VP.GCTABLE (SUB1 \NP.GCTABLE)) as RP from \RP.GCTABLE do (\WRITEMAP VP RP (LOGOR \VMAP.REF \VMAP.DIRTY] [COND ((EQ \MACHINETYPE \MAIKO) (* ;; "update interface pge before writing out sysout") (replace (IFPAGE CurrentFXP) of \InterfacePage with (fetch (IFPAGE MiscFXP) of \InterfacePage )) (RETURN (SUBRCALL VMEMSAVE MAIKO.SYSOUTFILE] [COND (\VMEM.PURE.LIMIT (* ;  "Maintaining file consistency: move high water mark up") (COND (VMEM.COMPRESS.FLG (\DOCOMPRESSVMEM))) (SETQ \VMEM.PURE.LIMIT (fetch (IFPAGE NActivePages) of \InterfacePage] (COND ((.VMEM.CONSISTENTP.) (replace (IFPAGE Key) of \InterfacePage with (LOGNOT16 \IFPValidKey)) (* ;  "Invalidate vmem and write out the Interface page") (\TRANSFERPAGE IFPVP \FirstVmemBlock (RPTFROMRP (\READRP IFPVP)) T NIL))) (SETQ IFPRPT (RPTFROMRP (\READRP IFPVP))) (for RPTINDEX from 1 to (SUB1 \RPTSIZE) do (\FLUSHPAGE RPTINDEX T) unless (EQ RPTINDEX IFPRPT)) (replace (IFPAGE Key) of \InterfacePage with \IFPValidKey) (\BLT SCRATCHBUF \InterfacePage WORDSPERPAGE) (* ;  "Make its current fx point at user context, i.e. the \FLUSHVM frame") (replace (IFPAGE CurrentFXP) of SCRATCHBUF with (fetch (IFPAGE MiscFXP) of \InterfacePage)) (\ACTONVMEMFILE (\LOOKUPPAGEMAP IFPVP) SCRATCHBUF 1 T) (* ;  "Write the page out from a safe place") (RETURN NIL]) (\RELEASEWORKINGSET [LAMBDA NIL (* bvm%: "29-Nov-84 10:56") (COND ((\FLUSHVM) (* ; "Returning from Lisp startup") T) (T (* ; "Unmap any unlocked page") (for RPTINDEX from 1 to (SUB1 \RPTSIZE) bind RPTR when (AND (fetch (RPT OCCUPIED) of (SETQ RPTR (fetch RPTRBASE of RPTINDEX))) (NOT (fetch (RPT LOCKED) of RPTR))) do (\WRITEMAP (fetch (RPT VP) of RPTR) (RPFROMRPT RPTINDEX) \VMAP.VACANT) (replace (RPT EMPTY) of RPTR with T]) (\WRITEDIRTYPAGE [LAMBDA (MINDIRTY) (* bvm%: "13-Aug-85 17:51") (COND ((OR (NOT (.VMEM.CONSISTENTP.)) (AND \VMEM.PURE.LIMIT (NEQ \VMEM.PURE.LIMIT -1) (NOT \VMEM.FULL.STATE))) (PROG ((RPTR (OR \LASTDIRTYSCANPTR \REALPAGETABLE)) (NUMDIRTY (OR \LASTDIRTYCNT 0)) (CNT \MAXDIRTYSCANCOUNT) RP FP FLAGS) [COND ((AND (NULL \LASTDIRTYSCANPTR) (IGREATERP (IPLUS (add \DIRTYPAGECOUNTER 1) \PAGEFAULTCOUNTER) \UPDATECHAINFREQ)) (* ;  "Take this time to update the page chain instead") (RETURN (UNINTERRUPTABLY (\MISCAPPLY* (FUNCTION \UPDATECHAIN)))] (OR MINDIRTY (SETQ MINDIRTY 1)) LP [COND [(EQ (SETQ RP (fetch (RPT NEXTRP) of RPTR)) \PAGETABLESTOPFLG) (* ;  "Hit end of chain. Write out what we found if enough were dirty") (COND ((AND (IGEQ NUMDIRTY MINDIRTY) (NEQ NUMDIRTY 0) (SETQ RP \LASTDIRTYFOUND)) (GO GOTPAGE)) (T (SETQ \LASTDIRTYSCANPTR (SETQ \LASTDIRTYCNT (SETQ \LASTDIRTYFOUND NIL))) [COND ((AND (NEQ NUMDIRTY 0) (ILESSP \DIRTYSEEKMAX (LRSH MAX.SMALL.INTEGER 1))) (* ;  "Failed because page not close enough, so widen the tolerance") (SETQ \DIRTYSEEKMAX (LLSH \DIRTYSEEKMAX 1] (RETURN] ((fetch (RPT EMPTY) of (SETQ RPTR (fetch RPTRBASE of RP))) (* ;  "Page is empty. Should never happen if key is valid") (RETURN)) ((NOT (fetch (RPT LOCKED) of RPTR)) (* ;  "Don't bother writing out locked pages, since they don't help us in our swapping quest") (SETQ FLAGS (\READFLAGS (fetch (RPT VP) of RPTR))) (COND ((NOT (fetch (VMEMFLAGS DIRTY) of FLAGS)) (* ; "Page not dirty; skip") ) [(PROGN (SETQ FP (fetch (RPT FILEPAGE) of RPTR)) (IGREATERP (IABS (IDIFFERENCE (COND ((AND \VMEM.PURE.LIMIT (ILESSP FP \VMEM.PURE.LIMIT )) (* ;  "We'd have to write page to a new place, not here") (fetch (IFPAGE NActivePages) of \InterfacePage)) (T FP)) \LASTACCESSEDVMEMPAGE)) \DIRTYSEEKMAX)) (* ;  "Page too far away, don't write it") (COND ((fetch (VMEMFLAGS REFERENCED) of FLAGS) (* ; "but still count it") (add NUMDIRTY 1] ((IGREATERP FP \LASTVMEMFILEPAGE) (* ; "Can't write it") ) ((fetch (VMEMFLAGS REFERENCED) of FLAGS) (* ;  "Page dirty but referenced. Note it, but keep looking for a better one") (COND ((EQ NUMDIRTY 0) (SETQ \LASTDIRTYFOUND RP))) (add NUMDIRTY 1)) (T (* ; "Dirty, not referenced: do it") (GO GOTPAGE] (COND ((EQ (add CNT -1) 0) (* ;  "Scanned for long enough; don't lock user out") (SETQ \LASTDIRTYSCANPTR RPTR) (SETQ \LASTDIRTYCNT NUMDIRTY) (RETURN))) (GO LP) GOTPAGE (UNINTERRUPTABLY (SETQ \LASTDIRTYSCANPTR (SETQ RPTR (fetch RPTRBASE of RP))) (* ; "Keep traveling pointer") (SETQ \LASTDIRTYCNT (SETQ \LASTDIRTYFOUND NIL)) (COND ((ILEQ (IABS (IDIFFERENCE (fetch (RPT FILEPAGE) of RPTR) \LASTACCESSEDVMEMPAGE)) \DIRTYSEEKMAX) (* ;  "Could fail if swapping since the selection has moved the disk arm too far") (\MISCAPPLY* (FUNCTION \WRITEDIRTYPAGE1) RP RPTR))) (SETQ \DIRTYSEEKMAX \MAXSHORTSEEK)) (RETURN T]) (\WRITEDIRTYPAGE1 [LAMBDA (RP RPTR) (* bvm%: "13-Aug-85 16:41") (* ;  "Write out buffer RP. This fn is locked and called in the misc context") (COND ([AND (NOT (fetch (RPT LOCKED) of RPTR)) (fetch (VMEMFLAGS DIRTY) of (\READFLAGS (fetch (RPT VP) of RPTR] (* ;  "Verify that the page is still a candidate, so previous loop could be interruptable") (\FLUSHPAGE RP) (COND (\NEWVMEMPAGEADDED (\ASSURE.FPTOVP.PAGE]) (\COUNTREALPAGES [LAMBDA (TYPE) (* bvm%: "18-Dec-84 15:31") (SELECTQ TYPE ((DIRTY REF) [PROG [(FLAGBITS (COND ((EQ TYPE 'DIRTY) \VMAP.DIRTY) (T \VMAP.REF] (RETURN (NPAGESMACRO (NEQ (LOGAND (\READFLAGS VP) FLAGBITS) 0]) (LOCKED (NPAGESMACRO (fetch (RPT LOCKED) of RPTR))) (OCCUPIED (NPAGESMACRO T)) (\ILLEGAL.ARG TYPE]) ) (* ; "VMEM.PURE.STATE hack") (DEFINEQ (\DOCOMPRESSVMEM [LAMBDA NIL (* bvm%: " 7-Apr-84 17:53") (* ;;; "Called underneath \DOFLUSHVM to write the pages above the high water mark back to the places vacated below that mark") (PROG ((EMPTYFP (DLFPFROMRP \RP.GCTABLE)) (LASTFP (fetch NActivePages of \InterfacePage)) (OLDVIW \VMEM.INHIBIT.WRITE) VP) [COND ((NULL OLDVIW) (* ;; "Encourage \SELECTREALPAGE to select only `old' file pages for displacement, so that we don't needlessly write the same page twice") (SETQ \VMEM.INHIBIT.WRITE 'NEW] LP (COND ((IGEQ EMPTYFP LASTFP) (SETQ \VMEM.INHIBIT.WRITE OLDVIW) (RETURN))) [COND ((EQ (\GETBASE \FPTOVP EMPTYFP) \NO.VMEM.PAGE) (while (EQ (SETQ VP (\GETBASE \FPTOVP LASTFP)) \NO.VMEM.PAGE) do (SETQ LASTFP (SUB1 LASTFP))) (\MOVEVMEMFILEPAGE VP LASTFP EMPTYFP) (replace NActivePages of \InterfacePage with (SETQ LASTFP (SUB1 LASTFP] (add EMPTYFP 1) (GO LP]) (VMEM.PURE.STATE [LAMBDA FLG (* bvm%: " 7-Apr-84 16:59") (PROG1 (NOT (NULL \VMEM.PURE.LIMIT)) [COND ((IGREATERP FLG 0) (* ;; "Set \VMEM.PURE.LIMIT appropriately. If turning on, and it wasn't on before, set it to -1 so that it takes effect only at the next FLUSHVM") (SETQ \VMEM.PURE.LIMIT (AND (ARG FLG 1) (OR \VMEM.PURE.LIMIT (SETQ \VMEM.PURE.LIMIT -1])]) ) (* ;; "Handling the backing store getting too full--keep running, but if we overflow, we can never \FLUSHVM because there is no place to write some pages" ) (DEFINEQ (32MBADDRESSABLE [LAMBDA NIL (* ; "Edited 2-May-88 22:03 by MASINTER") (SELECTC \MACHINETYPE (\DORADO T) (\DOLPHIN NIL) (\DAYBREAK T) (NEQ 0 (fetch (IFPAGE DL24BitAddressable) of \InterfacePage]) (\SET.VMEM.FULL.STATE [LAMBDA NIL (* bvm%: "13-Feb-85 20:12") (* ;  "We are running out of vmem, try to extend file. Do this at next convenient time") (COND ((NOT \VMEM.FULL.STATE) (* ; "Get an interrupt to handle this") (replace VMEMFULL of \INTERRUPTSTATE with T) (SETQ \PENDINGINTERRUPT T))) (SETQ \VMEM.FULL.STATE (COND ((ILESSP (fetch (IFPAGE NActivePages) of \InterfacePage) \LASTVMEMFILEPAGE) (* ;  "Not completely full, allow normal things to happen") 0) ((.VMEM.CONSISTENTP.) T) (T 'DIRTY]) (\SET.LASTVMEMFILEPAGE [LAMBDA (N) (* ; "Edited 6-Apr-87 14:09 by bvm:") (* ;; "Called by disk routines when they discover how long the physical vmem is. Currently only used by Dove.") (COND ((IGREATERP (fetch (IFPAGE NActivePages) of \InterfacePage) (IDIFFERENCE (SETQ \LASTVMEMFILEPAGE N) \GUARDVMEMFULL)) (* ; "Vmem getting full!") (\SET.VMEM.FULL.STATE)) (T (* ;  "Vmem ok now (was earlier set to full for safety's sake)") (SETQ \VMEM.FULL.STATE NIL))) N]) (\DOVMEMFULLINTERRUPT [LAMBDA NIL (* ; "Edited 21-Oct-87 13:54 by bvm:") (* ;;; "Called while interruptable when vmem is full or nearly so. Tries to extend vmem file, or gives error if it can't") (COND (\EXTENDINGVMEMFILE (* ;; "Another interrupt happened while we are extending file. Don't try to do this one twice, but repost the interrupt in the hopes that it will happen after vmem extension is finished") (SETQ \PENDINGINTERRUPT T)) (T (RESETVARS ((\EXTENDINGVMEMFILE T)) (* ;; "Used to have code here that tried to extend the vmem file, but even on those that support extension it's flaky, and rarely what you want--people allocate the vmem file to the desired size in the first place, don't want it extended further.") (PROG ((HELPFLAG 'BREAK!)) (replace VMEMFULL of \INTERRUPTSTATE with NIL) (* ;  "Very slight chance of losing the break if ^E right here. Don't know how to fix this") (CL:CERROR "Resume the interrupted computation" (CONCAT "Your virtual memory backing file is " (COND ((>= (fetch (IFPAGE NActivePages) of \InterfacePage ) \LASTVMEMFILEPAGE) "complete") (T "near")) "ly full. Save your work & reload a.s.a.p."]) (\FLUSHVMOK? [LAMBDA (TYPE NOERROR) (* bvm%: " 7-Sep-85 10:48") (* ;;; "Called before any attempt to do a \FLUSHVM to make sure it's ok") (LET [(MSG (COND ((SELECTQ \VMEM.FULL.STATE ((T DIRTY) T) NIL) "-- virtual memory backing file too small") ((AND \VMEM.PURE.LIMIT (NEQ \VMEM.PURE.LIMIT -1) (NOT VMEM.COMPRESS.FLG)) " while VMEM.PURE.STATE is on."] (COND ((NOT MSG) T) (T [COND ((NOT NOERROR) (ERROR [CONCAT "Can't " (OR TYPE (SETQ TYPE 'LOGOUT] MSG (COND ((EQ TYPE 'LOGOUT) " You may (LOGOUT T), which quits without saving state.") (T ""] NIL]) ) (RPAQ? \UPDATECHAINFREQ 100) (RPAQ? \PAGEFAULTCOUNTER 0) (RPAQ? \DIRTYPAGECOUNTER 0) (RPAQ? \DIRTYPAGEHINT 0) (RPAQ? \LASTACCESSEDVMEMPAGE 0) (RPAQ? \MAXSHORTSEEK 1000) (RPAQ? \MINSHORTSEEK 20) (RPAQ? \MAXCLEANPROBES 20) (RPAQ? \VMEM.INHIBIT.WRITE ) (RPAQ? \VMEM.PURE.LIMIT ) (RPAQ? \VMEM.FULL.STATE ) (RPAQ? \GUARDVMEMFULL 500) (RPAQ? VMEM.COMPRESS.FLG ) (RPAQ? \DOFAULTINIT 0) (RPAQ? \VMEMACCESSFN ) (RPAQ? \SYSTEMCACHEVARS ) (RPAQ? \MAXSWAPBUFFERS 1) (RPAQ? \EXTENDINGVMEMFILE ) (RPAQ? \MaxScreenPage 0) (RPAQ? \NEWVMEMPAGEADDED ) (RPAQ? \LASTDIRTYCNT ) (RPAQ? \LASTDIRTYFOUND ) (RPAQ? \LASTDIRTYSCANPTR ) (RPAQ? \DIRTYSEEKMAX 50) (* ; "Errors signaled in the maintenance panel") (DEFINEQ (\MP.ERROR [LAMBDA (CODE STRING ARG1 ARG2) (* mpl "20-Jun-85 11:09") (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) ((OPCODES RAID) CODE)) (T (RAID STRING ARG1 ARG2]) ) (* ; "Debugging code. Some of this also runs renamed for extra TeleRaid help") (DEFINEQ (\ACTONVMEMFILE [LAMBDA (FILEPAGE BUFFER NPAGES WRITEFLAG) (* MPL "22-Jun-85 20:18") (COND ((EQ \MACHINETYPE \DANDELION) (\DL.ACTONVMEMFILE FILEPAGE BUFFER NPAGES WRITEFLAG)) ((EQ \MACHINETYPE \DAYBREAK) (\DOVE.ACTONVMEMFILE FILEPAGE BUFFER NPAGES WRITEFLAG)) (T (\M44ACTONVMEMFILE FILEPAGE BUFFER NPAGES WRITEFLAG]) (\SHOWPAGETABLE [LAMBDA (MODE FILE) (* bvm%: "12-Jul-86 16:55") (PROG ((*PRINT-BASE* 8) (OUTSTREAM (GETSTREAM FILE 'OUTPUT)) (RPTR \REALPAGETABLE) (RP 0) FLAGS VP STATE FIRSTONE LASTONE) (printout OUTSTREAM " RP VP FilePage Status" T) (until (SELECTQ MODE (CHAIN (EQ (SETQ RP (fetch (RPT NEXTRP) of RPTR)) \PAGETABLESTOPFLG)) (NIL (add RP 1) (IGEQ RP \RPTSIZE)) (\ILLEGAL.ARG MODE)) do (SETQ RPTR (fetch RPTRBASE of RP)) (SETQ VP (fetch (RPT VP) of RPTR)) (COND ((AND (NULL MODE) (EQ VP STATE)) (SETQ LASTONE RP)) (T (COND (LASTONE (printout OUTSTREAM "ditto thru " LASTONE T) (SETQ LASTONE NIL))) (SETQ FIRSTONE RP) (SETQ STATE VP) (printout OUTSTREAM |.I7.8| (RPFROMRPT RP)) [COND ((fetch (RPT EMPTY) of RPTR) (PRIN1 " Empty" OUTSTREAM)) ((NOT (fetch (RPT OCCUPIED) of RPTR)) (PRIN1 " Unavailable" OUTSTREAM)) (T (printout OUTSTREAM |.I8.8| VP %,) (\PRINTVP VP OUTSTREAM) (printout OUTSTREAM 28 |.I6.8| (fetch (RPT FILEPAGE) of RPTR) %,,) (COND ((fetch (RPT LOCKED) of RPTR) (COND ((NOT (\LOCKEDPAGEP VP)) (* ; "not permanently locked") (PRIN1 "Temp" OUTSTREAM))) (PRIN1 "Locked " OUTSTREAM))) (UNLESSRDSYS (PROGN (COND ((fetch (VMEMFLAGS REFERENCED) of (SETQ FLAGS (\READFLAGS VP))) (PRIN1 "Ref " OUTSTREAM))) (COND ((fetch (VMEMFLAGS DIRTY) of FLAGS) (PRIN1 "Dirty" OUTSTREAM] (TERPRI OUTSTREAM]) (CHECKPAGEMAP [LAMBDA NIL (* bvm%: "12-Jul-86 16:56") (LET ((*PRINT-BASE* 8) (NUMOCCUPIED 0) (NUMLOCKED 0) (CHAINOCCUPIED 0) (CHAINLOCKED 0) RPTR FPBASE FP VP RP) (CHECKFPTOVP) [for RPTINDEX from 1 to (SUB1 \RPTSIZE) when (fetch (RPT OCCUPIED) of (SETQ RPTR (fetch RPTRBASE of RPTINDEX) )) do (add NUMOCCUPIED 1) (SETQ VP (fetch (RPT VP) of RPTR)) (SETQ FP (fetch (RPT FILEPAGE) of RPTR)) (COND ((CHECKFPTOVP1 FP VP RPTINDEX)) ([NEQ VP (fetch FPVIRTUALPAGE of (SETQ FPBASE (\ADDBASE \FPTOVP FP] (printout T "RPT for RP " (RPFROMRPT RPTINDEX) " says VP ") (\PRINTVP VP T) (printout T " lives in FP " FP "; but FP Map says that FP contains ") (\PRINTVP (fetch FPVIRTUALPAGE of FPBASE) T) (printout T T)) ((\LOCKEDPAGEP VP) (add NUMLOCKED 1) (COND ((NOT (fetch (RPT LOCKED) of RPTR)) (printout T "VP " VP ", living in RP " (RPFROMRPT RPTINDEX) " should be locked but isn't." T)) ((IGREATERP FP (DLRPFROMFP (fetch (IFPAGE LastLockedFilePage) of \InterfacePage))) (printout T "VP " VP " is locked, but living in FP " FP ", which is not in the locked page area" T] (PROGN (SETQ RPTR \REALPAGETABLE) (* ; "Check pagetable chain") [while (NEQ (SETQ RP (fetch (RPT NEXTRP) of RPTR)) \PAGETABLESTOPFLG) when (fetch (RPT OCCUPIED) of (SETQ RPTR (fetch RPTRBASE of RP))) do (add CHAINOCCUPIED 1) (COND ((fetch (RPT LOCKED) of RPTR) (add CHAINLOCKED 1] (COND ((ILESSP CHAINOCCUPIED NUMOCCUPIED) (printout T NUMOCCUPIED " occupied pages, but only " CHAINOCCUPIED " are on page chain. " NUMLOCKED " pages are permanently locked; " CHAINLOCKED " pages on chain are locked somehow." T]) (CHECKFPTOVP [LAMBDA NIL (* bvm%: "10-Dec-84 12:39") (for FP from 1 to (fetch NActivePages of \InterfacePage) as (FPBASE _ (\ADDBASE \FPTOVP 1)) by (\ADDBASE FPBASE 1) when (fetch FPOCCUPIED of FPBASE) do (CHECKFPTOVP1 FP (fetch FPVIRTUALPAGE of FPBASE]) (CHECKFPTOVP1 [LAMBDA (FP VP RPTINDEX) (* bvm%: "10-Dec-84 12:36") (PROG ((FP2 (\LOOKUPPAGEMAP VP))) (RETURN (COND ((NEQ FP2 FP) (COND ((UNLESSRDSYS RPTINDEX) (printout T "RPT for RP " (RPFROMRPT RPTINDEX))) (T (printout T "FP map"))) (printout T " says FP " FP " contains VP ") (\PRINTVP VP T) (printout T "; but PageMap says that page is in FP " FP2 T) T]) (\PRINTFPTOVP [LAMBDA (FIRSTPAGE NWORDS TYPEFLG STREAM VPRAWFLG) (* bvm%: "24-Sep-86 11:44") (SETQ STREAM (GETSTREAM STREAM 'OUTPUT)) (OR FIRSTPAGE (SETQ FIRSTPAGE 1)) (OR NWORDS (SETQ NWORDS (fetch (IFPAGE NActivePages) of \InterfacePage))) (LET ((BASE (\ADDBASE \FPTOVP (SUB1 FIRSTPAGE))) (*PRINT-BASE* 8) (LASTVP -2) (NEXTFP (SUB1 FIRSTPAGE)) FIRSTFP FIRSTVP NEXTVP LOCKEDP TYPE NEXTLOCKED NEXTTYPE) (while (IGEQ NWORDS 0) do (add NEXTFP 1) [COND ((EQ NWORDS 0) (SETQ NEXTVP -1)) ((NEQ (SETQ NEXTVP (\GETBASE (SETQ BASE (\ADDBASE BASE 1)) 0)) \NO.VMEM.PAGE) (SETQ NEXTLOCKED (\LOCKEDPAGEP NEXTVP)) (if TYPEFLG then (SETQ NEXTTYPE (TYPENAME (create POINTER PAGE# _ NEXTVP))) (if (NULL NEXTTYPE) then (SETQ NEXTTYPE (SELECTC (LRSH NEXTVP 8) ((LIST \PNAME.HI (CL:1+ \PNAME.HI)) "Pnames") ((LIST \DEF.HI (CL:1+ \DEF.HI)) "Definitions") ((LIST \VAL.HI (CL:1+ \VAL.HI)) "Value cells") ((LIST \PLIST.HI (CL:1+ \PLIST.HI)) "Property lists") ((\HILOC \FPTOVP) "\FPTOVP") (\STACKHI "Stack") ((\HILOC \HTMAIN) "GC Main table") ((\HILOC \HTOVERFLOW) "GC Overflow table") NIL] [COND ([COND ((EQ NEXTVP \NO.VMEM.PAGE) (NEQ LASTVP \NO.VMEM.PAGE)) (T (OR (NEQ NEXTVP (ADD1 LASTVP)) (NEQ NEXTLOCKED LOCKEDP) (NEQ TYPE NEXTTYPE] [COND ((IGEQ LASTVP 0) (COND (FIRSTFP (printout STREAM FIRSTFP "-"))) (printout STREAM (SUB1 NEXTFP) 12) (COND ((EQ LASTVP \NO.VMEM.PAGE) (printout STREAM "empty")) (T (COND (FIRSTFP (if VPRAWFLG then (PRIN1 FIRSTVP STREAM) else (\PRINTVP FIRSTVP STREAM)) (PRIN1 "-" STREAM))) (if VPRAWFLG then (PRIN1 LASTVP STREAM) else (\PRINTVP LASTVP STREAM)) (COND (LOCKEDP (PRIN1 '* STREAM))) (if TYPE then (printout STREAM 32 TYPE] (SETQ FIRSTFP) (TERPRI STREAM) (SETQ FIRSTVP NEXTVP)) (T (* ; "in a run") (OR FIRSTFP (SETQ FIRSTFP (SUB1 NEXTFP] (SETQ LASTVP NEXTVP) (SETQ LOCKEDP NEXTLOCKED) (SETQ TYPE NEXTTYPE) (add NWORDS -1]) (\PRINTVP [LAMBDA (VP STREAM) (* bvm%: "28-MAR-83 12:40") (printout STREAM "{" (LRSH VP 8) "," (LOGAND VP 255) "}"]) ) (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS \ACTONVMEMFILE MACRO ((X . Y) (SPREADAPPLY* \VMEMACCESSFN X . Y))) (PUTPROPS .VMEM.CONSISTENTP. MACRO (NIL (EQ (fetch (IFPAGE Key) of \InterfacePage) \IFPValidKey))) (PUTPROPS .LOCKABLERP. MACRO [(RP) (OR (NEQ (FOLDLO RP PAGESPERSEGMENT) (FOLDLO \RP.STACK PAGESPERSEGMENT)) (NOT (OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK]) ) (* ; "Virtual page flags") (DECLARE%: EVAL@COMPILE (RPAQQ \VMAP.DIRTY 10000Q) (RPAQQ \VMAP.CLEAN 0) (RPAQQ \VMAP.REF 100000Q) (RPAQQ \VMAP.VACANT 30000Q) (RPAQQ \VMAP.FLAGS 170000Q) (RPAQQ \VMAP.NOTFLAGS 7777Q) (CONSTANTS \VMAP.DIRTY \VMAP.CLEAN \VMAP.REF \VMAP.VACANT \VMAP.FLAGS \VMAP.NOTFLAGS) ) (DECLARE%: EVAL@COMPILE (ACCESSFNS VMEMFLAGS ((VACANT (EQ (LOGAND DATUM \VMAP.VACANT) \VMAP.VACANT)) (DIRTY (NEQ (LOGAND DATUM \VMAP.DIRTY) 0)) (REFERENCED (NEQ (LOGAND DATUM \VMAP.REF) 0)))) ) (DECLARE%: EVAL@COMPILE (PUTPROPS LOGNOT16 MACRO ((X) (LOGXOR X 177777Q))) ) (* ; "RPT constants") (DECLARE%: EVAL@COMPILE (RPAQQ \RPT.EMPTY 177776Q) (RPAQQ \RPT.UNAVAILABLE 177777Q) (RPAQQ \PAGETABLESTOPFLG 0) (RPAQQ \RPTENTRYLENGTH 3) (CONSTANTS \RPT.EMPTY \RPT.UNAVAILABLE \PAGETABLESTOPFLG \RPTENTRYLENGTH) ) (DECLARE%: EVAL@COMPILE (BLOCKRECORD RPT ((LOCKED FLAG) (NEXTRP BITS 17Q) (VP WORD) (FILEPAGE WORD)) (BLOCKRECORD RPT ((NIL BITS 20Q) (VPSEG BYTE) (VPPAGEINSEG BYTE))) [ACCESSFNS RPT ([EMPTY (EQ (fetch (RPT VP) of DATUM) \RPT.EMPTY) (COND (NEWVALUE (replace (RPT VP) of DATUM with \RPT.EMPTY)) (T (ERROR "Invalid replace of RPT.EMPTY" DATUM] [UNAVAILABLE (EQ (fetch (RPT VP) of DATUM) \RPT.UNAVAILABLE) (COND (NEWVALUE (replace (RPT VP) of DATUM with \RPT.UNAVAILABLE)) (T (ERROR "Invalid replace of RPT.UNAVAILABLE" DATUM] (OCCUPIED (ILESSP (fetch (RPT VP) of DATUM) \RPT.EMPTY]) (ACCESSFNS RPT1 (RPTRBASE (\ADDBASE (\ADDBASE \REALPAGETABLE (LLSH DATUM 1)) DATUM))) ) (DECLARE%: EVAL@COMPILE (PUTPROPS RPFROMRPT MACRO ((RPTINDEX) (IPLUS RPTINDEX \RPOFFSET))) (PUTPROPS RPTFROMRP MACRO ((RP) (IDIFFERENCE RP \RPOFFSET))) (PUTPROPS NPAGESMACRO MACRO ((FORM) (PROG ((RESULT 0) (CNTR \RPTSIZE) (RPTR \REALPAGETABLE) VP) LP (COND ((NEQ (SETQ CNTR (SUB1 CNTR)) 0) (SETQ RPTR (\ADDBASE RPTR \RPTENTRYLENGTH)) (COND ((AND (fetch (RPT OCCUPIED) of RPTR) (PROGN (SETQ VP (fetch (RPT VP) of RPTR)) FORM)) (add RESULT 1))) (GO LP))) (RETURN RESULT)))) ) (* ; "Virtual to file pagemap") (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (RPAQQ \MAXFILEPAGE 177776Q) (CONSTANTS \MAXFILEPAGE) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (RPAQQ \EMPTYPMTENTRY 177777Q) (CONSTANTS \EMPTYPMTENTRY) ) (DECLARE%: EVAL@COMPILE (ACCESSFNS VP ((PRIMARYKEY (LRSH DATUM 5)) (SECONDARYKEY (LOGAND DATUM 37Q)) (INVALID (PROGN NIL)))) ) (DECLARE%: EVAL@COMPILE (PUTPROPS .PAGEMAPBASE. MACRO [OPENLAMBDA (VPAGE) (\ADDBASE \PAGEMAP (IPLUS (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY ) of VPAGE)) (fetch (VP SECONDARYKEY) of VPAGE]) ) (* ; "FP to VP stuff") (DECLARE%: EVAL@COMPILE (BLOCKRECORD FPTOVP ((FPVIRTUALPAGE FIXP)) [ACCESSFNS FPTOVP ((FPOCCUPIED (NEQ (\GETBASE DATUM 0) \NO.VMEM.PAGE]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \NO.VMEM.PAGE 177777Q) (CONSTANTS \NO.VMEM.PAGE) ) (DECLARE%: EVAL@COMPILE (PUTPROPS DLRPFROMFP MACRO ((FP) (ADD1 FP))) (PUTPROPS DLFPFROMRP MACRO ((RP) (SUB1 RP))) ) (PUTPROPS \TOUCHPAGE DOPVAL (1 GETBASE.N 0)) (PUTPROPS TIMES3 DOPVAL (1 COPY LLSH1 IPLUS2)) (* ; "Locked page table") (DECLARE%: EVAL@COMPILE (PUTPROPS .LOCKEDVPBASE. MACRO ((VP) (\ADDBASE \LOCKEDPAGETABLE (FOLDLO VP BITSPERWORD)))) (PUTPROPS .LOCKEDVPMASK. MACRO ((VP) (LLSH 1 (IMOD VP BITSPERWORD)))) ) (DECLARE%: EVAL@COMPILE (RPAQQ \MAXDIRTYSCANCOUNT 144Q) (RPAQQ \MINVMEMSPAREPAGES 144Q) (RPAQQ \DLBUFFERPAGES 20Q) (CONSTANTS \MAXDIRTYSCANCOUNT \MINVMEMSPAREPAGES \DLBUFFERPAGES) ) (DECLARE%: EVAL@COMPILE (RPAQQ 2MBPAGES 10000Q) (CONSTANTS 2MBPAGES) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \UPDATECHAINFREQ \REALPAGETABLE \RPTLAST \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \PAGEFAULTCOUNTER \LASTDIRTYCNT \LASTDIRTYFOUND \LASTDIRTYSCANPTR \MACHINETYPE \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYSEEKMAX \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \VMEMACCESSFN \SYSTEMCACHEVARS \LASTVMEMFILEPAGE \EXTENDINGVMEMFILE \MaxScreenPage \NEWVMEMPAGEADDED) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \#SWAPBUFFERS \#EMUBUFFERS \#DISKBUFFERS \MAXSWAPBUFFERS \EMUSWAPBUFFERS \EMUBUFFERS \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND) ) (DECLARE%: EVAL@COMPILE (PUTPROPS RWMufMan DMACRO ((X) ((OPCODES 170Q 11Q) X))) ) (DECLARE%: EVAL@COMPILE (RPAQQ DOLOCKCHECKS NIL) (CONSTANTS (DOLOCKCHECKS NIL)) ) ) (* ;;; "MAKEINIT stuff") (DEFINEQ (ADDPME [LAMBDA (VP NEWPAGEOK) (* bvm%: " 6-Dec-84 14:07") (* ;; "add an entry for VP to the PAGEMAP. Called only under MAKEINIT") (PROG (PX PMP LOCKBASE) [COND ((IEQ (SETQ PMP (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP))) \EmptyPMTEntry) (* ;  "empty entries in the PageMapTBL have 177777q as their value") (COND ((EVENP NEXTPM WORDSPERPAGE) (* ; "must add a new page map page") (SETQ PX (\ADDBASE \PAGEMAP NEXTPM)) (OR NEWPAGEOK (IGREATERP (PAGELOC PX) VP) (HELP "page map needs new page after page map written out")) (\NEWPAGE PX NIL T))) (\PUTBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP) (SETQ PMP NEXTPM)) (SETQ NEXTPM (IPLUS NEXTPM \PMblockSize] (SETQ PX (IPLUS PMP (fetch (VP SECONDARYKEY) of VP))) (COND ((NEQ (\GETBASE \PAGEMAP PX) 0) (HELP "page already in pagemap" VP)) (T (\PUTBASE \PAGEMAP PX NEXTVMEM) [COND ((LOCKEDPAGEP VP) (* ;  "Set lock bit in locked page table") (\PUTBASE (SETQ LOCKBASE (.LOCKEDVPBASE. VP)) 0 (LOGOR (.LOCKEDVPMASK. VP) (\GETBASE LOCKBASE 0] (SETQ NEXTVMEM (ADD1 NEXTVMEM]) (CHECKIFPAGE [LAMBDA NIL (* mjs "19-Jul-84 13:24") (CHECKIF Key EQUAL \IFPValidKey "Interface page key"]) (DUMPINITPAGES [LAMBDA (CODEFIRSTPAGE CODENEXTPAGE VERSIONS) (* bvm%: "14-Jan-85 12:51") (* ; "called only under MAKEINIT") (ADDPME (PAGELOC \InterfacePage) T) (* ;  "THE INTERFACE PAGE MUST BE THE FIRST PAGE") (for I from CODEFIRSTPAGE to (SUB1 CODENEXTPAGE) do (* ;  "add the pagemap entries for the pages which were written directly to the file") (ADDPME I T)) (MAPPAGES 0 (ADD1 \MAXVMPAGE) (FUNCTION MAKEROOMFORPME)) (MAPPAGES 0 (ADD1 \MAXVMPAGE) (FUNCTION ADDPME)) (PROGN (* ;  "set interface page locations --- stack pointers already set up IN SETUPSTACK") (replace (IFPAGE NxtPMAddr) of \InterfacePage with NEXTPM) (replace (IFPAGE NActivePages) of \InterfacePage with (SUB1 NEXTVMEM)) (replace (IFPAGE NDirtyPages) of \InterfacePage with (SUB1 NEXTVMEM)) (replace (IFPAGE filePnPMP0) of \InterfacePage with (\GETBASE \PAGEMAP 0)) (replace (IFPAGE filePnPMT0) of \InterfacePage with (\GETBASE (.PAGEMAPBASE. (PAGELOC \PageMapTBL)) 0)) [COND (VERSIONS (replace (IFPAGE LVersion) of \InterfacePage with (CAR VERSIONS)) (replace (IFPAGE MinBVersion) of \InterfacePage with (CADDR VERSIONS )) (replace (IFPAGE MinRVersion) of \InterfacePage with (CADR VERSIONS] (replace (IFPAGE Key) of \InterfacePage with \IFPValidKey)) (MAPPAGES 0 (ADD1 \MAXVMPAGE) (FUNCTION DUMPVP)) (ALLOCAL (PROG ((FILE (OUTPUT))) [COND ((NOT (RANDACCESSP FILE)) (* ;  "SYSOUT file is sequential; have to get it random access for this") (OUTPUT (SETQ FILE (OPENFILE (CLOSEF FILE) 'BOTH] (SETFILEPTR FILE MKI.Page0Byte))) (DUMPVP (PAGELOC \InterfacePage]) (MAKEROOMFORPME [LAMBDA (VP) (* bvm%: "29-MAR-83 17:11") (* ;;  "make sure that the pagemap-page for page VP exists; we later will want to add it to the pagemap") (COND ((IEQ (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP)) \EmptyPMTEntry) (* ;  "empty entries in the PageMapTBL have 177777q as their value") (COND ((EVENP NEXTPM WORDSPERPAGE) (* ; "must add a new page map page") (\NEWPAGE (\ADDBASE \PAGEMAP NEXTPM) NIL T))) (\PUTBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP) NEXTPM) (SETQ NEXTPM (IPLUS NEXTPM \PMblockSize]) (MAPPAGES [LAMBDA (BOT TOP FN) (* ;  "Edited 5-Nov-92 15:41 by sybalsky:mv:envos") (* ;; "Map thru all pages from BOT to TOP that exist, skipping the interface page, if it falls into that range. Call FN on the page number.") (PROG ((VP BOT) (IVP (PAGELOC \InterfacePage))) LP (COND ((AND (SETQ VP (MKI.NEXTPAGE VP)) (IGREATERP TOP VP)) (COND ((NOT (IEQ VP IVP)) (APPLY* FN VP))) (SETQ VP (ADD1 VP)) (GO LP]) (READPAGEMAP [LAMBDA NIL (* bvm%: "10-Dec-84 21:54") (* ;  "called only under READSYS -- reads in pagemap so that SETVMPTR can work") (PROG (D) (LOCAL (MAPVMPAGE (fetch (POINTER PAGE#) of \InterfacePage) 1)) (* ; "Install interface page by magic") (* PROGN (SETQ FPSTART  (fetch (IFPAGE LastDominoFilePage)  of \InterfacePage))  (SETQ NPAGES (fetch  (IFPAGE NActivePages) of  \InterfacePage)) (* ;  "Note: have to do these fetches before the SETFILEPTR since they indirectly do SETFILEPTR themselves")  (SETFILEPTR VMEMFILE  (IPLUS (UNFOLD (SUB1  (fetch (IFPAGE FPTOVPStart) of  \InterfacePage)) BYTESPERPAGE)  (UNFOLD FPSTART BYTESPERWORD)))  (for I from FPSTART to NPAGES bind  VP when (NEQ (SETQ VP  (VBIN2)) \NO.VMEM.PAGE) do  (* ; "Read in all of FPTOVP")  (MAPVMPAGE VP (SUB1 I)))) [LOCAL (MAPVMPAGE (PAGELOC \PAGEMAP) (SUB1 (fetch (IFPAGE filePnPMP0) of \InterfacePage] (* ; "map in first page of secondary page map, which is where all the secondary map pages themselves live") (LOCAL (SETVMPTR \PAGEMAP)) (for I from 0 to (SUB1 (FOLDHI PAGESPERSEGMENT \PMblockSize)) as VP from (PAGELOC \PAGEMAP) by \PMblockSize do (* ; "Have to read all the addresses of secondary map pages themselves before we can read their contents") (READPAGEMAPBLOCK VP)) (for J from 0 to (SUB1 \NumPMTpages) as FP from (SUB1 (fetch (IFPAGE filePnPMT0) of \InterfacePage)) do (* ;  "read in all the primary map table pages") (LOCAL (MAPVMPAGE (IPLUS (PAGELOC \PageMapTBL) J) FP))) (for I from 0 to (SUB1 (UNFOLD \NumPMTpages WORDSPERPAGE)) do (COND ((IEQ (SETQ D (GETBASE \PageMapTBL I)) \EmptyPMTEntry)) (T (LOCAL (SETVMPTR (ADDBASE \PAGEMAP D))) (READPAGEMAPBLOCK (UNFOLD I \PMblockSize]) (READPAGEMAPBLOCK [LAMBDA (VP) (* lmm " 4-MAY-82 21:12") (PROG ((B VP) P) (FRPTQ \PMblockSize [COND ((NEQ (SETQ P (VBIN2)) 0) (LOCAL (MAPVMPAGE B (SUB1 P] (SETQ B (ADD1 B]) (SETUPPAGEMAP [LAMBDA NIL (* ;  "Edited 5-Nov-92 16:03 by sybalsky:mv:envos") (* ;  "called only from MAKEINIT to initialize the page map") (PROG NIL (* ; "set up page map") (\NEWPAGE \PAGEMAP NIL T) (* ;  "Create 1 page worth of real page table") (CREATEPAGES \PageMapTBL \NumPMTpages NIL T) (* ; "And the segment table.") (* ;; "init PageMapTBL pages to 177777q:") (for I from 0 to (SUB1 (UNFOLD \NumPMTpages WORDSPERPAGE)) do (\PUTBASE \PageMapTBL I \EmptyPMTEntry)) (SETQ NEXTPM 0) (for I from 0 to (SUB1 (fetch (VP PRIMARYKEY) of \NumPageMapPages)) bind (PAGEMAPKEY _ (fetch (VP PRIMARYKEY) of (PAGELOC \PAGEMAP))) do (* ;; "Assign pagemap pages to cover all pagemap pages, so that \DONEWPAGE can guarantee that when it needs to allocate a new pagemap page, that the pagemap page for the new page already exists") (\PUTBASE \PageMapTBL (IPLUS PAGEMAPKEY I) NEXTPM) (SETQ NEXTPM (IPLUS NEXTPM \PMblockSize))) (SETQ NEXTVMEM \FirstVmemBlock) (* ;  "add entry for InterfacePage which must be on FirstVMemBlock") (CREATEPAGES \LOCKEDPAGETABLE \NumLPTPages NIL T]) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS CHECKIF MACRO [(FLD COMPARISON VALUE STR) (COND ((NOT (COMPARISON VALUE (fetch (IFPAGE FLD) of \InterfacePage ))) (printout T "Warning: " STR "= " (PROGN VALUE) ", but \InterfacePage says " (fetch (IFPAGE FLD) of \InterfacePage) T]) ) (ADDTOVAR INEWCOMS (FNS DUMPINITPAGES) (VARS INITCONSTANTS) (FNS SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES)) (ADDTOVAR RDCOMS (FNS READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE \LOCKEDPAGEP \LOOKUPPAGEMAP CHECKPAGEMAP CHECKFPTOVP CHECKFPTOVP1 \SHOWPAGETABLE \PRINTFPTOVP)) (ADDTOVAR EXPANDMACROFNS CHECKIF .LOCKEDVPBASE. .LOCKEDVPMASK. .PAGEMAPBASE.) (ADDTOVAR MKI.SUBFNS (\NEWPAGE . MKI.NEWPAGE) (\LOCKPAGES . MKI.LOCKPAGES)) (ADDTOVAR RD.SUBFNS (\NEWPAGE . VNEWPAGE) (\LOCKPAGES . VLOCKPAGES)) (ADDTOVAR RDPTRS (\REALPAGETABLE)) (ADDTOVAR RDVALS (\RPTSIZE)) EVAL@COMPILE (ADDTOVAR DONTCOMPILEFNS DUMPINITPAGES SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE) ) (DEFINEQ (\LOCKFN [LAMBDA (FN) (* bvm%: "22-NOV-82 17:39") [\LOCKCELL (SETQ FN (fetch (LITATOM DEFINITIONCELL) of (EVQ FN] (COND ((fetch (DEFINITIONCELL CCODEP) of FN) (\LOCKCODE (fetch (DEFINITIONCELL DEFPOINTER) of FN]) (\LOCKCODE [LAMBDA (CODEBLOCK) (* rmk%: "15-Aug-84 13:35") (\LOCKWORDS CODEBLOCK (UNFOLD (\#BLOCKDATACELLS CODEBLOCK) WORDSPERCELL]) (\LOCKVAR [LAMBDA (VAR) (* lmm " 5-APR-82 00:43") (\LOCKCELL (fetch (LITATOM VCELL) of (EVQ VAR]) (\LOCKCELL [LAMBDA (X NPGS) (* bvm%: "22-NOV-82 17:54") (\LOCKPAGES (PAGEBASE X) (OR NPGS 1]) (\LOCKWORDS [LAMBDA (BASE NWORDS) (* bvm%: "22-NOV-82 17:35") (\LOCKPAGES (PAGEBASE BASE) (COND (NWORDS (FOLDHI (IPLUS (fetch (POINTER WORDINPAGE) of BASE) NWORDS) WORDSPERPAGE)) (T 1]) ) (DECLARE%: DONTCOPY (ADDTOVAR INEWCOMS (FNS \LOCKFN \LOCKVAR \LOCKCELL \LOCKWORDS \LOCKCODE) (ALLOCAL (ADDVARS (LOCKEDFNS \FAULTHANDLER \FAULTINIT \DOVE.FAULTINIT \D01.FAULTINIT \DL.FAULTINIT \CHAIN.UP.RPT \MAKESPACEFORLOCKEDPAGE \PAGEFAULT \WRITEMAP \LOOKUPPAGEMAP \LOCKEDPAGEP \LOADVMEMPAGE \MOVEREALPAGE \INVALIDADDR \INVALIDVP \SELECTREALPAGE \TRANSFERPAGE \SPECIALRP \UPDATECHAIN \MARKPAGEVACANT \FLUSHPAGE \CLEARWORDS \FLUSHVM \DONEWPAGE \ASSURE.FPTOVP.PAGE \DONEWEPHEMERALPAGE \WRITEDIRTYPAGE1 \COPYSYS0 \COPYSYS0SUBR \RELEASEWORKINGSET \DOFLUSHVM \DOLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \MP.ERROR RAID \DL.NEWFAULTINIT \DL.MARK.PAGES.UNAVAILABLE \DL.UNMAPPAGES \DL.ASSIGNBUFFERS \D01.ASSIGNBUFFERS \DOCOMPRESSVMEM \MOVEVMEMFILEPAGE \SET.VMEM.FULL.STATE \HINUM \LONUM \ATOMCELL SETTOPVAL) (LOCKEDVARS \REALPAGETABLE \RPTLAST \PAGEFAULTCOUNTER \UPDATECHAINFREQ \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \MACHINETYPE \VMEMACCESSFN \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND \MAXSWAPBUFFERS \EMUBUFFERS \#EMUBUFFERS \#SWAPBUFFERS \#DISKBUFFERS \RCLKSECOND \RCLKMILLISECOND \VALSPACE \EMUSWAPBUFFERS \EM.CURSORBITMAP \PAGEMAP \PageMapTBL \IOCBPAGE \IOPAGE \MISCSTATS \DEFSPACE \InterfacePage \LASTVMEMFILEPAGE \DoveIORegion \MaxScreenPage \NEWVMEMPAGEADDED)))) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA VMEM.PURE.STATE) ) (PRETTYCOMPRINT LLFAULTCOMS) (RPAQQ LLFAULTCOMS [(VARS (FAULTTEST T)) (COMS (* ;  "Bootstrap code, run once when an image is booted") (FNS \FAULTINIT \D01.FAULTINIT \D01.ASSIGNBUFFERS \MAIKO.FAULTINIT \MAIKO.NEWFAULTINIT \MAIKO.ASSIGNBUFFERS \M-VMEMSAVE \MAIKO.NEWPAGE) (* ;; "For setting up (and maybe eventually removing?) MAIKO-specific versions of the generic low-levle functions:") (FNS \MAIKO.DO.MOVDS) (ADDVARS (\MAIKO.MOVDS (TRUE \LOCKEDPAGEP) (\MAIKO.NEWPAGE \NEWPAGE) (\MAIKO.NEWPAGE \DONEWPAGE) (NILL \LOCKPAGES) (NILL \DOLOCKPAGES) (NILL \DOTEMPLOCKPAGES) (NILL \TEMPUNLOCKPAGES) (NILL \UNLOCKPAGES) (NILL \WRITEDIRTYPAGE) (NILL \DIRTYBACKGROUND) (ZERO \COUNTREALPAGES) (NILL \SHOWPAGETABLE) (NILL CHECKPAGEMAP) (EVQ \PAGEFAULT) (EVQ \LOADVMEMPAGE) (NILL \LOADVMEMPAGE) (TRUE \MOVEVMEMFILEPAGE) (TRUE \VALIDADDRESSP))) (FNS \DOVE.FAULTINIT \DL.FAULTINIT \DL.NEWFAULTINIT \DL.UNMAPPAGES \DL.MARK.PAGES.UNAVAILABLE \DL.ASSIGNBUFFERS \CHAIN.UP.RPT)) (COMS (* ; "Pagefault handler") (FNS \FAULTHANDLER \PAGEFAULT \INVALIDADDR \INVALIDVP \FLUSHPAGE \LOADVMEMPAGE \MOVEREALPAGE \LOOKUPPAGEMAP \VALIDADDRESSP \LOCKEDPAGEP \SELECTREALPAGE \SPECIALRP \TRANSFERPAGE \UPDATECHAIN)) (COMS (* ;  "Allocating and locking new pages") (FNS \NEWPAGE \DONEWPAGE \ASSURE.FPTOVP.PAGE \MAKESPACEFORLOCKEDPAGE \MOVEVMEMFILEPAGE \NEWEPHEMERALPAGE \DONEWEPHEMERALPAGE \LOCKPAGES \DOLOCKPAGES \TEMPLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \UNLOCKPAGES)) (COMS (* ; "Writing out the vmem") (FNS \FLUSHVM \LOGOUT0 \DOFLUSHVM \RELEASEWORKINGSET \WRITEDIRTYPAGE \WRITEDIRTYPAGE1 \COUNTREALPAGES)) (COMS (* ; "VMEM.PURE.STATE hack") (FNS \DOCOMPRESSVMEM VMEM.PURE.STATE)) (COMS (* ;; "Handling the backing store getting too full--keep running, but if we overflow, we can never \FLUSHVM because there is no place to write some pages") (FNS 32MBADDRESSABLE \SET.VMEM.FULL.STATE \SET.LASTVMEMFILEPAGE \DOVMEMFULLINTERRUPT \FLUSHVMOK?)) (INITVARS (\UPDATECHAINFREQ 144Q) (\PAGEFAULTCOUNTER 0) (\DIRTYPAGECOUNTER 0) (\DIRTYPAGEHINT 0) (\LASTACCESSEDVMEMPAGE 0) (\MAXSHORTSEEK 1750Q) (\MINSHORTSEEK 24Q) (\MAXCLEANPROBES 24Q) (\VMEM.INHIBIT.WRITE) (\VMEM.PURE.LIMIT) (\VMEM.FULL.STATE) (\GUARDVMEMFULL 764Q) (VMEM.COMPRESS.FLG) (\DOFAULTINIT 0) (\VMEMACCESSFN) (\SYSTEMCACHEVARS) (\MAXSWAPBUFFERS 1) (\EXTENDINGVMEMFILE) (\MaxScreenPage 0) (\NEWVMEMPAGEADDED)) (INITVARS (\LASTDIRTYCNT) (\LASTDIRTYFOUND) (\LASTDIRTYSCANPTR) (\DIRTYSEEKMAX 62Q)) (COMS (* ;  "Errors signaled in the maintenance panel") (FNS \MP.ERROR)) (COMS (* ;  "Debugging code. Some of this also runs renamed for extra TeleRaid help") (FNS \ACTONVMEMFILE \SHOWPAGETABLE CHECKPAGEMAP CHECKFPTOVP CHECKFPTOVP1 \PRINTFPTOVP \PRINTVP)) (E (RESETSAVE (RADIX 10Q))) (DECLARE%: EVAL@COMPILE DONTCOPY (MACROS \ACTONVMEMFILE .VMEM.CONSISTENTP. .LOCKABLERP.) (COMS (* ; "Virtual page flags") (CONSTANTS \VMAP.DIRTY \VMAP.CLEAN \VMAP.REF \VMAP.VACANT \VMAP.FLAGS \VMAP.NOTFLAGS) (RECORDS VMEMFLAGS) (MACROS LOGNOT16)) (COMS (* ; "RPT constants") (CONSTANTS \RPT.EMPTY \RPT.UNAVAILABLE \PAGETABLESTOPFLG \RPTENTRYLENGTH) (RECORDS RPT RPT1) (MACROS RPFROMRPT RPTFROMRP NPAGESMACRO)) (COMS (* ; "Virtual to file pagemap") (EXPORT (CONSTANTS \MAXFILEPAGE)) (CONSTANTS \EMPTYPMTENTRY) (RECORDS VP) (MACROS .PAGEMAPBASE.)) (COMS (* ; "FP to VP stuff") (RECORDS FPTOVP) (CONSTANTS \NO.VMEM.PAGE) (MACROS DLRPFROMFP DLFPFROMRP)) (PROP DOPVAL \TOUCHPAGE TIMES3) (COMS (* ; "Locked page table") (MACROS .LOCKEDVPBASE. .LOCKEDVPMASK.)) (CONSTANTS \MAXDIRTYSCANCOUNT \MINVMEMSPAREPAGES \DLBUFFERPAGES) (CONSTANTS 2MBPAGES) (GLOBALVARS \UPDATECHAINFREQ \REALPAGETABLE \RPTLAST \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \PAGEFAULTCOUNTER \LASTDIRTYCNT \LASTDIRTYFOUND \LASTDIRTYSCANPTR \MACHINETYPE \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYSEEKMAX \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \VMEMACCESSFN \SYSTEMCACHEVARS \LASTVMEMFILEPAGE \EXTENDINGVMEMFILE \MaxScreenPage \NEWVMEMPAGEADDED) (GLOBALVARS \#SWAPBUFFERS \#EMUBUFFERS \#DISKBUFFERS \MAXSWAPBUFFERS \EMUSWAPBUFFERS \EMUBUFFERS \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND) (MACROS RWMufMan) (CONSTANTS (DOLOCKCHECKS NIL))) [COMS (* ;;; "MAKEINIT stuff") (FNS ADDPME CHECKIFPAGE DUMPINITPAGES MAKEROOMFORPME MAPPAGES READPAGEMAP READPAGEMAPBLOCK SETUPPAGEMAP) (DECLARE%: DONTCOPY (MACROS CHECKIF) (ADDVARS (INEWCOMS (FNS DUMPINITPAGES) (VARS INITCONSTANTS) (FNS SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES)) (RDCOMS (FNS READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE \LOCKEDPAGEP \LOOKUPPAGEMAP CHECKPAGEMAP CHECKFPTOVP CHECKFPTOVP1 \SHOWPAGETABLE \PRINTFPTOVP)) (EXPANDMACROFNS CHECKIF .LOCKEDVPBASE. .LOCKEDVPMASK. .PAGEMAPBASE.) (MKI.SUBFNS (\NEWPAGE . MKI.NEWPAGE) (\LOCKPAGES . MKI.LOCKPAGES)) (RD.SUBFNS (\NEWPAGE . VNEWPAGE) (\LOCKPAGES . VLOCKPAGES)) (RDPTRS (\REALPAGETABLE)) (RDVALS (\RPTSIZE))) EVAL@COMPILE (ADDVARS (DONTCOMPILEFNS DUMPINITPAGES SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE] (FNS \LOCKFN \LOCKCODE \LOCKVAR \LOCKCELL \LOCKWORDS) [DECLARE%: DONTCOPY (ADDVARS (INEWCOMS (FNS \LOCKFN \LOCKVAR \LOCKCELL \LOCKWORDS \LOCKCODE) (ALLOCAL (ADDVARS (LOCKEDFNS \FAULTHANDLER \FAULTINIT \DOVE.FAULTINIT \D01.FAULTINIT \DL.FAULTINIT \CHAIN.UP.RPT \MAKESPACEFORLOCKEDPAGE \PAGEFAULT \WRITEMAP \LOOKUPPAGEMAP \LOCKEDPAGEP \LOADVMEMPAGE \MOVEREALPAGE \INVALIDADDR \INVALIDVP \SELECTREALPAGE \TRANSFERPAGE \SPECIALRP \UPDATECHAIN \MARKPAGEVACANT \FLUSHPAGE \CLEARWORDS \FLUSHVM \DONEWPAGE \ASSURE.FPTOVP.PAGE \DONEWEPHEMERALPAGE \WRITEDIRTYPAGE1 \COPYSYS0 \COPYSYS0SUBR \RELEASEWORKINGSET \DOFLUSHVM \DOLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \MP.ERROR RAID \DL.NEWFAULTINIT \DL.MARK.PAGES.UNAVAILABLE \DL.UNMAPPAGES \DL.ASSIGNBUFFERS \D01.ASSIGNBUFFERS \DOCOMPRESSVMEM \MOVEVMEMFILEPAGE \SET.VMEM.FULL.STATE \HINUM \LONUM \ATOMCELL SETTOPVAL) (LOCKEDVARS \REALPAGETABLE \RPTLAST \PAGEFAULTCOUNTER \UPDATECHAINFREQ \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \MACHINETYPE \VMEMACCESSFN \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND \MAXSWAPBUFFERS \EMUBUFFERS \#EMUBUFFERS \#SWAPBUFFERS \#DISKBUFFERS \RCLKSECOND \RCLKMILLISECOND \VALSPACE \EMUSWAPBUFFERS \EM.CURSORBITMAP \PAGEMAP \PageMapTBL \IOCBPAGE \IOPAGE \MISCSTATS \DEFSPACE \InterfacePage \LASTVMEMFILEPAGE \DoveIORegion \MaxScreenPage \NEWVMEMPAGEADDED] (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA CHECKPAGEMAP \SHOWPAGETABLE VMEM.PURE.STATE \COUNTREALPAGES \WRITEDIRTYPAGE \UNLOCKPAGES \TEMPUNLOCKPAGES \DOTEMPLOCKPAGES \DOLOCKPAGES \LOCKPAGES \LOADVMEMPAGE]) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA CHECKPAGEMAP \SHOWPAGETABLE VMEM.PURE.STATE \COUNTREALPAGES \WRITEDIRTYPAGE \UNLOCKPAGES \TEMPUNLOCKPAGES \DOTEMPLOCKPAGES \DOLOCKPAGES \LOCKPAGES \LOADVMEMPAGE) ) (PUTPROPS LLFAULT COPYRIGHT ("Venue & Xerox Corporation" 3676Q 3677Q 3700Q 3701Q 3702Q 3703Q 3704Q 3705Q 3706Q 3707Q 3710Q 3711Q)) (DECLARE%: DONTCOPY (FILEMAP (NIL (31155Q 64663Q (\FAULTINIT 31167Q . 40416Q) (\D01.FAULTINIT 40420Q . 46045Q) ( \D01.ASSIGNBUFFERS 46047Q . 51614Q) (\MAIKO.FAULTINIT 51616Q . 54403Q) (\MAIKO.NEWFAULTINIT 54405Q . 55632Q) (\MAIKO.ASSIGNBUFFERS 55634Q . 61307Q) (\M-VMEMSAVE 61311Q . 64426Q) (\MAIKO.NEWPAGE 64430Q . 64661Q)) (65063Q 72470Q (\MAIKO.DO.MOVDS 65075Q . 72466Q)) (73627Q 164307Q (\DOVE.FAULTINIT 73641Q . 100234Q) (\DL.FAULTINIT 100236Q . 105327Q) (\DL.NEWFAULTINIT 105331Q . 152043Q) (\DL.UNMAPPAGES 152045Q . 153033Q) (\DL.MARK.PAGES.UNAVAILABLE 153035Q . 153773Q) (\DL.ASSIGNBUFFERS 153775Q . 157516Q ) (\CHAIN.UP.RPT 157520Q . 164305Q)) (164352Q 250664Q (\FAULTHANDLER 164364Q . 165242Q) (\PAGEFAULT 165244Q . 171003Q) (\INVALIDADDR 171005Q . 171261Q) (\INVALIDVP 171263Q . 171522Q) (\FLUSHPAGE 171524Q . 176665Q) (\LOADVMEMPAGE 176667Q . 203040Q) (\MOVEREALPAGE 203042Q . 206302Q) (\LOOKUPPAGEMAP 206304Q . 207276Q) (\VALIDADDRESSP 207300Q . 207570Q) (\LOCKEDPAGEP 207572Q . 210774Q) ( \SELECTREALPAGE 210776Q . 232733Q) (\SPECIALRP 232735Q . 233752Q) (\TRANSFERPAGE 233754Q . 241615Q) ( \UPDATECHAIN 241617Q . 250662Q)) (250746Q 325516Q (\NEWPAGE 250760Q . 252755Q) (\DONEWPAGE 252757Q . 262516Q) (\ASSURE.FPTOVP.PAGE 262520Q . 265472Q) (\MAKESPACEFORLOCKEDPAGE 265474Q . 273076Q) ( \MOVEVMEMFILEPAGE 273100Q . 275521Q) (\NEWEPHEMERALPAGE 275523Q . 276254Q) (\DONEWEPHEMERALPAGE 276256Q . 303474Q) (\LOCKPAGES 303476Q . 304122Q) (\DOLOCKPAGES 304124Q . 313670Q) (\TEMPLOCKPAGES 313672Q . 314401Q) (\DOTEMPLOCKPAGES 314403Q . 317416Q) (\TEMPUNLOCKPAGES 317420Q . 322302Q) ( \UNLOCKPAGES 322304Q . 325514Q)) (325564Q 364701Q (\FLUSHVM 325576Q . 332240Q) (\LOGOUT0 332242Q . 334112Q) (\DOFLUSHVM 334114Q . 344600Q) (\RELEASEWORKINGSET 344602Q . 346372Q) (\WRITEDIRTYPAGE 346374Q . 362140Q) (\WRITEDIRTYPAGE1 362142Q . 363467Q) (\COUNTREALPAGES 363471Q . 364677Q)) (364747Q 370276Q (\DOCOMPRESSVMEM 364761Q . 367277Q) (VMEM.PURE.STATE 367301Q . 370274Q)) (370545Q 402263Q ( 32MBADDRESSABLE 370557Q . 371225Q) (\SET.VMEM.FULL.STATE 371227Q . 373150Q) (\SET.LASTVMEMFILEPAGE 373152Q . 374523Q) (\DOVMEMFULLINTERRUPT 374525Q . 400270Q) (\FLUSHVMOK? 400272Q . 402261Q)) (403737Q 404373Q (\MP.ERROR 403751Q . 404371Q)) (404524Q 434334Q (\ACTONVMEMFILE 404536Q . 405335Q) ( \SHOWPAGETABLE 405337Q . 413040Q) (CHECKPAGEMAP 413042Q . 420724Q) (CHECKFPTOVP 420726Q . 421740Q) ( CHECKFPTOVP1 421742Q . 423131Q) (\PRINTFPTOVP 423133Q . 434016Q) (\PRINTVP 434020Q . 434332Q)) ( 454624Q 504322Q (ADDPME 454636Q . 460205Q) (CHECKIFPAGE 460207Q . 460461Q) (DUMPINITPAGES 460463Q . 466101Q) (MAKEROOMFORPME 466103Q . 467603Q) (MAPPAGES 467605Q . 471004Q) (READPAGEMAP 471006Q . 500163Q) (READPAGEMAPBLOCK 500165Q . 500755Q) (SETUPPAGEMAP 500757Q . 504320Q)) (507431Q 511777Q ( \LOCKFN 507443Q . 510146Q) (\LOCKCODE 510150Q . 510512Q) (\LOCKVAR 510514Q . 510764Q) (\LOCKCELL 510766Q . 511232Q) (\LOCKWORDS 511234Q . 511775Q))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "10-Feb-2021 22:44:43" {DSK}larry>ilisp>medley>sources>LLFAULT.;5 507542Q changes to%: (FNS \FLUSHVM \DOFLUSHVM \FAULTINIT \D01.FAULTINIT \D01.ASSIGNBUFFERS \MAIKO.FAULTINIT \MAIKO.NEWFAULTINIT \MAIKO.ASSIGNBUFFERS \M-VMEMSAVE \MAIKO.NEWPAGE \MAIKO.DO.MOVDS \DOVE.FAULTINIT \DL.FAULTINIT \DL.NEWFAULTINIT \DL.UNMAPPAGES \DL.MARK.PAGES.UNAVAILABLE \DL.ASSIGNBUFFERS \CHAIN.UP.RPT \FAULTHANDLER \PAGEFAULT \INVALIDADDR \INVALIDVP \FLUSHPAGE \LOADVMEMPAGE \MOVEREALPAGE \LOOKUPPAGEMAP \VALIDADDRESSP \LOCKEDPAGEP \SELECTREALPAGE \SPECIALRP \TRANSFERPAGE \UPDATECHAIN \NEWPAGE \DONEWPAGE \ASSURE.FPTOVP.PAGE \MAKESPACEFORLOCKEDPAGE \MOVEVMEMFILEPAGE \NEWEPHEMERALPAGE \DONEWEPHEMERALPAGE \LOCKPAGES \DOLOCKPAGES \TEMPLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \UNLOCKPAGES \LOGOUT0 \FLUSHVMOK?) (VARS LLFAULTCOMS) previous date%: "10-Feb-2021 22:40:24" {DSK}larry>ilisp>medley>sources>LLFAULT.;4) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 2021 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT LLFAULTCOMS) (RPAQQ LLFAULTCOMS [(VARS (FAULTTEST T)) (COMS (* ;  "Bootstrap code, run once when an image is booted") (FNS \FAULTINIT \D01.FAULTINIT \D01.ASSIGNBUFFERS \MAIKO.FAULTINIT \MAIKO.NEWFAULTINIT \MAIKO.ASSIGNBUFFERS \M-VMEMSAVE \MAIKO.NEWPAGE) (* ;; "For setting up (and maybe eventually removing?) MAIKO-specific versions of the generic low-levle functions:") (FNS \MAIKO.DO.MOVDS) (ADDVARS (\MAIKO.MOVDS (TRUE \LOCKEDPAGEP) (\MAIKO.NEWPAGE \NEWPAGE) (\MAIKO.NEWPAGE \DONEWPAGE) (NILL \LOCKPAGES) (NILL \DOLOCKPAGES) (NILL \DOTEMPLOCKPAGES) (NILL \TEMPUNLOCKPAGES) (NILL \UNLOCKPAGES) (NILL \WRITEDIRTYPAGE) (NILL \DIRTYBACKGROUND) (ZERO \COUNTREALPAGES) (NILL \SHOWPAGETABLE) (NILL CHECKPAGEMAP) (EVQ \PAGEFAULT) (EVQ \LOADVMEMPAGE) (NILL \LOADVMEMPAGE) (TRUE \MOVEVMEMFILEPAGE) (TRUE \VALIDADDRESSP))) (FNS \DOVE.FAULTINIT \DL.FAULTINIT \DL.NEWFAULTINIT \DL.UNMAPPAGES \DL.MARK.PAGES.UNAVAILABLE \DL.ASSIGNBUFFERS \CHAIN.UP.RPT)) (COMS (* ; "Pagefault handler") (FNS \FAULTHANDLER \PAGEFAULT \INVALIDADDR \INVALIDVP \FLUSHPAGE \LOADVMEMPAGE \MOVEREALPAGE \LOOKUPPAGEMAP \VALIDADDRESSP \LOCKEDPAGEP \SELECTREALPAGE \SPECIALRP \TRANSFERPAGE \UPDATECHAIN)) (COMS (* ;  "Allocating and locking new pages") (FNS \NEWPAGE \DONEWPAGE \ASSURE.FPTOVP.PAGE \MAKESPACEFORLOCKEDPAGE \MOVEVMEMFILEPAGE \NEWEPHEMERALPAGE \DONEWEPHEMERALPAGE \LOCKPAGES \DOLOCKPAGES \TEMPLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \UNLOCKPAGES)) (COMS (* ; "Writing out the vmem") (FNS \FLUSHVM \LOGOUT0 \DOFLUSHVM \RELEASEWORKINGSET \WRITEDIRTYPAGE \WRITEDIRTYPAGE1 \COUNTREALPAGES)) (COMS (* ; "VMEM.PURE.STATE hack") (FNS \DOCOMPRESSVMEM VMEM.PURE.STATE)) (COMS (* ;; "Handling the backing store getting too full--keep running, but if we overflow, we can never \FLUSHVM because there is no place to write some pages") (FNS 32MBADDRESSABLE \SET.VMEM.FULL.STATE \SET.LASTVMEMFILEPAGE \DOVMEMFULLINTERRUPT \FLUSHVMOK?)) (INITVARS (\UPDATECHAINFREQ 100) (\PAGEFAULTCOUNTER 0) (\DIRTYPAGECOUNTER 0) (\DIRTYPAGEHINT 0) (\LASTACCESSEDVMEMPAGE 0) (\MAXSHORTSEEK 1000) (\MINSHORTSEEK 20) (\MAXCLEANPROBES 20) (\VMEM.INHIBIT.WRITE) (\VMEM.PURE.LIMIT) (\VMEM.FULL.STATE) (\GUARDVMEMFULL 500) (VMEM.COMPRESS.FLG) (\DOFAULTINIT 0) (\VMEMACCESSFN) (\SYSTEMCACHEVARS) (\MAXSWAPBUFFERS 1) (\EXTENDINGVMEMFILE) (\MaxScreenPage 0) (\NEWVMEMPAGEADDED)) (INITVARS (\LASTDIRTYCNT) (\LASTDIRTYFOUND) (\LASTDIRTYSCANPTR) (\DIRTYSEEKMAX 50)) (COMS (* ;  "Errors signaled in the maintenance panel") (FNS \MP.ERROR)) (COMS (* ;  "Debugging code. Some of this also runs renamed for extra TeleRaid help") (FNS \ACTONVMEMFILE \SHOWPAGETABLE CHECKPAGEMAP CHECKFPTOVP CHECKFPTOVP1 \PRINTFPTOVP \PRINTVP)) (E (RESETSAVE (RADIX 8))) (DECLARE%: EVAL@COMPILE DONTCOPY (MACROS \ACTONVMEMFILE .VMEM.CONSISTENTP. .LOCKABLERP.) (COMS (* ; "Virtual page flags") (CONSTANTS \VMAP.DIRTY \VMAP.CLEAN \VMAP.REF \VMAP.VACANT \VMAP.FLAGS \VMAP.NOTFLAGS) (RECORDS VMEMFLAGS) (MACROS LOGNOT16)) (COMS (* ; "RPT constants") (CONSTANTS \RPT.EMPTY \RPT.UNAVAILABLE \PAGETABLESTOPFLG \RPTENTRYLENGTH) (RECORDS RPT RPT1) (MACROS RPFROMRPT RPTFROMRP NPAGESMACRO)) (COMS (* ; "Virtual to file pagemap") (EXPORT (CONSTANTS \MAXFILEPAGE)) (CONSTANTS \EMPTYPMTENTRY) (RECORDS VP) (MACROS .PAGEMAPBASE.)) (COMS (* ; "FP to VP stuff") (RECORDS FPTOVP) (CONSTANTS \NO.VMEM.PAGE) (MACROS DLRPFROMFP DLFPFROMRP)) (PROP DOPVAL \TOUCHPAGE TIMES3) (COMS (* ; "Locked page table") (MACROS .LOCKEDVPBASE. .LOCKEDVPMASK.)) (CONSTANTS \MAXDIRTYSCANCOUNT \MINVMEMSPAREPAGES \DLBUFFERPAGES) (CONSTANTS 2MBPAGES) (GLOBALVARS \UPDATECHAINFREQ \REALPAGETABLE \RPTLAST \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \PAGEFAULTCOUNTER \LASTDIRTYCNT \LASTDIRTYFOUND \LASTDIRTYSCANPTR \MACHINETYPE \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYSEEKMAX \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \VMEMACCESSFN \SYSTEMCACHEVARS \LASTVMEMFILEPAGE \EXTENDINGVMEMFILE \MaxScreenPage \NEWVMEMPAGEADDED) (GLOBALVARS \#SWAPBUFFERS \#EMUBUFFERS \#DISKBUFFERS \MAXSWAPBUFFERS \EMUSWAPBUFFERS \EMUBUFFERS \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND) (MACROS RWMufMan) (CONSTANTS (DOLOCKCHECKS NIL))) [COMS (* ;;; "MAKEINIT stuff") (FNS ADDPME CHECKIFPAGE DUMPINITPAGES MAKEROOMFORPME MAPPAGES READPAGEMAP READPAGEMAPBLOCK SETUPPAGEMAP) (DECLARE%: DONTCOPY (MACROS CHECKIF) (ADDVARS (INEWCOMS (FNS DUMPINITPAGES) (VARS INITCONSTANTS) (FNS SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES)) (RDCOMS (FNS READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE \LOCKEDPAGEP \LOOKUPPAGEMAP CHECKPAGEMAP CHECKFPTOVP CHECKFPTOVP1 \SHOWPAGETABLE \PRINTFPTOVP)) (EXPANDMACROFNS CHECKIF .LOCKEDVPBASE. .LOCKEDVPMASK. .PAGEMAPBASE.) (MKI.SUBFNS (\NEWPAGE . MKI.NEWPAGE) (\LOCKPAGES . MKI.LOCKPAGES)) (RD.SUBFNS (\NEWPAGE . VNEWPAGE) (\LOCKPAGES . VLOCKPAGES)) (RDPTRS (\REALPAGETABLE)) (RDVALS (\RPTSIZE))) EVAL@COMPILE (ADDVARS (DONTCOMPILEFNS DUMPINITPAGES SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE] (FNS \LOCKFN \LOCKCODE \LOCKVAR \LOCKCELL \LOCKWORDS) [DECLARE%: DONTCOPY (ADDVARS (INEWCOMS (FNS \LOCKFN \LOCKVAR \LOCKCELL \LOCKWORDS \LOCKCODE) (ALLOCAL (ADDVARS (LOCKEDFNS \FAULTHANDLER \FAULTINIT \DOVE.FAULTINIT \D01.FAULTINIT \DL.FAULTINIT \CHAIN.UP.RPT \MAKESPACEFORLOCKEDPAGE \PAGEFAULT \WRITEMAP \LOOKUPPAGEMAP \LOCKEDPAGEP \LOADVMEMPAGE \MOVEREALPAGE \INVALIDADDR \INVALIDVP \SELECTREALPAGE \TRANSFERPAGE \SPECIALRP \UPDATECHAIN \MARKPAGEVACANT \FLUSHPAGE \CLEARWORDS \FLUSHVM \DONEWPAGE \ASSURE.FPTOVP.PAGE \DONEWEPHEMERALPAGE \WRITEDIRTYPAGE1 \COPYSYS0 \COPYSYS0SUBR \RELEASEWORKINGSET \DOFLUSHVM \DOLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \MP.ERROR RAID \DL.NEWFAULTINIT \DL.MARK.PAGES.UNAVAILABLE \DL.UNMAPPAGES \DL.ASSIGNBUFFERS \D01.ASSIGNBUFFERS \DOCOMPRESSVMEM \MOVEVMEMFILEPAGE \SET.VMEM.FULL.STATE \HINUM \LONUM \ATOMCELL SETTOPVAL) (LOCKEDVARS \REALPAGETABLE \RPTLAST \PAGEFAULTCOUNTER \UPDATECHAINFREQ \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \MACHINETYPE \VMEMACCESSFN \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND \MAXSWAPBUFFERS \EMUBUFFERS \#EMUBUFFERS \#SWAPBUFFERS \#DISKBUFFERS \RCLKSECOND \RCLKMILLISECOND \VALSPACE \EMUSWAPBUFFERS \EM.CURSORBITMAP \PAGEMAP \PageMapTBL \IOCBPAGE \IOPAGE \MISCSTATS \DEFSPACE \InterfacePage \LASTVMEMFILEPAGE \DoveIORegion \MaxScreenPage \NEWVMEMPAGEADDED] (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA VMEM.PURE.STATE]) (RPAQQ FAULTTEST T) (* ; "Bootstrap code, run once when an image is booted") (DEFINEQ (\FAULTINIT [LAMBDA NIL (* ; "Edited 30-Mar-88 17:30 by Snow") (* ;;; "retrieves some constants from Interface page for the swapper and performs other initialization that must happen immediately. Called when starting up, and also when \FAULTHANDLER context starts, in case init hasn't happened yet, as e.g. from MAKEINIT") (SETQ \MACHINETYPE (fetch MachineType of \InterfacePage)) [PROG NIL (COND ((EQ \MACHINETYPE \MAIKO) (\MAIKO.FAULTINIT) (RETURN NIL))) (OR (NEQ (fetch FPTOVPStart of \InterfacePage) 0) (\MP.ERROR \MP.OBSOLETEVMEM "No FPTOVP")) (COND ((AND (NEQ 0 (fetch (IFPAGE FullSpaceUsed) of \InterfacePage)) (SELECTC \MACHINETYPE (\DORADO NIL) (\DANDELION (EQ 0 (fetch (IFPAGE DL24BitAddressable) of \InterfacePage ))) (\DAYBREAK NIL) T)) (\MP.ERROR \MP.32MBINUSE "Sysout contains virtual pages not addressable by machine" ))) (SETQ \LASTDIRTYSCANPTR) (SELECTC \MACHINETYPE (\DANDELION (\DL.FAULTINIT)) (\DAYBREAK (\DOVE.FAULTINIT)) (\D01.FAULTINIT)) (* ;  "Have to set \EM.CURSORBITMAP before faults can happen") (* ;; "But you can't call \SETIOPOINTERS on a Daybreak until after the Dove IO Region is mapped, which happens in \DL.NEWFAULTINIT") (\SETIOPOINTERS) (COND ((IGREATERP (fetch (IFPAGE NActivePages) of \InterfacePage) (IDIFFERENCE \LASTVMEMFILEPAGE \GUARDVMEMFULL)) (* ; "Vmem getting full!") (\SET.VMEM.FULL.STATE] (COND ((EQ (PROG1 \DOFAULTINIT (SETQ \DOFAULTINIT NIL)) T) (* ;  "true after \FLUSHVM. Need to rebuild some contexts") (replace (IFPAGE KbdFXP) of \InterfacePage with (\MAKEFRAME (COND ((fetch (LITATOM CCODEP) of '\KEYHANDLER) (FUNCTION \KEYHANDLER)) (T '\DUMMYKEYHANDLER)) \KBDSTACKBASE (IPLUS \KBDSTACKBASE \StackAreaSize) 0 0)) (replace (IFPAGE MiscFXP) of \InterfacePage with (\MAKEFRAME (FUNCTION \DOMISCAPPLY) \MISCSTACKBASE (IPLUS \MISCSTACKBASE \StackAreaSize) 0 0)) T]) (\D01.FAULTINIT [LAMBDA NIL (* bvm%: "20-Oct-86 18:19") (SETQ \VMEMACCESSFN (FUNCTION \M44ACTONVMEMFILE)) (SETQ \REALPAGETABLE (fetch (IFPAGE REALPAGETABLEPTR) of \InterfacePage)) (* ;; "Note: these SETQ's do not reference count, since the values are all smallp's and emulator addresses (in atom space)") (SETQ \RPOFFSET (SIGNED (fetch (IFPAGE RPOFFSET) of \InterfacePage) BITSPERWORD)) (SETQ \RPTSIZE (fetch (IFPAGE RPTSIZE) of \InterfacePage)) (* ;  "Initialize the software clocks from alto emulator") (\BLT (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) (EMADDRESS \RTCSECONDS) (UNFOLD 3 WORDSPERCELL)) [SETQ \RCLKMILLISECOND (CONSTANT (OR (SMALLP \ALTO.RCLKMILLISECOND) (ERROR \ALTO.RCLKMILLISECOND "\ALTO.RCLKMILLISECOND isn't a SMALLP???"] (* ;;; "\ALTO.RCLKMILLISECOND must be a SMALLP here so as not to cause any refcnt or pagefault activity. \RCLKSECOND is large and has to live on \MISCSTATS, since there is no convenient way to lock a random cell.") (SETQ.NOREF \RCLKSECOND (LOCF (fetch RCLKSECOND of \MISCSTATS))) (* ;;; "Note the SETQ.NOREF for \RCLKSECOND in order to guarantee no refcnt'ing (which might pagefault) Note that these LOADBYTE expressions are compiled as constants") (replace (FIXP HINUM) of \RCLKSECOND with (LOADBYTE \ALTO.RCLKSECOND 16 16)) (replace (FIXP LONUM) of \RCLKSECOND with (LOADBYTE \ALTO.RCLKSECOND 0 16)) [COND ((AND (EQ \MACHINETYPE \DORADO) (ILEQ 5124 (fetch RVersion of \InterfacePage))) (replace NSHost0 of \InterfacePage with 0) (replace NSHost1 of \InterfacePage with 21898) (replace NSHost2 of \InterfacePage with (IPLUS (MASK.1'S 15 1) (for I (N _ 0) from 1168 to 1175 do (* ;  "Mufflers `2220Q' thru `2227Q' hold the bits of the basic serial number") [SETQ N (IPLUS (LLSH N 1) (COND ((BITTEST (RWMufMan I) (MASK.1'S 15 1)) 0) (T 1] finally (RETURN N] (\CHAIN.UP.RPT) (\D01.ASSIGNBUFFERS]) (\D01.ASSIGNBUFFERS [LAMBDA NIL (* bvm%: "20-Oct-86 18:21") (PROGN (* ; "Assign swap buffer") (SETQ \EMBUFVP (fetch (IFPAGE EMBUFVP) of \InterfacePage)) (SETQ \EMBUFBASE (EMPOINTER (UNFOLD \EMBUFVP WORDSPERPAGE))) (SETQ \EMBUFRP (\READRP \EMBUFVP))) (PROG ((EMBUF (fetch (IFPAGE EMUBUFFERS) of \InterfacePage)) (EMLEN (fetch (IFPAGE EMUBUFLENGTH) of \InterfacePage)) EXTRALEN NPAGES) [add EMLEN (IDIFFERENCE EMBUF (SETQ EMBUF (CEIL EMBUF WORDSPERPAGE] (* ;  "Round up to a page boundary and throw out the excess") (SETQ EXTRALEN (IMOD EMLEN WORDSPERPAGE)) (add EXTRALEN (COND ((ILESSP EXTRALEN 100) (TIMES 2 WORDSPERPAGE)) (T WORDSPERPAGE))) (SETQ NPAGES (FOLDLO (SETQ EMLEN (IDIFFERENCE EMLEN EXTRALEN)) WORDSPERPAGE)) (OR (IGEQ NPAGES 4) (RAID "No swap buffer space")) (SETQ \TELERAIDBUFFER (EMPOINTER EMBUF)) (SETQ \EMUBUFFERS (\ADDBASE \TELERAIDBUFFER WORDSPERPAGE)) (SETQ \#EMUBUFFERS (SETQ NPAGES (SUB1 NPAGES))) (SETQ \#SWAPBUFFERS (IMIN \MAXSWAPBUFFERS (IQUOTIENT NPAGES 2))) (SETQ \#DISKBUFFERS (IDIFFERENCE \#EMUBUFFERS \#SWAPBUFFERS)) (SETQ \EMUDISKBUFFERS \EMUBUFFERS) (SETQ \EMUDISKBUFEND (\ADDBASE \EMUDISKBUFFERS (UNFOLD \#DISKBUFFERS WORDSPERPAGE))) (SETQ \EMUSWAPBUFFERS \EMUDISKBUFEND) (\INITBFS (\ADDBASE \EMUBUFFERS (UNFOLD NPAGES WORDSPERPAGE)) EXTRALEN T]) (\MAIKO.FAULTINIT [LAMBDA NIL (* ; "Edited 2-Jan-93 12:25 by jds") (SETQ \VMEMACCESSFN (FUNCTION NILL)) (* ; "This variable must be the name of function that may be ACTONVMEMFILE that may write back from VP to FP. But , in Katana type, this function may be required (by tt)") (SETQ \IOCBPAGE (create POINTER PAGE# _ \VP.IOCBS)) (* ;; "MOVD all the Maiko-specific low-level functions onto their generic counterparts:") (\MAIKO.DO.MOVDS) (\MAIKO.NEWFAULTINIT) (SETQ \RCLKMILLISECOND 1000) (SETQ \RCLKSECOND 1000000) (\RCLK (LOCF (fetch BASECLOCK of \MISCSTATS))) (* ; "Reset base clock ") (\PUTBASEPTR (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) 0 NIL) (* ; "Clear the seconds timer (by tt)") (\PUTBASEPTR (LOCF (fetch MILLISECONDSCLOCK of \MISCSTATS)) 0 NIL) (* ; "Clear the milliseconds timer") (* SETQ \LASTVMEMFILEPAGE  (fetch (IFPAGE DLLastVmemPage) of  \InterfacePage)) (\SETIOPOINTERS]) (\MAIKO.NEWFAULTINIT [LAMBDA NIL (* ;  "Edited 26-Feb-88 14:07 by Osamu Nakamura") (* ;; "We have just started up on a Katana. Boot code (SYSOUT Loader) may map FP to VP(VP is same map to RP). Therefore, in this function, only done the initialization of the gloval variables (particularly, the variables about Buffers). And, there is not /REALPAGETABLE in Katana.") (PROG ((NBUFFERS (IDIFFERENCE \DLBUFFERPAGES 2))) (* ; "Allocate buffers") (\MAIKO.ASSIGNBUFFERS (create POINTER PAGE# _ \VP.BUFFERS) NBUFFERS]) (\MAIKO.ASSIGNBUFFERS [LAMBDA (BASE NPAGES) (* ;  "Edited 14-May-88 18:31 by JMTurn") (PROGN (* ;  "Allocate a page to hold name and password, and perhaps other ephemeral things") (replace (IFPAGE UserNameAddr) of \InterfacePage with (\LOLOC (\ADDBASE BASE 1 ))) (replace (IFPAGE UserPswdAddr) of \InterfacePage with (\LOLOC (\ADDBASE BASE 33))) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -1)) (PROGN (* ; "Assign swap buffer") (SETQ \EMBUFBASE BASE) (SETQ \EMBUFVP (fetch (POINTER PAGE#) of BASE)) (SETQ \EMBUFRP \EMBUFVP) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -1)) (PROGN (* ; "Assign ether buffers") (replace (IFPAGE MDSZoneLength) of \InterfacePage with (UNFOLD 2 WORDSPERPAGE) ) (replace (IFPAGE MDSZone) of \InterfacePage with (\LOLOC BASE)) (SETQ BASE (\ADDBASE BASE (UNFOLD 2 WORDSPERPAGE))) (SETQ \TELERAIDBUFFER BASE) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -3)) (PROGN (* ; "Divvy up buffer space") (SETQ \#SWAPBUFFERS (SETQ \#EMUBUFFERS NPAGES)) (SETQ \#DISKBUFFERS 0) (SETQ \EMUSWAPBUFFERS (SETQ \EMUBUFFERS BASE]) (\M-VMEMSAVE [LAMBDA NIL (* ;  "Edited 20-Apr-88 10:28 by MASINTER") (PROG ((SCRATCHBUF \EMUSWAPBUFFERS)) (replace (IFPAGE MISCSTACKRESULT) of \InterfacePage with T) [COND (\VMEM.PURE.LIMIT (* ;  "Maintaining file consistency: move high water mark up") (COND (VMEM.COMPRESS.FLG (\DOCOMPRESSVMEM))) (SETQ \VMEM.PURE.LIMIT (fetch (IFPAGE NActivePages) of \InterfacePage] (COND ((.VMEM.CONSISTENTP.) (replace (IFPAGE Key) of \InterfacePage with (LOGNOT16 \IFPValidKey)) (* ;  "Invalidate vmem and write out the Interface page") (* ;; "following form doesn't eval for KATANA (\TRANSFERPAGE IFPVP \FirstVmemBlock (RPTFROMRP (\READRP IFPVP)) T NIL)") )) (replace (IFPAGE Key) of \InterfacePage with \IFPValidKey) (\BLT SCRATCHBUF \InterfacePage WORDSPERPAGE) (* ;  "Make its current fx point at user context, i.e. the \FLUSHVM frame") (replace (IFPAGE CurrentFXP) of SCRATCHBUF with (fetch (IFPAGE MiscFXP) of \InterfacePage)) (SUBRCALL VMEMSAVE) (RETURN NIL]) (\MAIKO.NEWPAGE [LAMBDA (BASE NOERROR LOCK?) (* ;  "Edited 20-Apr-88 10:28 by MASINTER") (SUBRCALL NEWPAGE BASE]) ) (* ;; "For setting up (and maybe eventually removing?) MAIKO-specific versions of the generic low-levle functions:" ) (DEFINEQ (\MAIKO.DO.MOVDS [LAMBDA NIL (* ;  "Edited 2-Nov-92 03:57 by sybalsky:mv:envos") (* ;; "MOVD all the Maiko-specific low-level functions onto their generic counterparts. This function is called from \MAIKO.FAULTINIT when the system is started up, and called explicitly during the LOADUP process to get everything in a state to run the ethernet.") (* ;; "THIS IS WHERE CHANGES SHOULD HAPPEN TO MAKE SUN LOADUPS RUN ON D-MACHINES (BY ADDING A \MAIKO.UNDO.MOVDS CALL AT VMEM SAVING TIME, AND ADDING A SYBMOL TO SAVE THE GENERIC DEFINITION ON TO THE MOVDS LIST.") (FOR PAIR IN \MAIKO.MOVDS DO (* ;; "This is like MOVD, but absolutely no consing is done, frame names are not changed, etc. So that no CONSING happens before all the MOVDs are finished -- prevents new-page allocation.") (LET [(FROMCELL (fetch (LITATOM DEFINITIONCELL) of (CAR PAIR))) (TOCELL (fetch (LITATOM DEFINITIONCELL) of (CADR PAIR] (UNINTERRUPTABLY (replace (DEFINITIONCELL DEFPOINTER) of TOCELL with (fetch (DEFINITIONCELL DEFPOINTER) of FROMCELL)) (replace (DEFINITIONCELL DEFCELLFLAGS) of TOCELL with (fetch (DEFINITIONCELL DEFCELLFLAGS) of FROMCELL)) (replace (DEFINITIONCELL AUXDEFCELLFLAGS) of TOCELL with (fetch (DEFINITIONCELL AUXDEFCELLFLAGS) of FROMCELL)))]) ) (ADDTOVAR \MAIKO.MOVDS (TRUE \LOCKEDPAGEP) (\MAIKO.NEWPAGE \NEWPAGE) (\MAIKO.NEWPAGE \DONEWPAGE) (NILL \LOCKPAGES) (NILL \DOLOCKPAGES) (NILL \DOTEMPLOCKPAGES) (NILL \TEMPUNLOCKPAGES) (NILL \UNLOCKPAGES) (NILL \WRITEDIRTYPAGE) (NILL \DIRTYBACKGROUND) (ZERO \COUNTREALPAGES) (NILL \SHOWPAGETABLE) (NILL CHECKPAGEMAP) (EVQ \PAGEFAULT) (EVQ \LOADVMEMPAGE) (NILL \LOADVMEMPAGE) (TRUE \MOVEVMEMFILEPAGE) (TRUE \VALIDADDRESSP)) (DEFINEQ (\DOVE.FAULTINIT [LAMBDA NIL (* ; "Edited 18-Sep-87 16:01 by bvm:") (DECLARE (GLOBALVARS \RCLKMILLISECOND \RCLKSECOND)) (SETQ \VMEMACCESSFN (FUNCTION \DOVE.ACTONVMEMFILE)) (SETQ \IOCBPAGE (create POINTER PAGE# _ \VP.IOCBS)) (COND ((NOT (.VMEM.CONSISTENTP.)) (\MP.ERROR \MP.INVALIDVMEM))) (SETMAINTPANEL 1188) (\DL.NEWFAULTINIT) (SETMAINTPANEL 1189) (SETQ \RCLKMILLISECOND \DOVE.RCLKMILLISECOND) (SETQ.NOREF \RCLKSECOND (LOCF (fetch RCLKSECOND of \MISCSTATS))) (* ;  "Unfortunately, \DOVE.RCLKSECOND is not smallp") (replace (FIXP HINUM) of \RCLKSECOND with (CONSTANT (\HINUM \DOVE.RCLKSECOND))) (replace (FIXP LONUM) of \RCLKSECOND with (CONSTANT (\LONUM \DOVE.RCLKSECOND))) (\RCLK (LOCF (fetch BASECLOCK of \MISCSTATS))) (* ; "Reset base clock") (\DoveMisc.ReadGMT (LOCF (fetch SECONDSCLOCK of \MISCSTATS))) (SETMAINTPANEL 1190) (\PUTBASEPTR (LOCF (fetch MILLISECONDSCLOCK of \MISCSTATS)) 0 NIL) (* ; "Clear the milliseconds timer") (\DoveMisc.ReadHostID (LOCF (fetch NSHost0 of \InterfacePage))) (SETMAINTPANEL 1191) [SETQ \LASTVMEMFILEPAGE (COND (NIL (* ; "For now, don't assume vmem is any bigger than the part in use now. Local file system init will set it to the truth.") (SETQ \VMEM.FULL.STATE 0)(* ; "Flag to keep pages from being written off the end. Setting it now prevents bogus vmem full interrupt at startup time.") (fetch (IFPAGE NActivePages) of \InterfacePage)) (T (* ;  "Microcode is supposed to fill this in") (fetch (IFPAGE DLLastVmemPage) of \InterfacePage] (\DoveDisk.Init) (SETMAINTPANEL 1192) (\DoveDisplay.TurnOn]) (\DL.FAULTINIT [LAMBDA NIL (* bvm%: "20-Oct-86 18:22") (SETQ \VMEMACCESSFN (FUNCTION \DL.ACTONVMEMFILE)) (SETQ \IOCBPAGE (create POINTER PAGE# _ \VP.IOCBS)) (COND ((NOT (.VMEM.CONSISTENTP.)) (\MP.ERROR \MP.INVALIDVMEM))) (\DL.NEWFAULTINIT) (SETQ \RCLKMILLISECOND \DLION.RCLKMILLISECOND) (* ;  "These are fortunately both small") (SETQ \RCLKSECOND \DLION.RCLKSECOND) (\RCLK (LOCF (fetch BASECLOCK of \MISCSTATS))) (* ; "Reset base clock") [COND ((EQ (fetch DLTODVALID of \IOPAGE) 0) (* ;  "Time not valid, so store zero in the clock") (\PUTBASEPTR (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) 0 NIL)) (T (bind TMP (BASE _ (LOCF (fetch SECONDSCLOCK of \MISCSTATS))) do (* ;  "Loop until clock reads the same as we wrote, in case it was being updated") (\PUTBASE BASE 1 (SETQ TMP (fetch DLTODLO of \IOPAGE))) (\PUTBASE BASE 0 (fetch DLTODHI of \IOPAGE)) repeatuntil (EQ (fetch DLTODLO of \IOPAGE) TMP] (\PUTBASEPTR (LOCF (fetch MILLISECONDSCLOCK of \MISCSTATS)) 0 NIL) (* ; "Clear the milliseconds timer") (repeatwhile (IGEQ (fetch DLPROCESSORCMD of \IOPAGE) \DL.PROCESSORBUSY)) (* ; "Wait for IOP readiness") (replace DLPROCESSORCMD of \IOPAGE with \DL.READPID) (* ;  "Ask it to give the processor ID (3 words)") (repeatwhile (IGEQ (fetch DLPROCESSORCMD of \IOPAGE) \DL.PROCESSORBUSY)) (replace NSHost0 of \InterfacePage with (fetch DLPROCESSOR0 of \IOPAGE)) (replace NSHost1 of \InterfacePage with (fetch DLPROCESSOR1 of \IOPAGE)) (replace NSHost2 of \InterfacePage with (fetch DLPROCESSOR2 of \IOPAGE)) (SETQ \LASTVMEMFILEPAGE (fetch (IFPAGE DLLastVmemPage) of \InterfacePage)) (\DL.DISKINIT T]) (\DL.NEWFAULTINIT [LAMBDA NIL (* ; "Edited 21-Oct-87 15:40 by bvm:") (* ;; "We have just started up on a DLion or Daybreak. Boot code has loaded the first n pages of the sysout into pages 2 thru n-3, except for the area covered by the map and IO page, and has built the map accordingly. Our principal task is to build \REALPAGETABLE") (PROG ((NREALPAGES (fetch (IFPAGE NRealPages) of \InterfacePage)) (FIRSTBUFFERRP \RP.STARTBUFFERS) (SCRATCHVP \VP.INITSCRATCH) (SCRATCHBASE (create POINTER PAGE# _ \VP.INITSCRATCH)) FIRSTUSEFULRP IFPAGERP IOCBRP RPTBASE VP RPTPAGES FIRSTRP NDISPLAYPAGES) [do (COND ((for I from 0 to (SUB1 \DLBUFFERPAGES) as (FPBASE _ (\ADDBASE \FPTOVP (DLFPFROMRP FIRSTBUFFERRP))) by (\ADDBASE FPBASE 1) do (COND ([OR (NOT (fetch FPOCCUPIED of FPBASE)) (\LOCKEDPAGEP (SETQ VP (fetch FPVIRTUALPAGE of FPBASE] (* ;; "Can't use as buffer. This is just a check for consistency; you should pick \RP.STARTBUFFERS so that this isn't a problem") (RETURN T))) (* ;  "Unmap this page so we can use it for buffers") (\WRITEMAP VP 0 \VMAP.VACANT))(* ; "Bad starting place, try again") (add FIRSTBUFFERRP 1)) (T (RETURN] (SETQ FIRSTUSEFULRP (+ FIRSTBUFFERRP \DLBUFFERPAGES)) (PROGN (* ;  "Copy vital info that booting left in page 1") [COND ((EQ \MACHINETYPE \DAYBREAK) (* ;; "Use first buffer page for IOCB page. Used to have to place this in a real page whose page-in-segment number was the same as that of \VP.IOCBS, but that constraint is now lifted for Daybreak.") (SETQ IOCBRP FIRSTBUFFERRP) (add FIRSTBUFFERRP 1)) (T (SETQ IOCBRP (+ (LOGAND (SUB1 (IMIN NREALPAGES 3072)) 65280) \VP.IOCBS)) (* ;; "Put IOCB page near the end of memory, but in the first 1.5 mb so that Burdock can see it. Temporary until Steve fixes swap code to not care what RP contains IOCB's") [SETQ VP (fetch FPVIRTUALPAGE of (\ADDBASE \FPTOVP (DLFPFROMRP IOCBRP] (COND ((\LOCKEDPAGEP VP) (\MP.ERROR \MP.IOCBPAGE)) (T (* ;  "Unmap whoever lived in our target page") (\WRITEMAP VP 0 \VMAP.VACANT] (\WRITEMAP \VP.IOCBS IOCBRP \VMAP.CLEAN) (\WRITEMAP SCRATCHVP 1 \VMAP.CLEAN) (\BLT \IOCBPAGE SCRATCHBASE WORDSPERPAGE)) (PROGN (* ;  "Copy InterfacePage out of segment zero") (\WRITEMAP SCRATCHVP FIRSTBUFFERRP \VMAP.CLEAN) (\BLT SCRATCHBASE \InterfacePage WORDSPERPAGE) (\WRITEMAP \VP.IFPAGE (SETQ IFPAGERP FIRSTBUFFERRP) \VMAP.CLEAN) (add FIRSTBUFFERRP 1)) [PROGN (* ;  "Unmap everything that fell somewhere we can't use") (\DL.UNMAPPAGES (ADD1 \FP.IFPAGE) (DLFPFROMRP \RP.IOPAGE)) (* ;  "real segment zero, map or IOPAGE") (COND ((EQ \MACHINETYPE \DANDELION) (for NEXTBANK0 from 2MBPAGES by 2MBPAGES until (> NEXTBANK0 NREALPAGES) do (* ;; "All the `shadows of the display bank' in higher memory have restricted use; take them out of commission for now") (\DL.UNMAPPAGES NEXTBANK0 (+ NEXTBANK0 PAGESPERSEGMENT -1] (PROGN (* ; "Copy Display into segment zero") [SETQ NDISPLAYPAGES (COND ((EQ \MACHINETYPE \DANDELION) (* ;; "Only lock the standard screen's worth of pages on DLion, even if there are more because the sysout came from wide Daybreak. Only this many need to be in the display bank, besides which there is a cursor bank after the display; the rest can be vanilla locked pages.") \NP.DISPLAY) (T (IMAX \NP.DISPLAY (ADD1 \MaxScreenPage] (* ;  "Number of display pages in use in this image") (for I from 0 to (SUB1 NDISPLAYPAGES) do (\WRITEMAP (+ SCRATCHVP I) (+ \RP.DISPLAY I) \VMAP.CLEAN)) (* ;  "Point scratch area at real segment zero") (\BLT SCRATCHBASE (create POINTER PAGE# _ \VP.DISPLAY) (UNFOLD NDISPLAYPAGES WORDSPERPAGE)) (* ;  "Copy display from wherever boot put it") (for I from 0 to (SUB1 NDISPLAYPAGES) do (\WRITEMAP (+ SCRATCHVP I) 0 \VMAP.VACANT) (\WRITEMAP (+ \VP.DISPLAY I) (+ \RP.DISPLAY I) \VMAP.CLEAN)) (* ;  "Display is now where hardware wants it, so enable display") (replace (IOPAGE DLDISPCONTROL) of \IOPAGE with 0)) (COND ((EQ \MACHINETYPE \DAYBREAK) (* ;  "If on a daybreak, map the I/O region. Have to do this before calling \DoveDisplay.ScreenWidth") (for I from 0 to (SUB1 \DOVEIORGNSIZE) do (\WRITEMAP (+ \VP.DOVEIORGN I ) (+ \RP.DOVEIORGN I) \VMAP.CLEAN)) (\DoveIO.InitializeIORegionPtrs))) [PROG ((RPSIZE (- NREALPAGES (SETQ \RPOFFSET -1))) (FIRSTVP \VP.RPT)) (SETQ FIRSTRP (COND ((OR (> NDISPLAYPAGES \NP.DISPLAY) (AND (EQ \MACHINETYPE \DAYBREAK) (EQ (\DoveDisplay.ScreenWidth) \WIDEDOVEDISPLAYWIDTH))) (* ;; "Sysout was made on a large screen daybreak, or is now being run on one. Need to make sure there is space for all that display") \RP.AFTERDOVEDISPLAY) (T \RP.AFTERDISPLAY))) (* ;  "Construct real page table in segment zero after the display") [COND ((> RPSIZE (CONSTANT (EXPT 2 15))) (* ;  "We only have 15 bits for real page table numbers, so have to sacrifice the rest of memory") (SETQ RPSIZE (CONSTANT (EXPT 2 15] [SETQ RPTPAGES (PROGN (* ;; "This is a way of computing (FOLDHI RPSIZE*3 WORDSPERPAGE) that won't overflow when memory exceeds 10.6MB -- the first term computes RPSIZE*3/256, the second performs the FOLDHI directly on the now much smaller remainder.") (+ (TIMES3 (FOLDLO RPSIZE WORDSPERPAGE)) (FOLDHI (TIMES3 (IMOD RPSIZE WORDSPERPAGE)) WORDSPERPAGE] (COND ((> (+ RPTPAGES FIRSTRP) PAGESPERSEGMENT) (* ;; "No space in bank zero, so put RPT in first segment after 2 megabytes, where the first `shadow' display bank lives. No shadow bank on Daybreak, but this is as good a place as any") (SETQ FIRSTRP (IMIN 2MBPAGES (- NREALPAGES RPTPAGES))) (* ;  "IMIN because we could be on a wide-display Daybreak with small memory") [COND ((> (+ FIRSTVP RPTPAGES) \VP.BUFFERS) (* ;  "Move virtual assignment backwards if necessary") (SETQ FIRSTVP (COND ((< RPTPAGES \VP.BUFFERS) (- \VP.BUFFERS RPTPAGES)) ((<= RPTPAGES PAGESPERSEGMENT) (* ;  "Can't fit real page table in display bank at all, so overlap smallneg space") (UNFOLD \SmallNegHi PAGESPERSEGMENT)) (T (* ;  "Ack, more than 10.6 MB, have to slop over into smallpos space") (- (+ (UNFOLD \SmallNegHi PAGESPERSEGMENT) PAGESPERSEGMENT) RPTPAGES] (\DL.UNMAPPAGES (DLFPFROMRP FIRSTRP) (DLFPFROMRP (+ FIRSTRP RPTPAGES -1))) (* ; "Unmap the pages in which RPT lives. This was already done on DLion, but can't hurt to do it again") )) (for I from 0 to (SUB1 RPTPAGES) do (* ;  "Assign pages to real page table now") (\WRITEMAP (+ FIRSTVP I) (+ FIRSTRP I) \VMAP.CLEAN)) (SETQ \REALPAGETABLE (create POINTER PAGE# _ FIRSTVP)) (\CLEARWORDS \REALPAGETABLE RPSIZE) (\CLEARWORDS (\ADDBASE \REALPAGETABLE RPSIZE) RPSIZE) (\CLEARWORDS (\ADDBASE (\ADDBASE \REALPAGETABLE RPSIZE) RPSIZE) RPSIZE) (* ;  "Clear table in three steps, since 3*RPSIZE overflows after 10MB") (SETQ \RPTSIZE RPSIZE) (COND [(EQ \MACHINETYPE \DANDELION) (for NEXTBANK0 from 2MBPAGES by 2MBPAGES until (> NEXTBANK0 NREALPAGES) do (* ;  "Mark the shadow display bank pages unavailable") (\DL.MARK.PAGES.UNAVAILABLE NEXTBANK0 (+ NEXTBANK0 PAGESPERSEGMENT -1] (T (* ;; "RPT itself occupies unavailable pages; on DLion these were marked unavailable either in segment zero after display or as part of shadow bank") (\DL.MARK.PAGES.UNAVAILABLE FIRSTRP (+ FIRSTRP RPTPAGES -1)) (* ;  "Also, Dove IO region is unavailable") (\DL.MARK.PAGES.UNAVAILABLE \RP.DOVEIORGN (SUB1 (+ \RP.DOVEIORGN \DOVEIORGNSIZE] (PROGN (* ;; "Fill in special cases in RPT -- the display, which is not where FPTOVP says it is, and all the pages that are unavailable for one reason or another. Note: any page marked unavailable here MUST be unmapped by now, either because booting never put it where FPTOVP says it would be, there's no page there to begin with, or there's an explicit call to \WRITEMAP or \DL.UNMAPPAGES to unmap it above") (SETQ RPTBASE \REALPAGETABLE) [for I from 0 to (SUB1 NDISPLAYPAGES) do (SETQ RPTBASE (\ADDBASE RPTBASE \RPTENTRYLENGTH)) (* ; "Fill in Display pages") (replace (RPT VP) of RPTBASE with (+ \VP.DISPLAY I)) (replace (RPT FILEPAGE) of RPTBASE with (DLFPFROMRP (+ \RP.TEMPDISPLAY I] (\DL.MARK.PAGES.UNAVAILABLE NDISPLAYPAGES \RP.IOPAGE) (* ;  "Mark rest of segment zero plus Map and IOPAGE unavailable") ) [PROGN (* ;  "fill in main part of RPT by reading FPTOVP") (for I from (ADD1 \RP.IOPAGE) to (SUB1 NREALPAGES) as [FPBASE _ (\ADDBASE \FPTOVP (DLFPFROMRP (ADD1 \RP.IOPAGE] by (\ADDBASE FPBASE 1) as [RPTBASE _ (fetch RPTRBASE of (RPTFROMRP (ADD1 \RP.IOPAGE ] by (\ADDBASE RPTBASE \RPTENTRYLENGTH) bind (LASTREALPAGE _ (DLRPFROMFP (fetch (IFPAGE NActivePages) of \InterfacePage))) do (* ;; "Fill in rest of RPT from \FPTOVP. Could optimize this a little by special casing the area occupied by the display, but this is simpler") (COND ((fetch (RPT UNAVAILABLE) of RPTBASE)) ((AND (<= I LASTREALPAGE) (fetch FPOCCUPIED of FPBASE) [NOT (fetch (VMEMFLAGS VACANT) of (\READFLAGS (SETQ VP (fetch FPVIRTUALPAGE of FPBASE] (EQ I (\READRP VP))) (* ;; "There is a VP assigned to this filepage, and it is still there. False for display that got moved and any real pages that didn't get filled. LASTREALPAGE is in case the real memory is larger than the sysout -- FPTOVP does not exist all the way") (replace (RPT VP) of RPTBASE with VP) (replace (RPT FILEPAGE) of RPTBASE with (DLFPFROMRP I))) (T (replace (RPT EMPTY) of RPTBASE with T] (PROGN (* ;  "Touch up RPT with the exceptions") (SETQ RPTBASE (fetch RPTRBASE of (RPTFROMRP IFPAGERP))) (* ; "Interface Page") (replace (RPT VP) of RPTBASE with \VP.IFPAGE) (replace (RPT FILEPAGE) of RPTBASE with \FP.IFPAGE) (replace (RPT UNAVAILABLE) of (fetch RPTRBASE of (RPTFROMRP IOCBRP)) with T) (* ; "\IOCBPAGE") (\DL.MARK.PAGES.UNAVAILABLE FIRSTBUFFERRP (SUB1 FIRSTUSEFULRP)) (* ;  "buffer pages unavailable to swapper") ) (\CHAIN.UP.RPT) (PROG ((NBUFFERS (- FIRSTUSEFULRP FIRSTBUFFERRP))) (* ; "Allocate buffers") (for I from 0 to (SUB1 NBUFFERS) do (\WRITEMAP (+ \VP.BUFFERS I) (+ FIRSTBUFFERRP I) \VMAP.CLEAN)) (\DL.ASSIGNBUFFERS (create POINTER PAGE# _ \VP.BUFFERS) NBUFFERS]) (\DL.UNMAPPAGES [LAMBDA (FIRSTFP LASTFP) (* bvm%: "14-Jan-84 14:20") (* ;;; "At initialization time, unmap anything that originally lived in filepages FIRSTFP thru LASTFP") (for FP from FIRSTFP to LASTFP as (FPBASE _ (\ADDBASE \FPTOVP FIRSTFP)) by (\ADDBASE FPBASE 1) when (fetch FPOCCUPIED of FPBASE) do (\WRITEMAP (fetch FPVIRTUALPAGE of FPBASE) 0 \VMAP.VACANT]) (\DL.MARK.PAGES.UNAVAILABLE [LAMBDA (FIRSTRP LASTRP) (* bvm%: "14-Jan-84 14:32") (for I from FIRSTRP to LASTRP as (RPTBASE _ (fetch RPTRBASE of (RPTFROMRP FIRSTRP))) by (\ADDBASE RPTBASE \RPTENTRYLENGTH) do (replace (RPT UNAVAILABLE) of RPTBASE with T]) (\DL.ASSIGNBUFFERS [LAMBDA (BASE NPAGES) (* bvm%: "29-Jan-85 19:05") (PROGN (* ;  "Allocate a page to hold name and password, and perhaps other ephemeral things") (\CLEARWORDS BASE WORDSPERPAGE) (replace (IFPAGE UserNameAddr) of \InterfacePage with (\LOLOC (\ADDBASE BASE 1 ))) (replace (IFPAGE UserPswdAddr) of \InterfacePage with (\LOLOC (\ADDBASE BASE 33))) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -1)) (PROGN (* ; "Assign swap buffer") (SETQ \EMBUFBASE BASE) (SETQ \EMBUFVP (fetch (POINTER PAGE#) of BASE)) (SETQ \EMBUFRP (\READRP \EMBUFVP)) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -1)) (PROGN (* ; "Assign ether buffers") (replace (IFPAGE MDSZoneLength) of \InterfacePage with (UNFOLD 2 WORDSPERPAGE) ) (replace (IFPAGE MDSZone) of \InterfacePage with (\LOLOC BASE)) (SETQ BASE (\ADDBASE BASE (UNFOLD 2 WORDSPERPAGE))) (SETQ \TELERAIDBUFFER BASE) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE)) (add NPAGES -3)) (PROGN (* ; "Divvy up buffer space") (SETQ \#SWAPBUFFERS (SETQ \#EMUBUFFERS NPAGES)) (SETQ \#DISKBUFFERS 0) (SETQ \EMUSWAPBUFFERS (SETQ \EMUBUFFERS BASE]) (\CHAIN.UP.RPT [LAMBDA NIL (* bvm%: "18-Dec-84 16:07") (* ;;; "Maps over the Real Page Table as constructed so far and fleshes it out. Assumes that the table is built, has all its VP and FILEPAGE entries set, and that the empty and unavailable entries are so marked. Finishes the job by chaining together the available pages and setting the LOCKED bits") (PROG ((RPTBASE \REALPAGETABLE) (LASTEMPTY \REALPAGETABLE) (LASTUSED (\ADDBASE \REALPAGETABLE 1)) FIRSTUSED) (SETQ FIRSTUSED LASTUSED) (* ;; "The `entry' \REALPAGETABLE is a dummy that points to the least recently used entry. We use the second word of that dummy as a temporary chain head for the used pages, so that we can put all the empty pages at the front of the queue.") [for I from 1 to (SUB1 \RPTSIZE) do (SETQ RPTBASE (\ADDBASE RPTBASE \RPTENTRYLENGTH)) (COND ((fetch (RPT UNAVAILABLE) of RPTBASE)) ((fetch (RPT EMPTY) of RPTBASE) (replace (RPT NEXTRP) of LASTEMPTY with I) (replace (RPT LOCKED) of RPTBASE with NIL) (SETQ LASTEMPTY RPTBASE)) (T (replace (RPT NEXTRP) of LASTUSED with I) (replace (RPT LOCKED) of RPTBASE with (\LOCKEDPAGEP (fetch (RPT VP) of RPTBASE))) (SETQ LASTUSED RPTBASE] (* ;  "Finally, link the end of empty chain to front of in use chain") (replace (RPT NEXTRP) of LASTEMPTY with (fetch (RPT NEXTRP) of FIRSTUSED )) (replace (RPT NEXTRP) of (SETQ \RPTLAST LASTUSED) with \PAGETABLESTOPFLG) (replace (RPT UNAVAILABLE) of \REALPAGETABLE with T) (* ; "Dummy first entry") ]) ) (* ; "Pagefault handler") (DEFINEQ (\FAULTHANDLER [LAMBDA NIL (* ; "Edited 27-Sep-88 00:47 by jds") (PROG NIL LP [OR (AND \DOFAULTINIT (\FAULTINIT)) (\PAGEFAULT (\VAG2 (LOGAND 255 (fetch (IFPAGE FAULTHI) of \InterfacePage)) (fetch (IFPAGE FAULTLO) of \InterfacePage] (\CONTEXTSWITCH \FAULTFXP) (GO LP]) (\PAGEFAULT [LAMBDA (PTR) (* bvm%: "13-Aug-85 16:38") (\CLOCK0 (LOCF (fetch SWAPTEMP0 of \MISCSTATS))) (* ; "Note time of start") (PROG ((VP (fetch (POINTER PAGE#) of PTR)) FLAGS FILEPAGE) (COND ((fetch (VP INVALID) of VP) (* ;  "Map out of bounds on Dolphin always produces -1 as the vp. Don't know about other machines") (\MP.ERROR \MP.MOB "Page Fault: Map out of bounds" (AND (NEQ VP 65535) PTR) T)) ([NOT (fetch (VMEMFLAGS VACANT) of (SETQ FLAGS (\READFLAGS VP] (\MP.ERROR \MP.RESIDENT "Fault on resident page" PTR T)) ((EQ (SETQ FILEPAGE (\LOOKUPPAGEMAP VP)) 0) (\INVALIDADDR PTR)) (T (COND ((EQ (\HILOC PTR) \STACKHI) (* ;  "should never happen. For debugging") (\MP.ERROR \MP.STACKFAULT "Fault on stack" PTR T))) (\LOADVMEMPAGE VP FILEPAGE))) (COND (\NEWVMEMPAGEADDED (* ;  "Only happens if VMEM.PURE.STATE on") (\ASSURE.FPTOVP.PAGE))) [\BOXIPLUS (LOCF (fetch SWAPWAITTIME of \MISCSTATS)) (\BOXIDIFFERENCE (\CLOCK0 (LOCF (fetch SWAPTEMP1 of \MISCSTATS))) (LOCF (fetch SWAPTEMP0 of \MISCSTATS] (* ; "Count the time used.") (RETURN PTR]) (\INVALIDADDR [LAMBDA (ADDR) (* bvm%: " 6-AUG-83 22:25") (\MP.ERROR \MP.INVALIDADDR "Invalid address" ADDR T]) (\INVALIDVP [LAMBDA (VP) (* bvm%: " 6-AUG-83 22:25") (\MP.ERROR \MP.INVALIDVP "Invalid VP" VP]) (\FLUSHPAGE [LAMBDA (RPTINDEX FROMFLUSHVM) (* bvm%: "13-Aug-85 16:35") (* ;;; "Write out real page RPTINDEX if it is dirty.") (PROG ((RPTR (fetch RPTRBASE of RPTINDEX)) VP FP NEWFP) (COND ([AND (fetch (RPT OCCUPIED) of RPTR) (fetch (VMEMFLAGS DIRTY) of (\READFLAGS (SETQ VP (fetch (RPT VP) of RPTR] (* ; "Yes, page is dirty") (SETQ FP (fetch (RPT FILEPAGE) of RPTR)) [COND [(AND \VMEM.PURE.LIMIT (NOT FROMFLUSHVM)) (* ;  "Don't sully vmem; write page out beyond the original end of vmem") (COND ((ILEQ FP \VMEM.PURE.LIMIT) (COND ((fetch (RPT LOCKED) of RPTR) (\MP.ERROR \MP.WRITING.LOCKED.PAGE))) (SETQ NEWFP (add (fetch NActivePages of \InterfacePage) 1)) (COND ((IGREATERP NEWFP (IDIFFERENCE \LASTVMEMFILEPAGE \GUARDVMEMFULL)) (\SET.VMEM.FULL.STATE))) (SETQ \NEWVMEMPAGEADDED T) (\PUTBASE (.PAGEMAPBASE. VP) 0 NEWFP) (\PUTBASE \FPTOVP NEWFP VP) (\PUTBASE \FPTOVP FP \NO.VMEM.PAGE) (replace (RPT FILEPAGE) of RPTR with (SETQ FP NEWFP] ((.VMEM.CONSISTENTP.) (replace (IFPAGE Key) of \InterfacePage with (LOGNOT16 \IFPValidKey)) (* ;  "Invalidate vmem and write out the Interface page") (SETQ \DIRTYPAGEHINT 0) (* ;  "So that the dirty page background writer wakes up") (PROG ((IFVP (fetch (POINTER PAGE#) of \InterfacePage))) (\TRANSFERPAGE IFVP \FirstVmemBlock (RPTFROMRP (\READRP IFVP)) T NIL] (* ; "Write it out") (COND ((IGREATERP \DIRTYPAGEHINT 0) (add \DIRTYPAGEHINT -1))) (\TRANSFERPAGE VP FP RPTINDEX T NIL]) (\LOADVMEMPAGE [LAMBDA (VPAGE FILEPAGE NEWPAGEFLG LOCK? DONTMOVETOPFLG) (* bvm%: "10-Aug-85 18:08") (* ;; "Fault in virtual page VPAGE known to live in FILEPAGE on the vmem. NEWPAGEFLG is true if the page is new, so should just be cleared, not loaded from vmem file. If LOCK? is true, locks down the page as well. In this case, if on Dandelion, we also check for page wanting to live in a particular real page. If DONTMOVETOPFLG is true, the real page we put this page in is not promoted to the front of the LRU queue of pages") (COND ((IGREATERP \PAGEFAULTCOUNTER \UPDATECHAINFREQ) (\UPDATECHAIN))) (add \PAGEFAULTCOUNTER 1) (PROG ((RPTINDEX (\SELECTREALPAGE FILEPAGE LOCK? DONTMOVETOPFLG)) RPTBASE SPECIALRP) (SETQ RPTBASE (fetch RPTRBASE of RPTINDEX)) [COND ((AND LOCK? (OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (SETQ SPECIALRP (\SPECIALRP VPAGE))) (* ; "Must actually put FILEPAGE into special RP, and thus move old contents of SPECIALRP into RPTINDEX") (LET* ((SRINDEX (RPTFROMRP SPECIALRP)) (SRPTR (fetch RPTRBASE of SRINDEX))) (\MOVEREALPAGE SRINDEX SRPTR RPTINDEX RPTBASE) (SETQ RPTINDEX SRINDEX) (SETQ RPTBASE SRPTR] (* ;  "Fill in new RPTINDEX with appropriate data") (replace (RPT VP) of RPTBASE with VPAGE) (replace (RPT FILEPAGE) of RPTBASE with FILEPAGE) (replace (RPT LOCKED) of RPTBASE with LOCK?) (COND ([AND DOLOCKCHECKS (NOT LOCK?) (EQ (LRSH VPAGE 8) (CONSTANT (\HILOC \PAGEMAP] (\MP.ERROR \MP.MAPNOTLOCKED "Page of page map being loaded but not locked" VPAGE))) (\TRANSFERPAGE VPAGE FILEPAGE RPTINDEX NIL NEWPAGEFLG]) (\MOVEREALPAGE [LAMBDA (SOURCEINDEX SOURCERPT DESTINDEX DESTRPT) (* bvm%: "14-Aug-85 13:53") (* ;;; "Moves the page, if any, currently living in real page table SOURCEINDEX & SOURCERPT into the page indicated by DESTINDEX & DESTRPT. The destination is assumed to have been vacated") (CHECK (NOT (fetch (RPT LOCKED) of SOURCERPT))) (replace (RPT LOCKED) of DESTRPT with NIL) [COND ((fetch (RPT OCCUPIED) of SOURCERPT) (* ;  "Page was not vacant to start with") (LET* ((SOURCEVP (fetch (RPT VP) of SOURCERPT)) (SOURCEFLAGS (\READFLAGS SOURCEVP))) (replace (RPT VP) of DESTRPT with SOURCEVP) (replace (RPT FILEPAGE) of DESTRPT with (fetch (RPT FILEPAGE) of SOURCERPT)) (\WRITEMAP \EMBUFVP (RPFROMRPT DESTINDEX) 0) (* ; "Map buffer to target page") (\BLT \EMBUFBASE (create POINTER PAGE# _ SOURCEVP) WORDSPERPAGE) (* ; "move data to buffer page") (\WRITEMAP \EMBUFVP \EMBUFRP 0) (* ;  "Restore buffer to its proper page") (\WRITEMAP SOURCEVP (RPFROMRPT DESTINDEX) SOURCEFLAGS) (* ; "Set flags and new RP for page") ] DESTINDEX]) (\LOOKUPPAGEMAP [LAMBDA (VP) (* bvm%: "20-Oct-86 18:26") (* ;; "Returns the pagemap entry for VP, which is expected to be in bounds. High bit of result is the lock bit. Zero denotes absence") (LET [(PRIMENTRY (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP] (COND ((EQ PRIMENTRY \EMPTYPMTENTRY) 0) (T (\GETBASE \PAGEMAP (IPLUS PRIMENTRY (fetch (VP SECONDARYKEY) of VP]) (\VALIDADDRESSP [LAMBDA (BASE) (* bvm%: "16-Jun-86 11:30") (NEQ 0 (\LOOKUPPAGEMAP (fetch (POINTER PAGE#) of BASE]) (\LOCKEDPAGEP [LAMBDA (VP TEMP) (* bvm%: "18-Feb-85 18:08") (* ;;; "True if VP is locked. If TEMP is NIL consults only the locked page table; otherwise, also checks for `temporary' locked page") (OR (NEQ 0 (LOGAND (.LOCKEDVPMASK. VP) (\GETBASE (.LOCKEDVPBASE. VP) 0))) (UNLESSRDSYS (AND TEMP (NOT (fetch (VMEMFLAGS VACANT) of (\READFLAGS VP))) (fetch (RPT LOCKED) of (fetch RPTRBASE of (RPTFROMRP (\READRP VP]) (\SELECTREALPAGE [LAMBDA (NEWFP LOCK? DONTMOVETOPFLG) (* bvm%: "10-Aug-85 18:08") (* ;; "Selects a real page, flushing it if necessary, and returns the RPT index of the page. NEWFP, if supplied, is the filepage that will be read into here. This might influence page choice by minimizing seek time. LOCK? means caller intends to lock the page, which constrains which real pages it can fall into. The selected page is moved to the back of the LRU queue, so that it won't be selected again soon, unless DONTMOVETOPFLG is true. If DONTMOVETOPFLG is REMOVE then the page is spliced out of the chain forever.") (PROG ((TRIES 0) (CNTR \MAXCLEANPROBES) (DISTANCE \MINSHORTSEEK) PREVRPT PREVINDEX RPTINDEX RPTBASE FP FLAGS) RETRY (SETQ PREVRPT \REALPAGETABLE) (until (EQ (SETQ RPTINDEX (fetch (RPT NEXTRP) of PREVRPT)) \PAGETABLESTOPFLG) do (SETQ RPTBASE (fetch RPTRBASE of RPTINDEX)) [COND ((fetch (RPT EMPTY) of RPTBASE) (RETURN PREVRPT)) ((NOT (fetch (RPT OCCUPIED) of RPTBASE)) (\MP.ERROR \MP.CHAIN.UNAVAIL "UNAVAILABLE page on Chain")) ([AND (NOT (fetch (RPT LOCKED) of RPTBASE)) [NOT (fetch (VMEMFLAGS REFERENCED) of (SETQ FLAGS (\READFLAGS (fetch (RPT VP) of RPTBASE ] (OR (NOT LOCK?) (.LOCKABLERP. (RPFROMRPT RPTINDEX] (* ;; "Page is unlocked and unreferenced, so is good candidate for flushing. LOCK? check is to avoid locking a page into a real page that might be desired by code that cares about real pages") (COND ([OR (NOT (fetch (VMEMFLAGS DIRTY) of FLAGS)) (PROGN (SETQ FP (fetch (RPT FILEPAGE) of RPTBASE)) (COND ((SELECTQ \VMEM.INHIBIT.WRITE (NIL [SELECTQ \VMEM.FULL.STATE (NIL (* ; "Normal, can write anything") T) (T (* ;  "Vmem is full and clean, don't write anything") NIL) (PROGN (* ;  "Vmem is full, but sullied, so might as well write anything for which there is space") (AND (ILEQ FP \LASTVMEMFILEPAGE) (OR (NULL \VMEM.PURE.LIMIT) (IGREATERP FP \VMEM.PURE.LIMIT ]) (NEW (* ;  "Only allowed to write old pages, since new pages might just have to get moved a second time") (ILEQ FP \VMEM.PURE.LIMIT)) (PROGN (* ;  "We are forbidden from writing any page") NIL)) (COND ((OR (ILEQ CNTR 0) (NULL NEWFP) (ILESSP (IABS (IDIFFERENCE FP NEWFP)) DISTANCE)) (* ;  "Page is near replacement, or we have given up trying for closeness") T) (T (* ;  "Page is too far away from replacement page") (SETQ CNTR (SUB1 CNTR)) [COND ((ILESSP DISTANCE \MAXSHORTSEEK) (* ; "Get more liberal") (SETQ DISTANCE (LLSH DISTANCE 1] NIL] [COND (DOLOCKCHECKS (COND ((fetch (RPT LOCKED) of RPTBASE) (\MP.ERROR \MP.FLUSHLOCKED "Attempt to displace locked page" RPTBASE)) ((EQ (fetch (RPT VPSEG) of RPTBASE) (CONSTANT (\HILOC \PAGEMAP))) (\MP.ERROR \MP.MAPNOTLOCKED "A page of the page map is not locked" RPTBASE ] (\FLUSHPAGE RPTINDEX) (\WRITEMAP (fetch (RPT VP) of RPTBASE) 0 \VMAP.VACANT) (replace (RPT EMPTY) of RPTBASE with T) (RETURN PREVRPT] (SETQ PREVRPT RPTBASE) (SETQ PREVINDEX RPTINDEX) finally (* ;; "Couldn't find an unreffed page because all pages were touched since last \UPDATECHAIN. Do another, which clears ref bits, and try again") (COND ((EQ TRIES 0) (SETQ TRIES 1) (\UPDATECHAIN)) [(AND (EQ TRIES 1) \VMEM.INHIBIT.WRITE) (SETQ \VMEM.INHIBIT.WRITE) (COND ((AND (NEQ \MACHINETYPE \DANDELION) (NEQ \MACHINETYPE \DAYBREAK)) (* ;; "Don't call RAID on a DLion, since the interface is so bad. Dorado user might want to know that we're smashing \VMEM.INHIBIT.WRITE") (RAID "No clean vmem pages to reuse, must write one. ^N to continue" ] (T (\MP.ERROR \MP.SELECTLOOP "Loop in \SELECTREALPAGE"))) (GO RETRY)) (SELECTQ DONTMOVETOPFLG (NIL (* ;  "Move this page to head of chain, so that it won't be picked again soon") (replace (RPT NEXTRP) of PREVRPT with (fetch (RPT NEXTRP) of RPTBASE)) (* ; "Splice RPTINDEX out of chain") (replace (RPT NEXTRP) of \RPTLAST with RPTINDEX) (* ; "Put new page at end of chain") (replace (RPT NEXTRP) of (SETQ \RPTLAST RPTBASE) with \PAGETABLESTOPFLG)) (REMOVE (* ;  "Splice this page out of chain altogether") (replace (RPT NEXTRP) of PREVRPT with (fetch (RPT NEXTRP) of RPTBASE)) (replace (RPT NEXTRP) of RPTBASE with \PAGETABLESTOPFLG)) NIL) (RETURN RPTINDEX]) (\SPECIALRP [LAMBDA (VP) (* edited%: " 9-Aug-85 17:14") (* ;; "for \DANDELION, some virtual pages must be mapped into special real pages. This function returns the corresponding real page") (SELECTC (FOLDLO VP PAGESPERSEGMENT) ((FOLDLO \VP.STACK PAGESPERSEGMENT) (IPLUS VP (IDIFFERENCE \RP.STACK \VP.STACK))) ((FOLDLO \VP.DISPLAY PAGESPERSEGMENT) (IPLUS VP (IDIFFERENCE \RP.DISPLAY \VP.DISPLAY))) NIL]) (\TRANSFERPAGE [LAMBDA (VP FILEPAGE RPTINDEX WRITE? NEWPAGE?) (* MPL "27-Jul-85 21:28") (* ;; "Transfers virtual page VP between page FILEPAGE of the vmem and real page RPTINDEX. WRITE? indicates direction of transfer. If NEWPAGE?, then page does not exist on file, and is simply cleared") (PROG (NEWFLAGS) (COND (WRITE? (FLIPCURSORBAR 15)) (T (FLIPCURSORBAR 0))) (SETQ NEWFLAGS (COND (NEWPAGE? \VMAP.DIRTY) (WRITE? (LOGAND (\READFLAGS VP) (LOGNOT16 \VMAP.DIRTY))) (T 0))) (COND ((AND WRITE? (fetch (RPT LOCKED) of (fetch RPTRBASE of RPTINDEX))) (* ;; "Writing a locked page: can't diddle map, because others might die, so do this in the straightforward way") (\BLT \EMBUFBASE (create POINTER PAGE# _ VP) WORDSPERPAGE) (* ;  "Copy page into buffer, then write the buffer out") (\ACTONVMEMFILE FILEPAGE \EMBUFBASE 1 T) (SETQ \LASTACCESSEDVMEMPAGE FILEPAGE)) ((NOT NEWPAGE?) (* ;  "Map the buffer page into the target real page, read/write the page, then set the map back") (\WRITEMAP VP 0 \VMAP.VACANT) (* ;  "Unmap VP so that we don't have two virtual pages pointing at same real page") (\WRITEMAP \EMBUFVP (RPFROMRPT RPTINDEX) 0) (* ; "Map buffer to target page") (\ACTONVMEMFILE FILEPAGE \EMBUFBASE 1 WRITE?) (* ; "Do the i/o") (\WRITEMAP \EMBUFVP \EMBUFRP 0) (* ;  "Restore buffer to its proper page") (SETQ \LASTACCESSEDVMEMPAGE FILEPAGE))) (\WRITEMAP VP (RPFROMRPT RPTINDEX) NEWFLAGS) (* ; "Set flags for page") (COND (NEWPAGE? (* ;  "Not on file yet, so clear it. Couldn't do this sooner because the flags weren't set") (\CLEARWORDS (create POINTER PAGE# _ VP) WORDSPERPAGE))) (COND (WRITE? (FLIPCURSORBAR 15) (\BOXIPLUS (LOCF (fetch SWAPWRITES of \MISCSTATS)) 1)) (T (FLIPCURSORBAR 0) (\BOXIPLUS (LOCF (fetch PAGEFAULTS of \MISCSTATS)) 1]) (\UPDATECHAIN [LAMBDA NIL (* bvm%: "30-Jul-85 15:20") (* ;  "Sorts the page chain by reference bit") (CHECK (NOT \INTERRUPTABLE)) (PROG ((RPTINDEX (fetch (RPT NEXTRP) of \REALPAGETABLE)) (CHAIN0 \REALPAGETABLE) (CHAIN1 (\ADDBASE \REALPAGETABLE 2)) RPTR VP FLAGS HEAD1) (SETQ HEAD1 CHAIN1) (* ;; "HEAD1 = CHAIN1 is just a holding cell for the second Chain we temporarily create inside here. Use the unused third word of the dummy header entry of \REALPAGETABLE") (replace (RPT NEXTRP) of CHAIN0 with \PAGETABLESTOPFLG) (replace (RPT NEXTRP) of CHAIN1 with \PAGETABLESTOPFLG) (do (SETQ RPTR (fetch RPTRBASE of RPTINDEX)) (SETQ VP (fetch (RPT VP) of RPTR)) [SETQ FLAGS (COND ((fetch (RPT EMPTY) of RPTR) 0) (T (\READFLAGS VP] (COND ((OR (fetch (RPT LOCKED) of RPTR) (PROGN (COND ([AND DOLOCKCHECKS (EQ (fetch (RPT VPSEG) of RPTR) (CONSTANT (\HILOC \PAGEMAP] (\MP.ERROR \MP.MAPNOTLOCKED "A page of the page map is not locked" RPTR))) (fetch (VMEMFLAGS REFERENCED) of FLAGS))) (* ;  "Page referenced or locked, put on CHAIN1") (\WRITEMAP VP (RPFROMRPT RPTINDEX) (LOGAND FLAGS (LOGNOT16 \VMAP.REF))) (* ; "Turn off ref bit") (replace (RPT NEXTRP) of CHAIN1 with RPTINDEX) (SETQ CHAIN1 RPTR)) (T (* ;  "Page was not referenced recently, put on CHAIN0") (replace (RPT NEXTRP) of CHAIN0 with RPTINDEX) (SETQ CHAIN0 RPTR))) (SETQ RPTINDEX (fetch (RPT NEXTRP) of RPTR)) (* ; "Look at next page in old chain") repeatuntil (EQ RPTINDEX \PAGETABLESTOPFLG)) (replace (RPT NEXTRP) of CHAIN1 with \PAGETABLESTOPFLG) (* ; "End of the line") (replace (RPT NEXTRP) of CHAIN0 with (fetch (RPT NEXTRP) of HEAD1)) (* ;  "Link end of CHAIN0 to beginning of CHAIN1") (SETQ \RPTLAST (COND ((EQ HEAD1 CHAIN1) (* ; "Nothing on CHAIN1 ??!!") CHAIN0) (T CHAIN1))) (* ;  "Pointer to end of complete chain") (SETQ \DIRTYPAGECOUNTER (SETQ \PAGEFAULTCOUNTER 0]) ) (* ; "Allocating and locking new pages") (DEFINEQ (\NEWPAGE [LAMBDA (BASE NOERROR LOCK?) (* ;  "Edited 24-Oct-92 12:45 by sybalsky:mv:envos") (* ;;; "Creates and returns a new page located at virtual addr BASE") (* ;; "If LOCK?, lock the page into real memory (A NOP on nonXerox machines!)") (UNINTERRUPTABLY (COND [(NOT (\MISCAPPLY* (FUNCTION \DONEWPAGE) BASE LOCK?)) (* ; "Failed, page exists") (COND ((NOT NOERROR) (\MP.ERROR \MP.NEWPAGE "Attempt to allocate already existing page" BASE T))) (COND (LOCK? (\LOCKPAGES BASE 1] ((IGREATERP (fetch (IFPAGE NActivePages) of \InterfacePage) (IDIFFERENCE \LASTVMEMFILEPAGE \GUARDVMEMFULL)) (* ; "Vmem getting full!") (\SET.VMEM.FULL.STATE))) BASE)]) (\DONEWPAGE [LAMBDA (BASE LOCK? INTERNALFLG) (* bvm%: "13-Aug-85 16:32") (* ;;; "Allocates new page at BASE, locking it if LOCK? is true. Returns vmemfile page# on success, NIL if page already exists. Must be run in safe context! because it can cause vmem activity") (AND \DOFAULTINIT (\FAULTINIT)) (* ;  "Only an issue when INIT.SYSOUT starts. Perhaps there is a better place to put this") (PROG ((VP (fetch (POINTER PAGE#) of BASE)) MAPBASE LOCKBASE FILEPAGE NEXTPM ERRCODE) (RETURN (COND ((fetch (VP INVALID) of VP) (\INVALIDVP VP) NIL) (T (SETQ MAPBASE (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP))) (COND ((EQ MAPBASE \EMPTYPMTENTRY) (* ;  "Need to create a new second-level block") (SETQ NEXTPM (fetch (IFPAGE NxtPMAddr) of \InterfacePage)) [COND ((EVENP NEXTPM WORDSPERPAGE) (* ;; "Need a new secondary pagemap page. This recursion is ok, because we know that SETUPPAGEMAP assures that the pagemap pages for all the pages in secondary map space were created at MAKEINIT time") (OR (\DONEWPAGE (\ADDBASE \PAGEMAP NEXTPM) T T) (RETURN (\MP.ERROR \MP.NEWMAPPAGE "\DONEWPAGE failed to allocate new map page"] (\PUTBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP) NEXTPM) (replace (IFPAGE NxtPMAddr) of \InterfacePage with (IPLUS NEXTPM \PMblockSize)) (SETQ MAPBASE NEXTPM))) [SETQ MAPBASE (\ADDBASE \PAGEMAP (IPLUS MAPBASE (fetch (VP SECONDARYKEY) of VP] (COND ((NEQ (\GETBASE MAPBASE 0) 0) (* ; "Page exists") (RETURN NIL))) (SETQ FILEPAGE (add (fetch (IFPAGE NActivePages) of \InterfacePage ) 1)) (replace (IFPAGE NDirtyPages) of \InterfacePage with FILEPAGE) (* ; "Currently a redundant field") [COND (LOCK? (SETQ FILEPAGE (\MAKESPACEFORLOCKEDPAGE VP FILEPAGE)) (\PUTBASE (SETQ LOCKBASE (.LOCKEDVPBASE. VP)) 0 (LOGOR (.LOCKEDVPMASK. VP) (\GETBASE LOCKBASE 0] (\PUTBASE \FPTOVP FILEPAGE VP) (\PUTBASE MAPBASE 0 FILEPAGE) (\LOADVMEMPAGE VP FILEPAGE T LOCK?) (COND (INTERNALFLG (SETQ \NEWVMEMPAGEADDED T)) (T (* ;  "Make sure \FPTOVP extended if necessary") (\ASSURE.FPTOVP.PAGE))) FILEPAGE]) (\ASSURE.FPTOVP.PAGE [LAMBDA NIL (* bvm%: "13-Aug-85 16:29") (* ;; "Called at the end of some swapping operation that added one or more pages to the vmem file, setting \NEWVMEMPAGEADDED true. If we're going to need a new page of \FPTOVP soon, do it now while there's still maneuvering room. The allowance below is for the worst case, which can happen when VMEM.PURE.STATE is on and \NEWPAGE was called needing a new pagemap page as well, in which case we could have as many as the following new vmem pages before we're home safe --- 1: \NEWPAGE added a page --- 2: a page was displaced by the new page and written to the end of the vmem --- 3: a new pagemap page was needed --- 4: it displaced a page to end of vmem --- 5: the new \FPTOVP page below --- 6: a page displaced by same. --- --- Alternatively, it could have been the new \FPTOVP page that needed a new pagemap block. Will never have both needing a new pagemap block, since there are several pagemap blocks per page") (LET ((FILEPAGE (fetch (IFPAGE NActivePages) of \InterfacePage))) (COND ((IGREATERP (IMOD FILEPAGE WORDSPERPAGE) (IDIFFERENCE WORDSPERPAGE 7)) (* ;  "This is a no-op if the page has already been allocated") (\DONEWPAGE (\ADDBASE \FPTOVP (CEIL FILEPAGE WORDSPERPAGE)) T T))) (SETQ \NEWVMEMPAGEADDED NIL]) (\MAKESPACEFORLOCKEDPAGE [LAMBDA (VP FILEPAGE) (* bvm%: "29-Jun-86 17:44") (* ;; "VP is a page to be locked, FILEPAGE its home. Returns a possibly new file page where VP will now live, after having kicked the former resident of the new file page into VP's old FILEPAGE") (PROG (DESIREDFP OLDVP FPBASE) [SETQ DESIREDFP (SELECTC (FOLDLO VP PAGESPERSEGMENT) ((FOLDLO \VP.STACK PAGESPERSEGMENT) (IPLUS VP (IDIFFERENCE (DLFPFROMRP \RP.STACK) \VP.STACK))) ((FOLDLO \VP.DISPLAY PAGESPERSEGMENT) (* ;  "Display lives in a fixed place in file, but does not land there initially") (IPLUS VP (IDIFFERENCE (DLFPFROMRP \RP.TEMPDISPLAY) \VP.DISPLAY))) ((FOLDLO \VP.FPTOVP PAGESPERSEGMENT) (* ;  "A new page of FPTOVP has to be continguous on file with other such pages") (IPLUS VP (IDIFFERENCE (DLFPFROMRP \RP.FPTOVP) \VP.FPTOVP))) (COND ((AND (ILEQ FILEPAGE (fetch LastLockedFilePage of \InterfacePage )) (IGREATERP FILEPAGE (DLFPFROMRP \RP.MISCLOCKED))) (* ;  "Page is in a good place already. It probably was once locked, then unlocked") (RETURN FILEPAGE)) (T (* ;  "Put it after all the other locked pages") (add (fetch LastLockedFilePage of \InterfacePage) 1] (COND ((AND (fetch FPOCCUPIED of (SETQ FPBASE (\ADDBASE \FPTOVP DESIREDFP))) (NEQ (SETQ OLDVP (fetch FPVIRTUALPAGE of FPBASE)) VP)) (* ;  "Someone else lives here, so move it out") (\MOVEVMEMFILEPAGE OLDVP DESIREDFP FILEPAGE))) (RETURN DESIREDFP]) (\MOVEVMEMFILEPAGE [LAMBDA (VP OLDFP NEWFP) (* bvm%: "18-Nov-84 14:14") (PROG ((FLAGS (\READFLAGS VP)) RP) (COND ((fetch (VMEMFLAGS VACANT) of FLAGS) (* ;  "Page not resident, so pull it in") (\LOADVMEMPAGE VP OLDFP) (SETQ FLAGS \VMAP.CLEAN)) ((\LOCKEDPAGEP VP) (\MP.ERROR \MP.BADLOCKED "Locked page is in the way" VP))) (\WRITEMAP VP (SETQ RP (\READRP VP)) (LOGOR FLAGS \VMAP.DIRTY)) (* ;  "Mark page dirty, so that it will eventually be written to its new home") (replace (RPT FILEPAGE) of (fetch RPTRBASE of (RPTFROMRP RP)) with NEWFP) (* ; "Tell RPT where VP now lives") (\PUTBASE (.PAGEMAPBASE. VP) 0 NEWFP) (* ; "Tell \PAGEMAP about it") (\PUTBASE \FPTOVP NEWFP VP) (* ; "... and \FPTOVP") ]) (\NEWEPHEMERALPAGE [LAMBDA (BASE NOERROR) (* bvm%: "26-NOV-82 15:40") (* ;;; "Creates and returns a new page located at virtual addr BASE, mapping it permanently into some real page but leaving it out of the vmem file") (\MISCAPPLY* (FUNCTION \DONEWEPHEMERALPAGE) BASE NOERROR]) (\DONEWEPHEMERALPAGE [LAMBDA (BASE NOERROR) (* bvm%: "30-Oct-86 16:47") (* ;;; "Creates and returns a new page located at virtual addr BASE, mapping it permanently into some real page but leaving it out of the vmem file") (LET ((VP (fetch (POINTER PAGE#) of BASE)) MAPBASE PREVRP RPTINDEX RPTR) (COND ((fetch (VP INVALID) of VP) (\INVALIDVP VP) NIL) ([OR (AND (NEQ (SETQ MAPBASE (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP))) \EMPTYPMTENTRY) (NEQ (\GETBASE \PAGEMAP (IPLUS MAPBASE (fetch (VP SECONDARYKEY) of VP))) 0)) (NOT (fetch (VMEMFLAGS VACANT) of (\READFLAGS VP] (* ;  "Page is in the vmem already, so no hope") (COND ((NOT NOERROR) (\MP.ERROR \MP.NEWPAGE "Page already exists " BASE T))) BASE) (T (COND ((IGREATERP \PAGEFAULTCOUNTER \UPDATECHAINFREQ) (\UPDATECHAIN))) (add \PAGEFAULTCOUNTER 1) (SETQ RPTINDEX (\SELECTREALPAGE NIL T 'REMOVE)) (* ; "Find a page to put this in") (SETQ RPTR (fetch RPTRBASE of RPTINDEX)) (* ;  "Fill in new RPTINDEX with appropriate data") (replace (RPT VP) of RPTR with \RPT.UNAVAILABLE) (replace (RPT FILEPAGE) of RPTR with VP) (* ; "For debugging only") (FLIPCURSORBAR 0) (\WRITEMAP VP (RPFROMRPT RPTINDEX) \VMAP.DIRTY) (* ; "Set flags for page") (\CLEARWORDS (create POINTER PAGE# _ VP) WORDSPERPAGE) (* ; "Clear new page") (FLIPCURSORBAR 0) (\BOXIPLUS (LOCF (fetch PAGEFAULTS of \MISCSTATS)) 1) (COND (\NEWVMEMPAGEADDED (\ASSURE.FPTOVP.PAGE))) BASE]) (\LOCKPAGES [LAMBDA (BASE NPAGES) (* bvm%: "26-NOV-82 15:17") (* ;; "Needs to be done in safe stack context because might cause vmem transfer") (\MISCAPPLY* (FUNCTION \DOLOCKPAGES) BASE NPAGES) BASE]) (\DOLOCKPAGES [LAMBDA (BASE NPAGES) (* ; "Edited 21-Oct-87 15:49 by bvm:") (for I from 0 to (SUB1 NPAGES) bind (VP _ (fetch (POINTER PAGE#) of BASE)) FILEPAGE MAPBASE RPTBASE RPINDEX RP MASK LOCKBASE do [COND ((fetch (VP INVALID) of VP) (\INVALIDVP VP)) [(EQ (SETQ MAPBASE (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP))) \EMPTYPMTENTRY) (\INVALIDADDR (ADDBASE BASE (UNFOLD I WORDSPERPAGE] (T [SETQ MAPBASE (\ADDBASE \PAGEMAP (IPLUS MAPBASE (fetch (VP SECONDARYKEY) of VP] (SETQ FILEPAGE (\GETBASE MAPBASE 0)) (COND ((EQ 0 (LOGAND (SETQ MASK (.LOCKEDVPMASK. VP)) (\GETBASE (SETQ LOCKBASE (.LOCKEDVPBASE. VP)) 0))) (* ; "Not locked yet") (COND ((fetch VACANT of (\READFLAGS VP)) (* ;  "Bring locked page into core so we can move it if necessary") (\LOADVMEMPAGE VP FILEPAGE NIL T))) [SETQ RPINDEX (RPTFROMRP (SETQ RP (\READRP VP] (SETQ RPTBASE (fetch RPTRBASE of RPINDEX)) [COND ((AND (NOT (.LOCKABLERP. RP)) (NOT (\SPECIALRP VP))) (* ;; "Page already swapped in, but lives in a real page that might need to get bumped (e.g., for stack), so move it now. If \SPECIALRP is true then we know that the page got swapped into the right place, so no need to move it.") (LET* ((NEWINDEX (\SELECTREALPAGE NIL T)) (NEWRPT (fetch RPTRBASE of NEWINDEX))) (\MOVEREALPAGE RPINDEX RPTBASE NEWINDEX NEWRPT) (replace (RPT EMPTY) of RPTBASE with T) (* ; "Mark vacated RPT entry empty") (SETQ RPTBASE NEWRPT) (SETQ RP (RPFROMRPT NEWINDEX] (COND ((NEQ FILEPAGE (SETQ FILEPAGE (\MAKESPACEFORLOCKEDPAGE VP FILEPAGE))) (* ;; "Moving to a new page, so have to mark this locked page dirty so that it will eventually get written to its new home") (\WRITEMAP VP RP (LOGOR \VMAP.DIRTY \VMAP.REF)) (replace (RPT FILEPAGE) of RPTBASE with FILEPAGE) (\PUTBASE \FPTOVP FILEPAGE VP) (\PUTBASE MAPBASE 0 FILEPAGE))) (\PUTBASE LOCKBASE 0 (LOGOR MASK (\GETBASE LOCKBASE 0))) (* ; "Set lock bit in page map") (replace (RPT LOCKED) of RPTBASE with T] (add VP 1) finally (COND (\NEWVMEMPAGEADDED (* ;  "If we had to load or rearrange pages, vmem could have gotten bigger if VMEM.PURE.STATE on") (\ASSURE.FPTOVP.PAGE]) (\TEMPLOCKPAGES [LAMBDA (BASE NPAGES) (* bvm%: "10-Aug-85 18:17") (* ;;; "`Temporarily' locks BASE for NPAGES, i.e. ensures that the swapper will not move the pages. Information vanishes at logout etc.") (\MISCAPPLY* (FUNCTION \DOTEMPLOCKPAGES) BASE NPAGES]) (\DOTEMPLOCKPAGES [LAMBDA (BASE NPAGES) (* ; "Edited 21-Oct-87 15:49 by bvm:") (* ;; "`Temporarily' locks BASE for NPAGES, i.e. ensures that the swapper will not move the pages. Information vanishes at logout etc. This function must be locked because it manipulates the page table table. Runs in MISC context") (to NPAGES as VP from (fetch (POINTER PAGE#) of BASE) bind RPTBASE RPINDEX RP do (\TOUCHPAGE BASE) (* ; "Touch page in case not resident") [SETQ RPINDEX (RPTFROMRP (SETQ RP (\READRP VP] (SETQ RPTBASE (fetch RPTRBASE of RPINDEX)) [COND ((NOT (.LOCKABLERP. RP)) (* ;; "Page already swapped in, but lives in a real page that might need to get bumped (e.g., for stack), so move it now") (LET* ((NEWINDEX (\SELECTREALPAGE NIL T)) (NEWRPT (fetch RPTRBASE of NEWINDEX))) (\MOVEREALPAGE RPINDEX RPTBASE NEWINDEX NEWRPT) (replace (RPT EMPTY) of RPTBASE with T) (* ; "Mark vacated RPT entry empty") (SETQ RPTBASE NEWRPT] (replace (RPT LOCKED) of RPTBASE with T) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE]) (\TEMPUNLOCKPAGES [LAMBDA (BASE NPAGES) (* bvm%: "30-Jul-85 16:58") (* ;; "Unlocks pages that were locked by \TEMPLOCKPAGES. This function must be locked because it manipulates the page table") (while (IGREATERP NPAGES 0) bind (VP _ (fetch (POINTER PAGE#) of BASE)) RPTR do (UNINTERRUPTABLY (\TOUCHPAGE BASE) (* ;  "Touch page in case not resident. Should only happen if page wasn't locked to begin with") (COND ((AND (NEQ (SETQ RPTR (\READRP VP)) 0) (EQ [fetch (RPT VP) of (SETQ RPTR (fetch RPTRBASE of (RPTFROMRP RPTR] VP)) (COND ([AND DOLOCKCHECKS (EQ (LRSH VP 8) (CONSTANT (\HILOC \PAGEMAP] (\MP.ERROR \MP.UNLOCKINGMAP "Attempt to unlock map page" VP))) (replace (RPT LOCKED) of RPTR with NIL)) (T (HELP "Page table changed out from under me!" VP)))) (add VP 1) (add NPAGES -1) (SETQ BASE (\ADDBASE BASE WORDSPERPAGE]) (\UNLOCKPAGES [LAMBDA (BASE NPAGES) (* bvm%: "30-Jul-85 16:58") (* ;;; "Unlocks NPAGES virtual pages from BASE onward") (UNINTERRUPTABLY (for I from 0 to (SUB1 NPAGES) bind (VP _ (fetch (POINTER PAGE#) of BASE)) MASK LOCKBASE do (COND ((fetch (VP INVALID) of VP) (\INVALIDVP VP)) ((NEQ 0 (LOGAND (SETQ MASK (.LOCKEDVPMASK. VP)) (\GETBASE (SETQ LOCKBASE (.LOCKEDVPBASE. VP)) 0))) (* ;  "Yes, page was locked, so turn the bit off now") (COND ([AND DOLOCKCHECKS (EQ (LRSH VP 8) (CONSTANT (\HILOC \PAGEMAP] (\MP.ERROR \MP.UNLOCKINGMAP "Attempt to unlock map page" VP))) (\PUTBASE LOCKBASE 0 (LOGXOR MASK (\GETBASE LOCKBASE 0))) (* ;  "Update pagemap, then update real page table") (replace (RPT LOCKED) of (fetch RPTRBASE of (RPTFROMRP (\READRP VP))) with NIL))) (add VP 1)))]) ) (* ; "Writing out the vmem") (DEFINEQ (\FLUSHVM [LAMBDA (MAIKO.SYSOUTFILE) (* ; "Edited 10-Feb-2021 22:43 by lmm") (* ;  "Edited 6-Jan-89 19:23 by Hayata") (* ;;  "Writes out all dirty pages to vmem, making it consistent. Returns NIL now, T on restart") (UNINTERRUPTABLY (PROG NIL (SELECTQ (\MISCAPPLY* (FUNCTION \DOFLUSHVM) MAIKO.SYSOUTFILE) (NIL (SETQ \DIRTYPAGEHINT 32767) (RETURN NIL)) (1 (ERROR "Can not find sysout file")) (2 (ERROR "FILE-SYSTEM-RESOURCES-EXCEEDED")) (3 (ERROR "Can not open sysout file")) (4 (ERROR "Can not seek sysout file")) (5 (ERROR "Can not write sysout file")) (6 (ERROR "Connection timed out")) NIL) (SETQ \DOFAULTINIT T) (\CONTEXTSWITCH \FAULTFXP) (for VAR in \SYSTEMCACHEVARS do (SET VAR NIL)) (RETURN T)))]) (\LOGOUT0 [LAMBDA (FAST) (* ;  "Edited 18-Jul-88 04:14 by masinter") [COND ((OR (EQ (fetch MachineType of \InterfacePage) \DORADO) (EQ (fetch MachineType of \InterfacePage) \DOLPHIN)) (* ;; "If we're running on a Dolphin or Dorado, we update the alto's clock. Note that Dandelions and Daybreaks don't have alto clocks, so this wouldn't work on them") (\BLT (EMADDRESS \RTCSECONDS) (LOCF (fetch SECONDSCLOCK of \MISCSTATS)) (UNFOLD 3 WORDSPERCELL] (UNINTERRUPTABLY (OR (AND [OR (NOT FAST) (AND (EQ FAST '?) (NOT (.VMEM.CONSISTENTP.] (\FLUSHVM)) (SELECTC \MACHINETYPE (\DAYBREAK (\DoveMisc.BootButton)) (SUBRCALL LISPFINISH FAST))))]) (\DOFLUSHVM [LAMBDA (MAIKO.SYSOUTFILE) (* ; "Edited 10-Feb-2021 22:38 by lmm") (* ;  "Edited 6-Jan-89 19:23 by Hayata") (* ;;; "Write everything out in a resumable way. Value is NIL if returned from directly, T if from saved state. Always invoked via \MISCAPPLY*") (CHECK (NOT \INTERRUPTABLE)) (* ;  "NOTE: need stats gathering off in here. Also avoid touching pages") (PROG ((IFPVP (fetch (POINTER PAGE#) of \InterfacePage)) (SCRATCHBUF \EMUSWAPBUFFERS) IFPRPT) (replace (IFPAGE MISCSTACKRESULT) of \InterfacePage with T) (* ; "This will make it look like we have returned from BCPL if caller gets control from the saved state") (* ;; "update interface pge before writing out sysout") (replace (IFPAGE CurrentFXP) of \InterfacePage with (fetch (IFPAGE MiscFXP) of \InterfacePage)) (RETURN (SUBRCALL VMEMSAVE MAIKO.SYSOUTFILE]) (\RELEASEWORKINGSET [LAMBDA NIL (* bvm%: "29-Nov-84 10:56") (COND ((\FLUSHVM) (* ; "Returning from Lisp startup") T) (T (* ; "Unmap any unlocked page") (for RPTINDEX from 1 to (SUB1 \RPTSIZE) bind RPTR when (AND (fetch (RPT OCCUPIED) of (SETQ RPTR (fetch RPTRBASE of RPTINDEX))) (NOT (fetch (RPT LOCKED) of RPTR))) do (\WRITEMAP (fetch (RPT VP) of RPTR) (RPFROMRPT RPTINDEX) \VMAP.VACANT) (replace (RPT EMPTY) of RPTR with T]) (\WRITEDIRTYPAGE [LAMBDA (MINDIRTY) (* bvm%: "13-Aug-85 17:51") (COND ((OR (NOT (.VMEM.CONSISTENTP.)) (AND \VMEM.PURE.LIMIT (NEQ \VMEM.PURE.LIMIT -1) (NOT \VMEM.FULL.STATE))) (PROG ((RPTR (OR \LASTDIRTYSCANPTR \REALPAGETABLE)) (NUMDIRTY (OR \LASTDIRTYCNT 0)) (CNT \MAXDIRTYSCANCOUNT) RP FP FLAGS) [COND ((AND (NULL \LASTDIRTYSCANPTR) (IGREATERP (IPLUS (add \DIRTYPAGECOUNTER 1) \PAGEFAULTCOUNTER) \UPDATECHAINFREQ)) (* ;  "Take this time to update the page chain instead") (RETURN (UNINTERRUPTABLY (\MISCAPPLY* (FUNCTION \UPDATECHAIN)))] (OR MINDIRTY (SETQ MINDIRTY 1)) LP [COND [(EQ (SETQ RP (fetch (RPT NEXTRP) of RPTR)) \PAGETABLESTOPFLG) (* ;  "Hit end of chain. Write out what we found if enough were dirty") (COND ((AND (IGEQ NUMDIRTY MINDIRTY) (NEQ NUMDIRTY 0) (SETQ RP \LASTDIRTYFOUND)) (GO GOTPAGE)) (T (SETQ \LASTDIRTYSCANPTR (SETQ \LASTDIRTYCNT (SETQ \LASTDIRTYFOUND NIL))) [COND ((AND (NEQ NUMDIRTY 0) (ILESSP \DIRTYSEEKMAX (LRSH MAX.SMALL.INTEGER 1))) (* ;  "Failed because page not close enough, so widen the tolerance") (SETQ \DIRTYSEEKMAX (LLSH \DIRTYSEEKMAX 1] (RETURN] ((fetch (RPT EMPTY) of (SETQ RPTR (fetch RPTRBASE of RP))) (* ;  "Page is empty. Should never happen if key is valid") (RETURN)) ((NOT (fetch (RPT LOCKED) of RPTR)) (* ;  "Don't bother writing out locked pages, since they don't help us in our swapping quest") (SETQ FLAGS (\READFLAGS (fetch (RPT VP) of RPTR))) (COND ((NOT (fetch (VMEMFLAGS DIRTY) of FLAGS)) (* ; "Page not dirty; skip") ) [(PROGN (SETQ FP (fetch (RPT FILEPAGE) of RPTR)) (IGREATERP (IABS (IDIFFERENCE (COND ((AND \VMEM.PURE.LIMIT (ILESSP FP \VMEM.PURE.LIMIT )) (* ;  "We'd have to write page to a new place, not here") (fetch (IFPAGE NActivePages) of \InterfacePage)) (T FP)) \LASTACCESSEDVMEMPAGE)) \DIRTYSEEKMAX)) (* ;  "Page too far away, don't write it") (COND ((fetch (VMEMFLAGS REFERENCED) of FLAGS) (* ; "but still count it") (add NUMDIRTY 1] ((IGREATERP FP \LASTVMEMFILEPAGE) (* ; "Can't write it") ) ((fetch (VMEMFLAGS REFERENCED) of FLAGS) (* ;  "Page dirty but referenced. Note it, but keep looking for a better one") (COND ((EQ NUMDIRTY 0) (SETQ \LASTDIRTYFOUND RP))) (add NUMDIRTY 1)) (T (* ; "Dirty, not referenced: do it") (GO GOTPAGE] (COND ((EQ (add CNT -1) 0) (* ;  "Scanned for long enough; don't lock user out") (SETQ \LASTDIRTYSCANPTR RPTR) (SETQ \LASTDIRTYCNT NUMDIRTY) (RETURN))) (GO LP) GOTPAGE (UNINTERRUPTABLY (SETQ \LASTDIRTYSCANPTR (SETQ RPTR (fetch RPTRBASE of RP))) (* ; "Keep traveling pointer") (SETQ \LASTDIRTYCNT (SETQ \LASTDIRTYFOUND NIL)) (COND ((ILEQ (IABS (IDIFFERENCE (fetch (RPT FILEPAGE) of RPTR) \LASTACCESSEDVMEMPAGE)) \DIRTYSEEKMAX) (* ;  "Could fail if swapping since the selection has moved the disk arm too far") (\MISCAPPLY* (FUNCTION \WRITEDIRTYPAGE1) RP RPTR))) (SETQ \DIRTYSEEKMAX \MAXSHORTSEEK)) (RETURN T]) (\WRITEDIRTYPAGE1 [LAMBDA (RP RPTR) (* bvm%: "13-Aug-85 16:41") (* ;  "Write out buffer RP. This fn is locked and called in the misc context") (COND ([AND (NOT (fetch (RPT LOCKED) of RPTR)) (fetch (VMEMFLAGS DIRTY) of (\READFLAGS (fetch (RPT VP) of RPTR] (* ;  "Verify that the page is still a candidate, so previous loop could be interruptable") (\FLUSHPAGE RP) (COND (\NEWVMEMPAGEADDED (\ASSURE.FPTOVP.PAGE]) (\COUNTREALPAGES [LAMBDA (TYPE) (* bvm%: "18-Dec-84 15:31") (SELECTQ TYPE ((DIRTY REF) [PROG [(FLAGBITS (COND ((EQ TYPE 'DIRTY) \VMAP.DIRTY) (T \VMAP.REF] (RETURN (NPAGESMACRO (NEQ (LOGAND (\READFLAGS VP) FLAGBITS) 0]) (LOCKED (NPAGESMACRO (fetch (RPT LOCKED) of RPTR))) (OCCUPIED (NPAGESMACRO T)) (\ILLEGAL.ARG TYPE]) ) (* ; "VMEM.PURE.STATE hack") (DEFINEQ (\DOCOMPRESSVMEM [LAMBDA NIL (* bvm%: " 7-Apr-84 17:53") (* ;;; "Called underneath \DOFLUSHVM to write the pages above the high water mark back to the places vacated below that mark") (PROG ((EMPTYFP (DLFPFROMRP \RP.GCTABLE)) (LASTFP (fetch NActivePages of \InterfacePage)) (OLDVIW \VMEM.INHIBIT.WRITE) VP) [COND ((NULL OLDVIW) (* ;; "Encourage \SELECTREALPAGE to select only `old' file pages for displacement, so that we don't needlessly write the same page twice") (SETQ \VMEM.INHIBIT.WRITE 'NEW] LP (COND ((IGEQ EMPTYFP LASTFP) (SETQ \VMEM.INHIBIT.WRITE OLDVIW) (RETURN))) [COND ((EQ (\GETBASE \FPTOVP EMPTYFP) \NO.VMEM.PAGE) (while (EQ (SETQ VP (\GETBASE \FPTOVP LASTFP)) \NO.VMEM.PAGE) do (SETQ LASTFP (SUB1 LASTFP))) (\MOVEVMEMFILEPAGE VP LASTFP EMPTYFP) (replace NActivePages of \InterfacePage with (SETQ LASTFP (SUB1 LASTFP] (add EMPTYFP 1) (GO LP]) (VMEM.PURE.STATE [LAMBDA FLG (* bvm%: " 7-Apr-84 16:59") (PROG1 (NOT (NULL \VMEM.PURE.LIMIT)) [COND ((IGREATERP FLG 0) (* ;; "Set \VMEM.PURE.LIMIT appropriately. If turning on, and it wasn't on before, set it to -1 so that it takes effect only at the next FLUSHVM") (SETQ \VMEM.PURE.LIMIT (AND (ARG FLG 1) (OR \VMEM.PURE.LIMIT (SETQ \VMEM.PURE.LIMIT -1])]) ) (* ;; "Handling the backing store getting too full--keep running, but if we overflow, we can never \FLUSHVM because there is no place to write some pages" ) (DEFINEQ (32MBADDRESSABLE [LAMBDA NIL (* ; "Edited 2-May-88 22:03 by MASINTER") (SELECTC \MACHINETYPE (\DORADO T) (\DOLPHIN NIL) (\DAYBREAK T) (NEQ 0 (fetch (IFPAGE DL24BitAddressable) of \InterfacePage]) (\SET.VMEM.FULL.STATE [LAMBDA NIL (* bvm%: "13-Feb-85 20:12") (* ;  "We are running out of vmem, try to extend file. Do this at next convenient time") (COND ((NOT \VMEM.FULL.STATE) (* ; "Get an interrupt to handle this") (replace VMEMFULL of \INTERRUPTSTATE with T) (SETQ \PENDINGINTERRUPT T))) (SETQ \VMEM.FULL.STATE (COND ((ILESSP (fetch (IFPAGE NActivePages) of \InterfacePage) \LASTVMEMFILEPAGE) (* ;  "Not completely full, allow normal things to happen") 0) ((.VMEM.CONSISTENTP.) T) (T 'DIRTY]) (\SET.LASTVMEMFILEPAGE [LAMBDA (N) (* ; "Edited 6-Apr-87 14:09 by bvm:") (* ;; "Called by disk routines when they discover how long the physical vmem is. Currently only used by Dove.") (COND ((IGREATERP (fetch (IFPAGE NActivePages) of \InterfacePage) (IDIFFERENCE (SETQ \LASTVMEMFILEPAGE N) \GUARDVMEMFULL)) (* ; "Vmem getting full!") (\SET.VMEM.FULL.STATE)) (T (* ;  "Vmem ok now (was earlier set to full for safety's sake)") (SETQ \VMEM.FULL.STATE NIL))) N]) (\DOVMEMFULLINTERRUPT [LAMBDA NIL (* ; "Edited 21-Oct-87 13:54 by bvm:") (* ;;; "Called while interruptable when vmem is full or nearly so. Tries to extend vmem file, or gives error if it can't") (COND (\EXTENDINGVMEMFILE (* ;; "Another interrupt happened while we are extending file. Don't try to do this one twice, but repost the interrupt in the hopes that it will happen after vmem extension is finished") (SETQ \PENDINGINTERRUPT T)) (T (RESETVARS ((\EXTENDINGVMEMFILE T)) (* ;; "Used to have code here that tried to extend the vmem file, but even on those that support extension it's flaky, and rarely what you want--people allocate the vmem file to the desired size in the first place, don't want it extended further.") (PROG ((HELPFLAG 'BREAK!)) (replace VMEMFULL of \INTERRUPTSTATE with NIL) (* ;  "Very slight chance of losing the break if ^E right here. Don't know how to fix this") (CL:CERROR "Resume the interrupted computation" (CONCAT "Your virtual memory backing file is " (COND ((>= (fetch (IFPAGE NActivePages) of \InterfacePage ) \LASTVMEMFILEPAGE) "complete") (T "near")) "ly full. Save your work & reload a.s.a.p."]) (\FLUSHVMOK? [LAMBDA (TYPE NOERROR) (* ;  "Edited 10-Feb-2021 21:49 by larry") (* bvm%: " 7-Sep-85 10:48") (* ;;; "Called before any attempt to do a \FLUSHVM to make sure it's ok") T]) ) (RPAQ? \UPDATECHAINFREQ 100) (RPAQ? \PAGEFAULTCOUNTER 0) (RPAQ? \DIRTYPAGECOUNTER 0) (RPAQ? \DIRTYPAGEHINT 0) (RPAQ? \LASTACCESSEDVMEMPAGE 0) (RPAQ? \MAXSHORTSEEK 1000) (RPAQ? \MINSHORTSEEK 20) (RPAQ? \MAXCLEANPROBES 20) (RPAQ? \VMEM.INHIBIT.WRITE ) (RPAQ? \VMEM.PURE.LIMIT ) (RPAQ? \VMEM.FULL.STATE ) (RPAQ? \GUARDVMEMFULL 500) (RPAQ? VMEM.COMPRESS.FLG ) (RPAQ? \DOFAULTINIT 0) (RPAQ? \VMEMACCESSFN ) (RPAQ? \SYSTEMCACHEVARS ) (RPAQ? \MAXSWAPBUFFERS 1) (RPAQ? \EXTENDINGVMEMFILE ) (RPAQ? \MaxScreenPage 0) (RPAQ? \NEWVMEMPAGEADDED ) (RPAQ? \LASTDIRTYCNT ) (RPAQ? \LASTDIRTYFOUND ) (RPAQ? \LASTDIRTYSCANPTR ) (RPAQ? \DIRTYSEEKMAX 50) (* ; "Errors signaled in the maintenance panel") (DEFINEQ (\MP.ERROR [LAMBDA (CODE STRING ARG1 ARG2) (* mpl "20-Jun-85 11:09") (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) ((OPCODES RAID) CODE)) (T (RAID STRING ARG1 ARG2]) ) (* ; "Debugging code. Some of this also runs renamed for extra TeleRaid help") (DEFINEQ (\ACTONVMEMFILE [LAMBDA (FILEPAGE BUFFER NPAGES WRITEFLAG) (* MPL "22-Jun-85 20:18") (COND ((EQ \MACHINETYPE \DANDELION) (\DL.ACTONVMEMFILE FILEPAGE BUFFER NPAGES WRITEFLAG)) ((EQ \MACHINETYPE \DAYBREAK) (\DOVE.ACTONVMEMFILE FILEPAGE BUFFER NPAGES WRITEFLAG)) (T (\M44ACTONVMEMFILE FILEPAGE BUFFER NPAGES WRITEFLAG]) (\SHOWPAGETABLE [LAMBDA (MODE FILE) (* bvm%: "12-Jul-86 16:55") (PROG ((*PRINT-BASE* 8) (OUTSTREAM (GETSTREAM FILE 'OUTPUT)) (RPTR \REALPAGETABLE) (RP 0) FLAGS VP STATE FIRSTONE LASTONE) (printout OUTSTREAM " RP VP FilePage Status" T) (until (SELECTQ MODE (CHAIN (EQ (SETQ RP (fetch (RPT NEXTRP) of RPTR)) \PAGETABLESTOPFLG)) (NIL (add RP 1) (IGEQ RP \RPTSIZE)) (\ILLEGAL.ARG MODE)) do (SETQ RPTR (fetch RPTRBASE of RP)) (SETQ VP (fetch (RPT VP) of RPTR)) (COND ((AND (NULL MODE) (EQ VP STATE)) (SETQ LASTONE RP)) (T (COND (LASTONE (printout OUTSTREAM "ditto thru " LASTONE T) (SETQ LASTONE NIL))) (SETQ FIRSTONE RP) (SETQ STATE VP) (printout OUTSTREAM |.I7.8| (RPFROMRPT RP)) [COND ((fetch (RPT EMPTY) of RPTR) (PRIN1 " Empty" OUTSTREAM)) ((NOT (fetch (RPT OCCUPIED) of RPTR)) (PRIN1 " Unavailable" OUTSTREAM)) (T (printout OUTSTREAM |.I8.8| VP %,) (\PRINTVP VP OUTSTREAM) (printout OUTSTREAM 28 |.I6.8| (fetch (RPT FILEPAGE) of RPTR) %,,) (COND ((fetch (RPT LOCKED) of RPTR) (COND ((NOT (\LOCKEDPAGEP VP)) (* ; "not permanently locked") (PRIN1 "Temp" OUTSTREAM))) (PRIN1 "Locked " OUTSTREAM))) (UNLESSRDSYS (PROGN (COND ((fetch (VMEMFLAGS REFERENCED) of (SETQ FLAGS (\READFLAGS VP))) (PRIN1 "Ref " OUTSTREAM))) (COND ((fetch (VMEMFLAGS DIRTY) of FLAGS) (PRIN1 "Dirty" OUTSTREAM] (TERPRI OUTSTREAM]) (CHECKPAGEMAP [LAMBDA NIL (* bvm%: "12-Jul-86 16:56") (LET ((*PRINT-BASE* 8) (NUMOCCUPIED 0) (NUMLOCKED 0) (CHAINOCCUPIED 0) (CHAINLOCKED 0) RPTR FPBASE FP VP RP) (CHECKFPTOVP) [for RPTINDEX from 1 to (SUB1 \RPTSIZE) when (fetch (RPT OCCUPIED) of (SETQ RPTR (fetch RPTRBASE of RPTINDEX) )) do (add NUMOCCUPIED 1) (SETQ VP (fetch (RPT VP) of RPTR)) (SETQ FP (fetch (RPT FILEPAGE) of RPTR)) (COND ((CHECKFPTOVP1 FP VP RPTINDEX)) ([NEQ VP (fetch FPVIRTUALPAGE of (SETQ FPBASE (\ADDBASE \FPTOVP FP] (printout T "RPT for RP " (RPFROMRPT RPTINDEX) " says VP ") (\PRINTVP VP T) (printout T " lives in FP " FP "; but FP Map says that FP contains ") (\PRINTVP (fetch FPVIRTUALPAGE of FPBASE) T) (printout T T)) ((\LOCKEDPAGEP VP) (add NUMLOCKED 1) (COND ((NOT (fetch (RPT LOCKED) of RPTR)) (printout T "VP " VP ", living in RP " (RPFROMRPT RPTINDEX) " should be locked but isn't." T)) ((IGREATERP FP (DLRPFROMFP (fetch (IFPAGE LastLockedFilePage) of \InterfacePage))) (printout T "VP " VP " is locked, but living in FP " FP ", which is not in the locked page area" T] (PROGN (SETQ RPTR \REALPAGETABLE) (* ; "Check pagetable chain") [while (NEQ (SETQ RP (fetch (RPT NEXTRP) of RPTR)) \PAGETABLESTOPFLG) when (fetch (RPT OCCUPIED) of (SETQ RPTR (fetch RPTRBASE of RP))) do (add CHAINOCCUPIED 1) (COND ((fetch (RPT LOCKED) of RPTR) (add CHAINLOCKED 1] (COND ((ILESSP CHAINOCCUPIED NUMOCCUPIED) (printout T NUMOCCUPIED " occupied pages, but only " CHAINOCCUPIED " are on page chain. " NUMLOCKED " pages are permanently locked; " CHAINLOCKED " pages on chain are locked somehow." T]) (CHECKFPTOVP [LAMBDA NIL (* bvm%: "10-Dec-84 12:39") (for FP from 1 to (fetch NActivePages of \InterfacePage) as (FPBASE _ (\ADDBASE \FPTOVP 1)) by (\ADDBASE FPBASE 1) when (fetch FPOCCUPIED of FPBASE) do (CHECKFPTOVP1 FP (fetch FPVIRTUALPAGE of FPBASE]) (CHECKFPTOVP1 [LAMBDA (FP VP RPTINDEX) (* bvm%: "10-Dec-84 12:36") (PROG ((FP2 (\LOOKUPPAGEMAP VP))) (RETURN (COND ((NEQ FP2 FP) (COND ((UNLESSRDSYS RPTINDEX) (printout T "RPT for RP " (RPFROMRPT RPTINDEX))) (T (printout T "FP map"))) (printout T " says FP " FP " contains VP ") (\PRINTVP VP T) (printout T "; but PageMap says that page is in FP " FP2 T) T]) (\PRINTFPTOVP [LAMBDA (FIRSTPAGE NWORDS TYPEFLG STREAM VPRAWFLG) (* bvm%: "24-Sep-86 11:44") (SETQ STREAM (GETSTREAM STREAM 'OUTPUT)) (OR FIRSTPAGE (SETQ FIRSTPAGE 1)) (OR NWORDS (SETQ NWORDS (fetch (IFPAGE NActivePages) of \InterfacePage))) (LET ((BASE (\ADDBASE \FPTOVP (SUB1 FIRSTPAGE))) (*PRINT-BASE* 8) (LASTVP -2) (NEXTFP (SUB1 FIRSTPAGE)) FIRSTFP FIRSTVP NEXTVP LOCKEDP TYPE NEXTLOCKED NEXTTYPE) (while (IGEQ NWORDS 0) do (add NEXTFP 1) [COND ((EQ NWORDS 0) (SETQ NEXTVP -1)) ((NEQ (SETQ NEXTVP (\GETBASE (SETQ BASE (\ADDBASE BASE 1)) 0)) \NO.VMEM.PAGE) (SETQ NEXTLOCKED (\LOCKEDPAGEP NEXTVP)) (if TYPEFLG then (SETQ NEXTTYPE (TYPENAME (create POINTER PAGE# _ NEXTVP))) (if (NULL NEXTTYPE) then (SETQ NEXTTYPE (SELECTC (LRSH NEXTVP 8) ((LIST \PNAME.HI (CL:1+ \PNAME.HI)) "Pnames") ((LIST \DEF.HI (CL:1+ \DEF.HI)) "Definitions") ((LIST \VAL.HI (CL:1+ \VAL.HI)) "Value cells") ((LIST \PLIST.HI (CL:1+ \PLIST.HI)) "Property lists") ((\HILOC \FPTOVP) "\FPTOVP") (\STACKHI "Stack") ((\HILOC \HTMAIN) "GC Main table") ((\HILOC \HTOVERFLOW) "GC Overflow table") NIL] [COND ([COND ((EQ NEXTVP \NO.VMEM.PAGE) (NEQ LASTVP \NO.VMEM.PAGE)) (T (OR (NEQ NEXTVP (ADD1 LASTVP)) (NEQ NEXTLOCKED LOCKEDP) (NEQ TYPE NEXTTYPE] [COND ((IGEQ LASTVP 0) (COND (FIRSTFP (printout STREAM FIRSTFP "-"))) (printout STREAM (SUB1 NEXTFP) 12) (COND ((EQ LASTVP \NO.VMEM.PAGE) (printout STREAM "empty")) (T (COND (FIRSTFP (if VPRAWFLG then (PRIN1 FIRSTVP STREAM) else (\PRINTVP FIRSTVP STREAM)) (PRIN1 "-" STREAM))) (if VPRAWFLG then (PRIN1 LASTVP STREAM) else (\PRINTVP LASTVP STREAM)) (COND (LOCKEDP (PRIN1 '* STREAM))) (if TYPE then (printout STREAM 32 TYPE] (SETQ FIRSTFP) (TERPRI STREAM) (SETQ FIRSTVP NEXTVP)) (T (* ; "in a run") (OR FIRSTFP (SETQ FIRSTFP (SUB1 NEXTFP] (SETQ LASTVP NEXTVP) (SETQ LOCKEDP NEXTLOCKED) (SETQ TYPE NEXTTYPE) (add NWORDS -1]) (\PRINTVP [LAMBDA (VP STREAM) (* bvm%: "28-MAR-83 12:40") (printout STREAM "{" (LRSH VP 8) "," (LOGAND VP 255) "}"]) ) (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS \ACTONVMEMFILE MACRO ((X . Y) (SPREADAPPLY* \VMEMACCESSFN X . Y))) (PUTPROPS .VMEM.CONSISTENTP. MACRO (NIL (EQ (fetch (IFPAGE Key) of \InterfacePage) \IFPValidKey))) (PUTPROPS .LOCKABLERP. MACRO [(RP) (OR (NEQ (FOLDLO RP PAGESPERSEGMENT) (FOLDLO \RP.STACK PAGESPERSEGMENT)) (NOT (OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK]) ) (* ; "Virtual page flags") (DECLARE%: EVAL@COMPILE (RPAQQ \VMAP.DIRTY 10000Q) (RPAQQ \VMAP.CLEAN 0) (RPAQQ \VMAP.REF 100000Q) (RPAQQ \VMAP.VACANT 30000Q) (RPAQQ \VMAP.FLAGS 170000Q) (RPAQQ \VMAP.NOTFLAGS 7777Q) (CONSTANTS \VMAP.DIRTY \VMAP.CLEAN \VMAP.REF \VMAP.VACANT \VMAP.FLAGS \VMAP.NOTFLAGS) ) (DECLARE%: EVAL@COMPILE (ACCESSFNS VMEMFLAGS ((VACANT (EQ (LOGAND DATUM \VMAP.VACANT) \VMAP.VACANT)) (DIRTY (NEQ (LOGAND DATUM \VMAP.DIRTY) 0)) (REFERENCED (NEQ (LOGAND DATUM \VMAP.REF) 0)))) ) (DECLARE%: EVAL@COMPILE (PUTPROPS LOGNOT16 MACRO ((X) (LOGXOR X 177777Q))) ) (* ; "RPT constants") (DECLARE%: EVAL@COMPILE (RPAQQ \RPT.EMPTY 177776Q) (RPAQQ \RPT.UNAVAILABLE 177777Q) (RPAQQ \PAGETABLESTOPFLG 0) (RPAQQ \RPTENTRYLENGTH 3) (CONSTANTS \RPT.EMPTY \RPT.UNAVAILABLE \PAGETABLESTOPFLG \RPTENTRYLENGTH) ) (DECLARE%: EVAL@COMPILE (BLOCKRECORD RPT ((LOCKED FLAG) (NEXTRP BITS 17Q) (VP WORD) (FILEPAGE WORD)) (BLOCKRECORD RPT ((NIL BITS 20Q) (VPSEG BYTE) (VPPAGEINSEG BYTE))) [ACCESSFNS RPT ([EMPTY (EQ (fetch (RPT VP) of DATUM) \RPT.EMPTY) (COND (NEWVALUE (replace (RPT VP) of DATUM with \RPT.EMPTY)) (T (ERROR "Invalid replace of RPT.EMPTY" DATUM] [UNAVAILABLE (EQ (fetch (RPT VP) of DATUM) \RPT.UNAVAILABLE) (COND (NEWVALUE (replace (RPT VP) of DATUM with \RPT.UNAVAILABLE)) (T (ERROR "Invalid replace of RPT.UNAVAILABLE" DATUM] (OCCUPIED (ILESSP (fetch (RPT VP) of DATUM) \RPT.EMPTY]) (ACCESSFNS RPT1 (RPTRBASE (\ADDBASE (\ADDBASE \REALPAGETABLE (LLSH DATUM 1)) DATUM))) ) (DECLARE%: EVAL@COMPILE (PUTPROPS RPFROMRPT MACRO ((RPTINDEX) (IPLUS RPTINDEX \RPOFFSET))) (PUTPROPS RPTFROMRP MACRO ((RP) (IDIFFERENCE RP \RPOFFSET))) (PUTPROPS NPAGESMACRO MACRO ((FORM) (PROG ((RESULT 0) (CNTR \RPTSIZE) (RPTR \REALPAGETABLE) VP) LP (COND ((NEQ (SETQ CNTR (SUB1 CNTR)) 0) (SETQ RPTR (\ADDBASE RPTR \RPTENTRYLENGTH)) (COND ((AND (fetch (RPT OCCUPIED) of RPTR) (PROGN (SETQ VP (fetch (RPT VP) of RPTR)) FORM)) (add RESULT 1))) (GO LP))) (RETURN RESULT)))) ) (* ; "Virtual to file pagemap") (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (RPAQQ \MAXFILEPAGE 177776Q) (CONSTANTS \MAXFILEPAGE) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (RPAQQ \EMPTYPMTENTRY 177777Q) (CONSTANTS \EMPTYPMTENTRY) ) (DECLARE%: EVAL@COMPILE (ACCESSFNS VP ((PRIMARYKEY (LRSH DATUM 5)) (SECONDARYKEY (LOGAND DATUM 37Q)) (INVALID (PROGN NIL)))) ) (DECLARE%: EVAL@COMPILE (PUTPROPS .PAGEMAPBASE. MACRO [OPENLAMBDA (VPAGE) (\ADDBASE \PAGEMAP (IPLUS (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VPAGE)) (fetch (VP SECONDARYKEY) of VPAGE]) ) (* ; "FP to VP stuff") (DECLARE%: EVAL@COMPILE (BLOCKRECORD FPTOVP ((FPVIRTUALPAGE FIXP)) [ACCESSFNS FPTOVP ((FPOCCUPIED (NEQ (\GETBASE DATUM 0) \NO.VMEM.PAGE]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \NO.VMEM.PAGE 177777Q) (CONSTANTS \NO.VMEM.PAGE) ) (DECLARE%: EVAL@COMPILE (PUTPROPS DLRPFROMFP MACRO ((FP) (ADD1 FP))) (PUTPROPS DLFPFROMRP MACRO ((RP) (SUB1 RP))) ) (PUTPROPS \TOUCHPAGE DOPVAL (1 GETBASE.N 0)) (PUTPROPS TIMES3 DOPVAL (1 COPY LLSH1 IPLUS2)) (* ; "Locked page table") (DECLARE%: EVAL@COMPILE (PUTPROPS .LOCKEDVPBASE. MACRO ((VP) (\ADDBASE \LOCKEDPAGETABLE (FOLDLO VP BITSPERWORD)))) (PUTPROPS .LOCKEDVPMASK. MACRO ((VP) (LLSH 1 (IMOD VP BITSPERWORD)))) ) (DECLARE%: EVAL@COMPILE (RPAQQ \MAXDIRTYSCANCOUNT 144Q) (RPAQQ \MINVMEMSPAREPAGES 144Q) (RPAQQ \DLBUFFERPAGES 20Q) (CONSTANTS \MAXDIRTYSCANCOUNT \MINVMEMSPAREPAGES \DLBUFFERPAGES) ) (DECLARE%: EVAL@COMPILE (RPAQQ 2MBPAGES 10000Q) (CONSTANTS 2MBPAGES) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \UPDATECHAINFREQ \REALPAGETABLE \RPTLAST \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \PAGEFAULTCOUNTER \LASTDIRTYCNT \LASTDIRTYFOUND \LASTDIRTYSCANPTR \MACHINETYPE \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYSEEKMAX \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \VMEMACCESSFN \SYSTEMCACHEVARS \LASTVMEMFILEPAGE \EXTENDINGVMEMFILE \MaxScreenPage \NEWVMEMPAGEADDED) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \#SWAPBUFFERS \#EMUBUFFERS \#DISKBUFFERS \MAXSWAPBUFFERS \EMUSWAPBUFFERS \EMUBUFFERS \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND) ) (DECLARE%: EVAL@COMPILE (PUTPROPS RWMufMan DMACRO ((X) ((OPCODES 170Q 11Q) X))) ) (DECLARE%: EVAL@COMPILE (RPAQQ DOLOCKCHECKS NIL) (CONSTANTS (DOLOCKCHECKS NIL)) ) ) (* ;;; "MAKEINIT stuff") (DEFINEQ (ADDPME [LAMBDA (VP NEWPAGEOK) (* bvm%: " 6-Dec-84 14:07") (* ;; "add an entry for VP to the PAGEMAP. Called only under MAKEINIT") (PROG (PX PMP LOCKBASE) [COND ((IEQ (SETQ PMP (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP))) \EmptyPMTEntry) (* ;  "empty entries in the PageMapTBL have 177777q as their value") (COND ((EVENP NEXTPM WORDSPERPAGE) (* ; "must add a new page map page") (SETQ PX (\ADDBASE \PAGEMAP NEXTPM)) (OR NEWPAGEOK (IGREATERP (PAGELOC PX) VP) (HELP "page map needs new page after page map written out")) (\NEWPAGE PX NIL T))) (\PUTBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP) (SETQ PMP NEXTPM)) (SETQ NEXTPM (IPLUS NEXTPM \PMblockSize] (SETQ PX (IPLUS PMP (fetch (VP SECONDARYKEY) of VP))) (COND ((NEQ (\GETBASE \PAGEMAP PX) 0) (HELP "page already in pagemap" VP)) (T (\PUTBASE \PAGEMAP PX NEXTVMEM) [COND ((LOCKEDPAGEP VP) (* ;  "Set lock bit in locked page table") (\PUTBASE (SETQ LOCKBASE (.LOCKEDVPBASE. VP)) 0 (LOGOR (.LOCKEDVPMASK. VP) (\GETBASE LOCKBASE 0] (SETQ NEXTVMEM (ADD1 NEXTVMEM]) (CHECKIFPAGE [LAMBDA NIL (* mjs "19-Jul-84 13:24") (CHECKIF Key EQUAL \IFPValidKey "Interface page key"]) (DUMPINITPAGES [LAMBDA (CODEFIRSTPAGE CODENEXTPAGE VERSIONS) (* bvm%: "14-Jan-85 12:51") (* ; "called only under MAKEINIT") (ADDPME (PAGELOC \InterfacePage) T) (* ;  "THE INTERFACE PAGE MUST BE THE FIRST PAGE") (for I from CODEFIRSTPAGE to (SUB1 CODENEXTPAGE) do (* ;  "add the pagemap entries for the pages which were written directly to the file") (ADDPME I T)) (MAPPAGES 0 (ADD1 \MAXVMPAGE) (FUNCTION MAKEROOMFORPME)) (MAPPAGES 0 (ADD1 \MAXVMPAGE) (FUNCTION ADDPME)) (PROGN (* ;  "set interface page locations --- stack pointers already set up IN SETUPSTACK") (replace (IFPAGE NxtPMAddr) of \InterfacePage with NEXTPM) (replace (IFPAGE NActivePages) of \InterfacePage with (SUB1 NEXTVMEM)) (replace (IFPAGE NDirtyPages) of \InterfacePage with (SUB1 NEXTVMEM)) (replace (IFPAGE filePnPMP0) of \InterfacePage with (\GETBASE \PAGEMAP 0)) (replace (IFPAGE filePnPMT0) of \InterfacePage with (\GETBASE (.PAGEMAPBASE. (PAGELOC \PageMapTBL)) 0)) [COND (VERSIONS (replace (IFPAGE LVersion) of \InterfacePage with (CAR VERSIONS)) (replace (IFPAGE MinBVersion) of \InterfacePage with (CADDR VERSIONS )) (replace (IFPAGE MinRVersion) of \InterfacePage with (CADR VERSIONS] (replace (IFPAGE Key) of \InterfacePage with \IFPValidKey)) (MAPPAGES 0 (ADD1 \MAXVMPAGE) (FUNCTION DUMPVP)) (ALLOCAL (PROG ((FILE (OUTPUT))) [COND ((NOT (RANDACCESSP FILE)) (* ;  "SYSOUT file is sequential; have to get it random access for this") (OUTPUT (SETQ FILE (OPENFILE (CLOSEF FILE) 'BOTH] (SETFILEPTR FILE MKI.Page0Byte))) (DUMPVP (PAGELOC \InterfacePage]) (MAKEROOMFORPME [LAMBDA (VP) (* bvm%: "29-MAR-83 17:11") (* ;;  "make sure that the pagemap-page for page VP exists; we later will want to add it to the pagemap") (COND ((IEQ (\GETBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP)) \EmptyPMTEntry) (* ;  "empty entries in the PageMapTBL have 177777q as their value") (COND ((EVENP NEXTPM WORDSPERPAGE) (* ; "must add a new page map page") (\NEWPAGE (\ADDBASE \PAGEMAP NEXTPM) NIL T))) (\PUTBASE \PageMapTBL (fetch (VP PRIMARYKEY) of VP) NEXTPM) (SETQ NEXTPM (IPLUS NEXTPM \PMblockSize]) (MAPPAGES [LAMBDA (BOT TOP FN) (* ;  "Edited 5-Nov-92 15:41 by sybalsky:mv:envos") (* ;; "Map thru all pages from BOT to TOP that exist, skipping the interface page, if it falls into that range. Call FN on the page number.") (PROG ((VP BOT) (IVP (PAGELOC \InterfacePage))) LP (COND ((AND (SETQ VP (MKI.NEXTPAGE VP)) (IGREATERP TOP VP)) (COND ((NOT (IEQ VP IVP)) (APPLY* FN VP))) (SETQ VP (ADD1 VP)) (GO LP]) (READPAGEMAP [LAMBDA NIL (* bvm%: "10-Dec-84 21:54") (* ;  "called only under READSYS -- reads in pagemap so that SETVMPTR can work") (PROG (D) (LOCAL (MAPVMPAGE (fetch (POINTER PAGE#) of \InterfacePage) 1)) (* ; "Install interface page by magic") (* PROGN (SETQ FPSTART  (fetch (IFPAGE LastDominoFilePage)  of \InterfacePage))  (SETQ NPAGES (fetch  (IFPAGE NActivePages) of  \InterfacePage)) (* ;  "Note: have to do these fetches before the SETFILEPTR since they indirectly do SETFILEPTR themselves")  (SETFILEPTR VMEMFILE  (IPLUS (UNFOLD (SUB1  (fetch (IFPAGE FPTOVPStart) of  \InterfacePage)) BYTESPERPAGE)  (UNFOLD FPSTART BYTESPERWORD)))  (for I from FPSTART to NPAGES bind  VP when (NEQ (SETQ VP  (VBIN2)) \NO.VMEM.PAGE) do  (* ; "Read in all of FPTOVP")  (MAPVMPAGE VP (SUB1 I)))) [LOCAL (MAPVMPAGE (PAGELOC \PAGEMAP) (SUB1 (fetch (IFPAGE filePnPMP0) of \InterfacePage] (* ; "map in first page of secondary page map, which is where all the secondary map pages themselves live") (LOCAL (SETVMPTR \PAGEMAP)) (for I from 0 to (SUB1 (FOLDHI PAGESPERSEGMENT \PMblockSize)) as VP from (PAGELOC \PAGEMAP) by \PMblockSize do (* ; "Have to read all the addresses of secondary map pages themselves before we can read their contents") (READPAGEMAPBLOCK VP)) (for J from 0 to (SUB1 \NumPMTpages) as FP from (SUB1 (fetch (IFPAGE filePnPMT0) of \InterfacePage)) do (* ;  "read in all the primary map table pages") (LOCAL (MAPVMPAGE (IPLUS (PAGELOC \PageMapTBL) J) FP))) (for I from 0 to (SUB1 (UNFOLD \NumPMTpages WORDSPERPAGE)) do (COND ((IEQ (SETQ D (GETBASE \PageMapTBL I)) \EmptyPMTEntry)) (T (LOCAL (SETVMPTR (ADDBASE \PAGEMAP D))) (READPAGEMAPBLOCK (UNFOLD I \PMblockSize]) (READPAGEMAPBLOCK [LAMBDA (VP) (* lmm " 4-MAY-82 21:12") (PROG ((B VP) P) (FRPTQ \PMblockSize [COND ((NEQ (SETQ P (VBIN2)) 0) (LOCAL (MAPVMPAGE B (SUB1 P] (SETQ B (ADD1 B]) (SETUPPAGEMAP [LAMBDA NIL (* ;  "Edited 5-Nov-92 16:03 by sybalsky:mv:envos") (* ;  "called only from MAKEINIT to initialize the page map") (PROG NIL (* ; "set up page map") (\NEWPAGE \PAGEMAP NIL T) (* ;  "Create 1 page worth of real page table") (CREATEPAGES \PageMapTBL \NumPMTpages NIL T) (* ; "And the segment table.") (* ;; "init PageMapTBL pages to 177777q:") (for I from 0 to (SUB1 (UNFOLD \NumPMTpages WORDSPERPAGE)) do (\PUTBASE \PageMapTBL I \EmptyPMTEntry)) (SETQ NEXTPM 0) (for I from 0 to (SUB1 (fetch (VP PRIMARYKEY) of \NumPageMapPages)) bind (PAGEMAPKEY _ (fetch (VP PRIMARYKEY) of (PAGELOC \PAGEMAP))) do (* ;; "Assign pagemap pages to cover all pagemap pages, so that \DONEWPAGE can guarantee that when it needs to allocate a new pagemap page, that the pagemap page for the new page already exists") (\PUTBASE \PageMapTBL (IPLUS PAGEMAPKEY I) NEXTPM) (SETQ NEXTPM (IPLUS NEXTPM \PMblockSize))) (SETQ NEXTVMEM \FirstVmemBlock) (* ;  "add entry for InterfacePage which must be on FirstVMemBlock") (CREATEPAGES \LOCKEDPAGETABLE \NumLPTPages NIL T]) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS CHECKIF MACRO [(FLD COMPARISON VALUE STR) (COND ((NOT (COMPARISON VALUE (fetch (IFPAGE FLD) of \InterfacePage ))) (printout T "Warning: " STR "= " (PROGN VALUE) ", but \InterfacePage says " (fetch (IFPAGE FLD) of \InterfacePage) T]) ) (ADDTOVAR INEWCOMS (FNS DUMPINITPAGES) (VARS INITCONSTANTS) (FNS SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES)) (ADDTOVAR RDCOMS (FNS READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE \LOCKEDPAGEP \LOOKUPPAGEMAP CHECKPAGEMAP CHECKFPTOVP CHECKFPTOVP1 \SHOWPAGETABLE \PRINTFPTOVP)) (ADDTOVAR EXPANDMACROFNS CHECKIF .LOCKEDVPBASE. .LOCKEDVPMASK. .PAGEMAPBASE.) (ADDTOVAR MKI.SUBFNS (\NEWPAGE . MKI.NEWPAGE) (\LOCKPAGES . MKI.LOCKPAGES)) (ADDTOVAR RD.SUBFNS (\NEWPAGE . VNEWPAGE) (\LOCKPAGES . VLOCKPAGES)) (ADDTOVAR RDPTRS (\REALPAGETABLE)) (ADDTOVAR RDVALS (\RPTSIZE)) EVAL@COMPILE (ADDTOVAR DONTCOMPILEFNS DUMPINITPAGES SETUPPAGEMAP ADDPME MAKEROOMFORPME MAPPAGES READPAGEMAP READPAGEMAPBLOCK CHECKIFPAGE) ) (DEFINEQ (\LOCKFN [LAMBDA (FN) (* bvm%: "22-NOV-82 17:39") [\LOCKCELL (SETQ FN (fetch (LITATOM DEFINITIONCELL) of (EVQ FN] (COND ((fetch (DEFINITIONCELL CCODEP) of FN) (\LOCKCODE (fetch (DEFINITIONCELL DEFPOINTER) of FN]) (\LOCKCODE [LAMBDA (CODEBLOCK) (* rmk%: "15-Aug-84 13:35") (\LOCKWORDS CODEBLOCK (UNFOLD (\#BLOCKDATACELLS CODEBLOCK) WORDSPERCELL]) (\LOCKVAR [LAMBDA (VAR) (* lmm " 5-APR-82 00:43") (\LOCKCELL (fetch (LITATOM VCELL) of (EVQ VAR]) (\LOCKCELL [LAMBDA (X NPGS) (* bvm%: "22-NOV-82 17:54") (\LOCKPAGES (PAGEBASE X) (OR NPGS 1]) (\LOCKWORDS [LAMBDA (BASE NWORDS) (* bvm%: "22-NOV-82 17:35") (\LOCKPAGES (PAGEBASE BASE) (COND (NWORDS (FOLDHI (IPLUS (fetch (POINTER WORDINPAGE) of BASE) NWORDS) WORDSPERPAGE)) (T 1]) ) (DECLARE%: DONTCOPY (ADDTOVAR INEWCOMS (FNS \LOCKFN \LOCKVAR \LOCKCELL \LOCKWORDS \LOCKCODE) (ALLOCAL (ADDVARS (LOCKEDFNS \FAULTHANDLER \FAULTINIT \DOVE.FAULTINIT \D01.FAULTINIT \DL.FAULTINIT \CHAIN.UP.RPT \MAKESPACEFORLOCKEDPAGE \PAGEFAULT \WRITEMAP \LOOKUPPAGEMAP \LOCKEDPAGEP \LOADVMEMPAGE \MOVEREALPAGE \INVALIDADDR \INVALIDVP \SELECTREALPAGE \TRANSFERPAGE \SPECIALRP \UPDATECHAIN \MARKPAGEVACANT \FLUSHPAGE \CLEARWORDS \FLUSHVM \DONEWPAGE \ASSURE.FPTOVP.PAGE \DONEWEPHEMERALPAGE \WRITEDIRTYPAGE1 \COPYSYS0 \COPYSYS0SUBR \RELEASEWORKINGSET \DOFLUSHVM \DOLOCKPAGES \DOTEMPLOCKPAGES \TEMPUNLOCKPAGES \MP.ERROR RAID \DL.NEWFAULTINIT \DL.MARK.PAGES.UNAVAILABLE \DL.UNMAPPAGES \DL.ASSIGNBUFFERS \D01.ASSIGNBUFFERS \DOCOMPRESSVMEM \MOVEVMEMFILEPAGE \SET.VMEM.FULL.STATE \HINUM \LONUM \ATOMCELL SETTOPVAL) (LOCKEDVARS \REALPAGETABLE \RPTLAST \PAGEFAULTCOUNTER \UPDATECHAINFREQ \RPOFFSET \RPTSIZE \LOCKEDPAGETABLE \EMBUFBASE \EMBUFVP \EMBUFRP \LASTACCESSEDVMEMPAGE \MAXSHORTSEEK \MAXCLEANPROBES \MINSHORTSEEK \DIRTYPAGECOUNTER \DIRTYPAGEHINT \VMEM.INHIBIT.WRITE \VMEM.PURE.LIMIT \VMEM.FULL.STATE \GUARDVMEMFULL VMEM.COMPRESS.FLG \KBDSTACKBASE \MISCSTACKBASE \DOFAULTINIT \FPTOVP \MACHINETYPE \VMEMACCESSFN \TELERAIDBUFFER \EMUDISKBUFFERS \EMUDISKBUFEND \MAXSWAPBUFFERS \EMUBUFFERS \#EMUBUFFERS \#SWAPBUFFERS \#DISKBUFFERS \RCLKSECOND \RCLKMILLISECOND \VALSPACE \EMUSWAPBUFFERS \EM.CURSORBITMAP \PAGEMAP \PageMapTBL \IOCBPAGE \IOPAGE \MISCSTATS \DEFSPACE \InterfacePage \LASTVMEMFILEPAGE \DoveIORegion \MaxScreenPage \NEWVMEMPAGEADDED)))) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA VMEM.PURE.STATE) ) (PUTPROPS LLFAULT COPYRIGHT ("Venue & Xerox Corporation" 3676Q 3677Q 3700Q 3701Q 3702Q 3703Q 3704Q 3705Q 3706Q 3707Q 3710Q 3711Q 3745Q)) (DECLARE%: DONTCOPY (FILEMAP (NIL (33017Q 67143Q (\FAULTINIT 33031Q . 42260Q) (\D01.FAULTINIT 42262Q . 47707Q) ( \D01.ASSIGNBUFFERS 47711Q . 53456Q) (\MAIKO.FAULTINIT 53460Q . 56245Q) (\MAIKO.NEWFAULTINIT 56247Q . 57603Q) (\MAIKO.ASSIGNBUFFERS 57605Q . 63361Q) (\M-VMEMSAVE 63363Q . 66603Q) (\MAIKO.NEWPAGE 66605Q . 67141Q)) (67343Q 74771Q (\MAIKO.DO.MOVDS 67355Q . 74767Q)) (76130Q 166610Q (\DOVE.FAULTINIT 76142Q . 102535Q) (\DL.FAULTINIT 102537Q . 107630Q) (\DL.NEWFAULTINIT 107632Q . 154344Q) (\DL.UNMAPPAGES 154346Q . 155334Q) (\DL.MARK.PAGES.UNAVAILABLE 155336Q . 156274Q) (\DL.ASSIGNBUFFERS 156276Q . 162017Q ) (\CHAIN.UP.RPT 162021Q . 166606Q)) (166653Q 253066Q (\FAULTHANDLER 166665Q . 167543Q) (\PAGEFAULT 167545Q . 173304Q) (\INVALIDADDR 173306Q . 173562Q) (\INVALIDVP 173564Q . 174023Q) (\FLUSHPAGE 174025Q . 201166Q) (\LOADVMEMPAGE 201170Q . 205242Q) (\MOVEREALPAGE 205244Q . 210504Q) (\LOOKUPPAGEMAP 210506Q . 211500Q) (\VALIDADDRESSP 211502Q . 211772Q) (\LOCKEDPAGEP 211774Q . 213176Q) ( \SELECTREALPAGE 213200Q . 235135Q) (\SPECIALRP 235137Q . 236154Q) (\TRANSFERPAGE 236156Q . 244017Q) ( \UPDATECHAIN 244021Q . 253064Q)) (253150Q 327741Q (\NEWPAGE 253162Q . 255200Q) (\DONEWPAGE 255202Q . 264741Q) (\ASSURE.FPTOVP.PAGE 264743Q . 267715Q) (\MAKESPACEFORLOCKEDPAGE 267717Q . 275321Q) ( \MOVEVMEMFILEPAGE 275323Q . 277744Q) (\NEWEPHEMERALPAGE 277746Q . 300477Q) (\DONEWEPHEMERALPAGE 300501Q . 305717Q) (\LOCKPAGES 305721Q . 306345Q) (\DOLOCKPAGES 306347Q . 316113Q) (\TEMPLOCKPAGES 316115Q . 316624Q) (\DOTEMPLOCKPAGES 316626Q . 321641Q) (\TEMPUNLOCKPAGES 321643Q . 324525Q) ( \UNLOCKPAGES 324527Q . 327737Q)) (330007Q 357025Q (\FLUSHVM 330021Q . 332261Q) (\LOGOUT0 332263Q . 334236Q) (\DOFLUSHVM 334240Q . 336724Q) (\RELEASEWORKINGSET 336726Q . 340516Q) (\WRITEDIRTYPAGE 340520Q . 354264Q) (\WRITEDIRTYPAGE1 354266Q . 355613Q) (\COUNTREALPAGES 355615Q . 357023Q)) (357073Q 362422Q (\DOCOMPRESSVMEM 357105Q . 361423Q) (VMEM.PURE.STATE 361425Q . 362420Q)) (362671Q 373200Q ( 32MBADDRESSABLE 362703Q . 363351Q) (\SET.VMEM.FULL.STATE 363353Q . 365274Q) (\SET.LASTVMEMFILEPAGE 365276Q . 366647Q) (\DOVMEMFULLINTERRUPT 366651Q . 372414Q) (\FLUSHVMOK? 372416Q . 373176Q)) (374654Q 375310Q (\MP.ERROR 374666Q . 375306Q)) (375441Q 425251Q (\ACTONVMEMFILE 375453Q . 376252Q) ( \SHOWPAGETABLE 376254Q . 403755Q) (CHECKPAGEMAP 403757Q . 411641Q) (CHECKFPTOVP 411643Q . 412655Q) ( CHECKFPTOVP1 412657Q . 414046Q) (\PRINTFPTOVP 414050Q . 424733Q) (\PRINTVP 424735Q . 425247Q)) ( 445216Q 474714Q (ADDPME 445230Q . 450577Q) (CHECKIFPAGE 450601Q . 451053Q) (DUMPINITPAGES 451055Q . 456473Q) (MAKEROOMFORPME 456475Q . 460175Q) (MAPPAGES 460177Q . 461376Q) (READPAGEMAP 461400Q . 470555Q) (READPAGEMAPBLOCK 470557Q . 471347Q) (SETUPPAGEMAP 471351Q . 474712Q)) (500023Q 502371Q ( \LOCKFN 500035Q . 500540Q) (\LOCKCODE 500542Q . 501104Q) (\LOCKVAR 501106Q . 501356Q) (\LOCKCELL 501360Q . 501624Q) (\LOCKWORDS 501626Q . 502367Q))))) STOP \ No newline at end of file diff --git a/sources/LLFAULT.LCOM b/sources/LLFAULT.LCOM index 91a09f6141bc7774976fff00c5c76842e2ffa98f..4befe3fe3a4f49a12dc58f2a2f7e0a540a66cb59 100644 GIT binary patch delta 1067 zcmb7^&rj1}7{|Mja8OGK5e-q`u{v2zR@!c3W5A%5Koxfq$#e zocF4pU-$x^x0s3n)2 z`LeT`Y*bh3b50{E%NZdrTg+IL29ko&kWj1R&MXUDJi&5_Fi*j3-TB>mZn4-|S#TPG z1Zu7^J`(M&1JPPdukg_?1J8bP=MNf9l zqQlL>W=77N*@B|wCZSZp`W4R{gqbL0R?1~CSFz7!0PYAF!!Q)g7nd<6>UbT43}eS} ziY9{@NfuLvhy|sA`U~xFo9@hi;010Z7K_CJ19bTTxm*n-Aed22u-i7kPHXKYhCA6y zwvl2SUPzKES>VEEPr=4F3nFuLinP=6u`P~4=^||pFO%09L$`1qIrLz!3lkNdSr<+O zK%Pv%&F#u|FH$$NP14S*vX;uZ`C#R;Hm&6?tmh~R8iEDEFrhtJDNQkHsMVeOrRqw< zBaeNbqRJ+CJj3L_hPL~Usg1P0`o7)lBwlt9gb!U*b`>JXjYPo|E#Sg25Dh~!aH3q4 z2iu%6Em27csjTQJ0!mkevhb(fV?3%whifM4lw*rrrjcIx+vbBo$|+6r0JJhkMtoQ`fw}WK@4}G zK4Yk7{&m+OF||J9>n2o5CWGN9+Rt8Z(fPOCK^cM^sG6rASiq7*ng#;fB>bhH=e;|v U=L>hjsC3Xc2k!rXrb)N_125b?hyVZp delta 2332 zcmZuzO>Em_74(QlG?+j=yEFre@&y>weoyMyjTej1!BNEG+tnuPHTb*uH z+Xx`U38ZNj9JnAr(~!7~c0-x~1q6p(#%YJ`zya-sgj6&MAui+nzO?&k=fmgkef|DC z-~0FZ>+gbh{tBL-> zW{xa;?s&~>w_1*ubEbuyV|yp2TXS_G8q0aD`MK%3ms6C2SXQj)8{8aA8@%umQQ8lX?8R` zQjirXZ%CpgjUh(9cMJhIKFcSwi8Kp6)bn0_&dYfVN2`w4T*wKL{Zp0{5iLzM5oKo; zCUEI^JeG#(M%A6Ed(dvZl7*4*q-dB>QN=^Vn=Xz^qcBn^QIXfDQ9YBBQFt9 zE11$}mpJh%ld3k+*^3DjVhN~>$%ZvW0$U_9dG=Uc@fRg@bgJzj%oK}4SXU671?dq z=Z;mU>w0yj4tyNVuVD#jehrI9MYN=JC=TFxeys?H=Uj(?OAC)8$Phb^AWyIJpF%^A zx=-HsHoS^EfocR$4^KSfpWnOnX%&wymn4jfgkb_M#reOR+k#2X|JQsm7*G4d){d7r zJRX~`y5P3j&^l3f!CS!YYr`>YTsDk-!24y34RNuIzhG_WFt)&&)l;@Rvm&`0+SMi@ zXR&PSP-~rbqu5v#MH|=3R?PoH-M)0q3I<+IgNSM8;-Etc4Be7TW6~ic5=h`H4wE|g z*UH&Y;836cPkC3z*|_}85mHArXY=x6w(ABMN?zY|=N9hW5HlFspwuSrE($~Lvy5}^ z7Ow8_eQsokierf{@^n|b-hYGX?mIUX7*O5wjMr6~H-Au@H-EhR{Tljbl=ru8jdT`w zQcd^I9XFop7M);mj?%a7MtB2*Pj{7ZnDU#qn}fkkT7Ru{cQMm*?>=+q##1u=ilBe( z?FbOc8VqbM(vFjxw)2EG(BBw1u>7^wZ_@_qcC`NH&A0k5FES&7fYn1&OzIp24$DB% zw287#XjRmK7cx+>46$SuB!dcZnHW^YC2PNEN(K3ljzvIAH;?^fNTxZdN-Aw3G)?wm z9!G~+C;^}86=LV%=2%~xdT%b(D%AJFwl zWHAjKu-K<70~NEC*GhTO!UW?q>a`uphJp`UK+|mSy6m-x~~Hq zj&YU+y!P4fRBIk)s|zr)V&59w4W}FSbOTP#+ied{+wBG!EZ)lSXydJnmvb^h=g+P- zx$1aaP{*nFpwXO}7T(QZd-xN9;(RI$Y$O7w?76o8U43{9{y=~?TXh_EsWkJZu=LfL zU!K?L6|&kE6|<-vB!ngISEO~8D|xM4vhWW;Au=XZ4jMB446Kf22v^D_Uk&Z>Qx^vP iS3}|Lik6>P5mhvCjD&=cqxkq2KRdl?bTnL&mGJ-GHH=*V From ddf2fddd7a226a3df83df581b76a20f072dcb76b Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Fri, 12 Feb 2021 19:42:36 -0800 Subject: [PATCH 04/37] Turn off CACHEDISPLAYFONTS because of init problems; not important --- sources/FONT | 2 +- sources/FONT.LCOM | Bin 44118 -> 44074 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/FONT b/sources/FONT index b530eb3f..85104564 100644 --- a/sources/FONT +++ b/sources/FONT @@ -1 +1 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "28-Jun-99 16:29:49" {DSK}medley3.5>sources>FONT.;3 187933 changes to%: (FNS \LOOKUPFONTSINCORE) previous date%: "28-Jun-99 16:22:27" {DSK}medley3.5>sources>FONT.;2) (* ; " Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1999 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT FONTCOMS) (RPAQQ FONTCOMS [ (* ;; "font functions ") (FNS CHARWIDTH CHARWIDTHY STRINGWIDTH \CHARWIDTH.DISPLAY \STRINGWIDTH.DISPLAY \STRINGWIDTH.GENERIC) (FNS DEFAULTFONT FONTCLASS FONTCLASSUNPARSE FONTCLASSCOMPONENT SETFONTCLASSCOMPONENT) [COMS (* ;  "Until we pin down the exact interface") (P (MOVD 'FONTCLASSCOMPONENT 'FONTCOMPONENT) (MOVD 'SETFONTCLASSCOMPONENT 'SETFONTCOMPONENT] [COMS (* ; "MAPPING FOR DOS FILENAMES ") (INITVARS (*DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) (HELVETICA . HV) (TIMESROMAND . TD) (HELVETICAD . HD) (MODERN . MD) (CLASSIC . CL) (GACHA . GC) (TITAN . TI) (LETTERGOTHIC . LG) (BOLDPS . BP) (TERMINAL . TM) (CLASSICTHIN . CT) (HIPPO . HP) (LOGO . LG) (MATH . MA) (OLDENGLISH . OE) (SYMBOL . SY] (COMS (* ;; "Creation: ") (FNS FONTCREATE \FONT.SYMBOLMEMB \FONT.SYMBOLASSOC \FONT.COMPARESYMBOL)) (COMS (* ;; "Property extraction:") (FNS FONTASCENT FONTDESCENT FONTHEIGHT FONTPROP \AVGCHARWIDTH)) (COMS (* ;; "Bitmap editing/manipulation:") (FNS GETCHARBITMAP PUTCHARBITMAP MOVECHARBITMAP)) (FNS FONTCOPY FONTSAVAILABLE FONTFILEFORMAT FONTP FONTUNPARSE SETFONTDESCRIPTOR CHARCODEP EDITCHAR \STREAMCHARWIDTH \UNITWIDTHSVECTOR \CREATEDISPLAYFONT \CREATECHARSET.DISPLAY \CREATE-REAL-CHARSET.DISPLAY \BUILDSLUGCSINFO \SEARCHDISPLAYFONTFILES \SEARCHFONTFILES \FINDFONTFILE \FONTSYMBOL \DEVICESYMBOL \FONTFACE \FONTFACE.COLOR \FONTFILENAME \FONTFILENAME.OLD \FONTFILENAME.NEW \FONTINFOFROMFILENAME \FONTINFOFROMFILENAME.OLD \GETFONTDESC \COERCEFONTDESC \LOOKUPFONT \LOOKUPFONTSINCORE \READDISPLAYFONTFILE) (COMS (* ;; "\FINDFONTFILE \FONTFILENAME \SEARCHFONTFILES \FONTINFOFROMFILENAME are redefined to deal with character-set directories. That behavior is conditioned on the setting of the global variable *USEOLDFONTDIRECTORIES*, T at PARC, maybe NIL most other places. ") (ADDVARS (*OLD-FONT-EXTENSIONS* STRIKE)) (INITVARS (*USEOLDFONTDIRECTORIES* NIL)) (GLOBALVARS *OLD-FONT-EXTENSIONS* *USEOLDFONTDIRECTORIES*) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)") ) (COMS (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)") (INITVARS (CACHEDISPLAYFONTS T)) (GLOBALVARS CACHEDISPLAYFONTS) (* ; "STRIKE format file support") (FNS \READSTRIKEFONTFILE \SFMAKEBOLD \SFMAKEITALIC \SFMAKEROTATEDFONT \SFROTATECSINFO \SFROTATEFONTCHARACTERS \SFFIXOFFSETSAFTERROTATION \SFROTATECSINFOOFFSETS \SFMAKECOLOR) (FNS WRITESTRIKEFONTFILE STRIKECSINFO)) (INITRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) (SYSRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) (INITVARS (\FONTSINCORE) (\DEFAULTDEVICEFONTS) (\UNITWIDTHSVECTOR)) (GLOBALVARS DISPLAYFONTDIRECTORIES \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\UNITWIDTHSVECTOR))) (CONSTANTS (NORUNCODE 255)) (EXPORT (OPTIMIZERS FONTPROP)) [DECLARE%: DONTCOPY (EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO) (MACROS FONTASCENT FONTDESCENT FONTHEIGHT \FGETOFFSET \FSETOFFSET \FGETWIDTH \FSETWIDTH \FGETCHARWIDTH \FSETCHARWIDTH \FGETIMAGEWIDTH \FSETIMAGEWIDTH \GETCHARSETINFO \CREATECSINFOELEMENT \CREATEFONTCHARSETVECTOR) (FUNCTIONS \CREATEKERNELEMENT \FSETLEFTKERN \FGETLEFTKERN) (CONSTANTS (\MAXNSCHAR 65535] (COMS (* ; "NS Character specific code") (FNS \CREATECHARSET) (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS CHARSETERRORFLG) (INITVARS (DISPLAYFONTCOERCIONS NIL) [MISSINGCHARSETDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)) ((TERMINAL 6) (MODERN 6)) ((TERMINAL 8) (MODERN 8)) ((TERMINAL 10) (MODERN 10)) ((TERMINAL 12) (MODERN 12] [MISSINGDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN] (CHARSETERRORFLG NIL) (\DEFAULTCHARSET 0))) (FNS \FONTRESETCHARWIDTHS) [DECLARE%: DONTEVAL@LOAD (INITVARS (DISPLAYFONTEXTENSIONS 'DISPLAYFONT) (DISPLAYFONTDIRECTORIES '( {DSK}/USR/LOCAL/LDE/FONTS/DISPLAY/PRESENTATION/ {dsk}/usr/local/lde/fonts/display/publishing/ ] (MACROS \FGETCHARIMAGEWIDTH \GETFONTDESC \SETCHARSETINFO) (LOCALVARS . T) (PROP FILETYPE FONT) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA FONTCOPY]) (* ;; "font functions ") (DEFINEQ (CHARWIDTH [LAMBDA (CHARCODE FONT) (* rmk%: "12-Apr-85 09:46") (* ;  "gets the width of a character code in a font/stream") (OR (\CHARCODEP CHARCODE) (\ILLEGAL.ARG CHARCODE)) (LET (TEMP) (COND ((type? FONTDESCRIPTOR FONT) (\FGETCHARWIDTH FONT CHARCODE)) ((SETQ TEMP (\OUTSTREAMARG FONT T)) (* ;  "NIL font goes thru here--primary output file") (IMAGEOP 'IMCHARWIDTH TEMP TEMP CHARCODE)) (T (\FGETCHARWIDTH (FONTCREATE FONT) CHARCODE]) (CHARWIDTHY [LAMBDA (CHARCODE FONT) (* edited%: "18-Mar-86 19:30") (* ;  "Gets the Y-component of the width of a character code in a font.") (OR (\CHARCODEP CHARCODE) (\ILLEGAL.ARG CHARCODE)) (LET (TEMP WY) (COND ((type? FONTDESCRIPTOR FONT) (SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) FONT))) (COND ((FIXP WY)) (WY (\FGETWIDTH WY (\CHAR8CODE CHARCODE))) (T 0))) ((type? STREAM (SETQ TEMP (\OUTSTREAMARG FONT T))) (* ;  "NIL font goes thru here--primary output file") (IMAGEOP 'IMCHARWIDTHY TEMP TEMP CHARCODE)) (T [SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) (FONTCREATE FONT] (COND ((FIXP WY)) (WY (\FGETWIDTH WY (\CHAR8CODE CHARCODE))) (T 0]) (STRINGWIDTH [LAMBDA (STR FONT FLG RDTBL) (* ; "Edited 8-Jan-88 14:41 by Snow") (* ;; "Returns the width of STR according to FONT") (LET (TEMP) (* ;; "Used in \MAPCHARS") (COND [(type? FONTDESCRIPTOR FONT) (\STRINGWIDTH.GENERIC STR FONT (AND FLG (\GTREADTABLE RDTBL)) (\FGETCHARWIDTH FONT (CHARCODE SPACE] [(AND FONT (SETQ TEMP (\OUTSTREAMARG FONT T))) (* ;  "if you gave something for FONT, coerce it to a stream, and call the stringwidth function of it.") (IMAGEOP 'IMSTRINGWIDTH TEMP TEMP STR (AND FLG (\GTREADTABLE RDTBL] (T (SETQ TEMP (FONTCREATE (OR FONT DEFAULTFONT))) (* ; "NIL font will pass thru here. ie, defaultfont is used to do the stringwidth instead of the font of *standard-output*") (\STRINGWIDTH.GENERIC STR TEMP (AND FLG (\GTREADTABLE RDTBL)) (\FGETCHARWIDTH TEMP (CHARCODE SPACE]) (\CHARWIDTH.DISPLAY [LAMBDA (STREAM CHARCODE) (* rmk%: "12-Apr-85 09:42") (* ;  "gets the width of a character code in a display stream. Need to fix up for spacefactor.") (\FGETCHARWIDTH (ffetch (\DISPLAYDATA DDFONT) of (ffetch IMAGEDATA of STREAM)) CHARCODE]) (\STRINGWIDTH.DISPLAY [LAMBDA (STREAM STR RDTBL) (* ; "Edited 3-Apr-87 12:07 by jop") (* ;; "Returns the width of for the current font/spacefactor in STREAM.") (LET ((DD (ffetch IMAGEDATA of STREAM))) (\STRINGWIDTH.GENERIC STR (ffetch (\DISPLAYDATA DDFONT) of DD) RDTBL (ffetch DDSPACEWIDTH of DD]) (\STRINGWIDTH.GENERIC [LAMBDA (STR FONT RDTBL SPACEWIDTH) (* ; "Edited 3-Apr-87 13:47 by jop") (* ;; "Returns the width of STR with SPACEWIDTH for the width of spaces. RDTBL has already been coerced, so no FLG is needed ") (* ;; "This is cloned in \STRINGWIDTH.HCPYDISPLAYAUX by straight substitution -- (PUTDEF (QUOTE \STRINGWIDTH.HCPYDISPLAYAUX) (QUOTE FNS) (SUBLIS (QUOTE ((WIDTHS . IMAGEWIDTHS) (\FGETWIDTH . \FGETIMAGEWIDTH) (\FGETCHARWIDTH . \FGETCHARIMAGEWIDTH))) (GETDEF (QUOTE \STRINGWIDTH.GENERIC))))") (* ;; "\MAPPNAME uses WIDTHSBASE CSET TOTALWIDTH FONT SPACEWIDTH free, so these become special in bytecompiler") (PROG NIL [COND [(LITATOM STR) (if RDTBL then (GO SLOW) else (RETURN (for C WIDTHSBASE CSET inatom STR sum [COND ((NEQ CSET (\CHARSET C)) (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT ] (COND ((EQ C (CHARCODE SPACE)) SPACEWIDTH) (T (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C] ((STRINGP STR) (RETURN (LET ((TOTAL 0) ESC ESCWIDTH WIDTHSBASE CSET) [COND (RDTBL (* ;  "Count delimiting quotes and internal escapes") (SETQ TOTAL (UNFOLD (\FGETCHARWIDTH FONT (CHARCODE %")) 2)) (SETQ ESC (fetch (READTABLEP ESCAPECHAR) of RDTBL)) (SETQ ESCWIDTH (\FGETCHARWIDTH FONT ESC] [for C instring STR do [COND ((NEQ (\CHARSET C) CSET) (* ;  "Get the widths vector for this character set") (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT] (add TOTAL (COND ((EQ C (CHARCODE SPACE)) SPACEWIDTH) (T (IPLUS (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C)) (COND ((AND RDTBL (OR (EQ C (CHARCODE %")) (EQ C ESC))) (* ; "String char must be escaped") ESCWIDTH) (T 0] TOTAL] SLOW (* ; "Do the general case here") (RETURN (LET ((TOTALWIDTH 0) WIDTHSBASE CSET (FONT FONT) (SPACEWIDTH SPACEWIDTH)) (DECLARE (SPECVARS TOTALWIDTH WIDTHSBASE CSET FONT SPACEWIDTH)) (\MAPPNAME [FUNCTION (LAMBDA (DUMMY CC) (add TOTALWIDTH (COND ((EQ CC (CHARCODE SPACE)) SPACEWIDTH) ((EQ CSET (\CHARSET CC)) (\FGETWIDTH WIDTHSBASE (\CHAR8CODE CC))) (T (SETQ CSET (\CHARSET CC)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT))) (\FGETWIDTH WIDTHSBASE (\CHAR8CODE CC] STR RDTBL RDTBL *PRINT-LEVEL* *PRINT-LENGTH*) TOTALWIDTH]) ) (DEFINEQ (DEFAULTFONT [LAMBDA (DEVICE FONT NOERRORFLG) (* ; "Edited 28-Jul-88 13:15 by rmk:") (* ; "Edited 24-Mar-87 14:41 by FS") (* ;; "Returns the default font for an image type. Really only needed to guarantee validity of the display default font for system critical routines, in case the user has smashed the variable DEFAULTFONT. Note that SETFONTCLASSCOMPONENT and FONTCLASS guarantee that the display component is either NIL or a fontdescriptor.") (* ;; "FS- If FONT provided set the font descriptor. Do not bother to check if NOERRORFLG is NEW. (old code had (AND FONT (EQ NOERRORFLG 'NEW)))") [OR (type? FONTCLASS DEFAULTFONT) (SETQ DEFAULTFONT (FONTCLASS 'DEFAULTFONT] (if FONT then (* ;; "FS- Not clear the fontclass should be smashed, perhaps instead should make a new FONTCLASS and then rebind DEFAULTFONT. Leaving alone for histerical reasons") (SETFONTCLASSCOMPONENT DEFAULTFONT DEVICE FONT) else (* ;; "The code below (not mine!) is messy but is correct (unless weirdness pops up because of deep recursion).") (COND ((\COERCEFONTDESC DEFAULTFONT DEVICE T)) (NOERRORFLG NIL) ((EQ (\DEVICESYMBOL DEVICE T) 'DISPLAY) (* ;; "If getting for the display and the font can't be found perhaps because of garbage in the display field of the DEFAULTFONTCLASS, then the system-guaranteed displayfont. Otherwise, cause the error in the re-coercion. Can never tell when DEVICE is just a symbol.") \GUARANTEEDDISPLAYFONT) ((\COERCEFONTDESC DEFAULTFONT DEVICE]) (FONTCLASS [LAMBDA (NAME FONTLIST CREATEFORDEVICES) (* jds " 9-Sep-86 18:49") (* ;; "This builds D style font classes, which are datatypes containing entries for the various known devices.") (* ;; "Don't actually set up the for devices not inside CREATEFORDEVICES on the theory that any given user presumably doesn't want all the fonts for all the devices. We wait until he actually asks for the font or the fontmaparray, at which point we note that the fields don't contain FD's, so we then apply FONTCREATE. The actual coercion and caching is done inside \COERCEFONTDESC. However, so as to prevent display crashes, if a display component is specified, we always do the fontcreate before we stick it in.") (PROG (F FC FL) (SETQ FL FONTLIST) [SETQ FC (create FONTCLASS FONTCLASSNAME _ NAME PRETTYFONT# _ (OR (FIXP (pop FL)) 1) DISPLAYFD _ (AND (SETQ F (pop FL)) (FONTCREATE F NIL NIL NIL 'DISPLAY)) PRESSFD _ (pop FL) INTERPRESSFD _ (pop FL) OTHERFDS _ (for FSPEC in FL collect (OR (AND (LISTP FSPEC) (ATOM (CAR FSPEC)) (CAR FSPEC)) (ERROR "illegal font class specification" (LIST NAME FONTLIST))) (* ;  "Copy the alist entry so it can be smashed in \COERCEFONTDESC") (CONS (CAR FSPEC) (CAR (LISTP (CDR FSPEC] (for D inside CREATEFORDEVICES do (FONTCREATE FC NIL NIL NIL D)) (RETURN FC]) (FONTCLASSUNPARSE [LAMBDA (FONTCLASS DEVICE FONT NOERRORFLG) (* jds "24-Jan-86 11:58") (* ;  "Given a font class, unparse it to a form that might be reparsable") (APPEND (LIST (fetch (FONTCLASS FONTCLASSNAME) of FONTCLASS) (fetch (FONTCLASS PRETTYFONT#) of FONTCLASS) (FONTUNPARSE (ffetch (FONTCLASS DISPLAYFD) of FONTCLASS)) (FONTUNPARSE (ffetch (FONTCLASS PRESSFD) of FONTCLASS)) (FONTUNPARSE (ffetch (FONTCLASS INTERPRESSFD) of FONTCLASS))) (for X in (fetch (FONTCLASS OTHERFDS) of FONTCLASS) collect (LIST (CAR X) (FONTUNPARSE (CDR X]) (FONTCLASSCOMPONENT [LAMBDA (FONTCLASS DEVICE FONT NOERRORFLG) (* rmk%: "14-Sep-84 19:34") (PROG1 (FONTCREATE FONTCLASS NIL NIL NIL DEVICE NOERRORFLG) (* ;  "This works its way down to \COERCEFONTDESC, where it needs to be done quickly") (AND FONT (SETQ FONT (FONTCREATE FONT NIL NIL NIL DEVICE NOERRORFLG)) (SETFONTCLASSCOMPONENT FONTCLASS DEVICE FONT)))]) (SETFONTCLASSCOMPONENT [LAMBDA (FONTCLASS DEVICE FONT) (* ; "Edited 29-Aug-91 12:20 by jds") (PROG ((NEWFONT (FONTCREATE FONT NIL NIL NIL DEVICE))) (* ;; "replaces will barf if FONTCLASS is not a fontclass") (SELECTQ (SETQ DEVICE (FONTPROP NEWFONT 'DEVICE)) (DISPLAY (replace (FONTCLASS DISPLAYFD) of FONTCLASS with NEWFONT)) (INTERPRESS (replace (FONTCLASS INTERPRESSFD) of FONTCLASS with NEWFONT )) (PRESS (replace (FONTCLASS PRESSFD) of FONTCLASS with NEWFONT)) (RPLACD [OR (SASSOC DEVICE (fetch (FONTCLASS OTHERFDS) of FONTCLASS)) (CAR (push (fetch (FONTCLASS OTHERFDS) of FONTCLASS) (CONS DEVICE] NEWFONT)) (RETURN NEWFONT]) ) (* ; "Until we pin down the exact interface") (MOVD 'FONTCLASSCOMPONENT 'FONTCOMPONENT) (MOVD 'SETFONTCLASSCOMPONENT 'SETFONTCOMPONENT) (* ; "MAPPING FOR DOS FILENAMES ") (RPAQ? *DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) (HELVETICA . HV) (TIMESROMAND . TD) (HELVETICAD . HD) (MODERN . MD) (CLASSIC . CL) (GACHA . GC) (TITAN . TI) (LETTERGOTHIC . LG) (BOLDPS . BP) (TERMINAL . TM) (CLASSICTHIN . CT) (HIPPO . HP) (LOGO . LG) (MATH . MA) (OLDENGLISH . OE) (SYMBOL . SY))) (* ;; "Creation: ") (DEFINEQ (FONTCREATE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE NOERRORFLG CHARSET) (* ; "Edited 10-Oct-88 09:53 by rmk:") (* ; "Edited 28-Jul-88 14:43 by rmk:") (* ; "Edited 10-Nov-87 18:08 by FS") (* ;; "Create a font descriptor for the specified font. If NOERRORFLG, return NIL if the font doesn't exist; otherwise cause an error.") (* ;; "Cache and fonts.widths traffic in uppercase only.") (* ;; "character set is optional and defaults to \DEFAULTCHARSET (0 in our world)") (DECLARE (GLOBALVARS IMAGESTREAMTYPES \DEFAULTCHARSET)) (PROG (FONTX (CHSET (OR CHARSET \DEFAULTCHARSET))) (RETURN (COND ((LISTP FAMILY) (SELECTQ (CAR FAMILY) (FONT (SETQ FONTX (CDR FAMILY))) (CLASS (COND ((LITATOM (CADR FAMILY)) (* ; "litatom class name") (RETURN (FONTCLASS (CADR FAMILY) (CDDR FAMILY) DEVICE))) (T (* ;  "Allows for a font named CLASS--distinguished cause its size is not a litatom") (SETQ FONTX FAMILY)))) (SETQ FONTX FAMILY)) (FONTCREATE (CAR FONTX) (OR (CADR FONTX) SIZE) (OR (CADDR FONTX) FACE) (OR (CADDDR FONTX) ROTATION) (OR (CADR (CDDDR FONTX)) DEVICE) NOERRORFLG CHSET)) ([SETQ FONTX (COND ((type? FONTDESCRIPTOR FAMILY) FAMILY) ((NULL FAMILY) (DEFAULTFONT DEVICE)) ((type? FONTCLASS FAMILY) (* ;; "We know that this won't attempt a cyclic fontcreate in \COERCEFONTDESC, because we are passing a known class. Unless NOERROFLG, an error will be caused on the actual device font if it can't be found.") (\COERCEFONTDESC FAMILY DEVICE NOERRORFLG)) ((OR (IMAGESTREAMP FAMILY) (type? WINDOW FAMILY)) (DSPFONT NIL FAMILY] (* ;;  "FAMILY was a spec for a font descriptor, use it and extend it by the other args.") (COND ((OR SIZE FACE ROTATION DEVICE) (FONTCREATE (FONTPROP FONTX 'FAMILY) (OR SIZE (FONTPROP FONTX 'SIZE)) (OR FACE (FONTPROP FONTX 'FACE)) (OR ROTATION (FONTPROP FONTX 'ROTATION)) (OR DEVICE (FONTPROP FONTX 'DEVICE)) NOERRORFLG)) (T FONTX))) (T (PROG (FONTFACE (DEV DEVICE)) RETRY [OR (LITATOM FAMILY) (COND (NOERRORFLG (RETURN)) (T (LISPERROR "ARG NOT LITATOM" FAMILY T] [OR (AND (FIXP SIZE) (IGREATERP SIZE 0)) (COND (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG SIZE] (COND ((NULL ROTATION) (SETQ ROTATION 0)) ((AND (FIXP ROTATION) (IGEQ ROTATION 0))) (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG ROTATION))) [SETQ DEV (COND ((NULL DEVICE) 'DISPLAY) ((AND (LITATOM DEVICE) (NEQ DEVICE T)) (* ; "Maybe wrong case or package, but we bet it's OK and defer expensive coercion until we've failed.") DEV) ((SETQ DEV (\GETSTREAM DEVICE 'OUTPUT T)) (* ;  "T coerces here to primary output") (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of DEV))) ((STRINGP DEVICE) (MKATOM (U-CASE DEVICE))) (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG DEVICE] (* ; "DEV is now guanteed litatom") NEWDEV (* ;  "Check after device since it is device-dependent") (SETQ FONTFACE (OR (\FONTFACE FACE NOERRORFLG DEV) (RETURN NIL))) (* ; "Don't truly coerce to \FONTSYMBOL or \DEVICESYMBOL until we've had a shot at the font cache, since re-interning atoms is so expensive") [RETURN (COND ((\LOOKUPFONT FAMILY SIZE FONTFACE ROTATION DEV)) [(SETQ FONTX (CDR (ASSOC DEV IMAGESTREAMTYPES))) (* ;; "Device is valid, font just doesn't exist. FONTFACE, DEV already canonical. Make FAMILY so, so that each imagestream type doesn't have to.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (COND ((SETQ FONTX (APPLY* (OR (CADR (ASSOC 'FONTCREATE FONTX) ) (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION DEV CHSET)) (* ;; "default creation case. Use fontcreate method from device, build a fontdescriptor and use setfontdescriptor to install it.") (* ;; "OBSOLETEd by the CHARSETINFO code (OR (ffetch FONTIMAGEWIDTHS of FONTX) (freplace FONTIMAGEWIDTHS of FONTX with (ffetch \SFWidths of FONTX)))") (* ;;  "the widths fields in the fontdescriptor are obsolete, and shoudln't be updated here.") (* ;; "We should probably force all device implementations to obey these conventions, then remove these generic updates") (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONTX with (\AVGCHARWIDTH FONTX)) (SETFONTDESCRIPTOR FAMILY SIZE FONTFACE ROTATION DEV FONTX)) (T (GO NOTFOUND] ((NEQ DEV (SETQ DEV (U-CASE DEV))) (* ;; "We didn't recognize the device, so check to see whether coercion to U-CASE IL changes anything. Could be slow, but we're heading for an error.") (GO NEWDEV)) (T (GO NOTFOUND] NOTFOUND (COND (NOERRORFLG (RETURN NIL)) (T (ERROR "FONT NOT FOUND (coerced to)" (LIST FAMILY SIZE FONTFACE ROTATION DEV)) (GO RETRY]) (\FONT.SYMBOLMEMB [LAMBDA (USERINPUT LIST) (* ; "Edited 7-Feb-89 15:47 by jds") (for X on LIST when (\FONT.COMPARESYMBOL USERINPUT (CAR X)) do (RETURN X]) (\FONT.SYMBOLASSOC [LAMBDA (USERINPUT LIST) (* ; "Edited 28-Jul-88 16:56 by rmk:") (* ; "Edited 28-Jul-88 15:15 by rmk:") (* ; "Edited 28-Jul-88 15:03 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 28-Jul-88 14:16 by rmk:") (for X FIRSTC (NC _ (NCHARS USERINPUT)) in LIST first (SETQ FIRSTC (CHCON1 USERINPUT)) [if (AND (IGEQ FIRSTC (CHARCODE a)) (ILEQ FIRSTC (CHARCODE z))) then (SETQ FIRSTC (IDIFFERENCE FIRSTC (IDIFFERENCE (CHARCODE a) (CHARCODE A] when (AND (EQ NC (NCHARS (CAR X))) (EQ FIRSTC (CHCON1 (CAR X))) (\FONT.COMPARESYMBOL USERINPUT (CAR X) NC FIRSTC)) do (RETURN X]) (\FONT.COMPARESYMBOL [LAMBDA (USERINPUT KEY INPUTNC INPUTFIRSTC) (* ;  "Edited 24-May-93 16:45 by sybalsky:mv:envos") (* ;; " An open coded case- and package-insensitive comparison of atom pnames, assuming that KEY is already upper-case but USERINPUT may not be. Maybe there is a simple function that does this.") (* ;; "INPUTNC and INPUTFIRSTC can be passed in if they are common to lots of calls") (COND ((AND (LITATOM USERINPUT) (EQ [CL:AREF *PACKAGE-FROM-INDEX* (fetch (PNAMECELL PACKAGEINDEX) of (PROGN (\PNAMECELL USERINPUT] *INTERLISP-PACKAGE*)) (* ;; "If the user's symbol is in the IL package (which is where all the KEYs are), we can use EQ, which is MUCH faster.") (OR (EQ USERINPUT KEY) (EQ (U-CASE USERINPUT) KEY))) (T (* ;; "Otherwise, we do the comparison character by character.") (AND (EQ (OR INPUTNC (NCHARS USERINPUT)) (NCHARS KEY)) [COND (INPUTFIRSTC (EQ INPUTFIRSTC (CHCON1 KEY))) ((EQ (SETQ INPUTFIRSTC (CHCON1 USERINPUT)) (CHCON1 KEY))) ((AND (IGEQ INPUTFIRSTC (CHARCODE a)) (ILEQ INPUTFIRSTC (CHARCODE z))) (EQ (IDIFFERENCE INPUTFIRSTC (IDIFFERENCE (CHARCODE a) (CHARCODE A))) (CHCON1 KEY] (for CHAR1 inatom USERINPUT as CHAR2 inatom KEY always (OR (EQ CHAR1 CHAR2) (AND (IGEQ CHAR1 (CHARCODE a)) (ILEQ CHAR1 (CHARCODE z)) (EQ CHAR2 (IPLUS CHAR1 (CONSTANT (IDIFFERENCE (CHARCODE A) (CHARCODE a]) ) (* ;; "Property extraction:") (DEFINEQ (FONTASCENT [LAMBDA (FONTSPEC) (* lmm "19-NOV-82 00:23") (ffetch \SFAscent of (\GETFONTDESC FONTSPEC]) (FONTDESCENT [LAMBDA (FONTSPEC) (* lmm "19-NOV-82 00:24") (* ; "See comment in FONTASCENT") (ffetch \SFDescent of (\GETFONTDESC FONTSPEC]) (FONTHEIGHT [LAMBDA (FONTSPEC) (* kbr%: " 9-Jan-86 18:29") (fetch (FONTDESCRIPTOR \SFHeight) of (\GETFONTDESC FONTSPEC]) (FONTPROP [LAMBDA (FONT PROP) (* kbr%: "13-May-85 22:36") (SETQ FONT (\GETFONTDESC FONT)) (SELECTQ PROP (HEIGHT (ffetch \SFHeight of FONT)) (ASCENT (ffetch \SFAscent of FONT)) (DESCENT (ffetch \SFDescent of FONT)) (FAMILY (ffetch FONTFAMILY of FONT)) (SIZE (ffetch FONTSIZE of FONT)) (FACE (COPY (ffetch FONTFACE of FONT))) (WEIGHT (ffetch WEIGHT of (ffetch FONTFACE of FONT))) (SLOPE (ffetch SLOPE of (ffetch FONTFACE of FONT))) (EXPANSION (ffetch EXPANSION of (ffetch FONTFACE of FONT))) (FORECOLOR (ffetch FORECOLOR of (ffetch FONTFACE of FONT))) (BACKCOLOR (ffetch BACKCOLOR of (ffetch FONTFACE of FONT))) (ROTATION (ffetch ROTATION of FONT)) (DEVICE (ffetch FONTDEVICE of FONT)) (SPEC (LIST (ffetch FONTFAMILY of FONT) (ffetch FONTSIZE of FONT) (COPY (ffetch FONTFACE of FONT)) (ffetch ROTATION of FONT) (ffetch FONTDEVICE of FONT))) (DEVICESPEC (* ;  "DEVICE fields are for communicating coercions to the particular printing device") [COND ((ffetch FONTDEVICESPEC of FONT) (COPY (ffetch FONTDEVICESPEC of FONT))) (T (FONTPROP FONT 'SPEC]) (DEVICEFACE [COPY (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICESLOPE [fetch SLOPE of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICEWEIGHT [fetch WEIGHT of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICEEXPANSION [fetch EXPANSION of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICESIZE (COND ((ffetch FONTDEVICESPEC of FONT) (CADR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTSIZE of FONT)))) (DEVICEFAMILY (COND ((ffetch FONTDEVICESPEC of FONT) (CAR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFAMILY of FONT)))) (SCALE (ffetch FONTSCALE of FONT)) (\ILLEGAL.ARG PROP]) (\AVGCHARWIDTH [LAMBDA (FONT) (* rmk%: "27-Nov-84 18:40") (* ;; "Returns the average width of a character, to be used in units-to-characters approximations, as in fixing the linelength") (PROG ((W (CHARWIDTH (CHARCODE A) FONT))) (RETURN (COND ((NEQ 0 W) W) ([NEQ 0 (SETQ W (FIXR (FTIMES 0.6 (FONTPROP FONT 'HEIGHT] W) (T 1]) ) (* ;; "Bitmap editing/manipulation:") (DEFINEQ (GETCHARBITMAP [LAMBDA (CHARCODE FONT) (* ; "Edited 26-Apr-89 21:49 by atm") (* ;  "returns a bitmap of the character CHARCODE from the font descriptor FONTDESC.") (COND ((OR (CHARCODEP CHARCODE) (EQ CHARCODE 256)) (* ;  "bitmap for char 256 is what gets printed if char not found") ) ((OR (STRINGP CHARCODE) (LITATOM CHARCODE)) (* ;  "For strings & litatoms, take the first character") (SETQ CHARCODE (CHCON1 CHARCODE))) ((TYPEP CHARCODE 'CL:CHARACTER) (* ;  "For common-lisp CHARACTERs, convert it to the char code first.") (SETQ CHARCODE (CL:CHAR-INT CHARCODE))) (T (\ILLEGAL.ARG CHARCODE))) (PROG (CBM (FONTDESC (\GETFONTDESC FONT)) CSINFO CWDTH CHGHT) (* ;; "fetch the csinfo for the character set of this character. Bitmaps and widths must be fetched from it") (SETQ CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) FONTDESC)) (* ;; "(\\fgetwidth (|fetch| (charsetinfo widths) |of| csinfo) (\\char8code charcode))") [SETQ CBM (BITMAPCREATE [SETQ CWDTH (if (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) then (\FGETIMAGEWIDTH (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) (\CHAR8CODE CHARCODE)) else (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) (\CHAR8CODE CHARCODE] (SETQ CHGHT (FONTPROP FONTDESC 'HEIGHT)) (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO] (BITBLT (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO) (\FGETOFFSET (fetch (CHARSETINFO OFFSETS) of CSINFO) (\CHAR8CODE CHARCODE)) 0 CBM 0 0 CWDTH CHGHT) (RETURN CBM]) (PUTCHARBITMAP [LAMBDA (CHARCODE FONT NEWCHARBITMAP NEWCHARDESCENT) (* ; "Edited 27-Apr-89 11:19 by atm") (* ;; "stores the bitmap NEWCHARBITMAP as the character CHARCODE from the font descriptor FONTDESC. If NEWCHARDESCENT is specified, it is the descent of the new bitmap, and things may be moved to accomodate it.") (OR (TYPENAMEP NEWCHARBITMAP 'BITMAP) (\ILLEGAL.ARG NEWCHARBITMAP)) (COND ((CHARCODEP CHARCODE)) ((OR (STRINGP CHARCODE) (LITATOM CHARCODE)) (SETQ CHARCODE (CHCON1 CHARCODE))) (T (\ILLEGAL.ARG CHARCODE))) (PROG* ((FONTDESC (\GETFONTDESC FONT)) (CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) FONTDESC)) (CDESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (CASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (CHEIGHT (IPLUS CDESCENT CASCENT)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (CIMWIDTH (if IMWIDTHS then (\FGETIMAGEWIDTH IMWIDTHS (\CHAR8CODE CHARCODE)) else NIL)) (CWIDTH (OR CIMWIDTH (CHARWIDTH CHARCODE FONTDESC))) (FONTBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (OFWIDTH (fetch (BITMAP BITMAPWIDTH) of FONTBITMAP)) TEMPBITMAP BWIDTH DW BHEIGHT BASCENT BDESCENT NDESCENT NASCENT NHEIGHT CHAROFFSET (BITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of FONTBITMAP))) (* ;; "fetch the ascents and descents of the bitmap and the new maximums.") (SETQ BWIDTH (fetch (BITMAP BITMAPWIDTH) of NEWCHARBITMAP)) (SETQ BHEIGHT (fetch (BITMAP BITMAPHEIGHT) of NEWCHARBITMAP)) (SETQ BDESCENT (OR NEWCHARDESCENT CDESCENT)) (SETQ BASCENT (IDIFFERENCE BHEIGHT BDESCENT)) (SETQ NDESCENT (IMAX BDESCENT CDESCENT)) (SETQ NASCENT (IMAX BASCENT CASCENT)) (SETQ NHEIGHT (IPLUS NDESCENT NASCENT)) (SETQ CHAROFFSET (\FGETOFFSET OFFSETS (\CHAR8CODE CHARCODE))) (* ;; "set up a new target bitmap if any of the parameters have changed.") (COND ((EQ CHAROFFSET (\FGETOFFSET OFFSETS \MAXTHINCHAR)) (* ;; "changing the bitmap for a character which formerly pointed at the slug character. Allocate a new bitmap character bitmap for this.") (SETQ TEMPBITMAP (BITMAPCREATE (IPLUS OFWIDTH BWIDTH) NHEIGHT BITSPERPIXEL)) (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) OFWIDTH CHEIGHT) (* ; "copy the old characters over.") (SETQ CHAROFFSET OFWIDTH)) ((NEQ CWIDTH BWIDTH) (* ;; "The bitmaps differ in width; create a new bitmap with things at the right places, then update widths and offsets.") (SETQ DW (IDIFFERENCE BWIDTH CWIDTH)) (* ; "Difference in character widths") (SETQ TEMPBITMAP (BITMAPCREATE (IPLUS OFWIDTH DW) NHEIGHT BITSPERPIXEL))(* ;  "this may also be a taller bitmap if NHEIGHT is larger than CHEIGHT.") (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) CHAROFFSET CHEIGHT) (* ;  "Copy that portion to the left of the character.") (BITBLT FONTBITMAP (IPLUS CHAROFFSET CWIDTH) 0 TEMPBITMAP (IPLUS CHAROFFSET BWIDTH) (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) (ADD1 (IDIFFERENCE OFWIDTH (IPLUS CHAROFFSET CWIDTH))) CHEIGHT) (* ;  "Copy that portion to the right of the new character.") ) ((OR (IGREATERP BASCENT CASCENT) (IGREATERP BDESCENT CDESCENT)) (* ;; "The new character is TALLER than the existing bitmap. Make a larger bitmap.") (SETQ TEMPBITMAP (BITMAPCREATE OFWIDTH NHEIGHT BITSPERPIXEL)) (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) OFWIDTH CHEIGHT) (* ;; "Copy the existing bitmap into it, adjusting for a larger descent in the new character (if there is one)") )) (* ;; "copy the new bitmap in and update parameters.") (BITBLT NEWCHARBITMAP 0 0 (OR TEMPBITMAP FONTBITMAP) CHAROFFSET (IMAX 0 (IDIFFERENCE NDESCENT BDESCENT)) BWIDTH BHEIGHT) [COND (TEMPBITMAP (UNINTERRUPTABLY (* ;; "update the parameters for this character set.") (\FSETWIDTH WIDTHS (\CHAR8CODE CHARCODE) BWIDTH) (* ;  "The new character's correct width") (* ;  "Make sure that we update imagewidths also") (if IMWIDTHS then (\FSETIMAGEWIDTH IMWIDTHS (\CHAR8CODE CHARCODE) BWIDTH)) (\FSETOFFSET OFFSETS (\CHAR8CODE CHARCODE) CHAROFFSET) [COND (DW (for I from 0 to \MAXCHAR do (* ;  "Run thru the offsets of later characters, adjusting them for the changed width of this character") (if (IGREATERP (\FGETOFFSET OFFSETS I) CHAROFFSET) then (\FSETOFFSET OFFSETS I (IPLUS DW (\FGETOFFSET OFFSETS I] (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with TEMPBITMAP ) (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with NDESCENT) (replace (CHARSETINFO CHARSETASCENT) of CSINFO with NASCENT ) (* ;; "update the properties for the font as a whole.") [SETQ NASCENT (IMAX NASCENT (FONTPROP FONTDESC 'ASCENT] [SETQ NDESCENT (IMAX NDESCENT (FONTPROP FONTDESC 'DESCENT] (replace (FONTDESCRIPTOR \SFAscent) of FONTDESC with NASCENT) (replace (FONTDESCRIPTOR \SFDescent) of FONTDESC with NDESCENT) (replace (FONTDESCRIPTOR \SFHeight) of FONTDESC with (IPLUS NDESCENT NASCENT)))] (RETURN NEWCHARBITMAP]) (MOVECHARBITMAP [LAMBDA (SRCECODE SRCEFONT DESTCODE DESTFONT CLIP) (* ; "Edited 14-Dec-86 18:04 by Shih") (* ;;; "moves a character from one font to another, clipping if necessary.") (PROG ((SRCEDESC (\GETFONTDESC SRCEFONT)) (DESTDESC (\GETFONTDESC DESTFONT)) SRCEASCENT SRCEDESCENT DESTASCENT DESTDESCENT CHARBITMAP TEMPBITMAP NEWASCENT NEWDESCENT) (SETQ CHARBITMAP (GETCHARBITMAP SRCECODE SRCEFONT)) (SETQ SRCEASCENT (FONTPROP SRCEDESC 'ASCENT)) (SETQ DESTASCENT (FONTPROP DESTDESC 'ASCENT)) (SETQ SRCEDESCENT (FONTPROP SRCEDESC 'DESCENT)) (SETQ DESTDESCENT (FONTPROP DESTDESC 'DESCENT)) [SETQ NEWASCENT (COND (CLIP DESTASCENT) (T (IMAX SRCEASCENT DESTASCENT] [SETQ NEWDESCENT (COND (CLIP DESTDESCENT) (T (IMAX SRCEDESCENT DESTDESCENT] [COND ((OR (NEQ SRCEASCENT NEWASCENT) (NEQ SRCEDESCENT NEWDESCENT)) (SETQ TEMPBITMAP (BITMAPCREATE (BITMAPWIDTH CHARBITMAP) (IPLUS NEWASCENT NEWDESCENT))) (BITBLT CHARBITMAP 0 (IMAX 0 (IDIFFERENCE SRCEDESCENT NEWDESCENT)) TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NEWDESCENT SRCEDESCENT)) (BITMAPWIDTH CHARBITMAP) (IMIN (IPLUS SRCEASCENT SRCEDESCENT) (IPLUS NEWASCENT NEWDESCENT] (PUTCHARBITMAP DESTCODE DESTFONT (OR TEMPBITMAP CHARBITMAP) NEWDESCENT]) ) (DEFINEQ (FONTCOPY [LAMBDA FONTSPECS (* ; "Edited 10-Nov-87 17:12 by FS") (* ;  "makes a copy of a font changing the specified fields.") (PROG (NOERROR ERROR FAMILY FACE SIZE ROTATION DEVICE OLDFONT) (* ;; "Set NOERROR if we find it as a prop, but set ERROR if we find a PROP which is illegal. Then just return NIL if NOERROR and ERROR, otherwise, call FONTCREATE.") [SETQ OLDFONT (\GETFONTDESC (ARG FONTSPECS 1) (AND (type? FONTCLASS (ARG FONTSPECS 1)) (COND ((AND (EQ FONTSPECS 2) (LISTP (ARG FONTSPECS 2))) (LISTGET (ARG FONTSPECS 2) 'DEVICE)) (T (for I from 2 by 2 to FONTSPECS do (COND ((AND (NEQ I FONTSPECS) (EQ (ARG FONTSPECS I) 'DEVICE)) (RETURN (ARG FONTSPECS (ADD1 I] (SETQ FAMILY (fetch (FONTDESCRIPTOR FONTFAMILY) of OLDFONT)) (SETQ SIZE (fetch (FONTDESCRIPTOR FONTSIZE) of OLDFONT)) (SETQ FACE (fetch (FONTDESCRIPTOR FONTFACE) of OLDFONT)) (SETQ ROTATION (fetch (FONTDESCRIPTOR ROTATION) of OLDFONT)) (SETQ DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of OLDFONT)) [for I VAL from 2 by 2 to FONTSPECS do [SETQ VAL (COND ((NOT (EQ I FONTSPECS)) (ARG FONTSPECS (ADD1 I] (SELECTQ (ARG FONTSPECS I) (FAMILY (SETQ FAMILY VAL)) (SIZE (SETQ SIZE VAL)) (FACE (SETQ FACE (\FONTFACE VAL))) (WEIGHT (SETQ FACE (create FONTFACE using FACE WEIGHT _ VAL))) (SLOPE (SETQ FACE (create FONTFACE using FACE SLOPE _ VAL))) (EXPANSION (SETQ FACE (create FONTFACE using FACE EXPANSION _ VAL))) (BACKCOLOR (SETQ FACE (create FONTFACE using FACE BACKCOLOR _ VAL))) (FORECOLOR (SETQ FACE (create FONTFACE using FACE FORECOLOR _ VAL))) (ROTATION (SETQ ROTATION VAL)) (DEVICE (SETQ DEVICE VAL)) (NOERROR (SETQ NOERROR VAL)) (COND [(AND (EQ I 2) (EQ FONTSPECS 2) (LISTP (ARG FONTSPECS 2))) (for J on (ARG FONTSPECS 2) by (CDDR J) do (SETQ VAL (CADR J)) (SELECTQ (CAR J) (FAMILY (SETQ FAMILY VAL)) (SIZE (SETQ SIZE VAL)) (FACE (SETQ FACE (\FONTFACE VAL))) (WEIGHT (SETQ FACE (create FONTFACE using FACE WEIGHT _ VAL))) (SLOPE (SETQ FACE (create FONTFACE using FACE SLOPE _ VAL))) (EXPANSION (SETQ FACE (create FONTFACE using FACE EXPANSION _ VAL))) (BACKCOLOR (SETQ FACE (create FONTFACE using FACE BACKCOLOR _ VAL))) (FORECOLOR (SETQ FACE (create FONTFACE using FACE FORECOLOR _ VAL))) (ROTATION (SETQ ROTATION VAL)) (DEVICE (SETQ DEVICE VAL)) (NOERROR (SETQ NOERROR VAL)) (COND (NOERROR (* ;;  "Fell through the SELECTQ, so an illegal PROP. But, if NOERROR, just note the error, otherwise ") (SETQ ERROR T)) (T (\ILLEGAL.ARG (CAR J] (T (if NOERROR then (SETQ ERROR T) else (\ILLEGAL.ARG (ARG FONTSPECS I] (RETURN (if (AND NOERROR ERROR) then NIL else (FONTCREATE FAMILY SIZE FACE ROTATION DEVICE NOERROR]) (FONTSAVAILABLE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* rrb " 7-Nov-84 15:41") (* ;;; "returns a list of the fonts fitting a description that are available. FAMILY SIZE FACE or ROTATION can be * which means get them all. if LOADEDONLYFLG is non-NIL, only fonts in core will be considered.") (DECLARE (GLOBALVARS IMAGESTREAMTYPES)) (PROG (FONTX DEV) [SETQ DEV (COND ((type? STREAM DEVICE) (COND ((LISTP (SETQ DEV (IMAGESTREAMTYPE DEVICE))) (CAR DEV)) (T DEV))) (DEVICE) (T 'DISPLAY] (RETURN (COND ((LISTP FAMILY) (COND ((EQ (CAR FAMILY) 'FONT) (SETQ FONTX (CDR FAMILY))) (T (SETQ FONTX FAMILY))) (FONTSAVAILABLE (CAR FONTX) (OR (CADR FONTX) SIZE) (OR (CADDR FONTX) FACE) (OR (CADDDR FONTX) ROTATION) DEV CHECKFILESTOO?)) ([SETQ FONTX (COND ((type? FONTDESCRIPTOR FAMILY) FAMILY) ((NULL FAMILY) (DEFAULTFONT DEV)) ((type? FONTCLASS FAMILY) (* ;; "We know that this won't attempt a cyclic fontcreate in \COERCEFONTDESC, because we are passing a known class. Unless NOERROFLG, an error will be caused on the actual device font if it can't be found.") (* ;  "I don't know what to do in this case- rrb.") (\COERCEFONTDESC FAMILY DEV T)) ((OR (IMAGESTREAMP FAMILY) (type? WINDOW FAMILY)) (DSPFONT NIL FAMILY] (* ;  "FAMILY was a spec for a font descriptor, use it and extend it by the other args.") (FONTSAVAILABLE (FONTPROP FONTX 'FAMILY) (OR SIZE (FONTPROP FONTX 'SIZE)) (OR FACE (FONTPROP FONTX 'FACE)) (OR ROTATION (FONTPROP FONTX 'ROTATION)) (OR DEVICE (FONTPROP FONTX 'DEVICE)) CHECKFILESTOO?)) (T (PROG ((FONTFACE FACE)) RETRY (OR (LITATOM FAMILY) (LISPERROR "ARG NOT LITATOM" FAMILY T)) (OR (AND (FIXP SIZE) (IGREATERP SIZE 0)) (EQ SIZE '*) (\ILLEGAL.ARG SIZE)) [OR (EQ FONTFACE '*) (SETQ FONTFACE (OR (\FONTFACE FACE T) (RETURN NIL] (OR (U-CASEP FAMILY) (SETQ FAMILY (U-CASE FAMILY))) (COND ((NULL ROTATION) (SETQ ROTATION 0)) ((AND (FIXP ROTATION) (IGEQ ROTATION 0))) ((EQ ROTATION '*)) (T (\ILLEGAL.ARG ROTATION))) (RETURN (UNION (\LOOKUPFONTSINCORE FAMILY SIZE FONTFACE ROTATION DEV) (COND ((NOT CHECKFILESTOO?) NIL) [(EQ DEV '*) (* ; "map thru all the devices.") (for EXTANTDEV in IMAGESTREAMTYPES join (APPLY* (OR (CADR (ASSOC 'FONTSAVAILABLE (CDR EXTANTDEV))) (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION (CAR EXTANTDEV] (T (* ;  "apply the device font lookup function.") (APPLY* (OR [CADR (ASSOC 'FONTSAVAILABLE (CDR (ASSOC DEV IMAGESTREAMTYPES ] (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION DEV]) (FONTFILEFORMAT [LAMBDA (STRM LEAVEOPEN) (* rmk%: "11-Sep-84 17:16") (* ; "Returns the font format of STRM") [OR (OPENP STRM 'INPUT) (SETQ STRM (OPENSTREAM STRM 'INPUT 'OLD] (PROG1 (SELECTC (\WIN STRM) ((LIST (LLSH 1 15) (LOGOR (LLSH 1 15) (LLSH 1 13))) (* ;; "If high bit of type is on, then must be strike. If 2nd bit is on, must be strike-index, and we punt. We don't care about the 3rd bit") (* ;; "first word has high bits (onebit index fixed). Onebit means 'new-style font' , index is 0 for simple strike, 1 for index, and fixed is if all chars have max width. Lisp doesn't care about 'fixed'") 'STRIKE) ((LOGOR (LLSH 16 8) 12) (* ;; "This is the length of a standard index header. Other files could also have this value, but it's a pretty good discriminator") (* ;; "Skip to byte 25; do it with BINS so works for non-randaccessp devices. This skips the standard name header, then look for type 3 in the following header") (FRPTQ 22 (\BIN STRM)) (* ; "(SETFILEPTR STRM 25)") (AND (EQ 3 (LRSH (\BIN STRM) 4)) 'AC)) NIL) (OR LEAVEOPEN (CLOSEF STRM)))]) (FONTP [LAMBDA (X) (* rmk%: "13-Sep-84 09:04") (* ; "is X a FONTDESCRIPTOR?") (COND ((OR (type? FONTDESCRIPTOR X) (type? FONTCLASS X)) X]) (FONTUNPARSE [LAMBDA (FONT) (* kbr%: "25-Feb-86 19:40") (* ;; "Produces a minimal specification of the font or fontclass specification, for dumping by Tedit, imageobjects.") (PROG (FACE SPEC) (SETQ SPEC (COND ((type? FONTDESCRIPTOR FONT) (FONTPROP FONT 'SPEC)) [(type? FONTCLASS FONT) (RETURN (CONS 'CLASS (FONTCLASSUNPARSE FONT] (T (* ;; "Could be a non-instantiated specification in a fontclass, just use it as the spec without creating the font.") FONT))) (OR SPEC (RETURN)) (SETQ FACE (CADDR SPEC)) (* ;  "FACE and rotation can be NIL for a non-fontdescriptor fontclass component") [SETQ FACE (COND ([OR (NULL FACE) (EQUAL FACE '(MEDIUM REGULAR REGULAR] NIL) ((LITATOM FACE) FACE) [(LISTP FACE) (PACK (LIST* (NTHCHAR (fetch (FONTFACE WEIGHT) of FACE) 1) (NTHCHAR (fetch (FONTFACE SLOPE) of FACE) 1) (NTHCHAR (fetch (FONTFACE EXPANSION) of FACE) 1) (COND ((fetch (FONTFACE COLOR) of FACE) (LIST "-" (fetch (FONTFACE BACKCOLOR) of FACE) "-" (fetch (FONTFACE FORECOLOR) of FACE] (T (SHOULDNT] (* ;  "Don't return device, or any trailing defaults") (RETURN (CONS (CAR SPEC) (CONS (CADR SPEC) (COND ([AND (CADDDR SPEC) (NOT (EQ 0 (CADDDR SPEC] (LIST (OR FACE 'MRR) (CADDDR SPEC))) (FACE (CONS FACE]) (SETFONTDESCRIPTOR [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE FONT) (* ; "Edited 1-Aug-88 16:16 by rmk:") (* ; "Edited 5-Mar-87 19:28 by FS") (* ;; "saves a font descriptor under a family/size/face/rotation/device key so that it will be retreived by FONTCREATE. This is a user entry.") (DECLARE (GLOBALVARS \FONTSINCORE)) (SETQ DEVICE (\DEVICESYMBOL DEVICE)) (* ; "Unpackageify") (AND FONT (SETQ FONT (\COERCEFONTDESC FONT DEVICE))) (* ;  "NIL is used to clobber existing font so that next use will reread it.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (* ; "Unpackageify") (SETQ FACE (\FONTFACE FACE NIL DEVICE)) (OR ROTATION (SETQ ROTATION 0)) (OR (AND (FIXP SIZE) (IGEQ SIZE 0)) (\ILLEGAL.ARG SIZE)) (PROG [(X (OR (FASSOC FAMILY \FONTSINCORE) (CAR (push \FONTSINCORE (LIST FAMILY] [SETQ X (OR (FASSOC SIZE (CDR X)) (CAR (push (CDR X) (LIST SIZE] [SETQ X (OR (SASSOC FACE (CDR X)) (CAR (push (CDR X) (LIST FACE] (* ; "SASSOC cause FACE is listp") [SETQ X (OR (FASSOC ROTATION (CDR X)) (CAR (push (CDR X) (LIST ROTATION] [SETQ X (OR (FASSOC DEVICE (CDR X)) (CAR (push (CDR X) (LIST DEVICE] (RPLACD X FONT) (RETURN FONT]) (CHARCODEP [LAMBDA (CHCODE) (* gbn "22-Jul-85 16:35") (* ;  "is CHCODE a legal character code?") (AND (SMALLP CHCODE) (IGEQ CHCODE 0) (ILEQ CHCODE \MAXNSCHAR]) (EDITCHAR [LAMBDA (CHARCODE FONT) (* rrb "24-MAR-82 12:22") (* ;  "calls the bitmap editor on a character of a font") (PROG ((FONTDESC (\GETFONTDESC FONT))) (RETURN (PUTCHARBITMAP CHARCODE FONTDESC (EDITBM (GETCHARBITMAP CHARCODE FONTDESC]) (\STREAMCHARWIDTH [LAMBDA (CHARCODE STREAM TTBL) (* JonL " 8-NOV-83 03:31") (* ;; "Returns the width that the printed representation of CHARCODE would occupy if printed on STREAM, allowing for the various escape sequences. Used by \ECHOCHAR") (SETQ CHARCODE (LOGAND CHARCODE \CHARMASK)) ((LAMBDA (WIDTHSVECTOR) (* ;; "Note in following that if the DDWIDTHSCACHE exists and has a 0 entry for some character, that may someday mean that the character's glyph simply isn't loaded; e.g., it may want #^A") (SETQ WIDTHSVECTOR (OR (AND (DISPLAYSTREAMP STREAM) (SETQ WIDTHSVECTOR (ffetch IMAGEDATA of STREAM)) (ffetch DDWIDTHSCACHE of WIDTHSVECTOR)) \UNITWIDTHSVECTOR)) (SELECTC (fetch CCECHO of (\SYNCODE (fetch (TERMTABLEP TERMSA) of (OR (TERMTABLEP TTBL) \PRIMTERMTABLE)) CHARCODE)) (INDICATE.CCE ([LAMBDA (CC) (IPLUS (if (IGEQ CHARCODE (CHARCODE %#^@)) then (* ;  "A META charcode -- implies that the 8th bit is non-zero") (SETQ CC (LOADBYTE CHARCODE 0 7)) (\FGETWIDTH WIDTHSVECTOR (CHARCODE %#)) else 0) (if (ILESSP CC (CHARCODE SPACE)) then (* ; "A CONTROL charcode") (add CC (CONSTANT (LLSH 1 6))) (\FGETWIDTH WIDTHSVECTOR (CHARCODE ^)) else 0) (\FGETWIDTH WIDTHSVECTOR CC] CHARCODE)) (SIMULATE.CCE (SELCHARQ CHARCODE ((EOL CR LF BELL) NIL) (ESCAPE (\FGETWIDTH WIDTHSVECTOR (CHARCODE $))) (TAB (PROG ((SPACEWIDTH (\FGETWIDTH WIDTHSVECTOR (CHARCODE SPACE))) (NEWXPOSITON (DSPXPOSITION NIL STREAM)) TABWIDTH) (SETQ TABWIDTH (UNFOLD SPACEWIDTH 8)) [add NEWXPOSITON (SETQ TABWIDTH (IDIFFERENCE TABWIDTH (IMOD (IDIFFERENCE NEWXPOSITON (DSPLEFTMARGIN NIL STREAM)) TABWIDTH] (RETURN (if (IGREATERP NEWXPOSITON (DSPRIGHTMARGIN NIL STREAM)) then (* ;  "tab was past rightmargin, force cr.") NIL else TABWIDTH)))) (\FGETWIDTH WIDTHSVECTOR CHARCODE))) (REAL.CCE (SELECTC CHARCODE ((CHARCODE (EOL CR LF)) NIL) (ERASECHARCODE NIL) (\FGETWIDTH WIDTHSVECTOR CHARCODE))) (IGNORE.CCE 0) (SHOULDNT]) (\UNITWIDTHSVECTOR [LAMBDA NIL (* JonL " 7-NOV-83 19:23") (SETQ \UNITWIDTHSVECTOR (\ALLOCBLOCK (UNFOLD (IPLUS \MAXCHAR 3) WORDSPERCELL))) (for I from 0 to (IPLUS \MAXCHAR 2) do (\PUTBASE \UNITWIDTHSVECTOR I 1)) \UNITWIDTHSVECTOR]) (\CREATEDISPLAYFONT [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* gbn%: "25-Jan-86 18:02") (PROG [(FONTDESC (create FONTDESCRIPTOR FONTDEVICE _ DEVICE FONTFAMILY _ FAMILY FONTSIZE _ SIZE FONTFACE _ FACE \SFAscent _ 0 \SFDescent _ 0 \SFHeight _ 0 ROTATION _ ROTATION FONTDEVICESPEC _ (LIST FAMILY SIZE FACE ROTATION DEVICE] (RETURN (COND ((\GETCHARSETINFO CHARSET FONTDESC T) FONTDESC) (T NIL]) (\CREATECHARSET.DISPLAY [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG?) (* ; "Edited 14-Jan-88 23:42 by FS") (* ;; "Color Stuff removed -FS.") (* ;; "Replace Cond below with") (* ;; "(PROG (XCSINFO)") (* ;; "(SETQ XCSINFO &)") (* ;; "(COND ((FMEMB DEVICE \\COLORDISPLAYSTREAMTYPES) (SETQ XCSINFO (\\SFMAKECOLOR XCSINFO (OR (|fetch| (FONTFACE BACKCOLOR) |of| FACE) 0) (OR (|fetch| (FONTFACE FORECOLOR) |of| FACE) (MAXIMUMCOLOR (\\DISPLAYSTREAMTYPEBPP DEVICE))) (\\DISPLAYSTREAMTYPEBPP DEVICE)))))") (* ;; "(RETURN XCSINFO)))") (* ;;; "tries to build the csinfo required for CHARSET. Does the necessary coercions.") (* ;;; "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") (DECLARE (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS)) (* ;; "DISPLAYFONTCOERCIONS is a list of font coercions, in the form ((user-font real-font) (user-font real-font) ...). Each user-font is a list of FAMILY, and optionally SIZE and CHARSET, (e.g., (GACHA) or (GACHA 10) or (GACHA 10 143)), and each real-font is a similar list.") (COND ((PROG1 (for TRANSL in DISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATECHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO)) (* ;  "Just recursively call ourselves to handle entries in DISPLAYFONTCOERCIONS") )) (T (* ;; "One weirdness is, if you have a coercion, and the real-font is missing, you can't get a missingfont coercion on the user-font because the real-font missingfont coercion shadows it out.") (\CREATE-REAL-CHARSET.DISPLAY FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG? ]) (\CREATE-REAL-CHARSET.DISPLAY [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG?) (* ; "Edited 15-Jan-88 00:02 by FS") (COND [(AND (EQ ROTATION 0) (PROG1 (\READDISPLAYFONTFILE FAMILY SIZE FACE ROTATION 'DISPLAY CHARSET) (* ;  "If it is available, this will force the appropriate file to be read to fill in the charset entry") ] (T (* ;; "if we get here, the font is not directly available, either it needs to be rotated, boldified, or italicised 'by hand'. Past that point, we do not allow DISPLAYFONTCOERCIONS, only MISSINGxxxxDISPLAYFONTCOERCIONS.") (PROG (NEWFONT XFONT XLATEDFAM CSINFO) (RETURN (COND [(NEQ ROTATION 0) (* ;; "to make a rotated font (even if it is bold or whatnot), recursively call fontcreate to get the unrotated font (maybe bold, etc), then call \SFMAKEROTATEDFONT on the csinfo. If its still missing, then search for missing display font coercions (e.g. no avail. charset, *but*, do not recurse (avoid getting into infinite loops). This allows partial permutations of fonts.") (OR (MEMB ROTATION '(90 270)) (ERROR "only implemented rotations are 0, 90 and 270." ROTATION)) (COND ((SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE FACE 0 'DISPLAY CHARSET)) (* ;; "Do not call FONTCREATE here. The user might have modified (via PUTCHARBITMAP, etc.) the in-memory version of the source. This also fixes a bug in which several font descriptors ended up sharing bitmaps or charsetvectors, causing havoc when the user modifies either fontdescriptor.") (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFROTATECSINFO CSINFO ROTATION) else NIL] ((AND (EQ (fetch WEIGHT of FACE) 'BOLD) (SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE (create FONTFACE using FACE WEIGHT _ 'MEDIUM) 0 'DISPLAY CHARSET))) (* ;; "if we want a bold font, and the medium weight font is available, build the medium weight version then call \SFMAKEBOLD on the csinfo") (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFMAKEBOLD CSINFO) else NIL)) ((AND (EQ (fetch (FONTFACE SLOPE) of FACE) 'ITALIC) (SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE (create FONTFACE using FACE SLOPE _ 'REGULAR) 0 'DISPLAY CHARSET))) (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFMAKEITALIC CSINFO) else NIL)) [(AND CHARSET (NOT (EQL 0)) (for TRANSL in MISSINGCHARSETDISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATE-REAL-CHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO] ((for TRANSL in MISSINGDISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATE-REAL-CHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO))) ((NOT NOSLUG?) (\BUILDSLUGCSINFO (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONTDESC) (FONTPROP FONTDESC 'ASCENT) (FONTPROP FONTDESC 'DESCENT) (FONTPROP FONTDESC 'DEVICE]) (\BUILDSLUGCSINFO [LAMBDA (WIDTH ASCENT DESCENT DEVICE SCALE) (* ; "Edited 9-May-93 23:12 by rmk:") (* ;;; "builds a csinfo which contains only the slug (black rectangle) character. Called only for display.") (SETQ SCALE (OR SCALE 1)) (PROG ((CSINFO (create CHARSETINFO CHARSETASCENT _ ASCENT CHARSETDESCENT _ DESCENT)) WIDTHS OFFSETS BITMAP IMAGEWIDTHS) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I WIDTH)) (REPLACE IMAGEWIDTHS OF CSINFO WITH WIDTHS) (replace (CHARSETINFO OFFSETS) of CSINFO with (SETQ OFFSETS ( \CREATECSINFOELEMENT ))) (for I from 0 to \MAXTHINCHAR do (\FSETOFFSET OFFSETS I 0)) [replace (CHARSETINFO CHARSETBITMAP) of CSINFO with (SETQ BITMAP (BITMAPCREATE (ROUND (QUOTIENT WIDTH SCALE)) (ROUND (QUOTIENT (IPLUS ASCENT DESCENT) SCALE] [BLTSHADE BLACKSHADE BITMAP 1 NIL (SUB1 (ROUND (QUOTIENT WIDTH SCALE] (RETURN CSINFO]) (\SEARCHDISPLAYFONTFILES [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 5-Mar-87 18:55 by FS") (* ;; " This function called via APPLY in IMAGESTREAMTYPES.") (* ;; " Returns a list of the fonts that can be read in for displaylike devices. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") (* ;; " Note we *allow* a device that is not 'DISPLAY for guys like 4DISPLAY, 8DISPLAY, 24DISPLAY, and also possibly for FX80, etc. (guys that want DISPLAYFONTS anyway). Should have some hook though for FONTEXTENSIONS, FONTDIRECTORIES??") (DECLARE (GLOBALVARS DISPLAYFONTEXTENSIONS DISPLAYFONTDIRECTORIES)) (SELECTQ (SYSTEMTYPE) (D (\SEARCHFONTFILES FAMILY SIZE FACE ROTATION DEVICE DISPLAYFONTDIRECTORIES DISPLAYFONTEXTENSIONS)) (J (* OLD J code from \READDISPLAYFONT  (PROG ((FONTFILE (\FONTFILENAME  FAMILY SIZE FACE)) FONTDESC STRM)  (COND ((SETQ STRM (AND  FONTDIRECTORIES (FINDFILE FONTFILE T  FONTDIRECTORIES)))  (SETQ STRM (OPENSTREAM FONTFILE  (QUOTE INPUT))) (SETQ FONTDESC  (\READJERICHOFONTFILE FAMILY SIZE  FACE STRM)) (CLOSEF STRM)))  (RETURN FONTDESC))) NIL) (SHOULDNT]) (\SEARCHFONTFILES [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE DIRLST EXTLST) (* ; "Edited 14-Sep-96 10:54 by rmk:") (* ; "Edited 6-Oct-89 12:34 by bvm") (* ;; "GENERIC FUNCTION") (* ;; "returns a list of the fonts that can be read in for a device. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (SETQ DEVICE (\FONTSYMBOL DEVICE)) (SETQ FACE (\FONTFACE FACE)) (BIND (FILING.ENUEMRATION.DEPTH _ 1) FONTSFOUND THISFONT THISFACE FOR E INSIDE EXTLST DO [FOR DIR INSIDE DIRLST BIND (FILEPATTERN _ (IF (FMEMB E *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE E) ELSE (\FONTFILENAME FAMILY SIZE FACE E))) DO (* ;; "Hack above to handle both old and new font file names. The variable *OLD-FONT-EXTENSIONS* can be set to suppress using the old-style lookup. If set to a list of extensions, just those will be looked up with old-style conventions") (FOR FONTFILE IN (DIRECTORY (PACKFILENAME.STRING 'DIRECTORY DIR 'BODY FILEPATTERN)) WHEN [PROGN (SETQ THISFONT (\FONTINFOFROMFILENAME FONTFILE DEVICE)) (SETQ THISFACE (CADDR THISFONT)) (* ;;  "make sure the face, size, and family really match.") (AND (NOT (MEMBER THISFONT FONTSFOUND)) (OR (EQ FAMILY '*) (EQ FAMILY (CAR THISFONT))) (OR (EQ SIZE '*) (EQ SIZE (CADR THISFONT))) (OR (EQ FACE '*) (EQUAL FACE THISFACE) (AND (OR (EQ (CAR FACE) '*) (EQ (CAR FACE) (CAR THISFACE))) (OR (EQ (CADR FACE) '*) (EQ (CADR FACE) (CADR THISFACE))) (OR (EQ (CADDR FACE) '*) (EQ (CADDR FACE) (CADDR THISFACE] DO (SETQ FONTSFOUND (CONS THISFONT FONTSFOUND] FINALLY (RETURN FONTSFOUND]) (\FINDFONTFILE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET DIRLST EXTLST) (* ; "Edited 14-Sep-96 10:53 by rmk:") (* ; "Edited 6-Oct-89 11:18 by bvm") (* ;; "Find any font file on any directory with any naming convention with any extension. Note that ROTATION and DEVICE are just place holders. DEVICE is irrelevant because DIRLST already incorporates the device information. The variable *OLD-FONT-EXTENSIONS* can be set to suppress using the old-style lookup. If set to a list of extensions, just those will be looked up with old-style conventions.") (BIND FONTFILE FOR EXT INSIDE EXTLST WHEN (SETQ FONTFILE (FINDFILE (IF (FMEMB EXT *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE EXT CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE EXT CHARSET)) T DIRLST)) DO (RETURN FONTFILE]) (\FONTSYMBOL [LAMBDA (X ElseReturnXFlg) (* ; "Edited 28-Jul-88 11:59 by rmk:") (* ; "Edited 24-Mar-87 14:32 by FS") (* ;; "Return a symbol in IL package and is in uppercase. Currently the function IL:U-CASE is believed to do this, but if it changes, this is the font hook. ElseReturnXFlg is if you want an IL symbol if X is a symbol or string, otherwise just X.") (COND ((LITATOM X) (U-CASE X)) ((STRINGP X) (MKATOM (U-CASE X))) (ElseReturnXFlg X) (T (ERROR "Want an IL symbol"]) (\DEVICESYMBOL [LAMBDA (X ElseReturnXFlg) (* ; "Edited 7-Oct-88 20:07 by rmk:") (* ; "Edited 28-Jul-88 14:43 by rmk:") (* ; "Edited 24-Mar-87 14:33 by FS") (* ;; "Return a canonicalized atom good for comparing with DEVICE symbols") (LET ((STRM (\GETSTREAM X 'OUTPUT T))) (COND (STRM (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of STRM))) ((NULL X) 'DISPLAY) (T (* ; "because its used in ASSOC.") (\FONTSYMBOL X ElseReturnXFlg]) (\FONTFACE [LAMBDA (FACE NOERRORFLG DEV) (* ; "Edited 1-Aug-88 09:44 by rmk:") (* ; "Edited 28-Jul-88 15:50 by rmk:") (* ; "Edited 28-Jul-88 15:49 by rmk:") (* ; "Edited 28-Jul-88 15:41 by rmk:") (* ; "Edited 28-Jul-88 15:38 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 25-Feb-87 22:58 by FS") (* ;; "Coerces FACE into standard FONTFACE record, usually returns a CONSTANT (so you'd better not RPLACD or REPLACE fields!!)") (PROG (UNKNOWN (WEIGHT 'MEDIUM) (SLOPE 'REGULAR) (EXPANSION 'REGULAR) (OLDFACE FACE)) (* ;; "On error, can signal, or return NIL, or return REGULAR face.") [SETQ UNKNOWN (COND ((EQ NOERRORFLG 'REGULAR) 'REGULAR) (T 'ERROR] [COND ((type? FONTFACE FACE) (* ;; "List Case. Unpack because want to validate fields") (SETQ WEIGHT (fetch (FONTFACE WEIGHT) of FACE)) (SETQ SLOPE (fetch (FONTFACE SLOPE) of FACE)) (SETQ EXPANSION (fetch (FONTFACE EXPANSION) of FACE)) (* ;; "Handle unknown faces") [OR (\FONT.SYMBOLMEMB WEIGHT ' (* BOLD MEDIUM LIGHT)) (SETQ WEIGHT (COND ((\FONT.COMPARESYMBOL WEIGHT 'REGULAR) (* ;; "Clean up WEIGHT REGULAR vs. MEDIUM") (SETQ WEIGHT 'MEDIUM)) (T UNKNOWN] (OR (\FONT.SYMBOLMEMB SLOPE ' (* REGULAR ITALIC)) (SETQ SLOPE UNKNOWN)) (OR (\FONT.SYMBOLMEMB EXPANSION ' (* COMPRESSED REGULAR EXPANDED)) (SETQ EXPANSION UNKNOWN))) ((OR (LITATOM FACE) (STRINGP FACE)) (COND ((NULL FACE) (* ; "Fast vanilla default") ) ((EQ (NCHARS FACE) 3) (* ; "3 char notation case") (SETQ WEIGHT (SELCHARQ (CHCON1 FACE) ((B b) 'BOLD) ((M m R r) 'MEDIUM) ((L l) 'LIGHT) UNKNOWN)) (SETQ SLOPE (SELCHARQ (NTHCHARCODE FACE 2) ((R r) 'REGULAR) ((I i) 'ITALIC) UNKNOWN)) (SETQ EXPANSION (SELCHARQ (NTHCHARCODE FACE 3) ((R r) 'REGULAR) ((C c) 'COMPRESSED) ((E e) 'EXPANDED) UNKNOWN))) ((SELECTQ FACE (BOLD (SETQ WEIGHT 'BOLD)) (ITALIC (SETQ SLOPE 'ITALIC)) (BOLDITALIC (SETQ WEIGHT 'BOLD) (SETQ SLOPE 'ITALIC)) ((STANDARD REGULAR) T) NIL)) ((\FONT.COMPARESYMBOL FACE 'BOLD) (SETQ WEIGHT 'BOLD)) ((\FONT.COMPARESYMBOL FACE 'ITALIC) (SETQ SLOPE 'ITALIC)) ((\FONT.COMPARESYMBOL FACE 'BOLDITALIC) (SETQ WEIGHT 'BOLD) (SETQ SLOPE 'ITALIC)) ((\FONT.SYMBOLMEMB FACE '(STANDARD REGULAR NIL NNN)) (* ; "Vanilla case") ) ((STRPOS "-" FACE) (* ; "Color fontface spec!") (SETQ FACE (\FONTFACE.COLOR FACE NOERRORFLG DEV)) (RETURN FACE)) ((\FONT.SYMBOLMEMB FACE ' (* ***)) (* ; "Wildcard case") (SETQ WEIGHT '*) (SETQ SLOPE '*) (SETQ EXPANSION '*)) (T (* ; "Other litatom error case") (SETQ WEIGHT UNKNOWN) (SETQ SLOPE UNKNOWN) (SETQ EXPANSION UNKNOWN] (if (OR (EQ WEIGHT 'ERROR) (EQ SLOPE 'ERROR) (EQ EXPANSION 'ERROR)) then (if NOERRORFLG then (RETURN NIL) else (\ILLEGAL.ARG OLDFACE))) (* ;; "Avoid consing by returning constant faces (historical: really, would have been better to return MRR, but users have know about this for too long (rmk))") (RETURN (COND ((AND (EQ WEIGHT 'MEDIUM) (EQ SLOPE 'REGULAR) (EQ EXPANSION 'REGULAR)) (* ; "MRR") (CONSTANT (create FONTFACE))) [(AND (EQ WEIGHT 'BOLD) (EQ SLOPE 'REGULAR) (EQ EXPANSION 'REGULAR)) (* ; "BRR") (CONSTANT (create FONTFACE WEIGHT _ 'BOLD] [(AND (EQ WEIGHT 'MEDIUM) (EQ SLOPE 'ITALIC) (EQ EXPANSION 'REGULAR)) (* ; "MIR") (CONSTANT (create FONTFACE SLOPE _ 'ITALIC] [(AND (EQ WEIGHT 'BOLD) (EQ SLOPE 'ITALIC) (EQ EXPANSION 'REGULAR)) (* ; "BIR") (CONSTANT (create FONTFACE WEIGHT _ 'BOLD SLOPE _ 'ITALIC] (T (* ; "Otherwise, cons up") (create FONTFACE WEIGHT _ WEIGHT SLOPE _ SLOPE EXPANSION _ EXPANSION]) (\FONTFACE.COLOR [LAMBDA (FACE NOERRORFLG DEV) (* ; "Edited 28-Jul-88 14:51 by rmk:") (* ; "Edited 28-Jul-88 13:09 by rmk:") (* ; "Edited 24-Mar-87 17:03 by FS") (* ;; "This used to be \FONTFACE. Renamed \FONTFACE.COLOR, and \FONTFACE rewritten. The section below should also be redone") (* ;; "Takes a variety of user specifications and converts them to a standard FONTFACE record.") (* ;; "b/w fontfaces are extended by an optional '-backcolor-forecolor'") (* ;; "the atom NNN is interpreted the same as NIL or MRR to cover up a bug described in AR 3025, the FONTNNN bug") (DECLARE (GLOBALVARS \COLORDISPLAYSTREAMTYPES)) (SETQ DEV (\DEVICESYMBOL DEV)) (PROG (BWFACE POS OLDPOS BITSPERPIXEL BACKCOLOR FORECOLOR ANSWER) (* ;; "First get a FONTFACE ANSWER.") [SETQ ANSWER (COND ((type? FONTFACE FACE) FACE) ((LITATOM FACE) (OR (U-CASEP FACE) (SETQ FACE (U-CASE FACE))) (SETQ POS (STRPOS "-" FACE)) (COND [POS (SETQ BWFACE (SUBATOM FACE 1 (SUB1 POS] (T (SETQ BWFACE FACE))) [SETQ ANSWER (SELECTQ BWFACE ((* ***) (CONSTANT (create FONTFACE WEIGHT _ '* SLOPE _ '* EXPANSION _ '*))) ((NIL MRR STANDARD NNN) (CONSTANT (create FONTFACE))) ((ITALIC MIR) (CONSTANT (create FONTFACE SLOPE _ 'ITALIC))) ((BOLD BRR) (CONSTANT (create FONTFACE WEIGHT _ 'BOLD))) ((BOLDITALIC BIR) (CONSTANT (create FONTFACE WEIGHT _ 'BOLD SLOPE _ 'ITALIC))) (create FONTFACE WEIGHT _ (SELCHARQ (NTHCHARCODE FACE 1) (M 'MEDIUM) (B 'BOLD) (L 'LIGHT) (GO ERROR)) SLOPE _ (SELCHARQ (NTHCHARCODE FACE 2) (R 'REGULAR) (I 'ITALIC) (GO ERROR)) EXPANSION _ (SELCHARQ (NTHCHARCODE FACE 3) (R 'REGULAR) (C 'COMPRESSED) (E 'EXPANDED) (GO ERROR] (COND (POS (* ; "Color FONTFACE. *") (SETQ OLDPOS POS) (SETQ POS (STRPOS "-" FACE (ADD1 OLDPOS))) (COND ((NULL POS) (GO ERROR))) (SETQ BITSPERPIXEL (\DISPLAYSTREAMTYPEBPP DEV)) (SETQ BACKCOLOR (COLORNUMBERP (SUBATOM FACE (ADD1 OLDPOS) (SUB1 POS)) BITSPERPIXEL)) (SETQ OLDPOS POS) (SETQ FORECOLOR (COLORNUMBERP (SUBATOM FACE (ADD1 OLDPOS) -1) BITSPERPIXEL)) (* ;  "COPY ANSWER to avoid smashing constants.") (SETQ ANSWER (COPY ANSWER)) (replace (FONTFACE BACKCOLOR) of ANSWER with BACKCOLOR ) (replace (FONTFACE FORECOLOR) of ANSWER with FORECOLOR ))) ANSWER) (T (GO ERROR] (* ;; "Coerce on or off COLOR.") (SETQ ANSWER (COND ((AND (NOT (FMEMB DEV \COLORDISPLAYSTREAMTYPES)) (fetch (FONTFACE COLOR) of ANSWER)) (SETQ ANSWER (COPY ANSWER)) (replace (FONTFACE COLOR) of ANSWER with NIL) ANSWER) ((AND (FMEMB DEV \COLORDISPLAYSTREAMTYPES) (NULL (fetch (FONTFACE COLOR) of ANSWER))) (SETQ FACE (COPY FACE)) (replace (FONTFACE BACKCOLOR) of ANSWER with 0) (replace (FONTFACE FORECOLOR) of ANSWER with (MAXIMUMCOLOR ( \DISPLAYSTREAMTYPEBPP DEV))) ANSWER) (T ANSWER))) (RETURN ANSWER) ERROR (COND (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG FACE]) (\FONTFILENAME [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 5-Mar-93 16:10 by rmk:") (* ;; "Strike file naming convention (w/o dashes, no charset) no longer supported. New name is of the form %"familysize-face-Ccharset.ext%", e.g., MODERN12-MRR-C357.WD") (* ;; "**bvm 10/5/89 Slight change: partition fonts into subdirectories by charset, e.g., all Charset zero fonts are in subdirectory C0>. This significantly speeds up any font operation that requires any local directory work (e.g., NFS servers on both Sun and D machine), and FONTSAVAILABLE on any device (since it doesn't have to wade thru all those charsets). This behavior is conditioned on the value of *USEOLDFONTDIRECTORIES*") (SETQ FACE (\FONTFACE FACE)) (* ; "Validate face") (LET* ([SIZEPATT (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (if (< SIZE 10) then (CONCAT 0 SIZE) else SIZE)) (T (\ILLEGAL.ARG SIZE] (CSETNAME (COND ((OR (NULL CHARSET) (EQ CHARSET 0)) (* ; "Charset defaults to zero.") "0") ((FIXP CHARSET) (LET ((*PRINT-BASE* 8) (*PRINT-RADIX* NIL)) (* ; "Longhand for (cl:write-to-string charset :radix nil :base 8), which is twice as slow, due to lousy keyword handling") (\PRINDATUM.TO.STRING CHARSET))) (T (* ;  "Somebody made the string already?") CHARSET))) [FACESPEC (LIST (CHCON1 (fetch (FONTFACE WEIGHT) of FACE)) (CHCON1 (fetch (FONTFACE SLOPE) of FACE)) (CHCON1 (fetch (FONTFACE EXPANSION) of FACE] (TAIL FACESPEC)) [if (OR (EQ (CAR TAIL) (CHARCODE *)) (EQ (CAR (SETQ TAIL (CDR TAIL))) (CHARCODE *))) then (* ;  "Avoid adjacent wildcards because some devices (notably DSK) get exponentially slower.") (while (EQ (CADR TAIL) (CHARCODE *)) do (RPLACD TAIL (CDDR TAIL] (* ;; "Fortunately, CONCAT ignores packages.") (PACKFILENAME.STRING 'NAME (CONCAT (CL:IF *USEOLDFONTDIRECTORIES* "" (CONCAT (PROGN (* ;  "Lowercase because it's in a directory name, so maybe Unix will find it sooner?") "c") CSETNAME ">")) FAMILY SIZEPATT "-" (CONCATCODES FACESPEC) "-C" CSETNAME) 'EXTENSION EXTENSION]) (\FONTFILENAME.OLD [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 23-Sep-92 18:22 by jds") (* ;; "Returns old style font file names. They were ambiguous because you could not ask for e.g. FACE (MEDIUM * REGULAR) because it maps to FamilySize-*-Charset, which also matches (BOLD * COMPRESSED), etc. Keep this function around though for user's who don't rename their files.") (* ;  "Returns the name of the file that should contain the information for a font.") (SETQ FACE (\FONTFACE FACE)) (* ; "Force legal canonical face") (SETQ FACE (COND ((AND (EQ (CAR FACE) '*) (EQ (CADR FACE) '*)) (* ;; "Avoid adjacent wildcards because DSK gets slower exponentially (can take loooong tiiiiiime). No need to check compression.") '*) (T FACE))) (PACKFILENAME.STRING 'NAME [PROGN (* ;; "DISPLAYFONT AC WD and the default case") (CONCAT (CDR (SASSOC FAMILY *DISPLAY-FONT-NAME-MAP*)) (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (COND ((< SIZE 10) (CONCAT 0 SIZE)) (T SIZE))) (T (\ILLEGAL.ARG SIZE))) [COND ((EQ FACE '*) '*) (T (SELECTQ (fetch WEIGHT of FACE) (BOLD (SELECTQ (fetch SLOPE of FACE) (ITALIC "D") "B")) (SELECTQ (fetch SLOPE of FACE) (ITALIC "I") "R"] (COND ((FIXP CHARSET) (LET ((*PRINT-BASE* 8)) (CL:FORMAT NIL "~O" CHARSET))) (T "000"] 'EXTENSION EXTENSION]) (\FONTFILENAME.NEW [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 30-Mar-87 20:00 by FS") (* ;; "Strike file naming convention (w/o dashes, no charset) no longer supported.") (LET (NAME SIZEPATT) (SETQ FACE (\FONTFACE FACE)) (* ; "Validate face") [SETQ SIZEPATT (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (if (< SIZE 10) then (CONCAT 0 SIZE) else SIZE)) (T (\ILLEGAL.ARG SIZE] (* ;; "Avoid adjacent wildcards because some devices (notably DSK) get exponentially slower. Nicely, PACK & CONCAT ignore packages.") (PACKFILENAME.STRING 'NAME (CONCAT FAMILY SIZEPATT "-" [COND ((EQUAL FACE ' (* * *) ) '*) (T (CONCAT (NTHCHAR (fetch (FONTFACE WEIGHT) of FACE) 1) (NTHCHAR (fetch (FONTFACE SLOPE) of FACE) 1) (NTHCHAR (fetch (FONTFACE EXPANSION) of FACE) 1] (COND [(FIXP CHARSET) (LET ((*PRINT-BASE* 8)) (CONCAT "-C" (\PRINDATUM.TO.STRING CHARSET] (CHARSET (CONCAT "-C" CHARSET)) (T "-C0"))) 'EXTENSION EXTENSION]) (\FONTINFOFROMFILENAME [LAMBDA (FONTFILE DEVICE) (* ; "Edited 14-Sep-96 10:23 by rmk:") (* ; "Edited 5-Oct-89 18:28 by bvm") (* ;; "returns a list of the family size face rotation device of the font stored in the file name FONTFILE. Rotation is 0 always. Parses both new & old format files.") (LET ((FILENAMELIST (UNPACKFILENAME.STRING FONTFILE)) CH SIZEBEG SIZEND NAME FAMILY SIZE FACE EXT) (SETQ NAME (LISTGET FILENAMELIST 'NAME)) (* ;  "find where the name and size are. MUST check for ch nil below or possible infinite loop") (SETQ SIZEBEG (for CH# from 1 when (OR (NUMBERP (SETQ CH (NTHCHAR NAME CH#))) (NULL CH)) do (RETURN CH#))) (* ;; "Get Family") [SETQ FAMILY (MKATOM (U-CASE (SUBSTRING NAME 1 (SUB1 SIZEBEG] (* ;; "Get Size") [SETQ SIZEND (find CH# from SIZEBEG suchthat (NOT (NUMBERP (NTHCHAR NAME CH#] [SETQ SIZE (MKATOM (SUBSTRING NAME SIZEBEG (SUB1 SIZEND] (if (EQ (NTHCHAR NAME SIZEND) '-) then (SETQ SIZEND (ADD1 SIZEND))) (* ;; "Get Face") (SETQ NAME (U-CASE NAME)) (* ;  "don't need name, but checks for lowercase face") [SETQ FACE (LIST (COND ((STRPOS "B" NAME SIZEND NIL T NIL UPPERCASEARRAY) 'BOLD) ((STRPOS "L" NAME SIZEND NIL T NIL UPPERCASEARRAY) 'LIGHT) (T 'MEDIUM)) (COND ((STRPOS "I" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'ITALIC) (T 'REGULAR)) (COND ((STRPOS "E" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'EXPANDED) ((STRPOS "C-" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'COMPRESSED) (T 'REGULAR] (LIST FAMILY SIZE FACE 0 (COND ((STREAMP DEVICE) (IMAGESTREAMTYPE DEVICE)) ((NULL DEVICE) [SETQ EXT (MKATOM (U-CASE (LISTGET FILENAMELIST 'EXTENSION] (SELECTQ EXT (WD 'INTERPRESS) ((STRIKE AC DISPLAYFONT) 'DISPLAY) EXT)) ((LITATOM DEVICE) (\FONTSYMBOL DEVICE)) (T DEVICE]) (\FONTINFOFROMFILENAME.OLD [LAMBDA (FONTFILE DEVICE) (* ; "Edited 1-Jan-87 01:29 by FS") (* ;; "returns a list of the family size face rotation device of the font stored in the file name FONTFILE.") (PROG ((FILENAMELIST (UNPACKFILENAME FONTFILE)) SIZEBEG SIZEND NAME FAMILY SIZE) (SETQ NAME (LISTGET FILENAMELIST 'NAME)) (* ;  "find where the name and size are.") (SETQ SIZEBEG (for CH# from 1 when (NUMBERP (NTHCHAR NAME CH#)) do (RETURN CH#))) [SETQ FAMILY (MKATOM (SUBSTRING NAME 1 (SUB1 SIZEBEG] (SETQ SIZEND (for CH# from SIZEBEG when (NOT (NUMBERP (NTHCHAR NAME CH#))) do (RETURN CH#))) [SETQ SIZE (MKATOM (SUBSTRING NAME SIZEBEG (SUB1 SIZEND] (RETURN (LIST FAMILY SIZE (SELECTQ (LISTGET FILENAMELIST 'EXTENSION) ((DISPLAYFONT AC WD) (LIST (COND ((STRPOS "-B" NAME SIZEND NIL T) 'BOLD) (T 'MEDIUM)) (COND ((STRPOS "-I" NAME SIZEND NIL) 'ITALIC) (T 'REGULAR)) 'REGULAR)) (LIST (COND ((STRPOS "B" NAME SIZEND NIL T) 'BOLD) (T 'MEDIUM)) (COND ((STRPOS "I" NAME SIZEND NIL) 'ITALIC) (T 'REGULAR)) 'REGULAR)) 0 DEVICE]) (\GETFONTDESC [LAMBDA (SPEC DEVICE NOERRORFLG) (* J.Gibbons " 5-Dec-82 16:53") (* ;; "Coerces SPEC to a fontdescriptor") (* ;  "\GETFONTDESC HAS MACRO, BUT OLD CALLS STILL EXIST") (\COERCEFONTDESC SPEC DEVICE NOERRORFLG]) (\COERCEFONTDESC [LAMBDA (SPEC STREAM NOERRORFLG) (* ; "Edited 29-Aug-91 12:19 by jds") (* ;; "Coerces SPEC to a fontdescriptor appropriate for STREAM. Go back thru FONTCREATE for various coercions in order to make sure that the cache gets set up") (DECLARE (GLOBALVARS DEFAULTFONT)) (PROG (FONT DEVICE) [COND ((type? FONTDESCRIPTOR SPEC) (SETQ FONT SPEC)) [(type? FONTCLASS SPEC) [SETQ DEVICE (COND ((NULL STREAM) (* ; "Default is display") (* ;; "COULDN'T THIS BRANCH BE INTENDED TO MEAN 4DISPLAY, 8DISPLAY, 24DISPLAY? PEOPLE PROBABLY SHOULDN'T BE CALLING \COERCEFONTDESC WITH STREAM = NIL.") 'DISPLAY) ((IMAGESTREAMP STREAM) (IMAGESTREAMTYPE STREAM)) ((LITATOM STREAM) (\DEVICESYMBOL STREAM)) (STREAM STREAM) (T (* ;; "I don't think this case should be allowed.") 'DISPLAY] [SETQ FONT (SELECTQ DEVICE (DISPLAY (fetch (FONTCLASS DISPLAYFD) of SPEC)) (INTERPRESS (fetch (FONTCLASS INTERPRESSFD) of SPEC)) (PRESS (fetch (FONTCLASS PRESSFD) of SPEC)) (CDR (SASSOC DEVICE (fetch (FONTCLASS OTHERFDS) of SPEC] (RETURN (COND ((type? FONTDESCRIPTOR FONT) (* ;;  "We don't always create FD's for devices before they are needed, so do it now and save result") FONT) [(NULL FONT) (* ;; "NIL means create FONT but don't cache.") (COND ((AND (FMEMB DEVICE \DISPLAYSTREAMTYPES) (SETQ FONT (\COERCEFONTDESC SPEC 'DISPLAY NOERRORFLG)) (SETQ FONT (FONTCOPY FONT 'DEVICE STREAM 'NOERROR NOERRORFLG)) ) (* ;;  "Coerce existing black & white font to color font, but don't cache.") FONT) [(EQ SPEC DEFAULTFONT) (* ;; "Break cycles with NIL in the defaultfont") (COND (NOERRORFLG NIL) ((EQ DEVICE 'DISPLAY) (* ;; "Function DEFAULTFONT guarantees system integrity") (DEFAULTFONT 'DISPLAY)) ((EQUAL DEVICE '(HARDCOPY DISPLAY)) (* ;;  "MAKE DISPLAY-HARDCOPY FONTS default to the corresponding display font, copied....") (FONTCOPY (DEFAULTFONT 'DISPLAY) 'DEVICE STREAM 'NOERROR NOERRORFLG)) (T (ERROR (CONCAT DEVICE " component for DEFAULTFONT undefined"] (T (FONTCREATE DEFAULTFONT NIL NIL NIL STREAM NOERRORFLG] ((SETQ FONT (FONTCREATE FONT NIL NIL NIL STREAM NOERRORFLG)) (* ;; "Might get NIL if NOERRORFLG") (SETFONTCLASSCOMPONENT SPEC DEVICE FONT] ((NULL SPEC) (RETURN (\COERCEFONTDESC DEFAULTFONT STREAM NOERRORFLG))) ((OR (IMAGESTREAMP SPEC) (type? WINDOW SPEC)) (SETQ FONT (DSPFONT NIL SPEC))) (T (* ;; "If called with NOERRORFLG=T (e.g. from DSPFONT) we want to suppress invalid arg errors as well as font not found, so we can move on to other possible coercions.") (RETURN (FONTCREATE SPEC NIL NIL NIL STREAM NOERRORFLG] (* ;; "Here if arg was a fontdescriptor or imagestream") (RETURN (COND ((NULL STREAM) (* ;;  "NIL device doesn't default to display if a fully-specified font was found") FONT) ([OR (EQ STREAM (fetch (FONTDESCRIPTOR FONTDEVICE) of FONT)) (AND (type? STREAM STREAM) (EQ (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of STREAM)) (fetch (FONTDESCRIPTOR FONTDEVICE) of FONT] FONT) (T (* ;; "Here if doesn't match or if DEVICE is not explicitly a stream.") (FONTCOPY FONT 'DEVICE STREAM 'NOERROR NOERRORFLG]) (\LOOKUPFONT [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 28-Jul-88 17:05 by rmk:") (* ; "Edited 28-Jul-88 17:04 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 28-Jul-88 14:02 by rmk:") (* ; "Edited 28-Jul-88 13:54 by rmk:") (* ; "Edited 26-Feb-87 00:20 by FS") (* ;; "looks up a font in the internal cache. SASSOC for listp FACE") (DECLARE (GLOBALVARS \FONTSINCORE)) (* ;; "Someone had better have already made FACE canonical") (LET [(X (CDR (FASSOC ROTATION (CDR (SASSOC FACE (CDR (FASSOC SIZE (CDR (OR (FASSOC FAMILY \FONTSINCORE) (\FONT.SYMBOLASSOC FAMILY \FONTSINCORE] (CDR (OR (FASSOC DEVICE X) (\FONT.SYMBOLASSOC DEVICE X]) (\LOOKUPFONTSINCORE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 25-Apr-93 13:07 by rmk:") (* rrb "25-Sep-84 12:10") (* ;;; "returns a list of the fonts that are available in core. * is used to match anything.") (DECLARE (GLOBALVARS \FONTSINCORE)) (for FAMBUCKET in \FONTSINCORE when (OR (EQ FAMILY '*) (EQ FAMILY (CAR FAMBUCKET))) join (for SIZEBUCKET in (CDR FAMBUCKET) when (OR (EQ SIZE '*) (EQ SIZE (CAR SIZEBUCKET))) join (for FACEBUCKET in (CDR SIZEBUCKET) when (OR (EQ FACE '*) (EQUAL FACE (CAR FACEBUCKET))) join (for ROTBUCKET in (CDR FACEBUCKET) when (OR (EQ ROTATION '*) (EQ ROTATION (CAR ROTBUCKET))) join (for DEVBUCKET in (CDR ROTBUCKET) when (AND (OR (EQ DEVICE '*) (EQ DEVICE (CAR DEVBUCKET))) (TYPE? FONTDESCRIPTOR (CDR DEVBUCKET))) collect (LIST (CAR FAMBUCKET) (CAR SIZEBUCKET) (CAR FACEBUCKET) (CAR ROTBUCKET) (CAR DEVBUCKET]) (\READDISPLAYFONTFILE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 8-Oct-96 10:17 by rmk:") (* ;  "Edited 30-Sep-96 12:03 by kaplan") (* ; "Edited 2-Jan-87 17:55 by FS") (* ;; "Look for new filename convention, then old file name convention, with extensions. If CACHEDISPLAYFONTS, this keeps a cache of what was read, on the canonical filename's property list, so that NSDISPLAYSIZES and SMALLSCREEN size coercions can be done and undone without always going out to the directories.") (DECLARE (GLOBALVARS DISPLAYFONTEXTENSIONS DISPLAYFONTDIRECTORIES CACHEDISPLAYFONTS)) (BIND FONTFILE CSINFO STRM FIRST (* ;; "Cache is indexed by canonical font file name, without the extension fields.") (CL:WHEN [AND CACHEDISPLAYFONTS (FIND EXT INSIDE DISPLAYFONTEXTENSIONS SUCHTHAT (SETQ CSINFO (GETP (L-CASE (FILENAMEFIELD (IF (FMEMB EXT *OLD-FONT-EXTENSIONS* ) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE EXT CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE EXT CHARSET)) 'NAME)) 'CACHEDCHARSET] (RETURN (AND (NEQ CSINFO T) (COPYALL CSINFO)))) FOR EXT INSIDE DISPLAYFONTEXTENSIONS WHEN (SETQ FONTFILE (\FINDFONTFILE FAMILY SIZE FACE ROTATION DEVICE CHARSET DISPLAYFONTDIRECTORIES (LIST EXT))) DO (* ;;  "Cache is indexed by canonical font file name, without the directory or extension fields") (SETQ STRM (OPENSTREAM FONTFILE 'INPUT)) (RESETLST [SETQ CSINFO (SELECTQ (FONTFILEFORMAT STRM T) (STRIKE (RESETSAVE NIL (LIST (FUNCTION CLOSEF) STRM)) (\READSTRIKEFONTFILE STRM FAMILY SIZE FACE)) (AC (* ;; "CLOSEF is guaranteed inside \READACFONTFILE, against the possibility that we have to copy to make randaccessp") (\READACFONTFILE STRM FAMILY SIZE FACE)) (PROG1 (CLOSEF STRM) (* ; "This would get done by RESETSAVE if AC's were read sequentially and we could factor the RESETSAVE") (SHOULDNT))]) (CL:WHEN CACHEDISPLAYFONTS (PUTPROP (L-CASE (FILENAMEFIELD FONTFILE 'NAME)) 'CACHEDCHARSET CSINFO) (SETQ CSINFO (COPYALL CSINFO))) (* ;; "If not a recognizable format, I guess we should keep looking for another possible extension, altho it would also be nice to tell the user that he has a bogus file.") (RETURN CSINFO) FINALLY (* ;; "Didn't find the file, cache T to suppress future lookups") (CL:WHEN CACHEDISPLAYFONTS (PUTPROP (L-CASE (FILENAMEFIELD (IF (FMEMB (CAR (MKLIST DISPLAYFONTEXTENSIONS)) *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE (CAR (MKLIST DISPLAYFONTEXTENSIONS )) CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE (CAR (MKLIST DISPLAYFONTEXTENSIONS )) CHARSET)) 'NAME)) 'CACHEDCHARSET T))]) ) (* ;; "\FINDFONTFILE \FONTFILENAME \SEARCHFONTFILES \FONTINFOFROMFILENAME are redefined to deal with character-set directories. That behavior is conditioned on the setting of the global variable *USEOLDFONTDIRECTORIES*, T at PARC, maybe NIL most other places. " ) (ADDTOVAR *OLD-FONT-EXTENSIONS* STRIKE) (RPAQ? *USEOLDFONTDIRECTORIES* NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS *OLD-FONT-EXTENSIONS* *USEOLDFONTDIRECTORIES*) ) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)" ) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)" ) (RPAQ? CACHEDISPLAYFONTS T) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS CACHEDISPLAYFONTS) ) (* ; "STRIKE format file support") (DEFINEQ (\READSTRIKEFONTFILE [LAMBDA (STRM FAMILY SIZE FACE) (* ; "Edited 4-Dec-92 12:11 by jds") (* ;  "STRM has already been determined to be a vanilla strike-format file.") (* ; "returns a charsetinfo") (COND ((NEQ 2 (GETFILEPTR STRM)) (SETFILEPTR STRM 2))) (PROG (CSINFO NUMBCODES RW BITMAP OFFSETS FIRSTCHAR LASTCHAR HEIGHT WIDTHS) (SETQ CSINFO (create CHARSETINFO)) (SETQ FIRSTCHAR (\WIN STRM)) (* ; "minimum ascii code") (SETQ LASTCHAR (\WIN STRM)) (* ; "maximum ascii code") (\WIN STRM) (* ;  "MaxWidth which isn't used by anyone.") (\WIN STRM) (* ;  "number of words in this StrikeBody") (replace (CHARSETINFO CHARSETASCENT) of CSINFO with (\WIN STRM)) (* ;  "ascent in scan lines (=FBBdy+FBBoy)") (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with (\WIN STRM)) (* ; "descent in scan-lines (=FBBoy)") (\WIN STRM) (* ;  "offset in bits (<0 for kerning, else 0, =FBBox)") (SETQ RW (\WIN STRM)) (* ; "raster width of bitmap") (* ; "height of bitmap") (* ;; "JDS 12/4/92: Apparently, these fields can be signed values, if all chars, e.g., ride above the base line.") (SETQ HEIGHT (IPLUS (SIGNED (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) 16) (SIGNED (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO) 16))) (SETQ BITMAP (BITMAPCREATE (UNFOLD RW BITSPERWORD) HEIGHT)) (\BINS STRM (fetch BITMAPBASE of BITMAP) 0 (UNFOLD (ITIMES RW HEIGHT) BYTESPERWORD)) (* ; "read bits into bitmap") (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with BITMAP) (SETQ NUMBCODES (IPLUS (IDIFFERENCE LASTCHAR FIRSTCHAR) 3)) (* (SETQ OFFSETS (ARRAY  (IPLUS \MAXCHAR 3)  (QUOTE SMALLPOSP) 0 0))) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (* ; "initialise the offsets to 0") (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET OFFSETS I 0)) (* (AIN OFFSETS FIRSTCHAR NUMBCODES  STRM)) (for I from FIRSTCHAR as J from 1 to NUMBCODES do (\FSETOFFSET OFFSETS I (\WIN STRM))) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETWIDTH WIDTHS I 0)) (* (replace WIDTHS of  (CHARSETINFO CSINFO) with  (ARRAY (IPLUS \MAXCHAR 3)  (QUOTE SMALLPOSP) 0 0))) (\FONTRESETCHARWIDTHS CSINFO FIRSTCHAR LASTCHAR) (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO WIDTHS) of CSINFO)) (RETURN CSINFO]) (\SFMAKEBOLD [LAMBDA (CSINFO) (* gbn "25-Jul-85 04:52") (PROG* ((OLDCHARBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (HEIGHT (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO))) NEWCHARBITMAP OFFSET UNKNOWNOFFSET UNKNOWNWIDTH) (SETQ NEWCHARBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDCHARBITMAP) (fetch BITMAPHEIGHT of OLDCHARBITMAP))) (SETQ UNKNOWNOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXCHAR))) (SETQ UNKNOWNWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXCHAR))) [for I from 0 to \MAXCHAR do (COND ((EQ (SETQ OFFSET (\FGETOFFSET OFFSETS I)) UNKNOWNOFFSET) (* ;  "if this is the magic charcode with the slug image (charcode 256) then leave it alone") NIL) (T (* ;  "overlap two blts to produce bold effect") (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP OFFSET 0 (\FGETWIDTH WIDTHS I ) HEIGHT 'INPUT 'REPLACE) (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP (ADD1 OFFSET) 0 (SUB1 (\FGETWIDTH WIDTHS I)) HEIGHT 'INPUT 'PAINT] (* ;  "fill in the slug for the magic charcode") (BITBLT OLDCHARBITMAP UNKNOWNOFFSET 0 NEWCHARBITMAP UNKNOWNOFFSET 0 UNKNOWNWIDTH HEIGHT 'INPUT 'REPLACE) (RETURN (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWCHARBITMAP]) (\SFMAKEITALIC [LAMBDA (CSINFO) (* gbn "18-Sep-85 17:57") (PROG ((WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (ASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (DESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (OLDBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) HEIGHT OFFSET NEWBITMAP WIDTH UNKNOWNOFFSET UNKNOWNWIDTH N M R XN XX YN YX) (SETQ HEIGHT (IPLUS ASCENT DESCENT)) (SETQ NEWBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDBITMAP) (fetch BITMAPHEIGHT of OLDBITMAP))) (SETQ UNKNOWNOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXTHINCHAR))) (SETQ UNKNOWNWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXTHINCHAR))) (SETQ N (IDIFFERENCE 0 (IQUOTIENT (IPLUS DESCENT 3) 4))) (SETQ M (IQUOTIENT (IPLUS ASCENT 3) 4)) [for I from 0 to \MAXTHINCHAR do (COND ((EQ (SETQ OFFSET (\FGETOFFSET OFFSETS I)) UNKNOWNOFFSET) (* ;  "if this is the magic charcode with the slug image (charcode 256) then leave it alone") NIL) (T (SETQ WIDTH (\FGETWIDTH WIDTHS I)) (for J from N to M do (SETQ R (IPLUS OFFSET WIDTH)) (SETQ XN (IMIN R (IMAX (IPLUS OFFSET J) 0))) (SETQ XX (IMIN R (IMAX (IPLUS R J) 0))) [SETQ YN (IMAX 0 (IPLUS DESCENT (ITIMES J 4] [SETQ YX (IMIN HEIGHT (IPLUS DESCENT (IPLUS (ITIMES J 4) 4] (COND ((AND (IGREATERP XX XN) (IGREATERP YX YN)) (BITBLT OLDBITMAP OFFSET YN NEWBITMAP XN YN (IDIFFERENCE XX XN) (IDIFFERENCE YX YN) 'INPUT 'REPLACE] (BITBLT OLDBITMAP UNKNOWNOFFSET 0 NEWBITMAP UNKNOWNOFFSET 0 UNKNOWNWIDTH HEIGHT 'INPUT 'REPLACE) (RETURN (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWBITMAP]) (\SFMAKEROTATEDFONT [LAMBDA (FONTDESC ROTATION) (* ; "Edited 30-Mar-87 20:35 by FS") (* ;; "takes a fontdecriptor and rotates it.") (* ;; "1/5/86 JDS. Masterscope claims nobody calls this. Let's find out....") (HELP "ROTATED fonts need to be fixed for NS Chars & New FONTDESCRIPTOR fields") (* (create FONTDESCRIPTOR using  FONTDESC (SETQ CHARACTERBITMAP  (\SFROTATEFONTCHARACTERS  (fetch (FONTDESCRIPTOR  CHARACTERBITMAP) of FONTDESC)  ROTATION)) (SETQ ROTATION ROTATION)  (SETQ \SFOffsets (  \SFFIXOFFSETSAFTERROTATION FONTDESC  ROTATION)) (SETQ FONTCHARSETVECTOR  (\ALLOCBLOCK (ADD1 \MAXCHARSET) T)))) (* ;; "If you uncomment out the code above, remove this comment and the NIL below") NIL]) (\SFROTATECSINFO [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:38") (* ;; "takes a CHARSETINFO and rotates it and produces a rotated equivalent one.") (create CHARSETINFO using CSINFO CHARSETBITMAP _ (\SFROTATEFONTCHARACTERS (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO) ROTATION) OFFSETS _ (\SFROTATECSINFOOFFSETS CSINFO ROTATION]) (\SFROTATEFONTCHARACTERS [LAMBDA (CHARBITMAP ROTATION) (* ; "Edited 22-Sep-87 10:38 by Snow") (* ;;; "rotate a bitmap either 90 or 270 for fonts.") (CASE ROTATION (0 CHARBITMAP) (90 (ROTATE-BITMAP-LEFT CHARBITMAP)) (180 (ROTATE-BITMAP (ROTATE-BITMAP CHARBITMAP))) (270 (ROTATE-BITMAP CHARBITMAP)))]) (\SFFIXOFFSETSAFTERROTATION [LAMBDA (FONTDESC ROTATION) (* ; "Edited 30-Mar-87 20:35 by FS") (* ;; "adjusts offsets in case where rotation turned things around.") (HELP "NEED TO UPDATE THIS FN TO NSCHARS & NEW FONT FIELDS") (* (COND ((EQ ROTATION 270)  (PROG ((OFFSETS (fetch  (FONTDESCRIPTOR \SFOffsets) of  FONTDESC)) (WIDTHS  (fetch (FONTDESCRIPTOR \SFWidths) of  FONTDESC)) (BITMAPHEIGHT  (BITMAPWIDTH (fetch  (FONTDESCRIPTOR CHARACTERBITMAP) of  FONTDESC))) NEWOFFSETS)  (SETQ NEWOFFSETS (COPYARRAY OFFSETS))  (for CHARCODE from 0 to \MAXCHAR do  (SETA NEWOFFSETS CHARCODE  (IDIFFERENCE BITMAPHEIGHT  (IPLUS (ELT OFFSETS CHARCODE)  (ELT WIDTHS CHARCODE)))))  (* ;  "may be some problem with dummy character representation.")  (RETURN NEWOFFSETS)))  (T (fetch (FONTDESCRIPTOR \SFOffsets)  of FONTDESC)))) (* ;; "If you uncomment out the code above, remove this comment and the NIL below") NIL]) (\SFROTATECSINFOOFFSETS [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:36") (* ;  "adjusts offsets in case where rotation turned things around.") (COND ((EQ ROTATION 270) (PROG ((OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (BITMAPHEIGHT (BITMAPWIDTH (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO))) NEWOFFSETS) (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) [for CHARCODE from 0 to \MAXCHAR do (\FSETOFFSET NEWOFFSETS CHARCODE (IDIFFERENCE BITMAPHEIGHT (IPLUS (\FGETOFFSET OFFSETS CHARCODE) (\FGETWIDTH WIDTHS CHARCODE] (* ;  "may be some problem with dummy character representation.") (RETURN NEWOFFSETS))) (T (fetch (CHARSETINFO OFFSETS) of CSINFO]) (\SFMAKECOLOR [LAMBDA (BWCSINFO BACKCOLOR FORECOLOR BITSPERPIXEL) (* kbr%: " 6-Feb-86 18:17") (* ;; "makes a csinfo that has a character bitmap that is colorized.") (PROG (CHARACTERBITMAP COLORCSINFO) [COND ((IMAGESTREAMP BITSPERPIXEL) (OR BACKCOLOR (SETQ BACKCOLOR (DSPBACKCOLOR NIL BITSPERPIXEL))) (OR FORECOLOR (SETQ FORECOLOR (DSPCOLOR NIL BITSPERPIXEL))) (SETQ BITSPERPIXEL (IMAGESTREAMTYPE BITSPERPIXEL] [SETQ BITSPERPIXEL (COND ((NUMBERP BITSPERPIXEL) BITSPERPIXEL) (T (\DISPLAYSTREAMTYPEBPP BITSPERPIXEL] (SETQ BACKCOLOR (COLORNUMBERP BACKCOLOR BITSPERPIXEL)) (SETQ FORECOLOR (COLORNUMBERP FORECOLOR BITSPERPIXEL)) (SETQ CHARACTERBITMAP (COLORIZEBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of BWCSINFO ) BACKCOLOR FORECOLOR BITSPERPIXEL)) (SETQ COLORCSINFO (create CHARSETINFO using BWCSINFO CHARSETBITMAP _ CHARACTERBITMAP)) (RETURN COLORCSINFO]) ) (DEFINEQ (WRITESTRIKEFONTFILE [LAMBDA (FONT CHARSET FILENAME) (* ; "Edited 30-Mar-87 20:25 by FS") (* ;; "Write strike FILE using info in FONT, AND CHARSET number.") (* ;; "This code only works if original file was STRIKE. Otherwise, a new CSINFO is dummied up and it is used instead. So, CSINFO when read in might be different than the one written out.") (PROG (STREAM CSINFO FIRSTCHAR LASTCHAR WIDTHS OFFSETS IMWIDTHS MAXWIDTH RASTERWIDTH LENGTH DUMMYCHAR DUMMYOFFSET DUMMYINDEX WIDTH OFFSET CODE MAXCODE) (SETQ MAXCODE 255) (* ; "Max charcode") (SETQ DUMMYINDEX 256) (* ; "Dummy char marker") (COND ((NOT (FONTP FONT)) (LISPERROR "ILLEGAL ARG" FONT))) (COND ((NULL CHARSET) (SETQ CHARSET 0)) ((NOT (AND (IGEQ CHARSET 0) (ILESSP CHARSET \MAXCHARSET))) (LISPERROR "ILLEGAL ARG" CHARSET))) (SETQ CSINFO (STRIKECSINFO (\GETCHARSETINFO CHARSET FONT T))) (* ;  "Guarantee its a STRIKE font CSINFO.") (COND ((NULL CSINFO) (ERROR "Couldn't find charset " CHARSET))) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (SETQ IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (* ;; "Index 256 contains a dummy width; use it's value to determine missing chars") (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS DUMMYINDEX)) [SETQ FIRSTCHAR (for I from 0 to MAXCODE thereis (NOT (EQ (\FGETOFFSET OFFSETS I) DUMMYOFFSET] [SETQ LASTCHAR (for I from MAXCODE to 0 by -1 thereis (NOT (EQ (\FGETOFFSET OFFSETS I) DUMMYOFFSET] (SETQ DUMMYCHAR (ADD1 LASTCHAR)) [SETQ STREAM (OPENSTREAM FILENAME 'OUTPUT 'NEW '((TYPE BINARY] (* ;; "") (* ;; "STRIKE Header") (* ;; "") (\WOUT STREAM 32768) (\WOUT STREAM FIRSTCHAR) (\WOUT STREAM LASTCHAR) (SETQ MAXWIDTH 0) [for I from 0 to DUMMYINDEX do (SETQ MAXWIDTH (IMAX MAXWIDTH (\FGETWIDTH WIDTHS I] (\WOUT STREAM MAXWIDTH) (* ;; "") (* ;; "STRIKE Body") (* ;; "") (* ;; "Length of body") (SETQ RASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO))) (SETQ LENGTH (IPLUS 8 (IDIFFERENCE LASTCHAR FIRSTCHAR) (ITIMES (fetch (FONTDESCRIPTOR \SFHeight) of FONT) RASTERWIDTH))) (\WOUT STREAM LENGTH) (* ;; "Ascent, Descent, Xoffset (no longer used) and Rasterwidth.") (\WOUT STREAM (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (\WOUT STREAM (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (\WOUT STREAM 0) (* ;  "offset in bits (<0 for kerning, else 0, =FBBox)") (\WOUT STREAM RASTERWIDTH) (* ;; "Bitmap") [\BOUTS STREAM (fetch (BITMAP BITMAPBASE) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) 0 (ITIMES 2 RASTERWIDTH (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO] (* ;; "Offsets") (SETQ CODE 0) (\WOUT STREAM CODE) (for I from FIRSTCHAR to DUMMYCHAR do (SETQ OFFSET (\FGETOFFSET OFFSETS I)) (SETQ WIDTH (\FGETWIDTH WIDTHS I)) [COND ((AND (IEQP OFFSET DUMMYOFFSET) (NOT (IEQP I DUMMYCHAR))) (* ; "CODE stays the same.") ) (T (SETQ CODE (IPLUS CODE WIDTH] (\WOUT STREAM CODE)) (CLOSEF STREAM]) (STRIKECSINFO [LAMBDA (CSINFO) (* ; "Edited 27-Apr-89 13:39 by atm") (* ;; "Returns a STRIKE type font descriptor (EQ WIDTHS IMAGEWIDTHS), cause we know how to write those guys out (they read quicker but display slower). If (EQ WIDTHS IMAGEWIDTHS), just return original.") (PROG (WIDTHS OFFSETS IMWIDTHS OLDBM BMWIDTH BMHEIGHT NEWBM NEWOFFSET NEWWIDTH OLDOFFSET DUMMYOFFSET NEWOFFSETS) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (SETQ IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (if (EQ WIDTHS IMWIDTHS) then (RETURN CSINFO)) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (SETQ OLDBM (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS 256)) (SETQ BMHEIGHT (BITMAPHEIGHT OLDBM)) [SETQ BMWIDTH (for I from 0 to \MAXTHINCHAR sum (if (IEQP DUMMYOFFSET (\FGETOFFSET OFFSETS I)) then 0 else (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) (\FGETWIDTH WIDTHS I] (* ;; "") (* ;; "Initialize new offsets vector") (* ;; "") (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET NEWOFFSETS I 0)) (\FSETOFFSET NEWOFFSETS (ADD1 \MAXTHINCHAR) BMWIDTH) (* ;; "") (* ;; "Adjust bitmap with so width = imagewidth, fill offsets") (* ;; "") (SETQ NEWBM (BITMAPCREATE BMWIDTH BMHEIGHT 1)) (SETQ NEWOFFSET 0) [for I from 0 to 255 do (SETQ OLDOFFSET (\FGETOFFSET OFFSETS I)) (if (IEQP DUMMYOFFSET OLDOFFSET) then (\FSETOFFSET NEWOFFSETS I BMWIDTH) else (\FSETOFFSET NEWOFFSETS I NEWOFFSET) (SETQ NEWWIDTH (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) (\FGETWIDTH WIDTHS I))) (BITBLT OLDBM OLDOFFSET 0 NEWBM NEWOFFSET 0 (\FGETWIDTH IMWIDTHS I) BMHEIGHT 'REPLACE) (SETQ NEWOFFSET (IPLUS NEWOFFSET NEWWIDTH] (* ;; "") (* ;; "Make new CSInfo record withs IMAGEWIDTHS, WIDTHS the same") (* ;; "") (SETQ WIDTHS (COPYALL WIDTHS)) [for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I (IMAX (\FGETWIDTH WIDTHS I) (\FGETIMAGEWIDTH IMWIDTHS I] (RETURN (create CHARSETINFO WIDTHS _ WIDTHS OFFSETS _ NEWOFFSETS IMAGEWIDTHS _ WIDTHS CHARSETBITMAP _ NEWBM YWIDTHS _ (fetch (CHARSETINFO YWIDTHS) of CSINFO) CHARSETASCENT _ (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) CHARSETDESCENT _ (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO]) ) (/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) '((FONTCLASS 0 (BITS . 7)) (FONTCLASS 2 POINTER) (FONTCLASS 4 POINTER) (FONTCLASS 6 POINTER) (FONTCLASS 8 POINTER) (FONTCLASS 10 POINTER)) '12) (/DECLAREDATATYPE 'FONTDESCRIPTOR '(POINTER POINTER POINTER POINTER WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD SIGNEDWORD SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) WORD POINTER POINTER POINTER) '((FONTDESCRIPTOR 0 POINTER) (FONTDESCRIPTOR 2 POINTER) (FONTDESCRIPTOR 4 POINTER) (FONTDESCRIPTOR 6 POINTER) (FONTDESCRIPTOR 8 (BITS . 15)) (FONTDESCRIPTOR 9 (BITS . 15)) (FONTDESCRIPTOR 10 (BITS . 15)) (FONTDESCRIPTOR 11 (BITS . 15)) (FONTDESCRIPTOR 12 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 16 POINTER) (FONTDESCRIPTOR 18 POINTER) (FONTDESCRIPTOR 20 POINTER) (FONTDESCRIPTOR 22 POINTER) (FONTDESCRIPTOR 24 POINTER) (FONTDESCRIPTOR 26 (BITS . 7)) (FONTDESCRIPTOR 27 (BITS . 15)) (FONTDESCRIPTOR 28 POINTER) (FONTDESCRIPTOR 30 POINTER) (FONTDESCRIPTOR 32 POINTER)) '34) (/DECLAREDATATYPE 'CHARSETINFO '(POINTER POINTER POINTER POINTER POINTER WORD WORD POINTER) '((CHARSETINFO 0 POINTER) (CHARSETINFO 2 POINTER) (CHARSETINFO 4 POINTER) (CHARSETINFO 6 POINTER) (CHARSETINFO 8 POINTER) (CHARSETINFO 10 (BITS . 15)) (CHARSETINFO 11 (BITS . 15)) (CHARSETINFO 12 POINTER)) '14) (ADDTOVAR SYSTEMRECLST (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) (OTHERDEVICEFONTPROPS POINTER) (FONTSCALE POINTER) (\SFFACECODE BITS 8) (FONTAVGCHARWIDTH WORD) (FONTIMAGEWIDTHS POINTER) (FONTCHARSETVECTOR POINTER) (FONTEXTRAFIELD2 POINTER))) (DATATYPE CHARSETINFO (WIDTHS OFFSETS IMAGEWIDTHS CHARSETBITMAP YWIDTHS (CHARSETASCENT WORD) (CHARSETDESCENT WORD) LEFTKERN)) ) (RPAQ? \FONTSINCORE ) (RPAQ? \DEFAULTDEVICEFONTS ) (RPAQ? \UNITWIDTHSVECTOR ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DISPLAYFONTDIRECTORIES \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\UNITWIDTHSVECTOR) ) (DECLARE%: EVAL@COMPILE (RPAQQ NORUNCODE 255) (CONSTANTS (NORUNCODE 255)) ) (* "FOLLOWING DEFINITIONS EXPORTED") (DEFOPTIMIZER FONTPROP (&REST ARGS) (SELECTQ (AND (EQ (CAADR ARGS) 'QUOTE) (CADADR ARGS)) (ASCENT (LIST 'FONTASCENT (CAR ARGS))) (DESCENT (LIST 'FONTDESCENT (CAR ARGS))) (HEIGHT (LIST 'FONTHEIGHT (CAR ARGS))) 'IGNOREMACRO)) (* "END EXPORTED DEFINITIONS") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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 _ 'MEDIUM SLOPE _ 'REGULAR EXPANSION _ '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)) ) (/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) '((FONTCLASS 0 (BITS . 7)) (FONTCLASS 2 POINTER) (FONTCLASS 4 POINTER) (FONTCLASS 6 POINTER) (FONTCLASS 8 POINTER) (FONTCLASS 10 POINTER)) '12) (/DECLAREDATATYPE 'FONTDESCRIPTOR '(POINTER POINTER POINTER POINTER WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD SIGNEDWORD SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) WORD POINTER POINTER POINTER) '((FONTDESCRIPTOR 0 POINTER) (FONTDESCRIPTOR 2 POINTER) (FONTDESCRIPTOR 4 POINTER) (FONTDESCRIPTOR 6 POINTER) (FONTDESCRIPTOR 8 (BITS . 15)) (FONTDESCRIPTOR 9 (BITS . 15)) (FONTDESCRIPTOR 10 (BITS . 15)) (FONTDESCRIPTOR 11 (BITS . 15)) (FONTDESCRIPTOR 12 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 16 POINTER) (FONTDESCRIPTOR 18 POINTER) (FONTDESCRIPTOR 20 POINTER) (FONTDESCRIPTOR 22 POINTER) (FONTDESCRIPTOR 24 POINTER) (FONTDESCRIPTOR 26 (BITS . 7)) (FONTDESCRIPTOR 27 (BITS . 15)) (FONTDESCRIPTOR 28 POINTER) (FONTDESCRIPTOR 30 POINTER) (FONTDESCRIPTOR 32 POINTER)) '34) (/DECLAREDATATYPE 'CHARSETINFO '(POINTER POINTER POINTER POINTER POINTER WORD WORD POINTER) '((CHARSETINFO 0 POINTER) (CHARSETINFO 2 POINTER) (CHARSETINFO 4 POINTER) (CHARSETINFO 6 POINTER) (CHARSETINFO 8 POINTER) (CHARSETINFO 10 (BITS . 15)) (CHARSETINFO 11 (BITS . 15)) (CHARSETINFO 12 POINTER)) '14) (DECLARE%: EVAL@COMPILE (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 () `(CL:MAKE-ARRAY (IPLUS \MAXTHINCHAR 3) :ELEMENT-TYPE '(SIGNED-BYTE 16) :INITIAL-ELEMENT 0)) (DEFMACRO \FSETLEFTKERN (LEFTKERNBLOCK INDEX KERNVALUE) `(CL:SETF (CL:AREF ,LEFTKERNBLOCK ,INDEX) ,KERNVALUE)) (DEFMACRO \FGETLEFTKERN (LEFTKERNBLOCK CHAR8CODE) `(CL:AREF ,LEFTKERNBLOCK ,CHAR8CODE)) (DECLARE%: EVAL@COMPILE (RPAQQ \MAXNSCHAR 65535) (CONSTANTS (\MAXNSCHAR 65535)) ) (* "END EXPORTED DEFINITIONS") ) (* ; "NS Character specific code") (DEFINEQ (\CREATECHARSET [LAMBDA (CHARSET FONT NOSLUG?) (* ; "Edited 8-May-93 23:42 by rmk:") (* ; "Edited 4-Dec-92 11:43 by jds") (* ;; "Creates and returns the CHARSETINFO for charset CHARSET in fontdesc FONT, installing it in fonts FONTCHARSETVECTOR") (* ;  "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") (DECLARE (GLOBALVARS \DISPLAYSTREAMTYPES)) (AND (IGREATERP CHARSET \MAXCHARSET) (\ILLEGAL.ARG CHARSET)) (PROG [CSINFO (CREATEFN (COND ((FMEMB (FONTPROP FONT 'DEVICE) \DISPLAYSTREAMTYPES) (FUNCTION \CREATECHARSET.DISPLAY)) (T (CADR (ASSOC 'CREATECHARSET (CDR (ASSOC (FONTPROP FONT 'DEVICE) IMAGESTREAMTYPES] (* ;; "Create a descriptor of info for that charset, and use it to fill things in.") (COND ([NOT (SETQ CSINFO (APPLY CREATEFN (APPEND (FONTPROP FONT 'DEVICESPEC) (LIST CHARSET FONT NOSLUG?] (* ;  "the create method returned NIL--NOSLUG? must be T.") (RETURN NIL))) (replace \SFAscent of FONT with (IMAX (fetch \SFAscent of FONT) (SIGNED (fetch CHARSETASCENT of CSINFO) 16))) (replace \SFDescent of FONT with (IMAX (fetch \SFDescent of FONT) (SIGNED (ffetch CHARSETDESCENT of CSINFO) 16))) (replace \SFHeight of FONT with (IPLUS (fetch \SFAscent of FONT) (ffetch \SFDescent of FONT))) (* ;  "jtm: height = ascent + descent, not (IMAX fontHeight charSetHeight)") (RETURN (\SETCHARSETINFO (ffetch FONTCHARSETVECTOR of FONT) CHARSET CSINFO]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS CHARSETERRORFLG) ) (RPAQ? DISPLAYFONTCOERCIONS NIL) (RPAQ? MISSINGCHARSETDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)) ((TERMINAL 6) (MODERN 6)) ((TERMINAL 8) (MODERN 8)) ((TERMINAL 10) (MODERN 10)) ((TERMINAL 12) (MODERN 12)))) (RPAQ? MISSINGDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)))) (RPAQ? CHARSETERRORFLG NIL) (RPAQ? \DEFAULTCHARSET 0) (DEFINEQ (\FONTRESETCHARWIDTHS [LAMBDA (CSINFO FIRSTCHAR LASTCHAR) (* AJB " 6-Dec-85 14:42") (* ;  "sets the widths array from the offsets array") (PROG ((mincharcode FIRSTCHAR) (maxcharcode LASTCHAR) (offsets (fetch (CHARSETINFO OFFSETS) of CSINFO)) (widths (fetch (CHARSETINFO WIDTHS) of CSINFO)) left right charoffset dummycharoffset dummycharwidth) (SETQ dummycharoffset (\FGETOFFSET offsets (ADD1 maxcharcode))) (SETQ dummycharwidth (IDIFFERENCE (\FGETOFFSET offsets (IPLUS maxcharcode 2)) dummycharoffset)) [for charcode from 0 to \MAXCHAR do (COND ((OR (ILESSP charcode mincharcode) (IGREATERP charcode maxcharcode)) (\FSETOFFSET offsets charcode dummycharoffset) (\FSETWIDTH widths charcode dummycharwidth)) (T (SETQ left (\FGETWIDTH offsets charcode)) (SETQ right (\FGETWIDTH offsets (ADD1 charcode))) (COND ((EQ left right) (\FSETOFFSET offsets charcode dummycharoffset) (\FSETWIDTH widths charcode dummycharwidth)) (T (\FSETWIDTH widths charcode (IDIFFERENCE right left] (\FSETWIDTH widths (ADD1 \MAXCHAR) dummycharwidth) (\FSETOFFSET offsets (ADD1 \MAXCHAR) dummycharoffset]) ) (DECLARE%: DONTEVAL@LOAD (RPAQ? DISPLAYFONTEXTENSIONS 'DISPLAYFONT) (RPAQ? DISPLAYFONTDIRECTORIES '({DSK}/USR/LOCAL/LDE/FONTS/DISPLAY/PRESENTATION/ {dsk}/usr/local/lde/fonts/display/publishing/)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \FGETCHARIMAGEWIDTH MACRO (OPENLAMBDA (FONT CHARCODE) (\FGETWIDTH (ffetch (CHARSETINFO IMAGEWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) FONT)) (\CHAR8CODE CHARCODE)))) (PROGN (PUTPROPS \GETFONTDESC DMACRO [X (COND ((CDR X) (CONS '\COERCEFONTDESC X)) (T `(\DTEST ,(CAR X) 'FONTDESCRIPTOR]) (PUTPROPS \GETFONTDESC MACRO (= . \COERCEFONTDESC))) (PUTPROPS \SETCHARSETINFO MACRO ((CHARSETVECTOR CHARSET CSINFO) (\RPLPTR CHARSETVECTOR (UNFOLD CHARSET 2) CSINFO))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (PUTPROPS FONT FILETYPE :FAKE-COMPILE-FILE) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FONTCOPY) ) (PUTPROPS FONT COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1999)) (DECLARE%: DONTCOPY (FILEMAP (NIL (8608 18127 (CHARWIDTH 8618 . 9403) (CHARWIDTHY 9405 . 10775) (STRINGWIDTH 10777 . 11870 ) (\CHARWIDTH.DISPLAY 11872 . 12285) (\STRINGWIDTH.DISPLAY 12287 . 12711) (\STRINGWIDTH.GENERIC 12713 . 18125)) (18128 24510 (DEFAULTFONT 18138 . 19971) (FONTCLASS 19973 . 22135) (FONTCLASSUNPARSE 22137 . 23036) (FONTCLASSCOMPONENT 23038 . 23547) (SETFONTCLASSCOMPONENT 23549 . 24508)) (25184 37916 ( FONTCREATE 25194 . 34461) (\FONT.SYMBOLMEMB 34463 . 34693) (\FONT.SYMBOLASSOC 34695 . 35853) ( \FONT.COMPARESYMBOL 35855 . 37914)) (37955 42579 (FONTASCENT 37965 . 38133) (FONTDESCENT 38135 . 38404 ) (FONTHEIGHT 38406 . 38592) (FONTPROP 38594 . 42037) (\AVGCHARWIDTH 42039 . 42577)) (42626 55265 ( GETCHARBITMAP 42636 . 45526) (PUTCHARBITMAP 45528 . 53585) (MOVECHARBITMAP 53587 . 55263)) (55266 140192 (FONTCOPY 55276 . 60584) (FONTSAVAILABLE 60586 . 65791) (FONTFILEFORMAT 65793 . 67417) (FONTP 67419 . 67718) (FONTUNPARSE 67720 . 70284) (SETFONTDESCRIPTOR 70286 . 71995) (CHARCODEP 71997 . 72358) (EDITCHAR 72360 . 72789) (\STREAMCHARWIDTH 72791 . 76955) (\UNITWIDTHSVECTOR 76957 . 77320) ( \CREATEDISPLAYFONT 77322 . 78075) (\CREATECHARSET.DISPLAY 78077 . 80993) (\CREATE-REAL-CHARSET.DISPLAY 80995 . 88286) (\BUILDSLUGCSINFO 88288 . 89731) (\SEARCHDISPLAYFONTFILES 89733 . 91666) ( \SEARCHFONTFILES 91668 . 94979) (\FINDFONTFILE 94981 . 96172) (\FONTSYMBOL 96174 . 96824) ( \DEVICESYMBOL 96826 . 97695) (\FONTFACE 97697 . 104887) (\FONTFACE.COLOR 104889 . 111809) ( \FONTFILENAME 111811 . 115226) (\FONTFILENAME.OLD 115228 . 118177) (\FONTFILENAME.NEW 118179 . 120436) (\FONTINFOFROMFILENAME 120438 . 123552) (\FONTINFOFROMFILENAME.OLD 123554 . 125831) (\GETFONTDESC 125833 . 126224) (\COERCEFONTDESC 126226 . 131611) (\LOOKUPFONT 131613 . 132957) (\LOOKUPFONTSINCORE 132959 . 135032) (\READDISPLAYFONTFILE 135034 . 140190)) (141096 158146 (\READSTRIKEFONTFILE 141106 . 145634) (\SFMAKEBOLD 145636 . 148032) (\SFMAKEITALIC 148034 . 150937) (\SFMAKEROTATEDFONT 150939 . 152340) (\SFROTATECSINFO 152342 . 152979) (\SFROTATEFONTCHARACTERS 152981 . 153361) ( \SFFIXOFFSETSAFTERROTATION 153363 . 155502) (\SFROTATECSINFOOFFSETS 155504 . 156773) (\SFMAKECOLOR 156775 . 158144)) (158147 166458 (WRITESTRIKEFONTFILE 158157 . 162998) (STRIKECSINFO 163000 . 166456)) (180718 183574 (\CREATECHARSET 180728 . 183572)) (184660 186412 (\FONTRESETCHARWIDTHS 184670 . 186410 ))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED " 9-Feb-2021 11:39:44" {DSK}larry>ilisp>medley>sources>FONT.;7 189150 changes to%: (VARS FONTCOMS) previous date%: "28-Jun-99 16:29:49" {DSK}larry>ilisp>medley>sources>FONT.;6) (* ; " Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1999, 2021 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT FONTCOMS) (RPAQQ FONTCOMS [ (* ;; "font functions ") (FNS CHARWIDTH CHARWIDTHY STRINGWIDTH \CHARWIDTH.DISPLAY \STRINGWIDTH.DISPLAY \STRINGWIDTH.GENERIC) (FNS DEFAULTFONT FONTCLASS FONTCLASSUNPARSE FONTCLASSCOMPONENT SETFONTCLASSCOMPONENT) [COMS (* ;  "Until we pin down the exact interface") (P (MOVD 'FONTCLASSCOMPONENT 'FONTCOMPONENT) (MOVD 'SETFONTCLASSCOMPONENT 'SETFONTCOMPONENT] [COMS (* ; "MAPPING FOR DOS FILENAMES ") (INITVARS (*DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) (HELVETICA . HV) (TIMESROMAND . TD) (HELVETICAD . HD) (MODERN . MD) (CLASSIC . CL) (GACHA . GC) (TITAN . TI) (LETTERGOTHIC . LG) (BOLDPS . BP) (TERMINAL . TM) (CLASSICTHIN . CT) (HIPPO . HP) (LOGO . LG) (MATH . MA) (OLDENGLISH . OE) (SYMBOL . SY] (COMS (* ;; "Creation: ") (FNS FONTCREATE \FONT.SYMBOLMEMB \FONT.SYMBOLASSOC \FONT.COMPARESYMBOL)) (COMS (* ;; "Property extraction:") (FNS FONTASCENT FONTDESCENT FONTHEIGHT FONTPROP \AVGCHARWIDTH)) (COMS (* ;; "Bitmap editing/manipulation:") (FNS GETCHARBITMAP PUTCHARBITMAP MOVECHARBITMAP)) (FNS FONTCOPY FONTSAVAILABLE FONTFILEFORMAT FONTP FONTUNPARSE SETFONTDESCRIPTOR CHARCODEP EDITCHAR \STREAMCHARWIDTH \UNITWIDTHSVECTOR \CREATEDISPLAYFONT \CREATECHARSET.DISPLAY \CREATE-REAL-CHARSET.DISPLAY \BUILDSLUGCSINFO \SEARCHDISPLAYFONTFILES \SEARCHFONTFILES \FINDFONTFILE \FONTSYMBOL \DEVICESYMBOL \FONTFACE \FONTFACE.COLOR \FONTFILENAME \FONTFILENAME.OLD \FONTFILENAME.NEW \FONTINFOFROMFILENAME \FONTINFOFROMFILENAME.OLD \GETFONTDESC \COERCEFONTDESC \LOOKUPFONT \LOOKUPFONTSINCORE \READDISPLAYFONTFILE) (COMS (* ;; "\FINDFONTFILE \FONTFILENAME \SEARCHFONTFILES \FONTINFOFROMFILENAME are redefined to deal with character-set directories. That behavior is conditioned on the setting of the global variable *USEOLDFONTDIRECTORIES*, T at PARC, maybe NIL most other places. ") (ADDVARS (*OLD-FONT-EXTENSIONS* STRIKE)) (INITVARS (*USEOLDFONTDIRECTORIES* NIL)) (GLOBALVARS *OLD-FONT-EXTENSIONS* *USEOLDFONTDIRECTORIES*) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)") ) (COMS (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)") (INITVARS (CACHEDISPLAYFONTS)) (GLOBALVARS CACHEDISPLAYFONTS) (* ; "STRIKE format file support") (FNS \READSTRIKEFONTFILE \SFMAKEBOLD \SFMAKEITALIC \SFMAKEROTATEDFONT \SFROTATECSINFO \SFROTATEFONTCHARACTERS \SFFIXOFFSETSAFTERROTATION \SFROTATECSINFOOFFSETS \SFMAKECOLOR) (FNS WRITESTRIKEFONTFILE STRIKECSINFO)) (INITRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) (SYSRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) (INITVARS (\FONTSINCORE) (\DEFAULTDEVICEFONTS) (\UNITWIDTHSVECTOR)) (GLOBALVARS DISPLAYFONTDIRECTORIES \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\UNITWIDTHSVECTOR))) (CONSTANTS (NORUNCODE 255)) (EXPORT (OPTIMIZERS FONTPROP)) [DECLARE%: DONTCOPY (EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO) (MACROS FONTASCENT FONTDESCENT FONTHEIGHT \FGETOFFSET \FSETOFFSET \FGETWIDTH \FSETWIDTH \FGETCHARWIDTH \FSETCHARWIDTH \FGETIMAGEWIDTH \FSETIMAGEWIDTH \GETCHARSETINFO \CREATECSINFOELEMENT \CREATEFONTCHARSETVECTOR) (FUNCTIONS \CREATEKERNELEMENT \FSETLEFTKERN \FGETLEFTKERN) (CONSTANTS (\MAXNSCHAR 65535] (COMS (* ; "NS Character specific code") (FNS \CREATECHARSET) (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS CHARSETERRORFLG) (INITVARS (DISPLAYFONTCOERCIONS NIL) [MISSINGCHARSETDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)) ((TERMINAL 6) (MODERN 6)) ((TERMINAL 8) (MODERN 8)) ((TERMINAL 10) (MODERN 10)) ((TERMINAL 12) (MODERN 12] [MISSINGDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN] (CHARSETERRORFLG NIL) (\DEFAULTCHARSET 0))) (FNS \FONTRESETCHARWIDTHS) [DECLARE%: DONTEVAL@LOAD (INITVARS (DISPLAYFONTEXTENSIONS 'DISPLAYFONT) (DISPLAYFONTDIRECTORIES '( {DSK}/USR/LOCAL/LDE/FONTS/DISPLAY/PRESENTATION/ {dsk}/usr/local/lde/fonts/display/publishing/ ] (MACROS \FGETCHARIMAGEWIDTH \GETFONTDESC \SETCHARSETINFO) (LOCALVARS . T) (PROP FILETYPE FONT) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA FONTCOPY]) (* ;; "font functions ") (DEFINEQ (CHARWIDTH [LAMBDA (CHARCODE FONT) (* rmk%: "12-Apr-85 09:46") (* ;  "gets the width of a character code in a font/stream") (OR (\CHARCODEP CHARCODE) (\ILLEGAL.ARG CHARCODE)) (LET (TEMP) (COND ((type? FONTDESCRIPTOR FONT) (\FGETCHARWIDTH FONT CHARCODE)) ((SETQ TEMP (\OUTSTREAMARG FONT T)) (* ;  "NIL font goes thru here--primary output file") (IMAGEOP 'IMCHARWIDTH TEMP TEMP CHARCODE)) (T (\FGETCHARWIDTH (FONTCREATE FONT) CHARCODE]) (CHARWIDTHY [LAMBDA (CHARCODE FONT) (* edited%: "18-Mar-86 19:30") (* ;  "Gets the Y-component of the width of a character code in a font.") (OR (\CHARCODEP CHARCODE) (\ILLEGAL.ARG CHARCODE)) (LET (TEMP WY) (COND ((type? FONTDESCRIPTOR FONT) (SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) FONT))) (COND ((FIXP WY)) (WY (\FGETWIDTH WY (\CHAR8CODE CHARCODE))) (T 0))) ((type? STREAM (SETQ TEMP (\OUTSTREAMARG FONT T))) (* ;  "NIL font goes thru here--primary output file") (IMAGEOP 'IMCHARWIDTHY TEMP TEMP CHARCODE)) (T [SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) (FONTCREATE FONT] (COND ((FIXP WY)) (WY (\FGETWIDTH WY (\CHAR8CODE CHARCODE))) (T 0]) (STRINGWIDTH [LAMBDA (STR FONT FLG RDTBL) (* ; "Edited 8-Jan-88 14:41 by Snow") (* ;; "Returns the width of STR according to FONT") (LET (TEMP) (* ;; "Used in \MAPCHARS") (COND [(type? FONTDESCRIPTOR FONT) (\STRINGWIDTH.GENERIC STR FONT (AND FLG (\GTREADTABLE RDTBL)) (\FGETCHARWIDTH FONT (CHARCODE SPACE] [(AND FONT (SETQ TEMP (\OUTSTREAMARG FONT T))) (* ;  "if you gave something for FONT, coerce it to a stream, and call the stringwidth function of it.") (IMAGEOP 'IMSTRINGWIDTH TEMP TEMP STR (AND FLG (\GTREADTABLE RDTBL] (T (SETQ TEMP (FONTCREATE (OR FONT DEFAULTFONT))) (* ; "NIL font will pass thru here. ie, defaultfont is used to do the stringwidth instead of the font of *standard-output*") (\STRINGWIDTH.GENERIC STR TEMP (AND FLG (\GTREADTABLE RDTBL)) (\FGETCHARWIDTH TEMP (CHARCODE SPACE]) (\CHARWIDTH.DISPLAY [LAMBDA (STREAM CHARCODE) (* rmk%: "12-Apr-85 09:42") (* ;  "gets the width of a character code in a display stream. Need to fix up for spacefactor.") (\FGETCHARWIDTH (ffetch (\DISPLAYDATA DDFONT) of (ffetch IMAGEDATA of STREAM)) CHARCODE]) (\STRINGWIDTH.DISPLAY [LAMBDA (STREAM STR RDTBL) (* ; "Edited 3-Apr-87 12:07 by jop") (* ;; "Returns the width of for the current font/spacefactor in STREAM.") (LET ((DD (ffetch IMAGEDATA of STREAM))) (\STRINGWIDTH.GENERIC STR (ffetch (\DISPLAYDATA DDFONT) of DD) RDTBL (ffetch DDSPACEWIDTH of DD]) (\STRINGWIDTH.GENERIC [LAMBDA (STR FONT RDTBL SPACEWIDTH) (* ; "Edited 3-Apr-87 13:47 by jop") (* ;; "Returns the width of STR with SPACEWIDTH for the width of spaces. RDTBL has already been coerced, so no FLG is needed ") (* ;; "This is cloned in \STRINGWIDTH.HCPYDISPLAYAUX by straight substitution -- (PUTDEF (QUOTE \STRINGWIDTH.HCPYDISPLAYAUX) (QUOTE FNS) (SUBLIS (QUOTE ((WIDTHS . IMAGEWIDTHS) (\FGETWIDTH . \FGETIMAGEWIDTH) (\FGETCHARWIDTH . \FGETCHARIMAGEWIDTH))) (GETDEF (QUOTE \STRINGWIDTH.GENERIC))))") (* ;; "\MAPPNAME uses WIDTHSBASE CSET TOTALWIDTH FONT SPACEWIDTH free, so these become special in bytecompiler") (PROG NIL [COND [(LITATOM STR) (if RDTBL then (GO SLOW) else (RETURN (for C WIDTHSBASE CSET inatom STR sum [COND ((NEQ CSET (\CHARSET C)) (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT ] (COND ((EQ C (CHARCODE SPACE)) SPACEWIDTH) (T (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C] ((STRINGP STR) (RETURN (LET ((TOTAL 0) ESC ESCWIDTH WIDTHSBASE CSET) [COND (RDTBL (* ;  "Count delimiting quotes and internal escapes") (SETQ TOTAL (UNFOLD (\FGETCHARWIDTH FONT (CHARCODE %")) 2)) (SETQ ESC (fetch (READTABLEP ESCAPECHAR) of RDTBL)) (SETQ ESCWIDTH (\FGETCHARWIDTH FONT ESC] [for C instring STR do [COND ((NEQ (\CHARSET C) CSET) (* ;  "Get the widths vector for this character set") (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT] (add TOTAL (COND ((EQ C (CHARCODE SPACE)) SPACEWIDTH) (T (IPLUS (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C)) (COND ((AND RDTBL (OR (EQ C (CHARCODE %")) (EQ C ESC))) (* ; "String char must be escaped") ESCWIDTH) (T 0] TOTAL] SLOW (* ; "Do the general case here") (RETURN (LET ((TOTALWIDTH 0) WIDTHSBASE CSET (FONT FONT) (SPACEWIDTH SPACEWIDTH)) (DECLARE (SPECVARS TOTALWIDTH WIDTHSBASE CSET FONT SPACEWIDTH)) (\MAPPNAME [FUNCTION (LAMBDA (DUMMY CC) (add TOTALWIDTH (COND ((EQ CC (CHARCODE SPACE)) SPACEWIDTH) ((EQ CSET (\CHARSET CC)) (\FGETWIDTH WIDTHSBASE (\CHAR8CODE CC))) (T (SETQ CSET (\CHARSET CC)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT))) (\FGETWIDTH WIDTHSBASE (\CHAR8CODE CC] STR RDTBL RDTBL *PRINT-LEVEL* *PRINT-LENGTH*) TOTALWIDTH]) ) (DEFINEQ (DEFAULTFONT [LAMBDA (DEVICE FONT NOERRORFLG) (* ; "Edited 28-Jul-88 13:15 by rmk:") (* ; "Edited 24-Mar-87 14:41 by FS") (* ;; "Returns the default font for an image type. Really only needed to guarantee validity of the display default font for system critical routines, in case the user has smashed the variable DEFAULTFONT. Note that SETFONTCLASSCOMPONENT and FONTCLASS guarantee that the display component is either NIL or a fontdescriptor.") (* ;; "FS- If FONT provided set the font descriptor. Do not bother to check if NOERRORFLG is NEW. (old code had (AND FONT (EQ NOERRORFLG 'NEW)))") [OR (type? FONTCLASS DEFAULTFONT) (SETQ DEFAULTFONT (FONTCLASS 'DEFAULTFONT] (if FONT then (* ;; "FS- Not clear the fontclass should be smashed, perhaps instead should make a new FONTCLASS and then rebind DEFAULTFONT. Leaving alone for histerical reasons") (SETFONTCLASSCOMPONENT DEFAULTFONT DEVICE FONT) else (* ;; "The code below (not mine!) is messy but is correct (unless weirdness pops up because of deep recursion).") (COND ((\COERCEFONTDESC DEFAULTFONT DEVICE T)) (NOERRORFLG NIL) ((EQ (\DEVICESYMBOL DEVICE T) 'DISPLAY) (* ;; "If getting for the display and the font can't be found perhaps because of garbage in the display field of the DEFAULTFONTCLASS, then the system-guaranteed displayfont. Otherwise, cause the error in the re-coercion. Can never tell when DEVICE is just a symbol.") \GUARANTEEDDISPLAYFONT) ((\COERCEFONTDESC DEFAULTFONT DEVICE]) (FONTCLASS [LAMBDA (NAME FONTLIST CREATEFORDEVICES) (* jds " 9-Sep-86 18:49") (* ;; "This builds D style font classes, which are datatypes containing entries for the various known devices.") (* ;; "Don't actually set up the for devices not inside CREATEFORDEVICES on the theory that any given user presumably doesn't want all the fonts for all the devices. We wait until he actually asks for the font or the fontmaparray, at which point we note that the fields don't contain FD's, so we then apply FONTCREATE. The actual coercion and caching is done inside \COERCEFONTDESC. However, so as to prevent display crashes, if a display component is specified, we always do the fontcreate before we stick it in.") (PROG (F FC FL) (SETQ FL FONTLIST) [SETQ FC (create FONTCLASS FONTCLASSNAME _ NAME PRETTYFONT# _ (OR (FIXP (pop FL)) 1) DISPLAYFD _ (AND (SETQ F (pop FL)) (FONTCREATE F NIL NIL NIL 'DISPLAY)) PRESSFD _ (pop FL) INTERPRESSFD _ (pop FL) OTHERFDS _ (for FSPEC in FL collect (OR (AND (LISTP FSPEC) (ATOM (CAR FSPEC)) (CAR FSPEC)) (ERROR "illegal font class specification" (LIST NAME FONTLIST))) (* ;  "Copy the alist entry so it can be smashed in \COERCEFONTDESC") (CONS (CAR FSPEC) (CAR (LISTP (CDR FSPEC] (for D inside CREATEFORDEVICES do (FONTCREATE FC NIL NIL NIL D)) (RETURN FC]) (FONTCLASSUNPARSE [LAMBDA (FONTCLASS DEVICE FONT NOERRORFLG) (* jds "24-Jan-86 11:58") (* ;  "Given a font class, unparse it to a form that might be reparsable") (APPEND (LIST (fetch (FONTCLASS FONTCLASSNAME) of FONTCLASS) (fetch (FONTCLASS PRETTYFONT#) of FONTCLASS) (FONTUNPARSE (ffetch (FONTCLASS DISPLAYFD) of FONTCLASS)) (FONTUNPARSE (ffetch (FONTCLASS PRESSFD) of FONTCLASS)) (FONTUNPARSE (ffetch (FONTCLASS INTERPRESSFD) of FONTCLASS))) (for X in (fetch (FONTCLASS OTHERFDS) of FONTCLASS) collect (LIST (CAR X) (FONTUNPARSE (CDR X]) (FONTCLASSCOMPONENT [LAMBDA (FONTCLASS DEVICE FONT NOERRORFLG) (* rmk%: "14-Sep-84 19:34") (PROG1 (FONTCREATE FONTCLASS NIL NIL NIL DEVICE NOERRORFLG) (* ;  "This works its way down to \COERCEFONTDESC, where it needs to be done quickly") (AND FONT (SETQ FONT (FONTCREATE FONT NIL NIL NIL DEVICE NOERRORFLG)) (SETFONTCLASSCOMPONENT FONTCLASS DEVICE FONT)))]) (SETFONTCLASSCOMPONENT [LAMBDA (FONTCLASS DEVICE FONT) (* ; "Edited 29-Aug-91 12:20 by jds") (PROG ((NEWFONT (FONTCREATE FONT NIL NIL NIL DEVICE))) (* ;; "replaces will barf if FONTCLASS is not a fontclass") (SELECTQ (SETQ DEVICE (FONTPROP NEWFONT 'DEVICE)) (DISPLAY (replace (FONTCLASS DISPLAYFD) of FONTCLASS with NEWFONT)) (INTERPRESS (replace (FONTCLASS INTERPRESSFD) of FONTCLASS with NEWFONT )) (PRESS (replace (FONTCLASS PRESSFD) of FONTCLASS with NEWFONT)) (RPLACD [OR (SASSOC DEVICE (fetch (FONTCLASS OTHERFDS) of FONTCLASS)) (CAR (push (fetch (FONTCLASS OTHERFDS) of FONTCLASS) (CONS DEVICE] NEWFONT)) (RETURN NEWFONT]) ) (* ; "Until we pin down the exact interface") (MOVD 'FONTCLASSCOMPONENT 'FONTCOMPONENT) (MOVD 'SETFONTCLASSCOMPONENT 'SETFONTCOMPONENT) (* ; "MAPPING FOR DOS FILENAMES ") (RPAQ? *DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) (HELVETICA . HV) (TIMESROMAND . TD) (HELVETICAD . HD) (MODERN . MD) (CLASSIC . CL) (GACHA . GC) (TITAN . TI) (LETTERGOTHIC . LG) (BOLDPS . BP) (TERMINAL . TM) (CLASSICTHIN . CT) (HIPPO . HP) (LOGO . LG) (MATH . MA) (OLDENGLISH . OE) (SYMBOL . SY))) (* ;; "Creation: ") (DEFINEQ (FONTCREATE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE NOERRORFLG CHARSET) (* ; "Edited 10-Oct-88 09:53 by rmk:") (* ; "Edited 28-Jul-88 14:43 by rmk:") (* ; "Edited 10-Nov-87 18:08 by FS") (* ;; "Create a font descriptor for the specified font. If NOERRORFLG, return NIL if the font doesn't exist; otherwise cause an error.") (* ;; "Cache and fonts.widths traffic in uppercase only.") (* ;; "character set is optional and defaults to \DEFAULTCHARSET (0 in our world)") (DECLARE (GLOBALVARS IMAGESTREAMTYPES \DEFAULTCHARSET)) (PROG (FONTX (CHSET (OR CHARSET \DEFAULTCHARSET))) (RETURN (COND ((LISTP FAMILY) (SELECTQ (CAR FAMILY) (FONT (SETQ FONTX (CDR FAMILY))) (CLASS (COND ((LITATOM (CADR FAMILY)) (* ; "litatom class name") (RETURN (FONTCLASS (CADR FAMILY) (CDDR FAMILY) DEVICE))) (T (* ;  "Allows for a font named CLASS--distinguished cause its size is not a litatom") (SETQ FONTX FAMILY)))) (SETQ FONTX FAMILY)) (FONTCREATE (CAR FONTX) (OR (CADR FONTX) SIZE) (OR (CADDR FONTX) FACE) (OR (CADDDR FONTX) ROTATION) (OR (CADR (CDDDR FONTX)) DEVICE) NOERRORFLG CHSET)) ([SETQ FONTX (COND ((type? FONTDESCRIPTOR FAMILY) FAMILY) ((NULL FAMILY) (DEFAULTFONT DEVICE)) ((type? FONTCLASS FAMILY) (* ;; "We know that this won't attempt a cyclic fontcreate in \COERCEFONTDESC, because we are passing a known class. Unless NOERROFLG, an error will be caused on the actual device font if it can't be found.") (\COERCEFONTDESC FAMILY DEVICE NOERRORFLG)) ((OR (IMAGESTREAMP FAMILY) (type? WINDOW FAMILY)) (DSPFONT NIL FAMILY] (* ;;  "FAMILY was a spec for a font descriptor, use it and extend it by the other args.") (COND ((OR SIZE FACE ROTATION DEVICE) (FONTCREATE (FONTPROP FONTX 'FAMILY) (OR SIZE (FONTPROP FONTX 'SIZE)) (OR FACE (FONTPROP FONTX 'FACE)) (OR ROTATION (FONTPROP FONTX 'ROTATION)) (OR DEVICE (FONTPROP FONTX 'DEVICE)) NOERRORFLG)) (T FONTX))) (T (PROG (FONTFACE (DEV DEVICE)) RETRY [OR (LITATOM FAMILY) (COND (NOERRORFLG (RETURN)) (T (LISPERROR "ARG NOT LITATOM" FAMILY T] [OR (AND (FIXP SIZE) (IGREATERP SIZE 0)) (COND (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG SIZE] (COND ((NULL ROTATION) (SETQ ROTATION 0)) ((AND (FIXP ROTATION) (IGEQ ROTATION 0))) (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG ROTATION))) [SETQ DEV (COND ((NULL DEVICE) 'DISPLAY) ((AND (LITATOM DEVICE) (NEQ DEVICE T)) (* ; "Maybe wrong case or package, but we bet it's OK and defer expensive coercion until we've failed.") DEV) ((SETQ DEV (\GETSTREAM DEVICE 'OUTPUT T)) (* ;  "T coerces here to primary output") (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of DEV))) ((STRINGP DEVICE) (MKATOM (U-CASE DEVICE))) (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG DEVICE] (* ; "DEV is now guanteed litatom") NEWDEV (* ;  "Check after device since it is device-dependent") (SETQ FONTFACE (OR (\FONTFACE FACE NOERRORFLG DEV) (RETURN NIL))) (* ; "Don't truly coerce to \FONTSYMBOL or \DEVICESYMBOL until we've had a shot at the font cache, since re-interning atoms is so expensive") [RETURN (COND ((\LOOKUPFONT FAMILY SIZE FONTFACE ROTATION DEV)) [(SETQ FONTX (CDR (ASSOC DEV IMAGESTREAMTYPES))) (* ;; "Device is valid, font just doesn't exist. FONTFACE, DEV already canonical. Make FAMILY so, so that each imagestream type doesn't have to.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (COND ((SETQ FONTX (APPLY* (OR (CADR (ASSOC 'FONTCREATE FONTX) ) (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION DEV CHSET)) (* ;; "default creation case. Use fontcreate method from device, build a fontdescriptor and use setfontdescriptor to install it.") (* ;; "OBSOLETEd by the CHARSETINFO code (OR (ffetch FONTIMAGEWIDTHS of FONTX) (freplace FONTIMAGEWIDTHS of FONTX with (ffetch \SFWidths of FONTX)))") (* ;;  "the widths fields in the fontdescriptor are obsolete, and shoudln't be updated here.") (* ;; "We should probably force all device implementations to obey these conventions, then remove these generic updates") (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONTX with (\AVGCHARWIDTH FONTX)) (SETFONTDESCRIPTOR FAMILY SIZE FONTFACE ROTATION DEV FONTX)) (T (GO NOTFOUND] ((NEQ DEV (SETQ DEV (U-CASE DEV))) (* ;; "We didn't recognize the device, so check to see whether coercion to U-CASE IL changes anything. Could be slow, but we're heading for an error.") (GO NEWDEV)) (T (GO NOTFOUND] NOTFOUND (COND (NOERRORFLG (RETURN NIL)) (T (ERROR "FONT NOT FOUND (coerced to)" (LIST FAMILY SIZE FONTFACE ROTATION DEV)) (GO RETRY]) (\FONT.SYMBOLMEMB [LAMBDA (USERINPUT LIST) (* ; "Edited 7-Feb-89 15:47 by jds") (for X on LIST when (\FONT.COMPARESYMBOL USERINPUT (CAR X)) do (RETURN X]) (\FONT.SYMBOLASSOC [LAMBDA (USERINPUT LIST) (* ; "Edited 28-Jul-88 16:56 by rmk:") (* ; "Edited 28-Jul-88 15:15 by rmk:") (* ; "Edited 28-Jul-88 15:03 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 28-Jul-88 14:16 by rmk:") (for X FIRSTC (NC _ (NCHARS USERINPUT)) in LIST first (SETQ FIRSTC (CHCON1 USERINPUT)) [if (AND (IGEQ FIRSTC (CHARCODE a)) (ILEQ FIRSTC (CHARCODE z))) then (SETQ FIRSTC (IDIFFERENCE FIRSTC (IDIFFERENCE (CHARCODE a) (CHARCODE A] when (AND (EQ NC (NCHARS (CAR X))) (EQ FIRSTC (CHCON1 (CAR X))) (\FONT.COMPARESYMBOL USERINPUT (CAR X) NC FIRSTC)) do (RETURN X]) (\FONT.COMPARESYMBOL [LAMBDA (USERINPUT KEY INPUTNC INPUTFIRSTC) (* ;  "Edited 24-May-93 16:45 by sybalsky:mv:envos") (* ;; " An open coded case- and package-insensitive comparison of atom pnames, assuming that KEY is already upper-case but USERINPUT may not be. Maybe there is a simple function that does this.") (* ;; "INPUTNC and INPUTFIRSTC can be passed in if they are common to lots of calls") (COND ((AND (LITATOM USERINPUT) (EQ [CL:AREF *PACKAGE-FROM-INDEX* (fetch (PNAMECELL PACKAGEINDEX) of (PROGN (\PNAMECELL USERINPUT] *INTERLISP-PACKAGE*)) (* ;; "If the user's symbol is in the IL package (which is where all the KEYs are), we can use EQ, which is MUCH faster.") (OR (EQ USERINPUT KEY) (EQ (U-CASE USERINPUT) KEY))) (T (* ;; "Otherwise, we do the comparison character by character.") (AND (EQ (OR INPUTNC (NCHARS USERINPUT)) (NCHARS KEY)) [COND (INPUTFIRSTC (EQ INPUTFIRSTC (CHCON1 KEY))) ((EQ (SETQ INPUTFIRSTC (CHCON1 USERINPUT)) (CHCON1 KEY))) ((AND (IGEQ INPUTFIRSTC (CHARCODE a)) (ILEQ INPUTFIRSTC (CHARCODE z))) (EQ (IDIFFERENCE INPUTFIRSTC (IDIFFERENCE (CHARCODE a) (CHARCODE A))) (CHCON1 KEY] (for CHAR1 inatom USERINPUT as CHAR2 inatom KEY always (OR (EQ CHAR1 CHAR2) (AND (IGEQ CHAR1 (CHARCODE a)) (ILEQ CHAR1 (CHARCODE z)) (EQ CHAR2 (IPLUS CHAR1 (CONSTANT (IDIFFERENCE (CHARCODE A) (CHARCODE a]) ) (* ;; "Property extraction:") (DEFINEQ (FONTASCENT [LAMBDA (FONTSPEC) (* lmm "19-NOV-82 00:23") (ffetch \SFAscent of (\GETFONTDESC FONTSPEC]) (FONTDESCENT [LAMBDA (FONTSPEC) (* lmm "19-NOV-82 00:24") (* ; "See comment in FONTASCENT") (ffetch \SFDescent of (\GETFONTDESC FONTSPEC]) (FONTHEIGHT [LAMBDA (FONTSPEC) (* kbr%: " 9-Jan-86 18:29") (fetch (FONTDESCRIPTOR \SFHeight) of (\GETFONTDESC FONTSPEC]) (FONTPROP [LAMBDA (FONT PROP) (* kbr%: "13-May-85 22:36") (SETQ FONT (\GETFONTDESC FONT)) (SELECTQ PROP (HEIGHT (ffetch \SFHeight of FONT)) (ASCENT (ffetch \SFAscent of FONT)) (DESCENT (ffetch \SFDescent of FONT)) (FAMILY (ffetch FONTFAMILY of FONT)) (SIZE (ffetch FONTSIZE of FONT)) (FACE (COPY (ffetch FONTFACE of FONT))) (WEIGHT (ffetch WEIGHT of (ffetch FONTFACE of FONT))) (SLOPE (ffetch SLOPE of (ffetch FONTFACE of FONT))) (EXPANSION (ffetch EXPANSION of (ffetch FONTFACE of FONT))) (FORECOLOR (ffetch FORECOLOR of (ffetch FONTFACE of FONT))) (BACKCOLOR (ffetch BACKCOLOR of (ffetch FONTFACE of FONT))) (ROTATION (ffetch ROTATION of FONT)) (DEVICE (ffetch FONTDEVICE of FONT)) (SPEC (LIST (ffetch FONTFAMILY of FONT) (ffetch FONTSIZE of FONT) (COPY (ffetch FONTFACE of FONT)) (ffetch ROTATION of FONT) (ffetch FONTDEVICE of FONT))) (DEVICESPEC (* ;  "DEVICE fields are for communicating coercions to the particular printing device") [COND ((ffetch FONTDEVICESPEC of FONT) (COPY (ffetch FONTDEVICESPEC of FONT))) (T (FONTPROP FONT 'SPEC]) (DEVICEFACE [COPY (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICESLOPE [fetch SLOPE of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICEWEIGHT [fetch WEIGHT of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICEEXPANSION [fetch EXPANSION of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICESIZE (COND ((ffetch FONTDEVICESPEC of FONT) (CADR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTSIZE of FONT)))) (DEVICEFAMILY (COND ((ffetch FONTDEVICESPEC of FONT) (CAR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFAMILY of FONT)))) (SCALE (ffetch FONTSCALE of FONT)) (\ILLEGAL.ARG PROP]) (\AVGCHARWIDTH [LAMBDA (FONT) (* rmk%: "27-Nov-84 18:40") (* ;; "Returns the average width of a character, to be used in units-to-characters approximations, as in fixing the linelength") (PROG ((W (CHARWIDTH (CHARCODE A) FONT))) (RETURN (COND ((NEQ 0 W) W) ([NEQ 0 (SETQ W (FIXR (FTIMES 0.6 (FONTPROP FONT 'HEIGHT] W) (T 1]) ) (* ;; "Bitmap editing/manipulation:") (DEFINEQ (GETCHARBITMAP [LAMBDA (CHARCODE FONT) (* ; "Edited 26-Apr-89 21:49 by atm") (* ;  "returns a bitmap of the character CHARCODE from the font descriptor FONTDESC.") (COND ((OR (CHARCODEP CHARCODE) (EQ CHARCODE 256)) (* ;  "bitmap for char 256 is what gets printed if char not found") ) ((OR (STRINGP CHARCODE) (LITATOM CHARCODE)) (* ;  "For strings & litatoms, take the first character") (SETQ CHARCODE (CHCON1 CHARCODE))) ((TYPEP CHARCODE 'CL:CHARACTER) (* ;  "For common-lisp CHARACTERs, convert it to the char code first.") (SETQ CHARCODE (CL:CHAR-INT CHARCODE))) (T (\ILLEGAL.ARG CHARCODE))) (PROG (CBM (FONTDESC (\GETFONTDESC FONT)) CSINFO CWDTH CHGHT) (* ;; "fetch the csinfo for the character set of this character. Bitmaps and widths must be fetched from it") (SETQ CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) FONTDESC)) (* ;; "(\\fgetwidth (|fetch| (charsetinfo widths) |of| csinfo) (\\char8code charcode))") [SETQ CBM (BITMAPCREATE [SETQ CWDTH (if (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) then (\FGETIMAGEWIDTH (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) (\CHAR8CODE CHARCODE)) else (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) (\CHAR8CODE CHARCODE] (SETQ CHGHT (FONTPROP FONTDESC 'HEIGHT)) (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO] (BITBLT (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO) (\FGETOFFSET (fetch (CHARSETINFO OFFSETS) of CSINFO) (\CHAR8CODE CHARCODE)) 0 CBM 0 0 CWDTH CHGHT) (RETURN CBM]) (PUTCHARBITMAP [LAMBDA (CHARCODE FONT NEWCHARBITMAP NEWCHARDESCENT) (* ; "Edited 27-Apr-89 11:19 by atm") (* ;; "stores the bitmap NEWCHARBITMAP as the character CHARCODE from the font descriptor FONTDESC. If NEWCHARDESCENT is specified, it is the descent of the new bitmap, and things may be moved to accomodate it.") (OR (TYPENAMEP NEWCHARBITMAP 'BITMAP) (\ILLEGAL.ARG NEWCHARBITMAP)) (COND ((CHARCODEP CHARCODE)) ((OR (STRINGP CHARCODE) (LITATOM CHARCODE)) (SETQ CHARCODE (CHCON1 CHARCODE))) (T (\ILLEGAL.ARG CHARCODE))) (PROG* ((FONTDESC (\GETFONTDESC FONT)) (CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) FONTDESC)) (CDESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (CASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (CHEIGHT (IPLUS CDESCENT CASCENT)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (CIMWIDTH (if IMWIDTHS then (\FGETIMAGEWIDTH IMWIDTHS (\CHAR8CODE CHARCODE)) else NIL)) (CWIDTH (OR CIMWIDTH (CHARWIDTH CHARCODE FONTDESC))) (FONTBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (OFWIDTH (fetch (BITMAP BITMAPWIDTH) of FONTBITMAP)) TEMPBITMAP BWIDTH DW BHEIGHT BASCENT BDESCENT NDESCENT NASCENT NHEIGHT CHAROFFSET (BITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of FONTBITMAP))) (* ;; "fetch the ascents and descents of the bitmap and the new maximums.") (SETQ BWIDTH (fetch (BITMAP BITMAPWIDTH) of NEWCHARBITMAP)) (SETQ BHEIGHT (fetch (BITMAP BITMAPHEIGHT) of NEWCHARBITMAP)) (SETQ BDESCENT (OR NEWCHARDESCENT CDESCENT)) (SETQ BASCENT (IDIFFERENCE BHEIGHT BDESCENT)) (SETQ NDESCENT (IMAX BDESCENT CDESCENT)) (SETQ NASCENT (IMAX BASCENT CASCENT)) (SETQ NHEIGHT (IPLUS NDESCENT NASCENT)) (SETQ CHAROFFSET (\FGETOFFSET OFFSETS (\CHAR8CODE CHARCODE))) (* ;; "set up a new target bitmap if any of the parameters have changed.") (COND ((EQ CHAROFFSET (\FGETOFFSET OFFSETS \MAXTHINCHAR)) (* ;; "changing the bitmap for a character which formerly pointed at the slug character. Allocate a new bitmap character bitmap for this.") (SETQ TEMPBITMAP (BITMAPCREATE (IPLUS OFWIDTH BWIDTH) NHEIGHT BITSPERPIXEL)) (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) OFWIDTH CHEIGHT) (* ; "copy the old characters over.") (SETQ CHAROFFSET OFWIDTH)) ((NEQ CWIDTH BWIDTH) (* ;; "The bitmaps differ in width; create a new bitmap with things at the right places, then update widths and offsets.") (SETQ DW (IDIFFERENCE BWIDTH CWIDTH)) (* ; "Difference in character widths") (SETQ TEMPBITMAP (BITMAPCREATE (IPLUS OFWIDTH DW) NHEIGHT BITSPERPIXEL))(* ;  "this may also be a taller bitmap if NHEIGHT is larger than CHEIGHT.") (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) CHAROFFSET CHEIGHT) (* ;  "Copy that portion to the left of the character.") (BITBLT FONTBITMAP (IPLUS CHAROFFSET CWIDTH) 0 TEMPBITMAP (IPLUS CHAROFFSET BWIDTH) (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) (ADD1 (IDIFFERENCE OFWIDTH (IPLUS CHAROFFSET CWIDTH))) CHEIGHT) (* ;  "Copy that portion to the right of the new character.") ) ((OR (IGREATERP BASCENT CASCENT) (IGREATERP BDESCENT CDESCENT)) (* ;; "The new character is TALLER than the existing bitmap. Make a larger bitmap.") (SETQ TEMPBITMAP (BITMAPCREATE OFWIDTH NHEIGHT BITSPERPIXEL)) (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) OFWIDTH CHEIGHT) (* ;; "Copy the existing bitmap into it, adjusting for a larger descent in the new character (if there is one)") )) (* ;; "copy the new bitmap in and update parameters.") (BITBLT NEWCHARBITMAP 0 0 (OR TEMPBITMAP FONTBITMAP) CHAROFFSET (IMAX 0 (IDIFFERENCE NDESCENT BDESCENT)) BWIDTH BHEIGHT) [COND (TEMPBITMAP (UNINTERRUPTABLY (* ;; "update the parameters for this character set.") (\FSETWIDTH WIDTHS (\CHAR8CODE CHARCODE) BWIDTH) (* ;  "The new character's correct width") (* ;  "Make sure that we update imagewidths also") (if IMWIDTHS then (\FSETIMAGEWIDTH IMWIDTHS (\CHAR8CODE CHARCODE) BWIDTH)) (\FSETOFFSET OFFSETS (\CHAR8CODE CHARCODE) CHAROFFSET) [COND (DW (for I from 0 to \MAXCHAR do (* ;  "Run thru the offsets of later characters, adjusting them for the changed width of this character") (if (IGREATERP (\FGETOFFSET OFFSETS I) CHAROFFSET) then (\FSETOFFSET OFFSETS I (IPLUS DW (\FGETOFFSET OFFSETS I] (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with TEMPBITMAP ) (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with NDESCENT) (replace (CHARSETINFO CHARSETASCENT) of CSINFO with NASCENT ) (* ;; "update the properties for the font as a whole.") [SETQ NASCENT (IMAX NASCENT (FONTPROP FONTDESC 'ASCENT] [SETQ NDESCENT (IMAX NDESCENT (FONTPROP FONTDESC 'DESCENT] (replace (FONTDESCRIPTOR \SFAscent) of FONTDESC with NASCENT) (replace (FONTDESCRIPTOR \SFDescent) of FONTDESC with NDESCENT) (replace (FONTDESCRIPTOR \SFHeight) of FONTDESC with (IPLUS NDESCENT NASCENT)))] (RETURN NEWCHARBITMAP]) (MOVECHARBITMAP [LAMBDA (SRCECODE SRCEFONT DESTCODE DESTFONT CLIP) (* ; "Edited 14-Dec-86 18:04 by Shih") (* ;;; "moves a character from one font to another, clipping if necessary.") (PROG ((SRCEDESC (\GETFONTDESC SRCEFONT)) (DESTDESC (\GETFONTDESC DESTFONT)) SRCEASCENT SRCEDESCENT DESTASCENT DESTDESCENT CHARBITMAP TEMPBITMAP NEWASCENT NEWDESCENT) (SETQ CHARBITMAP (GETCHARBITMAP SRCECODE SRCEFONT)) (SETQ SRCEASCENT (FONTPROP SRCEDESC 'ASCENT)) (SETQ DESTASCENT (FONTPROP DESTDESC 'ASCENT)) (SETQ SRCEDESCENT (FONTPROP SRCEDESC 'DESCENT)) (SETQ DESTDESCENT (FONTPROP DESTDESC 'DESCENT)) [SETQ NEWASCENT (COND (CLIP DESTASCENT) (T (IMAX SRCEASCENT DESTASCENT] [SETQ NEWDESCENT (COND (CLIP DESTDESCENT) (T (IMAX SRCEDESCENT DESTDESCENT] [COND ((OR (NEQ SRCEASCENT NEWASCENT) (NEQ SRCEDESCENT NEWDESCENT)) (SETQ TEMPBITMAP (BITMAPCREATE (BITMAPWIDTH CHARBITMAP) (IPLUS NEWASCENT NEWDESCENT))) (BITBLT CHARBITMAP 0 (IMAX 0 (IDIFFERENCE SRCEDESCENT NEWDESCENT)) TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NEWDESCENT SRCEDESCENT)) (BITMAPWIDTH CHARBITMAP) (IMIN (IPLUS SRCEASCENT SRCEDESCENT) (IPLUS NEWASCENT NEWDESCENT] (PUTCHARBITMAP DESTCODE DESTFONT (OR TEMPBITMAP CHARBITMAP) NEWDESCENT]) ) (DEFINEQ (FONTCOPY [LAMBDA FONTSPECS (* ; "Edited 10-Nov-87 17:12 by FS") (* ;  "makes a copy of a font changing the specified fields.") (PROG (NOERROR ERROR FAMILY FACE SIZE ROTATION DEVICE OLDFONT) (* ;; "Set NOERROR if we find it as a prop, but set ERROR if we find a PROP which is illegal. Then just return NIL if NOERROR and ERROR, otherwise, call FONTCREATE.") [SETQ OLDFONT (\GETFONTDESC (ARG FONTSPECS 1) (AND (type? FONTCLASS (ARG FONTSPECS 1)) (COND ((AND (EQ FONTSPECS 2) (LISTP (ARG FONTSPECS 2))) (LISTGET (ARG FONTSPECS 2) 'DEVICE)) (T (for I from 2 by 2 to FONTSPECS do (COND ((AND (NEQ I FONTSPECS) (EQ (ARG FONTSPECS I) 'DEVICE)) (RETURN (ARG FONTSPECS (ADD1 I] (SETQ FAMILY (fetch (FONTDESCRIPTOR FONTFAMILY) of OLDFONT)) (SETQ SIZE (fetch (FONTDESCRIPTOR FONTSIZE) of OLDFONT)) (SETQ FACE (fetch (FONTDESCRIPTOR FONTFACE) of OLDFONT)) (SETQ ROTATION (fetch (FONTDESCRIPTOR ROTATION) of OLDFONT)) (SETQ DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of OLDFONT)) [for I VAL from 2 by 2 to FONTSPECS do [SETQ VAL (COND ((NOT (EQ I FONTSPECS)) (ARG FONTSPECS (ADD1 I] (SELECTQ (ARG FONTSPECS I) (FAMILY (SETQ FAMILY VAL)) (SIZE (SETQ SIZE VAL)) (FACE (SETQ FACE (\FONTFACE VAL))) (WEIGHT (SETQ FACE (create FONTFACE using FACE WEIGHT _ VAL))) (SLOPE (SETQ FACE (create FONTFACE using FACE SLOPE _ VAL))) (EXPANSION (SETQ FACE (create FONTFACE using FACE EXPANSION _ VAL))) (BACKCOLOR (SETQ FACE (create FONTFACE using FACE BACKCOLOR _ VAL))) (FORECOLOR (SETQ FACE (create FONTFACE using FACE FORECOLOR _ VAL))) (ROTATION (SETQ ROTATION VAL)) (DEVICE (SETQ DEVICE VAL)) (NOERROR (SETQ NOERROR VAL)) (COND [(AND (EQ I 2) (EQ FONTSPECS 2) (LISTP (ARG FONTSPECS 2))) (for J on (ARG FONTSPECS 2) by (CDDR J) do (SETQ VAL (CADR J)) (SELECTQ (CAR J) (FAMILY (SETQ FAMILY VAL)) (SIZE (SETQ SIZE VAL)) (FACE (SETQ FACE (\FONTFACE VAL))) (WEIGHT (SETQ FACE (create FONTFACE using FACE WEIGHT _ VAL))) (SLOPE (SETQ FACE (create FONTFACE using FACE SLOPE _ VAL))) (EXPANSION (SETQ FACE (create FONTFACE using FACE EXPANSION _ VAL))) (BACKCOLOR (SETQ FACE (create FONTFACE using FACE BACKCOLOR _ VAL))) (FORECOLOR (SETQ FACE (create FONTFACE using FACE FORECOLOR _ VAL))) (ROTATION (SETQ ROTATION VAL)) (DEVICE (SETQ DEVICE VAL)) (NOERROR (SETQ NOERROR VAL)) (COND (NOERROR (* ;;  "Fell through the SELECTQ, so an illegal PROP. But, if NOERROR, just note the error, otherwise ") (SETQ ERROR T)) (T (\ILLEGAL.ARG (CAR J] (T (if NOERROR then (SETQ ERROR T) else (\ILLEGAL.ARG (ARG FONTSPECS I] (RETURN (if (AND NOERROR ERROR) then NIL else (FONTCREATE FAMILY SIZE FACE ROTATION DEVICE NOERROR]) (FONTSAVAILABLE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* rrb " 7-Nov-84 15:41") (* ;;; "returns a list of the fonts fitting a description that are available. FAMILY SIZE FACE or ROTATION can be * which means get them all. if LOADEDONLYFLG is non-NIL, only fonts in core will be considered.") (DECLARE (GLOBALVARS IMAGESTREAMTYPES)) (PROG (FONTX DEV) [SETQ DEV (COND ((type? STREAM DEVICE) (COND ((LISTP (SETQ DEV (IMAGESTREAMTYPE DEVICE))) (CAR DEV)) (T DEV))) (DEVICE) (T 'DISPLAY] (RETURN (COND ((LISTP FAMILY) (COND ((EQ (CAR FAMILY) 'FONT) (SETQ FONTX (CDR FAMILY))) (T (SETQ FONTX FAMILY))) (FONTSAVAILABLE (CAR FONTX) (OR (CADR FONTX) SIZE) (OR (CADDR FONTX) FACE) (OR (CADDDR FONTX) ROTATION) DEV CHECKFILESTOO?)) ([SETQ FONTX (COND ((type? FONTDESCRIPTOR FAMILY) FAMILY) ((NULL FAMILY) (DEFAULTFONT DEV)) ((type? FONTCLASS FAMILY) (* ;; "We know that this won't attempt a cyclic fontcreate in \COERCEFONTDESC, because we are passing a known class. Unless NOERROFLG, an error will be caused on the actual device font if it can't be found.") (* ;  "I don't know what to do in this case- rrb.") (\COERCEFONTDESC FAMILY DEV T)) ((OR (IMAGESTREAMP FAMILY) (type? WINDOW FAMILY)) (DSPFONT NIL FAMILY] (* ;  "FAMILY was a spec for a font descriptor, use it and extend it by the other args.") (FONTSAVAILABLE (FONTPROP FONTX 'FAMILY) (OR SIZE (FONTPROP FONTX 'SIZE)) (OR FACE (FONTPROP FONTX 'FACE)) (OR ROTATION (FONTPROP FONTX 'ROTATION)) (OR DEVICE (FONTPROP FONTX 'DEVICE)) CHECKFILESTOO?)) (T (PROG ((FONTFACE FACE)) RETRY (OR (LITATOM FAMILY) (LISPERROR "ARG NOT LITATOM" FAMILY T)) (OR (AND (FIXP SIZE) (IGREATERP SIZE 0)) (EQ SIZE '*) (\ILLEGAL.ARG SIZE)) [OR (EQ FONTFACE '*) (SETQ FONTFACE (OR (\FONTFACE FACE T) (RETURN NIL] (OR (U-CASEP FAMILY) (SETQ FAMILY (U-CASE FAMILY))) (COND ((NULL ROTATION) (SETQ ROTATION 0)) ((AND (FIXP ROTATION) (IGEQ ROTATION 0))) ((EQ ROTATION '*)) (T (\ILLEGAL.ARG ROTATION))) (RETURN (UNION (\LOOKUPFONTSINCORE FAMILY SIZE FONTFACE ROTATION DEV) (COND ((NOT CHECKFILESTOO?) NIL) [(EQ DEV '*) (* ; "map thru all the devices.") (for EXTANTDEV in IMAGESTREAMTYPES join (APPLY* (OR (CADR (ASSOC 'FONTSAVAILABLE (CDR EXTANTDEV))) (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION (CAR EXTANTDEV] (T (* ;  "apply the device font lookup function.") (APPLY* (OR [CADR (ASSOC 'FONTSAVAILABLE (CDR (ASSOC DEV IMAGESTREAMTYPES ] (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION DEV]) (FONTFILEFORMAT [LAMBDA (STRM LEAVEOPEN) (* rmk%: "11-Sep-84 17:16") (* ; "Returns the font format of STRM") [OR (OPENP STRM 'INPUT) (SETQ STRM (OPENSTREAM STRM 'INPUT 'OLD] (PROG1 (SELECTC (\WIN STRM) ((LIST (LLSH 1 15) (LOGOR (LLSH 1 15) (LLSH 1 13))) (* ;; "If high bit of type is on, then must be strike. If 2nd bit is on, must be strike-index, and we punt. We don't care about the 3rd bit") (* ;; "first word has high bits (onebit index fixed). Onebit means 'new-style font' , index is 0 for simple strike, 1 for index, and fixed is if all chars have max width. Lisp doesn't care about 'fixed'") 'STRIKE) ((LOGOR (LLSH 16 8) 12) (* ;; "This is the length of a standard index header. Other files could also have this value, but it's a pretty good discriminator") (* ;; "Skip to byte 25; do it with BINS so works for non-randaccessp devices. This skips the standard name header, then look for type 3 in the following header") (FRPTQ 22 (\BIN STRM)) (* ; "(SETFILEPTR STRM 25)") (AND (EQ 3 (LRSH (\BIN STRM) 4)) 'AC)) NIL) (OR LEAVEOPEN (CLOSEF STRM)))]) (FONTP [LAMBDA (X) (* rmk%: "13-Sep-84 09:04") (* ; "is X a FONTDESCRIPTOR?") (COND ((OR (type? FONTDESCRIPTOR X) (type? FONTCLASS X)) X]) (FONTUNPARSE [LAMBDA (FONT) (* kbr%: "25-Feb-86 19:40") (* ;; "Produces a minimal specification of the font or fontclass specification, for dumping by Tedit, imageobjects.") (PROG (FACE SPEC) (SETQ SPEC (COND ((type? FONTDESCRIPTOR FONT) (FONTPROP FONT 'SPEC)) [(type? FONTCLASS FONT) (RETURN (CONS 'CLASS (FONTCLASSUNPARSE FONT] (T (* ;; "Could be a non-instantiated specification in a fontclass, just use it as the spec without creating the font.") FONT))) (OR SPEC (RETURN)) (SETQ FACE (CADDR SPEC)) (* ;  "FACE and rotation can be NIL for a non-fontdescriptor fontclass component") [SETQ FACE (COND ([OR (NULL FACE) (EQUAL FACE '(MEDIUM REGULAR REGULAR] NIL) ((LITATOM FACE) FACE) [(LISTP FACE) (PACK (LIST* (NTHCHAR (fetch (FONTFACE WEIGHT) of FACE) 1) (NTHCHAR (fetch (FONTFACE SLOPE) of FACE) 1) (NTHCHAR (fetch (FONTFACE EXPANSION) of FACE) 1) (COND ((fetch (FONTFACE COLOR) of FACE) (LIST "-" (fetch (FONTFACE BACKCOLOR) of FACE) "-" (fetch (FONTFACE FORECOLOR) of FACE] (T (SHOULDNT] (* ;  "Don't return device, or any trailing defaults") (RETURN (CONS (CAR SPEC) (CONS (CADR SPEC) (COND ([AND (CADDDR SPEC) (NOT (EQ 0 (CADDDR SPEC] (LIST (OR FACE 'MRR) (CADDDR SPEC))) (FACE (CONS FACE]) (SETFONTDESCRIPTOR [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE FONT) (* ; "Edited 1-Aug-88 16:16 by rmk:") (* ; "Edited 5-Mar-87 19:28 by FS") (* ;; "saves a font descriptor under a family/size/face/rotation/device key so that it will be retreived by FONTCREATE. This is a user entry.") (DECLARE (GLOBALVARS \FONTSINCORE)) (SETQ DEVICE (\DEVICESYMBOL DEVICE)) (* ; "Unpackageify") (AND FONT (SETQ FONT (\COERCEFONTDESC FONT DEVICE))) (* ;  "NIL is used to clobber existing font so that next use will reread it.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (* ; "Unpackageify") (SETQ FACE (\FONTFACE FACE NIL DEVICE)) (OR ROTATION (SETQ ROTATION 0)) (OR (AND (FIXP SIZE) (IGEQ SIZE 0)) (\ILLEGAL.ARG SIZE)) (PROG [(X (OR (FASSOC FAMILY \FONTSINCORE) (CAR (push \FONTSINCORE (LIST FAMILY] [SETQ X (OR (FASSOC SIZE (CDR X)) (CAR (push (CDR X) (LIST SIZE] [SETQ X (OR (SASSOC FACE (CDR X)) (CAR (push (CDR X) (LIST FACE] (* ; "SASSOC cause FACE is listp") [SETQ X (OR (FASSOC ROTATION (CDR X)) (CAR (push (CDR X) (LIST ROTATION] [SETQ X (OR (FASSOC DEVICE (CDR X)) (CAR (push (CDR X) (LIST DEVICE] (RPLACD X FONT) (RETURN FONT]) (CHARCODEP [LAMBDA (CHCODE) (* gbn "22-Jul-85 16:35") (* ;  "is CHCODE a legal character code?") (AND (SMALLP CHCODE) (IGEQ CHCODE 0) (ILEQ CHCODE \MAXNSCHAR]) (EDITCHAR [LAMBDA (CHARCODE FONT) (* rrb "24-MAR-82 12:22") (* ;  "calls the bitmap editor on a character of a font") (PROG ((FONTDESC (\GETFONTDESC FONT))) (RETURN (PUTCHARBITMAP CHARCODE FONTDESC (EDITBM (GETCHARBITMAP CHARCODE FONTDESC]) (\STREAMCHARWIDTH [LAMBDA (CHARCODE STREAM TTBL) (* JonL " 8-NOV-83 03:31") (* ;; "Returns the width that the printed representation of CHARCODE would occupy if printed on STREAM, allowing for the various escape sequences. Used by \ECHOCHAR") (SETQ CHARCODE (LOGAND CHARCODE \CHARMASK)) ((LAMBDA (WIDTHSVECTOR) (* ;; "Note in following that if the DDWIDTHSCACHE exists and has a 0 entry for some character, that may someday mean that the character's glyph simply isn't loaded; e.g., it may want #^A") (SETQ WIDTHSVECTOR (OR (AND (DISPLAYSTREAMP STREAM) (SETQ WIDTHSVECTOR (ffetch IMAGEDATA of STREAM)) (ffetch DDWIDTHSCACHE of WIDTHSVECTOR)) \UNITWIDTHSVECTOR)) (SELECTC (fetch CCECHO of (\SYNCODE (fetch (TERMTABLEP TERMSA) of (OR (TERMTABLEP TTBL) \PRIMTERMTABLE)) CHARCODE)) (INDICATE.CCE ([LAMBDA (CC) (IPLUS (if (IGEQ CHARCODE (CHARCODE %#^@)) then (* ;  "A META charcode -- implies that the 8th bit is non-zero") (SETQ CC (LOADBYTE CHARCODE 0 7)) (\FGETWIDTH WIDTHSVECTOR (CHARCODE %#)) else 0) (if (ILESSP CC (CHARCODE SPACE)) then (* ; "A CONTROL charcode") (add CC (CONSTANT (LLSH 1 6))) (\FGETWIDTH WIDTHSVECTOR (CHARCODE ^)) else 0) (\FGETWIDTH WIDTHSVECTOR CC] CHARCODE)) (SIMULATE.CCE (SELCHARQ CHARCODE ((EOL CR LF BELL) NIL) (ESCAPE (\FGETWIDTH WIDTHSVECTOR (CHARCODE $))) (TAB (PROG ((SPACEWIDTH (\FGETWIDTH WIDTHSVECTOR (CHARCODE SPACE))) (NEWXPOSITON (DSPXPOSITION NIL STREAM)) TABWIDTH) (SETQ TABWIDTH (UNFOLD SPACEWIDTH 8)) [add NEWXPOSITON (SETQ TABWIDTH (IDIFFERENCE TABWIDTH (IMOD (IDIFFERENCE NEWXPOSITON (DSPLEFTMARGIN NIL STREAM)) TABWIDTH] (RETURN (if (IGREATERP NEWXPOSITON (DSPRIGHTMARGIN NIL STREAM)) then (* ;  "tab was past rightmargin, force cr.") NIL else TABWIDTH)))) (\FGETWIDTH WIDTHSVECTOR CHARCODE))) (REAL.CCE (SELECTC CHARCODE ((CHARCODE (EOL CR LF)) NIL) (ERASECHARCODE NIL) (\FGETWIDTH WIDTHSVECTOR CHARCODE))) (IGNORE.CCE 0) (SHOULDNT]) (\UNITWIDTHSVECTOR [LAMBDA NIL (* JonL " 7-NOV-83 19:23") (SETQ \UNITWIDTHSVECTOR (\ALLOCBLOCK (UNFOLD (IPLUS \MAXCHAR 3) WORDSPERCELL))) (for I from 0 to (IPLUS \MAXCHAR 2) do (\PUTBASE \UNITWIDTHSVECTOR I 1)) \UNITWIDTHSVECTOR]) (\CREATEDISPLAYFONT [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* gbn%: "25-Jan-86 18:02") (PROG [(FONTDESC (create FONTDESCRIPTOR FONTDEVICE _ DEVICE FONTFAMILY _ FAMILY FONTSIZE _ SIZE FONTFACE _ FACE \SFAscent _ 0 \SFDescent _ 0 \SFHeight _ 0 ROTATION _ ROTATION FONTDEVICESPEC _ (LIST FAMILY SIZE FACE ROTATION DEVICE] (RETURN (COND ((\GETCHARSETINFO CHARSET FONTDESC T) FONTDESC) (T NIL]) (\CREATECHARSET.DISPLAY [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG?) (* ; "Edited 14-Jan-88 23:42 by FS") (* ;; "Color Stuff removed -FS.") (* ;; "Replace Cond below with") (* ;; "(PROG (XCSINFO)") (* ;; "(SETQ XCSINFO &)") (* ;; "(COND ((FMEMB DEVICE \\COLORDISPLAYSTREAMTYPES) (SETQ XCSINFO (\\SFMAKECOLOR XCSINFO (OR (|fetch| (FONTFACE BACKCOLOR) |of| FACE) 0) (OR (|fetch| (FONTFACE FORECOLOR) |of| FACE) (MAXIMUMCOLOR (\\DISPLAYSTREAMTYPEBPP DEVICE))) (\\DISPLAYSTREAMTYPEBPP DEVICE)))))") (* ;; "(RETURN XCSINFO)))") (* ;;; "tries to build the csinfo required for CHARSET. Does the necessary coercions.") (* ;;; "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") (DECLARE (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS)) (* ;; "DISPLAYFONTCOERCIONS is a list of font coercions, in the form ((user-font real-font) (user-font real-font) ...). Each user-font is a list of FAMILY, and optionally SIZE and CHARSET, (e.g., (GACHA) or (GACHA 10) or (GACHA 10 143)), and each real-font is a similar list.") (COND ((PROG1 (for TRANSL in DISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATECHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO)) (* ;  "Just recursively call ourselves to handle entries in DISPLAYFONTCOERCIONS") )) (T (* ;; "One weirdness is, if you have a coercion, and the real-font is missing, you can't get a missingfont coercion on the user-font because the real-font missingfont coercion shadows it out.") (\CREATE-REAL-CHARSET.DISPLAY FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG? ]) (\CREATE-REAL-CHARSET.DISPLAY [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG?) (* ; "Edited 15-Jan-88 00:02 by FS") (COND [(AND (EQ ROTATION 0) (PROG1 (\READDISPLAYFONTFILE FAMILY SIZE FACE ROTATION 'DISPLAY CHARSET) (* ;  "If it is available, this will force the appropriate file to be read to fill in the charset entry") ] (T (* ;; "if we get here, the font is not directly available, either it needs to be rotated, boldified, or italicised 'by hand'. Past that point, we do not allow DISPLAYFONTCOERCIONS, only MISSINGxxxxDISPLAYFONTCOERCIONS.") (PROG (NEWFONT XFONT XLATEDFAM CSINFO) (RETURN (COND [(NEQ ROTATION 0) (* ;; "to make a rotated font (even if it is bold or whatnot), recursively call fontcreate to get the unrotated font (maybe bold, etc), then call \SFMAKEROTATEDFONT on the csinfo. If its still missing, then search for missing display font coercions (e.g. no avail. charset, *but*, do not recurse (avoid getting into infinite loops). This allows partial permutations of fonts.") (OR (MEMB ROTATION '(90 270)) (ERROR "only implemented rotations are 0, 90 and 270." ROTATION)) (COND ((SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE FACE 0 'DISPLAY CHARSET)) (* ;; "Do not call FONTCREATE here. The user might have modified (via PUTCHARBITMAP, etc.) the in-memory version of the source. This also fixes a bug in which several font descriptors ended up sharing bitmaps or charsetvectors, causing havoc when the user modifies either fontdescriptor.") (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFROTATECSINFO CSINFO ROTATION) else NIL] ((AND (EQ (fetch WEIGHT of FACE) 'BOLD) (SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE (create FONTFACE using FACE WEIGHT _ 'MEDIUM) 0 'DISPLAY CHARSET))) (* ;; "if we want a bold font, and the medium weight font is available, build the medium weight version then call \SFMAKEBOLD on the csinfo") (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFMAKEBOLD CSINFO) else NIL)) ((AND (EQ (fetch (FONTFACE SLOPE) of FACE) 'ITALIC) (SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE (create FONTFACE using FACE SLOPE _ 'REGULAR) 0 'DISPLAY CHARSET))) (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFMAKEITALIC CSINFO) else NIL)) [(AND CHARSET (NOT (EQL 0)) (for TRANSL in MISSINGCHARSETDISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATE-REAL-CHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO] ((for TRANSL in MISSINGDISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATE-REAL-CHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO))) ((NOT NOSLUG?) (\BUILDSLUGCSINFO (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONTDESC) (FONTPROP FONTDESC 'ASCENT) (FONTPROP FONTDESC 'DESCENT) (FONTPROP FONTDESC 'DEVICE]) (\BUILDSLUGCSINFO [LAMBDA (WIDTH ASCENT DESCENT DEVICE SCALE) (* ; "Edited 9-May-93 23:12 by rmk:") (* ;;; "builds a csinfo which contains only the slug (black rectangle) character. Called only for display.") (SETQ SCALE (OR SCALE 1)) (PROG ((CSINFO (create CHARSETINFO CHARSETASCENT _ ASCENT CHARSETDESCENT _ DESCENT)) WIDTHS OFFSETS BITMAP IMAGEWIDTHS) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I WIDTH)) (REPLACE IMAGEWIDTHS OF CSINFO WITH WIDTHS) (replace (CHARSETINFO OFFSETS) of CSINFO with (SETQ OFFSETS ( \CREATECSINFOELEMENT ))) (for I from 0 to \MAXTHINCHAR do (\FSETOFFSET OFFSETS I 0)) [replace (CHARSETINFO CHARSETBITMAP) of CSINFO with (SETQ BITMAP (BITMAPCREATE (ROUND (QUOTIENT WIDTH SCALE)) (ROUND (QUOTIENT (IPLUS ASCENT DESCENT) SCALE] [BLTSHADE BLACKSHADE BITMAP 1 NIL (SUB1 (ROUND (QUOTIENT WIDTH SCALE] (RETURN CSINFO]) (\SEARCHDISPLAYFONTFILES [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 5-Mar-87 18:55 by FS") (* ;; " This function called via APPLY in IMAGESTREAMTYPES.") (* ;; " Returns a list of the fonts that can be read in for displaylike devices. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") (* ;; " Note we *allow* a device that is not 'DISPLAY for guys like 4DISPLAY, 8DISPLAY, 24DISPLAY, and also possibly for FX80, etc. (guys that want DISPLAYFONTS anyway). Should have some hook though for FONTEXTENSIONS, FONTDIRECTORIES??") (DECLARE (GLOBALVARS DISPLAYFONTEXTENSIONS DISPLAYFONTDIRECTORIES)) (SELECTQ (SYSTEMTYPE) (D (\SEARCHFONTFILES FAMILY SIZE FACE ROTATION DEVICE DISPLAYFONTDIRECTORIES DISPLAYFONTEXTENSIONS)) (J (* OLD J code from \READDISPLAYFONT  (PROG ((FONTFILE (\FONTFILENAME  FAMILY SIZE FACE)) FONTDESC STRM)  (COND ((SETQ STRM (AND  FONTDIRECTORIES (FINDFILE FONTFILE T  FONTDIRECTORIES)))  (SETQ STRM (OPENSTREAM FONTFILE  (QUOTE INPUT))) (SETQ FONTDESC  (\READJERICHOFONTFILE FAMILY SIZE  FACE STRM)) (CLOSEF STRM)))  (RETURN FONTDESC))) NIL) (SHOULDNT]) (\SEARCHFONTFILES [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE DIRLST EXTLST) (* ; "Edited 14-Sep-96 10:54 by rmk:") (* ; "Edited 6-Oct-89 12:34 by bvm") (* ;; "GENERIC FUNCTION") (* ;; "returns a list of the fonts that can be read in for a device. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (SETQ DEVICE (\FONTSYMBOL DEVICE)) (SETQ FACE (\FONTFACE FACE)) (BIND (FILING.ENUEMRATION.DEPTH _ 1) FONTSFOUND THISFONT THISFACE FOR E INSIDE EXTLST DO [FOR DIR INSIDE DIRLST BIND (FILEPATTERN _ (IF (FMEMB E *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE E) ELSE (\FONTFILENAME FAMILY SIZE FACE E))) DO (* ;; "Hack above to handle both old and new font file names. The variable *OLD-FONT-EXTENSIONS* can be set to suppress using the old-style lookup. If set to a list of extensions, just those will be looked up with old-style conventions") (FOR FONTFILE IN (DIRECTORY (PACKFILENAME.STRING 'DIRECTORY DIR 'BODY FILEPATTERN)) WHEN [PROGN (SETQ THISFONT (\FONTINFOFROMFILENAME FONTFILE DEVICE)) (SETQ THISFACE (CADDR THISFONT)) (* ;;  "make sure the face, size, and family really match.") (AND (NOT (MEMBER THISFONT FONTSFOUND)) (OR (EQ FAMILY '*) (EQ FAMILY (CAR THISFONT))) (OR (EQ SIZE '*) (EQ SIZE (CADR THISFONT))) (OR (EQ FACE '*) (EQUAL FACE THISFACE) (AND (OR (EQ (CAR FACE) '*) (EQ (CAR FACE) (CAR THISFACE))) (OR (EQ (CADR FACE) '*) (EQ (CADR FACE) (CADR THISFACE))) (OR (EQ (CADDR FACE) '*) (EQ (CADDR FACE) (CADDR THISFACE] DO (SETQ FONTSFOUND (CONS THISFONT FONTSFOUND] FINALLY (RETURN FONTSFOUND]) (\FINDFONTFILE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET DIRLST EXTLST) (* ; "Edited 14-Sep-96 10:53 by rmk:") (* ; "Edited 6-Oct-89 11:18 by bvm") (* ;; "Find any font file on any directory with any naming convention with any extension. Note that ROTATION and DEVICE are just place holders. DEVICE is irrelevant because DIRLST already incorporates the device information. The variable *OLD-FONT-EXTENSIONS* can be set to suppress using the old-style lookup. If set to a list of extensions, just those will be looked up with old-style conventions.") (BIND FONTFILE FOR EXT INSIDE EXTLST WHEN (SETQ FONTFILE (FINDFILE (IF (FMEMB EXT *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE EXT CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE EXT CHARSET)) T DIRLST)) DO (RETURN FONTFILE]) (\FONTSYMBOL [LAMBDA (X ElseReturnXFlg) (* ; "Edited 28-Jul-88 11:59 by rmk:") (* ; "Edited 24-Mar-87 14:32 by FS") (* ;; "Return a symbol in IL package and is in uppercase. Currently the function IL:U-CASE is believed to do this, but if it changes, this is the font hook. ElseReturnXFlg is if you want an IL symbol if X is a symbol or string, otherwise just X.") (COND ((LITATOM X) (U-CASE X)) ((STRINGP X) (MKATOM (U-CASE X))) (ElseReturnXFlg X) (T (ERROR "Want an IL symbol"]) (\DEVICESYMBOL [LAMBDA (X ElseReturnXFlg) (* ; "Edited 7-Oct-88 20:07 by rmk:") (* ; "Edited 28-Jul-88 14:43 by rmk:") (* ; "Edited 24-Mar-87 14:33 by FS") (* ;; "Return a canonicalized atom good for comparing with DEVICE symbols") (LET ((STRM (\GETSTREAM X 'OUTPUT T))) (COND (STRM (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of STRM))) ((NULL X) 'DISPLAY) (T (* ; "because its used in ASSOC.") (\FONTSYMBOL X ElseReturnXFlg]) (\FONTFACE [LAMBDA (FACE NOERRORFLG DEV) (* ; "Edited 1-Aug-88 09:44 by rmk:") (* ; "Edited 28-Jul-88 15:50 by rmk:") (* ; "Edited 28-Jul-88 15:49 by rmk:") (* ; "Edited 28-Jul-88 15:41 by rmk:") (* ; "Edited 28-Jul-88 15:38 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 25-Feb-87 22:58 by FS") (* ;; "Coerces FACE into standard FONTFACE record, usually returns a CONSTANT (so you'd better not RPLACD or REPLACE fields!!)") (PROG (UNKNOWN (WEIGHT 'MEDIUM) (SLOPE 'REGULAR) (EXPANSION 'REGULAR) (OLDFACE FACE)) (* ;; "On error, can signal, or return NIL, or return REGULAR face.") [SETQ UNKNOWN (COND ((EQ NOERRORFLG 'REGULAR) 'REGULAR) (T 'ERROR] [COND ((type? FONTFACE FACE) (* ;; "List Case. Unpack because want to validate fields") (SETQ WEIGHT (fetch (FONTFACE WEIGHT) of FACE)) (SETQ SLOPE (fetch (FONTFACE SLOPE) of FACE)) (SETQ EXPANSION (fetch (FONTFACE EXPANSION) of FACE)) (* ;; "Handle unknown faces") [OR (\FONT.SYMBOLMEMB WEIGHT ' (* BOLD MEDIUM LIGHT)) (SETQ WEIGHT (COND ((\FONT.COMPARESYMBOL WEIGHT 'REGULAR) (* ;; "Clean up WEIGHT REGULAR vs. MEDIUM") (SETQ WEIGHT 'MEDIUM)) (T UNKNOWN] (OR (\FONT.SYMBOLMEMB SLOPE ' (* REGULAR ITALIC)) (SETQ SLOPE UNKNOWN)) (OR (\FONT.SYMBOLMEMB EXPANSION ' (* COMPRESSED REGULAR EXPANDED)) (SETQ EXPANSION UNKNOWN))) ((OR (LITATOM FACE) (STRINGP FACE)) (COND ((NULL FACE) (* ; "Fast vanilla default") ) ((EQ (NCHARS FACE) 3) (* ; "3 char notation case") (SETQ WEIGHT (SELCHARQ (CHCON1 FACE) ((B b) 'BOLD) ((M m R r) 'MEDIUM) ((L l) 'LIGHT) UNKNOWN)) (SETQ SLOPE (SELCHARQ (NTHCHARCODE FACE 2) ((R r) 'REGULAR) ((I i) 'ITALIC) UNKNOWN)) (SETQ EXPANSION (SELCHARQ (NTHCHARCODE FACE 3) ((R r) 'REGULAR) ((C c) 'COMPRESSED) ((E e) 'EXPANDED) UNKNOWN))) ((SELECTQ FACE (BOLD (SETQ WEIGHT 'BOLD)) (ITALIC (SETQ SLOPE 'ITALIC)) (BOLDITALIC (SETQ WEIGHT 'BOLD) (SETQ SLOPE 'ITALIC)) ((STANDARD REGULAR) T) NIL)) ((\FONT.COMPARESYMBOL FACE 'BOLD) (SETQ WEIGHT 'BOLD)) ((\FONT.COMPARESYMBOL FACE 'ITALIC) (SETQ SLOPE 'ITALIC)) ((\FONT.COMPARESYMBOL FACE 'BOLDITALIC) (SETQ WEIGHT 'BOLD) (SETQ SLOPE 'ITALIC)) ((\FONT.SYMBOLMEMB FACE '(STANDARD REGULAR NIL NNN)) (* ; "Vanilla case") ) ((STRPOS "-" FACE) (* ; "Color fontface spec!") (SETQ FACE (\FONTFACE.COLOR FACE NOERRORFLG DEV)) (RETURN FACE)) ((\FONT.SYMBOLMEMB FACE ' (* ***)) (* ; "Wildcard case") (SETQ WEIGHT '*) (SETQ SLOPE '*) (SETQ EXPANSION '*)) (T (* ; "Other litatom error case") (SETQ WEIGHT UNKNOWN) (SETQ SLOPE UNKNOWN) (SETQ EXPANSION UNKNOWN] (if (OR (EQ WEIGHT 'ERROR) (EQ SLOPE 'ERROR) (EQ EXPANSION 'ERROR)) then (if NOERRORFLG then (RETURN NIL) else (\ILLEGAL.ARG OLDFACE))) (* ;; "Avoid consing by returning constant faces (historical: really, would have been better to return MRR, but users have know about this for too long (rmk))") (RETURN (COND ((AND (EQ WEIGHT 'MEDIUM) (EQ SLOPE 'REGULAR) (EQ EXPANSION 'REGULAR)) (* ; "MRR") (CONSTANT (create FONTFACE))) [(AND (EQ WEIGHT 'BOLD) (EQ SLOPE 'REGULAR) (EQ EXPANSION 'REGULAR)) (* ; "BRR") (CONSTANT (create FONTFACE WEIGHT _ 'BOLD] [(AND (EQ WEIGHT 'MEDIUM) (EQ SLOPE 'ITALIC) (EQ EXPANSION 'REGULAR)) (* ; "MIR") (CONSTANT (create FONTFACE SLOPE _ 'ITALIC] [(AND (EQ WEIGHT 'BOLD) (EQ SLOPE 'ITALIC) (EQ EXPANSION 'REGULAR)) (* ; "BIR") (CONSTANT (create FONTFACE WEIGHT _ 'BOLD SLOPE _ 'ITALIC] (T (* ; "Otherwise, cons up") (create FONTFACE WEIGHT _ WEIGHT SLOPE _ SLOPE EXPANSION _ EXPANSION]) (\FONTFACE.COLOR [LAMBDA (FACE NOERRORFLG DEV) (* ; "Edited 28-Jul-88 14:51 by rmk:") (* ; "Edited 28-Jul-88 13:09 by rmk:") (* ; "Edited 24-Mar-87 17:03 by FS") (* ;; "This used to be \FONTFACE. Renamed \FONTFACE.COLOR, and \FONTFACE rewritten. The section below should also be redone") (* ;; "Takes a variety of user specifications and converts them to a standard FONTFACE record.") (* ;; "b/w fontfaces are extended by an optional '-backcolor-forecolor'") (* ;; "the atom NNN is interpreted the same as NIL or MRR to cover up a bug described in AR 3025, the FONTNNN bug") (DECLARE (GLOBALVARS \COLORDISPLAYSTREAMTYPES)) (SETQ DEV (\DEVICESYMBOL DEV)) (PROG (BWFACE POS OLDPOS BITSPERPIXEL BACKCOLOR FORECOLOR ANSWER) (* ;; "First get a FONTFACE ANSWER.") [SETQ ANSWER (COND ((type? FONTFACE FACE) FACE) ((LITATOM FACE) (OR (U-CASEP FACE) (SETQ FACE (U-CASE FACE))) (SETQ POS (STRPOS "-" FACE)) (COND [POS (SETQ BWFACE (SUBATOM FACE 1 (SUB1 POS] (T (SETQ BWFACE FACE))) [SETQ ANSWER (SELECTQ BWFACE ((* ***) (CONSTANT (create FONTFACE WEIGHT _ '* SLOPE _ '* EXPANSION _ '*))) ((NIL MRR STANDARD NNN) (CONSTANT (create FONTFACE))) ((ITALIC MIR) (CONSTANT (create FONTFACE SLOPE _ 'ITALIC))) ((BOLD BRR) (CONSTANT (create FONTFACE WEIGHT _ 'BOLD))) ((BOLDITALIC BIR) (CONSTANT (create FONTFACE WEIGHT _ 'BOLD SLOPE _ 'ITALIC))) (create FONTFACE WEIGHT _ (SELCHARQ (NTHCHARCODE FACE 1) (M 'MEDIUM) (B 'BOLD) (L 'LIGHT) (GO ERROR)) SLOPE _ (SELCHARQ (NTHCHARCODE FACE 2) (R 'REGULAR) (I 'ITALIC) (GO ERROR)) EXPANSION _ (SELCHARQ (NTHCHARCODE FACE 3) (R 'REGULAR) (C 'COMPRESSED) (E 'EXPANDED) (GO ERROR] (COND (POS (* ; "Color FONTFACE. *") (SETQ OLDPOS POS) (SETQ POS (STRPOS "-" FACE (ADD1 OLDPOS))) (COND ((NULL POS) (GO ERROR))) (SETQ BITSPERPIXEL (\DISPLAYSTREAMTYPEBPP DEV)) (SETQ BACKCOLOR (COLORNUMBERP (SUBATOM FACE (ADD1 OLDPOS) (SUB1 POS)) BITSPERPIXEL)) (SETQ OLDPOS POS) (SETQ FORECOLOR (COLORNUMBERP (SUBATOM FACE (ADD1 OLDPOS) -1) BITSPERPIXEL)) (* ;  "COPY ANSWER to avoid smashing constants.") (SETQ ANSWER (COPY ANSWER)) (replace (FONTFACE BACKCOLOR) of ANSWER with BACKCOLOR ) (replace (FONTFACE FORECOLOR) of ANSWER with FORECOLOR ))) ANSWER) (T (GO ERROR] (* ;; "Coerce on or off COLOR.") (SETQ ANSWER (COND ((AND (NOT (FMEMB DEV \COLORDISPLAYSTREAMTYPES)) (fetch (FONTFACE COLOR) of ANSWER)) (SETQ ANSWER (COPY ANSWER)) (replace (FONTFACE COLOR) of ANSWER with NIL) ANSWER) ((AND (FMEMB DEV \COLORDISPLAYSTREAMTYPES) (NULL (fetch (FONTFACE COLOR) of ANSWER))) (SETQ FACE (COPY FACE)) (replace (FONTFACE BACKCOLOR) of ANSWER with 0) (replace (FONTFACE FORECOLOR) of ANSWER with (MAXIMUMCOLOR ( \DISPLAYSTREAMTYPEBPP DEV))) ANSWER) (T ANSWER))) (RETURN ANSWER) ERROR (COND (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG FACE]) (\FONTFILENAME [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 5-Mar-93 16:10 by rmk:") (* ;; "Strike file naming convention (w/o dashes, no charset) no longer supported. New name is of the form %"familysize-face-Ccharset.ext%", e.g., MODERN12-MRR-C357.WD") (* ;; "**bvm 10/5/89 Slight change: partition fonts into subdirectories by charset, e.g., all Charset zero fonts are in subdirectory C0>. This significantly speeds up any font operation that requires any local directory work (e.g., NFS servers on both Sun and D machine), and FONTSAVAILABLE on any device (since it doesn't have to wade thru all those charsets). This behavior is conditioned on the value of *USEOLDFONTDIRECTORIES*") (SETQ FACE (\FONTFACE FACE)) (* ; "Validate face") (LET* ([SIZEPATT (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (if (< SIZE 10) then (CONCAT 0 SIZE) else SIZE)) (T (\ILLEGAL.ARG SIZE] (CSETNAME (COND ((OR (NULL CHARSET) (EQ CHARSET 0)) (* ; "Charset defaults to zero.") "0") ((FIXP CHARSET) (LET ((*PRINT-BASE* 8) (*PRINT-RADIX* NIL)) (* ; "Longhand for (cl:write-to-string charset :radix nil :base 8), which is twice as slow, due to lousy keyword handling") (\PRINDATUM.TO.STRING CHARSET))) (T (* ;  "Somebody made the string already?") CHARSET))) [FACESPEC (LIST (CHCON1 (fetch (FONTFACE WEIGHT) of FACE)) (CHCON1 (fetch (FONTFACE SLOPE) of FACE)) (CHCON1 (fetch (FONTFACE EXPANSION) of FACE] (TAIL FACESPEC)) [if (OR (EQ (CAR TAIL) (CHARCODE *)) (EQ (CAR (SETQ TAIL (CDR TAIL))) (CHARCODE *))) then (* ;  "Avoid adjacent wildcards because some devices (notably DSK) get exponentially slower.") (while (EQ (CADR TAIL) (CHARCODE *)) do (RPLACD TAIL (CDDR TAIL] (* ;; "Fortunately, CONCAT ignores packages.") (PACKFILENAME.STRING 'NAME (CONCAT (CL:IF *USEOLDFONTDIRECTORIES* "" (CONCAT (PROGN (* ;  "Lowercase because it's in a directory name, so maybe Unix will find it sooner?") "c") CSETNAME ">")) FAMILY SIZEPATT "-" (CONCATCODES FACESPEC) "-C" CSETNAME) 'EXTENSION EXTENSION]) (\FONTFILENAME.OLD [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 23-Sep-92 18:22 by jds") (* ;; "Returns old style font file names. They were ambiguous because you could not ask for e.g. FACE (MEDIUM * REGULAR) because it maps to FamilySize-*-Charset, which also matches (BOLD * COMPRESSED), etc. Keep this function around though for user's who don't rename their files.") (* ;  "Returns the name of the file that should contain the information for a font.") (SETQ FACE (\FONTFACE FACE)) (* ; "Force legal canonical face") (SETQ FACE (COND ((AND (EQ (CAR FACE) '*) (EQ (CADR FACE) '*)) (* ;; "Avoid adjacent wildcards because DSK gets slower exponentially (can take loooong tiiiiiime). No need to check compression.") '*) (T FACE))) (PACKFILENAME.STRING 'NAME [PROGN (* ;; "DISPLAYFONT AC WD and the default case") (CONCAT (CDR (SASSOC FAMILY *DISPLAY-FONT-NAME-MAP*)) (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (COND ((< SIZE 10) (CONCAT 0 SIZE)) (T SIZE))) (T (\ILLEGAL.ARG SIZE))) [COND ((EQ FACE '*) '*) (T (SELECTQ (fetch WEIGHT of FACE) (BOLD (SELECTQ (fetch SLOPE of FACE) (ITALIC "D") "B")) (SELECTQ (fetch SLOPE of FACE) (ITALIC "I") "R"] (COND ((FIXP CHARSET) (LET ((*PRINT-BASE* 8)) (CL:FORMAT NIL "~O" CHARSET))) (T "000"] 'EXTENSION EXTENSION]) (\FONTFILENAME.NEW [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 30-Mar-87 20:00 by FS") (* ;; "Strike file naming convention (w/o dashes, no charset) no longer supported.") (LET (NAME SIZEPATT) (SETQ FACE (\FONTFACE FACE)) (* ; "Validate face") [SETQ SIZEPATT (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (if (< SIZE 10) then (CONCAT 0 SIZE) else SIZE)) (T (\ILLEGAL.ARG SIZE] (* ;; "Avoid adjacent wildcards because some devices (notably DSK) get exponentially slower. Nicely, PACK & CONCAT ignore packages.") (PACKFILENAME.STRING 'NAME (CONCAT FAMILY SIZEPATT "-" [COND ((EQUAL FACE ' (* * *) ) '*) (T (CONCAT (NTHCHAR (fetch (FONTFACE WEIGHT) of FACE) 1) (NTHCHAR (fetch (FONTFACE SLOPE) of FACE) 1) (NTHCHAR (fetch (FONTFACE EXPANSION) of FACE) 1] (COND [(FIXP CHARSET) (LET ((*PRINT-BASE* 8)) (CONCAT "-C" (\PRINDATUM.TO.STRING CHARSET] (CHARSET (CONCAT "-C" CHARSET)) (T "-C0"))) 'EXTENSION EXTENSION]) (\FONTINFOFROMFILENAME [LAMBDA (FONTFILE DEVICE) (* ; "Edited 14-Sep-96 10:23 by rmk:") (* ; "Edited 5-Oct-89 18:28 by bvm") (* ;; "returns a list of the family size face rotation device of the font stored in the file name FONTFILE. Rotation is 0 always. Parses both new & old format files.") (LET ((FILENAMELIST (UNPACKFILENAME.STRING FONTFILE)) CH SIZEBEG SIZEND NAME FAMILY SIZE FACE EXT) (SETQ NAME (LISTGET FILENAMELIST 'NAME)) (* ;  "find where the name and size are. MUST check for ch nil below or possible infinite loop") (SETQ SIZEBEG (for CH# from 1 when (OR (NUMBERP (SETQ CH (NTHCHAR NAME CH#))) (NULL CH)) do (RETURN CH#))) (* ;; "Get Family") [SETQ FAMILY (MKATOM (U-CASE (SUBSTRING NAME 1 (SUB1 SIZEBEG] (* ;; "Get Size") [SETQ SIZEND (find CH# from SIZEBEG suchthat (NOT (NUMBERP (NTHCHAR NAME CH#] [SETQ SIZE (MKATOM (SUBSTRING NAME SIZEBEG (SUB1 SIZEND] (if (EQ (NTHCHAR NAME SIZEND) '-) then (SETQ SIZEND (ADD1 SIZEND))) (* ;; "Get Face") (SETQ NAME (U-CASE NAME)) (* ;  "don't need name, but checks for lowercase face") [SETQ FACE (LIST (COND ((STRPOS "B" NAME SIZEND NIL T NIL UPPERCASEARRAY) 'BOLD) ((STRPOS "L" NAME SIZEND NIL T NIL UPPERCASEARRAY) 'LIGHT) (T 'MEDIUM)) (COND ((STRPOS "I" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'ITALIC) (T 'REGULAR)) (COND ((STRPOS "E" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'EXPANDED) ((STRPOS "C-" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'COMPRESSED) (T 'REGULAR] (LIST FAMILY SIZE FACE 0 (COND ((STREAMP DEVICE) (IMAGESTREAMTYPE DEVICE)) ((NULL DEVICE) [SETQ EXT (MKATOM (U-CASE (LISTGET FILENAMELIST 'EXTENSION] (SELECTQ EXT (WD 'INTERPRESS) ((STRIKE AC DISPLAYFONT) 'DISPLAY) EXT)) ((LITATOM DEVICE) (\FONTSYMBOL DEVICE)) (T DEVICE]) (\FONTINFOFROMFILENAME.OLD [LAMBDA (FONTFILE DEVICE) (* ; "Edited 1-Jan-87 01:29 by FS") (* ;; "returns a list of the family size face rotation device of the font stored in the file name FONTFILE.") (PROG ((FILENAMELIST (UNPACKFILENAME FONTFILE)) SIZEBEG SIZEND NAME FAMILY SIZE) (SETQ NAME (LISTGET FILENAMELIST 'NAME)) (* ;  "find where the name and size are.") (SETQ SIZEBEG (for CH# from 1 when (NUMBERP (NTHCHAR NAME CH#)) do (RETURN CH#))) [SETQ FAMILY (MKATOM (SUBSTRING NAME 1 (SUB1 SIZEBEG] (SETQ SIZEND (for CH# from SIZEBEG when (NOT (NUMBERP (NTHCHAR NAME CH#))) do (RETURN CH#))) [SETQ SIZE (MKATOM (SUBSTRING NAME SIZEBEG (SUB1 SIZEND] (RETURN (LIST FAMILY SIZE (SELECTQ (LISTGET FILENAMELIST 'EXTENSION) ((DISPLAYFONT AC WD) (LIST (COND ((STRPOS "-B" NAME SIZEND NIL T) 'BOLD) (T 'MEDIUM)) (COND ((STRPOS "-I" NAME SIZEND NIL) 'ITALIC) (T 'REGULAR)) 'REGULAR)) (LIST (COND ((STRPOS "B" NAME SIZEND NIL T) 'BOLD) (T 'MEDIUM)) (COND ((STRPOS "I" NAME SIZEND NIL) 'ITALIC) (T 'REGULAR)) 'REGULAR)) 0 DEVICE]) (\GETFONTDESC [LAMBDA (SPEC DEVICE NOERRORFLG) (* J.Gibbons " 5-Dec-82 16:53") (* ;; "Coerces SPEC to a fontdescriptor") (* ;  "\GETFONTDESC HAS MACRO, BUT OLD CALLS STILL EXIST") (\COERCEFONTDESC SPEC DEVICE NOERRORFLG]) (\COERCEFONTDESC [LAMBDA (SPEC STREAM NOERRORFLG) (* ; "Edited 29-Aug-91 12:19 by jds") (* ;; "Coerces SPEC to a fontdescriptor appropriate for STREAM. Go back thru FONTCREATE for various coercions in order to make sure that the cache gets set up") (DECLARE (GLOBALVARS DEFAULTFONT)) (PROG (FONT DEVICE) [COND ((type? FONTDESCRIPTOR SPEC) (SETQ FONT SPEC)) [(type? FONTCLASS SPEC) [SETQ DEVICE (COND ((NULL STREAM) (* ; "Default is display") (* ;; "COULDN'T THIS BRANCH BE INTENDED TO MEAN 4DISPLAY, 8DISPLAY, 24DISPLAY? PEOPLE PROBABLY SHOULDN'T BE CALLING \COERCEFONTDESC WITH STREAM = NIL.") 'DISPLAY) ((IMAGESTREAMP STREAM) (IMAGESTREAMTYPE STREAM)) ((LITATOM STREAM) (\DEVICESYMBOL STREAM)) (STREAM STREAM) (T (* ;; "I don't think this case should be allowed.") 'DISPLAY] [SETQ FONT (SELECTQ DEVICE (DISPLAY (fetch (FONTCLASS DISPLAYFD) of SPEC)) (INTERPRESS (fetch (FONTCLASS INTERPRESSFD) of SPEC)) (PRESS (fetch (FONTCLASS PRESSFD) of SPEC)) (CDR (SASSOC DEVICE (fetch (FONTCLASS OTHERFDS) of SPEC] (RETURN (COND ((type? FONTDESCRIPTOR FONT) (* ;;  "We don't always create FD's for devices before they are needed, so do it now and save result") FONT) [(NULL FONT) (* ;; "NIL means create FONT but don't cache.") (COND ((AND (FMEMB DEVICE \DISPLAYSTREAMTYPES) (SETQ FONT (\COERCEFONTDESC SPEC 'DISPLAY NOERRORFLG)) (SETQ FONT (FONTCOPY FONT 'DEVICE STREAM 'NOERROR NOERRORFLG)) ) (* ;;  "Coerce existing black & white font to color font, but don't cache.") FONT) [(EQ SPEC DEFAULTFONT) (* ;; "Break cycles with NIL in the defaultfont") (COND (NOERRORFLG NIL) ((EQ DEVICE 'DISPLAY) (* ;; "Function DEFAULTFONT guarantees system integrity") (DEFAULTFONT 'DISPLAY)) ((EQUAL DEVICE '(HARDCOPY DISPLAY)) (* ;;  "MAKE DISPLAY-HARDCOPY FONTS default to the corresponding display font, copied....") (FONTCOPY (DEFAULTFONT 'DISPLAY) 'DEVICE STREAM 'NOERROR NOERRORFLG)) (T (ERROR (CONCAT DEVICE " component for DEFAULTFONT undefined"] (T (FONTCREATE DEFAULTFONT NIL NIL NIL STREAM NOERRORFLG] ((SETQ FONT (FONTCREATE FONT NIL NIL NIL STREAM NOERRORFLG)) (* ;; "Might get NIL if NOERRORFLG") (SETFONTCLASSCOMPONENT SPEC DEVICE FONT] ((NULL SPEC) (RETURN (\COERCEFONTDESC DEFAULTFONT STREAM NOERRORFLG))) ((OR (IMAGESTREAMP SPEC) (type? WINDOW SPEC)) (SETQ FONT (DSPFONT NIL SPEC))) (T (* ;; "If called with NOERRORFLG=T (e.g. from DSPFONT) we want to suppress invalid arg errors as well as font not found, so we can move on to other possible coercions.") (RETURN (FONTCREATE SPEC NIL NIL NIL STREAM NOERRORFLG] (* ;; "Here if arg was a fontdescriptor or imagestream") (RETURN (COND ((NULL STREAM) (* ;;  "NIL device doesn't default to display if a fully-specified font was found") FONT) ([OR (EQ STREAM (fetch (FONTDESCRIPTOR FONTDEVICE) of FONT)) (AND (type? STREAM STREAM) (EQ (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of STREAM)) (fetch (FONTDESCRIPTOR FONTDEVICE) of FONT] FONT) (T (* ;; "Here if doesn't match or if DEVICE is not explicitly a stream.") (FONTCOPY FONT 'DEVICE STREAM 'NOERROR NOERRORFLG]) (\LOOKUPFONT [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 28-Jul-88 17:05 by rmk:") (* ; "Edited 28-Jul-88 17:04 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 28-Jul-88 14:02 by rmk:") (* ; "Edited 28-Jul-88 13:54 by rmk:") (* ; "Edited 26-Feb-87 00:20 by FS") (* ;; "looks up a font in the internal cache. SASSOC for listp FACE") (DECLARE (GLOBALVARS \FONTSINCORE)) (* ;; "Someone had better have already made FACE canonical") (LET [(X (CDR (FASSOC ROTATION (CDR (SASSOC FACE (CDR (FASSOC SIZE (CDR (OR (FASSOC FAMILY \FONTSINCORE) (\FONT.SYMBOLASSOC FAMILY \FONTSINCORE] (CDR (OR (FASSOC DEVICE X) (\FONT.SYMBOLASSOC DEVICE X]) (\LOOKUPFONTSINCORE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 25-Apr-93 13:07 by rmk:") (* rrb "25-Sep-84 12:10") (* ;;; "returns a list of the fonts that are available in core. * is used to match anything.") (DECLARE (GLOBALVARS \FONTSINCORE)) (for FAMBUCKET in \FONTSINCORE when (OR (EQ FAMILY '*) (EQ FAMILY (CAR FAMBUCKET))) join (for SIZEBUCKET in (CDR FAMBUCKET) when (OR (EQ SIZE '*) (EQ SIZE (CAR SIZEBUCKET))) join (for FACEBUCKET in (CDR SIZEBUCKET) when (OR (EQ FACE '*) (EQUAL FACE (CAR FACEBUCKET))) join (for ROTBUCKET in (CDR FACEBUCKET) when (OR (EQ ROTATION '*) (EQ ROTATION (CAR ROTBUCKET))) join (for DEVBUCKET in (CDR ROTBUCKET) when (AND (OR (EQ DEVICE '*) (EQ DEVICE (CAR DEVBUCKET))) (TYPE? FONTDESCRIPTOR (CDR DEVBUCKET))) collect (LIST (CAR FAMBUCKET) (CAR SIZEBUCKET) (CAR FACEBUCKET) (CAR ROTBUCKET) (CAR DEVBUCKET]) (\READDISPLAYFONTFILE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 8-Oct-96 10:17 by rmk:") (* ;  "Edited 30-Sep-96 12:03 by kaplan") (* ; "Edited 2-Jan-87 17:55 by FS") (* ;; "Look for new filename convention, then old file name convention, with extensions. If CACHEDISPLAYFONTS, this keeps a cache of what was read, on the canonical filename's property list, so that NSDISPLAYSIZES and SMALLSCREEN size coercions can be done and undone without always going out to the directories.") (DECLARE (GLOBALVARS DISPLAYFONTEXTENSIONS DISPLAYFONTDIRECTORIES CACHEDISPLAYFONTS)) (BIND FONTFILE CSINFO STRM FIRST (* ;; "Cache is indexed by canonical font file name, without the extension fields.") (CL:WHEN [AND CACHEDISPLAYFONTS (FIND EXT INSIDE DISPLAYFONTEXTENSIONS SUCHTHAT (SETQ CSINFO (GETP (L-CASE (FILENAMEFIELD (IF (FMEMB EXT *OLD-FONT-EXTENSIONS* ) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE EXT CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE EXT CHARSET)) 'NAME)) 'CACHEDCHARSET] (RETURN (AND (NEQ CSINFO T) (COPYALL CSINFO)))) FOR EXT INSIDE DISPLAYFONTEXTENSIONS WHEN (SETQ FONTFILE (\FINDFONTFILE FAMILY SIZE FACE ROTATION DEVICE CHARSET DISPLAYFONTDIRECTORIES (LIST EXT))) DO (* ;;  "Cache is indexed by canonical font file name, without the directory or extension fields") (SETQ STRM (OPENSTREAM FONTFILE 'INPUT)) (RESETLST [SETQ CSINFO (SELECTQ (FONTFILEFORMAT STRM T) (STRIKE (RESETSAVE NIL (LIST (FUNCTION CLOSEF) STRM)) (\READSTRIKEFONTFILE STRM FAMILY SIZE FACE)) (AC (* ;; "CLOSEF is guaranteed inside \READACFONTFILE, against the possibility that we have to copy to make randaccessp") (\READACFONTFILE STRM FAMILY SIZE FACE)) (PROG1 (CLOSEF STRM) (* ; "This would get done by RESETSAVE if AC's were read sequentially and we could factor the RESETSAVE") (SHOULDNT))]) (CL:WHEN CACHEDISPLAYFONTS (PUTPROP (L-CASE (FILENAMEFIELD FONTFILE 'NAME)) 'CACHEDCHARSET CSINFO) (SETQ CSINFO (COPYALL CSINFO))) (* ;; "If not a recognizable format, I guess we should keep looking for another possible extension, altho it would also be nice to tell the user that he has a bogus file.") (RETURN CSINFO) FINALLY (* ;; "Didn't find the file, cache T to suppress future lookups") (CL:WHEN CACHEDISPLAYFONTS (PUTPROP (L-CASE (FILENAMEFIELD (IF (FMEMB (CAR (MKLIST DISPLAYFONTEXTENSIONS)) *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE (CAR (MKLIST DISPLAYFONTEXTENSIONS )) CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE (CAR (MKLIST DISPLAYFONTEXTENSIONS )) CHARSET)) 'NAME)) 'CACHEDCHARSET T))]) ) (* ;; "\FINDFONTFILE \FONTFILENAME \SEARCHFONTFILES \FONTINFOFROMFILENAME are redefined to deal with character-set directories. That behavior is conditioned on the setting of the global variable *USEOLDFONTDIRECTORIES*, T at PARC, maybe NIL most other places. " ) (ADDTOVAR *OLD-FONT-EXTENSIONS* STRIKE) (RPAQ? *USEOLDFONTDIRECTORIES* NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS *OLD-FONT-EXTENSIONS* *USEOLDFONTDIRECTORIES*) ) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)" ) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)" ) (RPAQ? CACHEDISPLAYFONTS ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS CACHEDISPLAYFONTS) ) (* ; "STRIKE format file support") (DEFINEQ (\READSTRIKEFONTFILE [LAMBDA (STRM FAMILY SIZE FACE) (* ; "Edited 4-Dec-92 12:11 by jds") (* ;  "STRM has already been determined to be a vanilla strike-format file.") (* ; "returns a charsetinfo") (COND ((NEQ 2 (GETFILEPTR STRM)) (SETFILEPTR STRM 2))) (PROG (CSINFO NUMBCODES RW BITMAP OFFSETS FIRSTCHAR LASTCHAR HEIGHT WIDTHS) (SETQ CSINFO (create CHARSETINFO)) (SETQ FIRSTCHAR (\WIN STRM)) (* ; "minimum ascii code") (SETQ LASTCHAR (\WIN STRM)) (* ; "maximum ascii code") (\WIN STRM) (* ;  "MaxWidth which isn't used by anyone.") (\WIN STRM) (* ;  "number of words in this StrikeBody") (replace (CHARSETINFO CHARSETASCENT) of CSINFO with (\WIN STRM)) (* ;  "ascent in scan lines (=FBBdy+FBBoy)") (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with (\WIN STRM)) (* ; "descent in scan-lines (=FBBoy)") (\WIN STRM) (* ;  "offset in bits (<0 for kerning, else 0, =FBBox)") (SETQ RW (\WIN STRM)) (* ; "raster width of bitmap") (* ; "height of bitmap") (* ;; "JDS 12/4/92: Apparently, these fields can be signed values, if all chars, e.g., ride above the base line.") (SETQ HEIGHT (IPLUS (SIGNED (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) 16) (SIGNED (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO) 16))) (SETQ BITMAP (BITMAPCREATE (UNFOLD RW BITSPERWORD) HEIGHT)) (\BINS STRM (fetch BITMAPBASE of BITMAP) 0 (UNFOLD (ITIMES RW HEIGHT) BYTESPERWORD)) (* ; "read bits into bitmap") (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with BITMAP) (SETQ NUMBCODES (IPLUS (IDIFFERENCE LASTCHAR FIRSTCHAR) 3)) (* (SETQ OFFSETS (ARRAY  (IPLUS \MAXCHAR 3)  (QUOTE SMALLPOSP) 0 0))) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (* ; "initialise the offsets to 0") (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET OFFSETS I 0)) (* (AIN OFFSETS FIRSTCHAR NUMBCODES  STRM)) (for I from FIRSTCHAR as J from 1 to NUMBCODES do (\FSETOFFSET OFFSETS I (\WIN STRM))) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETWIDTH WIDTHS I 0)) (* (replace WIDTHS of  (CHARSETINFO CSINFO) with  (ARRAY (IPLUS \MAXCHAR 3)  (QUOTE SMALLPOSP) 0 0))) (\FONTRESETCHARWIDTHS CSINFO FIRSTCHAR LASTCHAR) (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO WIDTHS) of CSINFO)) (RETURN CSINFO]) (\SFMAKEBOLD [LAMBDA (CSINFO) (* gbn "25-Jul-85 04:52") (PROG* ((OLDCHARBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (HEIGHT (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO))) NEWCHARBITMAP OFFSET UNKNOWNOFFSET UNKNOWNWIDTH) (SETQ NEWCHARBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDCHARBITMAP) (fetch BITMAPHEIGHT of OLDCHARBITMAP))) (SETQ UNKNOWNOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXCHAR))) (SETQ UNKNOWNWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXCHAR))) [for I from 0 to \MAXCHAR do (COND ((EQ (SETQ OFFSET (\FGETOFFSET OFFSETS I)) UNKNOWNOFFSET) (* ;  "if this is the magic charcode with the slug image (charcode 256) then leave it alone") NIL) (T (* ;  "overlap two blts to produce bold effect") (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP OFFSET 0 (\FGETWIDTH WIDTHS I ) HEIGHT 'INPUT 'REPLACE) (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP (ADD1 OFFSET) 0 (SUB1 (\FGETWIDTH WIDTHS I)) HEIGHT 'INPUT 'PAINT] (* ;  "fill in the slug for the magic charcode") (BITBLT OLDCHARBITMAP UNKNOWNOFFSET 0 NEWCHARBITMAP UNKNOWNOFFSET 0 UNKNOWNWIDTH HEIGHT 'INPUT 'REPLACE) (RETURN (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWCHARBITMAP]) (\SFMAKEITALIC [LAMBDA (CSINFO) (* gbn "18-Sep-85 17:57") (PROG ((WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (ASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (DESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (OLDBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) HEIGHT OFFSET NEWBITMAP WIDTH UNKNOWNOFFSET UNKNOWNWIDTH N M R XN XX YN YX) (SETQ HEIGHT (IPLUS ASCENT DESCENT)) (SETQ NEWBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDBITMAP) (fetch BITMAPHEIGHT of OLDBITMAP))) (SETQ UNKNOWNOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXTHINCHAR))) (SETQ UNKNOWNWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXTHINCHAR))) (SETQ N (IDIFFERENCE 0 (IQUOTIENT (IPLUS DESCENT 3) 4))) (SETQ M (IQUOTIENT (IPLUS ASCENT 3) 4)) [for I from 0 to \MAXTHINCHAR do (COND ((EQ (SETQ OFFSET (\FGETOFFSET OFFSETS I)) UNKNOWNOFFSET) (* ;  "if this is the magic charcode with the slug image (charcode 256) then leave it alone") NIL) (T (SETQ WIDTH (\FGETWIDTH WIDTHS I)) (for J from N to M do (SETQ R (IPLUS OFFSET WIDTH)) (SETQ XN (IMIN R (IMAX (IPLUS OFFSET J) 0))) (SETQ XX (IMIN R (IMAX (IPLUS R J) 0))) [SETQ YN (IMAX 0 (IPLUS DESCENT (ITIMES J 4] [SETQ YX (IMIN HEIGHT (IPLUS DESCENT (IPLUS (ITIMES J 4) 4] (COND ((AND (IGREATERP XX XN) (IGREATERP YX YN)) (BITBLT OLDBITMAP OFFSET YN NEWBITMAP XN YN (IDIFFERENCE XX XN) (IDIFFERENCE YX YN) 'INPUT 'REPLACE] (BITBLT OLDBITMAP UNKNOWNOFFSET 0 NEWBITMAP UNKNOWNOFFSET 0 UNKNOWNWIDTH HEIGHT 'INPUT 'REPLACE) (RETURN (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWBITMAP]) (\SFMAKEROTATEDFONT [LAMBDA (FONTDESC ROTATION) (* ; "Edited 30-Mar-87 20:35 by FS") (* ;; "takes a fontdecriptor and rotates it.") (* ;; "1/5/86 JDS. Masterscope claims nobody calls this. Let's find out....") (HELP "ROTATED fonts need to be fixed for NS Chars & New FONTDESCRIPTOR fields") (* (create FONTDESCRIPTOR using  FONTDESC (SETQ CHARACTERBITMAP  (\SFROTATEFONTCHARACTERS  (fetch (FONTDESCRIPTOR  CHARACTERBITMAP) of FONTDESC)  ROTATION)) (SETQ ROTATION ROTATION)  (SETQ \SFOffsets (  \SFFIXOFFSETSAFTERROTATION FONTDESC  ROTATION)) (SETQ FONTCHARSETVECTOR  (\ALLOCBLOCK (ADD1 \MAXCHARSET) T)))) (* ;; "If you uncomment out the code above, remove this comment and the NIL below") NIL]) (\SFROTATECSINFO [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:38") (* ;; "takes a CHARSETINFO and rotates it and produces a rotated equivalent one.") (create CHARSETINFO using CSINFO CHARSETBITMAP _ (\SFROTATEFONTCHARACTERS (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO) ROTATION) OFFSETS _ (\SFROTATECSINFOOFFSETS CSINFO ROTATION]) (\SFROTATEFONTCHARACTERS [LAMBDA (CHARBITMAP ROTATION) (* ; "Edited 22-Sep-87 10:38 by Snow") (* ;;; "rotate a bitmap either 90 or 270 for fonts.") (CASE ROTATION (0 CHARBITMAP) (90 (ROTATE-BITMAP-LEFT CHARBITMAP)) (180 (ROTATE-BITMAP (ROTATE-BITMAP CHARBITMAP))) (270 (ROTATE-BITMAP CHARBITMAP)))]) (\SFFIXOFFSETSAFTERROTATION [LAMBDA (FONTDESC ROTATION) (* ; "Edited 30-Mar-87 20:35 by FS") (* ;; "adjusts offsets in case where rotation turned things around.") (HELP "NEED TO UPDATE THIS FN TO NSCHARS & NEW FONT FIELDS") (* (COND ((EQ ROTATION 270)  (PROG ((OFFSETS (fetch  (FONTDESCRIPTOR \SFOffsets) of  FONTDESC)) (WIDTHS  (fetch (FONTDESCRIPTOR \SFWidths) of  FONTDESC)) (BITMAPHEIGHT  (BITMAPWIDTH (fetch  (FONTDESCRIPTOR CHARACTERBITMAP) of  FONTDESC))) NEWOFFSETS)  (SETQ NEWOFFSETS (COPYARRAY OFFSETS))  (for CHARCODE from 0 to \MAXCHAR do  (SETA NEWOFFSETS CHARCODE  (IDIFFERENCE BITMAPHEIGHT  (IPLUS (ELT OFFSETS CHARCODE)  (ELT WIDTHS CHARCODE)))))  (* ;  "may be some problem with dummy character representation.")  (RETURN NEWOFFSETS)))  (T (fetch (FONTDESCRIPTOR \SFOffsets)  of FONTDESC)))) (* ;; "If you uncomment out the code above, remove this comment and the NIL below") NIL]) (\SFROTATECSINFOOFFSETS [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:36") (* ;  "adjusts offsets in case where rotation turned things around.") (COND ((EQ ROTATION 270) (PROG ((OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (BITMAPHEIGHT (BITMAPWIDTH (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO))) NEWOFFSETS) (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) [for CHARCODE from 0 to \MAXCHAR do (\FSETOFFSET NEWOFFSETS CHARCODE (IDIFFERENCE BITMAPHEIGHT (IPLUS (\FGETOFFSET OFFSETS CHARCODE) (\FGETWIDTH WIDTHS CHARCODE] (* ;  "may be some problem with dummy character representation.") (RETURN NEWOFFSETS))) (T (fetch (CHARSETINFO OFFSETS) of CSINFO]) (\SFMAKECOLOR [LAMBDA (BWCSINFO BACKCOLOR FORECOLOR BITSPERPIXEL) (* kbr%: " 6-Feb-86 18:17") (* ;; "makes a csinfo that has a character bitmap that is colorized.") (PROG (CHARACTERBITMAP COLORCSINFO) [COND ((IMAGESTREAMP BITSPERPIXEL) (OR BACKCOLOR (SETQ BACKCOLOR (DSPBACKCOLOR NIL BITSPERPIXEL))) (OR FORECOLOR (SETQ FORECOLOR (DSPCOLOR NIL BITSPERPIXEL))) (SETQ BITSPERPIXEL (IMAGESTREAMTYPE BITSPERPIXEL] [SETQ BITSPERPIXEL (COND ((NUMBERP BITSPERPIXEL) BITSPERPIXEL) (T (\DISPLAYSTREAMTYPEBPP BITSPERPIXEL] (SETQ BACKCOLOR (COLORNUMBERP BACKCOLOR BITSPERPIXEL)) (SETQ FORECOLOR (COLORNUMBERP FORECOLOR BITSPERPIXEL)) (SETQ CHARACTERBITMAP (COLORIZEBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of BWCSINFO ) BACKCOLOR FORECOLOR BITSPERPIXEL)) (SETQ COLORCSINFO (create CHARSETINFO using BWCSINFO CHARSETBITMAP _ CHARACTERBITMAP)) (RETURN COLORCSINFO]) ) (DEFINEQ (WRITESTRIKEFONTFILE [LAMBDA (FONT CHARSET FILENAME) (* ; "Edited 30-Mar-87 20:25 by FS") (* ;; "Write strike FILE using info in FONT, AND CHARSET number.") (* ;; "This code only works if original file was STRIKE. Otherwise, a new CSINFO is dummied up and it is used instead. So, CSINFO when read in might be different than the one written out.") (PROG (STREAM CSINFO FIRSTCHAR LASTCHAR WIDTHS OFFSETS IMWIDTHS MAXWIDTH RASTERWIDTH LENGTH DUMMYCHAR DUMMYOFFSET DUMMYINDEX WIDTH OFFSET CODE MAXCODE) (SETQ MAXCODE 255) (* ; "Max charcode") (SETQ DUMMYINDEX 256) (* ; "Dummy char marker") (COND ((NOT (FONTP FONT)) (LISPERROR "ILLEGAL ARG" FONT))) (COND ((NULL CHARSET) (SETQ CHARSET 0)) ((NOT (AND (IGEQ CHARSET 0) (ILESSP CHARSET \MAXCHARSET))) (LISPERROR "ILLEGAL ARG" CHARSET))) (SETQ CSINFO (STRIKECSINFO (\GETCHARSETINFO CHARSET FONT T))) (* ;  "Guarantee its a STRIKE font CSINFO.") (COND ((NULL CSINFO) (ERROR "Couldn't find charset " CHARSET))) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (SETQ IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (* ;; "Index 256 contains a dummy width; use it's value to determine missing chars") (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS DUMMYINDEX)) [SETQ FIRSTCHAR (for I from 0 to MAXCODE thereis (NOT (EQ (\FGETOFFSET OFFSETS I) DUMMYOFFSET] [SETQ LASTCHAR (for I from MAXCODE to 0 by -1 thereis (NOT (EQ (\FGETOFFSET OFFSETS I) DUMMYOFFSET] (SETQ DUMMYCHAR (ADD1 LASTCHAR)) [SETQ STREAM (OPENSTREAM FILENAME 'OUTPUT 'NEW '((TYPE BINARY] (* ;; "") (* ;; "STRIKE Header") (* ;; "") (\WOUT STREAM 32768) (\WOUT STREAM FIRSTCHAR) (\WOUT STREAM LASTCHAR) (SETQ MAXWIDTH 0) [for I from 0 to DUMMYINDEX do (SETQ MAXWIDTH (IMAX MAXWIDTH (\FGETWIDTH WIDTHS I] (\WOUT STREAM MAXWIDTH) (* ;; "") (* ;; "STRIKE Body") (* ;; "") (* ;; "Length of body") (SETQ RASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO))) (SETQ LENGTH (IPLUS 8 (IDIFFERENCE LASTCHAR FIRSTCHAR) (ITIMES (fetch (FONTDESCRIPTOR \SFHeight) of FONT) RASTERWIDTH))) (\WOUT STREAM LENGTH) (* ;; "Ascent, Descent, Xoffset (no longer used) and Rasterwidth.") (\WOUT STREAM (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (\WOUT STREAM (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (\WOUT STREAM 0) (* ;  "offset in bits (<0 for kerning, else 0, =FBBox)") (\WOUT STREAM RASTERWIDTH) (* ;; "Bitmap") [\BOUTS STREAM (fetch (BITMAP BITMAPBASE) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) 0 (ITIMES 2 RASTERWIDTH (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO] (* ;; "Offsets") (SETQ CODE 0) (\WOUT STREAM CODE) (for I from FIRSTCHAR to DUMMYCHAR do (SETQ OFFSET (\FGETOFFSET OFFSETS I)) (SETQ WIDTH (\FGETWIDTH WIDTHS I)) [COND ((AND (IEQP OFFSET DUMMYOFFSET) (NOT (IEQP I DUMMYCHAR))) (* ; "CODE stays the same.") ) (T (SETQ CODE (IPLUS CODE WIDTH] (\WOUT STREAM CODE)) (CLOSEF STREAM]) (STRIKECSINFO [LAMBDA (CSINFO) (* ; "Edited 27-Apr-89 13:39 by atm") (* ;; "Returns a STRIKE type font descriptor (EQ WIDTHS IMAGEWIDTHS), cause we know how to write those guys out (they read quicker but display slower). If (EQ WIDTHS IMAGEWIDTHS), just return original.") (PROG (WIDTHS OFFSETS IMWIDTHS OLDBM BMWIDTH BMHEIGHT NEWBM NEWOFFSET NEWWIDTH OLDOFFSET DUMMYOFFSET NEWOFFSETS) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (SETQ IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (if (EQ WIDTHS IMWIDTHS) then (RETURN CSINFO)) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (SETQ OLDBM (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS 256)) (SETQ BMHEIGHT (BITMAPHEIGHT OLDBM)) [SETQ BMWIDTH (for I from 0 to \MAXTHINCHAR sum (if (IEQP DUMMYOFFSET (\FGETOFFSET OFFSETS I)) then 0 else (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) (\FGETWIDTH WIDTHS I] (* ;; "") (* ;; "Initialize new offsets vector") (* ;; "") (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET NEWOFFSETS I 0)) (\FSETOFFSET NEWOFFSETS (ADD1 \MAXTHINCHAR) BMWIDTH) (* ;; "") (* ;; "Adjust bitmap with so width = imagewidth, fill offsets") (* ;; "") (SETQ NEWBM (BITMAPCREATE BMWIDTH BMHEIGHT 1)) (SETQ NEWOFFSET 0) [for I from 0 to 255 do (SETQ OLDOFFSET (\FGETOFFSET OFFSETS I)) (if (IEQP DUMMYOFFSET OLDOFFSET) then (\FSETOFFSET NEWOFFSETS I BMWIDTH) else (\FSETOFFSET NEWOFFSETS I NEWOFFSET) (SETQ NEWWIDTH (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) (\FGETWIDTH WIDTHS I))) (BITBLT OLDBM OLDOFFSET 0 NEWBM NEWOFFSET 0 (\FGETWIDTH IMWIDTHS I) BMHEIGHT 'REPLACE) (SETQ NEWOFFSET (IPLUS NEWOFFSET NEWWIDTH] (* ;; "") (* ;; "Make new CSInfo record withs IMAGEWIDTHS, WIDTHS the same") (* ;; "") (SETQ WIDTHS (COPYALL WIDTHS)) [for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I (IMAX (\FGETWIDTH WIDTHS I) (\FGETIMAGEWIDTH IMWIDTHS I] (RETURN (create CHARSETINFO WIDTHS _ WIDTHS OFFSETS _ NEWOFFSETS IMAGEWIDTHS _ WIDTHS CHARSETBITMAP _ NEWBM YWIDTHS _ (fetch (CHARSETINFO YWIDTHS) of CSINFO) CHARSETASCENT _ (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) CHARSETDESCENT _ (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO]) ) (/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) '((FONTCLASS 0 (BITS . 7)) (FONTCLASS 2 POINTER) (FONTCLASS 4 POINTER) (FONTCLASS 6 POINTER) (FONTCLASS 8 POINTER) (FONTCLASS 10 POINTER)) '12) (/DECLAREDATATYPE 'FONTDESCRIPTOR '(POINTER POINTER POINTER POINTER WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD SIGNEDWORD SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) WORD POINTER POINTER POINTER) '((FONTDESCRIPTOR 0 POINTER) (FONTDESCRIPTOR 2 POINTER) (FONTDESCRIPTOR 4 POINTER) (FONTDESCRIPTOR 6 POINTER) (FONTDESCRIPTOR 8 (BITS . 15)) (FONTDESCRIPTOR 9 (BITS . 15)) (FONTDESCRIPTOR 10 (BITS . 15)) (FONTDESCRIPTOR 11 (BITS . 15)) (FONTDESCRIPTOR 12 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 16 POINTER) (FONTDESCRIPTOR 18 POINTER) (FONTDESCRIPTOR 20 POINTER) (FONTDESCRIPTOR 22 POINTER) (FONTDESCRIPTOR 24 POINTER) (FONTDESCRIPTOR 26 (BITS . 7)) (FONTDESCRIPTOR 27 (BITS . 15)) (FONTDESCRIPTOR 28 POINTER) (FONTDESCRIPTOR 30 POINTER) (FONTDESCRIPTOR 32 POINTER)) '34) (/DECLAREDATATYPE 'CHARSETINFO '(POINTER POINTER POINTER POINTER POINTER WORD WORD POINTER) '((CHARSETINFO 0 POINTER) (CHARSETINFO 2 POINTER) (CHARSETINFO 4 POINTER) (CHARSETINFO 6 POINTER) (CHARSETINFO 8 POINTER) (CHARSETINFO 10 (BITS . 15)) (CHARSETINFO 11 (BITS . 15)) (CHARSETINFO 12 POINTER)) '14) (ADDTOVAR SYSTEMRECLST (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) (OTHERDEVICEFONTPROPS POINTER) (FONTSCALE POINTER) (\SFFACECODE BITS 8) (FONTAVGCHARWIDTH WORD) (FONTIMAGEWIDTHS POINTER) (FONTCHARSETVECTOR POINTER) (FONTEXTRAFIELD2 POINTER))) (DATATYPE CHARSETINFO (WIDTHS OFFSETS IMAGEWIDTHS CHARSETBITMAP YWIDTHS (CHARSETASCENT WORD) (CHARSETDESCENT WORD) LEFTKERN)) ) (RPAQ? \FONTSINCORE ) (RPAQ? \DEFAULTDEVICEFONTS ) (RPAQ? \UNITWIDTHSVECTOR ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DISPLAYFONTDIRECTORIES \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\UNITWIDTHSVECTOR) ) (DECLARE%: EVAL@COMPILE (RPAQQ NORUNCODE 255) (CONSTANTS (NORUNCODE 255)) ) (* "FOLLOWING DEFINITIONS EXPORTED") (DEFOPTIMIZER FONTPROP (&REST ARGS) (SELECTQ (AND (EQ (CAADR ARGS) 'QUOTE) (CADADR ARGS)) (ASCENT (LIST 'FONTASCENT (CAR ARGS))) (DESCENT (LIST 'FONTDESCENT (CAR ARGS))) (HEIGHT (LIST 'FONTHEIGHT (CAR ARGS))) 'IGNOREMACRO)) (* "END EXPORTED DEFINITIONS") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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 _ 'MEDIUM SLOPE _ 'REGULAR EXPANSION _ '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)) ) (/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) '((FONTCLASS 0 (BITS . 7)) (FONTCLASS 2 POINTER) (FONTCLASS 4 POINTER) (FONTCLASS 6 POINTER) (FONTCLASS 8 POINTER) (FONTCLASS 10 POINTER)) '12) (/DECLAREDATATYPE 'FONTDESCRIPTOR '(POINTER POINTER POINTER POINTER WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD SIGNEDWORD SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) WORD POINTER POINTER POINTER) '((FONTDESCRIPTOR 0 POINTER) (FONTDESCRIPTOR 2 POINTER) (FONTDESCRIPTOR 4 POINTER) (FONTDESCRIPTOR 6 POINTER) (FONTDESCRIPTOR 8 (BITS . 15)) (FONTDESCRIPTOR 9 (BITS . 15)) (FONTDESCRIPTOR 10 (BITS . 15)) (FONTDESCRIPTOR 11 (BITS . 15)) (FONTDESCRIPTOR 12 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 16 POINTER) (FONTDESCRIPTOR 18 POINTER) (FONTDESCRIPTOR 20 POINTER) (FONTDESCRIPTOR 22 POINTER) (FONTDESCRIPTOR 24 POINTER) (FONTDESCRIPTOR 26 (BITS . 7)) (FONTDESCRIPTOR 27 (BITS . 15)) (FONTDESCRIPTOR 28 POINTER) (FONTDESCRIPTOR 30 POINTER) (FONTDESCRIPTOR 32 POINTER)) '34) (/DECLAREDATATYPE 'CHARSETINFO '(POINTER POINTER POINTER POINTER POINTER WORD WORD POINTER) '((CHARSETINFO 0 POINTER) (CHARSETINFO 2 POINTER) (CHARSETINFO 4 POINTER) (CHARSETINFO 6 POINTER) (CHARSETINFO 8 POINTER) (CHARSETINFO 10 (BITS . 15)) (CHARSETINFO 11 (BITS . 15)) (CHARSETINFO 12 POINTER)) '14) (DECLARE%: EVAL@COMPILE (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 () `(CL:MAKE-ARRAY (IPLUS \MAXTHINCHAR 3) :ELEMENT-TYPE '(SIGNED-BYTE 16) :INITIAL-ELEMENT 0)) (DEFMACRO \FSETLEFTKERN (LEFTKERNBLOCK INDEX KERNVALUE) `(CL:SETF (CL:AREF ,LEFTKERNBLOCK ,INDEX) ,KERNVALUE)) (DEFMACRO \FGETLEFTKERN (LEFTKERNBLOCK CHAR8CODE) `(CL:AREF ,LEFTKERNBLOCK ,CHAR8CODE)) (DECLARE%: EVAL@COMPILE (RPAQQ \MAXNSCHAR 65535) (CONSTANTS (\MAXNSCHAR 65535)) ) (* "END EXPORTED DEFINITIONS") ) (* ; "NS Character specific code") (DEFINEQ (\CREATECHARSET [LAMBDA (CHARSET FONT NOSLUG?) (* ; "Edited 8-May-93 23:42 by rmk:") (* ; "Edited 4-Dec-92 11:43 by jds") (* ;; "Creates and returns the CHARSETINFO for charset CHARSET in fontdesc FONT, installing it in fonts FONTCHARSETVECTOR") (* ;  "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") (DECLARE (GLOBALVARS \DISPLAYSTREAMTYPES)) (AND (IGREATERP CHARSET \MAXCHARSET) (\ILLEGAL.ARG CHARSET)) (PROG [CSINFO (CREATEFN (COND ((FMEMB (FONTPROP FONT 'DEVICE) \DISPLAYSTREAMTYPES) (FUNCTION \CREATECHARSET.DISPLAY)) (T (CADR (ASSOC 'CREATECHARSET (CDR (ASSOC (FONTPROP FONT 'DEVICE) IMAGESTREAMTYPES] (* ;; "Create a descriptor of info for that charset, and use it to fill things in.") (COND ([NOT (SETQ CSINFO (APPLY CREATEFN (APPEND (FONTPROP FONT 'DEVICESPEC) (LIST CHARSET FONT NOSLUG?] (* ;  "the create method returned NIL--NOSLUG? must be T.") (RETURN NIL))) (replace \SFAscent of FONT with (IMAX (fetch \SFAscent of FONT) (SIGNED (fetch CHARSETASCENT of CSINFO) 16))) (replace \SFDescent of FONT with (IMAX (fetch \SFDescent of FONT) (SIGNED (ffetch CHARSETDESCENT of CSINFO) 16))) (replace \SFHeight of FONT with (IPLUS (fetch \SFAscent of FONT) (ffetch \SFDescent of FONT))) (* ;  "jtm: height = ascent + descent, not (IMAX fontHeight charSetHeight)") (RETURN (\SETCHARSETINFO (ffetch FONTCHARSETVECTOR of FONT) CHARSET CSINFO]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS CHARSETERRORFLG) ) (RPAQ? DISPLAYFONTCOERCIONS NIL) (RPAQ? MISSINGCHARSETDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)) ((TERMINAL 6) (MODERN 6)) ((TERMINAL 8) (MODERN 8)) ((TERMINAL 10) (MODERN 10)) ((TERMINAL 12) (MODERN 12)))) (RPAQ? MISSINGDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)))) (RPAQ? CHARSETERRORFLG NIL) (RPAQ? \DEFAULTCHARSET 0) (DEFINEQ (\FONTRESETCHARWIDTHS [LAMBDA (CSINFO FIRSTCHAR LASTCHAR) (* AJB " 6-Dec-85 14:42") (* ;  "sets the widths array from the offsets array") (PROG ((mincharcode FIRSTCHAR) (maxcharcode LASTCHAR) (offsets (fetch (CHARSETINFO OFFSETS) of CSINFO)) (widths (fetch (CHARSETINFO WIDTHS) of CSINFO)) left right charoffset dummycharoffset dummycharwidth) (SETQ dummycharoffset (\FGETOFFSET offsets (ADD1 maxcharcode))) (SETQ dummycharwidth (IDIFFERENCE (\FGETOFFSET offsets (IPLUS maxcharcode 2)) dummycharoffset)) [for charcode from 0 to \MAXCHAR do (COND ((OR (ILESSP charcode mincharcode) (IGREATERP charcode maxcharcode)) (\FSETOFFSET offsets charcode dummycharoffset) (\FSETWIDTH widths charcode dummycharwidth)) (T (SETQ left (\FGETWIDTH offsets charcode)) (SETQ right (\FGETWIDTH offsets (ADD1 charcode))) (COND ((EQ left right) (\FSETOFFSET offsets charcode dummycharoffset) (\FSETWIDTH widths charcode dummycharwidth)) (T (\FSETWIDTH widths charcode (IDIFFERENCE right left] (\FSETWIDTH widths (ADD1 \MAXCHAR) dummycharwidth) (\FSETOFFSET offsets (ADD1 \MAXCHAR) dummycharoffset]) ) (DECLARE%: DONTEVAL@LOAD (RPAQ? DISPLAYFONTEXTENSIONS 'DISPLAYFONT) (RPAQ? DISPLAYFONTDIRECTORIES '({DSK}/USR/LOCAL/LDE/FONTS/DISPLAY/PRESENTATION/ {dsk}/usr/local/lde/fonts/display/publishing/)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \FGETCHARIMAGEWIDTH MACRO (OPENLAMBDA (FONT CHARCODE) (\FGETWIDTH (ffetch (CHARSETINFO IMAGEWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) FONT)) (\CHAR8CODE CHARCODE)))) (PROGN (PUTPROPS \GETFONTDESC DMACRO [X (COND ((CDR X) (CONS '\COERCEFONTDESC X)) (T `(\DTEST ,(CAR X) 'FONTDESCRIPTOR]) (PUTPROPS \GETFONTDESC MACRO (= . \COERCEFONTDESC))) (PUTPROPS \SETCHARSETINFO MACRO ((CHARSETVECTOR CHARSET CSINFO) (\RPLPTR CHARSETVECTOR (UNFOLD CHARSET 2) CSINFO))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (PUTPROPS FONT FILETYPE :FAKE-COMPILE-FILE) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FONTCOPY) ) (PUTPROPS FONT COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1999 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (8618 18137 (CHARWIDTH 8628 . 9413) (CHARWIDTHY 9415 . 10785) (STRINGWIDTH 10787 . 11880 ) (\CHARWIDTH.DISPLAY 11882 . 12295) (\STRINGWIDTH.DISPLAY 12297 . 12721) (\STRINGWIDTH.GENERIC 12723 . 18135)) (18138 24520 (DEFAULTFONT 18148 . 19981) (FONTCLASS 19983 . 22145) (FONTCLASSUNPARSE 22147 . 23046) (FONTCLASSCOMPONENT 23048 . 23557) (SETFONTCLASSCOMPONENT 23559 . 24518)) (25194 37926 ( FONTCREATE 25204 . 34471) (\FONT.SYMBOLMEMB 34473 . 34703) (\FONT.SYMBOLASSOC 34705 . 35863) ( \FONT.COMPARESYMBOL 35865 . 37924)) (37965 42589 (FONTASCENT 37975 . 38143) (FONTDESCENT 38145 . 38414 ) (FONTHEIGHT 38416 . 38602) (FONTPROP 38604 . 42047) (\AVGCHARWIDTH 42049 . 42587)) (42636 55275 ( GETCHARBITMAP 42646 . 45536) (PUTCHARBITMAP 45538 . 53595) (MOVECHARBITMAP 53597 . 55273)) (55276 140202 (FONTCOPY 55286 . 60594) (FONTSAVAILABLE 60596 . 65801) (FONTFILEFORMAT 65803 . 67427) (FONTP 67429 . 67728) (FONTUNPARSE 67730 . 70294) (SETFONTDESCRIPTOR 70296 . 72005) (CHARCODEP 72007 . 72368) (EDITCHAR 72370 . 72799) (\STREAMCHARWIDTH 72801 . 76965) (\UNITWIDTHSVECTOR 76967 . 77330) ( \CREATEDISPLAYFONT 77332 . 78085) (\CREATECHARSET.DISPLAY 78087 . 81003) (\CREATE-REAL-CHARSET.DISPLAY 81005 . 88296) (\BUILDSLUGCSINFO 88298 . 89741) (\SEARCHDISPLAYFONTFILES 89743 . 91676) ( \SEARCHFONTFILES 91678 . 94989) (\FINDFONTFILE 94991 . 96182) (\FONTSYMBOL 96184 . 96834) ( \DEVICESYMBOL 96836 . 97705) (\FONTFACE 97707 . 104897) (\FONTFACE.COLOR 104899 . 111819) ( \FONTFILENAME 111821 . 115236) (\FONTFILENAME.OLD 115238 . 118187) (\FONTFILENAME.NEW 118189 . 120446) (\FONTINFOFROMFILENAME 120448 . 123562) (\FONTINFOFROMFILENAME.OLD 123564 . 125841) (\GETFONTDESC 125843 . 126234) (\COERCEFONTDESC 126236 . 131621) (\LOOKUPFONT 131623 . 132967) (\LOOKUPFONTSINCORE 132969 . 135042) (\READDISPLAYFONTFILE 135044 . 140200)) (141105 158155 (\READSTRIKEFONTFILE 141115 . 145643) (\SFMAKEBOLD 145645 . 148041) (\SFMAKEITALIC 148043 . 150946) (\SFMAKEROTATEDFONT 150948 . 152349) (\SFROTATECSINFO 152351 . 152988) (\SFROTATEFONTCHARACTERS 152990 . 153370) ( \SFFIXOFFSETSAFTERROTATION 153372 . 155511) (\SFROTATECSINFOOFFSETS 155513 . 156782) (\SFMAKECOLOR 156784 . 158153)) (158156 166467 (WRITESTRIKEFONTFILE 158166 . 163007) (STRIKECSINFO 163009 . 166465)) (181614 184470 (\CREATECHARSET 181624 . 184468)) (185556 187308 (\FONTRESETCHARWIDTHS 185566 . 187306 ))))) STOP \ No newline at end of file diff --git a/sources/FONT.LCOM b/sources/FONT.LCOM index 317c274c1f947a67250a8e5f8b112974f46e6cfe..43f79cc2289601fc27be2e21367b7535e6f8c2f7 100644 GIT binary patch delta 1281 zcma)6&ubGw6wapjqiVE5NkOVS7sLc<*qPbgWTS*^vm1>j*)_Yi6e^M?u??h6N!m&j z$-#f1brtmLMGz56^x#Rslit`U+4M((Am%W<$-MdA_r34Ue%lGY+6ivX zbU~ZS))uCyL|EZQ%HmQLp}x`u zvEYLMiz$#@Z#2N^Al@1PIUp8`#YCu<*N_fE4;)aMWQd*+qoD}L%#=*sH4S7uEQ@JL z8D;$~!~Ta3B(4!fg33~PWwF+VwdRE+gd#I~$pJ1E#W+z|ZPhmF&Goj=??Tc$DokGd zzecIOkHV4B-sfZFco?$4z%aA=t-Q;zqY!u*3_cEDKa|kljX0hYzAY%;c6ef(s4(A` znYo5cOcxTw`yRf=BtY?ot54@m8wg84uApBvE!)8j0msGD0uYG|r1kDjEFL;FP!?$r z@5|(wZZ;4MjM$$7_;OKZQ+g| zzStIsx4GUOd7dkI;f?pg8}IAJ!X>urwLJ$+MUNbtvjHY6{Ra2pZD3U4bi0hm{Tu!$ z0>g&;^!r^Dj0`g>{YD0Z99q;!& zqf1pNV#9eEneywr(;!ROm|X`-Iosu@$Zmg3m?rOy2}`K^VI1G(@GYh=n9UUpYZe%j zhuBdK%XJUt7_~|JT&Tj6eJ)hSaMwmkm4leX4`ONPN#Jvo_n}BUu?I!CD|-`xu4FB* j(0MAz-j7Z+$kg7+`!`2>mk<2`ZI4$} delta 1296 zcma)5&rj1}7+yz|09k@24mFy*EYWOX0l0N@cK|5ycq9W0l&<+R}1$9%`!)gJ+sEu|2%DUVB`vY>uo{=a;K>k`zZa zYFq1->c&XkD!9qJBmt2amWRg6K{=GcVg~a&U!n~&KMJiz$z(DH^W{xiKGwQLd`1*9 zf*eak;(5c=)uOJry4DfmPe?<~I}so$EfaDZDvRaSh3W=u)^24Wo-a5MnKLbGV#;Q- zJ4QjZin`}g3o-nx0qh8c^F#(|uVa^ky<2}R5es?KEAMZu<0VjLq z@RcYa%)?v&OC3{+j_!gadXa&#oB$N8<|;W;w*d(lj7eoww`>Ox5y5fk*GWLU*d8YF zpy_#K%5)io=F5SF3*PaKYmM0u7wRg})}gP=d|Y6*hnWFp4wbhh_RcDO?A2dlHoN3I z`-8ci#s2J4FT3;e{_NN%5&m6&C@!Ta21_rhI%})xjtVJyrRmd#synlj*K?K$BKa>! z;K8#8qYcUdOH@t8aj4RrC?JhMGaTDgWGffDkE{5{_j{b^ZErQY-x(!Fgm=7k!0mbmPafV$2X!rb7Dy@$ zn&Ynz5J3(U3zV{fU^zfbkQAi&%M64{=%Wu@EJ>gji&l~T90XLWpein4%7Gulx?sv= zo63Mm2OL21NkJBj(*M%#{dlT12oD7+7;7V7md=y{0TI6qQ?O{*F8fNSJ6k*=OQ(xR zWd7`!4ybL*B4Qe5jDlv(P>rO{X=U23(OOc#DdB7uEV5vK7A(-?iR_qC*E+Y>0rQma zwo-_4cM1zh__P#avYeDcw8Na{#U5SuuGZghlJ}{e2n&4kXZ@c4)AG-c;@ycvq+pnl Ezus$7Gynhq From 3b1c7c2daefa61526aa40f2d576898de6e52d6e3 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Fri, 12 Feb 2021 20:33:40 -0800 Subject: [PATCH 05/37] sources/LLPARAMS was pre BIGVM --- sources/LLPARAMS | 1706 +---------------------------------------- sources/LLPARAMS.LCOM | Bin 2952 -> 2380 bytes 2 files changed, 1 insertion(+), 1705 deletions(-) diff --git a/sources/LLPARAMS b/sources/LLPARAMS index 3326f475..7e470a62 100644 --- a/sources/LLPARAMS +++ b/sources/LLPARAMS @@ -1,1705 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP" BASE 8) -(FILECREATED "31-Jan-98 09:16:51" {DSK}disk2>jdstools>lc3>lispcore3.0>sources>LLPARAMS.;15 232505Q - - changes to%: (VARS INITCONSTANTS) - - previous date%: "30-Jan-98 12:43:29" -{DSK}disk2>jdstools>lc3>lispcore3.0>sources>LLPARAMS.;14) - - -(* ; " -Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1994, 1998 by Syntelligence Systems, Inc. This program or documentation contains confidential information and trade secrets of Syntelligence Systems, Inc. Reverse engineering, reverse compiling and disassembling of object code are prohibited. Use of this program or documentation is governed by written agreement with Syntelligence Systems, Inc. Use of copyright notice is precautionary and does not imply publication or disclosure of trade secrets. All rights reserved. -") - -(PRETTYCOMPRINT LLPARAMSCOMS) - -(RPAQQ LLPARAMSCOMS ( - (* ;; - "This file defines the constants that control how a SYSOUT is laid out.") - - (FNS MAKERECORD) - - (* ;; "When you change the SYSOUT's layout in this file, you must also") - - - (* ;; " Recreate RDSYS in the library, using (DORENAME 'R)") - - - (* ;; - " Recompile DLFIXINIT and anything else that uses the constants defined here.") - - - (* ;; " Recompile LLFAULT. recompile VMEM") - - (DECLARE%: DONTCOPY - (EXPORT (CONSTANTS (WINDFLG T)) - - (* ;; - "INITCONSTANTS are constants (e.g. \LISTPDTD) to be defined at init time.") - - (VARS INITCONSTANTS MISCSTATSLAYOUT IFPAGELAYOUT - MAIKO.IFPAGELAYOUT IOPAGELAYOUT) - [CONSTANTS * (for X in INITCONSTANTS when (FIXP (CADR X)) - collect - (LIST (CAR X) - (CADR X] - (CONSTANTS * \MPERRORS) - (GLOBALVARS * (for X in INITCONSTANTS when - [AND (NEQ (CAR X) - '*) - (NOT (FIXP (CADR X] - collect - (CAR X))) - (P * (LIST (MAKERECORD 'MISCSTATS MISCSTATSLAYOUT) - (COND ((EQ \MACHINETYPE \MAIKO) - (MAKERECORD 'IFPAGE MAIKO.IFPAGELAYOUT)) - (T (MAKERECORD 'IFPAGE IFPAGELAYOUT))) - (MAKERECORD 'IOPAGE IOPAGELAYOUT))) - (MACROS EMADDRESS EMGETBASE EMPUTBASE EMULATORSEGMENT - EMPOINTER EMADDRESSP))) - (PROP MAKEFILE-ENVIRONMENT LLPARAMS))) - - - -(* ;; "This file defines the constants that control how a SYSOUT is laid out.") - -(DEFINEQ - -(MAKERECORD [LAMBDA (NAME LAYOUT) (* bvm%: "29-NOV-82 17:40") (PROG ((I 0) PTRS M NAM) (RETURN `(BLOCKRECORD %, NAME %, [for X in LAYOUT collect (CONS (SETQ NAM (CAR X)) (COND ((EQ NAM '*) (CDR X)) (T (PROG1 [COND [[FIXP (SETQ M (CAR (SETQ X (CDR X] (LIST M (CAR (SETQ X (CDR X] (T (SETQ M (SELECTQ (CAR X) ((FIXP FULLXPOINTER) (OR (EVENP I WORDSPERCELL) (ERROR "Record field not aligned" (CONS NAM X))) 2) (WORD 1) (SHOULDNT))) (LIST (CAR X] [COND ((CADDR X) (SETQ PTRS (CONS (LIST (PACK* NAM 'PTR) `(\ADDBASE DATUM %, I)) PTRS] (add I M))] %,. [AND PTRS `((ACCESSFNS %, NAME %, PTRS] (CREATE (\ALLOCBLOCK %, (FOLDHI I WORDSPERCELL]) -) - - - -(* ;; "When you change the SYSOUT's layout in this file, you must also") - - - - -(* ;; " Recreate RDSYS in the library, using (DORENAME 'R)") - - - - -(* ;; " Recompile DLFIXINIT and anything else that uses the constants defined here.") - - - - -(* ;; " Recompile LLFAULT. recompile VMEM") - -(DECLARE%: DONTCOPY -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE - -(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 10Q) - (\CHARACTERP 11Q) - (\VMEMPAGEP 12Q NIL VMemPagePType) - (\STREAM 13Q NIL STREAMTYPE) - - (* ;; "TYPE TABLE CONSTANTS - - - - - - - - - - - - - - - - - - - - - -") - - (\TT.TYPEMASK 3777Q TTTypeMask T) - (\TT.NOREF 100000Q NIL T) - (\TT.SYMBOLP 40000Q NIL T) - (\TT.FIXP 20000Q) - (\TT.NUMBERP 10000Q) - (\TT.ATOM 4000Q) - - (* ;; - "page map - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") - - (\PMblockSize 40Q PMBLOCKSIZE) - (\STATSsize 10Q T) - (\NumPMTpages 10Q) - (\EmptyPMTEntry 177777Q T) - (\FirstVmemBlock 2 T) - (\MAXVMPAGE 377775Q) - (\MAXVMSEGMENT 377Q) - - (* ;; "interface page") - - (\IFPValidKey 12743Q T) - - (* ;; "MDS") - - (\FirstMDSPage 37776Q) - (\MaxMDSPage 1777775Q) - (\DefaultSecondMDSPage 177774Q) - (\MDSIncrement 1000Q) - (\PagesPerMDSUnit 2) - (* ; - "(FOLDLO \MDSIncrement WORDSPERPAGE)") - - (* ;; "arrays") - - (\ARRAYSPACE (56Q 0)) - (\FirstArraySegment 56Q) - (\FirstArrayPage 27000Q) - (\ARRAYSPACE2 (100Q 0)) - (\DefaultSecondArrayPage 40000Q) - - (* ;; "stack block constants") - - (\StackMask 160000Q T T) - (\FxtnBlock 140000Q T T) - (\GuardBlock 160000Q T T) - (\BFBlock 100000Q T T) - (\FreeStackBlock 120000Q T T) - (\NotStackBlock 0) - (* ; "none of the above") - (\MinExtraStackWords 40Q T T) - - (* ;; "backspace kludge") - - (ERASECHARCODE 0 T) - - (* ;; "GC constants") - - (\HT1CNT 2000Q NIL T) - (\HTSTKBIT 1000Q NIL T) - (\HTCNTMASK 176000Q NIL T) - (\HTMAINSIZE 200000Q NIL T) - (\HTCOLLSIZE 4000000Q 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 (25Q 0) - (AHTspace AHTbase)) - (\AtomHTpages 400Q AHTSIZE) - (\LastAtomPage 377Q) - (\MaxAtomFrLst 177777Q) - (\SMALLPOSPSPACE (16Q 0)) - (\SmallPosHi 16Q SMALLPOSspace smallpl) - (\SMALLNEGSPACE (17Q 0)) - (\SmallNegHi 17Q SMALLNEGspace smallneg) - (\NumSmallPages 1000Q) - - (* ;; "PNAME SPACEin the old world; used for initial atoms now.") - - (\PNPSPACE (10Q 0) - (PNPspace PNPbase)) - (\PNAME.HI 10Q) - (\OLDATOMSPACE (54Q 0)) - (* ; "NEW ATOM SPACE") - (\ATOM.HI 54Q) - (* ; "HI PART OF NEW ATOM SPACE") - - (* ;; "Definitions in old atom world") - - (\DEFSPACE (12Q 0) - (DEFspace DEFbase) - (DEFspace DEFbase)) - (\DEF.HI 12Q) - (\VALSPACE (14Q 0) - (TOPVALspace TOPVALbase) - (VALspace VALbase)) - (\VAL.HI 14Q) - (\PLISTSPACE (2 0) - (PLISTspace PLISTbase)) - (\PLIST.HI 2) - (\PAGEMAP (5 0) - (PAGEMAPspace PAGEMAPbase)) - (\NumPageMapPages 400Q) - (\PageMapTBL (24Q 1000Q) - (PMTspace PMTbase)) - (\InterfacePage (24Q 0) - (INTERFACEspace INTERFACEbase) - (INTERFACEspace INTERFACEbase)) - (\IOPAGE (0 177400Q)) - (\DoveIORegion (0 40000Q)) - (\IOCBPAGE (0 400Q)) - (\FPTOVP (2 0)) - (\MDSTypeTable (30Q 0) - (MDSTYPEspace MDSTYPEbase) - (MDSTYPEspace MDSTYPEbase)) - (\MDSTTsize 2000Q T) - (* ; "in Pages") - (\MISCSTATS (24Q 5000Q) - (STATSspace MISCSTATSbase)) - (\UFNTable (24Q 6000Q) - NIL - (STATSspace UFNTablebase)) - (\UFNTableSize 2) - (\DTDSpaceBase (24Q 10000Q) - (DTDspace DTDbase) - (DTDspace DTDbase)) - (\DTDSize 22Q T) - (\LISTPDTD (24Q 10132Q)) - (\EndTypeNumber 3777Q) - (\LOCKEDPAGETABLE (24Q 70000Q)) - (\NumLPTPages 20Q) - (\STACKSPACE (1 0) - (STACKspace NIL) - (STACKspace NIL)) - (\GuardStackAddr 170000Q) - (\LastStackAddr 177776Q) - (\STACKHI 1 T T) - (\HTMAIN (26Q 0) - (HTMAINspace HTMAINbase) - (HTMAINspace HTMAINbase)) - (\HTMAINnpages 400Q T) - (\HTOVERFLOW (27Q 0) - NIL - (NIL HTOVERFLOWbase)) - (\HTBIGCOUNT (27Q 100000Q)) - (\HTCOLL (34Q 0) - NIL - (HTCOLLspace HTCOLLbase)) - (\DISPLAYREGION (22Q 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 16Q T T) - (\TeleRaidFXP 30Q T T) - - (* ;; "emulator segment locations") - - (DCB.EM 420Q) - (DISPINTERRUPT.EM 421Q) - (CURSORBITMAP.EM 431Q) - (KBDAD0.EM 177034Q) - (KBDAD1.EM 177035Q) - (KBDAD2.EM 177036Q) - (KBDAD3.EM 177037Q) - (UTILIN.EM 177030Q) - (CURSORX.EM 426Q) - (CURSORY.EM 427Q) - (MOUSEX.EM 424Q) - (MOUSEY.EM 425Q) - (\LispKeyMask 20000Q T T) - (\BcplKeyMask 10400Q T T) - (* ; "Machine types") - (\MAIKO 3) - (\DOLPHIN 4) - (\DORADO 5) - (\DANDELION 6) - (\DAYBREAK 10Q) - - (* ;; "FOR DLION (AND DAYBREAK)") - - (\VP.DISPLAY 11000Q) - (\NP.DISPLAY 312Q) - (* ; - "for Dorado display 1024x808 pixels / (16 pixels/word x 256 words/page)") - (\NP.WIDEDOVEDISPLAY 363Q) - (* ; - "Wide Dove display 1152x864 pixels") - (\WIDEDOVEDISPLAYWIDTH 2200Q) - (\RP.AFTERDISPLAY 316Q) - (* ; "Includes 4 pages for cursor") - (\RP.AFTERDOVEDISPLAY 363Q) - (* ; "if big screen") - (\RP.DISPLAY 0) - (\RP.TEMPDISPLAY 5001Q) - (\RP.MISCLOCKED 5364Q) - (* ; - "(+ \RP.TEMPDISPLAY \NP.WIDEDOVEDISPLAY)") - (\RP.STACK 1400Q) - (\VP.STACK 400Q) - (\RP.MAP 400Q) - (\NP.MAP 400Q) - (\RP.IOPAGE 1000Q) - (* ; - "The DOVE IOCBPAGE can go anywhere, but should be under the 1mbyte range") - (\RP.DOVEIOCBPAGE 1037Q) - (\RP.DOVEIORGN 1040Q) - (\VP.DOVEIORGN 100Q) - (\DOVEIORGNSIZE 100Q) - (\VP.IOPAGE 377Q) - (\VP.IFPAGE 12000Q) - (\VP.FPTOVP 1000Q) - (\NP.FPTOVP 10000Q) - (\RP.FPTOVP 2000Q) - (\RP.STARTBUFFERS 1200Q) - (\VP.TYPETABLE 14000Q) - (\NP.TYPETABLE 2000Q) - (\RP.TYPETABLE 12000Q) - (\VP.GCTABLE 13000Q) - (\NP.GCTABLE 400Q) - (\RP.GCTABLE 14000Q) - (\VP.GCOVERFLOW 13400Q) - (\NP.GCOVERFLOW 1) - (\RP.GCOVERFLOW 14400Q) - (\FP.IFPAGE 2) - (\VP.IOCBS 1) - (\VP.PRIMARYMAP 12002Q) - (\VP.SECONDARYMAP 2400Q) - (\VP.LPT 12160Q) - (\VP.INITSCRATCH 10Q) - (\VP.RPT 200Q) - (\VP.BUFFERS 332Q) - (* ; "DLion processor commands") - (\DL.PROCESSORBUSY 100000Q) - (\DL.SETTOD 100001Q) - (\DL.READTOD 100002Q) - (\DL.READPID 100003Q) - (\DL.BOOTBUTTON 100004Q))) - -(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 22Q 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 40Q WORD) - (DLIOPHARDWARECONFIG WORD) - (NIL 13Q WORD) - (DLRS232CPARAMETERCSBLO.11 WORD) - (DLRS232CPARAMETERCSBHI.11 WORD) - (DLRS232CSETRS366STATUS.11 16Q WORD) - (NIL 74Q WORD) - (DLMAGTAPE 4 WORD) - (DLETHERNET 14Q WORD NIL T) - (NIL 37Q WORD) - (DLDISPINTERRUPT WORD NIL T) - (DLDISPCONTROL WORD) - (DLDISPBORDER WORD) - (DLCURSORX WORD NIL T) - (DLCURSORY WORD NIL T) - (DLCURSORBITMAP 20Q WORD NIL T))) -(DECLARE%: EVAL@COMPILE - -(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 10Q) - -(RPAQQ \CHARACTERP 11Q) - -(RPAQQ \VMEMPAGEP 12Q) - -(RPAQQ \STREAM 13Q) - -(RPAQQ \TT.TYPEMASK 3777Q) - -(RPAQQ \TT.NOREF 100000Q) - -(RPAQQ \TT.SYMBOLP 40000Q) - -(RPAQQ \TT.FIXP 20000Q) - -(RPAQQ \TT.NUMBERP 10000Q) - -(RPAQQ \TT.ATOM 4000Q) - -(RPAQQ \PMblockSize 40Q) - -(RPAQQ \STATSsize 10Q) - -(RPAQQ \NumPMTpages 10Q) - -(RPAQQ \EmptyPMTEntry 177777Q) - -(RPAQQ \FirstVmemBlock 2) - -(RPAQQ \MAXVMPAGE 377775Q) - -(RPAQQ \MAXVMSEGMENT 377Q) - -(RPAQQ \IFPValidKey 12743Q) - -(RPAQQ \FirstMDSPage 37776Q) - -(RPAQQ \MaxMDSPage 1777775Q) - -(RPAQQ \DefaultSecondMDSPage 177774Q) - -(RPAQQ \MDSIncrement 1000Q) - -(RPAQQ \PagesPerMDSUnit 2) - -(RPAQQ \FirstArraySegment 56Q) - -(RPAQQ \FirstArrayPage 27000Q) - -(RPAQQ \DefaultSecondArrayPage 40000Q) - -(RPAQQ \StackMask 160000Q) - -(RPAQQ \FxtnBlock 140000Q) - -(RPAQQ \GuardBlock 160000Q) - -(RPAQQ \BFBlock 100000Q) - -(RPAQQ \FreeStackBlock 120000Q) - -(RPAQQ \NotStackBlock 0) - -(RPAQQ \MinExtraStackWords 40Q) - -(RPAQQ ERASECHARCODE 0) - -(RPAQQ \HT1CNT 2000Q) - -(RPAQQ \HTSTKBIT 1000Q) - -(RPAQQ \HTCNTMASK 176000Q) - -(RPAQQ \HTMAINSIZE 200000Q) - -(RPAQQ \HTCOLLSIZE 4000000Q) - -(RPAQQ \HTENDFREE 1) - -(RPAQQ \HTFREEPTR 0) - -(RPAQQ \AtomHI 0) - -(RPAQQ \CHARHI 7) - -(RPAQQ \AtomHTpages 400Q) - -(RPAQQ \LastAtomPage 377Q) - -(RPAQQ \MaxAtomFrLst 177777Q) - -(RPAQQ \SmallPosHi 16Q) - -(RPAQQ \SmallNegHi 17Q) - -(RPAQQ \NumSmallPages 1000Q) - -(RPAQQ \PNAME.HI 10Q) - -(RPAQQ \ATOM.HI 54Q) - -(RPAQQ \DEF.HI 12Q) - -(RPAQQ \VAL.HI 14Q) - -(RPAQQ \PLIST.HI 2) - -(RPAQQ \NumPageMapPages 400Q) - -(RPAQQ \MDSTTsize 2000Q) - -(RPAQQ \UFNTableSize 2) - -(RPAQQ \DTDSize 22Q) - -(RPAQQ \EndTypeNumber 3777Q) - -(RPAQQ \NumLPTPages 20Q) - -(RPAQQ \GuardStackAddr 170000Q) - -(RPAQQ \LastStackAddr 177776Q) - -(RPAQQ \STACKHI 1) - -(RPAQQ \HTMAINnpages 400Q) - -(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 16Q) - -(RPAQQ \TeleRaidFXP 30Q) - -(RPAQQ DCB.EM 420Q) - -(RPAQQ DISPINTERRUPT.EM 421Q) - -(RPAQQ CURSORBITMAP.EM 431Q) - -(RPAQQ KBDAD0.EM 177034Q) - -(RPAQQ KBDAD1.EM 177035Q) - -(RPAQQ KBDAD2.EM 177036Q) - -(RPAQQ KBDAD3.EM 177037Q) - -(RPAQQ UTILIN.EM 177030Q) - -(RPAQQ CURSORX.EM 426Q) - -(RPAQQ CURSORY.EM 427Q) - -(RPAQQ MOUSEX.EM 424Q) - -(RPAQQ MOUSEY.EM 425Q) - -(RPAQQ \LispKeyMask 20000Q) - -(RPAQQ \BcplKeyMask 10400Q) - -(RPAQQ \MAIKO 3) - -(RPAQQ \DOLPHIN 4) - -(RPAQQ \DORADO 5) - -(RPAQQ \DANDELION 6) - -(RPAQQ \DAYBREAK 10Q) - -(RPAQQ \VP.DISPLAY 11000Q) - -(RPAQQ \NP.DISPLAY 312Q) - -(RPAQQ \NP.WIDEDOVEDISPLAY 363Q) - -(RPAQQ \WIDEDOVEDISPLAYWIDTH 2200Q) - -(RPAQQ \RP.AFTERDISPLAY 316Q) - -(RPAQQ \RP.AFTERDOVEDISPLAY 363Q) - -(RPAQQ \RP.DISPLAY 0) - -(RPAQQ \RP.TEMPDISPLAY 5001Q) - -(RPAQQ \RP.MISCLOCKED 5364Q) - -(RPAQQ \RP.STACK 1400Q) - -(RPAQQ \VP.STACK 400Q) - -(RPAQQ \RP.MAP 400Q) - -(RPAQQ \NP.MAP 400Q) - -(RPAQQ \RP.IOPAGE 1000Q) - -(RPAQQ \RP.DOVEIOCBPAGE 1037Q) - -(RPAQQ \RP.DOVEIORGN 1040Q) - -(RPAQQ \VP.DOVEIORGN 100Q) - -(RPAQQ \DOVEIORGNSIZE 100Q) - -(RPAQQ \VP.IOPAGE 377Q) - -(RPAQQ \VP.IFPAGE 12000Q) - -(RPAQQ \VP.FPTOVP 1000Q) - -(RPAQQ \NP.FPTOVP 10000Q) - -(RPAQQ \RP.FPTOVP 2000Q) - -(RPAQQ \RP.STARTBUFFERS 1200Q) - -(RPAQQ \VP.TYPETABLE 14000Q) - -(RPAQQ \NP.TYPETABLE 2000Q) - -(RPAQQ \RP.TYPETABLE 12000Q) - -(RPAQQ \VP.GCTABLE 13000Q) - -(RPAQQ \NP.GCTABLE 400Q) - -(RPAQQ \RP.GCTABLE 14000Q) - -(RPAQQ \VP.GCOVERFLOW 13400Q) - -(RPAQQ \NP.GCOVERFLOW 1) - -(RPAQQ \RP.GCOVERFLOW 14400Q) - -(RPAQQ \FP.IFPAGE 2) - -(RPAQQ \VP.IOCBS 1) - -(RPAQQ \VP.PRIMARYMAP 12002Q) - -(RPAQQ \VP.SECONDARYMAP 2400Q) - -(RPAQQ \VP.LPT 12160Q) - -(RPAQQ \VP.INITSCRATCH 10Q) - -(RPAQQ \VP.RPT 200Q) - -(RPAQQ \VP.BUFFERS 332Q) - -(RPAQQ \DL.PROCESSORBUSY 100000Q) - -(RPAQQ \DL.SETTOD 100001Q) - -(RPAQQ \DL.READTOD 100002Q) - -(RPAQQ \DL.READPID 100003Q) - -(RPAQQ \DL.BOOTBUTTON 100004Q) - - -(CONSTANTS (CDRCODING 1) - (\SMALLP 1) - (\FIXP 2) - (\FLOATP 3) - (\LITATOM 4) - (\LISTP 5) - (\ARRAYP 6) - (\STRINGP 7) - (\STACKP 10Q) - (\CHARACTERP 11Q) - (\VMEMPAGEP 12Q) - (\STREAM 13Q) - (\TT.TYPEMASK 3777Q) - (\TT.NOREF 100000Q) - (\TT.SYMBOLP 40000Q) - (\TT.FIXP 20000Q) - (\TT.NUMBERP 10000Q) - (\TT.ATOM 4000Q) - (\PMblockSize 40Q) - (\STATSsize 10Q) - (\NumPMTpages 10Q) - (\EmptyPMTEntry 177777Q) - (\FirstVmemBlock 2) - (\MAXVMPAGE 377775Q) - (\MAXVMSEGMENT 377Q) - (\IFPValidKey 12743Q) - (\FirstMDSPage 37776Q) - (\MaxMDSPage 1777775Q) - (\DefaultSecondMDSPage 177774Q) - (\MDSIncrement 1000Q) - (\PagesPerMDSUnit 2) - (\FirstArraySegment 56Q) - (\FirstArrayPage 27000Q) - (\DefaultSecondArrayPage 40000Q) - (\StackMask 160000Q) - (\FxtnBlock 140000Q) - (\GuardBlock 160000Q) - (\BFBlock 100000Q) - (\FreeStackBlock 120000Q) - (\NotStackBlock 0) - (\MinExtraStackWords 40Q) - (ERASECHARCODE 0) - (\HT1CNT 2000Q) - (\HTSTKBIT 1000Q) - (\HTCNTMASK 176000Q) - (\HTMAINSIZE 200000Q) - (\HTCOLLSIZE 4000000Q) - (\HTENDFREE 1) - (\HTFREEPTR 0) - (\AtomHI 0) - (\CHARHI 7) - (\AtomHTpages 400Q) - (\LastAtomPage 377Q) - (\MaxAtomFrLst 177777Q) - (\SmallPosHi 16Q) - (\SmallNegHi 17Q) - (\NumSmallPages 1000Q) - (\PNAME.HI 10Q) - (\ATOM.HI 54Q) - (\DEF.HI 12Q) - (\VAL.HI 14Q) - (\PLIST.HI 2) - (\NumPageMapPages 400Q) - (\MDSTTsize 2000Q) - (\UFNTableSize 2) - (\DTDSize 22Q) - (\EndTypeNumber 3777Q) - (\NumLPTPages 20Q) - (\GuardStackAddr 170000Q) - (\LastStackAddr 177776Q) - (\STACKHI 1) - (\HTMAINnpages 400Q) - (\D1BCPLspace 0) - (\D0BCPLspace 0) - (\CurrentFXP 0) - (\ResetFXP 1) - (\SubovFXP 2) - (\KbdFXP 3) - (\HardReturnFXP 4) - (\GCFXP 5) - (\FAULTFXP 6) - (\MiscFXP 16Q) - (\TeleRaidFXP 30Q) - (DCB.EM 420Q) - (DISPINTERRUPT.EM 421Q) - (CURSORBITMAP.EM 431Q) - (KBDAD0.EM 177034Q) - (KBDAD1.EM 177035Q) - (KBDAD2.EM 177036Q) - (KBDAD3.EM 177037Q) - (UTILIN.EM 177030Q) - (CURSORX.EM 426Q) - (CURSORY.EM 427Q) - (MOUSEX.EM 424Q) - (MOUSEY.EM 425Q) - (\LispKeyMask 20000Q) - (\BcplKeyMask 10400Q) - (\MAIKO 3) - (\DOLPHIN 4) - (\DORADO 5) - (\DANDELION 6) - (\DAYBREAK 10Q) - (\VP.DISPLAY 11000Q) - (\NP.DISPLAY 312Q) - (\NP.WIDEDOVEDISPLAY 363Q) - (\WIDEDOVEDISPLAYWIDTH 2200Q) - (\RP.AFTERDISPLAY 316Q) - (\RP.AFTERDOVEDISPLAY 363Q) - (\RP.DISPLAY 0) - (\RP.TEMPDISPLAY 5001Q) - (\RP.MISCLOCKED 5364Q) - (\RP.STACK 1400Q) - (\VP.STACK 400Q) - (\RP.MAP 400Q) - (\NP.MAP 400Q) - (\RP.IOPAGE 1000Q) - (\RP.DOVEIOCBPAGE 1037Q) - (\RP.DOVEIORGN 1040Q) - (\VP.DOVEIORGN 100Q) - (\DOVEIORGNSIZE 100Q) - (\VP.IOPAGE 377Q) - (\VP.IFPAGE 12000Q) - (\VP.FPTOVP 1000Q) - (\NP.FPTOVP 10000Q) - (\RP.FPTOVP 2000Q) - (\RP.STARTBUFFERS 1200Q) - (\VP.TYPETABLE 14000Q) - (\NP.TYPETABLE 2000Q) - (\RP.TYPETABLE 12000Q) - (\VP.GCTABLE 13000Q) - (\NP.GCTABLE 400Q) - (\RP.GCTABLE 14000Q) - (\VP.GCOVERFLOW 13400Q) - (\NP.GCOVERFLOW 1) - (\RP.GCOVERFLOW 14400Q) - (\FP.IFPAGE 2) - (\VP.IOCBS 1) - (\VP.PRIMARYMAP 12002Q) - (\VP.SECONDARYMAP 2400Q) - (\VP.LPT 12160Q) - (\VP.INITSCRATCH 10Q) - (\VP.RPT 200Q) - (\VP.BUFFERS 332Q) - (\DL.PROCESSORBUSY 100000Q) - (\DL.SETTOD 100001Q) - (\DL.READTOD 100002Q) - (\DL.READPID 100003Q) - (\DL.BOOTBUTTON 100004Q)) -) - -(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 10Q "Loop in \SELECTREALPAGE") - (\MP.NEWPAGE 11Q "Attempt to allocate already existing page") - (\MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") - (\MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") - (\MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") - (\MP.RESIDENT 15Q "Fault on resident page") - (\MP.STACKFAULT 16Q "Fault on stack") - (\MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") - (\MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") - (\MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") - (\MP.STACKFULL 23Q) - (\MP.MDSFULL 24Q) - (\MP.UNKNOWN.UFN 25Q) - (\MP.ATOMSFULL 26Q) - (\MP.PNAMESFULL 27Q) - (\MP.USECOUNTOVERFLOW 30Q) - (\MP.MDSFULLWARNING 31Q) - (\MP.BADMDSFREELIST 32Q) - (\MP.BADARRAYBLOCK 33Q) - (\MP.BADDELETEBLOCK 34Q) - (\MP.BADARRAYRECLAIM 35Q) - (\MP.BIGREFCNTMISSING 36Q - "PTR refcnt previously overflowed, but not found in table.") - (\MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") - (\MP.DELREF0 40Q) - (\MP.PROCERROR 41Q) - (\MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") - (\MP.32MBINUSE 43Q) - (\MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") - (\MP.STACKRELEASED 45Q) - (\MP.FLUSHLOCKED 46Q) - (\MP.MAPNOTLOCKED 47Q) - (\MP.UNLOCKINGMAP 50Q) - (\MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") - (\MP.BADRUNTABLE 52Q "Malformed run table for vmem file"))) -(DECLARE%: EVAL@COMPILE - -(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 10Q "Loop in \SELECTREALPAGE") - -(RPAQ \MP.NEWPAGE 11Q "Attempt to allocate already existing page") - -(RPAQ \MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") - -(RPAQ \MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") - -(RPAQ \MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") - -(RPAQ \MP.RESIDENT 15Q "Fault on resident page") - -(RPAQ \MP.STACKFAULT 16Q "Fault on stack") - -(RPAQ \MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") - -(RPAQ \MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") - -(RPAQ \MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") - -(RPAQQ \MP.STACKFULL 23Q) - -(RPAQQ \MP.MDSFULL 24Q) - -(RPAQQ \MP.UNKNOWN.UFN 25Q) - -(RPAQQ \MP.ATOMSFULL 26Q) - -(RPAQQ \MP.PNAMESFULL 27Q) - -(RPAQQ \MP.USECOUNTOVERFLOW 30Q) - -(RPAQQ \MP.MDSFULLWARNING 31Q) - -(RPAQQ \MP.BADMDSFREELIST 32Q) - -(RPAQQ \MP.BADARRAYBLOCK 33Q) - -(RPAQQ \MP.BADDELETEBLOCK 34Q) - -(RPAQQ \MP.BADARRAYRECLAIM 35Q) - -(RPAQ \MP.BIGREFCNTMISSING 36Q "PTR refcnt previously overflowed, but not found in table.") - -(RPAQ \MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") - -(RPAQQ \MP.DELREF0 40Q) - -(RPAQQ \MP.PROCERROR 41Q) - -(RPAQ \MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") - -(RPAQQ \MP.32MBINUSE 43Q) - -(RPAQ \MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") - -(RPAQQ \MP.STACKRELEASED 45Q) - -(RPAQQ \MP.FLUSHLOCKED 46Q) - -(RPAQQ \MP.MAPNOTLOCKED 47Q) - -(RPAQQ \MP.UNLOCKINGMAP 50Q) - -(RPAQ \MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") - -(RPAQ \MP.BADRUNTABLE 52Q "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 10Q "Loop in \SELECTREALPAGE") - (\MP.NEWPAGE 11Q "Attempt to allocate already existing page") - (\MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") - (\MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") - (\MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") - (\MP.RESIDENT 15Q "Fault on resident page") - (\MP.STACKFAULT 16Q "Fault on stack") - (\MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") - (\MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") - (\MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") - (\MP.STACKFULL 23Q) - (\MP.MDSFULL 24Q) - (\MP.UNKNOWN.UFN 25Q) - (\MP.ATOMSFULL 26Q) - (\MP.PNAMESFULL 27Q) - (\MP.USECOUNTOVERFLOW 30Q) - (\MP.MDSFULLWARNING 31Q) - (\MP.BADMDSFREELIST 32Q) - (\MP.BADARRAYBLOCK 33Q) - (\MP.BADDELETEBLOCK 34Q) - (\MP.BADARRAYRECLAIM 35Q) - (\MP.BIGREFCNTMISSING 36Q "PTR refcnt previously overflowed, but not found in table.") - (\MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") - (\MP.DELREF0 40Q) - (\MP.PROCERROR 41Q) - (\MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") - (\MP.32MBINUSE 43Q) - (\MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") - (\MP.STACKRELEASED 45Q) - (\MP.FLUSHLOCKED 46Q) - (\MP.MAPNOTLOCKED 47Q) - (\MP.UNLOCKINGMAP 50Q) - (\MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") - (\MP.BADRUNTABLE 52Q "Malformed run table for vmem file")) -) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(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 37Q))) - -(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 53Q))) - -(BLOCKRECORD IOPAGE ((NIL 22Q 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 40Q WORD) - (DLIOPHARDWARECONFIG WORD) - (NIL 13Q WORD) - (DLRS232CPARAMETERCSBLO.11 WORD) - (DLRS232CPARAMETERCSBHI.11 WORD) - (DLRS232CSETRS366STATUS.11 16Q WORD) - (NIL 74Q WORD) - (DLMAGTAPE 4 WORD) - (DLETHERNET 14Q WORD) - (NIL 37Q WORD) - (DLDISPINTERRUPT WORD) - (DLDISPCONTROL WORD) - (DLDISPBORDER WORD) - (DLCURSORX WORD) - (DLCURSORY WORD) - (DLCURSORBITMAP 20Q WORD)) - [ACCESSFNS IOPAGE ((DLCURSORBITMAPPTR (\ADDBASE DATUM 360Q)) - (DLCURSORYPTR (\ADDBASE DATUM 357Q)) - (DLCURSORXPTR (\ADDBASE DATUM 356Q)) - (DLDISPINTERRUPTPTR (\ADDBASE DATUM 353Q)) - (DLETHERNETPTR (\ADDBASE DATUM 300Q)) - (DLKBDAD5PTR (\ADDBASE DATUM 103Q)) - (DLKBDAD4PTR (\ADDBASE DATUM 102Q)) - (DLKBDAD3PTR (\ADDBASE DATUM 101Q)) - (DLKBDAD2PTR (\ADDBASE DATUM 100Q)) - (DLKBDAD1PTR (\ADDBASE DATUM 77Q)) - (DLKBDAD0PTR (\ADDBASE DATUM 76Q)) - (DLUTILINPTR (\ADDBASE DATUM 75Q)) - (DLMOUSEYPTR (\ADDBASE DATUM 74Q)) - (DLMOUSEXPTR (\ADDBASE DATUM 73Q)) - (DLTODLOPTR (\ADDBASE DATUM 70Q)) - (DLMAINTPANELPTR (\ADDBASE DATUM 22Q] - (CREATE (\ALLOCBLOCK 200Q))) -(DECLARE%: EVAL@COMPILE - -[PUTPROPS EMADDRESS MACRO (ARGS ([LAMBDA (ADDR) - (COND - [(EQ \D1BCPLspace \D0BCPLspace) - (LIST (BIG-VMEM-CODE (LIST 'OPCODES 'GCONST 0 0 - (LRSH ADDR 10Q) - (LOGAND ADDR 377Q)) - (LIST 'OPCODES 'GCONST 0 (LRSH ADDR 10Q) - (LOGAND ADDR 377Q] - (T `(\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 '\VAG2 '(fetch (IFPAGE EmulatorSpace) of - \InterfacePage - ) - (CAR X))) - ((ZEROP (CAR X)) - NIL) - (T (LIST '\VAG2 \D0BCPLspace (CAR X] - -[PUTPROPS EMADDRESSP MACRO (X (LIST 'EQ (LIST '\HILOC (CAR X)) - (COND - ((EQ \D1BCPLspace \D0BCPLspace) - \D0BCPLspace) - (T '(fetch (IFPAGE EmulatorSpace) of \InterfacePage] -) - -(* "END EXPORTED DEFINITIONS") - -) - -(PUTPROPS LLPARAMS MAKEFILE-ENVIRONMENT (:READTABLE "INTERLISP" :PACKAGE "INTERLISP" :BASE 10Q)) -(PUTPROPS LLPARAMS COPYRIGHT ( -"Syntelligence Systems, Inc. This program or documentation contains confidential information and trade secrets of Syntelligence Systems, Inc. Reverse engineering, reverse compiling and disassembling of object code are prohibited. Use of this program or documentation is governed by written agreement with Syntelligence Systems, Inc. Use of copyright notice is precautionary and does not imply publication or disclosure of trade secrets" - 3675Q 3676Q 3677Q 3700Q 3701Q 3702Q 3703Q 3704Q 3706Q 3707Q 3710Q 3712Q 3716Q)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (7177Q 13221Q (MAKERECORD 7211Q . 13217Q))))) -STOP +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP" BASE 8) (FILECREATED " 7-Feb-2021 11:52:02" {DSK}larry>ilisp>medley>sources>LLPARAMS.;3 206133Q changes to%: (MACROS EMADDRESS) previous date%: "31-Jan-98 09:16:51" {DSK}larry>ilisp>medley>sources>LLPARAMS.;2) (PRETTYCOMPRINT LLPARAMSCOMS) (RPAQQ LLPARAMSCOMS ( (* ;; "This file defines the constants that control how a SYSOUT is laid out.") (FNS MAKERECORD) (* ;; "When you change the SYSOUT's layout in this file, you must also") (* ;; " Recreate RDSYS in the library, using (DORENAME 'R)") (* ;; " Recompile DLFIXINIT and anything else that uses the constants defined here.") (* ;; " Recompile LLFAULT. recompile VMEM") (DECLARE%: DONTCOPY (EXPORT (CONSTANTS (WINDFLG T)) (* ;;  "INITCONSTANTS are constants (e.g. \LISTPDTD) to be defined at init time.") (VARS INITCONSTANTS MISCSTATSLAYOUT IFPAGELAYOUT MAIKO.IFPAGELAYOUT IOPAGELAYOUT) [CONSTANTS * (for X in INITCONSTANTS when (FIXP (CADR X)) collect (LIST (CAR X) (CADR X] (CONSTANTS * \MPERRORS) (GLOBALVARS * (for X in INITCONSTANTS when [AND (NEQ (CAR X) '*) (NOT (FIXP (CADR X] collect (CAR X))) (P * (LIST (MAKERECORD 'MISCSTATS MISCSTATSLAYOUT) (COND ((EQ \MACHINETYPE \MAIKO) (MAKERECORD 'IFPAGE MAIKO.IFPAGELAYOUT)) (T (MAKERECORD 'IFPAGE IFPAGELAYOUT))) (MAKERECORD 'IOPAGE IOPAGELAYOUT))) (MACROS EMADDRESS EMGETBASE EMPUTBASE EMULATORSEGMENT EMPOINTER EMADDRESSP))) (PROP MAKEFILE-ENVIRONMENT LLPARAMS))) (* ;; "This file defines the constants that control how a SYSOUT is laid out.") (DEFINEQ (MAKERECORD [LAMBDA (NAME LAYOUT) (* bvm%: "29-NOV-82 17:40") (PROG ((I 0) PTRS M NAM) (RETURN `(BLOCKRECORD %, NAME %, [for X in LAYOUT collect (CONS (SETQ NAM (CAR X)) (COND ((EQ NAM '*) (CDR X)) (T (PROG1 [COND [[FIXP (SETQ M (CAR (SETQ X (CDR X] (LIST M (CAR (SETQ X (CDR X] (T (SETQ M (SELECTQ (CAR X) ((FIXP FULLXPOINTER) (OR (EVENP I WORDSPERCELL) (ERROR "Record field not aligned" (CONS NAM X))) 2) (WORD 1) (SHOULDNT))) (LIST (CAR X] [COND ((CADDR X) (SETQ PTRS (CONS (LIST (PACK* NAM 'PTR) `(\ADDBASE DATUM %, I)) PTRS] (add I M))] %,. [AND PTRS `((ACCESSFNS %, NAME %, PTRS] (CREATE (\ALLOCBLOCK %, (FOLDHI I WORDSPERCELL]) ) (* ;; "When you change the SYSOUT's layout in this file, you must also") (* ;; " Recreate RDSYS in the library, using (DORENAME 'R)") (* ;; " Recompile DLFIXINIT and anything else that uses the constants defined here.") (* ;; " Recompile LLFAULT. recompile VMEM") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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 10Q) (\CHARACTERP 11Q) (\VMEMPAGEP 12Q NIL VMemPagePType) (\STREAM 13Q NIL STREAMTYPE) (* ;; "TYPE TABLE CONSTANTS - - - - - - - - - - - - - - - - - - - - - -") (\TT.TYPEMASK 3777Q TTTypeMask T) (\TT.NOREF 100000Q NIL T) (\TT.SYMBOLP 40000Q NIL T) (\TT.FIXP 20000Q) (\TT.NUMBERP 10000Q) (\TT.ATOM 4000Q) (* ;;  "page map - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") (\PMblockSize 40Q PMBLOCKSIZE) (\STATSsize 10Q T) (\NumPMTpages 10Q) (\EmptyPMTEntry 177777Q T) (\FirstVmemBlock 2 T) (\MAXVMPAGE 377775Q) (\MAXVMSEGMENT 377Q) (* ;; "interface page") (\IFPValidKey 12743Q T) (* ;; "MDS") (\FirstMDSPage 77776Q) (* ; "Was 37776Q pre 16-meg intiial") (\MaxMDSPage 1777775Q) (\DefaultSecondMDSPage 177774Q) (\MDSIncrement 1000Q) (\PagesPerMDSUnit 2) (* ;  "(FOLDLO \MDSIncrement WORDSPERPAGE)") (* ;; "arrays") (\ARRAYSPACE (56Q 0)) (\FirstArraySegment 56Q) (\FirstArrayPage 27000Q) (\ARRAYSPACE2 (100Q 0)) (\DefaultSecondArrayPage 100000Q) (* ; "Was 40000Q before 16meg initial") (* ;; "stack block constants") (\StackMask 160000Q T T) (\FxtnBlock 140000Q T T) (\GuardBlock 160000Q T T) (\BFBlock 100000Q T T) (\FreeStackBlock 120000Q T T) (\NotStackBlock 0) (* ; "none of the above") (\MinExtraStackWords 40Q T T) (* ;; "backspace kludge") (ERASECHARCODE 0 T) (* ;; "GC constants") (\HT1CNT 2000Q NIL T) (\HTSTKBIT 1000Q NIL T) (\HTCNTMASK 176000Q NIL T) (\HTMAINSIZE 200000Q NIL T) (\HTCOLLSIZE 4000000Q 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 (25Q 0) (AHTspace AHTbase)) (\AtomHTpages 400Q AHTSIZE) (\LastAtomPage 377Q) (\MaxAtomFrLst 177777Q) (\SMALLPOSPSPACE (16Q 0)) (\SmallPosHi 16Q SMALLPOSspace smallpl) (\SMALLNEGSPACE (17Q 0)) (\SmallNegHi 17Q SMALLNEGspace smallneg) (\NumSmallPages 1000Q) (* ;; "PNAME SPACEin the old world; used for initial atoms now.") (\PNPSPACE (10Q 0) (PNPspace PNPbase)) (\PNAME.HI 10Q) (\OLDATOMSPACE (54Q 0)) (* ; "NEW ATOM SPACE") (\ATOM.HI 54Q) (* ; "HI PART OF NEW ATOM SPACE") (* ;; "Definitions in old atom world") (\DEFSPACE (12Q 0) (DEFspace DEFbase) (DEFspace DEFbase)) (\DEF.HI 12Q) (\VALSPACE (14Q 0) (TOPVALspace TOPVALbase) (VALspace VALbase)) (\VAL.HI 14Q) (\PLISTSPACE (2 0) (PLISTspace PLISTbase)) (\PLIST.HI 2) (\PAGEMAP (5 0) (PAGEMAPspace PAGEMAPbase)) (\NumPageMapPages 400Q) (\PageMapTBL (24Q 1000Q) (PMTspace PMTbase)) (\InterfacePage (24Q 0) (INTERFACEspace INTERFACEbase) (INTERFACEspace INTERFACEbase)) (\IOPAGE (0 177400Q)) (\DoveIORegion (0 40000Q)) (\IOCBPAGE (0 400Q)) (\FPTOVP (2 0)) (\MDSTypeTable (30Q 0) (MDSTYPEspace MDSTYPEbase) (MDSTYPEspace MDSTYPEbase)) (\MDSTTsize 2000Q T) (* ; "in Pages") (\MISCSTATS (24Q 5000Q) (STATSspace MISCSTATSbase)) (\UFNTable (24Q 6000Q) NIL (STATSspace UFNTablebase)) (\UFNTableSize 2) (\DTDSpaceBase (24Q 10000Q) (DTDspace DTDbase) (DTDspace DTDbase)) (\DTDSize 22Q T) (\LISTPDTD (24Q 10132Q)) (\EndTypeNumber 3777Q) (\LOCKEDPAGETABLE (24Q 70000Q)) (\NumLPTPages 20Q) (\STACKSPACE (1 0) (STACKspace NIL) (STACKspace NIL)) (\GuardStackAddr 170000Q) (\LastStackAddr 177776Q) (\STACKHI 1 T T) (\HTMAIN (26Q 0) (HTMAINspace HTMAINbase) (HTMAINspace HTMAINbase)) (\HTMAINnpages 400Q T) (\HTOVERFLOW (27Q 0) NIL (NIL HTOVERFLOWbase)) (\HTBIGCOUNT (27Q 100000Q)) (\HTCOLL (34Q 0) NIL (HTCOLLspace HTCOLLbase)) (\DISPLAYREGION (22Q 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 16Q T T) (\TeleRaidFXP 30Q T T) (* ;; "emulator segment locations") (DCB.EM 420Q) (DISPINTERRUPT.EM 421Q) (CURSORBITMAP.EM 431Q) (KBDAD0.EM 177034Q) (KBDAD1.EM 177035Q) (KBDAD2.EM 177036Q) (KBDAD3.EM 177037Q) (UTILIN.EM 177030Q) (CURSORX.EM 426Q) (CURSORY.EM 427Q) (MOUSEX.EM 424Q) (MOUSEY.EM 425Q) (\LispKeyMask 20000Q T T) (\BcplKeyMask 10400Q T T) (* ; "Machine types") (\MAIKO 3) (\DOLPHIN 4) (\DORADO 5) (\DANDELION 6) (\DAYBREAK 10Q) (* ;; "FOR DLION (AND DAYBREAK)") (\VP.DISPLAY 11000Q) (\NP.DISPLAY 312Q) (* ;  "for Dorado display 1024x808 pixels / (16 pixels/word x 256 words/page)") (\NP.WIDEDOVEDISPLAY 363Q) (* ;  "Wide Dove display 1152x864 pixels") (\WIDEDOVEDISPLAYWIDTH 2200Q) (\RP.AFTERDISPLAY 316Q) (* ; "Includes 4 pages for cursor") (\RP.AFTERDOVEDISPLAY 363Q) (* ; "if big screen") (\RP.DISPLAY 0) (\RP.TEMPDISPLAY 5001Q) (\RP.MISCLOCKED 5364Q) (* ;  "(+ \RP.TEMPDISPLAY \NP.WIDEDOVEDISPLAY)") (\RP.STACK 1400Q) (\VP.STACK 400Q) (\RP.MAP 400Q) (\NP.MAP 400Q) (\RP.IOPAGE 1000Q) (* ;  "The DOVE IOCBPAGE can go anywhere, but should be under the 1mbyte range") (\RP.DOVEIOCBPAGE 1037Q) (\RP.DOVEIORGN 1040Q) (\VP.DOVEIORGN 100Q) (\DOVEIORGNSIZE 100Q) (\VP.IOPAGE 377Q) (\VP.IFPAGE 12000Q) (\VP.FPTOVP 1000Q) (\NP.FPTOVP 10000Q) (\RP.FPTOVP 2000Q) (\RP.STARTBUFFERS 1200Q) (\VP.TYPETABLE 14000Q) (\NP.TYPETABLE 2000Q) (\RP.TYPETABLE 12000Q) (\VP.GCTABLE 13000Q) (\NP.GCTABLE 400Q) (\RP.GCTABLE 14000Q) (\VP.GCOVERFLOW 13400Q) (\NP.GCOVERFLOW 1) (\RP.GCOVERFLOW 14400Q) (\FP.IFPAGE 2) (\VP.IOCBS 1) (\VP.PRIMARYMAP 12002Q) (\VP.SECONDARYMAP 2400Q) (\VP.LPT 12160Q) (\VP.INITSCRATCH 10Q) (\VP.RPT 200Q) (\VP.BUFFERS 332Q) (* ; "DLion processor commands") (\DL.PROCESSORBUSY 100000Q) (\DL.SETTOD 100001Q) (\DL.READTOD 100002Q) (\DL.READPID 100003Q) (\DL.BOOTBUTTON 100004Q))) (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 22Q 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 40Q WORD) (DLIOPHARDWARECONFIG WORD) (NIL 13Q WORD) (DLRS232CPARAMETERCSBLO.11 WORD) (DLRS232CPARAMETERCSBHI.11 WORD) (DLRS232CSETRS366STATUS.11 16Q WORD) (NIL 74Q WORD) (DLMAGTAPE 4 WORD) (DLETHERNET 14Q WORD NIL T) (NIL 37Q WORD) (DLDISPINTERRUPT WORD NIL T) (DLDISPCONTROL WORD) (DLDISPBORDER WORD) (DLCURSORX WORD NIL T) (DLCURSORY WORD NIL T) (DLCURSORBITMAP 20Q WORD NIL T))) (DECLARE%: EVAL@COMPILE (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 10Q) (RPAQQ \CHARACTERP 11Q) (RPAQQ \VMEMPAGEP 12Q) (RPAQQ \STREAM 13Q) (RPAQQ \TT.TYPEMASK 3777Q) (RPAQQ \TT.NOREF 100000Q) (RPAQQ \TT.SYMBOLP 40000Q) (RPAQQ \TT.FIXP 20000Q) (RPAQQ \TT.NUMBERP 10000Q) (RPAQQ \TT.ATOM 4000Q) (RPAQQ \PMblockSize 40Q) (RPAQQ \STATSsize 10Q) (RPAQQ \NumPMTpages 10Q) (RPAQQ \EmptyPMTEntry 177777Q) (RPAQQ \FirstVmemBlock 2) (RPAQQ \MAXVMPAGE 377775Q) (RPAQQ \MAXVMSEGMENT 377Q) (RPAQQ \IFPValidKey 12743Q) (RPAQQ \FirstMDSPage 77776Q) (RPAQQ \MaxMDSPage 1777775Q) (RPAQQ \DefaultSecondMDSPage 177774Q) (RPAQQ \MDSIncrement 1000Q) (RPAQQ \PagesPerMDSUnit 2) (RPAQQ \FirstArraySegment 56Q) (RPAQQ \FirstArrayPage 27000Q) (RPAQQ \DefaultSecondArrayPage 100000Q) (RPAQQ \StackMask 160000Q) (RPAQQ \FxtnBlock 140000Q) (RPAQQ \GuardBlock 160000Q) (RPAQQ \BFBlock 100000Q) (RPAQQ \FreeStackBlock 120000Q) (RPAQQ \NotStackBlock 0) (RPAQQ \MinExtraStackWords 40Q) (RPAQQ ERASECHARCODE 0) (RPAQQ \HT1CNT 2000Q) (RPAQQ \HTSTKBIT 1000Q) (RPAQQ \HTCNTMASK 176000Q) (RPAQQ \HTMAINSIZE 200000Q) (RPAQQ \HTCOLLSIZE 4000000Q) (RPAQQ \HTENDFREE 1) (RPAQQ \HTFREEPTR 0) (RPAQQ \AtomHI 0) (RPAQQ \CHARHI 7) (RPAQQ \AtomHTpages 400Q) (RPAQQ \LastAtomPage 377Q) (RPAQQ \MaxAtomFrLst 177777Q) (RPAQQ \SmallPosHi 16Q) (RPAQQ \SmallNegHi 17Q) (RPAQQ \NumSmallPages 1000Q) (RPAQQ \PNAME.HI 10Q) (RPAQQ \ATOM.HI 54Q) (RPAQQ \DEF.HI 12Q) (RPAQQ \VAL.HI 14Q) (RPAQQ \PLIST.HI 2) (RPAQQ \NumPageMapPages 400Q) (RPAQQ \MDSTTsize 2000Q) (RPAQQ \UFNTableSize 2) (RPAQQ \DTDSize 22Q) (RPAQQ \EndTypeNumber 3777Q) (RPAQQ \NumLPTPages 20Q) (RPAQQ \GuardStackAddr 170000Q) (RPAQQ \LastStackAddr 177776Q) (RPAQQ \STACKHI 1) (RPAQQ \HTMAINnpages 400Q) (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 16Q) (RPAQQ \TeleRaidFXP 30Q) (RPAQQ DCB.EM 420Q) (RPAQQ DISPINTERRUPT.EM 421Q) (RPAQQ CURSORBITMAP.EM 431Q) (RPAQQ KBDAD0.EM 177034Q) (RPAQQ KBDAD1.EM 177035Q) (RPAQQ KBDAD2.EM 177036Q) (RPAQQ KBDAD3.EM 177037Q) (RPAQQ UTILIN.EM 177030Q) (RPAQQ CURSORX.EM 426Q) (RPAQQ CURSORY.EM 427Q) (RPAQQ MOUSEX.EM 424Q) (RPAQQ MOUSEY.EM 425Q) (RPAQQ \LispKeyMask 20000Q) (RPAQQ \BcplKeyMask 10400Q) (RPAQQ \MAIKO 3) (RPAQQ \DOLPHIN 4) (RPAQQ \DORADO 5) (RPAQQ \DANDELION 6) (RPAQQ \DAYBREAK 10Q) (RPAQQ \VP.DISPLAY 11000Q) (RPAQQ \NP.DISPLAY 312Q) (RPAQQ \NP.WIDEDOVEDISPLAY 363Q) (RPAQQ \WIDEDOVEDISPLAYWIDTH 2200Q) (RPAQQ \RP.AFTERDISPLAY 316Q) (RPAQQ \RP.AFTERDOVEDISPLAY 363Q) (RPAQQ \RP.DISPLAY 0) (RPAQQ \RP.TEMPDISPLAY 5001Q) (RPAQQ \RP.MISCLOCKED 5364Q) (RPAQQ \RP.STACK 1400Q) (RPAQQ \VP.STACK 400Q) (RPAQQ \RP.MAP 400Q) (RPAQQ \NP.MAP 400Q) (RPAQQ \RP.IOPAGE 1000Q) (RPAQQ \RP.DOVEIOCBPAGE 1037Q) (RPAQQ \RP.DOVEIORGN 1040Q) (RPAQQ \VP.DOVEIORGN 100Q) (RPAQQ \DOVEIORGNSIZE 100Q) (RPAQQ \VP.IOPAGE 377Q) (RPAQQ \VP.IFPAGE 12000Q) (RPAQQ \VP.FPTOVP 1000Q) (RPAQQ \NP.FPTOVP 10000Q) (RPAQQ \RP.FPTOVP 2000Q) (RPAQQ \RP.STARTBUFFERS 1200Q) (RPAQQ \VP.TYPETABLE 14000Q) (RPAQQ \NP.TYPETABLE 2000Q) (RPAQQ \RP.TYPETABLE 12000Q) (RPAQQ \VP.GCTABLE 13000Q) (RPAQQ \NP.GCTABLE 400Q) (RPAQQ \RP.GCTABLE 14000Q) (RPAQQ \VP.GCOVERFLOW 13400Q) (RPAQQ \NP.GCOVERFLOW 1) (RPAQQ \RP.GCOVERFLOW 14400Q) (RPAQQ \FP.IFPAGE 2) (RPAQQ \VP.IOCBS 1) (RPAQQ \VP.PRIMARYMAP 12002Q) (RPAQQ \VP.SECONDARYMAP 2400Q) (RPAQQ \VP.LPT 12160Q) (RPAQQ \VP.INITSCRATCH 10Q) (RPAQQ \VP.RPT 200Q) (RPAQQ \VP.BUFFERS 332Q) (RPAQQ \DL.PROCESSORBUSY 100000Q) (RPAQQ \DL.SETTOD 100001Q) (RPAQQ \DL.READTOD 100002Q) (RPAQQ \DL.READPID 100003Q) (RPAQQ \DL.BOOTBUTTON 100004Q) (CONSTANTS (CDRCODING 1) (\SMALLP 1) (\FIXP 2) (\FLOATP 3) (\LITATOM 4) (\LISTP 5) (\ARRAYP 6) (\STRINGP 7) (\STACKP 10Q) (\CHARACTERP 11Q) (\VMEMPAGEP 12Q) (\STREAM 13Q) (\TT.TYPEMASK 3777Q) (\TT.NOREF 100000Q) (\TT.SYMBOLP 40000Q) (\TT.FIXP 20000Q) (\TT.NUMBERP 10000Q) (\TT.ATOM 4000Q) (\PMblockSize 40Q) (\STATSsize 10Q) (\NumPMTpages 10Q) (\EmptyPMTEntry 177777Q) (\FirstVmemBlock 2) (\MAXVMPAGE 377775Q) (\MAXVMSEGMENT 377Q) (\IFPValidKey 12743Q) (\FirstMDSPage 77776Q) (\MaxMDSPage 1777775Q) (\DefaultSecondMDSPage 177774Q) (\MDSIncrement 1000Q) (\PagesPerMDSUnit 2) (\FirstArraySegment 56Q) (\FirstArrayPage 27000Q) (\DefaultSecondArrayPage 100000Q) (\StackMask 160000Q) (\FxtnBlock 140000Q) (\GuardBlock 160000Q) (\BFBlock 100000Q) (\FreeStackBlock 120000Q) (\NotStackBlock 0) (\MinExtraStackWords 40Q) (ERASECHARCODE 0) (\HT1CNT 2000Q) (\HTSTKBIT 1000Q) (\HTCNTMASK 176000Q) (\HTMAINSIZE 200000Q) (\HTCOLLSIZE 4000000Q) (\HTENDFREE 1) (\HTFREEPTR 0) (\AtomHI 0) (\CHARHI 7) (\AtomHTpages 400Q) (\LastAtomPage 377Q) (\MaxAtomFrLst 177777Q) (\SmallPosHi 16Q) (\SmallNegHi 17Q) (\NumSmallPages 1000Q) (\PNAME.HI 10Q) (\ATOM.HI 54Q) (\DEF.HI 12Q) (\VAL.HI 14Q) (\PLIST.HI 2) (\NumPageMapPages 400Q) (\MDSTTsize 2000Q) (\UFNTableSize 2) (\DTDSize 22Q) (\EndTypeNumber 3777Q) (\NumLPTPages 20Q) (\GuardStackAddr 170000Q) (\LastStackAddr 177776Q) (\STACKHI 1) (\HTMAINnpages 400Q) (\D1BCPLspace 0) (\D0BCPLspace 0) (\CurrentFXP 0) (\ResetFXP 1) (\SubovFXP 2) (\KbdFXP 3) (\HardReturnFXP 4) (\GCFXP 5) (\FAULTFXP 6) (\MiscFXP 16Q) (\TeleRaidFXP 30Q) (DCB.EM 420Q) (DISPINTERRUPT.EM 421Q) (CURSORBITMAP.EM 431Q) (KBDAD0.EM 177034Q) (KBDAD1.EM 177035Q) (KBDAD2.EM 177036Q) (KBDAD3.EM 177037Q) (UTILIN.EM 177030Q) (CURSORX.EM 426Q) (CURSORY.EM 427Q) (MOUSEX.EM 424Q) (MOUSEY.EM 425Q) (\LispKeyMask 20000Q) (\BcplKeyMask 10400Q) (\MAIKO 3) (\DOLPHIN 4) (\DORADO 5) (\DANDELION 6) (\DAYBREAK 10Q) (\VP.DISPLAY 11000Q) (\NP.DISPLAY 312Q) (\NP.WIDEDOVEDISPLAY 363Q) (\WIDEDOVEDISPLAYWIDTH 2200Q) (\RP.AFTERDISPLAY 316Q) (\RP.AFTERDOVEDISPLAY 363Q) (\RP.DISPLAY 0) (\RP.TEMPDISPLAY 5001Q) (\RP.MISCLOCKED 5364Q) (\RP.STACK 1400Q) (\VP.STACK 400Q) (\RP.MAP 400Q) (\NP.MAP 400Q) (\RP.IOPAGE 1000Q) (\RP.DOVEIOCBPAGE 1037Q) (\RP.DOVEIORGN 1040Q) (\VP.DOVEIORGN 100Q) (\DOVEIORGNSIZE 100Q) (\VP.IOPAGE 377Q) (\VP.IFPAGE 12000Q) (\VP.FPTOVP 1000Q) (\NP.FPTOVP 10000Q) (\RP.FPTOVP 2000Q) (\RP.STARTBUFFERS 1200Q) (\VP.TYPETABLE 14000Q) (\NP.TYPETABLE 2000Q) (\RP.TYPETABLE 12000Q) (\VP.GCTABLE 13000Q) (\NP.GCTABLE 400Q) (\RP.GCTABLE 14000Q) (\VP.GCOVERFLOW 13400Q) (\NP.GCOVERFLOW 1) (\RP.GCOVERFLOW 14400Q) (\FP.IFPAGE 2) (\VP.IOCBS 1) (\VP.PRIMARYMAP 12002Q) (\VP.SECONDARYMAP 2400Q) (\VP.LPT 12160Q) (\VP.INITSCRATCH 10Q) (\VP.RPT 200Q) (\VP.BUFFERS 332Q) (\DL.PROCESSORBUSY 100000Q) (\DL.SETTOD 100001Q) (\DL.READTOD 100002Q) (\DL.READPID 100003Q) (\DL.BOOTBUTTON 100004Q)) ) (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 10Q "Loop in \SELECTREALPAGE") (\MP.NEWPAGE 11Q "Attempt to allocate already existing page") (\MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") (\MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") (\MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") (\MP.RESIDENT 15Q "Fault on resident page") (\MP.STACKFAULT 16Q "Fault on stack") (\MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") (\MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") (\MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") (\MP.STACKFULL 23Q) (\MP.MDSFULL 24Q) (\MP.UNKNOWN.UFN 25Q) (\MP.ATOMSFULL 26Q) (\MP.PNAMESFULL 27Q) (\MP.USECOUNTOVERFLOW 30Q) (\MP.MDSFULLWARNING 31Q) (\MP.BADMDSFREELIST 32Q) (\MP.BADARRAYBLOCK 33Q) (\MP.BADDELETEBLOCK 34Q) (\MP.BADARRAYRECLAIM 35Q) (\MP.BIGREFCNTMISSING 36Q "PTR refcnt previously overflowed, but not found in table.") (\MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") (\MP.DELREF0 40Q) (\MP.PROCERROR 41Q) (\MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") (\MP.32MBINUSE 43Q) (\MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") (\MP.STACKRELEASED 45Q) (\MP.FLUSHLOCKED 46Q) (\MP.MAPNOTLOCKED 47Q) (\MP.UNLOCKINGMAP 50Q) (\MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") (\MP.BADRUNTABLE 52Q "Malformed run table for vmem file"))) (DECLARE%: EVAL@COMPILE (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 10Q "Loop in \SELECTREALPAGE") (RPAQ \MP.NEWPAGE 11Q "Attempt to allocate already existing page") (RPAQ \MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") (RPAQ \MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") (RPAQ \MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") (RPAQ \MP.RESIDENT 15Q "Fault on resident page") (RPAQ \MP.STACKFAULT 16Q "Fault on stack") (RPAQ \MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") (RPAQ \MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") (RPAQ \MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") (RPAQQ \MP.STACKFULL 23Q) (RPAQQ \MP.MDSFULL 24Q) (RPAQQ \MP.UNKNOWN.UFN 25Q) (RPAQQ \MP.ATOMSFULL 26Q) (RPAQQ \MP.PNAMESFULL 27Q) (RPAQQ \MP.USECOUNTOVERFLOW 30Q) (RPAQQ \MP.MDSFULLWARNING 31Q) (RPAQQ \MP.BADMDSFREELIST 32Q) (RPAQQ \MP.BADARRAYBLOCK 33Q) (RPAQQ \MP.BADDELETEBLOCK 34Q) (RPAQQ \MP.BADARRAYRECLAIM 35Q) (RPAQ \MP.BIGREFCNTMISSING 36Q "PTR refcnt previously overflowed, but not found in table.") (RPAQ \MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") (RPAQQ \MP.DELREF0 40Q) (RPAQQ \MP.PROCERROR 41Q) (RPAQ \MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") (RPAQQ \MP.32MBINUSE 43Q) (RPAQ \MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") (RPAQQ \MP.STACKRELEASED 45Q) (RPAQQ \MP.FLUSHLOCKED 46Q) (RPAQQ \MP.MAPNOTLOCKED 47Q) (RPAQQ \MP.UNLOCKINGMAP 50Q) (RPAQ \MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") (RPAQ \MP.BADRUNTABLE 52Q "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 10Q "Loop in \SELECTREALPAGE") (\MP.NEWPAGE 11Q "Attempt to allocate already existing page") (\MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") (\MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") (\MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") (\MP.RESIDENT 15Q "Fault on resident page") (\MP.STACKFAULT 16Q "Fault on stack") (\MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") (\MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") (\MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") (\MP.STACKFULL 23Q) (\MP.MDSFULL 24Q) (\MP.UNKNOWN.UFN 25Q) (\MP.ATOMSFULL 26Q) (\MP.PNAMESFULL 27Q) (\MP.USECOUNTOVERFLOW 30Q) (\MP.MDSFULLWARNING 31Q) (\MP.BADMDSFREELIST 32Q) (\MP.BADARRAYBLOCK 33Q) (\MP.BADDELETEBLOCK 34Q) (\MP.BADARRAYRECLAIM 35Q) (\MP.BIGREFCNTMISSING 36Q "PTR refcnt previously overflowed, but not found in table.") (\MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") (\MP.DELREF0 40Q) (\MP.PROCERROR 41Q) (\MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") (\MP.32MBINUSE 43Q) (\MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") (\MP.STACKRELEASED 45Q) (\MP.FLUSHLOCKED 46Q) (\MP.MAPNOTLOCKED 47Q) (\MP.UNLOCKINGMAP 50Q) (\MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") (\MP.BADRUNTABLE 52Q "Malformed run table for vmem file")) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (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 37Q))) (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 53Q))) (BLOCKRECORD IOPAGE ((NIL 22Q 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 40Q WORD) (DLIOPHARDWARECONFIG WORD) (NIL 13Q WORD) (DLRS232CPARAMETERCSBLO.11 WORD) (DLRS232CPARAMETERCSBHI.11 WORD) (DLRS232CSETRS366STATUS.11 16Q WORD) (NIL 74Q WORD) (DLMAGTAPE 4 WORD) (DLETHERNET 14Q WORD) (NIL 37Q WORD) (DLDISPINTERRUPT WORD) (DLDISPCONTROL WORD) (DLDISPBORDER WORD) (DLCURSORX WORD) (DLCURSORY WORD) (DLCURSORBITMAP 20Q WORD)) [ACCESSFNS IOPAGE ((DLCURSORBITMAPPTR (\ADDBASE DATUM 360Q)) (DLCURSORYPTR (\ADDBASE DATUM 357Q)) (DLCURSORXPTR (\ADDBASE DATUM 356Q)) (DLDISPINTERRUPTPTR (\ADDBASE DATUM 353Q)) (DLETHERNETPTR (\ADDBASE DATUM 300Q)) (DLKBDAD5PTR (\ADDBASE DATUM 103Q)) (DLKBDAD4PTR (\ADDBASE DATUM 102Q)) (DLKBDAD3PTR (\ADDBASE DATUM 101Q)) (DLKBDAD2PTR (\ADDBASE DATUM 100Q)) (DLKBDAD1PTR (\ADDBASE DATUM 77Q)) (DLKBDAD0PTR (\ADDBASE DATUM 76Q)) (DLUTILINPTR (\ADDBASE DATUM 75Q)) (DLMOUSEYPTR (\ADDBASE DATUM 74Q)) (DLMOUSEXPTR (\ADDBASE DATUM 73Q)) (DLTODLOPTR (\ADDBASE DATUM 70Q)) (DLMAINTPANELPTR (\ADDBASE DATUM 22Q] (CREATE (\ALLOCBLOCK 200Q))) (DECLARE%: EVAL@COMPILE (PUTPROPS EMADDRESS MACRO [ARGS ([LAMBDA (ADDR) (COND [(EQ \D1BCPLspace \D0BCPLspace) (LIST (LIST 'OPCODES 'GCONST 0 0 (LRSH ADDR 10Q) (LOGAND ADDR 377Q] (T `(\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 '\VAG2 '(fetch (IFPAGE EmulatorSpace) of \InterfacePage ) (CAR X))) ((ZEROP (CAR X)) NIL) (T (LIST '\VAG2 \D0BCPLspace (CAR X]) (PUTPROPS EMADDRESSP MACRO [X (LIST 'EQ (LIST '\HILOC (CAR X)) (COND ((EQ \D1BCPLspace \D0BCPLspace) \D0BCPLspace) (T '(fetch (IFPAGE EmulatorSpace) of \InterfacePage ]) ) (* "END EXPORTED DEFINITIONS") ) (PUTPROPS LLPARAMS MAKEFILE-ENVIRONMENT (:READTABLE "INTERLISP" :PACKAGE "INTERLISP" :BASE 10Q)) (DECLARE%: DONTCOPY (FILEMAP (NIL (5274Q 11316Q (MAKERECORD 5306Q . 11314Q))))) STOP \ No newline at end of file diff --git a/sources/LLPARAMS.LCOM b/sources/LLPARAMS.LCOM index 4765c1dbb1938cd4da9ac0dc71ff3dc02ec39edb..5685de27737a3e02dcd3c5ab0c7ccd9d5fa876da 100644 GIT binary patch delta 394 zcmeAWKO;0DG*ZD_*DWyxWFzqH68Zu4RtkCfB^jA{=?a;73KJhn)GHVwT%f0?r=-A}l2`(?SP5Ce$jHjr z!pguxNt0K@&C|!#Imp#9#MK3;2&?-^aIY@J!3stOW`@SbfeKJ}D)5%%1Kq0O>*yTh zAFSZ&>*(SVphysY>B#e??&xe*zRZ()m zGEfqH@ID4z)p56<3T{fOG`sor;OS1-{`P%$W8Ev_ zWd>Y==btoGKrS3tLcpRnspxeb{=$WX38bOe$!6>oe{K&gyR12QP}Fe$bx* zT@#rz16I9AZl;f(&Dv0EcEwd?8e1f4cxlNahlFGG5biECs za2JpO9M`ypvcfcU+ny_&8!D8kFpRT)w@KfFcre6;!Z~Q>5a%!mni)1TnuQLEn@g{m Xjyen)YS>W2$RXii)^2+r#uM*1T>CQJ From 745fa7f5067bd3b1f706ce46c8e5e224fbf81859 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Fri, 12 Feb 2021 20:38:03 -0800 Subject: [PATCH 06/37] remove old versions of FONT --- sources/FONT.LCOM.~6~ | Bin 44118 -> 0 bytes sources/FONT.~6~ | 1 - sources/FONTPROFILE.LCOM.~1~ | Bin 9412 -> 0 bytes sources/FONTPROFILE.LCOM.~2~ | Bin 10880 -> 0 bytes sources/FONTPROFILE.~2~ | 1 - 5 files changed, 2 deletions(-) delete mode 100644 sources/FONT.LCOM.~6~ delete mode 100644 sources/FONT.~6~ delete mode 100644 sources/FONTPROFILE.LCOM.~1~ delete mode 100644 sources/FONTPROFILE.LCOM.~2~ delete mode 100644 sources/FONTPROFILE.~2~ diff --git a/sources/FONT.LCOM.~6~ b/sources/FONT.LCOM.~6~ deleted file mode 100644 index 317c274c1f947a67250a8e5f8b112974f46e6cfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44118 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 W&`A8DD$wNP4^=sO6bnn{@Bbgui{$YD diff --git a/sources/FONT.~6~ b/sources/FONT.~6~ deleted file mode 100644 index b530eb3f..00000000 --- a/sources/FONT.~6~ +++ /dev/null @@ -1 +0,0 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "28-Jun-99 16:29:49" {DSK}medley3.5>sources>FONT.;3 187933 changes to%: (FNS \LOOKUPFONTSINCORE) previous date%: "28-Jun-99 16:22:27" {DSK}medley3.5>sources>FONT.;2) (* ; " Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1999 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT FONTCOMS) (RPAQQ FONTCOMS [ (* ;; "font functions ") (FNS CHARWIDTH CHARWIDTHY STRINGWIDTH \CHARWIDTH.DISPLAY \STRINGWIDTH.DISPLAY \STRINGWIDTH.GENERIC) (FNS DEFAULTFONT FONTCLASS FONTCLASSUNPARSE FONTCLASSCOMPONENT SETFONTCLASSCOMPONENT) [COMS (* ;  "Until we pin down the exact interface") (P (MOVD 'FONTCLASSCOMPONENT 'FONTCOMPONENT) (MOVD 'SETFONTCLASSCOMPONENT 'SETFONTCOMPONENT] [COMS (* ; "MAPPING FOR DOS FILENAMES ") (INITVARS (*DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) (HELVETICA . HV) (TIMESROMAND . TD) (HELVETICAD . HD) (MODERN . MD) (CLASSIC . CL) (GACHA . GC) (TITAN . TI) (LETTERGOTHIC . LG) (BOLDPS . BP) (TERMINAL . TM) (CLASSICTHIN . CT) (HIPPO . HP) (LOGO . LG) (MATH . MA) (OLDENGLISH . OE) (SYMBOL . SY] (COMS (* ;; "Creation: ") (FNS FONTCREATE \FONT.SYMBOLMEMB \FONT.SYMBOLASSOC \FONT.COMPARESYMBOL)) (COMS (* ;; "Property extraction:") (FNS FONTASCENT FONTDESCENT FONTHEIGHT FONTPROP \AVGCHARWIDTH)) (COMS (* ;; "Bitmap editing/manipulation:") (FNS GETCHARBITMAP PUTCHARBITMAP MOVECHARBITMAP)) (FNS FONTCOPY FONTSAVAILABLE FONTFILEFORMAT FONTP FONTUNPARSE SETFONTDESCRIPTOR CHARCODEP EDITCHAR \STREAMCHARWIDTH \UNITWIDTHSVECTOR \CREATEDISPLAYFONT \CREATECHARSET.DISPLAY \CREATE-REAL-CHARSET.DISPLAY \BUILDSLUGCSINFO \SEARCHDISPLAYFONTFILES \SEARCHFONTFILES \FINDFONTFILE \FONTSYMBOL \DEVICESYMBOL \FONTFACE \FONTFACE.COLOR \FONTFILENAME \FONTFILENAME.OLD \FONTFILENAME.NEW \FONTINFOFROMFILENAME \FONTINFOFROMFILENAME.OLD \GETFONTDESC \COERCEFONTDESC \LOOKUPFONT \LOOKUPFONTSINCORE \READDISPLAYFONTFILE) (COMS (* ;; "\FINDFONTFILE \FONTFILENAME \SEARCHFONTFILES \FONTINFOFROMFILENAME are redefined to deal with character-set directories. That behavior is conditioned on the setting of the global variable *USEOLDFONTDIRECTORIES*, T at PARC, maybe NIL most other places. ") (ADDVARS (*OLD-FONT-EXTENSIONS* STRIKE)) (INITVARS (*USEOLDFONTDIRECTORIES* NIL)) (GLOBALVARS *OLD-FONT-EXTENSIONS* *USEOLDFONTDIRECTORIES*) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)") ) (COMS (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)") (INITVARS (CACHEDISPLAYFONTS T)) (GLOBALVARS CACHEDISPLAYFONTS) (* ; "STRIKE format file support") (FNS \READSTRIKEFONTFILE \SFMAKEBOLD \SFMAKEITALIC \SFMAKEROTATEDFONT \SFROTATECSINFO \SFROTATEFONTCHARACTERS \SFFIXOFFSETSAFTERROTATION \SFROTATECSINFOOFFSETS \SFMAKECOLOR) (FNS WRITESTRIKEFONTFILE STRIKECSINFO)) (INITRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) (SYSRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) (INITVARS (\FONTSINCORE) (\DEFAULTDEVICEFONTS) (\UNITWIDTHSVECTOR)) (GLOBALVARS DISPLAYFONTDIRECTORIES \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\UNITWIDTHSVECTOR))) (CONSTANTS (NORUNCODE 255)) (EXPORT (OPTIMIZERS FONTPROP)) [DECLARE%: DONTCOPY (EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO) (MACROS FONTASCENT FONTDESCENT FONTHEIGHT \FGETOFFSET \FSETOFFSET \FGETWIDTH \FSETWIDTH \FGETCHARWIDTH \FSETCHARWIDTH \FGETIMAGEWIDTH \FSETIMAGEWIDTH \GETCHARSETINFO \CREATECSINFOELEMENT \CREATEFONTCHARSETVECTOR) (FUNCTIONS \CREATEKERNELEMENT \FSETLEFTKERN \FGETLEFTKERN) (CONSTANTS (\MAXNSCHAR 65535] (COMS (* ; "NS Character specific code") (FNS \CREATECHARSET) (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS CHARSETERRORFLG) (INITVARS (DISPLAYFONTCOERCIONS NIL) [MISSINGCHARSETDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)) ((TERMINAL 6) (MODERN 6)) ((TERMINAL 8) (MODERN 8)) ((TERMINAL 10) (MODERN 10)) ((TERMINAL 12) (MODERN 12] [MISSINGDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN] (CHARSETERRORFLG NIL) (\DEFAULTCHARSET 0))) (FNS \FONTRESETCHARWIDTHS) [DECLARE%: DONTEVAL@LOAD (INITVARS (DISPLAYFONTEXTENSIONS 'DISPLAYFONT) (DISPLAYFONTDIRECTORIES '( {DSK}/USR/LOCAL/LDE/FONTS/DISPLAY/PRESENTATION/ {dsk}/usr/local/lde/fonts/display/publishing/ ] (MACROS \FGETCHARIMAGEWIDTH \GETFONTDESC \SETCHARSETINFO) (LOCALVARS . T) (PROP FILETYPE FONT) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA FONTCOPY]) (* ;; "font functions ") (DEFINEQ (CHARWIDTH [LAMBDA (CHARCODE FONT) (* rmk%: "12-Apr-85 09:46") (* ;  "gets the width of a character code in a font/stream") (OR (\CHARCODEP CHARCODE) (\ILLEGAL.ARG CHARCODE)) (LET (TEMP) (COND ((type? FONTDESCRIPTOR FONT) (\FGETCHARWIDTH FONT CHARCODE)) ((SETQ TEMP (\OUTSTREAMARG FONT T)) (* ;  "NIL font goes thru here--primary output file") (IMAGEOP 'IMCHARWIDTH TEMP TEMP CHARCODE)) (T (\FGETCHARWIDTH (FONTCREATE FONT) CHARCODE]) (CHARWIDTHY [LAMBDA (CHARCODE FONT) (* edited%: "18-Mar-86 19:30") (* ;  "Gets the Y-component of the width of a character code in a font.") (OR (\CHARCODEP CHARCODE) (\ILLEGAL.ARG CHARCODE)) (LET (TEMP WY) (COND ((type? FONTDESCRIPTOR FONT) (SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) FONT))) (COND ((FIXP WY)) (WY (\FGETWIDTH WY (\CHAR8CODE CHARCODE))) (T 0))) ((type? STREAM (SETQ TEMP (\OUTSTREAMARG FONT T))) (* ;  "NIL font goes thru here--primary output file") (IMAGEOP 'IMCHARWIDTHY TEMP TEMP CHARCODE)) (T [SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) (FONTCREATE FONT] (COND ((FIXP WY)) (WY (\FGETWIDTH WY (\CHAR8CODE CHARCODE))) (T 0]) (STRINGWIDTH [LAMBDA (STR FONT FLG RDTBL) (* ; "Edited 8-Jan-88 14:41 by Snow") (* ;; "Returns the width of STR according to FONT") (LET (TEMP) (* ;; "Used in \MAPCHARS") (COND [(type? FONTDESCRIPTOR FONT) (\STRINGWIDTH.GENERIC STR FONT (AND FLG (\GTREADTABLE RDTBL)) (\FGETCHARWIDTH FONT (CHARCODE SPACE] [(AND FONT (SETQ TEMP (\OUTSTREAMARG FONT T))) (* ;  "if you gave something for FONT, coerce it to a stream, and call the stringwidth function of it.") (IMAGEOP 'IMSTRINGWIDTH TEMP TEMP STR (AND FLG (\GTREADTABLE RDTBL] (T (SETQ TEMP (FONTCREATE (OR FONT DEFAULTFONT))) (* ; "NIL font will pass thru here. ie, defaultfont is used to do the stringwidth instead of the font of *standard-output*") (\STRINGWIDTH.GENERIC STR TEMP (AND FLG (\GTREADTABLE RDTBL)) (\FGETCHARWIDTH TEMP (CHARCODE SPACE]) (\CHARWIDTH.DISPLAY [LAMBDA (STREAM CHARCODE) (* rmk%: "12-Apr-85 09:42") (* ;  "gets the width of a character code in a display stream. Need to fix up for spacefactor.") (\FGETCHARWIDTH (ffetch (\DISPLAYDATA DDFONT) of (ffetch IMAGEDATA of STREAM)) CHARCODE]) (\STRINGWIDTH.DISPLAY [LAMBDA (STREAM STR RDTBL) (* ; "Edited 3-Apr-87 12:07 by jop") (* ;; "Returns the width of for the current font/spacefactor in STREAM.") (LET ((DD (ffetch IMAGEDATA of STREAM))) (\STRINGWIDTH.GENERIC STR (ffetch (\DISPLAYDATA DDFONT) of DD) RDTBL (ffetch DDSPACEWIDTH of DD]) (\STRINGWIDTH.GENERIC [LAMBDA (STR FONT RDTBL SPACEWIDTH) (* ; "Edited 3-Apr-87 13:47 by jop") (* ;; "Returns the width of STR with SPACEWIDTH for the width of spaces. RDTBL has already been coerced, so no FLG is needed ") (* ;; "This is cloned in \STRINGWIDTH.HCPYDISPLAYAUX by straight substitution -- (PUTDEF (QUOTE \STRINGWIDTH.HCPYDISPLAYAUX) (QUOTE FNS) (SUBLIS (QUOTE ((WIDTHS . IMAGEWIDTHS) (\FGETWIDTH . \FGETIMAGEWIDTH) (\FGETCHARWIDTH . \FGETCHARIMAGEWIDTH))) (GETDEF (QUOTE \STRINGWIDTH.GENERIC))))") (* ;; "\MAPPNAME uses WIDTHSBASE CSET TOTALWIDTH FONT SPACEWIDTH free, so these become special in bytecompiler") (PROG NIL [COND [(LITATOM STR) (if RDTBL then (GO SLOW) else (RETURN (for C WIDTHSBASE CSET inatom STR sum [COND ((NEQ CSET (\CHARSET C)) (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT ] (COND ((EQ C (CHARCODE SPACE)) SPACEWIDTH) (T (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C] ((STRINGP STR) (RETURN (LET ((TOTAL 0) ESC ESCWIDTH WIDTHSBASE CSET) [COND (RDTBL (* ;  "Count delimiting quotes and internal escapes") (SETQ TOTAL (UNFOLD (\FGETCHARWIDTH FONT (CHARCODE %")) 2)) (SETQ ESC (fetch (READTABLEP ESCAPECHAR) of RDTBL)) (SETQ ESCWIDTH (\FGETCHARWIDTH FONT ESC] [for C instring STR do [COND ((NEQ (\CHARSET C) CSET) (* ;  "Get the widths vector for this character set") (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT] (add TOTAL (COND ((EQ C (CHARCODE SPACE)) SPACEWIDTH) (T (IPLUS (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C)) (COND ((AND RDTBL (OR (EQ C (CHARCODE %")) (EQ C ESC))) (* ; "String char must be escaped") ESCWIDTH) (T 0] TOTAL] SLOW (* ; "Do the general case here") (RETURN (LET ((TOTALWIDTH 0) WIDTHSBASE CSET (FONT FONT) (SPACEWIDTH SPACEWIDTH)) (DECLARE (SPECVARS TOTALWIDTH WIDTHSBASE CSET FONT SPACEWIDTH)) (\MAPPNAME [FUNCTION (LAMBDA (DUMMY CC) (add TOTALWIDTH (COND ((EQ CC (CHARCODE SPACE)) SPACEWIDTH) ((EQ CSET (\CHARSET CC)) (\FGETWIDTH WIDTHSBASE (\CHAR8CODE CC))) (T (SETQ CSET (\CHARSET CC)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO CSET FONT))) (\FGETWIDTH WIDTHSBASE (\CHAR8CODE CC] STR RDTBL RDTBL *PRINT-LEVEL* *PRINT-LENGTH*) TOTALWIDTH]) ) (DEFINEQ (DEFAULTFONT [LAMBDA (DEVICE FONT NOERRORFLG) (* ; "Edited 28-Jul-88 13:15 by rmk:") (* ; "Edited 24-Mar-87 14:41 by FS") (* ;; "Returns the default font for an image type. Really only needed to guarantee validity of the display default font for system critical routines, in case the user has smashed the variable DEFAULTFONT. Note that SETFONTCLASSCOMPONENT and FONTCLASS guarantee that the display component is either NIL or a fontdescriptor.") (* ;; "FS- If FONT provided set the font descriptor. Do not bother to check if NOERRORFLG is NEW. (old code had (AND FONT (EQ NOERRORFLG 'NEW)))") [OR (type? FONTCLASS DEFAULTFONT) (SETQ DEFAULTFONT (FONTCLASS 'DEFAULTFONT] (if FONT then (* ;; "FS- Not clear the fontclass should be smashed, perhaps instead should make a new FONTCLASS and then rebind DEFAULTFONT. Leaving alone for histerical reasons") (SETFONTCLASSCOMPONENT DEFAULTFONT DEVICE FONT) else (* ;; "The code below (not mine!) is messy but is correct (unless weirdness pops up because of deep recursion).") (COND ((\COERCEFONTDESC DEFAULTFONT DEVICE T)) (NOERRORFLG NIL) ((EQ (\DEVICESYMBOL DEVICE T) 'DISPLAY) (* ;; "If getting for the display and the font can't be found perhaps because of garbage in the display field of the DEFAULTFONTCLASS, then the system-guaranteed displayfont. Otherwise, cause the error in the re-coercion. Can never tell when DEVICE is just a symbol.") \GUARANTEEDDISPLAYFONT) ((\COERCEFONTDESC DEFAULTFONT DEVICE]) (FONTCLASS [LAMBDA (NAME FONTLIST CREATEFORDEVICES) (* jds " 9-Sep-86 18:49") (* ;; "This builds D style font classes, which are datatypes containing entries for the various known devices.") (* ;; "Don't actually set up the for devices not inside CREATEFORDEVICES on the theory that any given user presumably doesn't want all the fonts for all the devices. We wait until he actually asks for the font or the fontmaparray, at which point we note that the fields don't contain FD's, so we then apply FONTCREATE. The actual coercion and caching is done inside \COERCEFONTDESC. However, so as to prevent display crashes, if a display component is specified, we always do the fontcreate before we stick it in.") (PROG (F FC FL) (SETQ FL FONTLIST) [SETQ FC (create FONTCLASS FONTCLASSNAME _ NAME PRETTYFONT# _ (OR (FIXP (pop FL)) 1) DISPLAYFD _ (AND (SETQ F (pop FL)) (FONTCREATE F NIL NIL NIL 'DISPLAY)) PRESSFD _ (pop FL) INTERPRESSFD _ (pop FL) OTHERFDS _ (for FSPEC in FL collect (OR (AND (LISTP FSPEC) (ATOM (CAR FSPEC)) (CAR FSPEC)) (ERROR "illegal font class specification" (LIST NAME FONTLIST))) (* ;  "Copy the alist entry so it can be smashed in \COERCEFONTDESC") (CONS (CAR FSPEC) (CAR (LISTP (CDR FSPEC] (for D inside CREATEFORDEVICES do (FONTCREATE FC NIL NIL NIL D)) (RETURN FC]) (FONTCLASSUNPARSE [LAMBDA (FONTCLASS DEVICE FONT NOERRORFLG) (* jds "24-Jan-86 11:58") (* ;  "Given a font class, unparse it to a form that might be reparsable") (APPEND (LIST (fetch (FONTCLASS FONTCLASSNAME) of FONTCLASS) (fetch (FONTCLASS PRETTYFONT#) of FONTCLASS) (FONTUNPARSE (ffetch (FONTCLASS DISPLAYFD) of FONTCLASS)) (FONTUNPARSE (ffetch (FONTCLASS PRESSFD) of FONTCLASS)) (FONTUNPARSE (ffetch (FONTCLASS INTERPRESSFD) of FONTCLASS))) (for X in (fetch (FONTCLASS OTHERFDS) of FONTCLASS) collect (LIST (CAR X) (FONTUNPARSE (CDR X]) (FONTCLASSCOMPONENT [LAMBDA (FONTCLASS DEVICE FONT NOERRORFLG) (* rmk%: "14-Sep-84 19:34") (PROG1 (FONTCREATE FONTCLASS NIL NIL NIL DEVICE NOERRORFLG) (* ;  "This works its way down to \COERCEFONTDESC, where it needs to be done quickly") (AND FONT (SETQ FONT (FONTCREATE FONT NIL NIL NIL DEVICE NOERRORFLG)) (SETFONTCLASSCOMPONENT FONTCLASS DEVICE FONT)))]) (SETFONTCLASSCOMPONENT [LAMBDA (FONTCLASS DEVICE FONT) (* ; "Edited 29-Aug-91 12:20 by jds") (PROG ((NEWFONT (FONTCREATE FONT NIL NIL NIL DEVICE))) (* ;; "replaces will barf if FONTCLASS is not a fontclass") (SELECTQ (SETQ DEVICE (FONTPROP NEWFONT 'DEVICE)) (DISPLAY (replace (FONTCLASS DISPLAYFD) of FONTCLASS with NEWFONT)) (INTERPRESS (replace (FONTCLASS INTERPRESSFD) of FONTCLASS with NEWFONT )) (PRESS (replace (FONTCLASS PRESSFD) of FONTCLASS with NEWFONT)) (RPLACD [OR (SASSOC DEVICE (fetch (FONTCLASS OTHERFDS) of FONTCLASS)) (CAR (push (fetch (FONTCLASS OTHERFDS) of FONTCLASS) (CONS DEVICE] NEWFONT)) (RETURN NEWFONT]) ) (* ; "Until we pin down the exact interface") (MOVD 'FONTCLASSCOMPONENT 'FONTCOMPONENT) (MOVD 'SETFONTCLASSCOMPONENT 'SETFONTCOMPONENT) (* ; "MAPPING FOR DOS FILENAMES ") (RPAQ? *DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) (HELVETICA . HV) (TIMESROMAND . TD) (HELVETICAD . HD) (MODERN . MD) (CLASSIC . CL) (GACHA . GC) (TITAN . TI) (LETTERGOTHIC . LG) (BOLDPS . BP) (TERMINAL . TM) (CLASSICTHIN . CT) (HIPPO . HP) (LOGO . LG) (MATH . MA) (OLDENGLISH . OE) (SYMBOL . SY))) (* ;; "Creation: ") (DEFINEQ (FONTCREATE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE NOERRORFLG CHARSET) (* ; "Edited 10-Oct-88 09:53 by rmk:") (* ; "Edited 28-Jul-88 14:43 by rmk:") (* ; "Edited 10-Nov-87 18:08 by FS") (* ;; "Create a font descriptor for the specified font. If NOERRORFLG, return NIL if the font doesn't exist; otherwise cause an error.") (* ;; "Cache and fonts.widths traffic in uppercase only.") (* ;; "character set is optional and defaults to \DEFAULTCHARSET (0 in our world)") (DECLARE (GLOBALVARS IMAGESTREAMTYPES \DEFAULTCHARSET)) (PROG (FONTX (CHSET (OR CHARSET \DEFAULTCHARSET))) (RETURN (COND ((LISTP FAMILY) (SELECTQ (CAR FAMILY) (FONT (SETQ FONTX (CDR FAMILY))) (CLASS (COND ((LITATOM (CADR FAMILY)) (* ; "litatom class name") (RETURN (FONTCLASS (CADR FAMILY) (CDDR FAMILY) DEVICE))) (T (* ;  "Allows for a font named CLASS--distinguished cause its size is not a litatom") (SETQ FONTX FAMILY)))) (SETQ FONTX FAMILY)) (FONTCREATE (CAR FONTX) (OR (CADR FONTX) SIZE) (OR (CADDR FONTX) FACE) (OR (CADDDR FONTX) ROTATION) (OR (CADR (CDDDR FONTX)) DEVICE) NOERRORFLG CHSET)) ([SETQ FONTX (COND ((type? FONTDESCRIPTOR FAMILY) FAMILY) ((NULL FAMILY) (DEFAULTFONT DEVICE)) ((type? FONTCLASS FAMILY) (* ;; "We know that this won't attempt a cyclic fontcreate in \COERCEFONTDESC, because we are passing a known class. Unless NOERROFLG, an error will be caused on the actual device font if it can't be found.") (\COERCEFONTDESC FAMILY DEVICE NOERRORFLG)) ((OR (IMAGESTREAMP FAMILY) (type? WINDOW FAMILY)) (DSPFONT NIL FAMILY] (* ;;  "FAMILY was a spec for a font descriptor, use it and extend it by the other args.") (COND ((OR SIZE FACE ROTATION DEVICE) (FONTCREATE (FONTPROP FONTX 'FAMILY) (OR SIZE (FONTPROP FONTX 'SIZE)) (OR FACE (FONTPROP FONTX 'FACE)) (OR ROTATION (FONTPROP FONTX 'ROTATION)) (OR DEVICE (FONTPROP FONTX 'DEVICE)) NOERRORFLG)) (T FONTX))) (T (PROG (FONTFACE (DEV DEVICE)) RETRY [OR (LITATOM FAMILY) (COND (NOERRORFLG (RETURN)) (T (LISPERROR "ARG NOT LITATOM" FAMILY T] [OR (AND (FIXP SIZE) (IGREATERP SIZE 0)) (COND (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG SIZE] (COND ((NULL ROTATION) (SETQ ROTATION 0)) ((AND (FIXP ROTATION) (IGEQ ROTATION 0))) (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG ROTATION))) [SETQ DEV (COND ((NULL DEVICE) 'DISPLAY) ((AND (LITATOM DEVICE) (NEQ DEVICE T)) (* ; "Maybe wrong case or package, but we bet it's OK and defer expensive coercion until we've failed.") DEV) ((SETQ DEV (\GETSTREAM DEVICE 'OUTPUT T)) (* ;  "T coerces here to primary output") (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of DEV))) ((STRINGP DEVICE) (MKATOM (U-CASE DEVICE))) (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG DEVICE] (* ; "DEV is now guanteed litatom") NEWDEV (* ;  "Check after device since it is device-dependent") (SETQ FONTFACE (OR (\FONTFACE FACE NOERRORFLG DEV) (RETURN NIL))) (* ; "Don't truly coerce to \FONTSYMBOL or \DEVICESYMBOL until we've had a shot at the font cache, since re-interning atoms is so expensive") [RETURN (COND ((\LOOKUPFONT FAMILY SIZE FONTFACE ROTATION DEV)) [(SETQ FONTX (CDR (ASSOC DEV IMAGESTREAMTYPES))) (* ;; "Device is valid, font just doesn't exist. FONTFACE, DEV already canonical. Make FAMILY so, so that each imagestream type doesn't have to.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (COND ((SETQ FONTX (APPLY* (OR (CADR (ASSOC 'FONTCREATE FONTX) ) (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION DEV CHSET)) (* ;; "default creation case. Use fontcreate method from device, build a fontdescriptor and use setfontdescriptor to install it.") (* ;; "OBSOLETEd by the CHARSETINFO code (OR (ffetch FONTIMAGEWIDTHS of FONTX) (freplace FONTIMAGEWIDTHS of FONTX with (ffetch \SFWidths of FONTX)))") (* ;;  "the widths fields in the fontdescriptor are obsolete, and shoudln't be updated here.") (* ;; "We should probably force all device implementations to obey these conventions, then remove these generic updates") (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONTX with (\AVGCHARWIDTH FONTX)) (SETFONTDESCRIPTOR FAMILY SIZE FONTFACE ROTATION DEV FONTX)) (T (GO NOTFOUND] ((NEQ DEV (SETQ DEV (U-CASE DEV))) (* ;; "We didn't recognize the device, so check to see whether coercion to U-CASE IL changes anything. Could be slow, but we're heading for an error.") (GO NEWDEV)) (T (GO NOTFOUND] NOTFOUND (COND (NOERRORFLG (RETURN NIL)) (T (ERROR "FONT NOT FOUND (coerced to)" (LIST FAMILY SIZE FONTFACE ROTATION DEV)) (GO RETRY]) (\FONT.SYMBOLMEMB [LAMBDA (USERINPUT LIST) (* ; "Edited 7-Feb-89 15:47 by jds") (for X on LIST when (\FONT.COMPARESYMBOL USERINPUT (CAR X)) do (RETURN X]) (\FONT.SYMBOLASSOC [LAMBDA (USERINPUT LIST) (* ; "Edited 28-Jul-88 16:56 by rmk:") (* ; "Edited 28-Jul-88 15:15 by rmk:") (* ; "Edited 28-Jul-88 15:03 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 28-Jul-88 14:16 by rmk:") (for X FIRSTC (NC _ (NCHARS USERINPUT)) in LIST first (SETQ FIRSTC (CHCON1 USERINPUT)) [if (AND (IGEQ FIRSTC (CHARCODE a)) (ILEQ FIRSTC (CHARCODE z))) then (SETQ FIRSTC (IDIFFERENCE FIRSTC (IDIFFERENCE (CHARCODE a) (CHARCODE A] when (AND (EQ NC (NCHARS (CAR X))) (EQ FIRSTC (CHCON1 (CAR X))) (\FONT.COMPARESYMBOL USERINPUT (CAR X) NC FIRSTC)) do (RETURN X]) (\FONT.COMPARESYMBOL [LAMBDA (USERINPUT KEY INPUTNC INPUTFIRSTC) (* ;  "Edited 24-May-93 16:45 by sybalsky:mv:envos") (* ;; " An open coded case- and package-insensitive comparison of atom pnames, assuming that KEY is already upper-case but USERINPUT may not be. Maybe there is a simple function that does this.") (* ;; "INPUTNC and INPUTFIRSTC can be passed in if they are common to lots of calls") (COND ((AND (LITATOM USERINPUT) (EQ [CL:AREF *PACKAGE-FROM-INDEX* (fetch (PNAMECELL PACKAGEINDEX) of (PROGN (\PNAMECELL USERINPUT] *INTERLISP-PACKAGE*)) (* ;; "If the user's symbol is in the IL package (which is where all the KEYs are), we can use EQ, which is MUCH faster.") (OR (EQ USERINPUT KEY) (EQ (U-CASE USERINPUT) KEY))) (T (* ;; "Otherwise, we do the comparison character by character.") (AND (EQ (OR INPUTNC (NCHARS USERINPUT)) (NCHARS KEY)) [COND (INPUTFIRSTC (EQ INPUTFIRSTC (CHCON1 KEY))) ((EQ (SETQ INPUTFIRSTC (CHCON1 USERINPUT)) (CHCON1 KEY))) ((AND (IGEQ INPUTFIRSTC (CHARCODE a)) (ILEQ INPUTFIRSTC (CHARCODE z))) (EQ (IDIFFERENCE INPUTFIRSTC (IDIFFERENCE (CHARCODE a) (CHARCODE A))) (CHCON1 KEY] (for CHAR1 inatom USERINPUT as CHAR2 inatom KEY always (OR (EQ CHAR1 CHAR2) (AND (IGEQ CHAR1 (CHARCODE a)) (ILEQ CHAR1 (CHARCODE z)) (EQ CHAR2 (IPLUS CHAR1 (CONSTANT (IDIFFERENCE (CHARCODE A) (CHARCODE a]) ) (* ;; "Property extraction:") (DEFINEQ (FONTASCENT [LAMBDA (FONTSPEC) (* lmm "19-NOV-82 00:23") (ffetch \SFAscent of (\GETFONTDESC FONTSPEC]) (FONTDESCENT [LAMBDA (FONTSPEC) (* lmm "19-NOV-82 00:24") (* ; "See comment in FONTASCENT") (ffetch \SFDescent of (\GETFONTDESC FONTSPEC]) (FONTHEIGHT [LAMBDA (FONTSPEC) (* kbr%: " 9-Jan-86 18:29") (fetch (FONTDESCRIPTOR \SFHeight) of (\GETFONTDESC FONTSPEC]) (FONTPROP [LAMBDA (FONT PROP) (* kbr%: "13-May-85 22:36") (SETQ FONT (\GETFONTDESC FONT)) (SELECTQ PROP (HEIGHT (ffetch \SFHeight of FONT)) (ASCENT (ffetch \SFAscent of FONT)) (DESCENT (ffetch \SFDescent of FONT)) (FAMILY (ffetch FONTFAMILY of FONT)) (SIZE (ffetch FONTSIZE of FONT)) (FACE (COPY (ffetch FONTFACE of FONT))) (WEIGHT (ffetch WEIGHT of (ffetch FONTFACE of FONT))) (SLOPE (ffetch SLOPE of (ffetch FONTFACE of FONT))) (EXPANSION (ffetch EXPANSION of (ffetch FONTFACE of FONT))) (FORECOLOR (ffetch FORECOLOR of (ffetch FONTFACE of FONT))) (BACKCOLOR (ffetch BACKCOLOR of (ffetch FONTFACE of FONT))) (ROTATION (ffetch ROTATION of FONT)) (DEVICE (ffetch FONTDEVICE of FONT)) (SPEC (LIST (ffetch FONTFAMILY of FONT) (ffetch FONTSIZE of FONT) (COPY (ffetch FONTFACE of FONT)) (ffetch ROTATION of FONT) (ffetch FONTDEVICE of FONT))) (DEVICESPEC (* ;  "DEVICE fields are for communicating coercions to the particular printing device") [COND ((ffetch FONTDEVICESPEC of FONT) (COPY (ffetch FONTDEVICESPEC of FONT))) (T (FONTPROP FONT 'SPEC]) (DEVICEFACE [COPY (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICESLOPE [fetch SLOPE of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICEWEIGHT [fetch WEIGHT of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICEEXPANSION [fetch EXPANSION of (COND ((ffetch FONTDEVICESPEC of FONT) (CADDR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFACE of FONT]) (DEVICESIZE (COND ((ffetch FONTDEVICESPEC of FONT) (CADR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTSIZE of FONT)))) (DEVICEFAMILY (COND ((ffetch FONTDEVICESPEC of FONT) (CAR (ffetch FONTDEVICESPEC of FONT))) (T (ffetch FONTFAMILY of FONT)))) (SCALE (ffetch FONTSCALE of FONT)) (\ILLEGAL.ARG PROP]) (\AVGCHARWIDTH [LAMBDA (FONT) (* rmk%: "27-Nov-84 18:40") (* ;; "Returns the average width of a character, to be used in units-to-characters approximations, as in fixing the linelength") (PROG ((W (CHARWIDTH (CHARCODE A) FONT))) (RETURN (COND ((NEQ 0 W) W) ([NEQ 0 (SETQ W (FIXR (FTIMES 0.6 (FONTPROP FONT 'HEIGHT] W) (T 1]) ) (* ;; "Bitmap editing/manipulation:") (DEFINEQ (GETCHARBITMAP [LAMBDA (CHARCODE FONT) (* ; "Edited 26-Apr-89 21:49 by atm") (* ;  "returns a bitmap of the character CHARCODE from the font descriptor FONTDESC.") (COND ((OR (CHARCODEP CHARCODE) (EQ CHARCODE 256)) (* ;  "bitmap for char 256 is what gets printed if char not found") ) ((OR (STRINGP CHARCODE) (LITATOM CHARCODE)) (* ;  "For strings & litatoms, take the first character") (SETQ CHARCODE (CHCON1 CHARCODE))) ((TYPEP CHARCODE 'CL:CHARACTER) (* ;  "For common-lisp CHARACTERs, convert it to the char code first.") (SETQ CHARCODE (CL:CHAR-INT CHARCODE))) (T (\ILLEGAL.ARG CHARCODE))) (PROG (CBM (FONTDESC (\GETFONTDESC FONT)) CSINFO CWDTH CHGHT) (* ;; "fetch the csinfo for the character set of this character. Bitmaps and widths must be fetched from it") (SETQ CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) FONTDESC)) (* ;; "(\\fgetwidth (|fetch| (charsetinfo widths) |of| csinfo) (\\char8code charcode))") [SETQ CBM (BITMAPCREATE [SETQ CWDTH (if (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) then (\FGETIMAGEWIDTH (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) (\CHAR8CODE CHARCODE)) else (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) (\CHAR8CODE CHARCODE] (SETQ CHGHT (FONTPROP FONTDESC 'HEIGHT)) (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO] (BITBLT (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO) (\FGETOFFSET (fetch (CHARSETINFO OFFSETS) of CSINFO) (\CHAR8CODE CHARCODE)) 0 CBM 0 0 CWDTH CHGHT) (RETURN CBM]) (PUTCHARBITMAP [LAMBDA (CHARCODE FONT NEWCHARBITMAP NEWCHARDESCENT) (* ; "Edited 27-Apr-89 11:19 by atm") (* ;; "stores the bitmap NEWCHARBITMAP as the character CHARCODE from the font descriptor FONTDESC. If NEWCHARDESCENT is specified, it is the descent of the new bitmap, and things may be moved to accomodate it.") (OR (TYPENAMEP NEWCHARBITMAP 'BITMAP) (\ILLEGAL.ARG NEWCHARBITMAP)) (COND ((CHARCODEP CHARCODE)) ((OR (STRINGP CHARCODE) (LITATOM CHARCODE)) (SETQ CHARCODE (CHCON1 CHARCODE))) (T (\ILLEGAL.ARG CHARCODE))) (PROG* ((FONTDESC (\GETFONTDESC FONT)) (CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) FONTDESC)) (CDESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (CASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (CHEIGHT (IPLUS CDESCENT CASCENT)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (CIMWIDTH (if IMWIDTHS then (\FGETIMAGEWIDTH IMWIDTHS (\CHAR8CODE CHARCODE)) else NIL)) (CWIDTH (OR CIMWIDTH (CHARWIDTH CHARCODE FONTDESC))) (FONTBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (OFWIDTH (fetch (BITMAP BITMAPWIDTH) of FONTBITMAP)) TEMPBITMAP BWIDTH DW BHEIGHT BASCENT BDESCENT NDESCENT NASCENT NHEIGHT CHAROFFSET (BITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of FONTBITMAP))) (* ;; "fetch the ascents and descents of the bitmap and the new maximums.") (SETQ BWIDTH (fetch (BITMAP BITMAPWIDTH) of NEWCHARBITMAP)) (SETQ BHEIGHT (fetch (BITMAP BITMAPHEIGHT) of NEWCHARBITMAP)) (SETQ BDESCENT (OR NEWCHARDESCENT CDESCENT)) (SETQ BASCENT (IDIFFERENCE BHEIGHT BDESCENT)) (SETQ NDESCENT (IMAX BDESCENT CDESCENT)) (SETQ NASCENT (IMAX BASCENT CASCENT)) (SETQ NHEIGHT (IPLUS NDESCENT NASCENT)) (SETQ CHAROFFSET (\FGETOFFSET OFFSETS (\CHAR8CODE CHARCODE))) (* ;; "set up a new target bitmap if any of the parameters have changed.") (COND ((EQ CHAROFFSET (\FGETOFFSET OFFSETS \MAXTHINCHAR)) (* ;; "changing the bitmap for a character which formerly pointed at the slug character. Allocate a new bitmap character bitmap for this.") (SETQ TEMPBITMAP (BITMAPCREATE (IPLUS OFWIDTH BWIDTH) NHEIGHT BITSPERPIXEL)) (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) OFWIDTH CHEIGHT) (* ; "copy the old characters over.") (SETQ CHAROFFSET OFWIDTH)) ((NEQ CWIDTH BWIDTH) (* ;; "The bitmaps differ in width; create a new bitmap with things at the right places, then update widths and offsets.") (SETQ DW (IDIFFERENCE BWIDTH CWIDTH)) (* ; "Difference in character widths") (SETQ TEMPBITMAP (BITMAPCREATE (IPLUS OFWIDTH DW) NHEIGHT BITSPERPIXEL))(* ;  "this may also be a taller bitmap if NHEIGHT is larger than CHEIGHT.") (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) CHAROFFSET CHEIGHT) (* ;  "Copy that portion to the left of the character.") (BITBLT FONTBITMAP (IPLUS CHAROFFSET CWIDTH) 0 TEMPBITMAP (IPLUS CHAROFFSET BWIDTH) (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) (ADD1 (IDIFFERENCE OFWIDTH (IPLUS CHAROFFSET CWIDTH))) CHEIGHT) (* ;  "Copy that portion to the right of the new character.") ) ((OR (IGREATERP BASCENT CASCENT) (IGREATERP BDESCENT CDESCENT)) (* ;; "The new character is TALLER than the existing bitmap. Make a larger bitmap.") (SETQ TEMPBITMAP (BITMAPCREATE OFWIDTH NHEIGHT BITSPERPIXEL)) (BITBLT FONTBITMAP 0 0 TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NDESCENT CDESCENT)) OFWIDTH CHEIGHT) (* ;; "Copy the existing bitmap into it, adjusting for a larger descent in the new character (if there is one)") )) (* ;; "copy the new bitmap in and update parameters.") (BITBLT NEWCHARBITMAP 0 0 (OR TEMPBITMAP FONTBITMAP) CHAROFFSET (IMAX 0 (IDIFFERENCE NDESCENT BDESCENT)) BWIDTH BHEIGHT) [COND (TEMPBITMAP (UNINTERRUPTABLY (* ;; "update the parameters for this character set.") (\FSETWIDTH WIDTHS (\CHAR8CODE CHARCODE) BWIDTH) (* ;  "The new character's correct width") (* ;  "Make sure that we update imagewidths also") (if IMWIDTHS then (\FSETIMAGEWIDTH IMWIDTHS (\CHAR8CODE CHARCODE) BWIDTH)) (\FSETOFFSET OFFSETS (\CHAR8CODE CHARCODE) CHAROFFSET) [COND (DW (for I from 0 to \MAXCHAR do (* ;  "Run thru the offsets of later characters, adjusting them for the changed width of this character") (if (IGREATERP (\FGETOFFSET OFFSETS I) CHAROFFSET) then (\FSETOFFSET OFFSETS I (IPLUS DW (\FGETOFFSET OFFSETS I] (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with TEMPBITMAP ) (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with NDESCENT) (replace (CHARSETINFO CHARSETASCENT) of CSINFO with NASCENT ) (* ;; "update the properties for the font as a whole.") [SETQ NASCENT (IMAX NASCENT (FONTPROP FONTDESC 'ASCENT] [SETQ NDESCENT (IMAX NDESCENT (FONTPROP FONTDESC 'DESCENT] (replace (FONTDESCRIPTOR \SFAscent) of FONTDESC with NASCENT) (replace (FONTDESCRIPTOR \SFDescent) of FONTDESC with NDESCENT) (replace (FONTDESCRIPTOR \SFHeight) of FONTDESC with (IPLUS NDESCENT NASCENT)))] (RETURN NEWCHARBITMAP]) (MOVECHARBITMAP [LAMBDA (SRCECODE SRCEFONT DESTCODE DESTFONT CLIP) (* ; "Edited 14-Dec-86 18:04 by Shih") (* ;;; "moves a character from one font to another, clipping if necessary.") (PROG ((SRCEDESC (\GETFONTDESC SRCEFONT)) (DESTDESC (\GETFONTDESC DESTFONT)) SRCEASCENT SRCEDESCENT DESTASCENT DESTDESCENT CHARBITMAP TEMPBITMAP NEWASCENT NEWDESCENT) (SETQ CHARBITMAP (GETCHARBITMAP SRCECODE SRCEFONT)) (SETQ SRCEASCENT (FONTPROP SRCEDESC 'ASCENT)) (SETQ DESTASCENT (FONTPROP DESTDESC 'ASCENT)) (SETQ SRCEDESCENT (FONTPROP SRCEDESC 'DESCENT)) (SETQ DESTDESCENT (FONTPROP DESTDESC 'DESCENT)) [SETQ NEWASCENT (COND (CLIP DESTASCENT) (T (IMAX SRCEASCENT DESTASCENT] [SETQ NEWDESCENT (COND (CLIP DESTDESCENT) (T (IMAX SRCEDESCENT DESTDESCENT] [COND ((OR (NEQ SRCEASCENT NEWASCENT) (NEQ SRCEDESCENT NEWDESCENT)) (SETQ TEMPBITMAP (BITMAPCREATE (BITMAPWIDTH CHARBITMAP) (IPLUS NEWASCENT NEWDESCENT))) (BITBLT CHARBITMAP 0 (IMAX 0 (IDIFFERENCE SRCEDESCENT NEWDESCENT)) TEMPBITMAP 0 (IMAX 0 (IDIFFERENCE NEWDESCENT SRCEDESCENT)) (BITMAPWIDTH CHARBITMAP) (IMIN (IPLUS SRCEASCENT SRCEDESCENT) (IPLUS NEWASCENT NEWDESCENT] (PUTCHARBITMAP DESTCODE DESTFONT (OR TEMPBITMAP CHARBITMAP) NEWDESCENT]) ) (DEFINEQ (FONTCOPY [LAMBDA FONTSPECS (* ; "Edited 10-Nov-87 17:12 by FS") (* ;  "makes a copy of a font changing the specified fields.") (PROG (NOERROR ERROR FAMILY FACE SIZE ROTATION DEVICE OLDFONT) (* ;; "Set NOERROR if we find it as a prop, but set ERROR if we find a PROP which is illegal. Then just return NIL if NOERROR and ERROR, otherwise, call FONTCREATE.") [SETQ OLDFONT (\GETFONTDESC (ARG FONTSPECS 1) (AND (type? FONTCLASS (ARG FONTSPECS 1)) (COND ((AND (EQ FONTSPECS 2) (LISTP (ARG FONTSPECS 2))) (LISTGET (ARG FONTSPECS 2) 'DEVICE)) (T (for I from 2 by 2 to FONTSPECS do (COND ((AND (NEQ I FONTSPECS) (EQ (ARG FONTSPECS I) 'DEVICE)) (RETURN (ARG FONTSPECS (ADD1 I] (SETQ FAMILY (fetch (FONTDESCRIPTOR FONTFAMILY) of OLDFONT)) (SETQ SIZE (fetch (FONTDESCRIPTOR FONTSIZE) of OLDFONT)) (SETQ FACE (fetch (FONTDESCRIPTOR FONTFACE) of OLDFONT)) (SETQ ROTATION (fetch (FONTDESCRIPTOR ROTATION) of OLDFONT)) (SETQ DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of OLDFONT)) [for I VAL from 2 by 2 to FONTSPECS do [SETQ VAL (COND ((NOT (EQ I FONTSPECS)) (ARG FONTSPECS (ADD1 I] (SELECTQ (ARG FONTSPECS I) (FAMILY (SETQ FAMILY VAL)) (SIZE (SETQ SIZE VAL)) (FACE (SETQ FACE (\FONTFACE VAL))) (WEIGHT (SETQ FACE (create FONTFACE using FACE WEIGHT _ VAL))) (SLOPE (SETQ FACE (create FONTFACE using FACE SLOPE _ VAL))) (EXPANSION (SETQ FACE (create FONTFACE using FACE EXPANSION _ VAL))) (BACKCOLOR (SETQ FACE (create FONTFACE using FACE BACKCOLOR _ VAL))) (FORECOLOR (SETQ FACE (create FONTFACE using FACE FORECOLOR _ VAL))) (ROTATION (SETQ ROTATION VAL)) (DEVICE (SETQ DEVICE VAL)) (NOERROR (SETQ NOERROR VAL)) (COND [(AND (EQ I 2) (EQ FONTSPECS 2) (LISTP (ARG FONTSPECS 2))) (for J on (ARG FONTSPECS 2) by (CDDR J) do (SETQ VAL (CADR J)) (SELECTQ (CAR J) (FAMILY (SETQ FAMILY VAL)) (SIZE (SETQ SIZE VAL)) (FACE (SETQ FACE (\FONTFACE VAL))) (WEIGHT (SETQ FACE (create FONTFACE using FACE WEIGHT _ VAL))) (SLOPE (SETQ FACE (create FONTFACE using FACE SLOPE _ VAL))) (EXPANSION (SETQ FACE (create FONTFACE using FACE EXPANSION _ VAL))) (BACKCOLOR (SETQ FACE (create FONTFACE using FACE BACKCOLOR _ VAL))) (FORECOLOR (SETQ FACE (create FONTFACE using FACE FORECOLOR _ VAL))) (ROTATION (SETQ ROTATION VAL)) (DEVICE (SETQ DEVICE VAL)) (NOERROR (SETQ NOERROR VAL)) (COND (NOERROR (* ;;  "Fell through the SELECTQ, so an illegal PROP. But, if NOERROR, just note the error, otherwise ") (SETQ ERROR T)) (T (\ILLEGAL.ARG (CAR J] (T (if NOERROR then (SETQ ERROR T) else (\ILLEGAL.ARG (ARG FONTSPECS I] (RETURN (if (AND NOERROR ERROR) then NIL else (FONTCREATE FAMILY SIZE FACE ROTATION DEVICE NOERROR]) (FONTSAVAILABLE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* rrb " 7-Nov-84 15:41") (* ;;; "returns a list of the fonts fitting a description that are available. FAMILY SIZE FACE or ROTATION can be * which means get them all. if LOADEDONLYFLG is non-NIL, only fonts in core will be considered.") (DECLARE (GLOBALVARS IMAGESTREAMTYPES)) (PROG (FONTX DEV) [SETQ DEV (COND ((type? STREAM DEVICE) (COND ((LISTP (SETQ DEV (IMAGESTREAMTYPE DEVICE))) (CAR DEV)) (T DEV))) (DEVICE) (T 'DISPLAY] (RETURN (COND ((LISTP FAMILY) (COND ((EQ (CAR FAMILY) 'FONT) (SETQ FONTX (CDR FAMILY))) (T (SETQ FONTX FAMILY))) (FONTSAVAILABLE (CAR FONTX) (OR (CADR FONTX) SIZE) (OR (CADDR FONTX) FACE) (OR (CADDDR FONTX) ROTATION) DEV CHECKFILESTOO?)) ([SETQ FONTX (COND ((type? FONTDESCRIPTOR FAMILY) FAMILY) ((NULL FAMILY) (DEFAULTFONT DEV)) ((type? FONTCLASS FAMILY) (* ;; "We know that this won't attempt a cyclic fontcreate in \COERCEFONTDESC, because we are passing a known class. Unless NOERROFLG, an error will be caused on the actual device font if it can't be found.") (* ;  "I don't know what to do in this case- rrb.") (\COERCEFONTDESC FAMILY DEV T)) ((OR (IMAGESTREAMP FAMILY) (type? WINDOW FAMILY)) (DSPFONT NIL FAMILY] (* ;  "FAMILY was a spec for a font descriptor, use it and extend it by the other args.") (FONTSAVAILABLE (FONTPROP FONTX 'FAMILY) (OR SIZE (FONTPROP FONTX 'SIZE)) (OR FACE (FONTPROP FONTX 'FACE)) (OR ROTATION (FONTPROP FONTX 'ROTATION)) (OR DEVICE (FONTPROP FONTX 'DEVICE)) CHECKFILESTOO?)) (T (PROG ((FONTFACE FACE)) RETRY (OR (LITATOM FAMILY) (LISPERROR "ARG NOT LITATOM" FAMILY T)) (OR (AND (FIXP SIZE) (IGREATERP SIZE 0)) (EQ SIZE '*) (\ILLEGAL.ARG SIZE)) [OR (EQ FONTFACE '*) (SETQ FONTFACE (OR (\FONTFACE FACE T) (RETURN NIL] (OR (U-CASEP FAMILY) (SETQ FAMILY (U-CASE FAMILY))) (COND ((NULL ROTATION) (SETQ ROTATION 0)) ((AND (FIXP ROTATION) (IGEQ ROTATION 0))) ((EQ ROTATION '*)) (T (\ILLEGAL.ARG ROTATION))) (RETURN (UNION (\LOOKUPFONTSINCORE FAMILY SIZE FONTFACE ROTATION DEV) (COND ((NOT CHECKFILESTOO?) NIL) [(EQ DEV '*) (* ; "map thru all the devices.") (for EXTANTDEV in IMAGESTREAMTYPES join (APPLY* (OR (CADR (ASSOC 'FONTSAVAILABLE (CDR EXTANTDEV))) (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION (CAR EXTANTDEV] (T (* ;  "apply the device font lookup function.") (APPLY* (OR [CADR (ASSOC 'FONTSAVAILABLE (CDR (ASSOC DEV IMAGESTREAMTYPES ] (FUNCTION NILL)) FAMILY SIZE FONTFACE ROTATION DEV]) (FONTFILEFORMAT [LAMBDA (STRM LEAVEOPEN) (* rmk%: "11-Sep-84 17:16") (* ; "Returns the font format of STRM") [OR (OPENP STRM 'INPUT) (SETQ STRM (OPENSTREAM STRM 'INPUT 'OLD] (PROG1 (SELECTC (\WIN STRM) ((LIST (LLSH 1 15) (LOGOR (LLSH 1 15) (LLSH 1 13))) (* ;; "If high bit of type is on, then must be strike. If 2nd bit is on, must be strike-index, and we punt. We don't care about the 3rd bit") (* ;; "first word has high bits (onebit index fixed). Onebit means 'new-style font' , index is 0 for simple strike, 1 for index, and fixed is if all chars have max width. Lisp doesn't care about 'fixed'") 'STRIKE) ((LOGOR (LLSH 16 8) 12) (* ;; "This is the length of a standard index header. Other files could also have this value, but it's a pretty good discriminator") (* ;; "Skip to byte 25; do it with BINS so works for non-randaccessp devices. This skips the standard name header, then look for type 3 in the following header") (FRPTQ 22 (\BIN STRM)) (* ; "(SETFILEPTR STRM 25)") (AND (EQ 3 (LRSH (\BIN STRM) 4)) 'AC)) NIL) (OR LEAVEOPEN (CLOSEF STRM)))]) (FONTP [LAMBDA (X) (* rmk%: "13-Sep-84 09:04") (* ; "is X a FONTDESCRIPTOR?") (COND ((OR (type? FONTDESCRIPTOR X) (type? FONTCLASS X)) X]) (FONTUNPARSE [LAMBDA (FONT) (* kbr%: "25-Feb-86 19:40") (* ;; "Produces a minimal specification of the font or fontclass specification, for dumping by Tedit, imageobjects.") (PROG (FACE SPEC) (SETQ SPEC (COND ((type? FONTDESCRIPTOR FONT) (FONTPROP FONT 'SPEC)) [(type? FONTCLASS FONT) (RETURN (CONS 'CLASS (FONTCLASSUNPARSE FONT] (T (* ;; "Could be a non-instantiated specification in a fontclass, just use it as the spec without creating the font.") FONT))) (OR SPEC (RETURN)) (SETQ FACE (CADDR SPEC)) (* ;  "FACE and rotation can be NIL for a non-fontdescriptor fontclass component") [SETQ FACE (COND ([OR (NULL FACE) (EQUAL FACE '(MEDIUM REGULAR REGULAR] NIL) ((LITATOM FACE) FACE) [(LISTP FACE) (PACK (LIST* (NTHCHAR (fetch (FONTFACE WEIGHT) of FACE) 1) (NTHCHAR (fetch (FONTFACE SLOPE) of FACE) 1) (NTHCHAR (fetch (FONTFACE EXPANSION) of FACE) 1) (COND ((fetch (FONTFACE COLOR) of FACE) (LIST "-" (fetch (FONTFACE BACKCOLOR) of FACE) "-" (fetch (FONTFACE FORECOLOR) of FACE] (T (SHOULDNT] (* ;  "Don't return device, or any trailing defaults") (RETURN (CONS (CAR SPEC) (CONS (CADR SPEC) (COND ([AND (CADDDR SPEC) (NOT (EQ 0 (CADDDR SPEC] (LIST (OR FACE 'MRR) (CADDDR SPEC))) (FACE (CONS FACE]) (SETFONTDESCRIPTOR [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE FONT) (* ; "Edited 1-Aug-88 16:16 by rmk:") (* ; "Edited 5-Mar-87 19:28 by FS") (* ;; "saves a font descriptor under a family/size/face/rotation/device key so that it will be retreived by FONTCREATE. This is a user entry.") (DECLARE (GLOBALVARS \FONTSINCORE)) (SETQ DEVICE (\DEVICESYMBOL DEVICE)) (* ; "Unpackageify") (AND FONT (SETQ FONT (\COERCEFONTDESC FONT DEVICE))) (* ;  "NIL is used to clobber existing font so that next use will reread it.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (* ; "Unpackageify") (SETQ FACE (\FONTFACE FACE NIL DEVICE)) (OR ROTATION (SETQ ROTATION 0)) (OR (AND (FIXP SIZE) (IGEQ SIZE 0)) (\ILLEGAL.ARG SIZE)) (PROG [(X (OR (FASSOC FAMILY \FONTSINCORE) (CAR (push \FONTSINCORE (LIST FAMILY] [SETQ X (OR (FASSOC SIZE (CDR X)) (CAR (push (CDR X) (LIST SIZE] [SETQ X (OR (SASSOC FACE (CDR X)) (CAR (push (CDR X) (LIST FACE] (* ; "SASSOC cause FACE is listp") [SETQ X (OR (FASSOC ROTATION (CDR X)) (CAR (push (CDR X) (LIST ROTATION] [SETQ X (OR (FASSOC DEVICE (CDR X)) (CAR (push (CDR X) (LIST DEVICE] (RPLACD X FONT) (RETURN FONT]) (CHARCODEP [LAMBDA (CHCODE) (* gbn "22-Jul-85 16:35") (* ;  "is CHCODE a legal character code?") (AND (SMALLP CHCODE) (IGEQ CHCODE 0) (ILEQ CHCODE \MAXNSCHAR]) (EDITCHAR [LAMBDA (CHARCODE FONT) (* rrb "24-MAR-82 12:22") (* ;  "calls the bitmap editor on a character of a font") (PROG ((FONTDESC (\GETFONTDESC FONT))) (RETURN (PUTCHARBITMAP CHARCODE FONTDESC (EDITBM (GETCHARBITMAP CHARCODE FONTDESC]) (\STREAMCHARWIDTH [LAMBDA (CHARCODE STREAM TTBL) (* JonL " 8-NOV-83 03:31") (* ;; "Returns the width that the printed representation of CHARCODE would occupy if printed on STREAM, allowing for the various escape sequences. Used by \ECHOCHAR") (SETQ CHARCODE (LOGAND CHARCODE \CHARMASK)) ((LAMBDA (WIDTHSVECTOR) (* ;; "Note in following that if the DDWIDTHSCACHE exists and has a 0 entry for some character, that may someday mean that the character's glyph simply isn't loaded; e.g., it may want #^A") (SETQ WIDTHSVECTOR (OR (AND (DISPLAYSTREAMP STREAM) (SETQ WIDTHSVECTOR (ffetch IMAGEDATA of STREAM)) (ffetch DDWIDTHSCACHE of WIDTHSVECTOR)) \UNITWIDTHSVECTOR)) (SELECTC (fetch CCECHO of (\SYNCODE (fetch (TERMTABLEP TERMSA) of (OR (TERMTABLEP TTBL) \PRIMTERMTABLE)) CHARCODE)) (INDICATE.CCE ([LAMBDA (CC) (IPLUS (if (IGEQ CHARCODE (CHARCODE %#^@)) then (* ;  "A META charcode -- implies that the 8th bit is non-zero") (SETQ CC (LOADBYTE CHARCODE 0 7)) (\FGETWIDTH WIDTHSVECTOR (CHARCODE %#)) else 0) (if (ILESSP CC (CHARCODE SPACE)) then (* ; "A CONTROL charcode") (add CC (CONSTANT (LLSH 1 6))) (\FGETWIDTH WIDTHSVECTOR (CHARCODE ^)) else 0) (\FGETWIDTH WIDTHSVECTOR CC] CHARCODE)) (SIMULATE.CCE (SELCHARQ CHARCODE ((EOL CR LF BELL) NIL) (ESCAPE (\FGETWIDTH WIDTHSVECTOR (CHARCODE $))) (TAB (PROG ((SPACEWIDTH (\FGETWIDTH WIDTHSVECTOR (CHARCODE SPACE))) (NEWXPOSITON (DSPXPOSITION NIL STREAM)) TABWIDTH) (SETQ TABWIDTH (UNFOLD SPACEWIDTH 8)) [add NEWXPOSITON (SETQ TABWIDTH (IDIFFERENCE TABWIDTH (IMOD (IDIFFERENCE NEWXPOSITON (DSPLEFTMARGIN NIL STREAM)) TABWIDTH] (RETURN (if (IGREATERP NEWXPOSITON (DSPRIGHTMARGIN NIL STREAM)) then (* ;  "tab was past rightmargin, force cr.") NIL else TABWIDTH)))) (\FGETWIDTH WIDTHSVECTOR CHARCODE))) (REAL.CCE (SELECTC CHARCODE ((CHARCODE (EOL CR LF)) NIL) (ERASECHARCODE NIL) (\FGETWIDTH WIDTHSVECTOR CHARCODE))) (IGNORE.CCE 0) (SHOULDNT]) (\UNITWIDTHSVECTOR [LAMBDA NIL (* JonL " 7-NOV-83 19:23") (SETQ \UNITWIDTHSVECTOR (\ALLOCBLOCK (UNFOLD (IPLUS \MAXCHAR 3) WORDSPERCELL))) (for I from 0 to (IPLUS \MAXCHAR 2) do (\PUTBASE \UNITWIDTHSVECTOR I 1)) \UNITWIDTHSVECTOR]) (\CREATEDISPLAYFONT [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* gbn%: "25-Jan-86 18:02") (PROG [(FONTDESC (create FONTDESCRIPTOR FONTDEVICE _ DEVICE FONTFAMILY _ FAMILY FONTSIZE _ SIZE FONTFACE _ FACE \SFAscent _ 0 \SFDescent _ 0 \SFHeight _ 0 ROTATION _ ROTATION FONTDEVICESPEC _ (LIST FAMILY SIZE FACE ROTATION DEVICE] (RETURN (COND ((\GETCHARSETINFO CHARSET FONTDESC T) FONTDESC) (T NIL]) (\CREATECHARSET.DISPLAY [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG?) (* ; "Edited 14-Jan-88 23:42 by FS") (* ;; "Color Stuff removed -FS.") (* ;; "Replace Cond below with") (* ;; "(PROG (XCSINFO)") (* ;; "(SETQ XCSINFO &)") (* ;; "(COND ((FMEMB DEVICE \\COLORDISPLAYSTREAMTYPES) (SETQ XCSINFO (\\SFMAKECOLOR XCSINFO (OR (|fetch| (FONTFACE BACKCOLOR) |of| FACE) 0) (OR (|fetch| (FONTFACE FORECOLOR) |of| FACE) (MAXIMUMCOLOR (\\DISPLAYSTREAMTYPEBPP DEVICE))) (\\DISPLAYSTREAMTYPEBPP DEVICE)))))") (* ;; "(RETURN XCSINFO)))") (* ;;; "tries to build the csinfo required for CHARSET. Does the necessary coercions.") (* ;;; "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") (DECLARE (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS)) (* ;; "DISPLAYFONTCOERCIONS is a list of font coercions, in the form ((user-font real-font) (user-font real-font) ...). Each user-font is a list of FAMILY, and optionally SIZE and CHARSET, (e.g., (GACHA) or (GACHA 10) or (GACHA 10 143)), and each real-font is a similar list.") (COND ((PROG1 (for TRANSL in DISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATECHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO)) (* ;  "Just recursively call ourselves to handle entries in DISPLAYFONTCOERCIONS") )) (T (* ;; "One weirdness is, if you have a coercion, and the real-font is missing, you can't get a missingfont coercion on the user-font because the real-font missingfont coercion shadows it out.") (\CREATE-REAL-CHARSET.DISPLAY FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG? ]) (\CREATE-REAL-CHARSET.DISPLAY [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG?) (* ; "Edited 15-Jan-88 00:02 by FS") (COND [(AND (EQ ROTATION 0) (PROG1 (\READDISPLAYFONTFILE FAMILY SIZE FACE ROTATION 'DISPLAY CHARSET) (* ;  "If it is available, this will force the appropriate file to be read to fill in the charset entry") ] (T (* ;; "if we get here, the font is not directly available, either it needs to be rotated, boldified, or italicised 'by hand'. Past that point, we do not allow DISPLAYFONTCOERCIONS, only MISSINGxxxxDISPLAYFONTCOERCIONS.") (PROG (NEWFONT XFONT XLATEDFAM CSINFO) (RETURN (COND [(NEQ ROTATION 0) (* ;; "to make a rotated font (even if it is bold or whatnot), recursively call fontcreate to get the unrotated font (maybe bold, etc), then call \SFMAKEROTATEDFONT on the csinfo. If its still missing, then search for missing display font coercions (e.g. no avail. charset, *but*, do not recurse (avoid getting into infinite loops). This allows partial permutations of fonts.") (OR (MEMB ROTATION '(90 270)) (ERROR "only implemented rotations are 0, 90 and 270." ROTATION)) (COND ((SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE FACE 0 'DISPLAY CHARSET)) (* ;; "Do not call FONTCREATE here. The user might have modified (via PUTCHARBITMAP, etc.) the in-memory version of the source. This also fixes a bug in which several font descriptors ended up sharing bitmaps or charsetvectors, causing havoc when the user modifies either fontdescriptor.") (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFROTATECSINFO CSINFO ROTATION) else NIL] ((AND (EQ (fetch WEIGHT of FACE) 'BOLD) (SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE (create FONTFACE using FACE WEIGHT _ 'MEDIUM) 0 'DISPLAY CHARSET))) (* ;; "if we want a bold font, and the medium weight font is available, build the medium weight version then call \SFMAKEBOLD on the csinfo") (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFMAKEBOLD CSINFO) else NIL)) ((AND (EQ (fetch (FONTFACE SLOPE) of FACE) 'ITALIC) (SETQ XFONT (\CREATEDISPLAYFONT FAMILY SIZE (create FONTFACE using FACE SLOPE _ 'REGULAR) 0 'DISPLAY CHARSET))) (if (SETQ CSINFO (\GETCHARSETINFO CHARSET XFONT T)) then (\SFMAKEITALIC CSINFO) else NIL)) [(AND CHARSET (NOT (EQL 0)) (for TRANSL in MISSINGCHARSETDISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATE-REAL-CHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO] ((for TRANSL in MISSINGDISPLAYFONTCOERCIONS bind NEWCSINFO UFONT REALFONT when (AND (SETQ UFONT (CAR TRANSL)) (EQ FAMILY (CAR UFONT)) (OR (NOT (CADR UFONT)) (EQ SIZE (CADR UFONT))) (OR (NOT (CADDR UFONT)) (EQ CHARSET (CADDR UFONT))) (SETQ REALFONT (CADR TRANSL)) (SETQ NEWCSINFO (\CREATE-REAL-CHARSET.DISPLAY (OR (CAR REALFONT) FAMILY) (OR (CADR REALFONT) SIZE) FACE ROTATION DEVICE (OR (CADDR REALFONT) CHARSET) FONTDESC NOSLUG?))) do (RETURN NEWCSINFO))) ((NOT NOSLUG?) (\BUILDSLUGCSINFO (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONTDESC) (FONTPROP FONTDESC 'ASCENT) (FONTPROP FONTDESC 'DESCENT) (FONTPROP FONTDESC 'DEVICE]) (\BUILDSLUGCSINFO [LAMBDA (WIDTH ASCENT DESCENT DEVICE SCALE) (* ; "Edited 9-May-93 23:12 by rmk:") (* ;;; "builds a csinfo which contains only the slug (black rectangle) character. Called only for display.") (SETQ SCALE (OR SCALE 1)) (PROG ((CSINFO (create CHARSETINFO CHARSETASCENT _ ASCENT CHARSETDESCENT _ DESCENT)) WIDTHS OFFSETS BITMAP IMAGEWIDTHS) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I WIDTH)) (REPLACE IMAGEWIDTHS OF CSINFO WITH WIDTHS) (replace (CHARSETINFO OFFSETS) of CSINFO with (SETQ OFFSETS ( \CREATECSINFOELEMENT ))) (for I from 0 to \MAXTHINCHAR do (\FSETOFFSET OFFSETS I 0)) [replace (CHARSETINFO CHARSETBITMAP) of CSINFO with (SETQ BITMAP (BITMAPCREATE (ROUND (QUOTIENT WIDTH SCALE)) (ROUND (QUOTIENT (IPLUS ASCENT DESCENT) SCALE] [BLTSHADE BLACKSHADE BITMAP 1 NIL (SUB1 (ROUND (QUOTIENT WIDTH SCALE] (RETURN CSINFO]) (\SEARCHDISPLAYFONTFILES [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 5-Mar-87 18:55 by FS") (* ;; " This function called via APPLY in IMAGESTREAMTYPES.") (* ;; " Returns a list of the fonts that can be read in for displaylike devices. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") (* ;; " Note we *allow* a device that is not 'DISPLAY for guys like 4DISPLAY, 8DISPLAY, 24DISPLAY, and also possibly for FX80, etc. (guys that want DISPLAYFONTS anyway). Should have some hook though for FONTEXTENSIONS, FONTDIRECTORIES??") (DECLARE (GLOBALVARS DISPLAYFONTEXTENSIONS DISPLAYFONTDIRECTORIES)) (SELECTQ (SYSTEMTYPE) (D (\SEARCHFONTFILES FAMILY SIZE FACE ROTATION DEVICE DISPLAYFONTDIRECTORIES DISPLAYFONTEXTENSIONS)) (J (* OLD J code from \READDISPLAYFONT  (PROG ((FONTFILE (\FONTFILENAME  FAMILY SIZE FACE)) FONTDESC STRM)  (COND ((SETQ STRM (AND  FONTDIRECTORIES (FINDFILE FONTFILE T  FONTDIRECTORIES)))  (SETQ STRM (OPENSTREAM FONTFILE  (QUOTE INPUT))) (SETQ FONTDESC  (\READJERICHOFONTFILE FAMILY SIZE  FACE STRM)) (CLOSEF STRM)))  (RETURN FONTDESC))) NIL) (SHOULDNT]) (\SEARCHFONTFILES [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE DIRLST EXTLST) (* ; "Edited 14-Sep-96 10:54 by rmk:") (* ; "Edited 6-Oct-89 12:34 by bvm") (* ;; "GENERIC FUNCTION") (* ;; "returns a list of the fonts that can be read in for a device. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") (SETQ FAMILY (\FONTSYMBOL FAMILY)) (SETQ DEVICE (\FONTSYMBOL DEVICE)) (SETQ FACE (\FONTFACE FACE)) (BIND (FILING.ENUEMRATION.DEPTH _ 1) FONTSFOUND THISFONT THISFACE FOR E INSIDE EXTLST DO [FOR DIR INSIDE DIRLST BIND (FILEPATTERN _ (IF (FMEMB E *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE E) ELSE (\FONTFILENAME FAMILY SIZE FACE E))) DO (* ;; "Hack above to handle both old and new font file names. The variable *OLD-FONT-EXTENSIONS* can be set to suppress using the old-style lookup. If set to a list of extensions, just those will be looked up with old-style conventions") (FOR FONTFILE IN (DIRECTORY (PACKFILENAME.STRING 'DIRECTORY DIR 'BODY FILEPATTERN)) WHEN [PROGN (SETQ THISFONT (\FONTINFOFROMFILENAME FONTFILE DEVICE)) (SETQ THISFACE (CADDR THISFONT)) (* ;;  "make sure the face, size, and family really match.") (AND (NOT (MEMBER THISFONT FONTSFOUND)) (OR (EQ FAMILY '*) (EQ FAMILY (CAR THISFONT))) (OR (EQ SIZE '*) (EQ SIZE (CADR THISFONT))) (OR (EQ FACE '*) (EQUAL FACE THISFACE) (AND (OR (EQ (CAR FACE) '*) (EQ (CAR FACE) (CAR THISFACE))) (OR (EQ (CADR FACE) '*) (EQ (CADR FACE) (CADR THISFACE))) (OR (EQ (CADDR FACE) '*) (EQ (CADDR FACE) (CADDR THISFACE] DO (SETQ FONTSFOUND (CONS THISFONT FONTSFOUND] FINALLY (RETURN FONTSFOUND]) (\FINDFONTFILE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET DIRLST EXTLST) (* ; "Edited 14-Sep-96 10:53 by rmk:") (* ; "Edited 6-Oct-89 11:18 by bvm") (* ;; "Find any font file on any directory with any naming convention with any extension. Note that ROTATION and DEVICE are just place holders. DEVICE is irrelevant because DIRLST already incorporates the device information. The variable *OLD-FONT-EXTENSIONS* can be set to suppress using the old-style lookup. If set to a list of extensions, just those will be looked up with old-style conventions.") (BIND FONTFILE FOR EXT INSIDE EXTLST WHEN (SETQ FONTFILE (FINDFILE (IF (FMEMB EXT *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE EXT CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE EXT CHARSET)) T DIRLST)) DO (RETURN FONTFILE]) (\FONTSYMBOL [LAMBDA (X ElseReturnXFlg) (* ; "Edited 28-Jul-88 11:59 by rmk:") (* ; "Edited 24-Mar-87 14:32 by FS") (* ;; "Return a symbol in IL package and is in uppercase. Currently the function IL:U-CASE is believed to do this, but if it changes, this is the font hook. ElseReturnXFlg is if you want an IL symbol if X is a symbol or string, otherwise just X.") (COND ((LITATOM X) (U-CASE X)) ((STRINGP X) (MKATOM (U-CASE X))) (ElseReturnXFlg X) (T (ERROR "Want an IL symbol"]) (\DEVICESYMBOL [LAMBDA (X ElseReturnXFlg) (* ; "Edited 7-Oct-88 20:07 by rmk:") (* ; "Edited 28-Jul-88 14:43 by rmk:") (* ; "Edited 24-Mar-87 14:33 by FS") (* ;; "Return a canonicalized atom good for comparing with DEVICE symbols") (LET ((STRM (\GETSTREAM X 'OUTPUT T))) (COND (STRM (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of STRM))) ((NULL X) 'DISPLAY) (T (* ; "because its used in ASSOC.") (\FONTSYMBOL X ElseReturnXFlg]) (\FONTFACE [LAMBDA (FACE NOERRORFLG DEV) (* ; "Edited 1-Aug-88 09:44 by rmk:") (* ; "Edited 28-Jul-88 15:50 by rmk:") (* ; "Edited 28-Jul-88 15:49 by rmk:") (* ; "Edited 28-Jul-88 15:41 by rmk:") (* ; "Edited 28-Jul-88 15:38 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 25-Feb-87 22:58 by FS") (* ;; "Coerces FACE into standard FONTFACE record, usually returns a CONSTANT (so you'd better not RPLACD or REPLACE fields!!)") (PROG (UNKNOWN (WEIGHT 'MEDIUM) (SLOPE 'REGULAR) (EXPANSION 'REGULAR) (OLDFACE FACE)) (* ;; "On error, can signal, or return NIL, or return REGULAR face.") [SETQ UNKNOWN (COND ((EQ NOERRORFLG 'REGULAR) 'REGULAR) (T 'ERROR] [COND ((type? FONTFACE FACE) (* ;; "List Case. Unpack because want to validate fields") (SETQ WEIGHT (fetch (FONTFACE WEIGHT) of FACE)) (SETQ SLOPE (fetch (FONTFACE SLOPE) of FACE)) (SETQ EXPANSION (fetch (FONTFACE EXPANSION) of FACE)) (* ;; "Handle unknown faces") [OR (\FONT.SYMBOLMEMB WEIGHT ' (* BOLD MEDIUM LIGHT)) (SETQ WEIGHT (COND ((\FONT.COMPARESYMBOL WEIGHT 'REGULAR) (* ;; "Clean up WEIGHT REGULAR vs. MEDIUM") (SETQ WEIGHT 'MEDIUM)) (T UNKNOWN] (OR (\FONT.SYMBOLMEMB SLOPE ' (* REGULAR ITALIC)) (SETQ SLOPE UNKNOWN)) (OR (\FONT.SYMBOLMEMB EXPANSION ' (* COMPRESSED REGULAR EXPANDED)) (SETQ EXPANSION UNKNOWN))) ((OR (LITATOM FACE) (STRINGP FACE)) (COND ((NULL FACE) (* ; "Fast vanilla default") ) ((EQ (NCHARS FACE) 3) (* ; "3 char notation case") (SETQ WEIGHT (SELCHARQ (CHCON1 FACE) ((B b) 'BOLD) ((M m R r) 'MEDIUM) ((L l) 'LIGHT) UNKNOWN)) (SETQ SLOPE (SELCHARQ (NTHCHARCODE FACE 2) ((R r) 'REGULAR) ((I i) 'ITALIC) UNKNOWN)) (SETQ EXPANSION (SELCHARQ (NTHCHARCODE FACE 3) ((R r) 'REGULAR) ((C c) 'COMPRESSED) ((E e) 'EXPANDED) UNKNOWN))) ((SELECTQ FACE (BOLD (SETQ WEIGHT 'BOLD)) (ITALIC (SETQ SLOPE 'ITALIC)) (BOLDITALIC (SETQ WEIGHT 'BOLD) (SETQ SLOPE 'ITALIC)) ((STANDARD REGULAR) T) NIL)) ((\FONT.COMPARESYMBOL FACE 'BOLD) (SETQ WEIGHT 'BOLD)) ((\FONT.COMPARESYMBOL FACE 'ITALIC) (SETQ SLOPE 'ITALIC)) ((\FONT.COMPARESYMBOL FACE 'BOLDITALIC) (SETQ WEIGHT 'BOLD) (SETQ SLOPE 'ITALIC)) ((\FONT.SYMBOLMEMB FACE '(STANDARD REGULAR NIL NNN)) (* ; "Vanilla case") ) ((STRPOS "-" FACE) (* ; "Color fontface spec!") (SETQ FACE (\FONTFACE.COLOR FACE NOERRORFLG DEV)) (RETURN FACE)) ((\FONT.SYMBOLMEMB FACE ' (* ***)) (* ; "Wildcard case") (SETQ WEIGHT '*) (SETQ SLOPE '*) (SETQ EXPANSION '*)) (T (* ; "Other litatom error case") (SETQ WEIGHT UNKNOWN) (SETQ SLOPE UNKNOWN) (SETQ EXPANSION UNKNOWN] (if (OR (EQ WEIGHT 'ERROR) (EQ SLOPE 'ERROR) (EQ EXPANSION 'ERROR)) then (if NOERRORFLG then (RETURN NIL) else (\ILLEGAL.ARG OLDFACE))) (* ;; "Avoid consing by returning constant faces (historical: really, would have been better to return MRR, but users have know about this for too long (rmk))") (RETURN (COND ((AND (EQ WEIGHT 'MEDIUM) (EQ SLOPE 'REGULAR) (EQ EXPANSION 'REGULAR)) (* ; "MRR") (CONSTANT (create FONTFACE))) [(AND (EQ WEIGHT 'BOLD) (EQ SLOPE 'REGULAR) (EQ EXPANSION 'REGULAR)) (* ; "BRR") (CONSTANT (create FONTFACE WEIGHT _ 'BOLD] [(AND (EQ WEIGHT 'MEDIUM) (EQ SLOPE 'ITALIC) (EQ EXPANSION 'REGULAR)) (* ; "MIR") (CONSTANT (create FONTFACE SLOPE _ 'ITALIC] [(AND (EQ WEIGHT 'BOLD) (EQ SLOPE 'ITALIC) (EQ EXPANSION 'REGULAR)) (* ; "BIR") (CONSTANT (create FONTFACE WEIGHT _ 'BOLD SLOPE _ 'ITALIC] (T (* ; "Otherwise, cons up") (create FONTFACE WEIGHT _ WEIGHT SLOPE _ SLOPE EXPANSION _ EXPANSION]) (\FONTFACE.COLOR [LAMBDA (FACE NOERRORFLG DEV) (* ; "Edited 28-Jul-88 14:51 by rmk:") (* ; "Edited 28-Jul-88 13:09 by rmk:") (* ; "Edited 24-Mar-87 17:03 by FS") (* ;; "This used to be \FONTFACE. Renamed \FONTFACE.COLOR, and \FONTFACE rewritten. The section below should also be redone") (* ;; "Takes a variety of user specifications and converts them to a standard FONTFACE record.") (* ;; "b/w fontfaces are extended by an optional '-backcolor-forecolor'") (* ;; "the atom NNN is interpreted the same as NIL or MRR to cover up a bug described in AR 3025, the FONTNNN bug") (DECLARE (GLOBALVARS \COLORDISPLAYSTREAMTYPES)) (SETQ DEV (\DEVICESYMBOL DEV)) (PROG (BWFACE POS OLDPOS BITSPERPIXEL BACKCOLOR FORECOLOR ANSWER) (* ;; "First get a FONTFACE ANSWER.") [SETQ ANSWER (COND ((type? FONTFACE FACE) FACE) ((LITATOM FACE) (OR (U-CASEP FACE) (SETQ FACE (U-CASE FACE))) (SETQ POS (STRPOS "-" FACE)) (COND [POS (SETQ BWFACE (SUBATOM FACE 1 (SUB1 POS] (T (SETQ BWFACE FACE))) [SETQ ANSWER (SELECTQ BWFACE ((* ***) (CONSTANT (create FONTFACE WEIGHT _ '* SLOPE _ '* EXPANSION _ '*))) ((NIL MRR STANDARD NNN) (CONSTANT (create FONTFACE))) ((ITALIC MIR) (CONSTANT (create FONTFACE SLOPE _ 'ITALIC))) ((BOLD BRR) (CONSTANT (create FONTFACE WEIGHT _ 'BOLD))) ((BOLDITALIC BIR) (CONSTANT (create FONTFACE WEIGHT _ 'BOLD SLOPE _ 'ITALIC))) (create FONTFACE WEIGHT _ (SELCHARQ (NTHCHARCODE FACE 1) (M 'MEDIUM) (B 'BOLD) (L 'LIGHT) (GO ERROR)) SLOPE _ (SELCHARQ (NTHCHARCODE FACE 2) (R 'REGULAR) (I 'ITALIC) (GO ERROR)) EXPANSION _ (SELCHARQ (NTHCHARCODE FACE 3) (R 'REGULAR) (C 'COMPRESSED) (E 'EXPANDED) (GO ERROR] (COND (POS (* ; "Color FONTFACE. *") (SETQ OLDPOS POS) (SETQ POS (STRPOS "-" FACE (ADD1 OLDPOS))) (COND ((NULL POS) (GO ERROR))) (SETQ BITSPERPIXEL (\DISPLAYSTREAMTYPEBPP DEV)) (SETQ BACKCOLOR (COLORNUMBERP (SUBATOM FACE (ADD1 OLDPOS) (SUB1 POS)) BITSPERPIXEL)) (SETQ OLDPOS POS) (SETQ FORECOLOR (COLORNUMBERP (SUBATOM FACE (ADD1 OLDPOS) -1) BITSPERPIXEL)) (* ;  "COPY ANSWER to avoid smashing constants.") (SETQ ANSWER (COPY ANSWER)) (replace (FONTFACE BACKCOLOR) of ANSWER with BACKCOLOR ) (replace (FONTFACE FORECOLOR) of ANSWER with FORECOLOR ))) ANSWER) (T (GO ERROR] (* ;; "Coerce on or off COLOR.") (SETQ ANSWER (COND ((AND (NOT (FMEMB DEV \COLORDISPLAYSTREAMTYPES)) (fetch (FONTFACE COLOR) of ANSWER)) (SETQ ANSWER (COPY ANSWER)) (replace (FONTFACE COLOR) of ANSWER with NIL) ANSWER) ((AND (FMEMB DEV \COLORDISPLAYSTREAMTYPES) (NULL (fetch (FONTFACE COLOR) of ANSWER))) (SETQ FACE (COPY FACE)) (replace (FONTFACE BACKCOLOR) of ANSWER with 0) (replace (FONTFACE FORECOLOR) of ANSWER with (MAXIMUMCOLOR ( \DISPLAYSTREAMTYPEBPP DEV))) ANSWER) (T ANSWER))) (RETURN ANSWER) ERROR (COND (NOERRORFLG (RETURN NIL)) (T (\ILLEGAL.ARG FACE]) (\FONTFILENAME [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 5-Mar-93 16:10 by rmk:") (* ;; "Strike file naming convention (w/o dashes, no charset) no longer supported. New name is of the form %"familysize-face-Ccharset.ext%", e.g., MODERN12-MRR-C357.WD") (* ;; "**bvm 10/5/89 Slight change: partition fonts into subdirectories by charset, e.g., all Charset zero fonts are in subdirectory C0>. This significantly speeds up any font operation that requires any local directory work (e.g., NFS servers on both Sun and D machine), and FONTSAVAILABLE on any device (since it doesn't have to wade thru all those charsets). This behavior is conditioned on the value of *USEOLDFONTDIRECTORIES*") (SETQ FACE (\FONTFACE FACE)) (* ; "Validate face") (LET* ([SIZEPATT (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (if (< SIZE 10) then (CONCAT 0 SIZE) else SIZE)) (T (\ILLEGAL.ARG SIZE] (CSETNAME (COND ((OR (NULL CHARSET) (EQ CHARSET 0)) (* ; "Charset defaults to zero.") "0") ((FIXP CHARSET) (LET ((*PRINT-BASE* 8) (*PRINT-RADIX* NIL)) (* ; "Longhand for (cl:write-to-string charset :radix nil :base 8), which is twice as slow, due to lousy keyword handling") (\PRINDATUM.TO.STRING CHARSET))) (T (* ;  "Somebody made the string already?") CHARSET))) [FACESPEC (LIST (CHCON1 (fetch (FONTFACE WEIGHT) of FACE)) (CHCON1 (fetch (FONTFACE SLOPE) of FACE)) (CHCON1 (fetch (FONTFACE EXPANSION) of FACE] (TAIL FACESPEC)) [if (OR (EQ (CAR TAIL) (CHARCODE *)) (EQ (CAR (SETQ TAIL (CDR TAIL))) (CHARCODE *))) then (* ;  "Avoid adjacent wildcards because some devices (notably DSK) get exponentially slower.") (while (EQ (CADR TAIL) (CHARCODE *)) do (RPLACD TAIL (CDDR TAIL] (* ;; "Fortunately, CONCAT ignores packages.") (PACKFILENAME.STRING 'NAME (CONCAT (CL:IF *USEOLDFONTDIRECTORIES* "" (CONCAT (PROGN (* ;  "Lowercase because it's in a directory name, so maybe Unix will find it sooner?") "c") CSETNAME ">")) FAMILY SIZEPATT "-" (CONCATCODES FACESPEC) "-C" CSETNAME) 'EXTENSION EXTENSION]) (\FONTFILENAME.OLD [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 23-Sep-92 18:22 by jds") (* ;; "Returns old style font file names. They were ambiguous because you could not ask for e.g. FACE (MEDIUM * REGULAR) because it maps to FamilySize-*-Charset, which also matches (BOLD * COMPRESSED), etc. Keep this function around though for user's who don't rename their files.") (* ;  "Returns the name of the file that should contain the information for a font.") (SETQ FACE (\FONTFACE FACE)) (* ; "Force legal canonical face") (SETQ FACE (COND ((AND (EQ (CAR FACE) '*) (EQ (CADR FACE) '*)) (* ;; "Avoid adjacent wildcards because DSK gets slower exponentially (can take loooong tiiiiiime). No need to check compression.") '*) (T FACE))) (PACKFILENAME.STRING 'NAME [PROGN (* ;; "DISPLAYFONT AC WD and the default case") (CONCAT (CDR (SASSOC FAMILY *DISPLAY-FONT-NAME-MAP*)) (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (COND ((< SIZE 10) (CONCAT 0 SIZE)) (T SIZE))) (T (\ILLEGAL.ARG SIZE))) [COND ((EQ FACE '*) '*) (T (SELECTQ (fetch WEIGHT of FACE) (BOLD (SELECTQ (fetch SLOPE of FACE) (ITALIC "D") "B")) (SELECTQ (fetch SLOPE of FACE) (ITALIC "I") "R"] (COND ((FIXP CHARSET) (LET ((*PRINT-BASE* 8)) (CL:FORMAT NIL "~O" CHARSET))) (T "000"] 'EXTENSION EXTENSION]) (\FONTFILENAME.NEW [LAMBDA (FAMILY SIZE FACE EXTENSION CHARSET) (* ; "Edited 30-Mar-87 20:00 by FS") (* ;; "Strike file naming convention (w/o dashes, no charset) no longer supported.") (LET (NAME SIZEPATT) (SETQ FACE (\FONTFACE FACE)) (* ; "Validate face") [SETQ SIZEPATT (COND ((EQ SIZE '*) SIZE) ((FIXP SIZE) (if (< SIZE 10) then (CONCAT 0 SIZE) else SIZE)) (T (\ILLEGAL.ARG SIZE] (* ;; "Avoid adjacent wildcards because some devices (notably DSK) get exponentially slower. Nicely, PACK & CONCAT ignore packages.") (PACKFILENAME.STRING 'NAME (CONCAT FAMILY SIZEPATT "-" [COND ((EQUAL FACE ' (* * *) ) '*) (T (CONCAT (NTHCHAR (fetch (FONTFACE WEIGHT) of FACE) 1) (NTHCHAR (fetch (FONTFACE SLOPE) of FACE) 1) (NTHCHAR (fetch (FONTFACE EXPANSION) of FACE) 1] (COND [(FIXP CHARSET) (LET ((*PRINT-BASE* 8)) (CONCAT "-C" (\PRINDATUM.TO.STRING CHARSET] (CHARSET (CONCAT "-C" CHARSET)) (T "-C0"))) 'EXTENSION EXTENSION]) (\FONTINFOFROMFILENAME [LAMBDA (FONTFILE DEVICE) (* ; "Edited 14-Sep-96 10:23 by rmk:") (* ; "Edited 5-Oct-89 18:28 by bvm") (* ;; "returns a list of the family size face rotation device of the font stored in the file name FONTFILE. Rotation is 0 always. Parses both new & old format files.") (LET ((FILENAMELIST (UNPACKFILENAME.STRING FONTFILE)) CH SIZEBEG SIZEND NAME FAMILY SIZE FACE EXT) (SETQ NAME (LISTGET FILENAMELIST 'NAME)) (* ;  "find where the name and size are. MUST check for ch nil below or possible infinite loop") (SETQ SIZEBEG (for CH# from 1 when (OR (NUMBERP (SETQ CH (NTHCHAR NAME CH#))) (NULL CH)) do (RETURN CH#))) (* ;; "Get Family") [SETQ FAMILY (MKATOM (U-CASE (SUBSTRING NAME 1 (SUB1 SIZEBEG] (* ;; "Get Size") [SETQ SIZEND (find CH# from SIZEBEG suchthat (NOT (NUMBERP (NTHCHAR NAME CH#] [SETQ SIZE (MKATOM (SUBSTRING NAME SIZEBEG (SUB1 SIZEND] (if (EQ (NTHCHAR NAME SIZEND) '-) then (SETQ SIZEND (ADD1 SIZEND))) (* ;; "Get Face") (SETQ NAME (U-CASE NAME)) (* ;  "don't need name, but checks for lowercase face") [SETQ FACE (LIST (COND ((STRPOS "B" NAME SIZEND NIL T NIL UPPERCASEARRAY) 'BOLD) ((STRPOS "L" NAME SIZEND NIL T NIL UPPERCASEARRAY) 'LIGHT) (T 'MEDIUM)) (COND ((STRPOS "I" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'ITALIC) (T 'REGULAR)) (COND ((STRPOS "E" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'EXPANDED) ((STRPOS "C-" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) 'COMPRESSED) (T 'REGULAR] (LIST FAMILY SIZE FACE 0 (COND ((STREAMP DEVICE) (IMAGESTREAMTYPE DEVICE)) ((NULL DEVICE) [SETQ EXT (MKATOM (U-CASE (LISTGET FILENAMELIST 'EXTENSION] (SELECTQ EXT (WD 'INTERPRESS) ((STRIKE AC DISPLAYFONT) 'DISPLAY) EXT)) ((LITATOM DEVICE) (\FONTSYMBOL DEVICE)) (T DEVICE]) (\FONTINFOFROMFILENAME.OLD [LAMBDA (FONTFILE DEVICE) (* ; "Edited 1-Jan-87 01:29 by FS") (* ;; "returns a list of the family size face rotation device of the font stored in the file name FONTFILE.") (PROG ((FILENAMELIST (UNPACKFILENAME FONTFILE)) SIZEBEG SIZEND NAME FAMILY SIZE) (SETQ NAME (LISTGET FILENAMELIST 'NAME)) (* ;  "find where the name and size are.") (SETQ SIZEBEG (for CH# from 1 when (NUMBERP (NTHCHAR NAME CH#)) do (RETURN CH#))) [SETQ FAMILY (MKATOM (SUBSTRING NAME 1 (SUB1 SIZEBEG] (SETQ SIZEND (for CH# from SIZEBEG when (NOT (NUMBERP (NTHCHAR NAME CH#))) do (RETURN CH#))) [SETQ SIZE (MKATOM (SUBSTRING NAME SIZEBEG (SUB1 SIZEND] (RETURN (LIST FAMILY SIZE (SELECTQ (LISTGET FILENAMELIST 'EXTENSION) ((DISPLAYFONT AC WD) (LIST (COND ((STRPOS "-B" NAME SIZEND NIL T) 'BOLD) (T 'MEDIUM)) (COND ((STRPOS "-I" NAME SIZEND NIL) 'ITALIC) (T 'REGULAR)) 'REGULAR)) (LIST (COND ((STRPOS "B" NAME SIZEND NIL T) 'BOLD) (T 'MEDIUM)) (COND ((STRPOS "I" NAME SIZEND NIL) 'ITALIC) (T 'REGULAR)) 'REGULAR)) 0 DEVICE]) (\GETFONTDESC [LAMBDA (SPEC DEVICE NOERRORFLG) (* J.Gibbons " 5-Dec-82 16:53") (* ;; "Coerces SPEC to a fontdescriptor") (* ;  "\GETFONTDESC HAS MACRO, BUT OLD CALLS STILL EXIST") (\COERCEFONTDESC SPEC DEVICE NOERRORFLG]) (\COERCEFONTDESC [LAMBDA (SPEC STREAM NOERRORFLG) (* ; "Edited 29-Aug-91 12:19 by jds") (* ;; "Coerces SPEC to a fontdescriptor appropriate for STREAM. Go back thru FONTCREATE for various coercions in order to make sure that the cache gets set up") (DECLARE (GLOBALVARS DEFAULTFONT)) (PROG (FONT DEVICE) [COND ((type? FONTDESCRIPTOR SPEC) (SETQ FONT SPEC)) [(type? FONTCLASS SPEC) [SETQ DEVICE (COND ((NULL STREAM) (* ; "Default is display") (* ;; "COULDN'T THIS BRANCH BE INTENDED TO MEAN 4DISPLAY, 8DISPLAY, 24DISPLAY? PEOPLE PROBABLY SHOULDN'T BE CALLING \COERCEFONTDESC WITH STREAM = NIL.") 'DISPLAY) ((IMAGESTREAMP STREAM) (IMAGESTREAMTYPE STREAM)) ((LITATOM STREAM) (\DEVICESYMBOL STREAM)) (STREAM STREAM) (T (* ;; "I don't think this case should be allowed.") 'DISPLAY] [SETQ FONT (SELECTQ DEVICE (DISPLAY (fetch (FONTCLASS DISPLAYFD) of SPEC)) (INTERPRESS (fetch (FONTCLASS INTERPRESSFD) of SPEC)) (PRESS (fetch (FONTCLASS PRESSFD) of SPEC)) (CDR (SASSOC DEVICE (fetch (FONTCLASS OTHERFDS) of SPEC] (RETURN (COND ((type? FONTDESCRIPTOR FONT) (* ;;  "We don't always create FD's for devices before they are needed, so do it now and save result") FONT) [(NULL FONT) (* ;; "NIL means create FONT but don't cache.") (COND ((AND (FMEMB DEVICE \DISPLAYSTREAMTYPES) (SETQ FONT (\COERCEFONTDESC SPEC 'DISPLAY NOERRORFLG)) (SETQ FONT (FONTCOPY FONT 'DEVICE STREAM 'NOERROR NOERRORFLG)) ) (* ;;  "Coerce existing black & white font to color font, but don't cache.") FONT) [(EQ SPEC DEFAULTFONT) (* ;; "Break cycles with NIL in the defaultfont") (COND (NOERRORFLG NIL) ((EQ DEVICE 'DISPLAY) (* ;; "Function DEFAULTFONT guarantees system integrity") (DEFAULTFONT 'DISPLAY)) ((EQUAL DEVICE '(HARDCOPY DISPLAY)) (* ;;  "MAKE DISPLAY-HARDCOPY FONTS default to the corresponding display font, copied....") (FONTCOPY (DEFAULTFONT 'DISPLAY) 'DEVICE STREAM 'NOERROR NOERRORFLG)) (T (ERROR (CONCAT DEVICE " component for DEFAULTFONT undefined"] (T (FONTCREATE DEFAULTFONT NIL NIL NIL STREAM NOERRORFLG] ((SETQ FONT (FONTCREATE FONT NIL NIL NIL STREAM NOERRORFLG)) (* ;; "Might get NIL if NOERRORFLG") (SETFONTCLASSCOMPONENT SPEC DEVICE FONT] ((NULL SPEC) (RETURN (\COERCEFONTDESC DEFAULTFONT STREAM NOERRORFLG))) ((OR (IMAGESTREAMP SPEC) (type? WINDOW SPEC)) (SETQ FONT (DSPFONT NIL SPEC))) (T (* ;; "If called with NOERRORFLG=T (e.g. from DSPFONT) we want to suppress invalid arg errors as well as font not found, so we can move on to other possible coercions.") (RETURN (FONTCREATE SPEC NIL NIL NIL STREAM NOERRORFLG] (* ;; "Here if arg was a fontdescriptor or imagestream") (RETURN (COND ((NULL STREAM) (* ;;  "NIL device doesn't default to display if a fully-specified font was found") FONT) ([OR (EQ STREAM (fetch (FONTDESCRIPTOR FONTDEVICE) of FONT)) (AND (type? STREAM STREAM) (EQ (fetch (IMAGEOPS IMFONTCREATE) of (fetch (STREAM IMAGEOPS) of STREAM)) (fetch (FONTDESCRIPTOR FONTDEVICE) of FONT] FONT) (T (* ;; "Here if doesn't match or if DEVICE is not explicitly a stream.") (FONTCOPY FONT 'DEVICE STREAM 'NOERROR NOERRORFLG]) (\LOOKUPFONT [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 28-Jul-88 17:05 by rmk:") (* ; "Edited 28-Jul-88 17:04 by rmk:") (* ; "Edited 28-Jul-88 14:44 by rmk:") (* ; "Edited 28-Jul-88 14:02 by rmk:") (* ; "Edited 28-Jul-88 13:54 by rmk:") (* ; "Edited 26-Feb-87 00:20 by FS") (* ;; "looks up a font in the internal cache. SASSOC for listp FACE") (DECLARE (GLOBALVARS \FONTSINCORE)) (* ;; "Someone had better have already made FACE canonical") (LET [(X (CDR (FASSOC ROTATION (CDR (SASSOC FACE (CDR (FASSOC SIZE (CDR (OR (FASSOC FAMILY \FONTSINCORE) (\FONT.SYMBOLASSOC FAMILY \FONTSINCORE] (CDR (OR (FASSOC DEVICE X) (\FONT.SYMBOLASSOC DEVICE X]) (\LOOKUPFONTSINCORE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 25-Apr-93 13:07 by rmk:") (* rrb "25-Sep-84 12:10") (* ;;; "returns a list of the fonts that are available in core. * is used to match anything.") (DECLARE (GLOBALVARS \FONTSINCORE)) (for FAMBUCKET in \FONTSINCORE when (OR (EQ FAMILY '*) (EQ FAMILY (CAR FAMBUCKET))) join (for SIZEBUCKET in (CDR FAMBUCKET) when (OR (EQ SIZE '*) (EQ SIZE (CAR SIZEBUCKET))) join (for FACEBUCKET in (CDR SIZEBUCKET) when (OR (EQ FACE '*) (EQUAL FACE (CAR FACEBUCKET))) join (for ROTBUCKET in (CDR FACEBUCKET) when (OR (EQ ROTATION '*) (EQ ROTATION (CAR ROTBUCKET))) join (for DEVBUCKET in (CDR ROTBUCKET) when (AND (OR (EQ DEVICE '*) (EQ DEVICE (CAR DEVBUCKET))) (TYPE? FONTDESCRIPTOR (CDR DEVBUCKET))) collect (LIST (CAR FAMBUCKET) (CAR SIZEBUCKET) (CAR FACEBUCKET) (CAR ROTBUCKET) (CAR DEVBUCKET]) (\READDISPLAYFONTFILE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 8-Oct-96 10:17 by rmk:") (* ;  "Edited 30-Sep-96 12:03 by kaplan") (* ; "Edited 2-Jan-87 17:55 by FS") (* ;; "Look for new filename convention, then old file name convention, with extensions. If CACHEDISPLAYFONTS, this keeps a cache of what was read, on the canonical filename's property list, so that NSDISPLAYSIZES and SMALLSCREEN size coercions can be done and undone without always going out to the directories.") (DECLARE (GLOBALVARS DISPLAYFONTEXTENSIONS DISPLAYFONTDIRECTORIES CACHEDISPLAYFONTS)) (BIND FONTFILE CSINFO STRM FIRST (* ;; "Cache is indexed by canonical font file name, without the extension fields.") (CL:WHEN [AND CACHEDISPLAYFONTS (FIND EXT INSIDE DISPLAYFONTEXTENSIONS SUCHTHAT (SETQ CSINFO (GETP (L-CASE (FILENAMEFIELD (IF (FMEMB EXT *OLD-FONT-EXTENSIONS* ) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE EXT CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE EXT CHARSET)) 'NAME)) 'CACHEDCHARSET] (RETURN (AND (NEQ CSINFO T) (COPYALL CSINFO)))) FOR EXT INSIDE DISPLAYFONTEXTENSIONS WHEN (SETQ FONTFILE (\FINDFONTFILE FAMILY SIZE FACE ROTATION DEVICE CHARSET DISPLAYFONTDIRECTORIES (LIST EXT))) DO (* ;;  "Cache is indexed by canonical font file name, without the directory or extension fields") (SETQ STRM (OPENSTREAM FONTFILE 'INPUT)) (RESETLST [SETQ CSINFO (SELECTQ (FONTFILEFORMAT STRM T) (STRIKE (RESETSAVE NIL (LIST (FUNCTION CLOSEF) STRM)) (\READSTRIKEFONTFILE STRM FAMILY SIZE FACE)) (AC (* ;; "CLOSEF is guaranteed inside \READACFONTFILE, against the possibility that we have to copy to make randaccessp") (\READACFONTFILE STRM FAMILY SIZE FACE)) (PROG1 (CLOSEF STRM) (* ; "This would get done by RESETSAVE if AC's were read sequentially and we could factor the RESETSAVE") (SHOULDNT))]) (CL:WHEN CACHEDISPLAYFONTS (PUTPROP (L-CASE (FILENAMEFIELD FONTFILE 'NAME)) 'CACHEDCHARSET CSINFO) (SETQ CSINFO (COPYALL CSINFO))) (* ;; "If not a recognizable format, I guess we should keep looking for another possible extension, altho it would also be nice to tell the user that he has a bogus file.") (RETURN CSINFO) FINALLY (* ;; "Didn't find the file, cache T to suppress future lookups") (CL:WHEN CACHEDISPLAYFONTS (PUTPROP (L-CASE (FILENAMEFIELD (IF (FMEMB (CAR (MKLIST DISPLAYFONTEXTENSIONS)) *OLD-FONT-EXTENSIONS*) THEN (\FONTFILENAME.OLD FAMILY SIZE FACE (CAR (MKLIST DISPLAYFONTEXTENSIONS )) CHARSET) ELSE (\FONTFILENAME FAMILY SIZE FACE (CAR (MKLIST DISPLAYFONTEXTENSIONS )) CHARSET)) 'NAME)) 'CACHEDCHARSET T))]) ) (* ;; "\FINDFONTFILE \FONTFILENAME \SEARCHFONTFILES \FONTINFOFROMFILENAME are redefined to deal with character-set directories. That behavior is conditioned on the setting of the global variable *USEOLDFONTDIRECTORIES*, T at PARC, maybe NIL most other places. " ) (ADDTOVAR *OLD-FONT-EXTENSIONS* STRIKE) (RPAQ? *USEOLDFONTDIRECTORIES* NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS *OLD-FONT-EXTENSIONS* *USEOLDFONTDIRECTORIES*) ) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)" ) (* ;; "Establishes DISPLAYFONTFILECACHE to avoid rereading charsets when size coercions are done (e.g. for nsdisplaysizes or smallscreen)" ) (RPAQ? CACHEDISPLAYFONTS T) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS CACHEDISPLAYFONTS) ) (* ; "STRIKE format file support") (DEFINEQ (\READSTRIKEFONTFILE [LAMBDA (STRM FAMILY SIZE FACE) (* ; "Edited 4-Dec-92 12:11 by jds") (* ;  "STRM has already been determined to be a vanilla strike-format file.") (* ; "returns a charsetinfo") (COND ((NEQ 2 (GETFILEPTR STRM)) (SETFILEPTR STRM 2))) (PROG (CSINFO NUMBCODES RW BITMAP OFFSETS FIRSTCHAR LASTCHAR HEIGHT WIDTHS) (SETQ CSINFO (create CHARSETINFO)) (SETQ FIRSTCHAR (\WIN STRM)) (* ; "minimum ascii code") (SETQ LASTCHAR (\WIN STRM)) (* ; "maximum ascii code") (\WIN STRM) (* ;  "MaxWidth which isn't used by anyone.") (\WIN STRM) (* ;  "number of words in this StrikeBody") (replace (CHARSETINFO CHARSETASCENT) of CSINFO with (\WIN STRM)) (* ;  "ascent in scan lines (=FBBdy+FBBoy)") (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with (\WIN STRM)) (* ; "descent in scan-lines (=FBBoy)") (\WIN STRM) (* ;  "offset in bits (<0 for kerning, else 0, =FBBox)") (SETQ RW (\WIN STRM)) (* ; "raster width of bitmap") (* ; "height of bitmap") (* ;; "JDS 12/4/92: Apparently, these fields can be signed values, if all chars, e.g., ride above the base line.") (SETQ HEIGHT (IPLUS (SIGNED (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) 16) (SIGNED (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO) 16))) (SETQ BITMAP (BITMAPCREATE (UNFOLD RW BITSPERWORD) HEIGHT)) (\BINS STRM (fetch BITMAPBASE of BITMAP) 0 (UNFOLD (ITIMES RW HEIGHT) BYTESPERWORD)) (* ; "read bits into bitmap") (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with BITMAP) (SETQ NUMBCODES (IPLUS (IDIFFERENCE LASTCHAR FIRSTCHAR) 3)) (* (SETQ OFFSETS (ARRAY  (IPLUS \MAXCHAR 3)  (QUOTE SMALLPOSP) 0 0))) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (* ; "initialise the offsets to 0") (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET OFFSETS I 0)) (* (AIN OFFSETS FIRSTCHAR NUMBCODES  STRM)) (for I from FIRSTCHAR as J from 1 to NUMBCODES do (\FSETOFFSET OFFSETS I (\WIN STRM))) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETWIDTH WIDTHS I 0)) (* (replace WIDTHS of  (CHARSETINFO CSINFO) with  (ARRAY (IPLUS \MAXCHAR 3)  (QUOTE SMALLPOSP) 0 0))) (\FONTRESETCHARWIDTHS CSINFO FIRSTCHAR LASTCHAR) (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO WIDTHS) of CSINFO)) (RETURN CSINFO]) (\SFMAKEBOLD [LAMBDA (CSINFO) (* gbn "25-Jul-85 04:52") (PROG* ((OLDCHARBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (HEIGHT (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO))) NEWCHARBITMAP OFFSET UNKNOWNOFFSET UNKNOWNWIDTH) (SETQ NEWCHARBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDCHARBITMAP) (fetch BITMAPHEIGHT of OLDCHARBITMAP))) (SETQ UNKNOWNOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXCHAR))) (SETQ UNKNOWNWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXCHAR))) [for I from 0 to \MAXCHAR do (COND ((EQ (SETQ OFFSET (\FGETOFFSET OFFSETS I)) UNKNOWNOFFSET) (* ;  "if this is the magic charcode with the slug image (charcode 256) then leave it alone") NIL) (T (* ;  "overlap two blts to produce bold effect") (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP OFFSET 0 (\FGETWIDTH WIDTHS I ) HEIGHT 'INPUT 'REPLACE) (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP (ADD1 OFFSET) 0 (SUB1 (\FGETWIDTH WIDTHS I)) HEIGHT 'INPUT 'PAINT] (* ;  "fill in the slug for the magic charcode") (BITBLT OLDCHARBITMAP UNKNOWNOFFSET 0 NEWCHARBITMAP UNKNOWNOFFSET 0 UNKNOWNWIDTH HEIGHT 'INPUT 'REPLACE) (RETURN (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWCHARBITMAP]) (\SFMAKEITALIC [LAMBDA (CSINFO) (* gbn "18-Sep-85 17:57") (PROG ((WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (ASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (DESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (OLDBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) HEIGHT OFFSET NEWBITMAP WIDTH UNKNOWNOFFSET UNKNOWNWIDTH N M R XN XX YN YX) (SETQ HEIGHT (IPLUS ASCENT DESCENT)) (SETQ NEWBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDBITMAP) (fetch BITMAPHEIGHT of OLDBITMAP))) (SETQ UNKNOWNOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXTHINCHAR))) (SETQ UNKNOWNWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXTHINCHAR))) (SETQ N (IDIFFERENCE 0 (IQUOTIENT (IPLUS DESCENT 3) 4))) (SETQ M (IQUOTIENT (IPLUS ASCENT 3) 4)) [for I from 0 to \MAXTHINCHAR do (COND ((EQ (SETQ OFFSET (\FGETOFFSET OFFSETS I)) UNKNOWNOFFSET) (* ;  "if this is the magic charcode with the slug image (charcode 256) then leave it alone") NIL) (T (SETQ WIDTH (\FGETWIDTH WIDTHS I)) (for J from N to M do (SETQ R (IPLUS OFFSET WIDTH)) (SETQ XN (IMIN R (IMAX (IPLUS OFFSET J) 0))) (SETQ XX (IMIN R (IMAX (IPLUS R J) 0))) [SETQ YN (IMAX 0 (IPLUS DESCENT (ITIMES J 4] [SETQ YX (IMIN HEIGHT (IPLUS DESCENT (IPLUS (ITIMES J 4) 4] (COND ((AND (IGREATERP XX XN) (IGREATERP YX YN)) (BITBLT OLDBITMAP OFFSET YN NEWBITMAP XN YN (IDIFFERENCE XX XN) (IDIFFERENCE YX YN) 'INPUT 'REPLACE] (BITBLT OLDBITMAP UNKNOWNOFFSET 0 NEWBITMAP UNKNOWNOFFSET 0 UNKNOWNWIDTH HEIGHT 'INPUT 'REPLACE) (RETURN (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWBITMAP]) (\SFMAKEROTATEDFONT [LAMBDA (FONTDESC ROTATION) (* ; "Edited 30-Mar-87 20:35 by FS") (* ;; "takes a fontdecriptor and rotates it.") (* ;; "1/5/86 JDS. Masterscope claims nobody calls this. Let's find out....") (HELP "ROTATED fonts need to be fixed for NS Chars & New FONTDESCRIPTOR fields") (* (create FONTDESCRIPTOR using  FONTDESC (SETQ CHARACTERBITMAP  (\SFROTATEFONTCHARACTERS  (fetch (FONTDESCRIPTOR  CHARACTERBITMAP) of FONTDESC)  ROTATION)) (SETQ ROTATION ROTATION)  (SETQ \SFOffsets (  \SFFIXOFFSETSAFTERROTATION FONTDESC  ROTATION)) (SETQ FONTCHARSETVECTOR  (\ALLOCBLOCK (ADD1 \MAXCHARSET) T)))) (* ;; "If you uncomment out the code above, remove this comment and the NIL below") NIL]) (\SFROTATECSINFO [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:38") (* ;; "takes a CHARSETINFO and rotates it and produces a rotated equivalent one.") (create CHARSETINFO using CSINFO CHARSETBITMAP _ (\SFROTATEFONTCHARACTERS (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO) ROTATION) OFFSETS _ (\SFROTATECSINFOOFFSETS CSINFO ROTATION]) (\SFROTATEFONTCHARACTERS [LAMBDA (CHARBITMAP ROTATION) (* ; "Edited 22-Sep-87 10:38 by Snow") (* ;;; "rotate a bitmap either 90 or 270 for fonts.") (CASE ROTATION (0 CHARBITMAP) (90 (ROTATE-BITMAP-LEFT CHARBITMAP)) (180 (ROTATE-BITMAP (ROTATE-BITMAP CHARBITMAP))) (270 (ROTATE-BITMAP CHARBITMAP)))]) (\SFFIXOFFSETSAFTERROTATION [LAMBDA (FONTDESC ROTATION) (* ; "Edited 30-Mar-87 20:35 by FS") (* ;; "adjusts offsets in case where rotation turned things around.") (HELP "NEED TO UPDATE THIS FN TO NSCHARS & NEW FONT FIELDS") (* (COND ((EQ ROTATION 270)  (PROG ((OFFSETS (fetch  (FONTDESCRIPTOR \SFOffsets) of  FONTDESC)) (WIDTHS  (fetch (FONTDESCRIPTOR \SFWidths) of  FONTDESC)) (BITMAPHEIGHT  (BITMAPWIDTH (fetch  (FONTDESCRIPTOR CHARACTERBITMAP) of  FONTDESC))) NEWOFFSETS)  (SETQ NEWOFFSETS (COPYARRAY OFFSETS))  (for CHARCODE from 0 to \MAXCHAR do  (SETA NEWOFFSETS CHARCODE  (IDIFFERENCE BITMAPHEIGHT  (IPLUS (ELT OFFSETS CHARCODE)  (ELT WIDTHS CHARCODE)))))  (* ;  "may be some problem with dummy character representation.")  (RETURN NEWOFFSETS)))  (T (fetch (FONTDESCRIPTOR \SFOffsets)  of FONTDESC)))) (* ;; "If you uncomment out the code above, remove this comment and the NIL below") NIL]) (\SFROTATECSINFOOFFSETS [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:36") (* ;  "adjusts offsets in case where rotation turned things around.") (COND ((EQ ROTATION 270) (PROG ((OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (BITMAPHEIGHT (BITMAPWIDTH (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO))) NEWOFFSETS) (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) [for CHARCODE from 0 to \MAXCHAR do (\FSETOFFSET NEWOFFSETS CHARCODE (IDIFFERENCE BITMAPHEIGHT (IPLUS (\FGETOFFSET OFFSETS CHARCODE) (\FGETWIDTH WIDTHS CHARCODE] (* ;  "may be some problem with dummy character representation.") (RETURN NEWOFFSETS))) (T (fetch (CHARSETINFO OFFSETS) of CSINFO]) (\SFMAKECOLOR [LAMBDA (BWCSINFO BACKCOLOR FORECOLOR BITSPERPIXEL) (* kbr%: " 6-Feb-86 18:17") (* ;; "makes a csinfo that has a character bitmap that is colorized.") (PROG (CHARACTERBITMAP COLORCSINFO) [COND ((IMAGESTREAMP BITSPERPIXEL) (OR BACKCOLOR (SETQ BACKCOLOR (DSPBACKCOLOR NIL BITSPERPIXEL))) (OR FORECOLOR (SETQ FORECOLOR (DSPCOLOR NIL BITSPERPIXEL))) (SETQ BITSPERPIXEL (IMAGESTREAMTYPE BITSPERPIXEL] [SETQ BITSPERPIXEL (COND ((NUMBERP BITSPERPIXEL) BITSPERPIXEL) (T (\DISPLAYSTREAMTYPEBPP BITSPERPIXEL] (SETQ BACKCOLOR (COLORNUMBERP BACKCOLOR BITSPERPIXEL)) (SETQ FORECOLOR (COLORNUMBERP FORECOLOR BITSPERPIXEL)) (SETQ CHARACTERBITMAP (COLORIZEBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of BWCSINFO ) BACKCOLOR FORECOLOR BITSPERPIXEL)) (SETQ COLORCSINFO (create CHARSETINFO using BWCSINFO CHARSETBITMAP _ CHARACTERBITMAP)) (RETURN COLORCSINFO]) ) (DEFINEQ (WRITESTRIKEFONTFILE [LAMBDA (FONT CHARSET FILENAME) (* ; "Edited 30-Mar-87 20:25 by FS") (* ;; "Write strike FILE using info in FONT, AND CHARSET number.") (* ;; "This code only works if original file was STRIKE. Otherwise, a new CSINFO is dummied up and it is used instead. So, CSINFO when read in might be different than the one written out.") (PROG (STREAM CSINFO FIRSTCHAR LASTCHAR WIDTHS OFFSETS IMWIDTHS MAXWIDTH RASTERWIDTH LENGTH DUMMYCHAR DUMMYOFFSET DUMMYINDEX WIDTH OFFSET CODE MAXCODE) (SETQ MAXCODE 255) (* ; "Max charcode") (SETQ DUMMYINDEX 256) (* ; "Dummy char marker") (COND ((NOT (FONTP FONT)) (LISPERROR "ILLEGAL ARG" FONT))) (COND ((NULL CHARSET) (SETQ CHARSET 0)) ((NOT (AND (IGEQ CHARSET 0) (ILESSP CHARSET \MAXCHARSET))) (LISPERROR "ILLEGAL ARG" CHARSET))) (SETQ CSINFO (STRIKECSINFO (\GETCHARSETINFO CHARSET FONT T))) (* ;  "Guarantee its a STRIKE font CSINFO.") (COND ((NULL CSINFO) (ERROR "Couldn't find charset " CHARSET))) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (SETQ IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (* ;; "Index 256 contains a dummy width; use it's value to determine missing chars") (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS DUMMYINDEX)) [SETQ FIRSTCHAR (for I from 0 to MAXCODE thereis (NOT (EQ (\FGETOFFSET OFFSETS I) DUMMYOFFSET] [SETQ LASTCHAR (for I from MAXCODE to 0 by -1 thereis (NOT (EQ (\FGETOFFSET OFFSETS I) DUMMYOFFSET] (SETQ DUMMYCHAR (ADD1 LASTCHAR)) [SETQ STREAM (OPENSTREAM FILENAME 'OUTPUT 'NEW '((TYPE BINARY] (* ;; "") (* ;; "STRIKE Header") (* ;; "") (\WOUT STREAM 32768) (\WOUT STREAM FIRSTCHAR) (\WOUT STREAM LASTCHAR) (SETQ MAXWIDTH 0) [for I from 0 to DUMMYINDEX do (SETQ MAXWIDTH (IMAX MAXWIDTH (\FGETWIDTH WIDTHS I] (\WOUT STREAM MAXWIDTH) (* ;; "") (* ;; "STRIKE Body") (* ;; "") (* ;; "Length of body") (SETQ RASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO))) (SETQ LENGTH (IPLUS 8 (IDIFFERENCE LASTCHAR FIRSTCHAR) (ITIMES (fetch (FONTDESCRIPTOR \SFHeight) of FONT) RASTERWIDTH))) (\WOUT STREAM LENGTH) (* ;; "Ascent, Descent, Xoffset (no longer used) and Rasterwidth.") (\WOUT STREAM (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (\WOUT STREAM (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (\WOUT STREAM 0) (* ;  "offset in bits (<0 for kerning, else 0, =FBBox)") (\WOUT STREAM RASTERWIDTH) (* ;; "Bitmap") [\BOUTS STREAM (fetch (BITMAP BITMAPBASE) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) 0 (ITIMES 2 RASTERWIDTH (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO] (* ;; "Offsets") (SETQ CODE 0) (\WOUT STREAM CODE) (for I from FIRSTCHAR to DUMMYCHAR do (SETQ OFFSET (\FGETOFFSET OFFSETS I)) (SETQ WIDTH (\FGETWIDTH WIDTHS I)) [COND ((AND (IEQP OFFSET DUMMYOFFSET) (NOT (IEQP I DUMMYCHAR))) (* ; "CODE stays the same.") ) (T (SETQ CODE (IPLUS CODE WIDTH] (\WOUT STREAM CODE)) (CLOSEF STREAM]) (STRIKECSINFO [LAMBDA (CSINFO) (* ; "Edited 27-Apr-89 13:39 by atm") (* ;; "Returns a STRIKE type font descriptor (EQ WIDTHS IMAGEWIDTHS), cause we know how to write those guys out (they read quicker but display slower). If (EQ WIDTHS IMAGEWIDTHS), just return original.") (PROG (WIDTHS OFFSETS IMWIDTHS OLDBM BMWIDTH BMHEIGHT NEWBM NEWOFFSET NEWWIDTH OLDOFFSET DUMMYOFFSET NEWOFFSETS) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (SETQ IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) (if (EQ WIDTHS IMWIDTHS) then (RETURN CSINFO)) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (SETQ OLDBM (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS 256)) (SETQ BMHEIGHT (BITMAPHEIGHT OLDBM)) [SETQ BMWIDTH (for I from 0 to \MAXTHINCHAR sum (if (IEQP DUMMYOFFSET (\FGETOFFSET OFFSETS I)) then 0 else (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) (\FGETWIDTH WIDTHS I] (* ;; "") (* ;; "Initialize new offsets vector") (* ;; "") (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET NEWOFFSETS I 0)) (\FSETOFFSET NEWOFFSETS (ADD1 \MAXTHINCHAR) BMWIDTH) (* ;; "") (* ;; "Adjust bitmap with so width = imagewidth, fill offsets") (* ;; "") (SETQ NEWBM (BITMAPCREATE BMWIDTH BMHEIGHT 1)) (SETQ NEWOFFSET 0) [for I from 0 to 255 do (SETQ OLDOFFSET (\FGETOFFSET OFFSETS I)) (if (IEQP DUMMYOFFSET OLDOFFSET) then (\FSETOFFSET NEWOFFSETS I BMWIDTH) else (\FSETOFFSET NEWOFFSETS I NEWOFFSET) (SETQ NEWWIDTH (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) (\FGETWIDTH WIDTHS I))) (BITBLT OLDBM OLDOFFSET 0 NEWBM NEWOFFSET 0 (\FGETWIDTH IMWIDTHS I) BMHEIGHT 'REPLACE) (SETQ NEWOFFSET (IPLUS NEWOFFSET NEWWIDTH] (* ;; "") (* ;; "Make new CSInfo record withs IMAGEWIDTHS, WIDTHS the same") (* ;; "") (SETQ WIDTHS (COPYALL WIDTHS)) [for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I (IMAX (\FGETWIDTH WIDTHS I) (\FGETIMAGEWIDTH IMWIDTHS I] (RETURN (create CHARSETINFO WIDTHS _ WIDTHS OFFSETS _ NEWOFFSETS IMAGEWIDTHS _ WIDTHS CHARSETBITMAP _ NEWBM YWIDTHS _ (fetch (CHARSETINFO YWIDTHS) of CSINFO) CHARSETASCENT _ (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) CHARSETDESCENT _ (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO]) ) (/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) '((FONTCLASS 0 (BITS . 7)) (FONTCLASS 2 POINTER) (FONTCLASS 4 POINTER) (FONTCLASS 6 POINTER) (FONTCLASS 8 POINTER) (FONTCLASS 10 POINTER)) '12) (/DECLAREDATATYPE 'FONTDESCRIPTOR '(POINTER POINTER POINTER POINTER WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD SIGNEDWORD SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) WORD POINTER POINTER POINTER) '((FONTDESCRIPTOR 0 POINTER) (FONTDESCRIPTOR 2 POINTER) (FONTDESCRIPTOR 4 POINTER) (FONTDESCRIPTOR 6 POINTER) (FONTDESCRIPTOR 8 (BITS . 15)) (FONTDESCRIPTOR 9 (BITS . 15)) (FONTDESCRIPTOR 10 (BITS . 15)) (FONTDESCRIPTOR 11 (BITS . 15)) (FONTDESCRIPTOR 12 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 16 POINTER) (FONTDESCRIPTOR 18 POINTER) (FONTDESCRIPTOR 20 POINTER) (FONTDESCRIPTOR 22 POINTER) (FONTDESCRIPTOR 24 POINTER) (FONTDESCRIPTOR 26 (BITS . 7)) (FONTDESCRIPTOR 27 (BITS . 15)) (FONTDESCRIPTOR 28 POINTER) (FONTDESCRIPTOR 30 POINTER) (FONTDESCRIPTOR 32 POINTER)) '34) (/DECLAREDATATYPE 'CHARSETINFO '(POINTER POINTER POINTER POINTER POINTER WORD WORD POINTER) '((CHARSETINFO 0 POINTER) (CHARSETINFO 2 POINTER) (CHARSETINFO 4 POINTER) (CHARSETINFO 6 POINTER) (CHARSETINFO 8 POINTER) (CHARSETINFO 10 (BITS . 15)) (CHARSETINFO 11 (BITS . 15)) (CHARSETINFO 12 POINTER)) '14) (ADDTOVAR SYSTEMRECLST (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) (OTHERDEVICEFONTPROPS POINTER) (FONTSCALE POINTER) (\SFFACECODE BITS 8) (FONTAVGCHARWIDTH WORD) (FONTIMAGEWIDTHS POINTER) (FONTCHARSETVECTOR POINTER) (FONTEXTRAFIELD2 POINTER))) (DATATYPE CHARSETINFO (WIDTHS OFFSETS IMAGEWIDTHS CHARSETBITMAP YWIDTHS (CHARSETASCENT WORD) (CHARSETDESCENT WORD) LEFTKERN)) ) (RPAQ? \FONTSINCORE ) (RPAQ? \DEFAULTDEVICEFONTS ) (RPAQ? \UNITWIDTHSVECTOR ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DISPLAYFONTDIRECTORIES \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\UNITWIDTHSVECTOR) ) (DECLARE%: EVAL@COMPILE (RPAQQ NORUNCODE 255) (CONSTANTS (NORUNCODE 255)) ) (* "FOLLOWING DEFINITIONS EXPORTED") (DEFOPTIMIZER FONTPROP (&REST ARGS) (SELECTQ (AND (EQ (CAADR ARGS) 'QUOTE) (CADADR ARGS)) (ASCENT (LIST 'FONTASCENT (CAR ARGS))) (DESCENT (LIST 'FONTDESCENT (CAR ARGS))) (HEIGHT (LIST 'FONTHEIGHT (CAR ARGS))) 'IGNOREMACRO)) (* "END EXPORTED DEFINITIONS") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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 _ 'MEDIUM SLOPE _ 'REGULAR EXPANSION _ '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)) ) (/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) '((FONTCLASS 0 (BITS . 7)) (FONTCLASS 2 POINTER) (FONTCLASS 4 POINTER) (FONTCLASS 6 POINTER) (FONTCLASS 8 POINTER) (FONTCLASS 10 POINTER)) '12) (/DECLAREDATATYPE 'FONTDESCRIPTOR '(POINTER POINTER POINTER POINTER WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD SIGNEDWORD SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) WORD POINTER POINTER POINTER) '((FONTDESCRIPTOR 0 POINTER) (FONTDESCRIPTOR 2 POINTER) (FONTDESCRIPTOR 4 POINTER) (FONTDESCRIPTOR 6 POINTER) (FONTDESCRIPTOR 8 (BITS . 15)) (FONTDESCRIPTOR 9 (BITS . 15)) (FONTDESCRIPTOR 10 (BITS . 15)) (FONTDESCRIPTOR 11 (BITS . 15)) (FONTDESCRIPTOR 12 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) (FONTDESCRIPTOR 16 POINTER) (FONTDESCRIPTOR 18 POINTER) (FONTDESCRIPTOR 20 POINTER) (FONTDESCRIPTOR 22 POINTER) (FONTDESCRIPTOR 24 POINTER) (FONTDESCRIPTOR 26 (BITS . 7)) (FONTDESCRIPTOR 27 (BITS . 15)) (FONTDESCRIPTOR 28 POINTER) (FONTDESCRIPTOR 30 POINTER) (FONTDESCRIPTOR 32 POINTER)) '34) (/DECLAREDATATYPE 'CHARSETINFO '(POINTER POINTER POINTER POINTER POINTER WORD WORD POINTER) '((CHARSETINFO 0 POINTER) (CHARSETINFO 2 POINTER) (CHARSETINFO 4 POINTER) (CHARSETINFO 6 POINTER) (CHARSETINFO 8 POINTER) (CHARSETINFO 10 (BITS . 15)) (CHARSETINFO 11 (BITS . 15)) (CHARSETINFO 12 POINTER)) '14) (DECLARE%: EVAL@COMPILE (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 () `(CL:MAKE-ARRAY (IPLUS \MAXTHINCHAR 3) :ELEMENT-TYPE '(SIGNED-BYTE 16) :INITIAL-ELEMENT 0)) (DEFMACRO \FSETLEFTKERN (LEFTKERNBLOCK INDEX KERNVALUE) `(CL:SETF (CL:AREF ,LEFTKERNBLOCK ,INDEX) ,KERNVALUE)) (DEFMACRO \FGETLEFTKERN (LEFTKERNBLOCK CHAR8CODE) `(CL:AREF ,LEFTKERNBLOCK ,CHAR8CODE)) (DECLARE%: EVAL@COMPILE (RPAQQ \MAXNSCHAR 65535) (CONSTANTS (\MAXNSCHAR 65535)) ) (* "END EXPORTED DEFINITIONS") ) (* ; "NS Character specific code") (DEFINEQ (\CREATECHARSET [LAMBDA (CHARSET FONT NOSLUG?) (* ; "Edited 8-May-93 23:42 by rmk:") (* ; "Edited 4-Dec-92 11:43 by jds") (* ;; "Creates and returns the CHARSETINFO for charset CHARSET in fontdesc FONT, installing it in fonts FONTCHARSETVECTOR") (* ;  "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") (DECLARE (GLOBALVARS \DISPLAYSTREAMTYPES)) (AND (IGREATERP CHARSET \MAXCHARSET) (\ILLEGAL.ARG CHARSET)) (PROG [CSINFO (CREATEFN (COND ((FMEMB (FONTPROP FONT 'DEVICE) \DISPLAYSTREAMTYPES) (FUNCTION \CREATECHARSET.DISPLAY)) (T (CADR (ASSOC 'CREATECHARSET (CDR (ASSOC (FONTPROP FONT 'DEVICE) IMAGESTREAMTYPES] (* ;; "Create a descriptor of info for that charset, and use it to fill things in.") (COND ([NOT (SETQ CSINFO (APPLY CREATEFN (APPEND (FONTPROP FONT 'DEVICESPEC) (LIST CHARSET FONT NOSLUG?] (* ;  "the create method returned NIL--NOSLUG? must be T.") (RETURN NIL))) (replace \SFAscent of FONT with (IMAX (fetch \SFAscent of FONT) (SIGNED (fetch CHARSETASCENT of CSINFO) 16))) (replace \SFDescent of FONT with (IMAX (fetch \SFDescent of FONT) (SIGNED (ffetch CHARSETDESCENT of CSINFO) 16))) (replace \SFHeight of FONT with (IPLUS (fetch \SFAscent of FONT) (ffetch \SFDescent of FONT))) (* ;  "jtm: height = ascent + descent, not (IMAX fontHeight charSetHeight)") (RETURN (\SETCHARSETINFO (ffetch FONTCHARSETVECTOR of FONT) CHARSET CSINFO]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DISPLAYFONTCOERCIONS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS CHARSETERRORFLG) ) (RPAQ? DISPLAYFONTCOERCIONS NIL) (RPAQ? MISSINGCHARSETDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)) ((TERMINAL 6) (MODERN 6)) ((TERMINAL 8) (MODERN 8)) ((TERMINAL 10) (MODERN 10)) ((TERMINAL 12) (MODERN 12)))) (RPAQ? MISSINGDISPLAYFONTCOERCIONS '(((GACHA) (TERMINAL)) ((MODERN) (CLASSIC)) ((TIMESROMAN) (CLASSIC)) ((HELVETICA) (MODERN)))) (RPAQ? CHARSETERRORFLG NIL) (RPAQ? \DEFAULTCHARSET 0) (DEFINEQ (\FONTRESETCHARWIDTHS [LAMBDA (CSINFO FIRSTCHAR LASTCHAR) (* AJB " 6-Dec-85 14:42") (* ;  "sets the widths array from the offsets array") (PROG ((mincharcode FIRSTCHAR) (maxcharcode LASTCHAR) (offsets (fetch (CHARSETINFO OFFSETS) of CSINFO)) (widths (fetch (CHARSETINFO WIDTHS) of CSINFO)) left right charoffset dummycharoffset dummycharwidth) (SETQ dummycharoffset (\FGETOFFSET offsets (ADD1 maxcharcode))) (SETQ dummycharwidth (IDIFFERENCE (\FGETOFFSET offsets (IPLUS maxcharcode 2)) dummycharoffset)) [for charcode from 0 to \MAXCHAR do (COND ((OR (ILESSP charcode mincharcode) (IGREATERP charcode maxcharcode)) (\FSETOFFSET offsets charcode dummycharoffset) (\FSETWIDTH widths charcode dummycharwidth)) (T (SETQ left (\FGETWIDTH offsets charcode)) (SETQ right (\FGETWIDTH offsets (ADD1 charcode))) (COND ((EQ left right) (\FSETOFFSET offsets charcode dummycharoffset) (\FSETWIDTH widths charcode dummycharwidth)) (T (\FSETWIDTH widths charcode (IDIFFERENCE right left] (\FSETWIDTH widths (ADD1 \MAXCHAR) dummycharwidth) (\FSETOFFSET offsets (ADD1 \MAXCHAR) dummycharoffset]) ) (DECLARE%: DONTEVAL@LOAD (RPAQ? DISPLAYFONTEXTENSIONS 'DISPLAYFONT) (RPAQ? DISPLAYFONTDIRECTORIES '({DSK}/USR/LOCAL/LDE/FONTS/DISPLAY/PRESENTATION/ {dsk}/usr/local/lde/fonts/display/publishing/)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \FGETCHARIMAGEWIDTH MACRO (OPENLAMBDA (FONT CHARCODE) (\FGETWIDTH (ffetch (CHARSETINFO IMAGEWIDTHS) of (\GETCHARSETINFO (\CHARSET CHARCODE) FONT)) (\CHAR8CODE CHARCODE)))) (PROGN (PUTPROPS \GETFONTDESC DMACRO [X (COND ((CDR X) (CONS '\COERCEFONTDESC X)) (T `(\DTEST ,(CAR X) 'FONTDESCRIPTOR]) (PUTPROPS \GETFONTDESC MACRO (= . \COERCEFONTDESC))) (PUTPROPS \SETCHARSETINFO MACRO ((CHARSETVECTOR CHARSET CSINFO) (\RPLPTR CHARSETVECTOR (UNFOLD CHARSET 2) CSINFO))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (PUTPROPS FONT FILETYPE :FAKE-COMPILE-FILE) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FONTCOPY) ) (PUTPROPS FONT COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1999)) (DECLARE%: DONTCOPY (FILEMAP (NIL (8608 18127 (CHARWIDTH 8618 . 9403) (CHARWIDTHY 9405 . 10775) (STRINGWIDTH 10777 . 11870 ) (\CHARWIDTH.DISPLAY 11872 . 12285) (\STRINGWIDTH.DISPLAY 12287 . 12711) (\STRINGWIDTH.GENERIC 12713 . 18125)) (18128 24510 (DEFAULTFONT 18138 . 19971) (FONTCLASS 19973 . 22135) (FONTCLASSUNPARSE 22137 . 23036) (FONTCLASSCOMPONENT 23038 . 23547) (SETFONTCLASSCOMPONENT 23549 . 24508)) (25184 37916 ( FONTCREATE 25194 . 34461) (\FONT.SYMBOLMEMB 34463 . 34693) (\FONT.SYMBOLASSOC 34695 . 35853) ( \FONT.COMPARESYMBOL 35855 . 37914)) (37955 42579 (FONTASCENT 37965 . 38133) (FONTDESCENT 38135 . 38404 ) (FONTHEIGHT 38406 . 38592) (FONTPROP 38594 . 42037) (\AVGCHARWIDTH 42039 . 42577)) (42626 55265 ( GETCHARBITMAP 42636 . 45526) (PUTCHARBITMAP 45528 . 53585) (MOVECHARBITMAP 53587 . 55263)) (55266 140192 (FONTCOPY 55276 . 60584) (FONTSAVAILABLE 60586 . 65791) (FONTFILEFORMAT 65793 . 67417) (FONTP 67419 . 67718) (FONTUNPARSE 67720 . 70284) (SETFONTDESCRIPTOR 70286 . 71995) (CHARCODEP 71997 . 72358) (EDITCHAR 72360 . 72789) (\STREAMCHARWIDTH 72791 . 76955) (\UNITWIDTHSVECTOR 76957 . 77320) ( \CREATEDISPLAYFONT 77322 . 78075) (\CREATECHARSET.DISPLAY 78077 . 80993) (\CREATE-REAL-CHARSET.DISPLAY 80995 . 88286) (\BUILDSLUGCSINFO 88288 . 89731) (\SEARCHDISPLAYFONTFILES 89733 . 91666) ( \SEARCHFONTFILES 91668 . 94979) (\FINDFONTFILE 94981 . 96172) (\FONTSYMBOL 96174 . 96824) ( \DEVICESYMBOL 96826 . 97695) (\FONTFACE 97697 . 104887) (\FONTFACE.COLOR 104889 . 111809) ( \FONTFILENAME 111811 . 115226) (\FONTFILENAME.OLD 115228 . 118177) (\FONTFILENAME.NEW 118179 . 120436) (\FONTINFOFROMFILENAME 120438 . 123552) (\FONTINFOFROMFILENAME.OLD 123554 . 125831) (\GETFONTDESC 125833 . 126224) (\COERCEFONTDESC 126226 . 131611) (\LOOKUPFONT 131613 . 132957) (\LOOKUPFONTSINCORE 132959 . 135032) (\READDISPLAYFONTFILE 135034 . 140190)) (141096 158146 (\READSTRIKEFONTFILE 141106 . 145634) (\SFMAKEBOLD 145636 . 148032) (\SFMAKEITALIC 148034 . 150937) (\SFMAKEROTATEDFONT 150939 . 152340) (\SFROTATECSINFO 152342 . 152979) (\SFROTATEFONTCHARACTERS 152981 . 153361) ( \SFFIXOFFSETSAFTERROTATION 153363 . 155502) (\SFROTATECSINFOOFFSETS 155504 . 156773) (\SFMAKECOLOR 156775 . 158144)) (158147 166458 (WRITESTRIKEFONTFILE 158157 . 162998) (STRIKECSINFO 163000 . 166456)) (180718 183574 (\CREATECHARSET 180728 . 183572)) (184660 186412 (\FONTRESETCHARWIDTHS 184670 . 186410 ))))) STOP \ No newline at end of file diff --git a/sources/FONTPROFILE.LCOM.~1~ b/sources/FONTPROFILE.LCOM.~1~ deleted file mode 100644 index 98ed517037390f36deb892c5bee73476c13f4302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9412 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 IK%C0|08dtVG5`Po diff --git a/sources/FONTPROFILE.LCOM.~2~ b/sources/FONTPROFILE.LCOM.~2~ deleted file mode 100644 index a58f35d2f351529da40934630ec01a8d22d17887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10880 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 jSfmedley3.5>sources>FONTPROFILE.;2 29960 changes to%: (VARS FONTPROFILECOMS) (ALISTS (FONTDEFS NS) (FONTDEFS BIGGERNS)) previous date%: " 9-Jul-91 18:38:04" {DSK}medley3.5>sources>FONTPROFILE.;1) (* ; " Copyright (c) 1986, 1988, 1990, 1991, 1999 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT FONTPROFILECOMS) (RPAQQ FONTPROFILECOMS ( (* ;; "FONT") (ALISTS (FONTDEFS HUGE BIG MEDIUM STANDARD BIGGER NS BIGGERNS)) (ADDVARS (CACHEDMENUS BreakMenu WindowMenu BackgroundMenu IconWindowMenu)) [VARS (FONTVARS '( (* ;; "standard size fonts. Assumes only DEFAULTFONT set") (BOLDFONT (FONTCOPY DEFAULTFONT 'FACE 'BOLD)) (* ; "default BOLD") (ITALICFONT (FONTCOPY DEFAULTFONT 'FACE 'ITALIC)) (LITTLEFONT DEFAULTFONT) (* ; " should usually be smaller") (TINYFONT LITTLEFONT) (* ; "and this one smaller still") (BIGFONT BOLDFONT) (* ; "should be bigger still") (TEXTFONT DEFAULTFONT) (* ; "default for text") (TEXTBOLDFONT BOLDFONT) (* ; "default for bold text") (* ;; "") (* ;; "Fonts for window system, processes") (* ;; "") (MENUFONT DEFAULTFONT T) (BOLDMENUFONT (FONTCOPY MENUFONT 'FACE 'BOLD)) (* ; "if not supplied") (INTERRUPTMENUFONT DEFAULTFONT T) (* ; "used by control-B") (DEFAULTICONFONT MENUFONT) (* ; "for shrinking windows") (BACKTRACEFONT TINYFONT T) (* ; " for backtrace in debugger") (WINDOWTITLEFONT MENUFONT) ((WINDOWTITLEFONT WINDOWTITLEFONT) NIL) (* ; " used for titles of all windows") (* ;; "") (* ;; "Fonts for Exec") (* ;; "") (PROMPTFONT LITTLEFONT) (* ; "for printing out prompts") (INPUTFONT BOLDFONT) (* ; "for user typein in Exec") (PRINTOUTFONT DEFAULTFONT) (* ; " for intermediate typin in Exec") (TTYINBOLDFONT (CONS DEFAULTFONT BOLDFONT)) (VALUEFONT DEFAULTFONT) (* ;  " for printing out values returned in Exec") (* ;; "") (* ;; "Fonts for prettyprinting") (* ;; "") (COMMENTFONT LITTLEFONT) (* ; "for comments ") (PRETTYCOMFONT BOLDFONT) (* ; " for words being defined") (CLISPFONT BOLDFONT) (* ; " for keywords & CLISP") (SYSTEMFONT DEFAULTFONT) (* ; " for %"system%" words(?)") (LAMBDAFONT BIGFONT) (* ; "for words being defined") (USERFONT BOLDFONT) (* ; " for %"user%" defined words")] (P (MOVD? 'NILL 'WINDOWTITLEFONT)) (FNS FONTSET FONTPROFILE FONTPROFILE.ADDDEVICE) (INITVARS (FONTESCAPECHAR (CHARACTER 6)) (FONTFNS) (FONTWORDS)) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (FONTSET 'STANDARD] (GLOBALVARS FONTPROFILE FONTESCAPECHAR FONTDEFS) (FNS FONTMAPARRAY) (INITVARS (\FONTMAPCACHE)) (P (SETSEPR '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) 1 FILERDTBL)))) (* ;; "FONT") (ADDTOVAR FONTDEFS [HUGE (FONTPROFILE (DEFAULTFONT 1 (MODERN 24) NIL (TERMINAL 8)) (BOLDFONT 2 (MODERN 24 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 18 MRR) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 36 BRR) NIL (MODERN 10 BRR)) (TEXTFONT 5 (CLASSIC 24) NIL (CLASSIC 10)) (TEXTBOLDFONT 7 (CLASSIC 24 BRR) NIL (CLASSIC 10 BRR] [BIG (FONTPROFILE (DEFAULTFONT 1 (MODERN 18) NIL (TERMINAL 8)) (TEXTFONT 5 (CLASSIC 18) NIL (CLASSIC 10)) (BOLDFONT 2 (MODERN 18 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 12 MRR) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 24 BRR) NIL (MODERN 10 BRR)) (TEXTBOLDFONT 7 (CLASSIC 18 BRR) NIL (CLASSIC 10 BRR] [MEDIUM (FONTPROFILE (DEFAULTFONT 1 (MODERN 14) NIL (TERMINAL 8)) (BOLDFONT 2 (MODERN 14 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 10) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 18) NIL (MODERN 10 BRR)) (TEXTFONT 5 (CLASSIC 14) NIL (CLASSIC 10)) (TEXTBOLDFONT 7 (CLASSIC 14 BRR) NIL (CLASSIC 10 BRR] [STANDARD (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (FONTPROFILE (DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8)) (ITALICFONT 1 (HELVETICA 10 MIR) (GACHA 8 MIR) (MODERN 8 MIR)) (BOLDFONT 2 (HELVETICA 10 BRR) (HELVETICA 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (HELVETICA 8) (HELVETICA 6 MIR) (MODERN 8 MIR)) (TINYFONT 6 (GACHA 8) (GACHA 6) (TERMINAL 6)) (BIGFONT 4 (HELVETICA 12 BRR) NIL (MODERN 10 BRR)) (MENUFONT 5 (HELVETICA 10)) (COMMENTFONT 6 (HELVETICA 10) (HELVETICA 8) (MODERN 8)) (TEXTFONT 7 (TIMESROMAN 10) NIL (CLASSIC 10] [BIGGER (FONTPROFILE (DEFAULTFONT 1 (GACHA 12) NIL (TERMINAL 8)) (ITALICFONT 1 (HELVETICA 12 MIR) (GACHA 8 MIR) (MODERN 8 MIR)) (BOLDFONT 2 (HELVETICA 12 BRR) (HELVETICA 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (HELVETICA 10) (HELVETICA 6 MIR) (MODERN 8 MIR)) (TINYFONT 6 (GACHA 10) (GACHA 6) (TERMINAL 6)) (BIGFONT 4 (HELVETICA 14 BRR) NIL (MODERN 10 BRR)) (MENUFONT 5 (HELVETICA 12)) (COMMENTFONT 6 (HELVETICA 12) (HELVETICA 8) (MODERN 8)) (TEXTFONT 7 (TIMESROMAN 12) NIL (CLASSIC 10] [NS (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (COMMENTLINELENGTH 116 . 126) (FIRSTCOL . 60) (PRETTYLCOM . 25) (FONTESCAPECHAR . %) (FONTPROFILE (DEFAULTFONT 1 (TERMINAL 10) (TERMINAL 8) (TERMINAL 8)) (ITALICFONT 1 (MODERN 10 BIR) (MODERN 8 BIR) (MODERN 8 BIR)) (BOLDFONT 2 (MODERN 10 BRR) (MODERN 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 8) (MODERN 6 MIR) (MODERN 8 MIR)) (BIGFONT 4 (MODERN 12 BRR) (MODERN 10 BRR) (MODERN 10 BRR] [BIGGERNS (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (COMMENTLINELENGTH 116 . 126) (FIRSTCOL . 60) (PRETTYLCOM . 25) (FONTESCAPECHAR . %) (FONTPROFILE (DEFAULTFONT 1 (TERMINAL 12) (TERMINAL 8) (TERMINAL 8)) (ITALICFONT 1 (MODERN 12 BIR) (MODERN 8 BIR) (MODERN 8 BIR)) (BOLDFONT 2 (MODERN 12 BRR) (MODERN 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 10) (MODERN 6 MIR) (MODERN 8 MIR)) (BIGFONT 4 (MODERN 14 BRR) (MODERN 10 BRR) (MODERN 10 BRR]) (ADDTOVAR CACHEDMENUS BreakMenu WindowMenu BackgroundMenu IconWindowMenu) (RPAQQ FONTVARS ( (* ;; "standard size fonts. Assumes only DEFAULTFONT set") (BOLDFONT (FONTCOPY DEFAULTFONT 'FACE 'BOLD)) (* ; "default BOLD") (ITALICFONT (FONTCOPY DEFAULTFONT 'FACE 'ITALIC)) (LITTLEFONT DEFAULTFONT) (* ; " should usually be smaller") (TINYFONT LITTLEFONT) (* ; "and this one smaller still") (BIGFONT BOLDFONT) (* ; "should be bigger still") (TEXTFONT DEFAULTFONT) (* ; "default for text") (TEXTBOLDFONT BOLDFONT) (* ; "default for bold text") (* ;; "") (* ;; "Fonts for window system, processes") (* ;; "") (MENUFONT DEFAULTFONT T) (BOLDMENUFONT (FONTCOPY MENUFONT 'FACE 'BOLD)) (* ; "if not supplied") (INTERRUPTMENUFONT DEFAULTFONT T) (* ; "used by control-B") (DEFAULTICONFONT MENUFONT) (* ; "for shrinking windows") (BACKTRACEFONT TINYFONT T) (* ; " for backtrace in debugger") (WINDOWTITLEFONT MENUFONT) ((WINDOWTITLEFONT WINDOWTITLEFONT) NIL) (* ; " used for titles of all windows") (* ;; "") (* ;; "Fonts for Exec") (* ;; "") (PROMPTFONT LITTLEFONT) (* ; "for printing out prompts") (INPUTFONT BOLDFONT) (* ; "for user typein in Exec") (PRINTOUTFONT DEFAULTFONT) (* ; " for intermediate typin in Exec") (TTYINBOLDFONT (CONS DEFAULTFONT BOLDFONT)) (VALUEFONT DEFAULTFONT) (* ;  " for printing out values returned in Exec") (* ;; "") (* ;; "Fonts for prettyprinting") (* ;; "") (COMMENTFONT LITTLEFONT) (* ; "for comments ") (PRETTYCOMFONT BOLDFONT) (* ; " for words being defined") (CLISPFONT BOLDFONT) (* ; " for keywords & CLISP") (SYSTEMFONT DEFAULTFONT) (* ; " for %"system%" words(?)") (LAMBDAFONT BIGFONT) (* ; "for words being defined") (USERFONT BOLDFONT) (* ; " for %"user%" defined words"))) (MOVD? 'NILL 'WINDOWTITLEFONT) (DEFINEQ (FONTSET [LAMBDA (NAME CHANGE-WINDOWS?) (* ; "Edited 23-Jun-88 10:46 by jds") (COND [NAME (LET [(TEM (FASSOC NAME FONTDEFS)) (OLDDEFAULT (FONTCREATE DEFAULTFONT NIL NIL NIL 'DISPLAY] (OR TEM (ERROR NAME "not a defined font configuration")) (* ;; "Looks up NAME on FONTSLST and sets apropriate parameters. entries are added to fontslst by FONTNAME.") (for X in FONTVARS when (AND (CL:SYMBOLP (CAR X)) (NEQ (CAR X) '*) (NEQ (CAR X) (CADR X))) do (SETTOPVAL (CAR X))) [MAPC (CDR TEM) (FUNCTION (LAMBDA (X) (/SETTOPVAL (CAR X) (CDR X] [PROG (BASICCLASSES) (for X in FONTPROFILE do (PROG (SEEN (NAME (CAR X)) (FONTS X)) LP [COND ((MEMB (CAR FONTS) SEEN) (ERROR "Circular font profile specification" X)) (T (push SEEN (CAR FONTS] [SETQ FONTS (CDR (COND ((OR (NULL (CADR FONTS)) (LISTP (CADR FONTS))) (*) (* ;  "This skips over the now-defunct NIL or list-of-escape sequence") (CDR FONTS)) (T FONTS] (COND ((OR (NLISTP FONTS) (LITATOM (CAR FONTS)))(* ;  "Indirect thru another's font spec") (AND (SETQ FONTS (ASSOC (SELECTQ (CAR (LISTP FONTS)) ((NIL DEFAULTFONT) (* ;  "Don't let DEFAULTFONT loop thru itself") (AND (NOT (MEMB 'DEFAULTFONT SEEN )) 'DEFAULTFONT)) (CAR FONTS)) FONTPROFILE)) (GO LP))) (T [push BASICCLASSES (SETQ FONTS (FONTCLASS NAME FONTS 'DISPLAY] (* ;  "Now we have a font class datastructure") )) (AND NAME (/SETTOPVAL NAME FONTS)) (* ;; "NIL for the class-name means just establish the font-correspondences but don't connect them up with a pretty class name.") )) (AND BASICCLASSES (FONTMAPARRAY BASICCLASSES 'DISPLAY] [for X in FONTVARS when (NEQ (CAR X) '*) do (COND ((LISTP (CAR X)) (EVAL (CAR X))) [(CADDR X) (SET (CAR X) (FONTCREATE (OR (GETTOPVAL (CAR X)) (EVAL (CADR X)) DEFAULTFONT) NIL NIL NIL 'DISPLAY] (T (OR (GETTOPVAL (CAR X)) (AND (CADR X) (SET (CAR X) (EVAL (CADR X] (CL:WHEN CHANGE-WINDOWS? (CL:WHEN (NEQ OLDDEFAULT (FONTCREATE DEFAULTFONT NIL NIL NIL 'DISPLAY)) (for X in (OPENWINDOWS) when (EQ OLDDEFAULT (DSPFONT NIL X)) do (DSPFONT DEFAULTFONT X))) (DSPFONT WINDOWTITLEFONT WindowTitleDisplayStream) (SETQ MaxValueLeftMargin (ITIMES 35 (STRINGWIDTH 'A DEFAULTFONT))) (MAPC CACHEDMENUS 'SET) [for W in (OPENWINDOWS) do [COND [(OR (EQ (WINDOWPROP W 'RESHAPEFN) 'DONT) (WINDOWPROP W 'MAINWINDOW] (T (* ;;  "don't reshape if can't or if this window is attached to another.") (SHAPEW W (WINDOWREGION W] (COND ((AND (NEQ (WINDOWPROP W 'WINDOWENTRYFN) (FUNCTION \TEDIT.PROCIDLEFN)) (WINDOWPROP W 'REPAINTFN)) (REDISPLAYW W]) (* ;; "Set the new font profile name, and return the old one, so he can restore later.") (PROG1 FONTNAME (SETQ FONTNAME NAME] (T (* ;  "He passed in NIL, so return font profile name in effect.") FONTNAME]) (FONTPROFILE [LAMBDA (PROFILE) (* lmm "10-Sep-86 12:33") [PROG (BASICCLASSES) (for X in PROFILE do (PROG (SEEN (NAME (CAR X)) (FONTS X)) LP [COND ((MEMB (CAR FONTS) SEEN) (ERROR "Circular font profile specification" X)) (T (push SEEN (CAR FONTS] [SETQ FONTS (CDR (COND ((OR (NULL (CADR FONTS)) (LISTP (CADR FONTS))) (* ; "This skips over the now-defunct NIL or list-of-escape sequence") (CDR FONTS)) (T FONTS] (COND ((OR (NLISTP FONTS) (LITATOM (CAR FONTS))) (* Indirect thru another's font spec) (AND (SETQ FONTS (ASSOC (SELECTQ (CAR (LISTP FONTS)) ((NIL DEFAULTFONT) (* Don't let DEFAULTFONT loop thru itself) (AND (NOT (MEMB 'DEFAULTFONT SEEN)) 'DEFAULTFONT)) (CAR FONTS)) PROFILE)) (GO LP))) (T [push BASICCLASSES (SETQ FONTS (FONTCLASS NAME FONTS 'DISPLAY] (* Now we have a font class datastructure) )) (AND NAME (/SETATOMVAL NAME FONTS)) (* NIL for the class-name means just establish the font-correspondences but don't connect them up with a pretty class name.) )) (AND BASICCLASSES (FONTMAPARRAY BASICCLASSES 'DISPLAY] T]) (FONTPROFILE.ADDDEVICE [LAMBDA (NEWDEVICE OLDDEVICE) (* ; "Edited 3-Mar-93 14:46 by rmk:") (* ;; "Fills in all fontprofile specifications so that an entry for NEWDEVICE is present for each fontclass. Nothing is changed if the entry is already there, otherwise the specification for the class currently provided for OLDDEVICE will be used for NEWDEVICE.") (DECLARE (USEDFREE FONTDEFS FONTNAME)) (SETQ NEWDEVICE (U-CASE NEWDEVICE)) (SETQ OLDDEVICE (U-CASE OLDDEVICE)) [FOR FD IN FONTDEFS DO (FOR FC OLDSPEC IN (CDR (ASSOC 'FONTPROFILE (CDR FD))) UNLESS (LITATOM (CADR FC)) DO (SETQ FC (CDR FC)) (* ; "Skip over name") (CL:WHEN [SETQ OLDSPEC (SELECTQ OLDDEVICE (DISPLAY (CADR FC)) (INTERPRESS (CADDDR FC)) (PRESS (CADDR FC)) (CADR (ASSOC OLDDEVICE (CDDDDR FC] [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (* ;  "Fill in NIL's for missing DISPLAY, PRESS, or INTERPRESS") [SELECTQ NEWDEVICE (DISPLAY (OR (CAR FC) (RPLACA FC OLDSPEC))) (INTERPRESS (OR (CADDR FC) (RPLACA [PROGN [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (OR (CDR FC) (CDR (RPLACD FC (CONS] OLDSPEC))) (PRESS (OR (CADDR FC) (RPLACA [OR (CDR FC) (CDR (RPLACD FC (CONS] OLDSPEC))) (OR (CADR (ASSOC NEWDEVICE (CDDDR FC))) (PROGN (PROGN [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (PUSH (CDR FC) (LIST NEWDEVICE OLDSPEC])] (FONTSET FONTNAME]) ) (RPAQ? FONTESCAPECHAR (CHARACTER 6)) (RPAQ? FONTFNS ) (RPAQ? FONTWORDS ) (DECLARE%: DONTEVAL@LOAD DOCOPY (FONTSET 'STANDARD) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS FONTPROFILE FONTESCAPECHAR FONTDEFS) ) (DEFINEQ (FONTMAPARRAY [LAMBDA (FONTCLASSES) (* lmm "28-Sep-86 14:23") (* ;; "Makes a font array from a font-mapping list of fontclasses. The array provides a fast map from font# to font classes/descriptors. This function caches the last array. If IMAGETYPES is given, then the FD's are pre-computed for the imagetypes it. Otherwise, the first use of the fontclass for that imagetype would cause the fontcreate to be done.") (PROG (FA (MAXFONT 0) (MINFONT 100)) [COND ((NULL \FONTMAPCACHE)) ((OR (NULL FONTCLASSES) (EQUAL FONTCLASSES (CAR \FONTMAPCACHE))) (RETURN (CDR \FONTMAPCACHE] [for F PRETTYFONT# in FONTCLASSES do (SETQ PRETTYFONT# (fetch (FONTCLASS PRETTYFONT#) of F)) (COND ((IGREATERP PRETTYFONT# MAXFONT) (SETQ MAXFONT PRETTYFONT#))) (COND ((ILESSP PRETTYFONT# 1) (ERROR "Invalid font number" PRETTYFONT# F)) ((ILESSP PRETTYFONT# MINFONT) (SETQ MINFONT PRETTYFONT#] (SETQ FA (ARRAY MAXFONT)) (for F in FONTCLASSES do (SETA FA (fetch (FONTCLASS PRETTYFONT#) of F) F)) (for I from 1 to MAXFONT unless (ELT FA I) do (SETA FA I (ELT FA MINFONT))) (SETQ \FONTMAPCACHE (CONS (COPY FONTCLASSES) FA)) (RETURN FA]) ) (RPAQ? \FONTMAPCACHE ) (SETSEPR '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) 1 FILERDTBL) (PUTPROPS FONTPROFILE COPYRIGHT ("Venue & Xerox Corporation" 1986 1988 1990 1991 1999)) (DECLARE%: DONTCOPY (FILEMAP (NIL (16000 27584 (FONTSET 16010 . 22351) (FONTPROFILE 22353 . 24702) (FONTPROFILE.ADDDEVICE 24704 . 27582)) (27820 29719 (FONTMAPARRAY 27830 . 29717))))) STOP \ No newline at end of file From b94dae78898658742d7b85076dcec9290b5aee0c Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Fri, 12 Feb 2021 20:42:38 -0800 Subject: [PATCH 07/37] FASLOAD needs LCOM not .DFASL --- sources/FASLOAD.DFASL | Bin 26789 -> 0 bytes sources/FASLOAD.LCOM | Bin 0 -> 22348 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sources/FASLOAD.DFASL create mode 100644 sources/FASLOAD.LCOM diff --git a/sources/FASLOAD.DFASL b/sources/FASLOAD.DFASL deleted file mode 100644 index c36b503db99fc92f6e06c48b485111dccf6d8775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26789 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⪙y>_;Y$pN$E8k6f9ew6KgA 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 bM{RQNUnY;brO_z)D5QK2O}MvTy!d|s?$2+( diff --git a/sources/FASLOAD.LCOM b/sources/FASLOAD.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..aa6fc9d4a460cc25b5bb9e9f86d7613bbbb3c764 GIT binary patch literal 22348 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 QQ#V0 Date: Fri, 12 Feb 2021 23:04:22 -0800 Subject: [PATCH 08/37] Partial cleanup of old versions no longer needed --- greetfiles/MAKEINITGREET | 1 - greetfiles/MAKEINITGREET.LCOM | Bin 3232 -> 0 bytes greetfiles/MAKEINITGREET.LCOM.~27~ | Bin 3232 -> 0 bytes greetfiles/MAKEINITGREET.~1~ | 1 - greetfiles/MAKEINITGREET.~27~ | 1 - greetfiles/MAKEINITGREET.~28~ | 1 - sources/FILEPKG.LCOM.~10~ | Bin 102732 -> 0 bytes sources/FILEPKG.LCOM.~11~ | Bin 103287 -> 0 bytes sources/FILEPKG.LCOM.~12~ | Bin 103331 -> 0 bytes sources/FILEPKG.LCOM.~13~ | Bin 103352 -> 0 bytes sources/FILEPKG.LCOM.~7~ | Bin 102516 -> 0 bytes sources/FILEPKG.LCOM.~8~ | Bin 102666 -> 0 bytes sources/FILEPKG.LCOM.~9~ | Bin 102722 -> 0 bytes sources/FILEPKG.~10~ | 1 - sources/FILEPKG.~11~ | 1 - sources/FILEPKG.~12~ | 1 - sources/FILEPKG.~4~ | 2 - sources/FILEPKG.~6~ | 13 - sources/FILEPKG.~7~ | 13 - sources/FILEPKG.~8~ | 13 - sources/FILEPKG.~9~ | 13 - sources/LLKEY.LCOM.~1~ | 141 --- sources/LLKEY.LCOM.~4~ | Bin 64460 -> 0 bytes sources/LLKEY.~1~ | 1779 ---------------------------- sources/LLKEY.~4~ | 35 - sources/MAKEINIT.LCOM.~9~ | Bin 12989 -> 0 bytes sources/MAKEINIT.~1~ | 1 - sunloadup/LLPARAMS | 1705 -------------------------- 28 files changed, 3722 deletions(-) delete mode 100644 greetfiles/MAKEINITGREET delete mode 100644 greetfiles/MAKEINITGREET.LCOM delete mode 100644 greetfiles/MAKEINITGREET.LCOM.~27~ delete mode 100644 greetfiles/MAKEINITGREET.~1~ delete mode 100644 greetfiles/MAKEINITGREET.~27~ delete mode 100644 greetfiles/MAKEINITGREET.~28~ delete mode 100644 sources/FILEPKG.LCOM.~10~ delete mode 100644 sources/FILEPKG.LCOM.~11~ delete mode 100644 sources/FILEPKG.LCOM.~12~ delete mode 100644 sources/FILEPKG.LCOM.~13~ delete mode 100644 sources/FILEPKG.LCOM.~7~ delete mode 100644 sources/FILEPKG.LCOM.~8~ delete mode 100644 sources/FILEPKG.LCOM.~9~ delete mode 100644 sources/FILEPKG.~10~ delete mode 100644 sources/FILEPKG.~11~ delete mode 100644 sources/FILEPKG.~12~ delete mode 100644 sources/FILEPKG.~4~ delete mode 100644 sources/FILEPKG.~6~ delete mode 100644 sources/FILEPKG.~7~ delete mode 100644 sources/FILEPKG.~8~ delete mode 100644 sources/FILEPKG.~9~ delete mode 100644 sources/LLKEY.LCOM.~1~ delete mode 100644 sources/LLKEY.LCOM.~4~ delete mode 100644 sources/LLKEY.~1~ delete mode 100644 sources/LLKEY.~4~ delete mode 100644 sources/MAKEINIT.LCOM.~9~ delete mode 100644 sources/MAKEINIT.~1~ delete mode 100644 sunloadup/LLPARAMS diff --git a/greetfiles/MAKEINITGREET b/greetfiles/MAKEINITGREET deleted file mode 100644 index efd13e38..00000000 --- a/greetfiles/MAKEINITGREET +++ /dev/null @@ -1 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED " 5-Dec-2017 15:26:33"  {DSK}Personal>local>medley3.5>current>MAKEINITGREET.;28 5332 changes to%: (FNS MAKEINITGREET) previous date%: "28-Jun-2017 23:52:03" {DSK}Personal>local>medley3.5>current>MAKEINITGREET.;27) (PRETTYCOMPRINT MAKEINITGREETCOMS) (RPAQQ MAKEINITGREETCOMS [(FNS MAKEINITGREET) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MAKEINITGREET]) (DEFINEQ (MAKEINITGREET [LAMBDA NIL (* ; "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "Make the INIT.DLINIT starting sysout for a new loadup. Derived from MAKEINIT.CM") (* ;; "IF YOU EDIT THIS FILE, EDIT LOADINITSLOW.CM TOO!!!! ") (* ;; " Edit November 3, 1987 by vanMelle, note comment ") (* ;; " The path given to the Lisp command below should point to the LispCore sysout cache. ") (* ;; " Code that runs after Lisp starts up assures that the cached sysout is the most recent, and if not, fetches a new one and restarts itself. ") (* ;; " Edited so that the most recent patch file is loaded ") (* ;; " Updated Lisp version for big physical memory --bvm |11/3/87") (* ;; "Delete INIT.DFASL!* INIT.SAVE*, otherwise Lisp might read INIT.LISP!2 Copy INIT.SAVE _ INIT.DFASL ") (* ;; " save away site file to be restored below") (* ;; "Start inside $medleydir/sources medley -greet current/MAKEINITGREET -lisp") (* ;; "") (CNDIR (CONCAT MEDLEYDIR '/sources)) (DRIBBLE '../basics/next/MAKEINIT.DRIB) (XCL:RESTORE-PROFILE "INTERLISP") (DELFILE '../current/INIT.DFASL) (AND (INFILEP 'current/INIT.SAVE) (RENAMEFILE '../current/INIT.SAVE '../current/INIT.DFASL)) (* Make sure we have a valid sysout) (LET [INITIMAGE INITDLFILE (DATE (CAR (NLSETQ (GETFILEINFO '../basics/FULL.SYSOUT 'ICREATIONDATE] [IF [AND NIL DATE (IGREATERP DATE (GETFILEINFO '../basics/Lisp.Sysout 'ICREATIONDATE] THEN (* Get new saved sysout) (NLSETQ (PROGN (COPYFILE '..basics/FULL.SYSOUT '{DSK7}LispCore.Sysout;1) (* ;; "This was to copy all the loadup commands below") (COPYFILE '{DSK}REM.CM;1 '{CORE}REM.CM) (* Repeat current command now) (OUTFILE '{DSK}REM.CM;1) (PRIN1 '@LoadInit.cm@) (COPYBYTES (OPENSTREAM '{CORE}REM.CM 'INPUT)) (CLOSEF) (LOGOUT T] (PROGN (* Make old sysout work with new  read tables) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM FILERDTBL) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM CODERDTBL) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM \ORIGREADTABLE)) (* (LOAD (QUOTE LOAD-LISPCORE-PATCH))) (* ; "Doesn't exist") (SETQ DIRECTORIES '(../sources ../library ../internal/library)) (SETQ LITATOM-PACKAGE-CONVERSION-ENABLED NIL) (SETQ *REMOVE-INTERLISP-COMMENTS* NIL) (* Get new exports since last loadup) (LOAD 'CONDITION-PACKAGE.LCOM 'SYSLOAD) (LOAD 'XCL-PACKAGE.LCOM 'SYSLOAD) (* FILESETS has where to get things  from) (LOAD 'FILESETS) (FILESLOAD RENAMEFNS MAKEINIT DLFIXINIT CMLARRAY-SUPPORT VMEM) (* ; "rmk: VMEM has WORDARRAY") (* Versions are Lisp Microcode Bcpl) (IDLE.SET.OPTION 'TIMEOUT 0) (IDLE.SET.OPTION 'SAVEVM 0) (PRINTOUT T T T "Starting DORENAME" T T) (DORENAME 'I) (PRINTOUT T T T T "DORENAME finished, starting MAKEINIT" T) [SETQ INITIMAGE (MAKEINIT '(39424 5682 11008) NIL '../basics/next/INIT.SYSOUT '(../sources/ ../internal/library/ ../library/] (PRINTOUT T T T T "MAKEINIT finished, starting DLFIXINIT" T) (SETQ INITDLFILE (DLFIXINIT INITIMAGE '../basics/next/INIT.DLINIT '../sunloadup/LispDlion.db 300)) (PRINTOUT T T "Initial sysout saved to " INITDLFILE T) (COPYFILE '../sunloadup/XREM-NOETHER.CM (CONCAT '{DSK}/Users/ (USERNAME) '/REM.CM)) (DRIBBLE) (* ; "Why logout? (LOGOUT T)") INITDLFILE]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (MAKEINITGREET) ) (PUTPROPS MAKEINITGREET COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (503 5211 (MAKEINITGREET 513 . 5209))))) STOP \ No newline at end of file diff --git a/greetfiles/MAKEINITGREET.LCOM b/greetfiles/MAKEINITGREET.LCOM deleted file mode 100644 index 4ba1a61114c13677dfb988a63780c2651e747af3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3232 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.5>current>MAKEINITGREET.;1 4254 changes to%: (VARS MAKEINITGREETCOMS) (FNS MAKEINITGREET)) (PRETTYCOMPRINT MAKEINITGREETCOMS) (RPAQQ MAKEINITGREETCOMS ((FNS MAKEINITGREET))) (DEFINEQ (MAKEINITGREET [LAMBDA NIL (* ; "Edited 24-Jun-2017 19:26 by rmk:") (( (* ;; "Make the INIT.DLINIT starting sysout for a new loadup. Derived from MAKEINIT.CM") (* ;; "IF YOU EDIT THIS FILE, EDIT LOADINITSLOW.CM TOO!!!! ") (* ;; " Edit November 3, 1987 by vanMelle, note comment ") (* ;; " The path given to the Lisp command below should point to the LispCore sysout cache. ") (* ;; " Code that runs after Lisp starts up assures that the cached sysout is the most recent, and if not, fetches a new one and restarts itself. ") (* ;; " Edited so that the most recent patch file is loaded ") (* ;; " Updated Lisp version for big physical memory --bvm |11/3/87") (* ;; "Delete INIT.DFASL!* INIT.SAVE*, otherwise Lisp might read INIT.LISP!2 Copy INIT.SAVE _ INIT.DFASL ") (* ;; " save away site file to be restored below") ) (* ;; "Start inside $medleydir medley -greet current/MAKEINITGREET -lisp") (* ;; "") (XCL:RESTORE-PROFILE "INTERLISP") (DELFILE 'current/INIT.DFASL) (AND (INFILEP 'current/INIT.SAVE) (RENAMEFILE 'current/INIT.SAVE current/INIT.DFASL)) (DIRECTORY 'current/INIT.DLINIT;* '(DELETE)) (* Make sure we have a valid sysout) [LET [(DATE (CAR (NLSETQ (GETFILEINFO basics/FULL.SYSOUT 'ICREATIONDATE] (IF [AND NIL DATE (IGREATERP DATE (GETFILEINFO 'basics/Lisp.Sysout 'ICREATIONDATE] THEN (* Get new saved sysout) (NLSETQ (PROGN (COPYFILE 'basics/FULL.SYSOUT '{DSK7}LispCore.Sysout;1) (COPYFILE '{DSK}REM.CM;1 '{CORE}REM.CM) (* Repeat current command now) (OUTFILE '{DSK}REM.CM;1) (PRIN1 '@LoadInit.cm@) (COPYBYTES (OPENSTREAM '{CORE}REM.CM 'INPUT)) (CLOSEF) (LOGOUT T] (PROGN (* Make old sysout work with new  read tables) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM FILERDTBL) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM CODERDTBL) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM \ORIGREADTABLE)) (* (LOAD (QUOTE LOAD-LISPCORE-PATCH))) (* ; "Doesn't exist") (SETQ DIRECTORIES '(sources/ /library internal/library)) (SETQ LITATOM-PACKAGE-CONVERSION-ENABLED NIL) (SETQ *REMOVE-INTERLISP-COMMENTS* NIL) (* Get new exports since last loadup) (LOAD 'CONDITION-PACKAGE.LCOM 'SYSLOAD) (LOAD 'XCL-PACKAGE.LCOM 'SYSLOAD) (* FILESETS has where to get things  from) (LOAD 'FILESETS) (FILESLOAD RENAMEFNS MAKEINIT DLFIXINIT CMLARRAY-SUPPORT) (* Versions are Lisp Microcode Bcpl) (PROGN (CNDIR '{CORE}) (* ; "CNDIR doesn't know about {CORE}") (IDLE.SET.OPTION 'TIMEOUT 0) (IDLE.SET.OPTION 'SAVEVM 0) (DORENAME 'I) (DLFIXINIT (MAKEINIT '(39424 5682 11008) NIL NIL '(sources/ /internal/library/ library/) 'INIT.DLINIT LispDLion.db 300) (LOGOUT T))) NIL]) ) (PUTPROPS MAKEINITGREET COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (355 4189 (MAKEINITGREET 365 . 4187))))) STOP \ No newline at end of file diff --git a/greetfiles/MAKEINITGREET.~27~ b/greetfiles/MAKEINITGREET.~27~ deleted file mode 100644 index aad40f96..00000000 --- a/greetfiles/MAKEINITGREET.~27~ +++ /dev/null @@ -1 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "28-Jun-2017 23:52:03"  {DSK}Personal>local>medley3.5>current>MAKEINITGREET.;27 5323 changes to%: (FNS MAKEINITGREET) previous date%: "28-Jun-2017 23:51:37" {DSK}Personal>local>medley3.5>current>MAKEINITGREET.;26) (PRETTYCOMPRINT MAKEINITGREETCOMS) (RPAQQ MAKEINITGREETCOMS [(FNS MAKEINITGREET) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MAKEINITGREET]) (DEFINEQ (MAKEINITGREET [LAMBDA NIL (* ; "Edited 28-Jun-2017 23:52 by rmk:") (* ;; "Make the INIT.DLINIT starting sysout for a new loadup. Derived from MAKEINIT.CM") (* ;; "IF YOU EDIT THIS FILE, EDIT LOADINITSLOW.CM TOO!!!! ") (* ;; " Edit November 3, 1987 by vanMelle, note comment ") (* ;; " The path given to the Lisp command below should point to the LispCore sysout cache. ") (* ;; " Code that runs after Lisp starts up assures that the cached sysout is the most recent, and if not, fetches a new one and restarts itself. ") (* ;; " Edited so that the most recent patch file is loaded ") (* ;; " Updated Lisp version for big physical memory --bvm |11/3/87") (* ;; "Delete INIT.DFASL!* INIT.SAVE*, otherwise Lisp might read INIT.LISP!2 Copy INIT.SAVE _ INIT.DFASL ") (* ;; " save away site file to be restored below") (* ;; "Start inside $medleydir/sources medley -greet current/MAKEINITGREET -lisp") (* ;; "") (CNDIR (CONCAT MEDLEYDIR '/sources)) (DRIBBLE '../basics/next/MAKEINIT.DRIB) (XCL:RESTORE-PROFILE "INTERLISP") (DELFILE '../current/INIT.DFASL) (AND (INFILEP 'current/INIT.SAVE) (RENAMEFILE '../current/INIT.SAVE '../current/INIT.DFASL)) (* Make sure we have a valid sysout) (LET [INITIMAGE INITDLFILE (DATE (CAR (NLSETQ (GETFILEINFO '../basics/FULL.SYSOUT 'ICREATIONDATE] [IF [AND NIL DATE (IGREATERP DATE (GETFILEINFO '../basics/Lisp.Sysout 'ICREATIONDATE] THEN (* Get new saved sysout) (NLSETQ (PROGN (COPYFILE '..basics/FULL.SYSOUT '{DSK7}LispCore.Sysout;1) (* ;; "This was to copy all the loadup commands below") (COPYFILE '{DSK}REM.CM;1 '{CORE}REM.CM) (* Repeat current command now) (OUTFILE '{DSK}REM.CM;1) (PRIN1 '@LoadInit.cm@) (COPYBYTES (OPENSTREAM '{CORE}REM.CM 'INPUT)) (CLOSEF) (LOGOUT T] (PROGN (* Make old sysout work with new  read tables) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM FILERDTBL) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM CODERDTBL) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM \ORIGREADTABLE)) (* (LOAD (QUOTE LOAD-LISPCORE-PATCH))) (* ; "Doesn't exist") (SETQ DIRECTORIES '(../sources ../library ../internal/library)) (SETQ LITATOM-PACKAGE-CONVERSION-ENABLED NIL) (SETQ *REMOVE-INTERLISP-COMMENTS* NIL) (* Get new exports since last loadup) (LOAD 'CONDITION-PACKAGE.LCOM 'SYSLOAD) (LOAD 'XCL-PACKAGE.LCOM 'SYSLOAD) (* FILESETS has where to get things  from) (LOAD 'FILESETS) (FILESLOAD RENAMEFNS MAKEINIT DLFIXINIT CMLARRAY-SUPPORT VMEM) (* ; "rmk: VMEM has WORDARRAY") (* Versions are Lisp Microcode Bcpl) (IDLE.SET.OPTION 'TIMEOUT 0) (IDLE.SET.OPTION 'SAVEVM 0) (PRINTOUT T T T "Starting DORENAME" T T) (DORENAME 'I) (PRINTOUT T T T T "DORENAME finished, starting MAKEINIT" T) [SETQ INITIMAGE (MAKEINIT '(39424 5682 11008) NIL '{CORE}INIT.SYSOUT '(../sources/ ../internal/library/ ../library/] (PRINTOUT T T T T "MAKEINIT finished, starting DLFIXINIT" T) (SETQ INITDLFILE (DLFIXINIT INITIMAGE '../basics/next/INIT.DLINIT '../sunloadup/LispDlion.db 300)) (PRINTOUT T T "Initial sysout saved to " INITDLFILE T) (COPYFILE '../sunloadup/XREM-NOETHER.CM (CONCAT '{DSK}/Users/ (USERNAME) '/REM.CM)) (DRIBBLE) (* ; "Why logout? (LOGOUT T)") INITDLFILE]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (MAKEINITGREET) ) (PUTPROPS MAKEINITGREET COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (503 5202 (MAKEINITGREET 513 . 5200))))) STOP \ No newline at end of file diff --git a/greetfiles/MAKEINITGREET.~28~ b/greetfiles/MAKEINITGREET.~28~ deleted file mode 100644 index efd13e38..00000000 --- a/greetfiles/MAKEINITGREET.~28~ +++ /dev/null @@ -1 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED " 5-Dec-2017 15:26:33"  {DSK}Personal>local>medley3.5>current>MAKEINITGREET.;28 5332 changes to%: (FNS MAKEINITGREET) previous date%: "28-Jun-2017 23:52:03" {DSK}Personal>local>medley3.5>current>MAKEINITGREET.;27) (PRETTYCOMPRINT MAKEINITGREETCOMS) (RPAQQ MAKEINITGREETCOMS [(FNS MAKEINITGREET) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MAKEINITGREET]) (DEFINEQ (MAKEINITGREET [LAMBDA NIL (* ; "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "Make the INIT.DLINIT starting sysout for a new loadup. Derived from MAKEINIT.CM") (* ;; "IF YOU EDIT THIS FILE, EDIT LOADINITSLOW.CM TOO!!!! ") (* ;; " Edit November 3, 1987 by vanMelle, note comment ") (* ;; " The path given to the Lisp command below should point to the LispCore sysout cache. ") (* ;; " Code that runs after Lisp starts up assures that the cached sysout is the most recent, and if not, fetches a new one and restarts itself. ") (* ;; " Edited so that the most recent patch file is loaded ") (* ;; " Updated Lisp version for big physical memory --bvm |11/3/87") (* ;; "Delete INIT.DFASL!* INIT.SAVE*, otherwise Lisp might read INIT.LISP!2 Copy INIT.SAVE _ INIT.DFASL ") (* ;; " save away site file to be restored below") (* ;; "Start inside $medleydir/sources medley -greet current/MAKEINITGREET -lisp") (* ;; "") (CNDIR (CONCAT MEDLEYDIR '/sources)) (DRIBBLE '../basics/next/MAKEINIT.DRIB) (XCL:RESTORE-PROFILE "INTERLISP") (DELFILE '../current/INIT.DFASL) (AND (INFILEP 'current/INIT.SAVE) (RENAMEFILE '../current/INIT.SAVE '../current/INIT.DFASL)) (* Make sure we have a valid sysout) (LET [INITIMAGE INITDLFILE (DATE (CAR (NLSETQ (GETFILEINFO '../basics/FULL.SYSOUT 'ICREATIONDATE] [IF [AND NIL DATE (IGREATERP DATE (GETFILEINFO '../basics/Lisp.Sysout 'ICREATIONDATE] THEN (* Get new saved sysout) (NLSETQ (PROGN (COPYFILE '..basics/FULL.SYSOUT '{DSK7}LispCore.Sysout;1) (* ;; "This was to copy all the loadup commands below") (COPYFILE '{DSK}REM.CM;1 '{CORE}REM.CM) (* Repeat current command now) (OUTFILE '{DSK}REM.CM;1) (PRIN1 '@LoadInit.cm@) (COPYBYTES (OPENSTREAM '{CORE}REM.CM 'INPUT)) (CLOSEF) (LOGOUT T] (PROGN (* Make old sysout work with new  read tables) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM FILERDTBL) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM CODERDTBL) (SETSYNTAX (CHARCODE ^^) 'PACKAGEDELIM \ORIGREADTABLE)) (* (LOAD (QUOTE LOAD-LISPCORE-PATCH))) (* ; "Doesn't exist") (SETQ DIRECTORIES '(../sources ../library ../internal/library)) (SETQ LITATOM-PACKAGE-CONVERSION-ENABLED NIL) (SETQ *REMOVE-INTERLISP-COMMENTS* NIL) (* Get new exports since last loadup) (LOAD 'CONDITION-PACKAGE.LCOM 'SYSLOAD) (LOAD 'XCL-PACKAGE.LCOM 'SYSLOAD) (* FILESETS has where to get things  from) (LOAD 'FILESETS) (FILESLOAD RENAMEFNS MAKEINIT DLFIXINIT CMLARRAY-SUPPORT VMEM) (* ; "rmk: VMEM has WORDARRAY") (* Versions are Lisp Microcode Bcpl) (IDLE.SET.OPTION 'TIMEOUT 0) (IDLE.SET.OPTION 'SAVEVM 0) (PRINTOUT T T T "Starting DORENAME" T T) (DORENAME 'I) (PRINTOUT T T T T "DORENAME finished, starting MAKEINIT" T) [SETQ INITIMAGE (MAKEINIT '(39424 5682 11008) NIL '../basics/next/INIT.SYSOUT '(../sources/ ../internal/library/ ../library/] (PRINTOUT T T T T "MAKEINIT finished, starting DLFIXINIT" T) (SETQ INITDLFILE (DLFIXINIT INITIMAGE '../basics/next/INIT.DLINIT '../sunloadup/LispDlion.db 300)) (PRINTOUT T T "Initial sysout saved to " INITDLFILE T) (COPYFILE '../sunloadup/XREM-NOETHER.CM (CONCAT '{DSK}/Users/ (USERNAME) '/REM.CM)) (DRIBBLE) (* ; "Why logout? (LOGOUT T)") INITDLFILE]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (MAKEINITGREET) ) (PUTPROPS MAKEINITGREET COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (503 5211 (MAKEINITGREET 513 . 5209))))) STOP \ No newline at end of file diff --git a/sources/FILEPKG.LCOM.~10~ b/sources/FILEPKG.LCOM.~10~ deleted file mode 100644 index 5a12cc746473d2109eefbbfcfccf8098444c8702..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102732 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 diff --git a/sources/FILEPKG.LCOM.~11~ b/sources/FILEPKG.LCOM.~11~ deleted file mode 100644 index 2dcdd489ff01e0e462c658da1205c0f747968c96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103287 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 R7MZNN%Tzd6(uYI#$D&Ow! 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 diff --git a/sources/FILEPKG.LCOM.~12~ b/sources/FILEPKG.LCOM.~12~ deleted file mode 100644 index 4ec81efe06b59652959576cfd7086221d3eae265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103331 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 diff --git a/sources/FILEPKG.LCOM.~13~ b/sources/FILEPKG.LCOM.~13~ deleted file mode 100644 index c3d5a0d857fdc175b963d9a9542121d1889deabe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103352 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%0A{Osm1vMYqFT({Oi&jvPOZlC`W#qW7@7 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

YkP#cQFD8Mu3ji7XZ}2Ht2Jy<`w7mps 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 diff --git a/sources/FILEPKG.LCOM.~9~ b/sources/FILEPKG.LCOM.~9~ deleted file mode 100644 index db587672f0033f19aba5f811c30614bed3a07b1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102722 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 diff --git a/sources/FILEPKG.~10~ b/sources/FILEPKG.~10~ deleted file mode 100644 index b849fd17..00000000 --- a/sources/FILEPKG.~10~ +++ /dev/null @@ -1 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "10-Aug-2020 21:19:02"  {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;10 284784 changes to%: (VARS FILEPKGCOMS) (FNS ADDTOFILES?) previous date%: " 8-Aug-2020 17:33:31" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;9) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018, 2020 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file") (VARS [ADDTOFILEKEYLST `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% ) RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST (] (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only "] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST )))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 29-Aug-89 11:46 by bvm") (PROG* ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? ROOTNAME)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (ROOTNAME) (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET ROOTNAME 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 10-Aug-2020 21:18 by rmk:") (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (* ;; "RMK: Eliminated literal CR's in the key list.") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") `([Y ,(CONCAT "es" (CHARACTER (CHARCODE EOL] [N ,(CONCAT "o" (CHARACTER (CHARCODE EOL] (%] ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (* ; "Nowhere") (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (* ;; "SELCHARQ to avoid literal CR") (SELCHARQ (CHCON1 (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T))) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (* ; "Nowhere") (SETQ FILE)) (SPACE (* ; "No action") (RETURN)) ((LF =) (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file" ) (RPAQ ADDTOFILEKEYLST `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% ) RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST ()))) (RPAQQ LASTFILE NIL) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 8-Aug-2020 17:32 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only ")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (22824 24529 (SEARCHPRETTYTYPELST 22834 . 23813) (PRETTYDEFMACROS 23815 . 24273) ( FILEPKGCOMPROPS 24275 . 24527)) (25331 59272 (CLEANUP 25341 . 26729) (COMPILEFILES 26731 . 27007) ( COMPILEFILES0 27009 . 27729) (CONTINUEDIT 27731 . 29151) (MAKEFILE 29153 . 40795) (FILECHANGES 40797 . 43132) (FILEPKG.MERGECHANGES 43134 . 43957) (FILEPKG.CHANGEDFNS 43959 . 44271) (MAKEFILE1 44273 . 48543) (COMPILE-FILE? 48545 . 49877) (MAKEFILES 49879 . 51572) (ADDFILE 51574 . 54095) (ADDFILE0 54097 . 58233) (LISTFILES 58235 . 59270)) (59960 95200 (FILEPKGCHANGES 59970 . 61320) (GETFILEPKGTYPE 61322 . 64395) (MARKASCHANGED 64397 . 66034) (FILECOMS 66036 . 66420) (WHEREIS 66422 . 67842) ( SMASHFILECOMS 67844 . 68079) (FILEFNSLST 68081 . 68243) (FILECOMSLST 68245 . 68729) (UPDATEFILES 68731 . 74031) (INFILECOMS? 74033 . 75936) (INFILECOMTAIL 75938 . 77078) (INFILECOMS 77080 . 77241) ( INFILECOM 77243 . 87452) (INFILECOMSVALS 87454 . 87781) (INFILECOMSVAL 87783 . 88785) (INFILECOMSPROP 88787 . 89616) (IFCPROPS 89618 . 90879) (IFCEXPRTYPE 90881 . 91392) (IFCPROPSCAN 91394 . 92447) ( IFCDECLARE 92449 . 93760) (INFILEPAIRS 93762 . 94094) (INFILECOMSMACRO 94096 . 95198)) (95235 126011 ( FILES? 95245 . 97438) (FILES?1 97440 . 98090) (FILES?PRINTLST 98092 . 98874) (ADDTOFILES? 98876 . 109478) (ADDTOFILE 109480 . 110396) (WHATIS 110398 . 112374) (ADDTOCOMS 112376 . 114020) (ADDTOCOM 114022 . 120569) (ADDTOCOM1 120571 . 121742) (ADDNEWCOM 121744 . 122794) (MAKENEWCOM 122796 . 124639) (DEFAULTMAKENEWCOM 124641 . 126009)) (126081 128898 (MERGEINSERT 126091 . 128434) (MERGEINSERT1 128436 . 128896)) (130397 141309 (DELFROMFILES 130407 . 131257) (DELFROMCOMS 131259 . 132938) (DELFROMCOM 132940 . 138808) (DELFROMCOM1 138810 . 139607) (REMOVEITEM 139609 . 140483) (MOVETOFILE 140485 . 141307)) (141523 143892 (SAVEPUT 141533 . 143890)) (144017 152341 (UNMARKASCHANGED 144027 . 145735) ( PREEDITFN 145737 . 148248) (POSTEDITPROPS 148250 . 150751) (POSTEDITALISTS 150753 . 152339)) (152490 173044 (ALISTS.GETDEF 152500 . 152879) (ALISTS.WHENCHANGED 152881 . 153525) (CLEARCLISPARRAY 153527 . 154701) (EXPRESSIONS.WHENCHANGED 154703 . 155077) (MAKEALISTCOMS 155079 . 156152) (MAKEFILESCOMS 156154 . 157591) (MAKELISPXMACROSCOMS 157593 . 159611) (MAKEPROPSCOMS 159613 . 160311) ( MAKEUSERMACROSCOMS 160313 . 162113) (PROPS.WHENCHANGED 162115 . 162736) (FILEGETDEF.LISPXMACROS 162738 . 164180) (FILEGETDEF.ALISTS 164182 . 164801) (FILEGETDEF.RECORDS 164803 . 165734) (FILEGETDEF.PROPS 165736 . 166528) (FILEGETDEF.MACROS 166530 . 167590) (FILEGETDEF.VARS 167592 . 168008) (FILEGETDEF.FNS 168010 . 169374) (FILEPKGCOMS.PUTDEF 169376 . 171816) (FILES.PUTDEF 171818 . 172775) (VARS.PUTDEF 172777 . 172920) (FILES.WHENCHANGED 172922 . 173042)) (175066 182499 (RENAME 175076 . 176477) ( CHANGECALLERS 176479 . 182497)) (182500 230448 (SHOWDEF 182510 . 183303) (COPYDEF 183305 . 185779) ( GETDEF 185781 . 188057) (GETDEFCOM 188059 . 189025) (GETDEFCOM0 189027 . 190373) (GETDEFCURRENT 190375 . 196795) (GETDEFERR 196797 . 198098) (GETDEFFROMFILE 198100 . 202380) (GETDEFSAVED 202382 . 203486) (PUTDEF 203488 . 204191) (EDITDEF 204193 . 205170) (DEFAULT.EDITDEF 205172 . 208008) (EDITDEF.FILES 208010 . 208211) (LOADDEF 208213 . 208389) (DWIMDEF 208391 . 209245) (DELDEF 209247 . 212261) ( DELFROMLIST 212263 . 212767) (HASDEF 212769 . 219091) (GETFILEDEF 219093 . 219615) (SAVEDEF 219617 . 221276) (UNSAVEDEF 221278 . 222174) (COMPAREDEFS 222176 . 225478) (COMPARE 225480 . 226184) (TYPESOF 226186 . 230446)) (230515 235558 (FIXEDITDATE 230525 . 234028) (EDITDATE? 234030 . 235556)) (235977 244563 (FILEPKGCOM 235987 . 240920) (FILEPKGTYPE 240922 . 244561)) (256600 271152 (FINDCALLERS 256610 . 257125) (EDITCALLERS 257127 . 264785) (EDITFROMFILE 264787 . 270467) (FINDATS 270469 . 270741) ( LOOKIN 270743 . 271150)) (271153 272880 (SEPRCASE 271163 . 272878)) (273397 278939 (IMPORTFILE 273407 . 274381) (IMPORTEVAL 274383 . 275263) (IMPORTFILESCAN 275265 . 275686) (CHECKIMPORTS 275688 . 277024 ) (GATHEREXPORTS 277026 . 278349) (\DUMPEXPORTS 278351 . 278937)) (279277 281485 (CLEARFILEPKG 279287 . 281483))))) STOP \ No newline at end of file diff --git a/sources/FILEPKG.~11~ b/sources/FILEPKG.~11~ deleted file mode 100644 index 452adc78..00000000 --- a/sources/FILEPKG.~11~ +++ /dev/null @@ -1 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "10-Aug-2020 21:24:58"  {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;11 284888 changes to%: (VARS FILEPKGCOMS) (FNS ADDTOFILES?) previous date%: " 8-Aug-2020 17:33:31" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;9) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018, 2020 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file") (VARS [ADDTOFILEKEYLST `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] (@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG [,(CHARACTER (CHARCODE EOL] RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST (] (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only "] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST )))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 29-Aug-89 11:46 by bvm") (PROG* ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? ROOTNAME)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (ROOTNAME) (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET ROOTNAME 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 10-Aug-2020 21:18 by rmk:") (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (* ;; "RMK: Eliminated literal CR's in the key list.") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") `([Y ,(CONCAT "es" (CHARACTER (CHARCODE EOL] [N ,(CONCAT "o" (CHARACTER (CHARCODE EOL] (%] ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (* ; "Nowhere") (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (* ;; "SELCHARQ to avoid literal CR") (SELCHARQ (CHCON1 (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T))) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (* ; "Nowhere") (SETQ FILE)) (SPACE (* ; "No action") (RETURN)) ((LF =) (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file" ) (RPAQ ADDTOFILEKEYLST `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] (@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG [,(CHARACTER (CHARCODE EOL] RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST ()))) (RPAQQ LASTFILE NIL) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 8-Aug-2020 17:32 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only ")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (22908 24613 (SEARCHPRETTYTYPELST 22918 . 23897) (PRETTYDEFMACROS 23899 . 24357) ( FILEPKGCOMPROPS 24359 . 24611)) (25415 59356 (CLEANUP 25425 . 26813) (COMPILEFILES 26815 . 27091) ( COMPILEFILES0 27093 . 27813) (CONTINUEDIT 27815 . 29235) (MAKEFILE 29237 . 40879) (FILECHANGES 40881 . 43216) (FILEPKG.MERGECHANGES 43218 . 44041) (FILEPKG.CHANGEDFNS 44043 . 44355) (MAKEFILE1 44357 . 48627) (COMPILE-FILE? 48629 . 49961) (MAKEFILES 49963 . 51656) (ADDFILE 51658 . 54179) (ADDFILE0 54181 . 58317) (LISTFILES 58319 . 59354)) (60044 95284 (FILEPKGCHANGES 60054 . 61404) (GETFILEPKGTYPE 61406 . 64479) (MARKASCHANGED 64481 . 66118) (FILECOMS 66120 . 66504) (WHEREIS 66506 . 67926) ( SMASHFILECOMS 67928 . 68163) (FILEFNSLST 68165 . 68327) (FILECOMSLST 68329 . 68813) (UPDATEFILES 68815 . 74115) (INFILECOMS? 74117 . 76020) (INFILECOMTAIL 76022 . 77162) (INFILECOMS 77164 . 77325) ( INFILECOM 77327 . 87536) (INFILECOMSVALS 87538 . 87865) (INFILECOMSVAL 87867 . 88869) (INFILECOMSPROP 88871 . 89700) (IFCPROPS 89702 . 90963) (IFCEXPRTYPE 90965 . 91476) (IFCPROPSCAN 91478 . 92531) ( IFCDECLARE 92533 . 93844) (INFILEPAIRS 93846 . 94178) (INFILECOMSMACRO 94180 . 95282)) (95319 126095 ( FILES? 95329 . 97522) (FILES?1 97524 . 98174) (FILES?PRINTLST 98176 . 98958) (ADDTOFILES? 98960 . 109562) (ADDTOFILE 109564 . 110480) (WHATIS 110482 . 112458) (ADDTOCOMS 112460 . 114104) (ADDTOCOM 114106 . 120653) (ADDTOCOM1 120655 . 121826) (ADDNEWCOM 121828 . 122878) (MAKENEWCOM 122880 . 124723) (DEFAULTMAKENEWCOM 124725 . 126093)) (126165 128982 (MERGEINSERT 126175 . 128518) (MERGEINSERT1 128520 . 128980)) (130501 141413 (DELFROMFILES 130511 . 131361) (DELFROMCOMS 131363 . 133042) (DELFROMCOM 133044 . 138912) (DELFROMCOM1 138914 . 139711) (REMOVEITEM 139713 . 140587) (MOVETOFILE 140589 . 141411)) (141627 143996 (SAVEPUT 141637 . 143994)) (144121 152445 (UNMARKASCHANGED 144131 . 145839) ( PREEDITFN 145841 . 148352) (POSTEDITPROPS 148354 . 150855) (POSTEDITALISTS 150857 . 152443)) (152594 173148 (ALISTS.GETDEF 152604 . 152983) (ALISTS.WHENCHANGED 152985 . 153629) (CLEARCLISPARRAY 153631 . 154805) (EXPRESSIONS.WHENCHANGED 154807 . 155181) (MAKEALISTCOMS 155183 . 156256) (MAKEFILESCOMS 156258 . 157695) (MAKELISPXMACROSCOMS 157697 . 159715) (MAKEPROPSCOMS 159717 . 160415) ( MAKEUSERMACROSCOMS 160417 . 162217) (PROPS.WHENCHANGED 162219 . 162840) (FILEGETDEF.LISPXMACROS 162842 . 164284) (FILEGETDEF.ALISTS 164286 . 164905) (FILEGETDEF.RECORDS 164907 . 165838) (FILEGETDEF.PROPS 165840 . 166632) (FILEGETDEF.MACROS 166634 . 167694) (FILEGETDEF.VARS 167696 . 168112) (FILEGETDEF.FNS 168114 . 169478) (FILEPKGCOMS.PUTDEF 169480 . 171920) (FILES.PUTDEF 171922 . 172879) (VARS.PUTDEF 172881 . 173024) (FILES.WHENCHANGED 173026 . 173146)) (175170 182603 (RENAME 175180 . 176581) ( CHANGECALLERS 176583 . 182601)) (182604 230552 (SHOWDEF 182614 . 183407) (COPYDEF 183409 . 185883) ( GETDEF 185885 . 188161) (GETDEFCOM 188163 . 189129) (GETDEFCOM0 189131 . 190477) (GETDEFCURRENT 190479 . 196899) (GETDEFERR 196901 . 198202) (GETDEFFROMFILE 198204 . 202484) (GETDEFSAVED 202486 . 203590) (PUTDEF 203592 . 204295) (EDITDEF 204297 . 205274) (DEFAULT.EDITDEF 205276 . 208112) (EDITDEF.FILES 208114 . 208315) (LOADDEF 208317 . 208493) (DWIMDEF 208495 . 209349) (DELDEF 209351 . 212365) ( DELFROMLIST 212367 . 212871) (HASDEF 212873 . 219195) (GETFILEDEF 219197 . 219719) (SAVEDEF 219721 . 221380) (UNSAVEDEF 221382 . 222278) (COMPAREDEFS 222280 . 225582) (COMPARE 225584 . 226288) (TYPESOF 226290 . 230550)) (230619 235662 (FIXEDITDATE 230629 . 234132) (EDITDATE? 234134 . 235660)) (236081 244667 (FILEPKGCOM 236091 . 241024) (FILEPKGTYPE 241026 . 244665)) (256704 271256 (FINDCALLERS 256714 . 257229) (EDITCALLERS 257231 . 264889) (EDITFROMFILE 264891 . 270571) (FINDATS 270573 . 270845) ( LOOKIN 270847 . 271254)) (271257 272984 (SEPRCASE 271267 . 272982)) (273501 279043 (IMPORTFILE 273511 . 274485) (IMPORTEVAL 274487 . 275367) (IMPORTFILESCAN 275369 . 275790) (CHECKIMPORTS 275792 . 277128 ) (GATHEREXPORTS 277130 . 278453) (\DUMPEXPORTS 278455 . 279041)) (279381 281589 (CLEARFILEPKG 279391 . 281587))))) STOP \ No newline at end of file diff --git a/sources/FILEPKG.~12~ b/sources/FILEPKG.~12~ deleted file mode 100644 index cafb9363..00000000 --- a/sources/FILEPKG.~12~ +++ /dev/null @@ -1 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "27-Oct-2020 15:40:32"  {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;12 285044 changes to%: (FNS MAKEFILE1 COMPILE-FILE?) previous date%: "10-Aug-2020 21:24:58" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;11) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018, 2020 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file") (VARS [ADDTOFILEKEYLST `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] (@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG [,(CHARACTER (CHARCODE EOL] RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST (] (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only "] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST )))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 27-Oct-2020 15:40 by rmk:") (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "RMK: Call COMPILE-FILE? with FILE instead of (ROOTFILENAME FILE)") (PROG ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? FILE)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (FILE) (* ; "Edited 27-Oct-2020 15:39 by rmk:") (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;; "RMK: Argument is FILE instead of ROOTFILENAME, maybe more information") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET (ROOTFILENAME FILE) 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 10-Aug-2020 21:18 by rmk:") (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (* ;; "RMK: Eliminated literal CR's in the key list.") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") `([Y ,(CONCAT "es" (CHARACTER (CHARCODE EOL] [N ,(CONCAT "o" (CHARACTER (CHARCODE EOL] (%] ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (* ; "Nowhere") (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (* ;; "SELCHARQ to avoid literal CR") (SELCHARQ (CHCON1 (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T))) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (* ; "Nowhere") (SETQ FILE)) (SPACE (* ; "No action") (RETURN)) ((LF =) (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file" ) (RPAQ ADDTOFILEKEYLST `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] (@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG [,(CHARACTER (CHARCODE EOL] RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST ()))) (RPAQQ LASTFILE NIL) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 8-Aug-2020 17:32 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only ")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (22882 24587 (SEARCHPRETTYTYPELST 22892 . 23871) (PRETTYDEFMACROS 23873 . 24331) ( FILEPKGCOMPROPS 24333 . 24585)) (25389 59512 (CLEANUP 25399 . 26787) (COMPILEFILES 26789 . 27065) ( COMPILEFILES0 27067 . 27787) (CONTINUEDIT 27789 . 29209) (MAKEFILE 29211 . 40853) (FILECHANGES 40855 . 43190) (FILEPKG.MERGECHANGES 43192 . 44015) (FILEPKG.CHANGEDFNS 44017 . 44329) (MAKEFILE1 44331 . 48558) (COMPILE-FILE? 48560 . 50117) (MAKEFILES 50119 . 51812) (ADDFILE 51814 . 54335) (ADDFILE0 54337 . 58473) (LISTFILES 58475 . 59510)) (60200 95440 (FILEPKGCHANGES 60210 . 61560) (GETFILEPKGTYPE 61562 . 64635) (MARKASCHANGED 64637 . 66274) (FILECOMS 66276 . 66660) (WHEREIS 66662 . 68082) ( SMASHFILECOMS 68084 . 68319) (FILEFNSLST 68321 . 68483) (FILECOMSLST 68485 . 68969) (UPDATEFILES 68971 . 74271) (INFILECOMS? 74273 . 76176) (INFILECOMTAIL 76178 . 77318) (INFILECOMS 77320 . 77481) ( INFILECOM 77483 . 87692) (INFILECOMSVALS 87694 . 88021) (INFILECOMSVAL 88023 . 89025) (INFILECOMSPROP 89027 . 89856) (IFCPROPS 89858 . 91119) (IFCEXPRTYPE 91121 . 91632) (IFCPROPSCAN 91634 . 92687) ( IFCDECLARE 92689 . 94000) (INFILEPAIRS 94002 . 94334) (INFILECOMSMACRO 94336 . 95438)) (95475 126251 ( FILES? 95485 . 97678) (FILES?1 97680 . 98330) (FILES?PRINTLST 98332 . 99114) (ADDTOFILES? 99116 . 109718) (ADDTOFILE 109720 . 110636) (WHATIS 110638 . 112614) (ADDTOCOMS 112616 . 114260) (ADDTOCOM 114262 . 120809) (ADDTOCOM1 120811 . 121982) (ADDNEWCOM 121984 . 123034) (MAKENEWCOM 123036 . 124879) (DEFAULTMAKENEWCOM 124881 . 126249)) (126321 129138 (MERGEINSERT 126331 . 128674) (MERGEINSERT1 128676 . 129136)) (130657 141569 (DELFROMFILES 130667 . 131517) (DELFROMCOMS 131519 . 133198) (DELFROMCOM 133200 . 139068) (DELFROMCOM1 139070 . 139867) (REMOVEITEM 139869 . 140743) (MOVETOFILE 140745 . 141567)) (141783 144152 (SAVEPUT 141793 . 144150)) (144277 152601 (UNMARKASCHANGED 144287 . 145995) ( PREEDITFN 145997 . 148508) (POSTEDITPROPS 148510 . 151011) (POSTEDITALISTS 151013 . 152599)) (152750 173304 (ALISTS.GETDEF 152760 . 153139) (ALISTS.WHENCHANGED 153141 . 153785) (CLEARCLISPARRAY 153787 . 154961) (EXPRESSIONS.WHENCHANGED 154963 . 155337) (MAKEALISTCOMS 155339 . 156412) (MAKEFILESCOMS 156414 . 157851) (MAKELISPXMACROSCOMS 157853 . 159871) (MAKEPROPSCOMS 159873 . 160571) ( MAKEUSERMACROSCOMS 160573 . 162373) (PROPS.WHENCHANGED 162375 . 162996) (FILEGETDEF.LISPXMACROS 162998 . 164440) (FILEGETDEF.ALISTS 164442 . 165061) (FILEGETDEF.RECORDS 165063 . 165994) (FILEGETDEF.PROPS 165996 . 166788) (FILEGETDEF.MACROS 166790 . 167850) (FILEGETDEF.VARS 167852 . 168268) (FILEGETDEF.FNS 168270 . 169634) (FILEPKGCOMS.PUTDEF 169636 . 172076) (FILES.PUTDEF 172078 . 173035) (VARS.PUTDEF 173037 . 173180) (FILES.WHENCHANGED 173182 . 173302)) (175326 182759 (RENAME 175336 . 176737) ( CHANGECALLERS 176739 . 182757)) (182760 230708 (SHOWDEF 182770 . 183563) (COPYDEF 183565 . 186039) ( GETDEF 186041 . 188317) (GETDEFCOM 188319 . 189285) (GETDEFCOM0 189287 . 190633) (GETDEFCURRENT 190635 . 197055) (GETDEFERR 197057 . 198358) (GETDEFFROMFILE 198360 . 202640) (GETDEFSAVED 202642 . 203746) (PUTDEF 203748 . 204451) (EDITDEF 204453 . 205430) (DEFAULT.EDITDEF 205432 . 208268) (EDITDEF.FILES 208270 . 208471) (LOADDEF 208473 . 208649) (DWIMDEF 208651 . 209505) (DELDEF 209507 . 212521) ( DELFROMLIST 212523 . 213027) (HASDEF 213029 . 219351) (GETFILEDEF 219353 . 219875) (SAVEDEF 219877 . 221536) (UNSAVEDEF 221538 . 222434) (COMPAREDEFS 222436 . 225738) (COMPARE 225740 . 226444) (TYPESOF 226446 . 230706)) (230775 235818 (FIXEDITDATE 230785 . 234288) (EDITDATE? 234290 . 235816)) (236237 244823 (FILEPKGCOM 236247 . 241180) (FILEPKGTYPE 241182 . 244821)) (256860 271412 (FINDCALLERS 256870 . 257385) (EDITCALLERS 257387 . 265045) (EDITFROMFILE 265047 . 270727) (FINDATS 270729 . 271001) ( LOOKIN 271003 . 271410)) (271413 273140 (SEPRCASE 271423 . 273138)) (273657 279199 (IMPORTFILE 273667 . 274641) (IMPORTEVAL 274643 . 275523) (IMPORTFILESCAN 275525 . 275946) (CHECKIMPORTS 275948 . 277284 ) (GATHEREXPORTS 277286 . 278609) (\DUMPEXPORTS 278611 . 279197)) (279537 281745 (CLEARFILEPKG 279547 . 281743))))) STOP \ No newline at end of file diff --git a/sources/FILEPKG.~4~ b/sources/FILEPKG.~4~ deleted file mode 100644 index 1ca197ac..00000000 --- a/sources/FILEPKG.~4~ +++ /dev/null @@ -1,2 +0,0 @@ -  (RPAQQ ADDTOFILEKEYLST (("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (% - "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " " " EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" "Nowhere " EXPLAINSTRING "] - nowhere, item is marked as a dummy " NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG (%) %] % % ) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% ) RETURN ANSWER))) (% "" RETURN % ) ("" "File name: " EXPLAINSTRING "a file name" KEYLST ()))) \ No newline at end of file diff --git a/sources/FILEPKG.~6~ b/sources/FILEPKG.~6~ deleted file mode 100644 index a0bfe4fb..00000000 --- a/sources/FILEPKG.~6~ +++ /dev/null @@ -1,13 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "18-Apr-2018 10:41:28" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;6 283387 changes to%: (FNS EDITCALLERS) previous date%: "16-Apr-2018 21:37:05" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;5) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (INITVARS [ADDTOFILEKEYLST (LIST '(%[ "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (LIST (CHARACTER (CHARCODE ^J)) "" 'EXPLAINSTRING "{line-feed} - same as previous response" 'NOECHOFLG T) '(% " % -" EXPLAINSTRING "{space} - no action" NOECHOFLG T) '(%] "Nowhere% -" EXPLAINSTRING "] - nowhere, item is marked as a dummy% -" NOECHOFLG T) '[%( "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFLG (%) %] % % -) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% -) RETURN ANSWER))) (LIST (CHARACTER (CHARCODE ^M)) "" 'RETURN '% ) '("" "File name: " EXPLAINSTRING "a file name" KEYLST (] (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only% -"] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST )))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 29-Aug-89 11:46 by bvm") (PROG* ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? ROOTNAME)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (ROOTNAME) (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET ROOTNAME 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") '((Y "es ") (N "o ") (%] "Nowhere " EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (SELECTQ (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T)) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (SETQ FILE)) (% (* ; "space. means no action") (RETURN)) (% (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (RPAQ? ADDTOFILEKEYLST [LIST '(%[ "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (LIST (CHARACTER (CHARCODE ^J)) "" 'EXPLAINSTRING "{line-feed} - same as previous response" 'NOECHOFLG T) '(% " % -" EXPLAINSTRING "{space} - no action" NOECHOFLG T) '(%] "Nowhere% -" EXPLAINSTRING "] - nowhere, item is marked as a dummy% -" NOECHOFLG T) '[%( "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFLG (%) %] % % -) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% -) RETURN ANSWER))) (LIST (CHARACTER (CHARCODE ^M)) "" 'RETURN '% ) '("" "File name: " EXPLAINSTRING "a file name" KEYLST (]) (RPAQ? LASTFILE ) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 18-Apr-2018 10:41 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only% -")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018)) (DECLARE%: DONTCOPY (FILEMAP (NIL (22517 24222 (SEARCHPRETTYTYPELST 22527 . 23506) (PRETTYDEFMACROS 23508 . 23966) ( FILEPKGCOMPROPS 23968 . 24220)) (25024 58965 (CLEANUP 25034 . 26422) (COMPILEFILES 26424 . 26700) ( COMPILEFILES0 26702 . 27422) (CONTINUEDIT 27424 . 28844) (MAKEFILE 28846 . 40488) (FILECHANGES 40490 . 42825) (FILEPKG.MERGECHANGES 42827 . 43650) (FILEPKG.CHANGEDFNS 43652 . 43964) (MAKEFILE1 43966 . 48236) (COMPILE-FILE? 48238 . 49570) (MAKEFILES 49572 . 51265) (ADDFILE 51267 . 53788) (ADDFILE0 53790 . 57926) (LISTFILES 57928 . 58963)) (59653 94893 (FILEPKGCHANGES 59663 . 61013) (GETFILEPKGTYPE 61015 . 64088) (MARKASCHANGED 64090 . 65727) (FILECOMS 65729 . 66113) (WHEREIS 66115 . 67535) ( SMASHFILECOMS 67537 . 67772) (FILEFNSLST 67774 . 67936) (FILECOMSLST 67938 . 68422) (UPDATEFILES 68424 . 73724) (INFILECOMS? 73726 . 75629) (INFILECOMTAIL 75631 . 76771) (INFILECOMS 76773 . 76934) ( INFILECOM 76936 . 87145) (INFILECOMSVALS 87147 . 87474) (INFILECOMSVAL 87476 . 88478) (INFILECOMSPROP 88480 . 89309) (IFCPROPS 89311 . 90572) (IFCEXPRTYPE 90574 . 91085) (IFCPROPSCAN 91087 . 92140) ( IFCDECLARE 92142 . 93453) (INFILEPAIRS 93455 . 93787) (INFILECOMSMACRO 93789 . 94891)) (94928 125023 ( FILES? 94938 . 97131) (FILES?1 97133 . 97783) (FILES?PRINTLST 97785 . 98567) (ADDTOFILES? 98569 . 108490) (ADDTOFILE 108492 . 109408) (WHATIS 109410 . 111386) (ADDTOCOMS 111388 . 113032) (ADDTOCOM 113034 . 119581) (ADDTOCOM1 119583 . 120754) (ADDNEWCOM 120756 . 121806) (MAKENEWCOM 121808 . 123651) (DEFAULTMAKENEWCOM 123653 . 125021)) (125093 127910 (MERGEINSERT 125103 . 127446) (MERGEINSERT1 127448 . 127908)) (129054 139966 (DELFROMFILES 129064 . 129914) (DELFROMCOMS 129916 . 131595) (DELFROMCOM 131597 . 137465) (DELFROMCOM1 137467 . 138264) (REMOVEITEM 138266 . 139140) (MOVETOFILE 139142 . 139964)) (140180 142549 (SAVEPUT 140190 . 142547)) (142674 150998 (UNMARKASCHANGED 142684 . 144392) ( PREEDITFN 144394 . 146905) (POSTEDITPROPS 146907 . 149408) (POSTEDITALISTS 149410 . 150996)) (151147 171701 (ALISTS.GETDEF 151157 . 151536) (ALISTS.WHENCHANGED 151538 . 152182) (CLEARCLISPARRAY 152184 . 153358) (EXPRESSIONS.WHENCHANGED 153360 . 153734) (MAKEALISTCOMS 153736 . 154809) (MAKEFILESCOMS 154811 . 156248) (MAKELISPXMACROSCOMS 156250 . 158268) (MAKEPROPSCOMS 158270 . 158968) ( MAKEUSERMACROSCOMS 158970 . 160770) (PROPS.WHENCHANGED 160772 . 161393) (FILEGETDEF.LISPXMACROS 161395 . 162837) (FILEGETDEF.ALISTS 162839 . 163458) (FILEGETDEF.RECORDS 163460 . 164391) (FILEGETDEF.PROPS 164393 . 165185) (FILEGETDEF.MACROS 165187 . 166247) (FILEGETDEF.VARS 166249 . 166665) (FILEGETDEF.FNS 166667 . 168031) (FILEPKGCOMS.PUTDEF 168033 . 170473) (FILES.PUTDEF 170475 . 171432) (VARS.PUTDEF 171434 . 171577) (FILES.WHENCHANGED 171579 . 171699)) (173723 181156 (RENAME 173733 . 175134) ( CHANGECALLERS 175136 . 181154)) (181157 229105 (SHOWDEF 181167 . 181960) (COPYDEF 181962 . 184436) ( GETDEF 184438 . 186714) (GETDEFCOM 186716 . 187682) (GETDEFCOM0 187684 . 189030) (GETDEFCURRENT 189032 . 195452) (GETDEFERR 195454 . 196755) (GETDEFFROMFILE 196757 . 201037) (GETDEFSAVED 201039 . 202143) (PUTDEF 202145 . 202848) (EDITDEF 202850 . 203827) (DEFAULT.EDITDEF 203829 . 206665) (EDITDEF.FILES 206667 . 206868) (LOADDEF 206870 . 207046) (DWIMDEF 207048 . 207902) (DELDEF 207904 . 210918) ( DELFROMLIST 210920 . 211424) (HASDEF 211426 . 217748) (GETFILEDEF 217750 . 218272) (SAVEDEF 218274 . 219933) (UNSAVEDEF 219935 . 220831) (COMPAREDEFS 220833 . 224135) (COMPARE 224137 . 224841) (TYPESOF 224843 . 229103)) (229172 234215 (FIXEDITDATE 229182 . 232685) (EDITDATE? 232687 . 234213)) (234634 243220 (FILEPKGCOM 234644 . 239577) (FILEPKGTYPE 239579 . 243218)) (255257 269759 (FINDCALLERS 255267 . 255782) (EDITCALLERS 255784 . 263392) (EDITFROMFILE 263394 . 269074) (FINDATS 269076 . 269348) ( LOOKIN 269350 . 269757)) (269760 271487 (SEPRCASE 269770 . 271485)) (272004 277546 (IMPORTFILE 272014 . 272988) (IMPORTEVAL 272990 . 273870) (IMPORTFILESCAN 273872 . 274293) (CHECKIMPORTS 274295 . 275631 ) (GATHEREXPORTS 275633 . 276956) (\DUMPEXPORTS 276958 . 277544)) (277884 280092 (CLEARFILEPKG 277894 . 280090))))) STOP \ No newline at end of file diff --git a/sources/FILEPKG.~7~ b/sources/FILEPKG.~7~ deleted file mode 100644 index eae35d0e..00000000 --- a/sources/FILEPKG.~7~ +++ /dev/null @@ -1,13 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED " 7-Mar-2020 14:09:52" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;7 284219 changes to%: (VARS FILEPKGCOMS) previous date%: "18-Apr-2018 10:41:28" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;6) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018, 2020 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (INITVARS [ADDTOFILEKEYLST (LIST '(%[ "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) '(= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (LIST (CHARACTER (CHARCODE ^J)) "" 'EXPLAINSTRING "{line-feed} - same as previous response" 'NOECHOFLG T) '(% " % -" EXPLAINSTRING "{space} - no action" NOECHOFLG T) '(%] "Nowhere% -" EXPLAINSTRING "] - nowhere, item is marked as a dummy% -" NOECHOFLG T) '[%( "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFLG (%) %] % % -) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% -) RETURN ANSWER))) (LIST (CHARACTER (CHARCODE ^M)) "" 'RETURN '% ) '("" "File name: " EXPLAINSTRING "a file name" KEYLST (] (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only% -"] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST)))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 29-Aug-89 11:46 by bvm") (PROG* ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? ROOTNAME)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (ROOTNAME) (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET ROOTNAME 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") '((Y "es ") (N "o ") (%] "Nowhere " EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (SELECTQ (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T)) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (SETQ FILE)) (% (* ; "space. means no action") (RETURN)) (% (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (RPAQ? ADDTOFILEKEYLST [LIST '(%[ "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) '(= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (LIST (CHARACTER (CHARCODE ^J)) "" 'EXPLAINSTRING "{line-feed} - same as previous response" 'NOECHOFLG T) '(% " % -" EXPLAINSTRING "{space} - no action" NOECHOFLG T) '(%] "Nowhere% -" EXPLAINSTRING "] - nowhere, item is marked as a dummy% -" NOECHOFLG T) '[%( "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFLG (%) %] % % -) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% -) RETURN ANSWER))) (LIST (CHARACTER (CHARCODE ^M)) "" 'RETURN '% ) '("" "File name: " EXPLAINSTRING "a file name" KEYLST (]) (RPAQ? LASTFILE ) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 18-Apr-2018 10:41 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only% -")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (22680 24385 (SEARCHPRETTYTYPELST 22690 . 23669) (PRETTYDEFMACROS 23671 . 24129) ( FILEPKGCOMPROPS 24131 . 24383)) (25182 59123 (CLEANUP 25192 . 26580) (COMPILEFILES 26582 . 26858) ( COMPILEFILES0 26860 . 27580) (CONTINUEDIT 27582 . 29002) (MAKEFILE 29004 . 40646) (FILECHANGES 40648 . 42983) (FILEPKG.MERGECHANGES 42985 . 43808) (FILEPKG.CHANGEDFNS 43810 . 44122) (MAKEFILE1 44124 . 48394) (COMPILE-FILE? 48396 . 49728) (MAKEFILES 49730 . 51423) (ADDFILE 51425 . 53946) (ADDFILE0 53948 . 58084) (LISTFILES 58086 . 59121)) (59811 95051 (FILEPKGCHANGES 59821 . 61171) (GETFILEPKGTYPE 61173 . 64246) (MARKASCHANGED 64248 . 65885) (FILECOMS 65887 . 66271) (WHEREIS 66273 . 67693) ( SMASHFILECOMS 67695 . 67930) (FILEFNSLST 67932 . 68094) (FILECOMSLST 68096 . 68580) (UPDATEFILES 68582 . 73882) (INFILECOMS? 73884 . 75787) (INFILECOMTAIL 75789 . 76929) (INFILECOMS 76931 . 77092) ( INFILECOM 77094 . 87303) (INFILECOMSVALS 87305 . 87632) (INFILECOMSVAL 87634 . 88636) (INFILECOMSPROP 88638 . 89467) (IFCPROPS 89469 . 90730) (IFCEXPRTYPE 90732 . 91243) (IFCPROPSCAN 91245 . 92298) ( IFCDECLARE 92300 . 93611) (INFILEPAIRS 93613 . 93945) (INFILECOMSMACRO 93947 . 95049)) (95086 125181 ( FILES? 95096 . 97289) (FILES?1 97291 . 97941) (FILES?PRINTLST 97943 . 98725) (ADDTOFILES? 98727 . 108648) (ADDTOFILE 108650 . 109566) (WHATIS 109568 . 111544) (ADDTOCOMS 111546 . 113190) (ADDTOCOM 113192 . 119739) (ADDTOCOM1 119741 . 120912) (ADDNEWCOM 120914 . 121964) (MAKENEWCOM 121966 . 123809) (DEFAULTMAKENEWCOM 123811 . 125179)) (125251 128068 (MERGEINSERT 125261 . 127604) (MERGEINSERT1 127606 . 128066)) (129806 140718 (DELFROMFILES 129816 . 130666) (DELFROMCOMS 130668 . 132347) (DELFROMCOM 132349 . 138217) (DELFROMCOM1 138219 . 139016) (REMOVEITEM 139018 . 139892) (MOVETOFILE 139894 . 140716)) (140932 143301 (SAVEPUT 140942 . 143299)) (143426 151750 (UNMARKASCHANGED 143436 . 145144) ( PREEDITFN 145146 . 147657) (POSTEDITPROPS 147659 . 150160) (POSTEDITALISTS 150162 . 151748)) (151899 172453 (ALISTS.GETDEF 151909 . 152288) (ALISTS.WHENCHANGED 152290 . 152934) (CLEARCLISPARRAY 152936 . 154110) (EXPRESSIONS.WHENCHANGED 154112 . 154486) (MAKEALISTCOMS 154488 . 155561) (MAKEFILESCOMS 155563 . 157000) (MAKELISPXMACROSCOMS 157002 . 159020) (MAKEPROPSCOMS 159022 . 159720) ( MAKEUSERMACROSCOMS 159722 . 161522) (PROPS.WHENCHANGED 161524 . 162145) (FILEGETDEF.LISPXMACROS 162147 . 163589) (FILEGETDEF.ALISTS 163591 . 164210) (FILEGETDEF.RECORDS 164212 . 165143) (FILEGETDEF.PROPS 165145 . 165937) (FILEGETDEF.MACROS 165939 . 166999) (FILEGETDEF.VARS 167001 . 167417) (FILEGETDEF.FNS 167419 . 168783) (FILEPKGCOMS.PUTDEF 168785 . 171225) (FILES.PUTDEF 171227 . 172184) (VARS.PUTDEF 172186 . 172329) (FILES.WHENCHANGED 172331 . 172451)) (174554 181987 (RENAME 174564 . 175965) ( CHANGECALLERS 175967 . 181985)) (181988 229936 (SHOWDEF 181998 . 182791) (COPYDEF 182793 . 185267) ( GETDEF 185269 . 187545) (GETDEFCOM 187547 . 188513) (GETDEFCOM0 188515 . 189861) (GETDEFCURRENT 189863 . 196283) (GETDEFERR 196285 . 197586) (GETDEFFROMFILE 197588 . 201868) (GETDEFSAVED 201870 . 202974) (PUTDEF 202976 . 203679) (EDITDEF 203681 . 204658) (DEFAULT.EDITDEF 204660 . 207496) (EDITDEF.FILES 207498 . 207699) (LOADDEF 207701 . 207877) (DWIMDEF 207879 . 208733) (DELDEF 208735 . 211749) ( DELFROMLIST 211751 . 212255) (HASDEF 212257 . 218579) (GETFILEDEF 218581 . 219103) (SAVEDEF 219105 . 220764) (UNSAVEDEF 220766 . 221662) (COMPAREDEFS 221664 . 224966) (COMPARE 224968 . 225672) (TYPESOF 225674 . 229934)) (230003 235046 (FIXEDITDATE 230013 . 233516) (EDITDATE? 233518 . 235044)) (235465 244051 (FILEPKGCOM 235475 . 240408) (FILEPKGTYPE 240410 . 244049)) (256084 270586 (FINDCALLERS 256094 . 256609) (EDITCALLERS 256611 . 264219) (EDITFROMFILE 264221 . 269901) (FINDATS 269903 . 270175) ( LOOKIN 270177 . 270584)) (270587 272314 (SEPRCASE 270597 . 272312)) (272831 278373 (IMPORTFILE 272841 . 273815) (IMPORTEVAL 273817 . 274697) (IMPORTFILESCAN 274699 . 275120) (CHECKIMPORTS 275122 . 276458 ) (GATHEREXPORTS 276460 . 277783) (\DUMPEXPORTS 277785 . 278371)) (278711 280919 (CLEARFILEPKG 278721 . 280917))))) STOP \ No newline at end of file diff --git a/sources/FILEPKG.~8~ b/sources/FILEPKG.~8~ deleted file mode 100644 index 2c62c32a..00000000 --- a/sources/FILEPKG.~8~ +++ /dev/null @@ -1,13 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED " 7-Mar-2020 14:24:19" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;8 284246 changes to%: (VARS FILEPKGCOMS) previous date%: " 7-Mar-2020 14:09:52" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;7) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018, 2020 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (* ;; "RMK: Changed INITVARS to VARS, so = addition works") (VARS [ADDTOFILEKEYLST (LIST '(%[ "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) '(= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (LIST (CHARACTER (CHARCODE ^J)) "" 'EXPLAINSTRING "{line-feed} - same as previous response" 'NOECHOFLG T) '(% " % -" EXPLAINSTRING "{space} - no action" NOECHOFLG T ) '(%] "Nowhere% -" EXPLAINSTRING "] - nowhere, item is marked as a dummy% -" NOECHOFLG T) '[%( "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFLG (%) %] % % -) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% -) RETURN ANSWER))) (LIST (CHARACTER (CHARCODE ^M)) "" 'RETURN '% ) '("" "File name: " EXPLAINSTRING "a file name" KEYLST (] (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only% -"] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST)))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 29-Aug-89 11:46 by bvm") (PROG* ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? ROOTNAME)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (ROOTNAME) (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET ROOTNAME 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") '((Y "es ") (N "o ") (%] "Nowhere " EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (SELECTQ (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T)) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (SETQ FILE)) (% (* ; "space. means no action") (RETURN)) (% (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (* ;; "RMK: Changed INITVARS to VARS, so = addition works") (RPAQ ADDTOFILEKEYLST [LIST '(%[ "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) '(= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (LIST (CHARACTER (CHARCODE ^J)) "" 'EXPLAINSTRING "{line-feed} - same as previous response" 'NOECHOFLG T) '(% " % -" EXPLAINSTRING "{space} - no action" NOECHOFLG T) '(%] "Nowhere% -" EXPLAINSTRING "] - nowhere, item is marked as a dummy% -" NOECHOFLG T) '[%( "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFLG (%) %] % % -) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% -) RETURN ANSWER))) (LIST (CHARACTER (CHARCODE ^M)) "" 'RETURN '% ) '("" "File name: " EXPLAINSTRING "a file name" KEYLST (]) (RPAQQ LASTFILE NIL) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 18-Apr-2018 10:41 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only% -")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (22660 24365 (SEARCHPRETTYTYPELST 22670 . 23649) (PRETTYDEFMACROS 23651 . 24109) ( FILEPKGCOMPROPS 24111 . 24363)) (25162 59103 (CLEANUP 25172 . 26560) (COMPILEFILES 26562 . 26838) ( COMPILEFILES0 26840 . 27560) (CONTINUEDIT 27562 . 28982) (MAKEFILE 28984 . 40626) (FILECHANGES 40628 . 42963) (FILEPKG.MERGECHANGES 42965 . 43788) (FILEPKG.CHANGEDFNS 43790 . 44102) (MAKEFILE1 44104 . 48374) (COMPILE-FILE? 48376 . 49708) (MAKEFILES 49710 . 51403) (ADDFILE 51405 . 53926) (ADDFILE0 53928 . 58064) (LISTFILES 58066 . 59101)) (59791 95031 (FILEPKGCHANGES 59801 . 61151) (GETFILEPKGTYPE 61153 . 64226) (MARKASCHANGED 64228 . 65865) (FILECOMS 65867 . 66251) (WHEREIS 66253 . 67673) ( SMASHFILECOMS 67675 . 67910) (FILEFNSLST 67912 . 68074) (FILECOMSLST 68076 . 68560) (UPDATEFILES 68562 . 73862) (INFILECOMS? 73864 . 75767) (INFILECOMTAIL 75769 . 76909) (INFILECOMS 76911 . 77072) ( INFILECOM 77074 . 87283) (INFILECOMSVALS 87285 . 87612) (INFILECOMSVAL 87614 . 88616) (INFILECOMSPROP 88618 . 89447) (IFCPROPS 89449 . 90710) (IFCEXPRTYPE 90712 . 91223) (IFCPROPSCAN 91225 . 92278) ( IFCDECLARE 92280 . 93591) (INFILEPAIRS 93593 . 93925) (INFILECOMSMACRO 93927 . 95029)) (95066 125161 ( FILES? 95076 . 97269) (FILES?1 97271 . 97921) (FILES?PRINTLST 97923 . 98705) (ADDTOFILES? 98707 . 108628) (ADDTOFILE 108630 . 109546) (WHATIS 109548 . 111524) (ADDTOCOMS 111526 . 113170) (ADDTOCOM 113172 . 119719) (ADDTOCOM1 119721 . 120892) (ADDNEWCOM 120894 . 121944) (MAKENEWCOM 121946 . 123789) (DEFAULTMAKENEWCOM 123791 . 125159)) (125231 128048 (MERGEINSERT 125241 . 127584) (MERGEINSERT1 127586 . 128046)) (129833 140745 (DELFROMFILES 129843 . 130693) (DELFROMCOMS 130695 . 132374) (DELFROMCOM 132376 . 138244) (DELFROMCOM1 138246 . 139043) (REMOVEITEM 139045 . 139919) (MOVETOFILE 139921 . 140743)) (140959 143328 (SAVEPUT 140969 . 143326)) (143453 151777 (UNMARKASCHANGED 143463 . 145171) ( PREEDITFN 145173 . 147684) (POSTEDITPROPS 147686 . 150187) (POSTEDITALISTS 150189 . 151775)) (151926 172480 (ALISTS.GETDEF 151936 . 152315) (ALISTS.WHENCHANGED 152317 . 152961) (CLEARCLISPARRAY 152963 . 154137) (EXPRESSIONS.WHENCHANGED 154139 . 154513) (MAKEALISTCOMS 154515 . 155588) (MAKEFILESCOMS 155590 . 157027) (MAKELISPXMACROSCOMS 157029 . 159047) (MAKEPROPSCOMS 159049 . 159747) ( MAKEUSERMACROSCOMS 159749 . 161549) (PROPS.WHENCHANGED 161551 . 162172) (FILEGETDEF.LISPXMACROS 162174 . 163616) (FILEGETDEF.ALISTS 163618 . 164237) (FILEGETDEF.RECORDS 164239 . 165170) (FILEGETDEF.PROPS 165172 . 165964) (FILEGETDEF.MACROS 165966 . 167026) (FILEGETDEF.VARS 167028 . 167444) (FILEGETDEF.FNS 167446 . 168810) (FILEPKGCOMS.PUTDEF 168812 . 171252) (FILES.PUTDEF 171254 . 172211) (VARS.PUTDEF 172213 . 172356) (FILES.WHENCHANGED 172358 . 172478)) (174581 182014 (RENAME 174591 . 175992) ( CHANGECALLERS 175994 . 182012)) (182015 229963 (SHOWDEF 182025 . 182818) (COPYDEF 182820 . 185294) ( GETDEF 185296 . 187572) (GETDEFCOM 187574 . 188540) (GETDEFCOM0 188542 . 189888) (GETDEFCURRENT 189890 . 196310) (GETDEFERR 196312 . 197613) (GETDEFFROMFILE 197615 . 201895) (GETDEFSAVED 201897 . 203001) (PUTDEF 203003 . 203706) (EDITDEF 203708 . 204685) (DEFAULT.EDITDEF 204687 . 207523) (EDITDEF.FILES 207525 . 207726) (LOADDEF 207728 . 207904) (DWIMDEF 207906 . 208760) (DELDEF 208762 . 211776) ( DELFROMLIST 211778 . 212282) (HASDEF 212284 . 218606) (GETFILEDEF 218608 . 219130) (SAVEDEF 219132 . 220791) (UNSAVEDEF 220793 . 221689) (COMPAREDEFS 221691 . 224993) (COMPARE 224995 . 225699) (TYPESOF 225701 . 229961)) (230030 235073 (FIXEDITDATE 230040 . 233543) (EDITDATE? 233545 . 235071)) (235492 244078 (FILEPKGCOM 235502 . 240435) (FILEPKGTYPE 240437 . 244076)) (256111 270613 (FINDCALLERS 256121 . 256636) (EDITCALLERS 256638 . 264246) (EDITFROMFILE 264248 . 269928) (FINDATS 269930 . 270202) ( LOOKIN 270204 . 270611)) (270614 272341 (SEPRCASE 270624 . 272339)) (272858 278400 (IMPORTFILE 272868 . 273842) (IMPORTEVAL 273844 . 274724) (IMPORTFILESCAN 274726 . 275147) (CHECKIMPORTS 275149 . 276485 ) (GATHEREXPORTS 276487 . 277810) (\DUMPEXPORTS 277812 . 278398)) (278738 280946 (CLEARFILEPKG 278748 . 280944))))) STOP \ No newline at end of file diff --git a/sources/FILEPKG.~9~ b/sources/FILEPKG.~9~ deleted file mode 100644 index 88375137..00000000 --- a/sources/FILEPKG.~9~ +++ /dev/null @@ -1,13 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED " 8-Aug-2020 17:33:31" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;9 283711 changes to%: (FNS EDITCALLERS) previous date%: " 7-Mar-2020 14:24:19" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;8) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018, 2020 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (* ;; "RMK: Changed INITVARS to VARS, so = addition works") (VARS [ADDTOFILEKEYLST (LIST '(%[ "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) '(= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (LIST (CHARACTER (CHARCODE ^J)) "" 'EXPLAINSTRING "{line-feed} - same as previous response" 'NOECHOFLG T) '(% " % -" EXPLAINSTRING "{space} - no action" NOECHOFLG T ) '(%] "Nowhere% -" EXPLAINSTRING "] - nowhere, item is marked as a dummy% -" NOECHOFLG T) '[%( "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFLG (%) %] % % -) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% -) RETURN ANSWER))) (LIST (CHARACTER (CHARCODE ^M)) "" 'RETURN '% ) '("" "File name: " EXPLAINSTRING "a file name" KEYLST (] (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only% -"] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST )))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 29-Aug-89 11:46 by bvm") (PROG* ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? ROOTNAME)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (ROOTNAME) (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET ROOTNAME 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") '((Y "es ") (N "o ") (%] "Nowhere " EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (SELECTQ (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T)) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (SETQ FILE)) (% (* ; "space. means no action") (RETURN)) (% (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (* ;; "RMK: Changed INITVARS to VARS, so = addition works") (RPAQ ADDTOFILEKEYLST [LIST '(%[ "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) '(= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (LIST (CHARACTER (CHARCODE ^J)) "" 'EXPLAINSTRING "{line-feed} - same as previous response" 'NOECHOFLG T) '(% " % -" EXPLAINSTRING "{space} - no action" NOECHOFLG T) '(%] "Nowhere% -" EXPLAINSTRING "] - nowhere, item is marked as a dummy% -" NOECHOFLG T) '[%( "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFLG (%) %] % % -) RETURN (CDR ANSWER] '(@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG (% -) RETURN ANSWER))) (LIST (CHARACTER (CHARCODE ^M)) "" 'RETURN '% ) '("" "File name: " EXPLAINSTRING "a file name" KEYLST (]) (RPAQQ LASTFILE NIL) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 8-Aug-2020 17:32 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only% -")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (22668 24373 (SEARCHPRETTYTYPELST 22678 . 23657) (PRETTYDEFMACROS 23659 . 24117) ( FILEPKGCOMPROPS 24119 . 24371)) (25175 59116 (CLEANUP 25185 . 26573) (COMPILEFILES 26575 . 26851) ( COMPILEFILES0 26853 . 27573) (CONTINUEDIT 27575 . 28995) (MAKEFILE 28997 . 40639) (FILECHANGES 40641 . 42976) (FILEPKG.MERGECHANGES 42978 . 43801) (FILEPKG.CHANGEDFNS 43803 . 44115) (MAKEFILE1 44117 . 48387) (COMPILE-FILE? 48389 . 49721) (MAKEFILES 49723 . 51416) (ADDFILE 51418 . 53939) (ADDFILE0 53941 . 58077) (LISTFILES 58079 . 59114)) (59804 95044 (FILEPKGCHANGES 59814 . 61164) (GETFILEPKGTYPE 61166 . 64239) (MARKASCHANGED 64241 . 65878) (FILECOMS 65880 . 66264) (WHEREIS 66266 . 67686) ( SMASHFILECOMS 67688 . 67923) (FILEFNSLST 67925 . 68087) (FILECOMSLST 68089 . 68573) (UPDATEFILES 68575 . 73875) (INFILECOMS? 73877 . 75780) (INFILECOMTAIL 75782 . 76922) (INFILECOMS 76924 . 77085) ( INFILECOM 77087 . 87296) (INFILECOMSVALS 87298 . 87625) (INFILECOMSVAL 87627 . 88629) (INFILECOMSPROP 88631 . 89460) (IFCPROPS 89462 . 90723) (IFCEXPRTYPE 90725 . 91236) (IFCPROPSCAN 91238 . 92291) ( IFCDECLARE 92293 . 93604) (INFILEPAIRS 93606 . 93938) (INFILECOMSMACRO 93940 . 95042)) (95079 125174 ( FILES? 95089 . 97282) (FILES?1 97284 . 97934) (FILES?PRINTLST 97936 . 98718) (ADDTOFILES? 98720 . 108641) (ADDTOFILE 108643 . 109559) (WHATIS 109561 . 111537) (ADDTOCOMS 111539 . 113183) (ADDTOCOM 113185 . 119732) (ADDTOCOM1 119734 . 120905) (ADDNEWCOM 120907 . 121957) (MAKENEWCOM 121959 . 123802) (DEFAULTMAKENEWCOM 123804 . 125172)) (125244 128061 (MERGEINSERT 125254 . 127597) (MERGEINSERT1 127599 . 128059)) (129323 140235 (DELFROMFILES 129333 . 130183) (DELFROMCOMS 130185 . 131864) (DELFROMCOM 131866 . 137734) (DELFROMCOM1 137736 . 138533) (REMOVEITEM 138535 . 139409) (MOVETOFILE 139411 . 140233)) (140449 142818 (SAVEPUT 140459 . 142816)) (142943 151267 (UNMARKASCHANGED 142953 . 144661) ( PREEDITFN 144663 . 147174) (POSTEDITPROPS 147176 . 149677) (POSTEDITALISTS 149679 . 151265)) (151416 171970 (ALISTS.GETDEF 151426 . 151805) (ALISTS.WHENCHANGED 151807 . 152451) (CLEARCLISPARRAY 152453 . 153627) (EXPRESSIONS.WHENCHANGED 153629 . 154003) (MAKEALISTCOMS 154005 . 155078) (MAKEFILESCOMS 155080 . 156517) (MAKELISPXMACROSCOMS 156519 . 158537) (MAKEPROPSCOMS 158539 . 159237) ( MAKEUSERMACROSCOMS 159239 . 161039) (PROPS.WHENCHANGED 161041 . 161662) (FILEGETDEF.LISPXMACROS 161664 . 163106) (FILEGETDEF.ALISTS 163108 . 163727) (FILEGETDEF.RECORDS 163729 . 164660) (FILEGETDEF.PROPS 164662 . 165454) (FILEGETDEF.MACROS 165456 . 166516) (FILEGETDEF.VARS 166518 . 166934) (FILEGETDEF.FNS 166936 . 168300) (FILEPKGCOMS.PUTDEF 168302 . 170742) (FILES.PUTDEF 170744 . 171701) (VARS.PUTDEF 171703 . 171846) (FILES.WHENCHANGED 171848 . 171968)) (173992 181425 (RENAME 174002 . 175403) ( CHANGECALLERS 175405 . 181423)) (181426 229374 (SHOWDEF 181436 . 182229) (COPYDEF 182231 . 184705) ( GETDEF 184707 . 186983) (GETDEFCOM 186985 . 187951) (GETDEFCOM0 187953 . 189299) (GETDEFCURRENT 189301 . 195721) (GETDEFERR 195723 . 197024) (GETDEFFROMFILE 197026 . 201306) (GETDEFSAVED 201308 . 202412) (PUTDEF 202414 . 203117) (EDITDEF 203119 . 204096) (DEFAULT.EDITDEF 204098 . 206934) (EDITDEF.FILES 206936 . 207137) (LOADDEF 207139 . 207315) (DWIMDEF 207317 . 208171) (DELDEF 208173 . 211187) ( DELFROMLIST 211189 . 211693) (HASDEF 211695 . 218017) (GETFILEDEF 218019 . 218541) (SAVEDEF 218543 . 220202) (UNSAVEDEF 220204 . 221100) (COMPAREDEFS 221102 . 224404) (COMPARE 224406 . 225110) (TYPESOF 225112 . 229372)) (229441 234484 (FIXEDITDATE 229451 . 232954) (EDITDATE? 232956 . 234482)) (234903 243489 (FILEPKGCOM 234913 . 239846) (FILEPKGTYPE 239848 . 243487)) (255526 270078 (FINDCALLERS 255536 . 256051) (EDITCALLERS 256053 . 263711) (EDITFROMFILE 263713 . 269393) (FINDATS 269395 . 269667) ( LOOKIN 269669 . 270076)) (270079 271806 (SEPRCASE 270089 . 271804)) (272323 277865 (IMPORTFILE 272333 . 273307) (IMPORTEVAL 273309 . 274189) (IMPORTFILESCAN 274191 . 274612) (CHECKIMPORTS 274614 . 275950 ) (GATHEREXPORTS 275952 . 277275) (\DUMPEXPORTS 277277 . 277863)) (278203 280411 (CLEARFILEPKG 278213 . 280409))))) STOP \ No newline at end of file diff --git a/sources/LLKEY.LCOM.~1~ b/sources/LLKEY.LCOM.~1~ deleted file mode 100644 index 96d6a036..00000000 --- a/sources/LLKEY.LCOM.~1~ +++ /dev/null @@ -1,141 +0,0 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED " 9-Apr-2000 16:32:15" ("compiled on " {DSK}sybalsky>lispcore>sources>LLKEY.;7) "30-Jan-2000 16:38:25" "COMPILE-FILEd" in "Medley 31-Jan-20 ..." dated "31-Jan-2000 00:39:45") (FILECREATED " 9-Apr-2000 16:28:23" {DSK}sybalsky>lispcore>sources>LLKEY.;7 207701 changes to%: (FNS FLIPCURSORBAR FLIPCURSOR) previous date%: "30-Mar-2000 20:01:05" {DSK}sybalsky>lispcore>sources>LLKEY.;6) (RPAQQ LLKEYCOMS ((COMS (* ; "Access to keyboard") (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF \PUTSYSBUF \PEEKSYSBUF) (INITVARS (\LONGSYSBUF)) ( INITVARS (\\KEYBOARDWAITBOX.GLOBALRESOURCE)) (DECLARE%: DONTCOPY (RESOURCES \KEYBOARDWAITBOX)) ( DECLARE%: DONTCOPY (CONSTANTS (\SYSBUFSIZE 200)) (MACROS \GETREALSYSBUF))) (DECLARE%: DOCOPY DONTEVAL@LOAD (COMS (* ; "Here because it must be done in init before PROC loaded") (P (MOVD? (QUOTE NILL) (QUOTE CARET))))) (COMS (* ; "Key handler") (FNS \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) ( \SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) (INITVARS (\MOUSECHORDTICKS) ( \MOUSECHORDMILLISECONDS 50)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\KEYBOARDINIT))) (DECLARE%: DONTCOPY (MACROS .NOTELASTUSERACTION) (CONSTANTS ALLUP \CTRLMASK \METABIT) (CONSTANTS * DLMOUSEBITS) (CONSTANTS * DLMOUSESTATES) (CONSTANTS * TRANSITIONFLAGS) (MACROS \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) (EXPORT ( RECORDS KEYACTION) (CONSTANTS \NKEYS)) (RECORDS RING) (COMS (* ; "can get rid of shiftstate after clients have been fixed") (RECORDS SHIFTSTATE) (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP)) (CONSTANTS NRINGINDEXWORDS) (CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE))))) ( DECLARE%: EVAL@COMPILE (VARS \KEYNAMES)) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun." ) (VARS \ORIGKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DORADOKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS \MAIKOKEYACTIONS \MAIKOKEYACTIONST4 \MAIKO-JLE-KEYACTIONS \TOSHIBA-KEYACTIONS) ( VARS (KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL)) (INITVARS (\KEYBOARD.META 256) ( \MODIFIED.KEYACTIONS)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE))) (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (COMS (* ; "Key interpretation") (FNS KEYACTION KEYACTIONTABLE KEYBOARDTYPE RESETKEYACTION \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS \KEYACTION1 KEYDOWNP KEYNUMBERP \KEYNAMETONUMBER MODIFY.KEYACTIONS METASHIFT SHIFTDOWNP) (* ; "To support office style 1108 & 1186 keyboards") (FNS SETUP.OFFICE.KEYBOARD) (OPTIMIZERS \KEYNAMETONUMBER) (MACROS \TEMPCOPYTIMER) (* ; "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (EXPORT (OPTIMIZERS KEYDOWNP))) (EXPORT (MACROS XKEYDOWNP KEYDOWNP1 \NEWKEYDOWNP))) (COMS (* ; "A raw keyboard device/stream") (FNS \INIT.KEYBOARD.STREAM) (DECLARE%: DONTEVAL@LOAD DOCOPY (P ( \INIT.KEYBOARD.STREAM))) (EXPORT (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM))) (COMS (* ; "Hook for a periodic interrupt") (FNS \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \PERIODIC.INTERRUPTFRAME) (INITVARS (\KEYBUFFERING) (\PERIODIC.INTERRUPT) (\TIMER.INTERRUPT.PENDING) ( \PERIODIC.INTERRUPT.FREQUENCY 77))) (LOCALVARS . T) (COMS (* ; "cursor and mouse related functions.") (FNS \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN) (FNS CURSOR.INIT \CURSORDESTINATION \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN CURSORPROP GETCURSORPROP PUTCURSORPROP \CURSORBITSPERPIXEL \CURSORIMAGEPROPNAME \CURSORMASKPROPNAME) (FNS CURSORCREATE CURSOR \CURSOR-VALID-P \CURSORUP \CURSORPOSITION \CURSORDOWN ADJUSTCURSORPOSITION CURSORPOSITION CURSORSCREEN CURSOREXIT FLIPCURSOR FLIPCURSORBAR LASTMOUSEX LASTMOUSEY CREATEPOSITION POSITIONP CURSORHOTSPOT) ( PROPS (CURSORPROP ARGNAMES)) (INITVARS (\CURSORHOTSPOTX 0) (\CURSORHOTSPOTY 0) (\CURRENTCURSOR NIL) ( \SOFTCURSORWIDTH NIL) (\SOFTCURSORHEIGHT NIL) (\SOFTCURSORP NIL) (\SOFTCURSORUPP NIL) (\SOFTCURSORUPBM NIL) (\SOFTCURSORDOWNBM NIL) (\SOFTCURSORBBT1 NIL) (\SOFTCURSORBBT2 NIL) (\SOFTCURSORBBT3 NIL) ( \SOFTCURSORBBT4 NIL) (\SOFTCURSORBBT5 NIL) (\SOFTCURSORBBT6 NIL) (\CURSORSCREEN NIL) ( \CURSORDESTINATION NIL) (\CURSORDESTHEIGHT 808) (\CURSORDESTWIDTH 1024) (\CURSORDESTRASTERWIDTH 64) ( \CURSORDESTLINE 0) (\CURSORDESTLINEBASE NIL)) (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) (FNS GETMOUSESTATE \EVENTKEYS) (EXPORT (CONSTANTS ( HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD)))) (DECLARE%: DONTCOPY (EXPORT ( MACROS \SETMOUSEXY)) (MACROS \XMOUSECOORD \YMOUSECOORD)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MOVD ( QUOTE CURSOR) (QUOTE SETCURSOR)) (MOVD (QUOTE \CURSORPOSITION) (QUOTE \SETCURSORPOSITION))) (VARS ( \SFPosition (CREATEPOSITION))))) (COMS (DECLARE%: DONTCOPY (RECORDS KEYBOARDEVENT) (CONSTANTS ( \KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383)))))) (COMS (FNS MACHINETYPE SETMAINTPANEL) (* ; "DLion beeper") (FNS BEEPON BEEPOFF)) (EXPORT (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)) (FNS WITHOUT-INTERRUPTS) (COMS (* ; "Compile locked fns together for locality") (BLOCKS (NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN))) (DECLARE%: DONTCOPY (ADDVARS (INEWCOMS (ALLOCAL (ADDVARS ( LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND)))) (RDCOMS (FNS \SETIOPOINTERS)))) ( PROP FILETYPE LLKEY) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) ( NLAML WITHOUT-INTERRUPTS) (LAMA CURSORPROP METASHIFT MOUSECHORDWAIT))))) BKSYSCHARCODE :D8 (L (0 CHAR)) s@ µ[`P`È\jð³5`LÐÈ`È`LdlËð“¿lkØ[Í¿Kð˜`jÍ¿µH -@ ºIµ JhY¸°¥J&¹° (96 \PUTSYSBUF 85 \NCONC2 5 \PUTSYSBUF) (90 \LONGSYSBUF 72 \SYSBUFFER 48 \SYSBUFFER 41 \SYSBUFFER 32 \SYSBUFFER 20 \SYSBUFFER 12 \LONGSYSBUF) () \CLEARSYSBUF :D8 (L (0 ALLFLG)) L@­`d—`ðŸh¿`jÍ¿@²`‹dh&¿µóh`d˜h&hNIL (69 PROCESS 62 \RUNNING.PROCESS 47 PROCESS 39 \PROCESSES 27 \SYSBUFFER 21 \LONGSYSBUF 13 \TTY.PROCESS 6 \RUNNING.PROCESS) () \GETKEY :D8 NIL ˆ`µNµh`µ2lH ¿h¿Y²K`lÐH ö¿IH¿h¿°ÌÉ&²­`HÉ&YHI&¿¿°£(132 \WAIT.FOR.TTY 126 \TTYBACKGROUND 62 CLOCKDIFFERENCE 45 \GETSYSBUF 37 \CLOCK0 16 \GETSYSBUF 11 WAIT.FOR.TTY) (115 PROCESS 105 PROCESS 96 \RUNNING.PROCESS 87 PROCESS 79 \\KEYBOARDWAITBOX.GLOBALRESOURCE 71 \\KEYBOARDWAITBOX.GLOBALRESOURCE 53 \MISCSTATS 23 \\KEYBOARDWAITBOX.GLOBALRESOURCE 4 \RUNNING.PROCESS) () \NSYSBUFCHARS :D8 NIL 1` `È`ÈHjð‘j‹IdHñ‘HƒHlÈÙÙØ(9 LENGTH) (21 \SYSBUFFER 14 \SYSBUFFER 4 \LONGSYSBUF) () \SAVESYSBUF :D8 NIL ·`jC`²``ð²z`µIH ñ²PI ¸°GÉ&[²å`h&¿IK ÔYH ñ–I ¸Kd¼HJkÔZL ¿µïIJkؾ½NMó®HNµNkÙ¹¿¿Ijðhð´ -HkI  ¿NkÔ^°Ô(174 RPLCHARCODE 168 SUBSTRING 145 \GETSYSBUF 123 RPLCHARCODE 106 ALLOCSTRING 98 NCHARS 90 LENGTH 56 ALLOCSTRING 47 NCHARS 9 \NSYSBUFCHARS) (79 PROCESS 74 \RUNNING.PROCESS 64 PROCESS 38 \RUNNING.PROCESS 30 \TTY.PROCESS 25 \RUNNING.PROCESS 18 \RUNNING.PROCESS 4 \SAVEDSYSBUFFER) () \SYSBUFP :D8 NIL >`ž`d`ð²¿`µ"`Èjðhðµ`´`É&NIL (57 PROCESS 52 \RUNNING.PROCESS 45 \RUNNING.PROCESS 32 \SYSBUFFER 25 \LONGSYSBUF 16 \TTY.PROCESS 10 \RUNNING.PROCESS 4 \RUNNING.PROCESS) () \GETSYSBUF :D8 NIL _`²``¿µD`ÈHjðhð´3`HÐÈ`È`HdlËð“¿lkØYÍ¿Ið˜`jÍ¿NIL (88 \SYSBUFFER 64 \SYSBUFFER 57 \SYSBUFFER 48 \SYSBUFFER 31 \SYSBUFFER 23 \LONGSYSBUF 17 \LONGSYSBUF 11 \LONGSYSBUF 4 \LONGSYSBUF) () \PUTSYSBUF :D8 (L (0 CHAR)) D`È`ÈHIð‘h`IÐ@ÍHjð˜`IÍ¿`IdlËð“¿lkØÍiNIL (50 \SYSBUFFER 41 \SYSBUFFER 27 \SYSBUFFER 11 \SYSBUFFER 4 \SYSBUFFER) () \PEEKSYSBUF :D8 (L (0 STREAM)) \²6`ž`d`ð²*¿`µ`ÈXjð³Ó`HÐÈ¿°¿`É&(89 SHOULDNT 66 BLOCK 7 \SYSBUFP) (80 PROCESS 75 \RUNNING.PROCESS 54 \SYSBUFFER 42 \SYSBUFFER 35 \LONGSYSBUF 26 \TTY.PROCESS 20 \RUNNING.PROCESS 14 \RUNNING.PROCESS) () (RPAQ? \LONGSYSBUF) (RPAQ? \\KEYBOARDWAITBOX.GLOBALRESOURCE) (MOVD? (QUOTE NILL) (QUOTE CARET)) \KEYBOARDINIT :D8 NIL  l lËkØkØâ jÍ¿`lÍlÈhdi `l8ÐnôlÔkØâ jÍ¿`lÍlkØâ HnÿÿÍ¿HnÿÿÍ¿HnÿÿÍ¿HnÿÿÍ¿HnÿÿÍ¿HnÿÿÍ¿HnÿÿÍ¿Hlj ¿HjÏ ¿H`Èl€åjð‘k€jÏ P¿HjÏ Ð¿HldØââ lwjö` (285 \KEYBOARDON 280 MOUSECHORDWAIT 249 \ALLOCBLOCK 197 \PUTBASEFIXP 136 \ALLOCBLOCK 108 \ALLOCLOCKED 76 ALLOCSTRING 48 \ALLOCBLOCK 31 \ALLOCLOCKED 19 KEYACTIONTABLE 4 KEYACTIONTABLE) (275 \MOUSECHORDMILLISECONDS 270 \MOUSETIMERTEMP 262 FIXP 254 \SHIFTSTATE 238 \LASTKEYSTATE 210 \EM.KBDAD3 122 \KEYBOARDEVENTQUEUE 113 \KEYBOARDEVENTQUEUE 94 \LASTUSERACTION 86 \MISCSTATS 81 \SAVEDSYSBUFFER 62 \SYSBUFFER 53 \SYSBUFFER 36 \INTERRUPTSTATE 24 \COMMANDKEYACTION 14 \CURRENTKEYACTION 9 \DEFAULTKEYACTION) () \KEYBOARDEVENTFN :D8 (L (2 EXTRA 1 EVENT 0 FDEV) F 1 \MAIKO.XBEFORE?) ™Agð³Agð³AgðªAdgð²<¿``È!lågð´o oôcgð³ Agð³Agð¬Agð´‚±``ð²%Qgð´o oô𒱃gð³2°&dHH` ¿HH` µÛ°:` -°&dHH` ¿HH` µÛ gð´V``È!låð³E` -°&dHH` ¿HH` µÛ h(404 MOUSECHORDWAIT 399 MOUSECHORDWAIT 389 KEYACTION 374 KEYACTION 353 \APPEND2 348 \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 312 MACHINETYPE 306 MOUSECHORDWAIT 301 MOUSECHORDWAIT 291 KEYACTION 276 KEYACTION 255 \APPEND2 250 \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 233 KEYACTION 218 KEYACTION 197 \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 184 MACHINETYPE 168 UNIX-GETPARM 150 MACHINETYPE 84 UNIX-GETPARM 66 MACHINETYPE) (384 \DEFAULTKEYACTION 369 \COMMANDKEYACTION 343 \ORIGKEYACTIONS 330 \InterfacePage 325 \MAIKO.BEFOREKEYTYPE 317 MAIKO 286 \DEFAULTKEYACTION 271 \COMMANDKEYACTION 245 \ORIGKEYACTIONS 228 \DEFAULTKEYACTION 213 \COMMANDKEYACTION 189 MAIKO 155 MAIKO 141 \KEYBOARD.BEFORETYPE 136 \MACHINETYPE 124 AFTERSAVEVM 116 AFTERSYSOUT 107 AFTERMAKESYS 98 AFTERLOGOUT 71 MAIKO 61 \MAIKO.BEFOREKEYTYPE 51 \InterfacePage 46 \KEYBOARD.BEFORETYPE 41 \MACHINETYPE 32 BEFORESAVEVM 23 BEFORESYSOUT 14 BEFOREMAKESYS 5 BEFORELOGOUT) ( 173 "X" 163 "DISPLAY" 89 "X" 79 "DISPLAY") \ALLOCLOCKED :D8 (L (0 NCELLS)) (@h@dl€ñ’¿l€ HdÓlÿå@àØlÿØã -H(36 \LOCKCELL 15 \ALLOCBLOCK) NIL () \SETIOPOINTERS :D8 NIL ig`È -dlð§dl𢱿go -¿go -¿go -¿go -¿goþ -¿goþ -¿goþ -¿goþ -¿goþ -¿g`lBÐ -¿`nÿÿÍ¿g`lCÐ -¿`nÿÿÍ¿go -¿go -¿go -¿g`Èàààà -±$dlð§dlð¢±$¿g`l;Ð -¿g`l<Ð -¿g`lîÐ -¿g`lïÐ -¿g`l=Ð -¿g`l>Ð -¿g`l?Ð -¿g`l@Ð -¿g`lAÐ -¿g`lBÐ -¿g`lCÐ -¿g`lëÐ -¿g`lðÐ -¿gh -¿g`lð“}C‚n -±ölð¢±êgHkÐ -¿gHlÐ -¿gHlÐ -¿gHlÐ -¿gHlÐ -¿gHlÐ -¿g -¿g -¿g -¿g`lëÐ -¿g`lîÐ -¿g`lïÐ -¿gH -¿g -…¿g`l<Ð -(870 SETTOPVAL 851 RAID 844 SETTOPVAL 839 \DoveDisplay.ScreenWidth 828 SETTOPVAL 816 SETTOPVAL 797 SETTOPVAL 778 SETTOPVAL 759 SETTOPVAL 754 \DoveDisplay.GetCursorBitmapBase 743 SETTOPVAL 738 \DoveMisc.GetMouseYBase 727 SETTOPVAL 722 \DoveMisc.GetMouseXBase 711 SETTOPVAL 696 SETTOPVAL 681 SETTOPVAL 666 SETTOPVAL 651 SETTOPVAL 636 SETTOPVAL 620 \DoveMisc.GetKBDBase 605 SETTOPVAL 578 SETTOPVAL 566 SETTOPVAL 547 SETTOPVAL 528 SETTOPVAL 509 SETTOPVAL 490 SETTOPVAL 471 SETTOPVAL 452 SETTOPVAL 433 SETTOPVAL 414 SETTOPVAL 395 SETTOPVAL 376 SETTOPVAL 357 SETTOPVAL 338 SETTOPVAL 303 SETTOPVAL 281 SETTOPVAL 265 SETTOPVAL 249 SETTOPVAL 222 SETTOPVAL 192 SETTOPVAL 173 SETTOPVAL 157 SETTOPVAL 141 SETTOPVAL 125 SETTOPVAL 109 SETTOPVAL 93 SETTOPVAL 77 SETTOPVAL 61 SETTOPVAL 45 SETTOPVAL 16 SETTOPVAL) (862 \InterfacePage 857 \EM.UTILIN 834 SCREENWIDTH 822 \EM.REALUTILIN 808 \IOPAGE 803 \EM.CURSORY 789 \IOPAGE 784 \EM.CURSORX 770 \IOPAGE 765 \EM.DISPINTERRUPT 749 \EM.CURSORBITMAP 733 \EM.MOUSEY 717 \EM.MOUSEX 702 \EM.KBDAD5 687 \EM.KBDAD4 672 \EM.KBDAD3 657 \EM.KBDAD2 642 \EM.KBDAD1 628 \EM.KBDAD0 589 \MACHINETYPE 584 SCREENWIDTH 572 \EM.DISPLAYHEAD 558 \IOPAGE 553 \EM.CURSORBITMAP 539 \IOPAGE 534 \EM.DISPINTERRUPT 520 \IOPAGE 515 \EM.KBDAD5 501 \IOPAGE 496 \EM.KBDAD4 482 \IOPAGE 477 \EM.KBDAD3 463 \IOPAGE 458 \EM.KBDAD2 444 \IOPAGE 439 \EM.KBDAD1 425 \IOPAGE 420 \EM.KBDAD0 406 \IOPAGE 401 \EM.REALUTILIN 387 \IOPAGE 382 \EM.CURSORY 368 \IOPAGE 363 \EM.CURSORX 349 \IOPAGE 344 \EM.MOUSEY 330 \IOPAGE 325 \EM.MOUSEX 292 \InterfacePage 287 SCREENWIDTH 271 \EM.DISPLAYHEAD 255 \EM.CURSORBITMAP 239 \EM.DISPINTERRUPT 228 \EM.KBDAD5 214 \InterfacePage 209 \EM.KBDAD5 198 \EM.KBDAD4 184 \InterfacePage 179 \EM.KBDAD4 163 \EM.KBDAD3 147 \EM.KBDAD2 131 \EM.KBDAD1 115 \EM.KBDAD0 99 \EM.REALUTILIN 83 \EM.CURSORY 67 \EM.CURSORX 51 \EM.MOUSEY 35 \EM.MOUSEX 9 \InterfacePage 4 \MACHINETYPE) () \KEYBOARDOFF :D8 NIL `dÈnßÿåÍ`lð´h}RNIL (18 \MACHINETYPE 4 \EM.DISPINTERRUPT) () \KEYBOARDON :D8 (L (0 NOCHECK)) #`dÈn äÍ`lð´i}R(4 \SETIOPOINTERS) (23 \MACHINETYPE 9 \EM.DISPINTERRUPT) () \KEYHANDLER :D8 NIL (4 \KEYHANDLER1) NIL () \KEYHANDLER1 :D8 NIL ³nÿÿdddddddl -l`@Í)¿`AÍ*¿n€`Èñ²ã`@Í)¿`AÍ*¿`n€Í¿`@Í¿`AÍ¿`—@A -¿`lð—@A -¿`@Í`AÍA(359 \DoveDisplay.SetCursorPosition 342 \SOFTCURSORPOSITION 231 \DoveMisc.SetMousePosition) (373 \EM.CURSORY 365 \EM.CURSORX 348 \MACHINETYPE 334 \SOFTCURSORUPP 325 \EM.MOUSEY 316 \EM.MOUSEX 305 \IOPAGE 296 \IOPAGE 287 \IOPAGE 277 \IOPAGE 265 \IOPAGE 256 \IOPAGE 218 \MACHINETYPE 208 \MACHINETYPE 197 \CURSORHOTSPOTY 192 \CURSORDESTHEIGHT 181 \CURSORHOTSPOTY 168 \MACHINETYPE 159 \MACHINETYPE 150 \CURSORHOTSPOTY 125 \CURSORHOTSPOTY 120 \CURSORDESTHEIGHT 105 \CURSORDESTHEIGHT 91 \CURSORHOTSPOTX 86 \CURSORDESTWIDTH 72 \CURSORHOTSPOTX 60 \MACHINETYPE 51 \CURSORHOTSPOTX 26 \CURSORHOTSPOTX 21 \CURSORDESTWIDTH 9 \MISCSTATS 4 \LASTUSERACTION) () (RPAQQ \SUN.TYPE3KEYBOARD 0) (RPAQQ \SUN.TYPE4KEYBOARD 1) (RPAQQ \SUN.JLEKEYBOARD 2) (RPAQQ \TOSHIBA.JIS 7) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) (RPAQ? \MOUSECHORDTICKS) (RPAQ? \MOUSECHORDMILLISECONDS 50) (\KEYBOARDINIT) (RPAQQ \KEYNAMES ((5 %% FIVE) (4 $ FOUR) (6 ~ SIX) (e E) (7 & SEVEN) (d D) (u U) (v V) (0 %) ZERO) (k K) (- %) (p P) (/ ?) (\ %| FONT LOOKS) (LF SAME) (BS <-) (3 %# THREE) (2 @ TWO) (w W) (q Q) (s S) (a A) (9 %( NINE) (i I) (x X) (o O) (l L) (%, <) (%' %") (%] }) (BLANK-MIDDLE OPEN DBK-HELP) (BLANK-TOP KEYBOARD DBK-META) (1 ! ONE) (ESC ESCAPE ->) (TAB =>) (f F) (CTRL PROP'S EDIT) (c C) (j J) (b B) (z Z) (LSHIFT) (%. >) (; %:) (CR <-%|) (_ ^) (DEL DELETE) (SKIP NEXT) (r R) (t T) (g G) (y Y) (h H) (8 * EIGHT) (n N) (m M) (LOCK) (SPACE) (%[ {) (= +) (RSHIFT) (BLANK-BOTTOM STOP) (MOVE) (UNDO) (UTIL0 SUN-KEYPAD=) (UTIL1 SUN-KEYPAD/) (UTIL2 SUPER/SUB) (UTIL3 CASE) (UTIL4 STRIKEOUT) (UTIL5 KEYPAD2) ( UTIL6 KEYPAD3 PGDN) (UTIL7 SUN-LF) (PAD1 LEFTKEY CAPSLOCK KEYPAD+) (PAD2 LEFTMIDDLEKEY NUMLOCK KEYPAD- ) (PAD3 MIDDLEKEY SCROLLLOCK KEYPAD*) (PAD4 RIGHTMIDDLEKEY BREAK KEYPAD/ SUN-PAUSE) (PAD5 RIGHTKEY DOIT PRTSC) (LEFT RED MOUSERED) (RIGHT BLUE MOUSEBLUE) (MIDDLE YELLOW MOUSEYELLOW) (MARGINS) (K41 KEYPAD7 HOME) (K42 KEYPAD8) (K43 KEYPAD9 PGUP) (K44 KEYPAD4) (K45 KEYPAD5) (K46 SUN-LEFT-SPACE) (K47 KEYPAD6) (K48 SUN-RIGHT-SPACE) (COPY) (FIND) (AGAIN) (HELP) (DEF'N EXPAND) (K4E KEYPAD1 END) ( ALWAYS-ON-1) (ALWAYS-ON-2) (CENTER) (K52 KEYPAD0 INS) (BOLD) (ITALICS) (UNDERLINE) (SUPERSCRIPT) ( SUBSCRIPT) (LARGER SMALLER) (K59 KEYPAD%| KEYPAD.) (K5A KEYPAD\ KEYPAD, SUN-F10) (K5B SUN-F11) (K5C SUN-F12) (DEFAULTS SUN-PROP) (K5E SUN-PRTSC) (K5F SUN-OPEN))) (RPAQQ \ORIGKEYACTIONS ((0 (53 "%%" NOLOCKSHIFT)) (1 (52 "$" NOLOCKSHIFT)) (2 (54 "~" NOLOCKSHIFT)) (3 ("e" "E" LOCKSHIFT)) (4 (55 "&" NOLOCKSHIFT)) (5 ("d" "D" LOCKSHIFT)) (6 ("u" "U" LOCKSHIFT)) (7 ("v" "V" LOCKSHIFT)) (8 (48 ")" NOLOCKSHIFT)) (9 ("k" "K" LOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (11 ("p" "P" LOCKSHIFT)) (12 ("/" "?" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (15 (8 8 NOLOCKSHIFT)) (16 (51 "#" NOLOCKSHIFT)) (17 (50 "@" NOLOCKSHIFT)) (18 ("w" "W" LOCKSHIFT)) (19 ("q" "Q" LOCKSHIFT)) (20 ("s" "S" LOCKSHIFT)) (21 ("a" "A" LOCKSHIFT)) (22 (57 "(" NOLOCKSHIFT)) (23 ("i" "I" LOCKSHIFT)) (24 ("x" "X" LOCKSHIFT)) (25 ("o" "O" LOCKSHIFT)) (26 ("l" "L" LOCKSHIFT)) (27 ("," "<" NOLOCKSHIFT)) (28 ("'" "%"" NOLOCKSHIFT)) (29 ("]" "}" NOLOCKSHIFT)) (30 (194 194 NOLOCKSHIFT)) ( 31 (193 193 NOLOCKSHIFT)) (32 (49 "!" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (34 (9 9 NOLOCKSHIFT)) ( 35 ("f" "F" LOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (37 ("c" "C" LOCKSHIFT)) (38 ("j" "J" LOCKSHIFT)) (39 ( "b" "B" LOCKSHIFT)) (40 ("z" "Z" LOCKSHIFT)) (41 1SHIFTDOWN . 1SHIFTUP) (42 ("." ">" NOLOCKSHIFT)) (43 (";" ":" NOLOCKSHIFT)) (44 (13 13 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)) (46 (127 535 NOLOCKSHIFT)) (47 ("(" "[" NOLOCKSHIFT)) (48 ("r" "R" LOCKSHIFT)) (49 ("t" "T" LOCKSHIFT)) (50 ("g" "G" LOCKSHIFT)) (51 ("y" "Y" LOCKSHIFT)) (52 ("h" "H" LOCKSHIFT)) (53 (56 "*" NOLOCKSHIFT)) (54 ("n" "N" LOCKSHIFT)) (55 ("m" "M" LOCKSHIFT)) (56 LOCKDOWN . LOCKUP) (57 (32 32 NOLOCKSHIFT)) (58 ("[" "{" NOLOCKSHIFT)) ( 59 ("=" "+" NOLOCKSHIFT)) (60 2SHIFTDOWN . 2SHIFTUP) (61 (195 195 NOLOCKSHIFT)) (63 (")" "]" NOLOCKSHIFT)) (77 EVENT . EVENT) (78 EVENT . EVENT) (79 EVENT . EVENT) (102 LOCKDOWN) (103 LOCKUP))) (RPAQQ \DLIONKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 ("\" "|" NOLOCKSHIFT) ) (45 (96 "~" NOLOCKSHIFT)) (OPEN METADOWN . METAUP) (PROP'S CTRLDOWN . CTRLUP) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) ( MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT )) (SUPERSCRIPT ("2,113" "2,153" NOLOCKSHIFT)) (SUBSCRIPT ("2,114" "2,154" NOLOCKSHIFT)) (LARGER ( "2,110" "2,150" NOLOCKSHIFT)) (DEFAULTS ("2,115" "2,155" NOLOCKSHIFT)) (93 (27 "2,64" NOLOCKSHIFT)) ( 47 ("2,22" "2,62" NOLOCKSHIFT)) (31 ("2,5" "2,45" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (80 ( "2,13" "2,53" NOLOCKSHIFT)) (FONT ("2,112" "2,152" NOLOCKSHIFT)))) (RPAQQ \DLIONOSDKEYACTIONS ((56 LOCKTOGGLE))) (RPAQQ \DORADOKEYACTIONS ((2 (54 "~" NOLOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT )) (14 (10 96 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)))) (RPAQQ \DOVEKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) ( 56 CTRLDOWN . CTRLUP) (65 (27 27 NOLOCKSHIFT)) (71 (39 34 NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT )) (108 (96 126 NOLOCKSHIFT)) (DBK-META METADOWN . METAUP) (DBK-HELP ("2,1" "2,41" NOLOCKSHIFT)) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (EDIT ("2,5" "2,45" NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) ( CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (CASE ("2,104" "2,144" NOLOCKSHIFT)) (STRIKEOUT ("2,105" "2,145" NOLOCKSHIFT)) ( UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPER/SUB ("2,107" "2,147" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (MARGINS ("2,111" "2,151" NOLOCKSHIFT)) (LOOKS ("2,112" "2,152" NOLOCKSHIFT)) ( CAPSLOCK LOCKTOGGLE) (NUMLOCK ("2,11" "-" NOLOCKSHIFT)) (SCROLLLOCK ("2,12" 180 NOLOCKSHIFT)) (BREAK ( 2 184 NOLOCKSHIFT)) (DOIT ("2,13" "2,53" NOLOCKSHIFT)) (KEYPAD7 ("2,14" 55 NOLOCKSHIFT)) (KEYPAD8 (173 56 NOLOCKSHIFT)) (KEYPAD9 ("2,15" 57 NOLOCKSHIFT)) (KEYPAD4 (172 52 NOLOCKSHIFT)) (KEYPAD5 ("2,16" 53 NOLOCKSHIFT)) (KEYPAD6 (174 54 NOLOCKSHIFT)) (KEYPAD1 ("2,17" 49 NOLOCKSHIFT)) (KEYPAD2 (175 50 NOLOCKSHIFT)) (KEYPAD3 ("2,20" 51 NOLOCKSHIFT)) (KEYPAD0 ("2,21" 48 NOLOCKSHIFT)) (KEYPAD%| ("|" 46 NOLOCKSHIFT)) (KEYPAD\ ("\" 44 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)))) (RPAQQ \DOVEOSDKEYACTIONS ((56 LOCKDOWN . LOCKUP) (36 CTRLDOWN . CTRLUP) (CAPSLOCK ("2,5" "2,45" NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONS ((61 (5 7 NOLOCKSHIFT)) (91 (520 552 NOLOCKSHIFT)) (92 (513 545 NOLOCKSHIFT)) (30 (513 545 NOLOCKSHIFT)) (63 (516 548 NOLOCKSHIFT)) (93 (532 564 NOLOCKSHIFT)) (62) (111 (329 263 NOLOCKSHIFT)) (89) (90 (515 547 NOLOCKSHIFT)) (73 (521 521 NOLOCKSHIFT)) (74 (522 522 NOLOCKSHIFT)) ( 75 (2 2 NOLOCKSHIFT)) (81 (524 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 (525 57 NOLOCKSHIFT)) ( 84 (172 52 NOLOCKSHIFT)) (85 (526 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 (527 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 (528 51 NOLOCKSHIFT)) (98 (529 48 NOLOCKSHIFT)) (76 (523 555 NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 (577 609 NOLOCKSHIFT)) (99 (578 610 NOLOCKSHIFT)) (100 (579 611 NOLOCKSHIFT)) (67 (580 612 NOLOCKSHIFT)) (68 (581 613 NOLOCKSHIFT)) (101 (582 614 NOLOCKSHIFT)) (66 ( 583 615 NOLOCKSHIFT)) (104 (584 616 NOLOCKSHIFT)) (80 (585 617 NOLOCKSHIFT)) (13 (23 21 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (2 (54 94 NOLOCKSHIFT)) (10 (45 95 NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 (96 126 NOLOCKSHIFT)) (31 METADOWN . METAUP) (14 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 (530 562 NOLOCKSHIFT)) (105 (92 124 NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONST4 ((61 ("^E" "^G" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (30 ("2,1" "2,41" NOLOCKSHIFT)) (109 ("2,25" "2,65" NOLOCKSHIFT)) (63 ("2,4" "2,44" NOLOCKSHIFT)) (14 METADOWN . METAUP) (93 ("2,24" "2,64" NOLOCKSHIFT)) (62) (111 ("1,111" "1,79" NOLOCKSHIFT)) (89) (90 ("2,3" "2,43" NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT )) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 ("2,17" 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (98 ("2,21" 48 NOLOCKSHIFT)) (76 ("2,13" "2,13" NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 ("2,101" "2,141" NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (100 ("2,103" "2,143" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (68 ("2,105" "2,145" NOLOCKSHIFT)) (101 ( "2,106" "2,146" NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) ( 80 ("2,111" "2,151" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (33 ("ESC" "ESC" NOLOCKSHIFT)) (64 IGNORE . IGNORE) (65 (27 27 NOLOCKSHIFT)) (95 IGNORE . IGNORE) (96 IGNORE . IGNORE) (102 IGNORE . IGNORE) (2 ("6" "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 ("`" "~" NOLOCKSHIFT)) (31 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 ( "2,22" "2,62" NOLOCKSHIFT)) (86 IGNORE . IGNORE) (88 IGNORE . IGNORE) (105 ("\" "|" NOLOCKSHIFT)))) (RPAQQ \MAIKO-JLE-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("\" "_" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (14 METADOWN . METAUP) (15 (8 8 NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (29 ( "[" "{" NOLOCKSHIFT)) (30 ("]" "}" NOLOCKSHIFT)) (31 METADOWN . METAUP) (33 ("ESC" "ESC" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (43 (";" "+" NOLOCKSHIFT)) (45 ("^" "~" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (56 LOCKTOGGLE . IGNORE) (58 ("@" "`" NOLOCKSHIFT)) (59 ("-" "=" NOLOCKSHIFT)) (61 ("^E" "^G" NOLOCKSHIFT)) (62) (63 ("2,4" "2,44" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (71 (10 10 NOLOCKSHIFT)) ( 72 (766 766 NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (86 (765 765 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (88 (770 771 NOLOCKSHIFT)) (90 ("2,3" "2,43" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (96 IGNORE . IGNORE) (98 ("2,21" 48 NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) ( 101 ("2,106" "2,146" NOLOCKSHIFT)) (102 IGNORE . IGNORE) (103 (767 768 NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (105 ("\" "|" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (109 (769 769 NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (111 ("1,111" "1,79" NOLOCKSHIFT)))) (RPAQQ \TOSHIBA-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("-" "=" NOLOCKSHIFT)) (59 ("^" "~" NOLOCKSHIFT)) (45 ("\" "|" NOLOCKSHIFT)) (58 ("@" "`" NOLOCKSHIFT)) ( 29 ("[" "{" NOLOCKSHIFT)) (105 ("]" "}" NOLOCKSHIFT)) (43 (";" "+" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (15 (23 95 NOLOCKSHIFT)) (13 (8 8 NOLOCKSHIFT)) (86 METADOWN . METAUP) (73 (530 562 NOLOCKSHIFT)) (88 ("2,24" "2,64" NOLOCKSHIFT)) (98 IGNORE . IGNORE) (75 ("2,11" "2,11" NOLOCKSHIFT)) ( 110 ("2,12" "2,12" NOLOCKSHIFT)) (74 ("^B" "^B" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (173 56 NOLOCKSHIFT)) (95 ("2,15" 57 NOLOCKSHIFT)) (81 (172 52 NOLOCKSHIFT)) (82 ("2,16" 53 NOLOCKSHIFT)) (83 (174 54 NOLOCKSHIFT)) (84 ("2,17" 49 NOLOCKSHIFT)) (85 (175 50 NOLOCKSHIFT)) (87 ("2,20" 51 NOLOCKSHIFT)) (94 ("2,21" 48 NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 LOCKTOGGLE))) (RPAQQ KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL) (RPAQ? \KEYBOARD.META 256) (RPAQ? \MODIFIED.KEYACTIONS) (ADDTOVAR GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) KEYACTION :D8 (L (2 TABLE 1 ACTIONS 0 KEYNAME)) ƒ@d¤ Bµ`Id ²7¿lI ñ³*IdÉ•dɲ É ²IdÉ š¿IÉ ¦I ¿lpHØAd—µgI HAd—µgI (127 \KEYACTION1 109 \KEYACTION1 87 \ILLEGAL.ARG 80 \BLOCKDATAP 70 \BLOCKDATAP 59 \BLOCKDATAP 38 \#BLOCKDATACELLS 27 \BLOCKDATAP 9 \KEYNAMETONUMBER) (121 IGNORE 103 IGNORE 17 \CURRENTKEYACTION) () KEYACTIONTABLE :D8 (L (0 OLD) F 1 KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS) S@µ‚±šlk -HlpdØlØââ ¿HlpdÔkØâ ¿HlpdÔkØâ ¿HlÿkØlØâââââ ¿HlpdÔkØâ  -¿HlpdÔlpÔlpÔi - ¿Hb` Q - -±³d ²9¿l@ ñ³,@dÉ•dɲ"dÉ ²¿@dÉ š¿@É ¦@ ¿lk -H@É H@É H@É H@É H@É H@É -  -H@É  HdHH@ µî(331 KEYACTION 312 COPYALL 301 COPYALL 290 COPYALL 279 COPYALL 268 COPYALL 257 COPYALL 246 COPYALL 234 \ALLOCBLOCK 225 \ILLEGAL.ARG 218 \BLOCKDATAP 208 \BLOCKDATAP 196 \BLOCKDATAP 174 \#BLOCKDATACELLS 163 \BLOCKDATAP 154 \APPEND2 149 \APPEND2 143 \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 138 COPY 121 \ALLOCBLOCK 101 \ALLOCBLOCK 85 \ALLOCBLOCK 64 \ALLOCBLOCK 48 \ALLOCBLOCK 32 \ALLOCBLOCK 14 \ALLOCBLOCK) (133 \ORIGKEYACTIONS) () KEYBOARDTYPE :D8 NIL ~Hdgð²R¿o o -µNo µ8oo -´"ggð³Hdgð¨gð´H(89 STREQUAL 84 UNIX-GETPARM 67 MKATOM 62 U-CASE 57 UNIX-GETENV 43 SASSOC 33 L-CASE 28 UNIX-GETENV 4 MACHINETYPE) (119 DOVE 112 DANDELION 102 DORADO 96 FULL-IBMPC 14 MAIKO) ( 79 "ARCH" 74 "dos" 52 "LDEKBDTYPE" 38 (("type3" SUN3) ("type4" SUN4) ("type5" SUN5)) 23 "LDEKBDTYPE") RESETKEYACTION :D8 (L (2 RESETINTERRUPTS 1 FROM 0 TABLE)) á@d ²9¿l@ ñ³,@dÉ•dɲ"dÉ ²¿@dÉ š¿@É ¦@ ¿Aµ `b ²3lA ñ³(AdɕɲAÉ ²AÉ ˜AÉ ¦@ ¿@ÉAÉ@É àÄ@ÉAÉ@É àÄ@ÉAÉ@É àÄB²@ÉAÉ@É àÄ¿@AÉ @(219 COPY 207 \#BLOCKDATACELLS 188 \#BLOCKDATACELLS 172 \#BLOCKDATACELLS 156 \#BLOCKDATACELLS 141 \ILLEGAL.ARG 134 \BLOCKDATAP 125 \BLOCKDATAP 115 \BLOCKDATAP 94 \#BLOCKDATACELLS 84 \BLOCKDATAP 68 \ILLEGAL.ARG 61 \BLOCKDATAP 51 \BLOCKDATAP 39 \BLOCKDATAP 17 \#BLOCKDATACELLS 6 \BLOCKDATAP) (77 \DEFAULTKEYACTION) () \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS :D8 (F 1 \MAIKOKEYACTIONS F 2 \MAIKOKEYACTIONST4 F 3 \MAIKO-JLE-KEYACTIONS F 4 \TOSHIBA-KEYACTIONS) ³`dlð•`dlð•`dlð²o¿o oô´o`È!låjô—QH -`È!låkô—RH -`È!lålô‘S`È!lålô—RT -Qlð´ lñ¯`` -`(170 \APPEND2 151 \DoveMisc.ReadKeyboardType 138 \APPEND2 100 \APPEND2 79 \APPEND2 43 UNIX-GETPARM) (176 \DOVEKEYACTIONS 165 \DOVEOSDKEYACTIONS 160 \DOVEKEYACTIONS 122 \InterfacePage 106 \InterfacePage 85 \InterfacePage 64 \InterfacePage 25 \DLIONKEYACTIONS 14 \DORADOKEYACTIONS 4 \MACHINETYPE) ( 56 ((56 LOCKDOWN . LOCKUP) (72 LOCKDOWN . LOCKUP)) 48 "X" 38 "DISPLAY") \KEYACTION1 :D8 (L (2 TABLE 1 ACTION 0 TI)) )BÉ@Âdjð˜¿g±dlð¥dlð²n¿BÉ@ÐÈdnÿÿÙjð²¿gBÉ @àÐÉhBÉ@ÐÈdnÿÿÙjð²¿gBÉ @lpØlpØàÐÉhBÉ -@ÐÈBÉ@Âlð•g„gh±œdkð˜¿g±dlð˜¿g±dlð˜¿g±sdlð²%¿gBÉ @àÐÉBÉ @lpØlpØàÐÉh±Jdlð˜¿g±

¿dg8¿dg6¿dg4¿dg2¿dg*¿dg ¿dg¿dg¿dg¿dg ¿dg¿ -l djÏ0¿djÏ ¿dg¿d` -¿dnÿÿÍ5¿`HdIÍ4¿dh2¿d`.¿dg*¿dg(¿dg&¿dg$¿`HdIÍ¿dj¿dj¿djÏ 0¿djÏ ¿djÍ¿dlÏ¿dh¿djÏ¿dg -¿(439 \SETACCESS 263 \DEFINEDEVICE) (445 \KEYBOARD.STREAM 434 INPUT 373 FILELINELENGTH 365 \STREAM.NOT.OPEN 356 \STREAM.NOT.OPEN 347 \FILEOUTCHARFN 338 \EOSERROR 329 \NOIMAGEOPS 308 \STREAM.DEFAULT.MAXBUFFERS 293 \KEYBOARD.DEVICE 284 {KEYBOARD} 258 \KEYBOARD.DEVICE 250 NILL 241 NILL 232 \GENERIC.RENAMEFILE 223 NILL 214 NILL 205 NILL 196 NILL 187 \GENERIC.READCHAR 178 \GENERIC.WRITECHAR 169 \GENERIC.PEEKCHAR 160 \GENERIC.UNREADCHAR 151 \GENERIC.BINS 142 \GENERIC.BOUTS 133 NILL 124 \GENERIC.CHARSET 115 \ILLEGAL.DEVICEOP 106 \IS.NOT.RANDACCESSP 97 \IS.NOT.RANDACCESSP 88 \GENERIC.READCCODE 79 \INIT.KEYBOARD.STREAMA0008 70 NILL 61 \SYSBUFP 52 \PEEKSYSBUF 43 \GETKEY 34 \KEYBOARDEVENTFN 25 NILL 16 KEYBOARD 9 |FDEVTYPE#| 4 KEYBOARD) () (\INIT.KEYBOARD.STREAM) \DOBUFFEREDTRANSITIONS :D8 (P 4 \INTERRUPTABLE P 0 PENDINGINTERRUPT I 0 \INTERRUPTABLE) _g@`ÈZjð²"`j`Ê 0jð’±p`jÂkä±n`JÐ[dÈ`Èð³ ¿j`ÈKÈ ¿`KÈÍ¿KÈ`Èð³l`ÈKÈ ¿`KÈÍ¿KdÈ`Èð³!¿l `ÈKÈ ¿`KÈÍ¿KÈ`Èð³l0`ÈKÈ ¿`KÈÍ¿KdÈ`Èð³!¿lP`ÈKÈ ¿`KÈÍ¿KÈ`Èð³l``ÈKÈ ¿`KÈÍ¿KÈ`Èð³l@`ÈKÈ ¿`KÈÍ¿`nôJñ¢lƒlJØYÍ¿I`Èð¢±þ‚`jÍ¿±þv`jÂlþåÇ¿`j`Ê @jðª`jÂlä‰`jÂlýåÇ¿`j`Ê Pjðª`jÂlä‰`jÂlûåÇ¿`k`Ê `jð¡d€jÇ¿`l`Ê pjð¡k€jÇ¿`l`Ê €jð«`lÂläŠ`lÂl÷åÇ¿`l`Ê jðª`lÂkäŠ`lÂlþåÇ¿`l`Ê  jð«`lÂläŠ`lÂlýåÇ¿`l`Ê °jð«`lÂläŠ`lÂlûåÇ¿`l`Ê Àjð«`lÂläŠ`lÂlïåÇ¿`l`Ê Ðjð«`lÂl äŠ`lÂlßåÇH¬`¦hg/ɬihhdi(860 INTERRUPTED 350 \DOTRANSITIONS 308 \DOTRANSITIONS 266 \DOTRANSITIONS 222 \DOTRANSITIONS 180 \DOTRANSITIONS 136 \DOTRANSITIONS 94 \DOTRANSITIONS) (851 \KEYBUFFERING 845 \PENDINGINTERRUPT 838 \KEYBUFFERING 832 \PENDINGINTERRUPT 822 \INTERRUPTABLE 816 \KEYBUFFERING 809 \PENDINGINTERRUPT 795 \SHIFTSTATE 783 \SHIFTSTATE 772 \LASTKEYSTATE 765 \SHIFTSTATE 752 \SHIFTSTATE 740 \SHIFTSTATE 729 \LASTKEYSTATE 722 \SHIFTSTATE 709 \SHIFTSTATE 697 \SHIFTSTATE 686 \LASTKEYSTATE 679 \SHIFTSTATE 666 \SHIFTSTATE 654 \SHIFTSTATE 643 \LASTKEYSTATE 636 \SHIFTSTATE 623 \SHIFTSTATE 612 \SHIFTSTATE 601 \LASTKEYSTATE 594 \SHIFTSTATE 581 \SHIFTSTATE 569 \SHIFTSTATE 558 \LASTKEYSTATE 551 \SHIFTSTATE 535 \LASTKEYSTATE 528 \SHIFTSTATE 512 \LASTKEYSTATE 506 \SHIFTSTATE 494 \SHIFTSTATE 483 \SHIFTSTATE 472 \LASTKEYSTATE 466 \SHIFTSTATE 454 \SHIFTSTATE 443 \SHIFTSTATE 432 \LASTKEYSTATE 426 \SHIFTSTATE 414 \SHIFTSTATE 402 \KEYBOARDEVENTQUEUE 390 \KEYBOARDEVENTQUEUE 367 \KEYBOARDEVENTQUEUE 356 \LASTKEYSTATE 340 \LASTKEYSTATE 328 \LASTKEYSTATE 314 \LASTKEYSTATE 298 \LASTKEYSTATE 286 \LASTKEYSTATE 272 \LASTKEYSTATE 256 \LASTKEYSTATE 243 \LASTKEYSTATE 228 \LASTKEYSTATE 212 \LASTKEYSTATE 200 \LASTKEYSTATE 186 \LASTKEYSTATE 170 \LASTKEYSTATE 157 \LASTKEYSTATE 142 \LASTKEYSTATE 126 \LASTKEYSTATE 114 \LASTKEYSTATE 100 \LASTKEYSTATE 84 \LASTKEYSTATE 72 \LASTKEYSTATE 61 \KEYBOARDEVENTQUEUE 49 \SHIFTSTATE 35 \LASTKEYSTATE 29 \SHIFTSTATE 17 \KEYBOARDEVENTQUEUE 9 \KEYBUFFERING 4 INPROGRESS) () \TIMER.INTERRUPTFRAME :D8 NIL hNIL NIL () \PERIODIC.INTERRUPTFRAME :D8 NIL `H´jHNIL (4 \PERIODIC.INTERRUPT) () (RPAQ? \KEYBUFFERING) (RPAQ? \PERIODIC.INTERRUPT) (RPAQ? \TIMER.INTERRUPT.PENDING) (RPAQ? \PERIODIC.INTERRUPT.FREQUENCY 77) \HARDCURSORUP :D8 (L (1 INVERTFLG 0 NEWCURSOR)) ®h@dÉXdÈ`Èð³@`È -¿@ÉX€Hjd`jlHÈÙldA•g„gg -`dlð¿` ¿°lð´@É@É}@h(143 \DoveDisplay.SetCursorShape 122 BKBITBLT 64 \CURSORBITSPERPIXEL) (165 CURSOR 157 CURSOR 138 CursorBitMap 127 \MACHINETYPE 116 REPLACE 111 INPUT 105 INVERT 92 BITMAP 83 CursorBitMap 71 CURSOR 57 BITMAP 52 \CURSORDESTINATION 41 BITMAP 36 \CURSORDESTINATION 29 BITMAP 20 CURSOR 14 \CURRENTCURSOR 8 \SOFTCURSORP) () \HARDCURSORPOSITION :D8 (L (1 YPOS 0 XPOS)) ú`kÙAÙbj@ñ’j°`@ñ§`kÙ€@`ÙnÿÿåbjAñ’j°`Añ§`kÙ€A`Ùnÿÿåb`dlð²¿dnÿñ“jb¿@nÿñ“jb¿`dlð™¿@A -°Odlð—¿@A}A°Blð²>`@Í)¿`AÍ*¿n€`Èñ²ã`@Í)¿`AÍ*¿`n€Í¿`@Í¿`AÍ`@Í¿`AÍh(132 \DoveMisc.SetMousePosition) (243 \EM.CURSORY 234 \EM.CURSORX 226 \EM.MOUSEY 217 \EM.MOUSEX 206 \IOPAGE 197 \IOPAGE 188 \IOPAGE 178 \IOPAGE 166 \IOPAGE 157 \IOPAGE 119 \MACHINETYPE 87 \MACHINETYPE 75 \CURSORHOTSPOTY 66 \CURSORDESTHEIGHT 58 \CURSORDESTHEIGHT 39 \CURSORHOTSPOTX 30 \CURSORDESTWIDTH 22 \CURSORDESTWIDTH 4 \CURSORDESTHEIGHT) () \HARDCURSORDOWN :D8 NIL ` (9 \CLEARBM) (4 CursorBitMap) () CURSOR.INIT :D8 NIL ~p`hdj`É`È`È`ÈdààààX`dHnÿÿåÍ¿YdkÏ -¿IjÏ -@¿IjÏ -Q¿d `djÍ¿djÍ¿ZdkÏ -¿JjÏ -@¿JjÏ -Q¿d `djÍ¿djÍ¿[dkÏ -¿KkÏ -@¿KkÏ -Q¿d `djÍ¿djÍ¿\dkÏ -¿LjÏ -@¿LlÏ -Q¿d `dHnÿÿåÍ¿]dkÏ -¿MjÏ -@¿MjÏ -Q¿d `dHnÿÿåÍ¿^dkÏ -¿NjÏ -@¿NjÏ -Q¿d h(378 \LOCKCELL 333 \LOCKCELL 288 \LOCKCELL 241 \LOCKCELL 195 \LOCKCELL 149 \LOCKCELL) (372 \SOFTCURSORBBT6 338 |PILOTBBTTYPE#| 327 \SOFTCURSORBBT5 293 |PILOTBBTTYPE#| 282 \SOFTCURSORBBT4 246 |PILOTBBTTYPE#| 235 \SOFTCURSORBBT3 200 |PILOTBBTTYPE#| 189 \SOFTCURSORBBT2 154 |PILOTBBTTYPE#| 143 \SOFTCURSORBBT1 109 |PILOTBBTTYPE#| 98 \CURSORDESTRASTERWIDTH 91 BITMAP 86 ScreenBitMap 81 \CURSORDESTHEIGHT 74 BITMAP 69 ScreenBitMap 64 \CURSORDESTWIDTH 57 BITMAP 52 ScreenBitMap 47 \CURSORDESTLINEBASE 40 BITMAP 35 ScreenBitMap 30 \CURSORDESTLINE 24 \SOFTCURSORDOWNBM 18 \SOFTCURSORUPBM 12 \CURSORDESTINATION 7 ScreenBitMap) () \CURSORDESTINATION :D8 (L (0 DESTINATION) P 1 \INTERRUPTABLE) N@`ð’±@`ÉÈ@Èð³`@È -¿`dlð™¿jd -°Odlð—¿jd}A°Blð²>`jÍ)¿`jÍ*¿n€`Èñ²ã`jÍ)¿`jÍ*¿`n€Í¿`jÍ¿`jÍ¿`jÍ¿`jÍ¿j¿gÁ @Éο@È¿@È¿@Èàààà¸`HnÿÿåÍ¿`HnÿÿåÍ¿`HnÿÿåÍ¿@h(83 \DoveMisc.SetMousePosition 64 \CURSORBITSPERPIXEL) (330 \CURSORDESTINATION 316 PILOTBBT 311 \SOFTCURSORBBT6 298 PILOTBBT 293 \SOFTCURSORBBT5 280 PILOTBBT 275 \SOFTCURSORBBT1 265 \CURSORDESTRASTERWIDTH 258 BITMAP 251 \CURSORDESTHEIGHT 244 BITMAP 237 \CURSORDESTWIDTH 230 BITMAP 219 BITMAP 211 \CURSORDESTLINEBASE 205 \CURSORDESTLINE 195 \EM.CURSORY 186 \EM.CURSORX 177 \EM.MOUSEY 168 \EM.MOUSEX 157 \IOPAGE 148 \IOPAGE 139 \IOPAGE 129 \IOPAGE 117 \IOPAGE 108 \IOPAGE 70 \MACHINETYPE 57 BITMAP 51 \CURRENTCURSOR 41 BITMAP 33 BITMAP 26 CURSOR 21 \CURRENTCURSOR 8 \CURSORDESTINATION) () \SOFTCURSORUP :D8 (L (0 NEWCURSOR)) È ° -@ÉX@ÉYHÈZHÈ\HÈ]`ò4`ÈJð²$`ÈLð²`ÈMð’±ìJ¿L¿JLM ¿JLM ¿`É_k -¿`É_k -¿HÈàààà¾HÈHÈÚ»`NnÿÿåÍ¿`OÒÍ¿`OÓÍ¿`NnÿÿåÍ¿`OÒÍ¿`OÓÍ¿`NnÿÿåÍ¿`KÍ¿`LÍ ¿`OÒÍ¿`OÓÍ¿`NnÿÿåÍ¿`NnÿÿåÍ¿`KÍ¿`LÍ ¿`OÒÍ¿`OÓÍ¿`NnÿÿåÍ¿`NnÿÿåÍ¿`KÍ¿`LÍ ¿`NnÿÿåÍ¿`NnÿÿåÍ¿IÉ_¿`OÒÍ¿`OÓÍ¿HÉ_¿`OÒÍ¿`OÓÍ¿@dk -ih(708 \SOFTCURSORUPCURRENT 697 \TEMPLOCKPAGES 192 \TEMPLOCKPAGES 171 \TEMPLOCKPAGES 145 BITMAPCREATE 131 BITMAPCREATE) (703 \SOFTCURSORP 690 \CURRENTCURSOR 678 PILOTBBT 673 \SOFTCURSORBBT4 662 PILOTBBT 657 \SOFTCURSORBBT4 647 BITMAP 635 PILOTBBT 630 \SOFTCURSORBBT3 619 PILOTBBT 614 \SOFTCURSORBBT3 604 BITMAP 590 PILOTBBT 585 \SOFTCURSORBBT6 572 PILOTBBT 567 \SOFTCURSORBBT5 558 PILOTBBT 553 \SOFTCURSORBBT4 544 PILOTBBT 539 \SOFTCURSORBBT4 526 PILOTBBT 521 \SOFTCURSORBBT4 508 PILOTBBT 503 \SOFTCURSORBBT4 492 PILOTBBT 487 \SOFTCURSORBBT4 476 PILOTBBT 471 \SOFTCURSORBBT4 462 PILOTBBT 457 \SOFTCURSORBBT3 448 PILOTBBT 443 \SOFTCURSORBBT3 430 PILOTBBT 425 \SOFTCURSORBBT3 412 PILOTBBT 407 \SOFTCURSORBBT3 396 PILOTBBT 391 \SOFTCURSORBBT3 380 PILOTBBT 375 \SOFTCURSORBBT3 366 PILOTBBT 361 \SOFTCURSORBBT2 352 PILOTBBT 347 \SOFTCURSORBBT2 334 PILOTBBT 329 \SOFTCURSORBBT2 318 PILOTBBT 313 \SOFTCURSORBBT2 302 PILOTBBT 297 \SOFTCURSORBBT2 284 PILOTBBT 279 \SOFTCURSORBBT2 268 PILOTBBT 263 \SOFTCURSORBBT2 252 PILOTBBT 247 \SOFTCURSORBBT2 234 PILOTBBT 229 \SOFTCURSORBBT1 220 BITMAP 212 BITMAP 199 BITMAP 182 BITMAP 177 \SOFTCURSORDOWNBM 161 BITMAP 156 \SOFTCURSORUPBM 150 \SOFTCURSORDOWNBM 136 \SOFTCURSORUPBM 122 \SOFTCURSORHEIGHT 115 \SOFTCURSORWIDTH 101 BITMAP 96 \SOFTCURSORUPBM 85 BITMAP 80 \SOFTCURSORUPBM 69 BITMAP 64 \SOFTCURSORUPBM 57 BITMAP 52 \SOFTCURSORUPBM 44 BITMAP 35 BITMAP 26 BITMAP 17 CURSOR 8 CURSOR) () \SOFTCURSORUPCURRENT :D8 NIL $ð`ȸ`jÍ¿i¿`Èdnÿñ•nÿÿÙkÙ¹`Èdnÿñ•nÿÿÙkÙºj[¼`½`¾jIñ›jIÙ»MKÙ½j¹°IMØ`ñ—`IÙ½jMñ’±OjJñ›jJÙ¼NLÙ¾jº°JNØ`ñ—`JÙ¾jNñ’±&`Jñ¢±Aj`Ù_¿`dJ𢱿`ÉÈ_IÚ¹OKÚ»OMÚ½`_¿I_¿L`ÈÚ_¿`ÉOÐ_¿`ÉOÐ_¿K_¿`OÒÍ¿`OÓÍ¿`OÍ¿`OÒÍ¿`OÓÍ¿`OÍ¿`MÍ¿`NÍ ¿`OÒÍ¿`OÓÍ¿`OÍ¿`OÒÍ¿`OÓÍ¿`OÍ¿`MÍ¿`NÍ ¿`OÒÍ¿`OÓÍ¿`OÍ¿`OÒÍ¿`OÓÍ¿`OÍ¿`MÍ¿`NÍ ¿`jv¿`jv¿`jv¿`jv¿`j -¿`HÍhkÙ¿gÁ `OÐαýÎJ`ñ¢±ýÑ`dJð’±ýÄkØ¿gÁ ``Ðο°×(709 \SOFTCURSORPILOTBITBLT) (796 \CURSORDESTRASTERWIDTH 791 \CURSORDESTLINEBASE 784 \CURSORDESTLINEBASE 778 \CURSORDESTLINE 764 \CURSORDESTLINE 754 \CURSORDESTLINE 740 \CURSORDESTLINEBASE 733 \CURSORDESTLINEBASE 727 \CURSORDESTLINE 715 \EM.DISPINTERRUPT 703 \SOFTCURSORBBT5 695 \SOFTCURSORBBT4 687 \SOFTCURSORBBT3 679 \SOFTCURSORBBT2 671 \SOFTCURSORBBT1 662 PILOTBBT 657 \SOFTCURSORBBT6 648 PILOTBBT 643 \SOFTCURSORBBT6 633 PILOTBBT 628 \SOFTCURSORBBT6 617 PILOTBBT 612 \SOFTCURSORBBT6 601 PILOTBBT 596 \SOFTCURSORBBT6 586 PILOTBBT 581 \SOFTCURSORBBT6 570 PILOTBBT 565 \SOFTCURSORBBT6 554 PILOTBBT 549 \SOFTCURSORBBT6 540 PILOTBBT 535 \SOFTCURSORBBT5 526 PILOTBBT 521 \SOFTCURSORBBT5 511 PILOTBBT 506 \SOFTCURSORBBT5 495 PILOTBBT 490 \SOFTCURSORBBT5 479 PILOTBBT 474 \SOFTCURSORBBT5 464 PILOTBBT 459 \SOFTCURSORBBT5 448 PILOTBBT 443 \SOFTCURSORBBT5 432 PILOTBBT 427 \SOFTCURSORBBT5 418 PILOTBBT 413 \SOFTCURSORBBT1 404 PILOTBBT 399 \SOFTCURSORBBT1 389 PILOTBBT 384 \SOFTCURSORBBT1 373 PILOTBBT 368 \SOFTCURSORBBT1 357 PILOTBBT 352 \SOFTCURSORBBT1 342 PILOTBBT 337 \SOFTCURSORBBT1 326 PILOTBBT 321 \SOFTCURSORBBT1 310 PILOTBBT 305 \SOFTCURSORBBT1 288 BITMAP 283 \SOFTCURSORDOWNBM 270 BITMAP 265 \SOFTCURSORUPBM 254 BITMAP 249 \SOFTCURSORUPBM 236 \CURSORDESTLINEBASE 214 BITMAP 207 CURSOR 202 \CURRENTCURSOR 189 \CURSORDESTLINE 180 \CURSORDESTRASTERWIDTH 168 \CURSORDESTLINE 153 \CURSORDESTHEIGHT 146 \CURSORDESTHEIGHT 112 \CURSORDESTWIDTH 105 \CURSORDESTWIDTH 80 \SOFTCURSORHEIGHT 74 \SOFTCURSORWIDTH 51 \EM.MOUSEY 31 \EM.MOUSEX 25 \SOFTCURSORUPP 15 \EM.DISPINTERRUPT 7 \EM.DISPINTERRUPT) () \SOFTCURSORPOSITION :D8 (L (1 Y 0 X)) E`ÈX`jÍ`È@ðš`ÈAð³`›¿¿`HÍh(56 \SOFTCURSORUPCURRENT 50 \SOFTCURSORDOWN) (62 \EM.DISPINTERRUPT 44 \SOFTCURSORUPP 33 \EM.CURSORY 23 \EM.CURSORX 15 \EM.DISPINTERRUPT 7 \EM.DISPINTERRUPT) () \SOFTCURSORDOWN :D8 NIL /`ÈX`jÍh`j -`HÍh(35 \SOFTCURSORPILOTBITBLT) (40 \EM.DISPINTERRUPT 29 \SOFTCURSORBBT6 24 \SOFTCURSORUPP 15 \EM.DISPINTERRUPT 7 \EM.DISPINTERRUPT) () CURSORPROP :D8 (L (0 X)) 0eHdlñž¿kalala lð´ kala - (45 \ILLEGAL.ARG 39 GETCURSORPROP 23 PUTCURSORPROP) NIL () GETCURSORPROP :D8 (L (1 PROP 0 CURSOR)) @ÉA'NIL (5 CURSOR) () PUTCURSORPROP :D8 (L (2 VALUE 1 PROP 0 CURSOR) P 1 OLDVALUE) d0@ÉXd²EdA'¹B™HAB °DI´BHdAð²%¿@@ɰ%Að˜Jd¿°JZµíŽBœ@ABhI(28 LISTPUT) (89 CURSOR 53 CURSOR 47 CURSOR 8 CURSOR) () \CURSORBITSPERPIXEL :D8 (L (1 NEWBITSPERPIXEL 0 CURSOR)) §p@ÉÈXdAð’±@ÉY@ÉZ@H I @H J @A -]@A -°1kAçkÙ»j¼@g -LKA ½@g -LKA ¾@M@Nh(144 COLORIZEBITMAP 136 CURSORPROP 124 COLORIZEBITMAP 116 CURSORPROP 95 CURSORPROP 90 \CURSORMASKPROPNAME 81 CURSORPROP 76 \CURSORIMAGEPROPNAME 69 CURSORPROP 63 \CURSORMASKPROPNAME 56 CURSORPROP 50 \CURSORIMAGEPROPNAME) (160 CURSOR 151 CURSOR 131 MASK1 111 IMAGE1 40 CURSOR 31 CURSOR 15 BITMAP 8 CURSOR) () \CURSORIMAGEPROPNAME :D8 (L (0 BITSPERPIXEL)) '@dkð•gdlð•glð•g(36 SHOULDNT) (30 IMAGE8 20 IMAGE4 9 IMAGE1) () \CURSORMASKPROPNAME :D8 (L (0 BITSPERPIXEL)) '@dkð•gdlð•glð•g(36 SHOULDNT) (30 MASK8 20 MASK4 9 MASK1) () CURSORCREATE :D8 (L (4 DATA 3 HOTSPOTY 2 HOTSPOTX 1 MASK 0 IMAGE)) äA3 ¦A ›Bb¿Ab¿hb¿@d lñ³)¿@ lñ’@°Aµ° lñ©A lñ–A ¿B ™Bb¿Bb¿`d@¿Aµ@HdI¿@ kÙB3 µjHdIñ‘¿IjHñ¡H€jHdI¿@ kÙC3 µ -@ kÙHdIñ‘¿IjHñ¡H€jHdI¿dD¿(186 BITMAPHEIGHT 173 BITMAPHEIGHT 127 BITMAPWIDTH 85 POSITIONP 78 \ILLEGAL.ARG 68 BITMAPHEIGHT 58 BITMAPWIDTH 41 BITMAPHEIGHT 29 BITMAPWIDTH 9 POSITIONP) (101 |CURSORTYPE#|) () CURSOR :D8 (L (1 INVERTFLG 0 NEWCURSOR)) m`X@dið—¿`b` -²?¿@A -¿@É¿@ÉÈkÙ@ÉÙ¿‚@µH ¿°ø(104 \ILLEGAL.ARG 46 \CURSORUP 38 \CURSORDOWN 31 \CURSOR-VALID-P) (92 \CURSORHOTSPOTY 84 CURSOR 74 BITMAP 67 CURSOR 60 \CURSORHOTSPOTX 53 CURSOR 26 \SOFTCURSORP 19 DEFAULTCURSOR 7 \CURRENTCURSOR) () \CURSOR-VALID-P :D8 (L (1 SOFT? 0 CURSOR)) [@ ´SA‘i@É@É@ÉH lóhð´'H lóhð´jIóhð´lIó´ jJóhð´lJó(57 BITMAPHEIGHT 44 BITMAPWIDTH 5 CURSORP) (33 CURSOR 25 CURSOR 17 CURSOR) () \CURSORUP :D8 (L (1 INVERTFLG 0 NEWCURSOR) P 0 \INTERRUPTABLE) ¤@`È -@É@Éð²B@dÉÈlñ³.¿@dÉÈlñ³¿``ð—@A -…@ ¿`@ÉÙ@ÉÈkÙ@ÉÙ`Ù -(161 ADJUSTCURSORPOSITION 109 \SOFTCURSORUP 102 \HARDCURSORUP 20 \CURSORBITSPERPIXEL) (155 \CURSORHOTSPOTY 147 CURSOR 137 BITMAP 130 CURSOR 121 CURSOR 115 \CURSORHOTSPOTX 93 ScreenBitMap 88 \CURSORDESTINATION 75 BITMAP 68 CURSOR 53 BITMAP 46 CURSOR 34 CURSOR 26 CURSOR 13 BITMAP 8 \CURSORDESTINATION) () \CURSORPOSITION :D8 (L (1 YPOS 0 XPOS))  `kÙAÙb`@ñ§`kÙ€@`Ùnÿÿåb`Añ§`kÙ€A`Ùnÿÿåb`dlð²¿dnÿñ“jb¿@nÿñ“jb¿`dlð™¿@A -°Odlð—¿@A}A°Blð²>`@Í)¿`AÍ*¿n€`Èñ²ã`@Í)¿`AÍ*¿`n€Í¿`@Í¿`AÍ`—@A -¿`@Í¿`AÍ¿`lð´ -@A -h(264 \DoveDisplay.SetCursorPosition 228 \SOFTCURSORPOSITION 118 \DoveMisc.SetMousePosition) (252 \MACHINETYPE 243 \EM.CURSORY 234 \EM.CURSORX 220 \SOFTCURSORP 212 \EM.MOUSEY 203 \EM.MOUSEX 192 \IOPAGE 183 \IOPAGE 174 \IOPAGE 164 \IOPAGE 152 \IOPAGE 143 \IOPAGE 105 \MACHINETYPE 73 \MACHINETYPE 61 \CURSORHOTSPOTY 52 \CURSORDESTHEIGHT 44 \CURSORDESTHEIGHT 32 \CURSORHOTSPOTX 23 \CURSORDESTWIDTH 15 \CURSORDESTWIDTH 4 \CURSORDESTHEIGHT) () \CURSORDOWN :D8 (P 0 \INTERRUPTABLE) `•(19 \HARDCURSORDOWN 13 \SOFTCURSORDOWN) (7 \SOFTCURSORP) () ADJUSTCURSORPOSITION :D8 (L (1 DELTAY 0 DELTAX)) š@d ²I¿@``Èdnÿñ•nÿÿÙkÙØØ@`kÙ``Èdnÿñ•nÿÿÙkÙØÙØ -µj``Èdnÿñ•nÿÿÙkÙØØAµj`kÙ``Èdnÿñ•nÿÿÙkÙØÙØ -(151 \CURSORPOSITION 78 \CURSORPOSITION 6 POSITIONP) (129 \EM.CURSORY 124 \CURSORHOTSPOTY 117 \CURSORDESTHEIGHT 92 \EM.CURSORX 87 \CURSORHOTSPOTX 56 \EM.CURSORY 51 \CURSORHOTSPOTY 44 \CURSORDESTHEIGHT 21 \EM.CURSORX 16 \CURSORHOTSPOTX) () CURSORPOSITION :D8 (L (2 OLDPOSITION 1 DISPLAYSTREAM 0 NEWPOSITION)) áAgh É0XB´B3´ -Bd3¥¿hdb``Èdnÿñ•nÿÿÙkÙØH -B`kÙ``Èdnÿñ•nÿÿÙkÙØÙH -@d²*d3²$d3²HÉØ@HÉØ -°8²-@dò$¿@d²d3²d3@@ ‡@•@ B(221 \ILLEGAL.ARG 212 CURSORSCREEN 165 \CURSORPOSITION 121 \DSPUNTRANSFORMY 80 \DSPUNTRANSFORMX 14 \GETSTREAM) (178 SCREEN 157 \DISPLAYDATA 146 \DISPLAYDATA 99 \EM.CURSORY 94 \CURSORHOTSPOTY 87 \CURSORDESTHEIGHT 59 \EM.CURSORX 54 \CURSORHOTSPOTX 26 \DISPLAYDATA 19 STREAM 8 OUTPUT) () CURSORSCREEN :D8 (L (2 YCOORD 1 XCOORD 0 SCREEN) F 1 \CURSORSCREEN) :A£jb¿B£jb¿@ÉX@cH ` AB -h(54 \CURSORPOSITION 47 \CURSORUP 37 \CURSORDESTINATION 28 \CURSORDOWN) (42 \CURRENTCURSOR 20 SCREEN) () CURSOREXIT :D8 (F 6 \MAINSCREEN F 7 \COLORSCREEN) b``X`Y`ZHVð’W€V[Idjðœ¿dÉlÙHÉkÙð´%k¼JKÉkÙÚHÉkÙÛ]KLM h(94 CURSORSCREEN) (80 SCREEN 69 SCREEN 53 SCREEN 41 SCREEN 19 LASTMOUSEY 13 LASTMOUSEX 7 LASTSCREEN) () FLIPCURSOR :D8 NIL c`³X`¸ldjñ²HdÈnÿÿæÍ¿HkиkÙ°ê¿`dlð—¿°%lð´!`d²É`É}@h(58 \DoveDisplay.SetCursorShape) (90 CURSOR 85 \CURRENTCURSOR 78 CURSOR 70 \CURRENTCURSOR 47 \MACHINETYPE 14 \EM.CURSORBITMAP 7 \SOFTCURSORP) () FLIPCURSORBAR :D8 (L (0 N)) T`³L`@Ð`@ÐÈnÿÿæÍ`dlð•lð´ `d²É`É}@h(43 \DoveDisplay.SetCursorShape) (74 CURSOR 69 \CURRENTCURSOR 62 CURSOR 54 \CURRENTCURSOR 33 \MACHINETYPE 18 \EM.CURSORBITMAP 11 \EM.CURSORBITMAP 4 \SOFTCURSORP) () LASTMOUSEX :D8 (L (0 DS)) $`@gh É0 -(33 \DSPUNTRANSFORMX 16 \GETSTREAM) (28 \DISPLAYDATA 21 STREAM 10 OUTPUT 4 LASTMOUSEX) () LASTMOUSEY :D8 (L (0 DS)) $`@gh É0 -(33 \DSPUNTRANSFORMY 16 \GETSTREAM) (28 \DISPLAYDATA 21 STREAM 10 OUTPUT 4 LASTMOUSEY) () CREATEPOSITION :D8 (L (1 YCOORD 0 XCOORD)) @µjAµjNIL NIL () POSITIONP :D8 (L (0 X)) @´@3´ @3´@NIL NIL () CURSORHOTSPOT :D8 (L (0 NEWPOSITION)) $``@ Ÿ@¿@¿(16 POSITIONP) (32 \CURSORHOTSPOTY 24 \CURSORHOTSPOTX 9 \CURSORHOTSPOTY 4 \CURSORHOTSPOTX) () (PUTPROPS CURSORPROP ARGNAMES (NIL (CURSOR PROP {NEWVALUE}) . U)) (RPAQ? \CURSORHOTSPOTX 0) (RPAQ? \CURSORHOTSPOTY 0) (RPAQ? \CURRENTCURSOR NIL) (RPAQ? \SOFTCURSORWIDTH NIL) (RPAQ? \SOFTCURSORHEIGHT NIL) (RPAQ? \SOFTCURSORP NIL) (RPAQ? \SOFTCURSORUPP NIL) (RPAQ? \SOFTCURSORUPBM NIL) (RPAQ? \SOFTCURSORDOWNBM NIL) (RPAQ? \SOFTCURSORBBT1 NIL) (RPAQ? \SOFTCURSORBBT2 NIL) (RPAQ? \SOFTCURSORBBT3 NIL) (RPAQ? \SOFTCURSORBBT4 NIL) (RPAQ? \SOFTCURSORBBT5 NIL) (RPAQ? \SOFTCURSORBBT6 NIL) (RPAQ? \CURSORSCREEN NIL) (RPAQ? \CURSORDESTINATION NIL) (RPAQ? \CURSORDESTHEIGHT 808) (RPAQ? \CURSORDESTWIDTH 1024) (RPAQ? \CURSORDESTRASTERWIDTH 64) (RPAQ? \CURSORDESTLINE 0) (RPAQ? \CURSORDESTLINEBASE NIL) GETMOUSESTATE :D8 (F 0 \CURSORSCREEN) i``Èdnÿñ•nÿÿÙkÙØ`kÙ``Èdnÿñ•nÿÿÙkÙØÙ`ÈlålæPh(90 \EVENTKEYS) (101 LASTSCREEN 95 LASTKEYBOARD 85 LASTMOUSEBUTTONS 72 \LASTKEYSTATE 67 LASTMOUSEY 46 \EM.CURSORY 41 \CURSORHOTSPOTY 34 \CURSORDESTHEIGHT 29 LASTMOUSEX 9 \EM.CURSORX 4 \CURSORHOTSPOTX) () \EVENTKEYS :D8 NIL ®l€`lÂåjð‘j€kjð’l€€jl@`lÂåjð‘j€kjð’l@€jl`lÂåjð‘j€kjð’l €jl`lÂåjð‘j€kjð’l€jk`lÂåjð‘j€kjð’l€jl`lÂåjð‘j€kjð’l€jl`lÂåjð‘j€kjð‘k€jääääääNIL (149 \LASTKEYSTATE 125 \LASTKEYSTATE 101 \LASTKEYSTATE 78 \LASTKEYSTATE 54 \LASTKEYSTATE 30 \LASTKEYSTATE 6 \LASTKEYSTATE) () (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) (MOVD (QUOTE CURSOR) (QUOTE SETCURSOR)) (MOVD (QUOTE \CURSORPOSITION) (QUOTE \SETCURSORPOSITION)) (RPAQ \SFPosition (CREATEPOSITION)) MACHINETYPE :D8 NIL 4`È dlð•gdlð•gdlð•glð´gNIL (49 MAIKO 38 DOVE 27 DANDELION 16 DORADO 4 \InterfacePage) () SETMAINTPANEL :D8 (L (0 N)) 3`dlðš¿`@Í@dlð™¿@xlð´ -@9NIL (46 SMALLP 32 SMALLP 15 \IOPAGE 4 \MACHINETYPE) () BEEPON :D8 (L (0 FREQ)) ]`dlð²:¿n€`Èñ²%`o@dlñ¢¿lÛÍ+¿`n€Í° °Êdlð—¿@ ‰lð´i@}Ph(78 \DoveMisc.BeepOn 64 BLOCK) (52 \IOPAGE 29 \IOPAGE 19 \IOPAGE 4 \MACHINETYPE) ( 34 1843200) BEEPOFF :D8 NIL D`dlð²"¿n€`Èñ›`n€Í°°âdl𖿉lð´hd}Ph(53 \DoveMisc.BeepOff 40 BLOCK) (28 \IOPAGE 19 \IOPAGE 4 \MACHINETYPE) () WITHOUT-INTERRUPTS :D8 (L (0 FORM)) @ XH(19 \KEYBOARDON 13 DISPLAYDOWN 7 \KEYBOARDOFF) NIL () (PUTPROPS LLKEY FILETYPE CL:COMPILE-FILE) (PUTPROPS LLKEY COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1989 1990 1992 1999 1920 2000)) NIL \ No newline at end of file diff --git a/sources/LLKEY.LCOM.~4~ b/sources/LLKEY.LCOM.~4~ deleted file mode 100644 index b231786848a537c06c836064d5810dcac947a8ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64460 zcmdVD3v`^vbtc$ofDg%P3Zy7XVr1!eTa-XqgwQVllw}zWpg}ayKtp&)fJ93I*^mjK zMQ}*Uw&KUo&SU4XGl}fjk{?MNCvlRQOag-BS-+8Sd`_s$aLk?f?2yi$9gkyq=FIFS z;IWUhXZP6J@4L6^|LcE%lGn*TcqH^+Rkz+%_ujhq)~$}g%20K@a$u-hs~o6~57oW9 zCdvb&(R zzi=SmmFx9#g@+3HhjN9i*O5KC^4y8V=0d|;Iqqe>%=-tYMnCxQ%&CQwryg0JKhc~& z{zz@*=zQ~$=N1~xg%=8)rAL~Jr%oJQIl1u2sg>tX9$h%~NUb(nnd^LeaX$(;c%XdZ zBx>pE@^ZZob>&b|);n@?!LKH>@V*l#PwjiiJHB%I*y8bbdyA-dObYi zXNGFkiGi8PsrqDpdD44mus73D^E$e`@%{U~)O0G9YIz2KQs-*&(|6hYTudE*?X~Y; zN=dNM+`jSg?SM+PH(NK(dm6cR`&LH1(k4Ou-ul75bo;UPR7bJk9UfeH&%z*&?~= zX<%(%eb>^pkJWdr-qvh=H-T>CpU*tQzZY7Um#;p(OCc|&>U%dnE%ErgbK~4z^Zm5{ zai`>6A2$gbYq!;RFK?_pSik+f^*w*PbZu>4GyU{#TijFi-2#u8`VK!!W!V3GsOo<{ zIO2caGwOfdq3h>jYU49wHu9rqQ$H}@$G7*ty0o#jUxJN`t>*XkORejdZeN$-wrzRh z>`(q$bLq;wnA*8(S3O(zHc;NLNlM+j{PaD|ZI|D>UcW~{Q?nRJKQMQxB?vrmDIEl! zM1?-s;Y(YBz`HJO4FXT^xYV{@&n|6z($t62in<1SwZ)>5T9@t2e#Tr&;IzY>g|~L_N8n1{tuF+ znZ5j8{qQdT?bCN@!|Hck`}h+6ti8=9$?uOewRzX&xx|-G27R zA4zqTda$Pk$}>|HAs~}86VqO)z+D-RE93x&J=0$=PY%|HhOqYlG*}<2BkRC$eR8lm ze#pxevHPYcL6gjG?nO9U5_VrV_W$9r>eRs0ba{Hp>+S}S6Xd?19H@<=-1_*S*In!m zB^LngCg;!&CwH#P4VHSD*+ChlUZhV{#@Sq_$KAjresE|KNZKovP;eZwgz7mCGebj_ zN%pyf_Msz_q@|?-+CEs<#L6H>VtlGPU9FE#d8ND=z#wA|Z3`F0#)o6N@{yQg51MKx zqVgCJ=c6-~nTl6r7n0)HU?9nv>1wSy?iCA)Ge`Re%Y!Aam@i4H1dCoVhw1<e?+oP2iv z=)%POyB83JE=8hxoTedDH|D{XQS$O!QZ`uh@+43;Sn%=%r_;!r*8!6;$a#6ri3JAh zVur*FXRb#Z3tp;bql!AhZj`A(Hp`rs<5ED85}XCa(h6-V7$hgP7o#_Ul~y0D4s`lU zv~y^(f_WbwnDf~4IDlEhXi7ZID`L_UmI}9hX!Ye$cd)fW8%>F*yVWgwku&sr&g(K? zvtTz`K9EYK(t?*1N!@d~nf^v!5OMX#*Uk<09sh@~U0XY_)CW>}b@{5KUb(i`sadve zytwpFl&oF_z^g}6tBQdo8SqC^XO8_*S%KS8Ac)4dHK-7%Vzew(6qm~3DhjrW-`9`r z8y{U-{W+(y|6by?9MqIH$hCFj+1H1&a$5?az6IZpAAa zo<+e}i7p;45K{&<%}h*q1%r#sJ}3}92D_xtg%Ydv2_AOx2a#mIxk2oAkMqqI*m$BQ z`%R|NZArc>5|KNIQnca2_35dJ`ZTueK@5z>4OXV6hbz@X!_%OF7?vm`@vvKdj>8^~ zzy^=zV&7wNKAc-8$061dV#HAPS&zs%fP1_;I6dt3_`NVaoAtU;iQ77oi%3a%za&2w zab&b`cGD;7nB7`=Y8uP|xB*f?MHq2pq=<^hLs;XR48!gBTA$v6 zLsh`(?d)rP29>8Srk(%?oRx3IDSv)L*AiH~mJ=HH_2uuKZ8x1la;!b+mC&(eK6d#<{nwH$8<- zk6uiNVAEikM-7vH5!mhSW|u;?A~pos3Vs@;Zqei|QtE^Wj9%Olg53gkd-UQ~P2I{; zpE2Kv4MA=NFFty)O;g(l*=N2H8-i>DpDsyY%ty$V|3Y)e$dx&aN>y{TY<%wQPd*~w zJZzo)iDK%duQz}4>Yr&=I~jdT8~;K9zuruL?;qRGA4lOP9Jsas?*FuK%aZfYZ+K>D z89r-`M;RK?WgXmTReP(InU&?2*_3O>;-}@*2_utxbn-=s}Z36(h>_GZG z@*zL#7MgZI{Z9Fyt1f7p1M2t72mKQlwA}&yn^;pXyP%!}`X68Yv*ACKK7L-$Jngb$ z9(*PBhkBASvHH`HGt=VEmbUFF`~xBD1cV)^3pB@C(I3#i+96hVq`vxvH2`U#;zC{yCTQVX+x1qFw}-3 zslE%53y)0Eo=l_1w}V(INrwwaM-$`8n}upFaIJ-7IAY-#wk8ylKNy9{$5vQAHct6i z?Q%E_mmI4-ADc0VwIl7x#cI#>#9&GolTckbGT`AD&Om%R&Qg!)TbF2R| zjy!1IAjC+6m4G+|lH6#D-;A6$SbuzcsCGyjF+MZaUzyzR4S_R^;@bUQ`bb+#{A64H zwdRSwD`%8<*_my9hE01VHT?C4uzf3yW_n}oE$da`1J`cBZyzL%_?eLO(~D1nH{>C5 z?G6LPM8JS&e4L3>jb(n{+i2c^gJyNTbFYj5DBiNLZ6+-OqznDQo*B7totWr8U< zH%cA}?AZ9sdbJ_#So_ZM>i^Pcwi(!G2)o6=O5i4wa)K!tlOlmTOv)Li+-_1Nu-BA- z1`M&5f3t!8Rl>F#SPASjuwZ%&>@EZQS;F38U?s5Iz<$<;z16_35_XS)MWA`x#;4gs za6N0^U0(f;uodg0FX_3#>M52$4P&t++p)+P z)&){|-Sef$9nrKYUp15ZBaUD5%ro+{?dw1jFD{)~#ztzMIkRLA7tJkhd>`VsD}0+9 z?*;Lpa<-pYT2}B@7rYJN%J_pwO6AoUijz3nJoL0;TRILz1(0|kd@!rn%l=AF- z!m~G2FPNIu4|7tK$cs2G-mS>dgcW!9*(_&bl)v&P zBRK_@sO;Bu>&UKIU)@WcVCMZ!LCW=bPY4cwHXn%FOzcvjugsf5O zQmYUORVF8@vy~bKD+ktD$HB{ip4(4w`Kt8nUpzfFe*%Sp7P*3!9GLmZ%0#U^07WK5 zz@U&b5Gi3Z=^%R$IiV`*G{NqL%IdK)Ru2^#7&7cyH-$yj@iK)j5a`=gX?|Gt=~J6S|0{6`wd8fe*!@-G^GGroi8tMoI9+0?V-!634=O| zNkgQS_c5!7*#UrmF*^Q(jn?#X0shVgjJs$>LFJ&U{(dT`ByNDk1PW{vTg^)yQkPX15;u z;AD$!1;*c9IhY^FMF(N);p6t`rk${o+hAJe5C?u{7C)Si{{wX^c3Qq#hCF+z?;0fD zN}>9${hl;y`Kn=HjJSQN9Ke(V7!|QAj21~gWbMxN24(FZ;{=OfA74gz_5ZA}T>9cl z&t>!T#B)87w$&2p9+-m+T*qC*v(OU(aa#E_lF16&AW})JjmTL9%J#b#lWD(+tnD`s zZ1$VS0{bmm7e|3faksk|dX%7IU;Dyp78RfZBdg{?H5Ms~UcvIdWS8V2fK#zCkM_|x z9~}m=>F6RP6CJGfo3P+?wF_HfXIV-%4THMmE;&al);&jkVoQc*_`B z?*DZ}sM~r?e@1F!B9=@F1$kddJ-uUDX-9(zErN4uJU$ZT@?fv$bgFNHZd_nRW z#MF2Ed&qa)@LyO3k#s8|NBh5rJl4t4{ufr3>g3qwK#X28%&DZ;F5Tdy{q*%~i~he- ze!Mj{rYgO~)EV0w3D$Q-25%P!Pp1l?#;!&|cSk^X6VxzAI`Jy-+@8WeVx=C+E!}00 zZAVTWhEmw~)0MG_T76)YO0X%_NkyW-8APEVgj5o*27fT|vpj)DV5{|Xfv^R&PM|i$ z0BOC2s4hn13(lO1;ByDFdN;FD+GlR<%D1hUN_KQ03f0# zp8-K_0O%^(!b)hY4_oR5J`5Gs4JOHHS&4F}5I_k>9j9-lQoL`aB2NCc^I{$oDxnDL zj&28l+Oa4ACN?M`Jl-;VMX-B5K#^EJQbG}m{s4dz9R+YFpctEg0#1xh8&m=q9@HXc zBB+9=jZhUR0fMgppex!)T8uc2EKn;MDWL%Qx?e(p#48E_>Jq3^*xuLzCBbRWA?6(K7FSX zTi+XDSoVe)minF0K}%beiY5|VCw(_m#zAl_#Hx&kSrrr&VwFI<&5=Z_+8wU>_6YsH zJoBClm%xB5UsWzv1S|jgCK=Rv`{jR^ zI{V{)HzFY{q#yr}@`dFCv(#@aUx{atbmUrJ{SRbmz~=`WQgNEdRLFS{3FxNdIbsqz z$;za$RS9fbm;~d+id89{62$W~6^@5(TnyIhp+qbSN0n1JPV1t@c~U%uIpKJ( zhv+VPF83m=6-a#v+*JrMD)$tl_~3C82upX2@aJBS^Xi7|%ArQxqWbfZHEIU{`sov! zZqZLh0DvR|0II)&8PyVi*L?tyMMnTAiw*!pts1VP1oc<|Ao}PC046Q~5Jgo40J9hX zP<0h*1Ngk_b7=s894;t9w6Ja!u$RTu`2a<7$&o6Gn6m(Y!l5VtmSg}x+ps8rJ6Ulq z4Q+trA}E0?FXBi~R7FztnLcL2Z*7X`opAON7rTND5UIRFrA z0(T@)1vH%j02Ou765Pou#8_&S0L$E<1S%mSCFCJ%vD98P=6(wdFO$cTvjE`*C)^0l zhHY|qxoL7(r0OH0JdP_i8(3sT6A%cg5XCuCi3xoKi-`S65a%Mq9EUkbVtwGzLI}!o zUNo5xAZ;wSZ4hhuF^pR@GR%CL?BTVnxs7ePZ?PGYfQ2T62A;_XGLAH(>{pU7lafq| zF)OZE`C@8TNDufh`MsFx+xV3EDsPorqxKbgse51|7PQ3>&>2{%iH|Lq;J>#j1Yd zW{5|FXD7sStmti-M$vN+!a2?fagzpx>dcFjR5Li^RIb&ah~r4rQXHv&CH-vZNnztR zb@~khh|c$|-5~(~w9z6g=(_5N}Vra1MPNwkR!q5V9 z`}p$JFRsJHXXDt$`5T9qs{-7vS;m*Y_0;OOup&X8Cnst?Iwi9(HPeqHmEOw>Ej(U8 z3IT)D1vaVULY{!blx|#S2q;d67#1QS5bS;n0`%xiD#n*Aut6MT8Y1g}nsl2?Q`l%S zrNJ(Spcpa=!#f<&I1(ew>Y%m-JI>6sECaP+kZFD-g?}uN%l6@oP=ga@ID}dbtx#o?Kkh8#R`o@X(t2JVFgsFr~NHu z)~}Msv?9O@gQl0nc(Snc0u+s&G)2LoME9wwSk^n#)Qkfan*NxJnM4p0A#|`0Ly){u z6hIQExPt-I=mx_?Bw<7QblD-0mXR35P-u7j&Jm|nH(oTfuX-8UVGM(E3RNo-sydy& z)Us&jJw&c~;nnE{k1>9KfySK>*QZU=S(~U-$O6%r%c|+SaFrBx6Jw<6hr!pifUgs5 zwAL-t5?-?Rnh zi(38!!Dd>puEaL~&GMDyE8h(w$PLPvG}|tqG0)H(Vw*bwCWG^gap~5KU-nqvTaH6_%IAO0V{Q1gt;2+#b6Qk%^N1x znRI!5c$fC1wQ=RUPDjA_$h5w9=|@51rJphqnB+VeSUZ3)3Cd$m0~-}G1z_aCCkO%1 zB_IY1*in>$4OM4xa^q3g1)!Qz!dx=Af&tx>OF+o{I^f*uE;N*TXpov7s-Kc#Bm&c( zr*bH0=vcJ|?KB!uxbvI$q_J|_*RfH~lgflF-a>bJ3u5QxkC1b7 zIY(yIj+_%uYkZa$TyB%gb^(JV(yb6J5)L}pDWYPu$N-lmVeS#O+~mEt+29|6da_7a9x|$&6uUJa&@%cIon?W zUt4)6uI+xZr6tu`em6E6?xNjgKW;T2|DxQ`q_u~2I|Xa-;#*+iB|%w;3U+?i3QLmp zDPKQ4n%2ud8|OS*_-*Fn56$oS){mTR+5HSN%Abw3eUDzZOvt5Ezu-We%S&MO-bM>I zY0Ge0$}t-+6ubp2*k7(bB9 z>;Z6A6Xi)&hPnWN52b^AI?3391xih$I}=+S`!%+)3lz!MC##42relD~2UkOW59ETh z?oi#J02e^WIBvxylXS`Ugd7efiwdN`NkLM>MjOC~JQftj&>dY7UA%DcR zmFlX8NX{7{Al;%@9)h-qO#5RPU>t!pJcolR4PkpUJXRj%QO(1lMAB>ZLrh1Pv`Xk1T6r$(VZa!P^N}BiyT~qO4ER8Z3u-m7)a)Q1*mtb2(L8hQqwCExg13ms8h_Dz z?bW{TTxq^`<*x)!4Fe-^oJo|KT?C8)9S&~3OjTeVJW&^-6CA@^7s*fw&Qe^Zrq#5g z{XLq@e(r3`?dy^Z+})yHgM#p_(u5$qClbCb9RA7ek+AVvWXu1_n4Tbzm7-!O+4xy@u)}QQSXdL^~Iyg@hCfZPE+lOIZ^*Do^ivCIu;!$49dqoIFS0t z@iz5nbvE@Q80mlRZ0f%Xt;8~x(ubGbQihx9aIiHTYzqgsgo9h%U_iumUS2P(^On%f z*PEnar{_T>xBQZPyKBNM03N@<#bPH;*C!q;*F4@Io-9`fyCM(2hGH=pEeVz;KwxKyO-i5D5m_|7#Kv@uvW%Z8QIH~hUDPhiPy_>DkvSD z#`MzY63IA0!B`%ClR%Aan%I>1X|rAr&zB}&4>iL`3*EQCc0g`Fhf(+T&|CzO!u6tt z@RfibYJia{j-_A)LW>U@g!wGhM>YuC57Sox&O@x`q{8BZY?=k`@=ENA%fXbue7ZwJ z3s}M%PGlJVLB;6R_EBtJk*;H7dLwqOW)Q@&nJK_Os=}Tk7^afZ{h8jC!2H|Ni_}us z*22jc>=OMX8YbE#*q72$(o|XGjRl*Ohw&=XZ&fE;rDC~d%y|K!Wu_{c3`zE3C&XM5gti2 z+}QzP5eTGS4r5&(7_JPAQo{Py6nH%$&_eck3(HG=&%K4UD7Uca3lxY7i@~tWD4qgq zr$ROeJqb;RHUf$^(PfI~#6Wo2523UQFC9HS_()@=04C}8l^1C>CJf5ZN}T)=|39Ii zv23)d#)i@c&6N=wG}eVSXzUnm(AXN9pf8RTu{mXuRdXYP*UnY)gRegS>ly#c++;@T z89(k<{jbmZU#tFC+8GaP$bnxcHYDCG@Pd>*)nTFwT=RqFISK}`|Kk%^;0}n0?+Os3 zgoM>%q2~+exJ&&y96?~7C_^NWf%BMvLP?+x zK}v9=6`eM&18n#5o{I8wo+j|JDWK@^nz;5CfbUxS8e3X^N49VO1?@C2O0^*|Yd!1D zEvgy6cJBUa)#-d{z52>l$@F>6u--f|e5KrYspY~pIZmpI zd>Aq5P|RMOy5u6Z-+T}$;sYlvEJ3YSIaIE7mM0H^Z}bj}T4b<1jl0<744oiXmlNc% z=&gQOL^xs(<3~-9P?%wvt{cxHu*+t(3m*GQjTBbsI1?OUJ8u{$-~XEN+gr}6t#Dt7vS=oF7Seo8>aTsNhZm1f>A{y z2&0oqN)rUJb8QqwIL z#v_RWaiLdYgCv1IpOq4={_B=uqf7gJt>}C!#krt;v=*)p9Nl-R&oKhI9;`nGL#*=0g?p& zcnY%S4NYQnx|A}J3jHU{9H@}Y3Or5xEa;?s;RYewM-<O0?nqhTLO z^c9vdZwb-_sCcl=u6pi!J4_|szCDg`8EVc8?KYVF27THYy@Wm+ysJRVL(}J+tA8p66^t>ko zy4iN^kEKQON7J>1G)4rI$lfb~Yo8SM4|O zn8jIC#}Z9JObQ>Ik5!zZq$?hYt4{^~selIHFEj?qGgMfDkP}%^NaIT469yvv3CD1; z4-!SX4FQxQOD7U>VN6S#$_`#TpuSFQ`a9)wW&%hM+c6%!pJwG$Ap(oKDn!2)eUe1Y zJi_cav0xP_aO?h?fdc!1aOjHeWz|faP2WO?biXSO=Z>%U1O32&tbwD(RX9nzMS=QX zxvB3vmtRR8+q<_P_{agcBLHZgxPt$Dup0>`m7#dobrTBNyZ3C%XW;S2wxQ)$xXk^~ zhpBh;L#GafBPh&-O6g8qM8)%A<`Y9o}imU_%_$3fa7AUoqA zyCNXB#6fmPKyHnL?1_Nf76-XA0`hYNaVPD~h}iijZz?xhTUyuNhrcbFy4GCZ*|nqG z+LCTroouu`-QM!lmX?=sz5I9T?JXBF__Hj4H}9yor=Q-jrR9@L^&L!1Gcj!w_u^)F zeeZ=E>bD=;`}Cb3so#DtE{5Zz^vCr(cOB*x`Pp+>R3a?Y?3R{~Ee&7$O@wXsS?G-a z7;Q_pwBqXwKWzI>YWvb`;4~Vzr{(Eg(u!SZ#U3_sk6%oE51u}f#NA9}6ZgDs6aN*O z_^y}H#JP`^(-+=SPPaa(?VMvfabh$`kmiq+D9l7?Ipxh_c&a&W-wXXfaXmWwK`33&IE%3wZ z$3A!VwHE}Ph@Du&70Bw(4N}YXe5VTxgjDZIf_Qzm=cwJfxAi^8*zi6P7)`kn$#qegyPvC4w*rfMQ8^@&;>A& zPUZp>xB)cZjB!HXMw}1~kq4pw0?EV)Cj>|<*8q?PNI|Fz75Le@09dX~ADW!5A3B6r z_HbrBs1ZWN;f^=2LAb3t$Wt3$K^Vg&w}OE`2t|h|q~*s+ zu3n6xAA?-IV3}+c?p=h;aQF=7PR{s6Gxm1nCT2iZdv%Jy2OO0I(h$>F5|# z<8jVpfbrnIITI#(4;U+-ap{3%mjQrL-I)jUr_~_Sa7fHKX*f@4kZIuN2c{=$ zlB>k|LICk4=#JEYmCAb~J1e1C&y|& z2>m%KKtE{asDPuHnU(@()t@fD-sQ{@_lKDlT8I17MeUgGhuXx=TAx=L+MNy zEdl+_fn{Q*h4Z-+BQ+|{}PE}*ZSZ^eO}_bK_md3eyR#nDWnTUJ_rWSi~7 z5}Zd5w_ez1gceV3oKqi-OFMUMts(x{t_$0>pY1JQ>Kobk{7CD^`$q13vD!YI{z7&6 zTVGuL)0VG|j&FQ^y!8{K<9B{^Z1r+2{gtuhZ+&(3>#!fjAu5E)u`onRgs#%Yz%*%! zXH@$wqX2YP9h&PzoR#)lAv6p;=HIgbXMQIaj-P%fl>iGbl#lXxp;MH=Jb^Q9x_tg^ zcp9Z|_2(KbPqrAExAzOx3)_Z|?S10I!}op>e8KleRL#-1+5!3M&K5b;uI_2He32I1 zD)(0tZUFzcV-&hx#YBc|im{$6w5{tP#l zE?L`iSkmi#+=r}s#~j3!QGtHv{2j~liyJRie`R_8!VY1YWS#Cw%lWy{sQ&O*am}a$ z#30mMkkYWwlDeG!T6ui*Kz|*0o35NfVfF-aHh=$j8mxe3`)Jl(z7mPqX<<8B`jqec zD6HuF3{zpe>WUleV;hFoUwgB(UR;>tuH3u{_3=Jgdn{*{L~GIK{wJHf_JAsWZ6SBM zg5yulR!V401Btz1Qjlnf;2Hm2?S9XSh+0YVg+2E z2}mrSlZz=p`J$Xf?|5I1VunzDav?Sy`ly7519}C)tMNrRE2IZRv0$IDro&0Gc8EDf z7zS;Txvx)>2vD-CD4#Be!^MF+Q;aV!Mukct5(!0sOQtc$nQv9?o7@Z+qPUmluRbwX&(-B8ckRrz;Lq`8-4OOI+ zDTU=n7)TX}10jl}C!7q@;fu+oN4U&`o8h)AoqD6MjE9eVePqv@5pa57oLID@i|MlI zi|R#dt($+m9RV#{>4G%YHm$KOVLp zyY0s@`!Q)hChW(!{TQ|%{r02Jemr77dhJKI{V3Xxy#2V}et7odF8cvT!_vpyd+o0PD}X|Fb& zR4nK@tg2x8xbZ3F~jn}JVFte;r;OYvkE=?&$ z#*Vv0vuY%P%X_d64ce+*z{QoK_kP=f58}m6Wj<7gZDDZA1Q%5U!p)fv-l#rQ8OQsW z1F-8O_r!(*2Nw(g7)Q+l>tFex##2A2=nwLi2iZ4V+(5-P_VLN;G#sm7zJ=dlG#)lhRn)lXg+-i?Fv`wlWs({k?J-+0 zgbb!qxO*%PAbstZ-0o6ze$e|sTPyDwQVICh4}hJtb1i60Z7yL%ee3*tUFgFKU6ZnF&2%!jw!3xx zT?#!W(EOWJwgrAlfyV`ye?!2$Us&LFAZsAki3(Jo`ysm5azfM!`e`{D&;=pdk=YO? zyg*%J$XQpnpcJeT>(I-r6P{wjka*1(_#+M}ws@g3`Ot575@gu-5!}~-X@lY^UZyzc z3Y7^t1>{l*klYg?NHr{qL(=mBGH+7_lD2p;TSUxzK5<8`edWhX?x$!c9jVjWFbEn zx2UstzDA;+K5SSCu;kXa3YHoYWgqrkYD6CPU9u1RE+szf8%ma9j|UI?`pyWFKNQoc zmgZmIWZc`Q;9b)+R`Hw-DU!1x#c)J$Uyxd*+ZM+~V_c{57DcGDa-ssB2z)he^a)_` z`=N7&RpUO7BKGj{+2rfKcCW)Uip0kE&L<8f`JS5(AS^=&0BC@|DXdR!aTX8)fFz6B z;GkyLl^)p(v%2%7)d7^*TzSYyEr7Ubl1n38c)FeP*aS8m!Ug{`RF=P&@^nrZ)S;gH zh#_Hks?m@|^VsKy;Tz7}j1c2XB-0`S$r7aJI8uDQWssv0l>H{FXurvp*>BoJ*l*`j z3>Ec`Qrdk_M!Q1WLv5n_mJBY$>dQ0`rkhlnapBW}4|GfV*3RCWf!hQGlDn%N-9vo>*qq%4{1h?8rNXzXP2!e?V z`@_~qOuWCn{a%6{uRI<~aR=}Bz{sV+$eHG*4DOw6l4@H{{dHvGUX?0eDXFK-3)|TC-?Sj!`}oXuAVN zX_N*-MNtS8w2!*DgrYFpB9IqAAP`$U4kEltKQ+qxIT*j zKA~Uh{gU*_{xk~fZ$W9#aGdXM^g;DozR=pIQV$3tc4?{0SNjXzh1MmFzxE>T{lKgY zn)%-vKC`sTK(__Z1AxBKX1#8vt&och?%s|&3>~C=x~{CFT1YFx5jX{Cgt_Sn2Z-i@ zE9f6d{Q?Os6pi7`KB?EdIHrWk29b1&hU+?8GB*s2k-@_2eCm(i8i2$MxSFj08&&PJV38syr-xc{Iv@4jKJpaVDD0uakn(vt3NoOSsGzrYqNdi2Uw!uwnB@> z=MK%`%Cv=JhajUlG8 za3bBtlXv}n_7O&fYa`C+1Om|kNoi~=W6iq_vQRf(GE4E7bX0Z8n&R8+0<^iE6)Cx| zN@KXQAw((01iOb#Ar;wwb8`QZe%t z@W+tk8@QyR-6d}kkh46(Z}+tbH!4G|Z}-XPW{>ts;{V@X>$B_6EIgPjX*cW#?T~LY zYm|r6JY^m{oenOZI?53Q6FMZl z{>y+^x=u}a8xSSf!yAqA!N%DjXun(wH)lDXvh6tynAZOmyJG{x_E;Foo$NPHneJf@ zWHc0}NH?_Z=R~p_taC$uf!&CbnP@KEog$@ZSOhk8k zcnil;(2px)sDFWAaKa6ch7?4NSupmDLR}#tBC+)TOd?(i5HfDPOqb_?e&s_Br=LPQ z()R91b-hpJNwO}(kNRA>(wCO#<*V|O1akF?B1te;o5EZHOQxxBpdbuJAj$9-H<=@y zB0map7nj4KkiZu^K+Zr>UTB^XN8v#*(Plw#)%qD{>2*4s4=jKy(ZE`ZFTccerEey z&$sut6xz?<*xyJO+JATbSYz*zwoRu@uT$LKF96q@H3ht*uhF`8e*@*O-NWM7?y~;J z+pva=EAp+nR91Ui*ADbGTK+VJe{1)EhNoNC-rPtt^B$c03+=z&(wD}6Y3ap(*Y|Oy z-Tg$598;GiBu3H^RPPgzFZo2#j*ni=8=RV$8Hc~f@hP~39GjEtu;DmhFsvDfQgo0p zJ5-|Caw(`XlOX3G+JS{4VEhnF_ngPeL6P+rEG^;`v;54pZUx0!i)I6Qic|z-VU|I! z2MwGGK&&*%G&fjAa|3lem5dcMs~>RmBfe&gqfB@3u#O%QH<`c9r*8Z4w{0D3%CJl6 zS;1C)M-A&KOGD0K<$l2dq+dbv{m~EP^5ok6-R1Hlq-fd@gXicx01*Kz&4aROcOZGI z%o;UY$B>6H!mXrn)BPcO{}tJW?QH7ERvbikKC?xdty;1<`F>*fv5k*DzT?bePgZe} zgB6{`L0p(bSg&x^Bx*g@jYys zMFocpKDjOPg>#(w!o1SP#0pAb>1ac67|ak6y}`v@e6os z9QW~W9i~%|*IxTR7?0uQ%U@W&y82(06`@+-CG#S{KEBxe78#Ys+8x?g#Sy08=D~3) zwG){Xd2bx;<5ggl&+z6^cqXx@Od5r@;WVxlm-2H%`Y6<}od5~wqS8QTpzOj2!4nS! z_oN`Dkshh&ERGs2lTV#s3?X1yxd?#^)kOk8M`kO+ct-akRKh`XWUBn2J_Er^O@9}y zqb&VrYTcZ)PNh5kZnfi=^9#%qYjTLm>+)JrXUl7@Rm4L?a3v1&6+YFY^l#cSn91vzrXCivT#hg4>E%Mmn4qGjfac-Hgy%r1sO7 zx)P140}Z3#fZks2tn$90n7~00=i9n*ADJ8B=s?xII4KhjGZvB-_|JvWk-I#(B?@ST z;uqf6`;22Cr0A9Ln zRWHM?{<)F^-CF;co)(2%d)>zJ5?cTM2qu?akDGVRrBfI^7-d~%}v=%Yal?%^`Q z>$u;0yO%8=J-Tq}ly`c?TQ*mfv$&BvguNbqvr3<@S1T#sBq|en4h2LvcxuKss1o9+ zFFyn?O1U;xsE)=^kMWh94w%l^N2V}P9T_LZ?|1U!J_H}E4Ajb#m3(+;7kEhK~fgHfCbDw4#Tw$(~T);$Y?mjEZA?8b(97qPiIj&B>SV)OXV3hgI4){ zwL07oy5l~)aB{&rvT$_%c{m(hJncRA{HfCjdySRj2p`9Ph&;0J>VF7eqxJtRF@ajI~tQ%)UC4HZ$Hy6-L2s6|W1Ufj*e{q930_yhOuO zfghP?q;XTwIZ_4L<6t^VF=)AZiDKD7T*#+XN!Cnwl?5weu&#>~Q|gaD>xnHVvzjw@ z_0cS{LZV4ydcBr{CI({wih-llVcN@6R|hHqn_6(kA)x!c!J0H12~%!L#`BYeg$X4h zEtr&{TKN!D?WWKaI8vGQ;JctQC{~yOxZFaMxJ(c!_VW?INKmSAs^wiNYW8t!5&jK< zR?X!pw4^dSQJTW-N(RB=#!U9;{BiHy3#Yx4 ziw$q(S?|=b#b-~SIz4}S!JB{f^ukH+Xmb%4e@X>!M_AtzwHa(X#b-`|cv=g)SEGps4Q|NlRLV$5&2!M^}!Yo(Ix%(lFeok1cq> zf6saQviS!}UHh^wzC3brVSX8O3oyit&!6y4oLmu72KhH*Pd$IUGn+w2wLOtbMKL!P zNw*#1el6t21iEG~f)Qy&uTW6PFj{wjq7l==v?aJlu{bB>8l@wnlo180g*g0#T+hoH z4U!}1%FinIQSzm3j0zDJuC+yOg&|?HX)O=JfQKa7S;U9wcTXRxfzfLS8v&m)0#)nc zXOrBV{xYMrtR?y2v8;8YzcFHsM9BfJ75p0zAfa84&QxH9B>2?&DwIP9MMeI!Af`Sx z20|6YU@{}G%WUrPGI~kP$KIVX#!d@E)PU=Sex>|MN#`OCRW@0PA@48oWv4j9pstLU zCB0wdIpxI31z;>_g)G_k>kcrZx=%rZtT0ke&r)mScq-#`P+e#xx;i72<`8#qIzFt2){+r1~TcFD{Wv3wkyU$z%stj^9Vbb>anJ zo5fS!%8Ap9&n^Buh{CDG<7gMSw}tne0K$%f+F6^(Q5PuSZYTn5D8d$IvSsh&{CoW|^BN29 z!KglX>NL>nb9Mj|uTaDqoXFK=lJmMPcd-JRsYuRTg9%oh5x9qzIcUo8%E~f{gg5V< zSU9=3(pWsI%l_o^CrDG|Wlpk3pFequ{XX9Co?GD| z;^aaToJqrb_W9#VU%99xPh(_|}aKDhmKvnW;w132~^>N+pyD8=9IXkXywZO;l$gYcX+Qi#!ua&evKOhI(Yo z)wCwexPJKdHzq6$v>Y#jmMf&RI#H`?8gGq1G^hf$jOnMSBplg%@Y#>sS0tK3-e!Z( zIWHoCwe6WOMH;y%mlgX9B5m41+g_Ln`<$4wfEB{zoRtHT>9>i4Mi>P$&e5@ux!~dr zW>9tE8t+6K)m1EhLiiK1pU%=rjO-uF#9=w|xNi|F7IyS7%$3GDB_lSU7%SJ&A{_y+ zT%cp8gT^6N?s&yw1oG1cPB^0Cw2qbRs$Y^LxNoOQJc% zN6zm1BL|#L5l03RBhAX`f^d+B_~cSMIFHKe3X`STq%8Q{k>2>-;mXBi4dW8E90x)Q z4nUC`2NPVQwHX8-;JqxfWz-KwR?h*lEUJrtpy4r8jtV3BoO5(Xv*-fibs{yvc&%r& z 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 diff --git a/sources/LLKEY.~1~ b/sources/LLKEY.~1~ deleted file mode 100644 index 2ebf7636..00000000 --- a/sources/LLKEY.~1~ +++ /dev/null @@ -1,1779 +0,0 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 9-Apr-2000 16:28:23" {DSK}sybalsky>lispcore>sources>LLKEY.;7 207701 - - changes to%: (FNS FLIPCURSORBAR FLIPCURSOR) - - previous date%: "30-Mar-2000 20:01:05" {DSK}sybalsky>lispcore>sources>LLKEY.;6) - - -(* ; " -Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1992, 1999, 1920, 2000 by Venue & Xerox Corporation. All rights reserved. -") - -(PRETTYCOMPRINT LLKEYCOMS) - -(RPAQQ LLKEYCOMS - [(COMS (* ; "Access to keyboard") - (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF - \PUTSYSBUF \PEEKSYSBUF) - (INITVARS (\LONGSYSBUF)) - (INITVARS (\\KEYBOARDWAITBOX.GLOBALRESOURCE)) - (DECLARE%: DONTCOPY (RESOURCES \KEYBOARDWAITBOX)) - (DECLARE%: DONTCOPY (CONSTANTS (\SYSBUFSIZE 200)) - (MACROS \GETREALSYSBUF))) - [DECLARE%: DOCOPY DONTEVAL@LOAD (COMS (* ; - "Here because it must be done in init before PROC loaded") - (P (MOVD? 'NILL 'CARET] - (COMS (* ; "Key handler") - (FNS \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF - \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING - \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) - (CONSTANTS (\SUN.TYPE3KEYBOARD 0) - (\SUN.TYPE4KEYBOARD 1) - (\SUN.JLEKEYBOARD 2) - (\TOSHIBA.JIS 7)) - (INITVARS (\MOUSECHORDTICKS) - (\MOUSECHORDMILLISECONDS 50)) - (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\KEYBOARDINIT))) - [DECLARE%: DONTCOPY (MACROS .NOTELASTUSERACTION) - (CONSTANTS ALLUP \CTRLMASK \METABIT) - (CONSTANTS * DLMOUSEBITS) - (CONSTANTS * DLMOUSESTATES) - (CONSTANTS * TRANSITIONFLAGS) - (MACROS \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE - TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) - (EXPORT (RECORDS KEYACTION) - (CONSTANTS \NKEYS)) - (RECORDS RING) - (COMS (* ; - "can get rid of shiftstate after clients have been fixed") - (RECORDS SHIFTSTATE) - (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP)) - (CONSTANTS NRINGINDEXWORDS) - (CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) - (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] - (DECLARE%: EVAL@COMPILE (VARS \KEYNAMES)) - - (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun.") - - (VARS \ORIGKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DORADOKEYACTIONS - \DOVEKEYACTIONS \DOVEOSDKEYACTIONS \MAIKOKEYACTIONS \MAIKOKEYACTIONST4 - \MAIKO-JLE-KEYACTIONS \TOSHIBA-KEYACTIONS) - (VARS (KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL)) - (INITVARS (\KEYBOARD.META 256) - (\MODIFIED.KEYACTIONS)) - (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) - )) - (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS - \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION - \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS - \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS - \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) - (COMS (* ; "Key interpretation") - (FNS KEYACTION KEYACTIONTABLE KEYBOARDTYPE RESETKEYACTION - \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS \KEYACTION1 KEYDOWNP KEYNUMBERP - \KEYNAMETONUMBER MODIFY.KEYACTIONS METASHIFT SHIFTDOWNP) - (* ; - "To support office style 1108 & 1186 keyboards") - (FNS SETUP.OFFICE.KEYBOARD) - (OPTIMIZERS \KEYNAMETONUMBER) - (MACROS \TEMPCOPYTIMER) - (* ; - "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") - (DECLARE%: DONTCOPY (EXPORT (OPTIMIZERS KEYDOWNP))) - (EXPORT (MACROS XKEYDOWNP KEYDOWNP1 \NEWKEYDOWNP))) - (COMS (* ; "A raw keyboard device/stream") - (FNS \INIT.KEYBOARD.STREAM) - (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\INIT.KEYBOARD.STREAM))) - (EXPORT (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM))) - (COMS (* ; "Hook for a periodic interrupt") - (FNS \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \PERIODIC.INTERRUPTFRAME) - (INITVARS (\KEYBUFFERING) - (\PERIODIC.INTERRUPT) - (\TIMER.INTERRUPT.PENDING) - (\PERIODIC.INTERRUPT.FREQUENCY 77))) - (LOCALVARS . T) - [COMS (* ; - "cursor and mouse related functions.") - (FNS \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN) - (FNS CURSOR.INIT \CURSORDESTINATION \SOFTCURSORUP \SOFTCURSORUPCURRENT - \SOFTCURSORPOSITION \SOFTCURSORDOWN CURSORPROP GETCURSORPROP PUTCURSORPROP - \CURSORBITSPERPIXEL \CURSORIMAGEPROPNAME \CURSORMASKPROPNAME) - (FNS CURSORCREATE CURSOR \CURSOR-VALID-P \CURSORUP \CURSORPOSITION \CURSORDOWN - ADJUSTCURSORPOSITION CURSORPOSITION CURSORSCREEN CURSOREXIT FLIPCURSOR - FLIPCURSORBAR LASTMOUSEX LASTMOUSEY CREATEPOSITION POSITIONP CURSORHOTSPOT) - (PROPS (CURSORPROP ARGNAMES)) - (INITVARS (\CURSORHOTSPOTX 0) - (\CURSORHOTSPOTY 0) - (\CURRENTCURSOR NIL) - (\SOFTCURSORWIDTH NIL) - (\SOFTCURSORHEIGHT NIL) - (\SOFTCURSORP NIL) - (\SOFTCURSORUPP NIL) - (\SOFTCURSORUPBM NIL) - (\SOFTCURSORDOWNBM NIL) - (\SOFTCURSORBBT1 NIL) - (\SOFTCURSORBBT2 NIL) - (\SOFTCURSORBBT3 NIL) - (\SOFTCURSORBBT4 NIL) - (\SOFTCURSORBBT5 NIL) - (\SOFTCURSORBBT6 NIL) - (\CURSORSCREEN NIL) - (\CURSORDESTINATION NIL) - (\CURSORDESTHEIGHT 808) - (\CURSORDESTWIDTH 1024) - (\CURSORDESTRASTERWIDTH 64) - (\CURSORDESTLINE 0) - (\CURSORDESTLINEBASE NIL)) - (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH - \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM - \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 - \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH - \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) - (FNS GETMOUSESTATE \EVENTKEYS) - [EXPORT (CONSTANTS (HARDCURSORHEIGHT 16) - (HARDCURSORWIDTH 16)) - (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN - LASTMOUSEBUTTONS LASTMOUSETIME - LASTKEYBOARD] - (DECLARE%: DONTCOPY (EXPORT (MACROS \SETMOUSEXY)) - (MACROS \XMOUSECOORD \YMOUSECOORD)) - (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MOVD 'CURSOR 'SETCURSOR) - (MOVD '\CURSORPOSITION '\SETCURSORPOSITION)) - (VARS (\SFPosition (CREATEPOSITION] - [COMS (DECLARE%: DONTCOPY (RECORDS KEYBOARDEVENT) - (CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) - \KEYBOARDEVENT.SIZE - (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES - \KEYBOARDEVENT.SIZE - 383] - (COMS (FNS MACHINETYPE SETMAINTPANEL) - (* ; "DLion beeper") - (FNS BEEPON BEEPOFF)) - (EXPORT (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)) - (FNS WITHOUT-INTERRUPTS) - (COMS (* ; - "Compile locked fns together for locality") - (BLOCKS (NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR - \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS - \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING - \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP - \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN))) - [DECLARE%: DONTCOPY - (ADDVARS [INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS - \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY - \LOCKPAGES \DECODETRANSITION \SMASHLINK - \INCUSECOUNT LLSH \MAKEFREEBLOCK - \DECUSECOUNT \MAKENUMBER \ADDBASE - \PERIODIC.INTERRUPTFRAME - \DOBUFFEREDTRANSITIONS - \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT - \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR - \HARDCURSORUP \HARDCURSORPOSITION - \HARDCURSORDOWN \SOFTCURSORUP - \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION - \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) - (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX - \CURSORHOTSPOTY \CURRENTCURSOR - \SOFTCURSORWIDTH \SOFTCURSORHEIGHT - \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM - \SOFTCURSORDOWNBM \SOFTCURSORBBT1 - \SOFTCURSORBBT2 \SOFTCURSORBBT3 - \SOFTCURSORBBT4 \SOFTCURSORBBT5 - \SOFTCURSORBBT6 \CURSORDESTINATION - \CURSORDESTHEIGHT \CURSORDESTWIDTH - \CURSORDESTRASTERWIDTH \CURSORDESTLINE - \CURSORDESTLINEBASE \PENDINGINTERRUPT - \PERIODIC.INTERRUPT - \PERIODIC.INTERRUPT.FREQUENCY - \LASTUSERACTION \MOUSECHORDTICKS - \KEYBOARDEVENTQUEUE \KEYBUFFERING - SCREENWIDTH SCREENHEIGHT - \TIMER.INTERRUPT.PENDING \EM.MOUSEX - \EM.MOUSEY \EM.CURSORX \EM.CURSORY - \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 - \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 - \EM.DISPINTERRUPT \EM.CURSORBITMAP - \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND - ] - (RDCOMS (FNS \SETIOPOINTERS] - (PROP FILETYPE LLKEY) - (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) - (NLAML - WITHOUT-INTERRUPTS - ) - (LAMA CURSORPROP - METASHIFT - MOUSECHORDWAIT]) - - - -(* ; "Access to keyboard") - -(DEFINEQ - -(BKSYSCHARCODE [LAMBDA (CHAR) (* rrb "30-Dec-83 11:56") (OR (\PUTSYSBUF CHAR) (PROGN (SETQ \LONGSYSBUF (NCONC \LONGSYSBUF (bind C while (SETQ C (\GETREALSYSBUF)) collect C))) (\PUTSYSBUF CHAR]) - -(\CLEARSYSBUF [LAMBDA (ALLFLG) (* mpl "27-Jun-85 20:04") (DECLARE (GLOBALVARS \PROCESSES)) (COND ((OR ALLFLG (TTY.PROCESSP)) (SETQ \LONGSYSBUF) (replace (RING READ) of \SYSBUFFER with 0))) (COND (ALLFLG (for PROC in \PROCESSES do (replace PROCTYPEAHEAD of PROC with NIL))) ((THIS.PROCESS) (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL]) - -(\GETKEY [LAMBDA NIL (* lmm "18-Apr-85 00:07") (DECLARE (GLOBALVARS \KEYBOARDWAIT1 \KEYBOARDWAIT2)) (COND [(AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS))) (pop (fetch PROCTYPEAHEAD of (THIS.PROCESS] (T (WAIT.FOR.TTY) (OR (\GETSYSBUF) (GLOBALRESOURCE (\KEYBOARDWAITBOX) (* Busy-wait loop that gets next  character) (\CLOCK0 \KEYBOARDWAITBOX) (bind C do (COND ((SETQ C (\GETSYSBUF)) (\BOXIPLUS (LOCF (fetch KEYBOARDWAITTIME of \MISCSTATS)) (CLOCKDIFFERENCE \KEYBOARDWAITBOX)) (RETURN C))) (\TTYBACKGROUND) (\WAIT.FOR.TTY]) - -(\NSYSBUFCHARS [LAMBDA NIL (* JonL " 7-May-84 01:50") (* Tells how many characters can be \GETSYSBUFed.  Used by \SAVESYSBUF.) (IPLUS (LENGTH \LONGSYSBUF) (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ 0 R) 0) ((IGREATERP W R) (IDIFFERENCE W R)) (T (IDIFFERENCE W (IDIFFERENCE R \SYSBUFSIZE]) - -(\SAVESYSBUF [LAMBDA NIL (* JonL " 7-May-84 01:50") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (PROG (TA (BUF \SAVEDSYSBUFFER) (NC (\NSYSBUFCHARS)) (J 0)) [COND ((TTY.PROCESSP) [COND ([AND (THIS.PROCESS) (SETQ TA (fetch PROCTYPEAHEAD of (THIS.PROCESS] (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL) (add NC (LENGTH TA)) [COND ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for CH in TA do (RPLCHARCODE BUF (add J 1) CH))) ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for I from (ADD1 J) to NC do (* Test on J means that we'll ignore extra chars typed since we got the  length. Test on \GETSYSBUF so we don't get screwed if buffer gets cleared  while during this loop) (RPLCHARCODE BUF I (OR (\GETSYSBUF) (PROGN (SETQ NC (SUB1 I)) (RETURN] (RETURN (AND (NOT (EQ 0 NC)) (SUBSTRING BUF 1 NC]) - -(\SYSBUFP [LAMBDA NIL (* JonL " 7-May-84 01:52") (OR [AND (TTY.PROCESSP) (OR \LONGSYSBUF (NOT (EQ 0 (fetch (RING READ) of \SYSBUFFER] (AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS]) - -(\GETSYSBUF [LAMBDA NIL (* lmm " 9-JUL-83 00:56") (OR (AND \LONGSYSBUF (pop \LONGSYSBUF)) (\GETREALSYSBUF]) - -(\PUTSYSBUF [LAMBDA (CHAR) (* rmk%: "27-Nov-84 17:51") (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ R W) (* Full) NIL) (T (\PUTBASEFAT \SYSBUFFER W CHAR) (AND (EQ 0 R) (replace (RING READ) of \SYSBUFFER with W)) (* Return random non-NIL value to  indicate success for BKSYSBUF) [replace (RING WRITE) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST W) \SYSBUFFER.FIRST) (T (ADD1 W] T]) - -(\PEEKSYSBUF [LAMBDA (STREAM) (* bvm%: " 8-Feb-85 17:50") (PROG (R) WAIT (until (\SYSBUFP) do (BLOCK)) (RETURN (if (TTY.PROCESSP) then (if \LONGSYSBUF then (CAR \LONGSYSBUF) elseif (NEQ (SETQ R (fetch (RING READ) of \SYSBUFFER)) 0) then (* Here's the vanilla case) (\GETBASEFAT \SYSBUFFER R) else (* Foo an interrupt could have sneaked in here and gobbled down the remaining  characters) (GO WAIT)) elseif (THIS.PROCESS) then (CAR (fetch PROCTYPEAHEAD of (THIS.PROCESS))) else (SHOULDNT]) -) - -(RPAQ? \LONGSYSBUF ) - -(RPAQ? \\KEYBOARDWAITBOX.GLOBALRESOURCE ) -(DECLARE%: DONTCOPY -(DECLARE%: EVAL@COMPILE - -[PUTDEF '\KEYBOARDWAITBOX 'RESOURCES '(NEW (CREATECELL \FIXP] -) -) -(DECLARE%: DONTCOPY -(DECLARE%: EVAL@COMPILE - -(RPAQQ \SYSBUFSIZE 200) - - -(CONSTANTS (\SYSBUFSIZE 200)) -) - -(DECLARE%: EVAL@COMPILE - -[PUTPROPS \GETREALSYSBUF MACRO - (NIL (PROG ((R (fetch (RING READ) of \SYSBUFFER))) - (RETURN (AND (NOT (EQ 0 R)) - (PROG1 (\GETBASEFAT \SYSBUFFER R) - (AND [EQ (fetch (RING WRITE) of \SYSBUFFER) - (replace (RING READ) of \SYSBUFFER - with (COND - ((EQ \SYSBUFFER.LAST R) - \SYSBUFFER.FIRST) - (T (ADD1 R] - (replace (RING READ) of \SYSBUFFER with 0)))] -) -) -(DECLARE%: DOCOPY DONTEVAL@LOAD - - - -(* ; "Here because it must be done in init before PROC loaded") - - -(MOVD? 'NILL 'CARET) -) - - - -(* ; "Key handler") - -(DEFINEQ - -(\KEYBOARDINIT [LAMBDA NIL (* ; "Edited 19-Nov-87 16:46 by Snow") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (* ;  "Sets up keyboard decoding tables.") (SETQ \CURRENTKEYACTION (SETQ \DEFAULTKEYACTION (KEYACTIONTABLE))) (* ;  "added \commandkeyaction 11-19-87 WAS") (SETQ \COMMANDKEYACTION (KEYACTIONTABLE)) (SETQ \INTERRUPTSTATE (\ALLOCLOCKED 2)) (PROGN (SETQ \SYSBUFFER (\ALLOCBLOCK (FOLDHI (ADD1 \SYSBUFFER.LAST) WORDSPERCELL))) (replace (RING READ) of \SYSBUFFER with 0) (replace (RING WRITE) of \SYSBUFFER with \SYSBUFFER.FIRST)) (SETQ \SAVEDSYSBUFFER (ALLOCSTRING \SYSBUFSIZE NIL NIL T)) (SETQ \LASTUSERACTION (LOCF (fetch LASTUSERACTION of \MISCSTATS))) (PROGN (SETQ \KEYBOARDEVENTQUEUE (\ALLOCLOCKED (FOLDHI (PLUS \KEYBOARDEVENT.LAST \KEYBOARDEVENT.SIZE) WORDSPERCELL))) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with \KEYBOARDEVENT.FIRST)) (SETQ \LASTKEYSTATE (create KEYBOARDEVENT)) (SETQ \SHIFTSTATE (create SHIFTSTATE)) (SETQ \MOUSETIMERTEMP (SETUPTIMER 0 NIL 'TICKS)) (MOUSECHORDWAIT \MOUSECHORDMILLISECONDS) (\KEYBOARDON]) - -(\KEYBOARDEVENTFN [LAMBDA (FDEV EVENT EXTRA) (* ; "Edited 11-Oct-90 09:49 by jds") (DECLARE (GLOBALVARS \KEYBOARD.BEFORETYPE \DORADOKEYACTIONS \DLIONKEYACTIONS \MAIKO.BEFOREKEYTYPE)) (SELECTQ EVENT ((BEFORELOGOUT BEFOREMAKESYS BEFORESYSOUT BEFORESAVEVM) (SETQ \KEYBOARD.BEFORETYPE \MACHINETYPE) (SETQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (SETQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) ((AFTERLOGOUT AFTERMAKESYS AFTERSYSOUT AFTERSAVEVM) (* ;  "Restarting a world. If we changed machines, fix up the key actions to match the new machine.") (* ; "(COND ((NEQ \\MACHINETYPE \\KEYBOARD.BEFORETYPE) ; Changed machines. Change Keyactions. (|for| X |in| (\\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) |do| (KEYACTION (CAR X) (CDR X) \\COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \\DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT))))") [COND ((OR (NEQ \MACHINETYPE \KEYBOARD.BEFORETYPE) (NEQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) (* ;  "Changed machines. Change Keyactions.") [COND ((NEQ (MACHINETYPE) 'MAIKO) (* ;; "Non-SUN, so just change machine-specific key actions:") (for X in (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION))) (T (* ;;  "On a SUN: Some keyactions contradict %"normal%" ones, so reset them all.") (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION] (MOUSECHORDWAIT (MOUSECHORDWAIT))) ((EQ (MACHINETYPE) 'MAIKO) (* ;; "Same machine type. SO only worry if we're on SUNs, where the keyboard type can differ between machines.") (COND ((NEQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT]) NIL]) - -(\ALLOCLOCKED [LAMBDA (NCELLS) (* lmm "20-Apr-85 13:08") (* allocate a block of NCELLS cells  and lock it) (PROG [(BLOCK (\ALLOCBLOCK NCELLS NIL (IMIN NCELLS CELLSPERPAGE] (\LOCKCELL BLOCK (FOLDHI (IPLUS (fetch (POINTER WORDINPAGE) of BLOCK) (UNFOLD NCELLS WORDSPERCELL)) WORDSPERPAGE)) (RETURN BLOCK]) - -(\SETIOPOINTERS [LAMBDA NIL (* ; "Edited 28-Apr-88 01:10 by MASINTER") (SELECTC (SETTOPVAL '\MACHINETYPE (fetch MachineType of \InterfacePage)) ((LIST \DOLPHIN \DORADO) (SETTOPVAL '\EM.MOUSEX (EMADDRESS MOUSEX.EM)) (SETTOPVAL '\EM.MOUSEY (EMADDRESS MOUSEY.EM)) (SETTOPVAL '\EM.CURSORX (EMADDRESS CURSORX.EM)) (SETTOPVAL '\EM.CURSORY (EMADDRESS CURSORY.EM)) (SETTOPVAL '\EM.REALUTILIN (EMADDRESS UTILIN.EM)) (SETTOPVAL '\EM.KBDAD0 (EMADDRESS KBDAD0.EM)) (SETTOPVAL '\EM.KBDAD1 (EMADDRESS KBDAD1.EM)) (SETTOPVAL '\EM.KBDAD2 (EMADDRESS KBDAD2.EM)) (SETTOPVAL '\EM.KBDAD3 (EMADDRESS KBDAD3.EM)) (SETTOPVAL '\EM.KBDAD4 (LOCF (fetch FAKEKBDAD4 of \InterfacePage))) (\PUTBASE \EM.KBDAD4 0 ALLUP) (SETTOPVAL '\EM.KBDAD5 (LOCF (fetch FAKEKBDAD5 OF \InterfacePage))) (\PUTBASE \EM.KBDAD5 0 ALLUP) (SETTOPVAL '\EM.DISPINTERRUPT (EMADDRESS DISPINTERRUPT.EM)) (SETTOPVAL '\EM.CURSORBITMAP (EMADDRESS CURSORBITMAP.EM)) (SETTOPVAL '\EM.DISPLAYHEAD (EMADDRESS DCB.EM)) (SETTOPVAL 'SCREENWIDTH (UNFOLD (fetch ScreenWidth of \InterfacePage) BITSPERWORD))) ((LIST \DANDELION \MAIKO) (SETTOPVAL '\EM.MOUSEX (fetch DLMOUSEXPTR of \IOPAGE)) (SETTOPVAL '\EM.MOUSEY (fetch DLMOUSEYPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN (fetch DLUTILINPTR of \IOPAGE)) (* ;; "Where the hardware bits live, vs. where the Lisp software sees them after reinterpretation by keyhandler") ) (SETTOPVAL '\EM.KBDAD0 (fetch DLKBDAD0PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD1 (fetch DLKBDAD1PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD2 (fetch DLKBDAD2PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD3 (fetch DLKBDAD3PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD4 (fetch DLKBDAD4PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD5 (fetch DLKBDAD5PTR of \IOPAGE)) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORBITMAP (fetch DLCURSORBITMAPPTR of \IOPAGE)) (SETTOPVAL '\EM.DISPLAYHEAD NIL) (SETTOPVAL 'SCREENWIDTH (SELECTC \MACHINETYPE (\MAIKO (SUBRCALL DSP-SCREENWIDTH)) 1024))) (\DAYBREAK (PROG ((KBDBASE (\DoveMisc.GetKBDBase))) (SETTOPVAL '\EM.KBDAD0 (\ADDBASE KBDBASE 1)) (SETTOPVAL '\EM.KBDAD1 (\ADDBASE KBDBASE 2)) (SETTOPVAL '\EM.KBDAD2 (\ADDBASE KBDBASE 3)) (SETTOPVAL '\EM.KBDAD3 (\ADDBASE KBDBASE 4)) (SETTOPVAL '\EM.KBDAD4 (\ADDBASE KBDBASE 5)) (SETTOPVAL '\EM.KBDAD5 (\ADDBASE KBDBASE 6)) (SETTOPVAL '\EM.MOUSEX (\DoveMisc.GetMouseXBase)) (SETTOPVAL '\EM.MOUSEY (\DoveMisc.GetMouseYBase)) (SETTOPVAL '\EM.CURSORBITMAP (\DoveDisplay.GetCursorBitmapBase)) (* These three set this way to  prevent address faults) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN KBDBASE) (* Where the hardware bits live, vs. where the Lisp software sees them after  reinterpretation by keyhandler) ) (SETTOPVAL 'SCREENWIDTH (\DoveDisplay.ScreenWidth)))) (RAID)) (SETTOPVAL '\EM.UTILIN (LOCF (fetch (IFPAGE FAKEMOUSEBITS) of \InterfacePage]) - -(\KEYBOARDOFF [LAMBDA NIL (* ; "Edited 20-Apr-88 10:28 by MASINTER") (\PUTBASE \EM.DISPINTERRUPT 0 (LOGAND (LOGXOR 65535 \LispKeyMask) (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE NIL]) - -(\KEYBOARDON [LAMBDA (NOCHECK) (* ; "Edited 24-Apr-88 00:03 by MASINTER") (\SETIOPOINTERS) (\PUTBASE \EM.DISPINTERRUPT 0 (LOGOR \LispKeyMask (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE T]) - -(\KEYHANDLER [LAMBDA NIL (* lmm "30-MAR-83 20:40") (\KEYHANDLER1]) - -(\KEYHANDLER1 [LAMBDA NIL (* ; "Edited 30-Mar-88 10:40 by Snow") (PROG ((OLD0 ALLUP) (OLD1 ALLUP) (OLD2 ALLUP) (OLD3 ALLUP) (OLD4 ALLUP) (OLD5 ALLUP) (OLDU ALLUP) (OLDFAKEU ALLUP) (LOOPCNT 10) (PERIODCNT 60) (MOUSESTATE \DLMOUSE.UP) (MOUSETIMER (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) (MOUSETEMP (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) CURSORX CURSORY YHOT) (SETQ \KEYBUFFERING NIL) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) LP (\CONTEXTSWITCH \KbdFXP) [COND (\PERIODIC.INTERRUPT (* eventually can be replaced with  general timer mechanism) (COND ((IGREATERP PERIODCNT 0) (* Continue counting down to zero) (SETQ PERIODCNT (SUB1 PERIODCNT))) ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \PERIODIC.INTERRUPTFRAME)) (* When we've counted down, then keep trying to cause the interrupt, and  reset the counter when it finally happens) (SETQ PERIODCNT (SUB1 (OR \PERIODIC.INTERRUPT.FREQUENCY 1] [COND ((OR (NEQ (\GETBASE \EM.MOUSEX 0) CURSORX) (NEQ (\GETBASE \EM.MOUSEY 0) CURSORY)) (\TRACKCURSOR (SETQ CURSORX (\GETBASE \EM.MOUSEX 0)) (SETQ CURSORY (\GETBASE \EM.MOUSEY 0] [COND ((OR [COND ((OR (NEQ OLDU (\GETBASE \EM.REALUTILIN 0)) (COND ((AND (EQ MOUSESTATE \DLMOUSE.WAITING) (IGREATERP (\BOXIDIFFERENCE (\RCLK MOUSETEMP) MOUSETIMER) 0)) (* Timer expired on seeing both left and right down, so set state to normal) (SETQ MOUSESTATE \DLMOUSE.NORMAL) T))) (SETQ MOUSESTATE (\DOMOUSECHORDING (SETQ OLDU (\GETBASE \EM.REALUTILIN 0)) MOUSESTATE)) (NEQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (NEQ OLD0 (\GETBASE \EM.KBDAD0 0)) (NEQ OLD1 (\GETBASE \EM.KBDAD1 0)) (NEQ OLD2 (\GETBASE \EM.KBDAD2 0)) (NEQ OLD3 (\GETBASE \EM.KBDAD3 0)) (NEQ OLD4 (\GETBASE \EM.KBDAD4 0)) (NEQ OLD5 (\GETBASE \EM.KBDAD5 0))) (COND ((EQ 0 (LOGAND (\GETBASE \EM.KBDAD2 0) 2114)) (* Ctrl-shift-DEL panic interrupt --  switch to TeleRaid immediately) (swap (fetch (IFPAGE TELERAIDFXP) of \InterfacePage) (fetch (IFPAGE KbdFXP) of \InterfacePage)) (\KEYBOARDOFF) (SETQ OLD2 (\GETBASE \EM.KBDAD2 0)) (GO LP))) [PROG ((W (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE)) (R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) WPTR) (COND ((EQ R W) (* eventqueue full!) (RETURN))) (SETQ WPTR (\ADDBASE \KEYBOARDEVENTQUEUE W)) (\RCLK (LOCF (fetch TIME of WPTR))) [with KEYBOARDEVENT WPTR (PROGN (SETQ W0 (SETQ OLD0 (\GETBASE \EM.KBDAD0 0))) (SETQ W1 (SETQ OLD1 (\GETBASE \EM.KBDAD1 0))) (SETQ W2 (SETQ OLD2 (\GETBASE \EM.KBDAD2 0))) (SETQ W3 (SETQ OLD3 (\GETBASE \EM.KBDAD3 0))) (SETQ W4 (SETQ OLD4 (\GETBASE \EM.KBDAD4 0))) (SETQ W5 (SETQ OLD5 (\GETBASE \EM.KBDAD5 0))) (SETQ WU (SETQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (COND ((EQ R 0) (* Queue was empty) (replace (RING READ) of \KEYBOARDEVENTQUEUE with W))) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ W \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS W \KEYBOARDEVENT.SIZE] (OR \KEYBUFFERING (SETQ \KEYBUFFERING T] [COND [\KEYBUFFERING (COND ((EQ \KEYBUFFERING T) (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \DOBUFFEREDTRANSITIONS)) (SETQ \KEYBUFFERING 'STARTED) (* don't call until  \DOBUFFEREDTRANSITIONS is done) ] (T (COND (\PENDINGINTERRUPT (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \INTERRUPTFRAME)) (SETQ \PENDINGINTERRUPT] [COND ((AND (NEQ \MACHINETYPE \MAIKO) (ILEQ (SETQ LOOPCNT (SUB1 LOOPCNT)) 0)) (* Only do this once in a while) (SETQ LOOPCNT (COND ((\UPDATETIMERS) (* Timer was updated, so do it next time around, too, in case we just came  back from RAID or other bcpl code) 1) (T 20] (COND ([AND NIL \TIMER.INTERRUPT.PENDING (IGREATERP (\BOXIDIFFERENCE (\RCLK (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) 0) (COND ((EQ \TIMER.INTERRUPT.PENDING '\MOUSECHANGE) (SETQ OLDU NIL) T) (T (\CAUSEINTERRUPT \KbdFXP (FUNCTION \TIMER.INTERRUPTFRAME] (SETQ \TIMER.INTERRUPT.PENDING))) (GO LP]) - -(\RESETKEYBOARD [LAMBDA NIL (* ; "Edited 30-Mar-88 10:07 by Snow") (\SETIOPOINTERS) (* Called with lisp keyboard disabled whenever Lisp is resumed from bcpl  logout or copysys.) (SETQ \KEYBUFFERING NIL) (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK) (EQ \MACHINETYPE \MAIKO)) (* Initialize fake mouse bits to all  up) (\PUTBASE \EM.UTILIN 0 ALLUP))) (with KEYBOARDEVENT \LASTKEYSTATE (SETQ W0 (\GETBASE \EM.KBDAD0 0)) (SETQ W1 (\GETBASE \EM.KBDAD1 0)) (SETQ W2 (\GETBASE \EM.KBDAD2 0)) (SETQ W3 (\GETBASE \EM.KBDAD3 0)) (SETQ W4 (\GETBASE \EM.KBDAD4 0)) (SETQ W5 (\GETBASE \EM.KBDAD5 0)) (SETQ WU (\GETBASE \EM.REALUTILIN 0)) (SETQ LOCK (XKEYDOWNP 'LOCK)) (SETQ 1SHIFT NIL) (SETQ 2SHIFT NIL) (SETQ CTRL NIL) (SETQ META NIL) (SETQ FONT NIL) (SETQ USERMODE1 NIL) (SETQ USERMODE2 NIL) (SETQ USERMODE3 NIL) (SETQ MOUSESTATE \DLMOUSE.UP)) (SETQ \TIMER.INTERRUPT.PENDING) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING READ) of \SYSBUFFER with 0) (SETQ \LONGSYSBUF) (\DAYTIME0 \LASTUSERACTION) (\KEYBOARDON]) - -(\DOMOUSECHORDING [LAMBDA (REALUTILIN STATE) (* bvm%: " 9-Oct-85 11:24") (* Handles mouse transitions on a DLion.  REALUTILIN is the actual util word from the processor.  STATE is our internal state. Sets contents of \EM.UTILIN to reflect the  virtual mouse state, which may contain a middle mouse button even where there  is only a two-button mouse. Returns new state) (PROG (LRSTATE) [COND ((OR (NULL \MOUSECHORDTICKS) (EQ (SETQ LRSTATE (LOGXOR (LOGAND REALUTILIN \MOUSE.ALLBITS) \MOUSE.ALLBITS)) 0)) (* Not interpreting chording, or both LEFT and RIGHT are up --  real state and virtual state the same) (SETQ STATE \DLMOUSE.UP)) (T (* Either L or R or both are down, so have to decide about Middle) (SELECTC STATE ((LIST \DLMOUSE.UP \DLMOUSE.WAITING) (SETQ REALUTILIN (LOGOR REALUTILIN \MOUSE.LRBIT)) (* Turn off the L and/or R bits) (COND ((EQ LRSTATE \MOUSE.LRBIT) (* Both L and R down at once, interpret as MIDDLE without waiting) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) REALUTILIN)) (SETQ STATE \DLMOUSE.MIDDLE)) ((NEQ STATE \DLMOUSE.WAITING) (* Only one of L and R down. Set timer, and ignore the down bit for now) (\BOXIPLUS (\RCLK (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) \MOUSECHORDTICKS) (SETQ STATE \DLMOUSE.WAITING)))) (\DLMOUSE.MIDDLE (* State is middle and at least one of L and R is still down, so consider it  to be still only middle) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LRBIT))) (SELECTC LRSTATE (\MOUSE.LEFTBIT (* Right came up. Henceforth treat  right transparently) (SETQ STATE \DLMOUSE.MIDDLE&RIGHT)) (\MOUSE.RIGHTBIT (* Left came up. Henceforth treat  left transparently) (SETQ STATE \DLMOUSE.MIDDLE&LEFT)) NIL)) (\DLMOUSE.MIDDLE&RIGHT (* Only ignore LEFT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LEFTBIT)))) (\DLMOUSE.MIDDLE&LEFT (* Only ignore RIGHT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.RIGHTBIT)))) (PROGN (* Remaining state is \DLMOUSE.NORMAL which means treat mouse normally, and  the only interesting transition is back to \DLMOUSE.UP) ] (\PUTBASE \EM.UTILIN 0 REALUTILIN) (RETURN STATE]) - -(\DOTRANSITIONS [LAMBDA (KEYBASE OLD NEW) (* ; "Edited 1-Feb-92 11:59 by jds") (* ;; "OLD and NEW are keyboard state words that are known to have changed. KEYBASE is the number in hardware order of the key corresponding to the first bit in these words. This function figures out the indices of transitioning keys and calls the decoder.") (for I (BITMASK _ (LLSH 1 15)) from 0 to 15 do [OR (EQ 0 (LOGAND BITMASK (LOGXOR OLD NEW))) (\DECODETRANSITION (IPLUS I KEYBASE) (EQ 0 (LOGAND NEW BITMASK] (SETQ BITMASK (LRSH BITMASK 1))) T]) - -(\DECODETRANSITION [LAMBDA (KEYNUMBER DOWNFLG) (* ; "Edited 19-Nov-87 16:29 by Snow") (* ;; "KEYNUMBER is the key number in the hardware keyboard layout, DOWNFLG is T if the key just went down. PENDINGINTERRUPT, bound in \KEYHANDLER, is set to the decoded character if it is an interrupt.") (.NOTELASTUSERACTION) (PROG ((TI (\TRANSINDEX KEYNUMBER DOWNFLG)) (KEYSTATE \LASTKEYSTATE) ASCIICODE SHIFTED) (SELECTC (TRANSITIONFLAGS \CURRENTKEYACTION TI) (IGNORE.TF (RETURN)) (LOCKSHIFT.TF (* ;  "Take shift action if either Shift or Caps Lock is down") (IF (fetch (KEYBOARDEVENT SHIFTORLOCK) of KEYSTATE) THEN (SETQ SHIFTED T))) (NOLOCKSHIFT.TF (* ;  "Take shift action only when Shift is down") (IF (fetch (KEYBOARDEVENT SHIFT) of KEYSTATE) THEN (SETQ SHIFTED T))) (EVENT.TF (RETURN)) (1SHIFTUP.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with NIL) (RETURN)) (1SHIFTDOWN.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with T) (RETURN)) (2SHIFTUP.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with NIL) (RETURN)) (2SHIFTDOWN.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with T) (RETURN)) (LOCKUP.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with NIL) (RETURN)) (LOCKDOWN.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with T) (RETURN)) (LOCKTOGGLE.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT LOCK) of KEYSTATE))) (RETURN)) (CTRLUP.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with NIL) (RETURN)) (CTRLDOWN.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with T) (RETURN)) (METAUP.TF (replace (KEYBOARDEVENT META) of KEYSTATE with NIL) (RETURN)) (METADOWN.TF (replace (KEYBOARDEVENT META) of KEYSTATE with T) (RETURN)) (FONTUP.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with NIL) (RETURN)) (FONTDOWN.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with T) (RETURN)) (FONTTOGGLE.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT FONT) of KEYSTATE))) (RETURN)) (USERMODE1UP.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with NIL) (RETURN)) (USERMODE1DOWN.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with T) (RETURN)) (USERMODE1TOGGLE.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE1) of KEYSTATE))) (RETURN)) (USERMODE2UP.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with NIL) (RETURN)) (USERMODE2DOWN.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with T) (RETURN)) (USERMODE2TOGGLE.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE2) of KEYSTATE))) (RETURN)) (USERMODE3UP.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with NIL) (RETURN)) (USERMODE3DOWN.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with T) (RETURN)) (USERMODE3TOGGLE.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE3) of KEYSTATE))) (RETURN)) (SHOULDNT)) (* ;;  "Only the LOCKSHIFT and NOLOCKSHIFT cases make it to here, having set SHIFTED if appropriate.") [SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \CURRENTKEYACTION TI)) (T (TRANSITIONCODE \CURRENTKEYACTION TI] [COND ((OR (fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) [IF (IGREATERP ASCIICODE 127) THEN (* ;; "Non-ascii interpretation--what is cntrl/meta supposed to mean? Try using the original interpretation. This way we can type ^E or Meta-D even if Russian keyboard is set, but doesn't mess up simple ascii remappings, such as bs->del.") (SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \COMMANDKEYACTION TI)) (T (TRANSITIONCODE \COMMANDKEYACTION TI] [COND ((fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (SETQ ASCIICODE (LOGAND ASCIICODE \CTRLMASK] (COND ((AND (OR (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) (ILESSP ASCIICODE \KEYBOARD.META)) (SETQ ASCIICODE (LOGOR ASCIICODE \KEYBOARD.META] (COND ((ASSOC ASCIICODE (fetch INTERRUPTLIST of \CURRENTKEYACTION)) (SETQ PENDINGINTERRUPT T) (replace WAITINGINTERRUPT of \INTERRUPTSTATE with T) (replace INTCHARCODE of \INTERRUPTSTATE with ASCIICODE)) (T (\PUTSYSBUF ASCIICODE]) - -(MOUSECHORDWAIT [LAMBDA MSECS (* MPL "21-Jun-85 16:31") (DECLARE (GLOBALVARS \RCLKMILLISECOND)) (PROG1 (AND \MOUSECHORDTICKS \MOUSECHORDMILLISECONDS) (COND ((IGREATERP MSECS 0) (SETQ \MOUSECHORDTICKS (AND (ARG MSECS 1) (IMIN MAX.SMALLP (ITIMES (SETQ \MOUSECHORDMILLISECONDS (OR (SMALLP (ARG MSECS 1)) 50)) \RCLKMILLISECOND]) - -(\TRACKCURSOR [LAMBDA (CURSORX CURSORY) (* ; "Edited 30-Mar-88 11:11 by Snow") (DECLARE (GLOBALVARS \CURSORDESTHEIGHT \CURSORDESTWIDTH)) (.NOTELASTUSERACTION) [COND ((OR [COND ((IGEQ CURSORX (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX)) (* Large cursor values are either out of bounds to the right or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORX 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORX 65535)) \CURSORHOTSPOTX) 0) (* Cursor pos + hotspot is still off to the left  (the IPLUS is an optimization of (\XMOUSECOORD))%, so clip to effective zero) (SETQ CURSORX (COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTX) BITSPERWORD] (T (SETQ CURSORX (SUB1 (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX] (IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT HARDCURSORHEIGHT))) (* repeat test so that both X and Y will get clipped each cycle.  This keeps the cursor from moving off the screen.) [COND ((IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY)) (* Large cursor values are either out of bounds to the bottom or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORY 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORY 65535)) \CURSORHOTSPOTY) 0) (* Cursor pos + hotspot is still off to the top, so clip to effective zero) (SETQ CURSORY (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTY) BITSPERWORD] (T (SETQ CURSORY (SUB1 (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY] (* If need to clip mouse, do so here. \SETMOUSEXY MACRO takes dlion  complexities into account.) (COND ((NEQ \MACHINETYPE \MAIKO) (\SETMOUSEXY CURSORX CURSORY] (COND (\SOFTCURSORUPP (\SOFTCURSORPOSITION CURSORX CURSORY))) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Have to kick DAYBREAK IOP to track the cursor.  *) (\DoveDisplay.SetCursorPosition CURSORX CURSORY))) (\PUTBASE \EM.CURSORX 0 CURSORX) (\PUTBASE \EM.CURSORY 0 CURSORY]) -) -(DECLARE%: EVAL@COMPILE - -(RPAQQ \SUN.TYPE3KEYBOARD 0) - -(RPAQQ \SUN.TYPE4KEYBOARD 1) - -(RPAQQ \SUN.JLEKEYBOARD 2) - -(RPAQQ \TOSHIBA.JIS 7) - - -(CONSTANTS (\SUN.TYPE3KEYBOARD 0) - (\SUN.TYPE4KEYBOARD 1) - (\SUN.JLEKEYBOARD 2) - (\TOSHIBA.JIS 7)) -) - -(RPAQ? \MOUSECHORDTICKS ) - -(RPAQ? \MOUSECHORDMILLISECONDS 50) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(\KEYBOARDINIT) -) -(DECLARE%: DONTCOPY -(DECLARE%: EVAL@COMPILE - -(PUTPROPS .NOTELASTUSERACTION MACRO (NIL (\BLT \LASTUSERACTION (LOCF (fetch SECONDSTMP - of \MISCSTATS)) - WORDSPERCELL))) -) - -(DECLARE%: EVAL@COMPILE - -(RPAQQ ALLUP 65535) - -(RPAQQ \CTRLMASK 159) - -(RPAQQ \METABIT 128) - - -(CONSTANTS ALLUP \CTRLMASK \METABIT) -) - - -(RPAQQ DLMOUSEBITS ((\MOUSE.LEFTBIT 4) - (\MOUSE.RIGHTBIT 2) - (\MOUSE.MIDDLEBIT 1) - (\MOUSE.ALLBITS 7) - (\MOUSE.LRBIT 6))) -(DECLARE%: EVAL@COMPILE - -(RPAQQ \MOUSE.LEFTBIT 4) - -(RPAQQ \MOUSE.RIGHTBIT 2) - -(RPAQQ \MOUSE.MIDDLEBIT 1) - -(RPAQQ \MOUSE.ALLBITS 7) - -(RPAQQ \MOUSE.LRBIT 6) - - -(CONSTANTS (\MOUSE.LEFTBIT 4) - (\MOUSE.RIGHTBIT 2) - (\MOUSE.MIDDLEBIT 1) - (\MOUSE.ALLBITS 7) - (\MOUSE.LRBIT 6)) -) - - -(RPAQQ DLMOUSESTATES ((\DLMOUSE.UP 0) - (\DLMOUSE.WAITING 1) - (\DLMOUSE.NORMAL 2) - (\DLMOUSE.MIDDLE 3) - (\DLMOUSE.MIDDLE&LEFT 4) - (\DLMOUSE.MIDDLE&RIGHT 5))) -(DECLARE%: EVAL@COMPILE - -(RPAQQ \DLMOUSE.UP 0) - -(RPAQQ \DLMOUSE.WAITING 1) - -(RPAQQ \DLMOUSE.NORMAL 2) - -(RPAQQ \DLMOUSE.MIDDLE 3) - -(RPAQQ \DLMOUSE.MIDDLE&LEFT 4) - -(RPAQQ \DLMOUSE.MIDDLE&RIGHT 5) - - -(CONSTANTS (\DLMOUSE.UP 0) - (\DLMOUSE.WAITING 1) - (\DLMOUSE.NORMAL 2) - (\DLMOUSE.MIDDLE 3) - (\DLMOUSE.MIDDLE&LEFT 4) - (\DLMOUSE.MIDDLE&RIGHT 5)) -) - - -(RPAQQ TRANSITIONFLAGS - (ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF - LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF - 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF - FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF - USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF)) -(DECLARE%: EVAL@COMPILE - -(RPAQQ ALTGRDOWN.TF 27) - -(RPAQQ ALTGRUP.TF 28) - -(RPAQQ ALTGRTOGGLE.TF 29) - -(RPAQQ CTRLDOWN.TF 5) - -(RPAQQ CTRLUP.TF 4) - -(RPAQQ DEADKEY.TF 30) - -(RPAQQ IGNORE.TF 0) - -(RPAQQ EVENT.TF 1) - -(RPAQQ LOCKDOWN.TF 8) - -(RPAQQ LOCKSHIFT.TF 2) - -(RPAQQ LOCKTOGGLE.TF 14) - -(RPAQQ LOCKUP.TF 7) - -(RPAQQ NOLOCKSHIFT.TF 3) - -(RPAQQ 1SHIFTDOWN.TF 6) - -(RPAQQ 1SHIFTUP.TF 9) - -(RPAQQ 2SHIFTDOWN.TF 11) - -(RPAQQ 2SHIFTUP.TF 10) - -(RPAQQ METADOWN.TF 13) - -(RPAQQ METAUP.TF 12) - -(RPAQQ FONTDOWN.TF 24) - -(RPAQQ FONTUP.TF 25) - -(RPAQQ FONTTOGGLE.TF 26) - -(RPAQQ USERMODE1UP.TF 15) - -(RPAQQ USERMODE1DOWN.TF 16) - -(RPAQQ USERMODE1TOGGLE.TF 17) - -(RPAQQ USERMODE2UP.TF 18) - -(RPAQQ USERMODE2DOWN.TF 19) - -(RPAQQ USERMODE2TOGGLE.TF 20) - -(RPAQQ USERMODE3UP.TF 21) - -(RPAQQ USERMODE3DOWN.TF 22) - -(RPAQQ USERMODE3TOGGLE.TF 23) - - -(CONSTANTS ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF - LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF - 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF - USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF - USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF) -) - -(DECLARE%: EVAL@COMPILE - -[PUTPROPS \TRANSINDEX MACRO ((KEYNUMBER DOWNFLG) - (COND - (DOWNFLG (IPLUS \NKEYS KEYNUMBER)) - (T KEYNUMBER] - -(PUTPROPS ARMEDCODE MACRO ((TABLE CHAR) - (\GETBASEBIT (fetch (KEYACTION ARMED) - TABLE) - CHAR))) - -(PUTPROPS TRANSITIONALTGRCODE MACRO ((TABLE CHAR) - (\GETBASE (fetch (KEYACTION ALTGRAPHCODES) of TABLE) - CHAR))) - -(PUTPROPS TRANSITIONSHIFTCODE MACRO ((TABLE CHAR) - (\GETBASE (fetch (KEYACTION SHIFTCODES) - TABLE) - CHAR))) - -(PUTPROPS TRANSITIONCODE MACRO ((TABLE CHAR) - (\GETBASE (fetch (KEYACTION CODES) - TABLE) - CHAR))) - -(PUTPROPS TRANSITIONFLAGS MACRO ((TABLE CHAR) - (\GETBASEBYTE (fetch (KEYACTION FLAGS) - TABLE) - CHAR))) - -[PUTPROPS TRANSITIONDEADLIST MACRO ((TABLE CHAR SHIFTED) - (\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) - (LLSH (COND - (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) - (T CHAR)) - 1] - -[PUTPROPS CHECKFORDEADKEY MACRO - ((KEYCODE TABLE CHAR SHIFTED) - (LET ((CODE KEYCODE)) - (COND - [(IEQP CODE 65535) - `(DEADKEY ,(\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) - (LLSH (COND - (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) - (T CHAR)) - 1] - (T CODE] -) - -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE - -(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]) -) -(DECLARE%: EVAL@COMPILE - -(RPAQQ \NKEYS 112) - - -(CONSTANTS \NKEYS) -) - -(* "END EXPORTED DEFINITIONS") - - -(DECLARE%: EVAL@COMPILE - -(BLOCKRECORD RING ((READ WORD) - (WRITE WORD))) -) - - - - -(* ; "can get rid of shiftstate after clients have been fixed") - -(DECLARE%: EVAL@COMPILE - -(ACCESSFNS SHIFTSTATE [[DUMMYSHIFT (NOT (EQ 0 (LOGAND (\GETBASEBYTE DATUM 0) - (LOGOR 1 2] - [DUMMY1SHIFT [NOT (EQ 0 (LOGAND 1 (\GETBASEBYTE DATUM 0] - (\PUTBASEBYTE DATUM 0 (COND - (NEWVALUE (LOGOR 1 (\GETBASEBYTE DATUM 0)) - ) - (T (LOGAND (\GETBASEBYTE DATUM 0) - (LOGXOR \CHARMASK 1] - [DUMMY2SHIFT [NOT (EQ 0 (LOGAND 2 (\GETBASEBYTE DATUM 0] - (\PUTBASEBYTE DATUM 0 (COND - (NEWVALUE (LOGOR 2 (\GETBASEBYTE DATUM 0)) - ) - (T (LOGAND (\GETBASEBYTE DATUM 0) - (LOGXOR \CHARMASK 2] - [DUMMYLOCK [NOT (EQ 0 (LOGAND 4 (\GETBASEBYTE DATUM 0] - (\PUTBASEBYTE DATUM 0 (COND - (NEWVALUE (LOGOR 4 (\GETBASEBYTE DATUM 0)) - ) - (T (LOGAND (\GETBASEBYTE DATUM 0) - (LOGXOR \CHARMASK 4] - [DUMMYSHIFTORLOCK (NOT (EQ 0 (\GETBASEBYTE DATUM 0))) - (\PUTBASEBYTE DATUM 0 (COND - (NEWVALUE (HELP - " Can't turn on SHIFTORLOCK" - )) - (T 0] - [DUMMYCTRL (NOT (EQ 0 (\GETBASEBYTE DATUM 1))) - (\PUTBASEBYTE DATUM 1 (COND - (NEWVALUE 1) - (T 0] - [DUMMYMETA (NOT (EQ 0 (\GETBASEBYTE DATUM 2))) - (\PUTBASEBYTE DATUM 2 (COND - (NEWVALUE 1) - (T 0] - [DUMMYFONT (NEQ 0 (LOGAND (LLSH 1 3) - (\GETBASEBYTE DATUM 3))) - (\PUTBASEBYTE DATUM 3 (COND - (NEWVALUE (LOGOR (LLSH 1 3) - (\GETBASEBYTE DATUM 3))) - (T (LOGAND (\GETBASEBYTE DATUM 3) - (LOGXOR \CHARMASK - (LLSH 1 3] - [DUMMYUSERMODE1 (NEQ 0 (LOGAND (LLSH 1 0) - (\GETBASEBYTE DATUM 3))) - (\PUTBASEBYTE DATUM 3 (COND - (NEWVALUE (LOGOR (LLSH 1 0) - (\GETBASEBYTE DATUM 3))) - (T (LOGAND (\GETBASEBYTE DATUM 3) - (LOGXOR \CHARMASK - (LLSH 1 0] - [DUMMYUSERMODE2 (NEQ 0 (LOGAND (LLSH 1 1) - (\GETBASEBYTE DATUM 3))) - (\PUTBASEBYTE DATUM 3 (COND - (NEWVALUE (LOGOR (LLSH 1 1) - (\GETBASEBYTE DATUM 3))) - (T (LOGAND (\GETBASEBYTE DATUM 3) - (LOGXOR \CHARMASK - (LLSH 1 1] - [DUMMYUSERMODE3 (NEQ 0 (LOGAND (LLSH 1 2) - (\GETBASEBYTE DATUM 3))) - (\PUTBASEBYTE DATUM 3 (COND - (NEWVALUE (LOGOR (LLSH 1 2) - (\GETBASEBYTE DATUM 3))) - (T (LOGAND (\GETBASEBYTE DATUM 3) - (LOGXOR \CHARMASK - (LLSH 1 2] - [DUMMYALTGRAPH (NEQ 0 (LOGAND (LLSH 1 4) - (\GETBASEBYTE DATUM 3))) - (\PUTBASEBYTE DATUM 3 (COND - (NEWVALUE (LOGOR (LLSH 1 4) - (\GETBASEBYTE DATUM 3))) - (T (LOGAND (\GETBASEBYTE DATUM 3) - (LOGXOR \CHARMASK - (LLSH 1 4] - (DUMMYDEADKEYPENDING (NEQ 0 (LOGAND (LLSH 1 5) - (\GETBASEBYTE DATUM 3))) - (\PUTBASEBYTE DATUM 3 (COND - (NEWVALUE (LOGOR (LLSH 1 5) - (\GETBASEBYTE DATUM 3))) - (T (LOGAND (\GETBASEBYTE DATUM 3) - (LOGXOR \CHARMASK - (LLSH 1 5] - (CREATE (\ALLOCBLOCK (FOLDHI 3 BYTESPERCELL)))) -) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP) -) - -(DECLARE%: EVAL@COMPILE - -(RPAQQ NRINGINDEXWORDS 2) - - -(CONSTANTS NRINGINDEXWORDS) -) - -(DECLARE%: EVAL@COMPILE - -(RPAQ \SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) - -(RPAQ \SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE))) - - -[CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) - (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] -) -) -(DECLARE%: EVAL@COMPILE - -(RPAQQ \KEYNAMES ((5 %% FIVE) - (4 $ FOUR) - (6 ~ SIX) - (e E) - (7 & SEVEN) - (d D) - (u U) - (v V) - (0 %) ZERO) - (k K) - (- %) - (p P) - (/ ?) - (\ %| FONT LOOKS) - (LF SAME) - (BS <-) - (3 %# THREE) - (2 @ TWO) - (w W) - (q Q) - (s S) - (a A) - (9 %( NINE) - (i I) - (x X) - (o O) - (l L) - (%, <) - (%' %") - (%] }) - (BLANK-MIDDLE OPEN DBK-HELP) - (BLANK-TOP KEYBOARD DBK-META) - (1 ! ONE) - (ESC ESCAPE ->) - (TAB =>) - (f F) - (CTRL PROP'S EDIT) - (c C) - (j J) - (b B) - (z Z) - (LSHIFT) - (%. >) - (; %:) - (CR <-%|) - (_ ^) - (DEL DELETE) - (SKIP NEXT) - (r R) - (t T) - (g G) - (y Y) - (h H) - (8 * EIGHT) - (n N) - (m M) - (LOCK) - (SPACE) - (%[ {) - (= +) - (RSHIFT) - (BLANK-BOTTOM STOP) - (MOVE) - (UNDO) - (UTIL0 SUN-KEYPAD=) - (UTIL1 SUN-KEYPAD/) - (UTIL2 SUPER/SUB) - (UTIL3 CASE) - (UTIL4 STRIKEOUT) - (UTIL5 KEYPAD2) - (UTIL6 KEYPAD3 PGDN) - (UTIL7 SUN-LF) - (PAD1 LEFTKEY CAPSLOCK KEYPAD+) - (PAD2 LEFTMIDDLEKEY NUMLOCK KEYPAD-) - (PAD3 MIDDLEKEY SCROLLLOCK KEYPAD*) - (PAD4 RIGHTMIDDLEKEY BREAK KEYPAD/ SUN-PAUSE) - (PAD5 RIGHTKEY DOIT PRTSC) - (LEFT RED MOUSERED) - (RIGHT BLUE MOUSEBLUE) - (MIDDLE YELLOW MOUSEYELLOW) - (MARGINS) - (K41 KEYPAD7 HOME) - (K42 KEYPAD8) - (K43 KEYPAD9 PGUP) - (K44 KEYPAD4) - (K45 KEYPAD5) - (K46 SUN-LEFT-SPACE) - (K47 KEYPAD6) - (K48 SUN-RIGHT-SPACE) - (COPY) - (FIND) - (AGAIN) - (HELP) - (DEF'N EXPAND) - (K4E KEYPAD1 END) - (ALWAYS-ON-1) - (ALWAYS-ON-2) - (CENTER) - (K52 KEYPAD0 INS) - (BOLD) - (ITALICS) - (UNDERLINE) - (SUPERSCRIPT) - (SUBSCRIPT) - (LARGER SMALLER) - (K59 KEYPAD%| KEYPAD.) - (K5A KEYPAD\ KEYPAD, SUN-F10) - (K5B SUN-F11) - (K5C SUN-F12) - (DEFAULTS SUN-PROP) - (K5E SUN-PRTSC) - (K5F SUN-OPEN))) -) - - - -(* ;; -"\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun." -) - - -(RPAQQ \ORIGKEYACTIONS ((0 (53 "%%" NOLOCKSHIFT)) - (1 (52 "$" NOLOCKSHIFT)) - (2 (54 "~" NOLOCKSHIFT)) - (3 ("e" "E" LOCKSHIFT)) - (4 (55 "&" NOLOCKSHIFT)) - (5 ("d" "D" LOCKSHIFT)) - (6 ("u" "U" LOCKSHIFT)) - (7 ("v" "V" LOCKSHIFT)) - (8 (48 ")" NOLOCKSHIFT)) - (9 ("k" "K" LOCKSHIFT)) - (10 ("-" "-" NOLOCKSHIFT)) - (11 ("p" "P" LOCKSHIFT)) - (12 ("/" "?" NOLOCKSHIFT)) - (13 ("\" "|" NOLOCKSHIFT)) - (14 (10 96 NOLOCKSHIFT)) - (15 (8 8 NOLOCKSHIFT)) - (16 (51 "#" NOLOCKSHIFT)) - (17 (50 "@" NOLOCKSHIFT)) - (18 ("w" "W" LOCKSHIFT)) - (19 ("q" "Q" LOCKSHIFT)) - (20 ("s" "S" LOCKSHIFT)) - (21 ("a" "A" LOCKSHIFT)) - (22 (57 "(" NOLOCKSHIFT)) - (23 ("i" "I" LOCKSHIFT)) - (24 ("x" "X" LOCKSHIFT)) - (25 ("o" "O" LOCKSHIFT)) - (26 ("l" "L" LOCKSHIFT)) - (27 ("," "<" NOLOCKSHIFT)) - (28 ("'" "%"" NOLOCKSHIFT)) - (29 ("]" "}" NOLOCKSHIFT)) - (30 (194 194 NOLOCKSHIFT)) - (31 (193 193 NOLOCKSHIFT)) - (32 (49 "!" NOLOCKSHIFT)) - (33 (27 27 NOLOCKSHIFT)) - (34 (9 9 NOLOCKSHIFT)) - (35 ("f" "F" LOCKSHIFT)) - (36 CTRLDOWN . CTRLUP) - (37 ("c" "C" LOCKSHIFT)) - (38 ("j" "J" LOCKSHIFT)) - (39 ("b" "B" LOCKSHIFT)) - (40 ("z" "Z" LOCKSHIFT)) - (41 1SHIFTDOWN . 1SHIFTUP) - (42 ("." ">" NOLOCKSHIFT)) - (43 (";" ":" NOLOCKSHIFT)) - (44 (13 13 NOLOCKSHIFT)) - (45 ("_" "^" NOLOCKSHIFT)) - (46 (127 535 NOLOCKSHIFT)) - (47 ("(" "[" NOLOCKSHIFT)) - (48 ("r" "R" LOCKSHIFT)) - (49 ("t" "T" LOCKSHIFT)) - (50 ("g" "G" LOCKSHIFT)) - (51 ("y" "Y" LOCKSHIFT)) - (52 ("h" "H" LOCKSHIFT)) - (53 (56 "*" NOLOCKSHIFT)) - (54 ("n" "N" LOCKSHIFT)) - (55 ("m" "M" LOCKSHIFT)) - (56 LOCKDOWN . LOCKUP) - (57 (32 32 NOLOCKSHIFT)) - (58 ("[" "{" NOLOCKSHIFT)) - (59 ("=" "+" NOLOCKSHIFT)) - (60 2SHIFTDOWN . 2SHIFTUP) - (61 (195 195 NOLOCKSHIFT)) - (63 (")" "]" NOLOCKSHIFT)) - (77 EVENT . EVENT) - (78 EVENT . EVENT) - (79 EVENT . EVENT) - (102 LOCKDOWN) - (103 LOCKUP))) - -(RPAQQ \DLIONKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) - (10 ("-" "_" NOLOCKSHIFT)) - (33 ("\" "|" NOLOCKSHIFT)) - (45 (96 "~" NOLOCKSHIFT)) - (OPEN METADOWN . METAUP) - (PROP'S CTRLDOWN . CTRLUP) - (SAME METADOWN . METAUP) - (FIND ("2,3" "2,43" NOLOCKSHIFT)) - (UNDO ("2,4" "2,44" NOLOCKSHIFT)) - (STOP (5 7 NOLOCKSHIFT)) - (MOVE) - (COPY) - (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) - (CENTER ("2,101" "2,141" NOLOCKSHIFT)) - (BOLD ("2,102" "2,142" NOLOCKSHIFT)) - (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) - (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) - (SUPERSCRIPT ("2,113" "2,153" NOLOCKSHIFT)) - (SUBSCRIPT ("2,114" "2,154" NOLOCKSHIFT)) - (LARGER ("2,110" "2,150" NOLOCKSHIFT)) - (DEFAULTS ("2,115" "2,155" NOLOCKSHIFT)) - (93 (27 "2,64" NOLOCKSHIFT)) - (47 ("2,22" "2,62" NOLOCKSHIFT)) - (31 ("2,5" "2,45" NOLOCKSHIFT)) - (92 ("2,1" "2,41" NOLOCKSHIFT)) - (80 ("2,13" "2,53" NOLOCKSHIFT)) - (FONT ("2,112" "2,152" NOLOCKSHIFT)))) - -(RPAQQ \DLIONOSDKEYACTIONS ((56 LOCKTOGGLE))) - -(RPAQQ \DORADOKEYACTIONS ((2 (54 "~" NOLOCKSHIFT)) - (10 ("-" "-" NOLOCKSHIFT)) - (13 ("\" "|" NOLOCKSHIFT)) - (14 (10 96 NOLOCKSHIFT)) - (33 (27 27 NOLOCKSHIFT)) - (45 ("_" "^" NOLOCKSHIFT)))) - -(RPAQQ \DOVEKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) - (10 ("-" "_" NOLOCKSHIFT)) - (33 (27 27 NOLOCKSHIFT)) - (56 CTRLDOWN . CTRLUP) - (65 (27 27 NOLOCKSHIFT)) - (71 (39 34 NOLOCKSHIFT)) - (93 ("2,24" "2,64" NOLOCKSHIFT)) - (108 (96 126 NOLOCKSHIFT)) - (DBK-META METADOWN . METAUP) - (DBK-HELP ("2,1" "2,41" NOLOCKSHIFT)) - (SAME METADOWN . METAUP) - (FIND ("2,3" "2,43" NOLOCKSHIFT)) - (UNDO ("2,4" "2,44" NOLOCKSHIFT)) - (STOP (5 7 NOLOCKSHIFT)) - (EDIT ("2,5" "2,45" NOLOCKSHIFT)) - (MOVE) - (COPY) - (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) - (CENTER ("2,101" "2,141" NOLOCKSHIFT)) - (BOLD ("2,102" "2,142" NOLOCKSHIFT)) - (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) - (CASE ("2,104" "2,144" NOLOCKSHIFT)) - (STRIKEOUT ("2,105" "2,145" NOLOCKSHIFT)) - (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) - (SUPER/SUB ("2,107" "2,147" NOLOCKSHIFT)) - (LARGER ("2,110" "2,150" NOLOCKSHIFT)) - (MARGINS ("2,111" "2,151" NOLOCKSHIFT)) - (LOOKS ("2,112" "2,152" NOLOCKSHIFT)) - (CAPSLOCK LOCKTOGGLE) - (NUMLOCK ("2,11" "-" NOLOCKSHIFT)) - (SCROLLLOCK ("2,12" 180 NOLOCKSHIFT)) - (BREAK (2 184 NOLOCKSHIFT)) - (DOIT ("2,13" "2,53" NOLOCKSHIFT)) - (KEYPAD7 ("2,14" 55 NOLOCKSHIFT)) - (KEYPAD8 (173 56 NOLOCKSHIFT)) - (KEYPAD9 ("2,15" 57 NOLOCKSHIFT)) - (KEYPAD4 (172 52 NOLOCKSHIFT)) - (KEYPAD5 ("2,16" 53 NOLOCKSHIFT)) - (KEYPAD6 (174 54 NOLOCKSHIFT)) - (KEYPAD1 ("2,17" 49 NOLOCKSHIFT)) - (KEYPAD2 (175 50 NOLOCKSHIFT)) - (KEYPAD3 ("2,20" 51 NOLOCKSHIFT)) - (KEYPAD0 ("2,21" 48 NOLOCKSHIFT)) - (KEYPAD%| ("|" 46 NOLOCKSHIFT)) - (KEYPAD\ ("\" 44 NOLOCKSHIFT)) - (47 ("2,22" "2,62" NOLOCKSHIFT)))) - -(RPAQQ \DOVEOSDKEYACTIONS ((56 LOCKDOWN . LOCKUP) - (36 CTRLDOWN . CTRLUP) - (CAPSLOCK ("2,5" "2,45" NOLOCKSHIFT)))) - -(RPAQQ \MAIKOKEYACTIONS ((61 (5 7 NOLOCKSHIFT)) - (91 (520 552 NOLOCKSHIFT)) - (92 (513 545 NOLOCKSHIFT)) - (30 (513 545 NOLOCKSHIFT)) - (63 (516 548 NOLOCKSHIFT)) - (93 (532 564 NOLOCKSHIFT)) - (62) - (111 (329 263 NOLOCKSHIFT)) - (89) - (90 (515 547 NOLOCKSHIFT)) - (73 (521 521 NOLOCKSHIFT)) - (74 (522 522 NOLOCKSHIFT)) - (75 (2 2 NOLOCKSHIFT)) - (81 (524 55 NOLOCKSHIFT)) - (82 (173 56 NOLOCKSHIFT)) - (83 (525 57 NOLOCKSHIFT)) - (84 (172 52 NOLOCKSHIFT)) - (85 (526 53 NOLOCKSHIFT)) - (87 (174 54 NOLOCKSHIFT)) - (94 (527 49 NOLOCKSHIFT)) - (69 (175 50 NOLOCKSHIFT)) - (70 (528 51 NOLOCKSHIFT)) - (98 (529 48 NOLOCKSHIFT)) - (76 (523 555 NOLOCKSHIFT)) - (72 LOCKTOGGLE) - (97 (577 609 NOLOCKSHIFT)) - (99 (578 610 NOLOCKSHIFT)) - (100 (579 611 NOLOCKSHIFT)) - (67 (580 612 NOLOCKSHIFT)) - (68 (581 613 NOLOCKSHIFT)) - (101 (582 614 NOLOCKSHIFT)) - (66 (583 615 NOLOCKSHIFT)) - (104 (584 616 NOLOCKSHIFT)) - (80 (585 617 NOLOCKSHIFT)) - (13 (23 21 NOLOCKSHIFT)) - (33 (27 27 NOLOCKSHIFT)) - (65 (27 27 NOLOCKSHIFT)) - (2 (54 94 NOLOCKSHIFT)) - (10 (45 95 NOLOCKSHIFT)) - (36 CTRLDOWN . CTRLUP) - (56 LOCKTOGGLE . IGNORE) - (45 (96 126 NOLOCKSHIFT)) - (31 METADOWN . METAUP) - (14 METADOWN . METAUP) - (71 (10 10 NOLOCKSHIFT)) - (47 (530 562 NOLOCKSHIFT)) - (105 (92 124 NOLOCKSHIFT)))) - -(RPAQQ \MAIKOKEYACTIONST4 ((61 ("^E" "^G" NOLOCKSHIFT)) - (91 ("2,10" "2,50" NOLOCKSHIFT)) - (92 ("2,1" "2,41" NOLOCKSHIFT)) - (30 ("2,1" "2,41" NOLOCKSHIFT)) - (109 ("2,25" "2,65" NOLOCKSHIFT)) - (63 ("2,4" "2,44" NOLOCKSHIFT)) - (14 METADOWN . METAUP) - (93 ("2,24" "2,64" NOLOCKSHIFT)) - (62) - (111 ("1,111" "1,79" NOLOCKSHIFT)) - (89) - (90 ("2,3" "2,43" NOLOCKSHIFT)) - (73 ("2,11" "2,11" NOLOCKSHIFT)) - (74 ("2,12" "2,12" NOLOCKSHIFT)) - (75 ("^B" "^B" NOLOCKSHIFT)) - (81 ("2,14" 55 NOLOCKSHIFT)) - (82 (173 56 NOLOCKSHIFT)) - (83 ("2,15" 57 NOLOCKSHIFT)) - (84 (172 52 NOLOCKSHIFT)) - (85 ("2,16" 53 NOLOCKSHIFT)) - (87 (174 54 NOLOCKSHIFT)) - (94 ("2,17" 49 NOLOCKSHIFT)) - (69 (175 50 NOLOCKSHIFT)) - (70 ("2,20" 51 NOLOCKSHIFT)) - (98 ("2,21" 48 NOLOCKSHIFT)) - (76 ("2,13" "2,13" NOLOCKSHIFT)) - (110 ("2,53" "2,53" NOLOCKSHIFT)) - (72 LOCKTOGGLE) - (97 ("2,101" "2,141" NOLOCKSHIFT)) - (99 ("2,102" "2,142" NOLOCKSHIFT)) - (100 ("2,103" "2,143" NOLOCKSHIFT)) - (67 ("2,104" "2,144" NOLOCKSHIFT)) - (68 ("2,105" "2,145" NOLOCKSHIFT)) - (101 ("2,106" "2,146" NOLOCKSHIFT)) - (66 ("2,107" "2,147" NOLOCKSHIFT)) - (104 ("2,110" "2,150" NOLOCKSHIFT)) - (80 ("2,111" "2,151" NOLOCKSHIFT)) - (106 ("2,113" "2,153" NOLOCKSHIFT)) - (107 ("2,114" "2,154" NOLOCKSHIFT)) - (108 ("2,115" "2,155" NOLOCKSHIFT)) - (13 ("^W" "^U" NOLOCKSHIFT)) - (33 ("ESC" "ESC" NOLOCKSHIFT)) - (64 IGNORE . IGNORE) - (65 (27 27 NOLOCKSHIFT)) - (95 IGNORE . IGNORE) - (96 IGNORE . IGNORE) - (102 IGNORE . IGNORE) - (2 ("6" "^" NOLOCKSHIFT)) - (10 ("-" "_" NOLOCKSHIFT)) - (36 CTRLDOWN . CTRLUP) - (56 LOCKTOGGLE . IGNORE) - (45 ("`" "~" NOLOCKSHIFT)) - (31 METADOWN . METAUP) - (71 (10 10 NOLOCKSHIFT)) - (47 ("2,22" "2,62" NOLOCKSHIFT)) - (86 IGNORE . IGNORE) - (88 IGNORE . IGNORE) - (105 ("\" "|" NOLOCKSHIFT)))) - -(RPAQQ \MAIKO-JLE-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) - (4 ("7" "'" NOLOCKSHIFT)) - (8 ("0" "0" NOLOCKSHIFT)) - (10 ("\" "_" NOLOCKSHIFT)) - (13 ("^W" "^U" NOLOCKSHIFT)) - (14 METADOWN . METAUP) - (15 (8 8 NOLOCKSHIFT)) - (17 ("2" "%"" NOLOCKSHIFT)) - (22 ("9" ")" NOLOCKSHIFT)) - (28 (":" "*" NOLOCKSHIFT)) - (29 ("[" "{" NOLOCKSHIFT)) - (30 ("]" "}" NOLOCKSHIFT)) - (31 METADOWN . METAUP) - (33 ("ESC" "ESC" NOLOCKSHIFT)) - (36 CTRLDOWN . CTRLUP) - (43 (";" "+" NOLOCKSHIFT)) - (45 ("^" "~" NOLOCKSHIFT)) - (47 ("2,22" "2,62" NOLOCKSHIFT)) - (53 ("8" "(" NOLOCKSHIFT)) - (56 LOCKTOGGLE . IGNORE) - (58 ("@" "`" NOLOCKSHIFT)) - (59 ("-" "=" NOLOCKSHIFT)) - (61 ("^E" "^G" NOLOCKSHIFT)) - (62) - (63 ("2,4" "2,44" NOLOCKSHIFT)) - (64 ("2,14" 55 NOLOCKSHIFT)) - (65 (27 27 NOLOCKSHIFT)) - (66 ("2,107" "2,147" NOLOCKSHIFT)) - (67 ("2,104" "2,144" NOLOCKSHIFT)) - (69 ("2,13" "2,53" NOLOCKSHIFT)) - (70 ("2,20" 51 NOLOCKSHIFT)) - (71 (10 10 NOLOCKSHIFT)) - (72 (766 766 NOLOCKSHIFT)) - (73 ("2,11" "2,11" NOLOCKSHIFT)) - (74 ("2,12" "2,12" NOLOCKSHIFT)) - (75 ("^B" "^B" NOLOCKSHIFT)) - (80 ("2,111" "2,151" NOLOCKSHIFT)) - (81 ("2,14" 55 NOLOCKSHIFT)) - (82 (173 56 NOLOCKSHIFT)) - (83 ("2,15" 57 NOLOCKSHIFT)) - (84 (172 52 NOLOCKSHIFT)) - (85 ("2,16" 53 NOLOCKSHIFT)) - (86 (765 765 NOLOCKSHIFT)) - (87 (174 54 NOLOCKSHIFT)) - (88 (770 771 NOLOCKSHIFT)) - (90 ("2,3" "2,43" NOLOCKSHIFT)) - (91 ("2,10" "2,50" NOLOCKSHIFT)) - (92 ("2,1" "2,41" NOLOCKSHIFT)) - (93 ("2,24" "2,64" NOLOCKSHIFT)) - (96 IGNORE . IGNORE) - (98 ("2,21" 48 NOLOCKSHIFT)) - (99 ("2,102" "2,142" NOLOCKSHIFT)) - (101 ("2,106" "2,146" NOLOCKSHIFT)) - (102 IGNORE . IGNORE) - (103 (767 768 NOLOCKSHIFT)) - (104 ("2,110" "2,150" NOLOCKSHIFT)) - (105 ("\" "|" NOLOCKSHIFT)) - (106 ("2,113" "2,153" NOLOCKSHIFT)) - (107 ("2,114" "2,154" NOLOCKSHIFT)) - (108 ("2,115" "2,155" NOLOCKSHIFT)) - (109 (769 769 NOLOCKSHIFT)) - (110 ("2,53" "2,53" NOLOCKSHIFT)) - (111 ("1,111" "1,79" NOLOCKSHIFT)))) - -(RPAQQ \TOSHIBA-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) - (4 ("7" "'" NOLOCKSHIFT)) - (17 ("2" "%"" NOLOCKSHIFT)) - (53 ("8" "(" NOLOCKSHIFT)) - (22 ("9" ")" NOLOCKSHIFT)) - (8 ("0" "0" NOLOCKSHIFT)) - (10 ("-" "=" NOLOCKSHIFT)) - (59 ("^" "~" NOLOCKSHIFT)) - (45 ("\" "|" NOLOCKSHIFT)) - (58 ("@" "`" NOLOCKSHIFT)) - (29 ("[" "{" NOLOCKSHIFT)) - (105 ("]" "}" NOLOCKSHIFT)) - (43 (";" "+" NOLOCKSHIFT)) - (28 (":" "*" NOLOCKSHIFT)) - (15 (23 95 NOLOCKSHIFT)) - (13 (8 8 NOLOCKSHIFT)) - (86 METADOWN . METAUP) - (73 (530 562 NOLOCKSHIFT)) - (88 ("2,24" "2,64" NOLOCKSHIFT)) - (98 IGNORE . IGNORE) - (75 ("2,11" "2,11" NOLOCKSHIFT)) - (110 ("2,12" "2,12" NOLOCKSHIFT)) - (74 ("^B" "^B" NOLOCKSHIFT)) - (64 ("2,14" 55 NOLOCKSHIFT)) - (65 (173 56 NOLOCKSHIFT)) - (95 ("2,15" 57 NOLOCKSHIFT)) - (81 (172 52 NOLOCKSHIFT)) - (82 ("2,16" 53 NOLOCKSHIFT)) - (83 (174 54 NOLOCKSHIFT)) - (84 ("2,17" 49 NOLOCKSHIFT)) - (85 (175 50 NOLOCKSHIFT)) - (87 ("2,20" 51 NOLOCKSHIFT)) - (94 ("2,21" 48 NOLOCKSHIFT)) - (69 ("2,13" "2,53" NOLOCKSHIFT)) - (70 LOCKTOGGLE))) - -(RPAQQ KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL) - -(RPAQ? \KEYBOARD.META 256) - -(RPAQ? \MODIFIED.KEYACTIONS ) -(DECLARE%: EVAL@COMPILE - -(ADDTOVAR GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) -) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS - \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION - \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS - \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS) -) - - - -(* ; "Key interpretation") - -(DEFINEQ - -(KEYACTION [LAMBDA (KEYNAME ACTIONS TABLE) (* ; "Edited 19-Nov-87 16:19 by Snow") (LET ((NUMB (OR (SMALLP KEYNAME) (\KEYNAMETONUMBER KEYNAME))) (TABLE (OR TABLE \CURRENTKEYACTION))) (OR (TYPE? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (* ;  "Make sure he supplied a valid TABLE argument.") (CONS (\KEYACTION1 (\TRANSINDEX NUMB T) (AND ACTIONS (OR (CAR ACTIONS) 'IGNORE)) TABLE) (\KEYACTION1 (\TRANSINDEX NUMB NIL) (AND ACTIONS (OR (CDR ACTIONS) 'IGNORE)) TABLE]) - -(KEYACTIONTABLE [LAMBDA (OLD) (* ; "Edited 23-Mar-92 12:44 by jds") (* ;; "Create a fresh key action table (or copy OLD so it can be modified without danger). Returns a fresh keyaction table.") (COND (OLD (* ;; "He supplied an existing table; create a copy of it:") (OR (type? KEYACTION OLD) (\ILLEGAL.ARG OLD)) (* ;  "Make sure the argument IS a key action table.") (create KEYACTION copying OLD)) (T (* ;; "Create a completely fresh table, filled in from \ORIGKEYACTIONS, and the machine-specific exceptions:") (PROG1 (SETQ OLD (create KEYACTION)) (for X in (APPEND (COPY \ORIGKEYACTIONS) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) OLD)))]) - -(KEYBOARDTYPE [LAMBDA NIL (* ; "Edited 6-Nov-95 15:35 by ") (* ; "Edited 17-Feb-95 14:36 by rmk:") (* ;  "Edited 16-Jun-92 11:03 by kaplan") (* ;; "Returns a symbol identifying the currently connected keyboard type. For now, infers it from the machine type, defaults to NIL (= unknown).") (LET ((MT (MACHINETYPE))) (SELECTQ MT (MAIKO (OR [CADR (SASSOC (L-CASE (UNIX-GETENV "LDEKBDTYPE")) '(("type3" SUN3) ("type4" SUN4) ("type5" SUN5] (MKATOM (U-CASE (UNIX-GETENV "LDEKBDTYPE"))) (AND (STREQUAL "dos" (UNIX-GETPARM "ARCH")) 'FULL-IBMPC))) ((DORADO DANDELION DOVE) MT) NIL]) - -(RESETKEYACTION [LAMBDA (TABLE FROM RESETINTERRUPTS) (* ; "Edited 19-Nov-87 16:55 by Snow") (* ;; "Resets the actions of key transitions in the keyaction table TABLE, copying in the actions from FROM. If RESETINTERRUPTS is true, also copies the interrupt-character settings from FROM.") (DECLARE (GLOBALVARS \DEFAULTKEYACTION)) (* ;; "do some type checking first.") (OR (type? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (OR FROM (SETQ FROM \DEFAULTKEYACTION)) (OR (type? KEYACTION FROM) (\ILLEGAL.ARG TABLE)) (* ;; "do the resetting.") (\BLT (fetch (KEYACTION FLAGS) of TABLE) (fetch (KEYACTION FLAGS) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION FLAGS) of TABLE)) 1)) (\BLT (fetch (KEYACTION CODES) of TABLE) (fetch (KEYACTION CODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION CODES) of TABLE)) 1)) (\BLT (fetch (KEYACTION SHIFTCODES) of TABLE) (fetch (KEYACTION SHIFTCODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION SHIFTCODES) of TABLE)) 1)) [if RESETINTERRUPTS then (\BLT (fetch (KEYACTION ARMED) of TABLE) (fetch (KEYACTION ARMED) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION ARMED) of TABLE)) 1)) (replace (KEYACTION INTERRUPTLIST) of TABLE with (COPY (fetch (KEYACTION INTERRUPTLIST) of FROM] TABLE]) - -(\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS [LAMBDA NIL (* ; "Edited 18-Sep-90 22:36 by jds") (* ;;  "Return a list of machine-specific keyactions appropriate to the machine you're running on.") (* ;; "Also take account (on Maiko implementations) of whether we're running under X or not -- the CAPS-LOCK key works differently.") (SELECTC \MACHINETYPE (\DORADO \DORADOKEYACTIONS) (\DANDELION \DLIONKEYACTIONS) (\MAIKO (LET [(CAPS-LOCK-ACTIONS (COND ((EQUAL (UNIX-GETPARM "DISPLAY") "X") '((56 LOCKDOWN . LOCKUP) (72 LOCKDOWN . LOCKUP] (* ;; "If we're running under X windows, CAPS-LOCK-ACTIONS, appended to the normal keyactions, will reset the keyboard appropriately.") (COND ((EQUAL \SUN.TYPE3KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONS CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.TYPE4KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONST4 CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.JLEKEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) \MAIKO-JLE-KEYACTIONS) ((EQUAL \TOSHIBA.JIS (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (* ; "Toshiba JIS") (APPEND \MAIKOKEYACTIONST4 \TOSHIBA-KEYACTIONS)) (T (* ; "default is type3") \MAIKOKEYACTIONS)))) (\DAYBREAK (* ;  "Moving to a daybreak. Need to distinguish among the various kinds of keyboard.") (* ;; "For now, we only distinguish between the office keyboards (1 = US, 2 = Euro, 3 = Japanese, 4 = ADM-3), and some yet-to-be-determined Lisp-keyboard number") (COND ((ILEQ (\DoveMisc.ReadKeyboardType) 4) (* ;  "It's an office keyboard. Set it up right!") (APPEND \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (T (* ;  "Lisp keyboard. Leave the Dove keyactions as they were.") \DOVEKEYACTIONS))) NIL]) - -(\KEYACTION1 [LAMBDA (TI ACTION TABLE) (* ; "Edited 4-Mar-92 13:59 by jds") (PROG1 (SELECTC (TRANSITIONFLAGS TABLE TI) (IGNORE.TF 'IGNORE) ((LIST LOCKSHIFT.TF NOLOCKSHIFT.TF) [LET (CODE) (LIST (CHECKFORDEADKEY (TRANSITIONCODE TABLE TI) TABLE TI NIL) (CHECKFORDEADKEY (TRANSITIONSHIFTCODE TABLE TI) TABLE TI T) (TRANSITIONALTGRCODE TABLE TI) (COND ((EQ LOCKSHIFT.TF (TRANSITIONFLAGS TABLE TI)) 'LOCKSHIFT) (T 'NOLOCKSHIFT]) (EVENT.TF 'EVENT) (CTRLDOWN.TF 'CTRLDOWN) (CTRLUP.TF 'CTRLUP) (DEADKEY.TF (LIST 'DEADKEY (TRANSITIONDEADLIST TABLE TI) (TRANSITIONDEADLIST TABLE TI T))) (1SHIFTDOWN.TF '1SHIFTDOWN) (1SHIFTUP.TF '1SHIFTUP) (2SHIFTDOWN.TF '2SHIFTDOWN) (2SHIFTUP.TF '2SHIFTUP) (LOCKDOWN.TF 'LOCKDOWN) (LOCKUP.TF 'LOCKUP) (LOCKTOGGLE.TF 'LOCKTOGGLE) (METADOWN.TF 'METADOWN) (METAUP.TF 'METAUP) (FONTUP.TF 'FONTUP) (FONTDOWN.TF 'FONTDOWN) (FONTTOGGLE.TF 'FONTTOGGLE) (USERMODE1UP.TF 'USERMODE1UP) (USERMODE1DOWN.TF 'USERMODE1DOWN) (USERMODE1TOGGLE.TF 'USERMODE1TOGGLE) (USERMODE2UP.TF 'USERMODE2UP) (USERMODE2DOWN.TF 'USERMODE2DOWN) (USERMODE2TOGGLE.TF 'USERMODE2TOGGLE) (USERMODE3UP.TF 'USERMODE3UP) (USERMODE3DOWN.TF 'USERMODE3DOWN) (USERMODE3TOGGLE.TF 'USERMODE3TOGGLE) (ALTGRUP.TF 'ALTGRUP) (ALTGRDOWN.TF 'ALTGRDOWN) (ALTGRTOGGLE.TF 'ALTGRTOGGLE) (SHOULDNT)) [SELECTQ ACTION ((NIL NOCHANGE)) (IGNORE (change (TRANSITIONFLAGS TABLE TI) IGNORE.TF)) (EVENT (change (TRANSITIONFLAGS TABLE TI) EVENT.TF)) (CTRLUP (change (TRANSITIONFLAGS TABLE TI) CTRLUP.TF)) (CTRLDOWN (change (TRANSITIONFLAGS TABLE TI) CTRLDOWN.TF)) (1SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 1SHIFTUP.TF)) (1SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 1SHIFTDOWN.TF)) (2SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 2SHIFTUP.TF)) (2SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 2SHIFTDOWN.TF)) (LOCKUP (change (TRANSITIONFLAGS TABLE TI) LOCKUP.TF)) (LOCKDOWN (change (TRANSITIONFLAGS TABLE TI) LOCKDOWN.TF)) (LOCKTOGGLE (change (TRANSITIONFLAGS TABLE TI) LOCKTOGGLE.TF)) (METAUP (change (TRANSITIONFLAGS TABLE TI) METAUP.TF)) (METADOWN (change (TRANSITIONFLAGS TABLE TI) METADOWN.TF)) (FONTUP (change (TRANSITIONFLAGS TABLE TI) FONTUP.TF)) (FONTDOWN (change (TRANSITIONFLAGS TABLE TI) FONTDOWN.TF)) (FONTTOGGLE (change (TRANSITIONFLAGS TABLE TI) FONTTOGGLE.TF)) (USERMODE1UP (change (TRANSITIONFLAGS TABLE TI) USERMODE1UP.TF)) (USERMODE1DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE1DOWN.TF)) (USERMODE1TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE1TOGGLE.TF)) (USERMODE2UP (change (TRANSITIONFLAGS TABLE TI) USERMODE2UP.TF)) (USERMODE2DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE2DOWN.TF)) (USERMODE2TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE2TOGGLE.TF)) (USERMODE3UP (change (TRANSITIONFLAGS TABLE TI) USERMODE3UP.TF)) (USERMODE3DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE3DOWN.TF)) (USERMODE3TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE3TOGGLE.TF)) (ALTGRUP (change (TRANSITIONFLAGS TABLE TI) ALTGRUP.TF)) (ALTGRDOWN (change (TRANSITIONFLAGS TABLE TI) ALTGRDOWN.TF)) (ALTGRTOGGLE (change (TRANSITIONFLAGS TABLE TI) ALTGRTOGGLE.TF)) (PROG (CODE SHIFTCODE ALTGRCODE ACT DEAD SHIFTDEAD) (COND ([AND [OR (AND (AND (LISTP (CAR (LISTP ACTION))) (EQ (CAAR (LISTP ACTION)) 'DEADKEY)) [SETQ DEAD (for PAIR in (CADAR (LISTP ACTION)) collect (* ;;  "Make sure we'll take string charcode specs in the deadkey list.") (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ CODE 65535)) [\CHARCODEP (SETQ CODE (\GETCHARCODE (CAR (LISTP ACTION] (SETQ CODE (APPLY* (FUNCTION CHARCODE) (CAR (LISTP ACTION] [OR (AND (AND (LISTP (CADR (LISTP ACTION))) (EQ (CAADR (LISTP ACTION)) 'DEADKEY)) [SETQ SHIFTDEAD (for PAIR in (CADADR (LISTP ACTION)) collect (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ SHIFTCODE 65535) (SETQ ACT (CDR ACTION))) [\CHARCODEP (SETQ SHIFTCODE (\GETCHARCODE (CAR (SETQ ACT (LISTP (CDR ACTION] (SETQ SHIFTCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) (AND [OR [\CHARCODEP (SETQ ALTGRCODE (\GETCHARCODE (CAR ACT] (SETQ ALTGRCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) NIL] (change (TRANSITIONCODE TABLE TI) CODE) (change (TRANSITIONSHIFTCODE TABLE TI) SHIFTCODE) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH TI 1) DEAD) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (IPLUS \NKEYS \NKEYS TI) 1) SHIFTDEAD) (AND ALTGRCODE (change (TRANSITIONALTGRCODE TABLE TI) ALTGRCODE))) (T (\ILLEGAL.ARG ACTION])]) - -(KEYDOWNP [LAMBDA (KEYNAME) (* lmm "18-Apr-85 02:09") (* T if the indicated key is  instantaneously down.) (\NEWKEYDOWNP (\KEYNAMETONUMBER KEYNAME]) - -(KEYNUMBERP [LAMBDA (X) (* ; "Edited 16-Jan-96 13:16 by rmk") (AND (SMALLP X) (IGEQ X 0) (ILESSP X \NKEYS) X]) - -(\KEYNAMETONUMBER [LAMBDA (KEYNAME) (* rmk%: " 2-SEP-83 10:29") (DECLARE (GLOBALVARS \KEYNAMES)) (* The fast case is when KEYNAME is  lower-case) (for X N in \KEYNAMES as I from 0 when (EQMEMB KEYNAME X) do (RETURN I) finally (RETURN (OR (AND (NEQ KEYNAME (SETQ N (L-CASE KEYNAME))) (for Y in \KEYNAMES as I from 0 when (EQMEMB N Y) do (RETURN I))) (\ILLEGAL.ARG KEYNAME]) - -(MODIFY.KEYACTIONS [LAMBDA (KeyActions SaveCurrent?) (* ; "Edited 2-Feb-89 15:38 by GADENER") (PROG1 [if SaveCurrent? then (SETQ \MODIFIED.KEYACTIONS (for ITEM in KeyActions collect (CONS (CAR ITEM) (KEYACTION (CAR ITEM] [for action in KeyActions do (for table in '(\CURRENTKEYACTION \COMMANDKEYACTION) do (KEYACTION (CAR action) (CDR action) (EVAL table])]) - -(METASHIFT [LAMBDA FLG (* ; "Edited 19-Nov-87 16:59 by Snow") (* ;; "Sets interpretation of swat key to first arg, where T means meta-shift, NIL means original setting. Returns previous setting") (PROG ((METASTATUS '(METADOWN . METAUP)) OLDSETTING) [SETQ OLDSETTING (KEYACTION 'BLANK-BOTTOM (AND (IGREATERP FLG 0) (COND ((EQ (ARG FLG 1) T) METASTATUS) (T (OR (ARG FLG 1) (CDR (ASSOC 'BLANK-BOTTOM \ORIGKEYACTIONS] (RETURN (COND ((EQUAL OLDSETTING METASTATUS) T) (T OLDSETTING]) - -(SHIFTDOWNP [LAMBDA (SHIFT) (* lmm "18-Apr-85 01:07") (* Tells whether a given shift is  down) (SELECTQ SHIFT (LOCK (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (META (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE))) (1SHIFT (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE)) (2SHIFT (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE)) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE))) (CTRL (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (FONT (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (USERMODE1 (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (USERMODE2 (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (USERMODE3 (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (\ILLEGAL.ARG SHIFT]) -) - - - -(* ; "To support office style 1108 & 1186 keyboards") - -(DEFINEQ - -(SETUP.OFFICE.KEYBOARD [LAMBDA NIL (* jds " 8-Oct-85 16:27") (SELECTQ (MACHINETYPE) (DANDELION (MODIFY.KEYACTIONS \DLIONOSDKEYACTIONS)) (DOVE (MODIFY.KEYACTIONS \DOVEOSDKEYACTIONS)) NIL]) -) - -(DEFOPTIMIZER \KEYNAMETONUMBER (&REST X) - [LET [(CE (CONSTANTEXPRESSIONP (CAR X] - (COND - (CE (\KEYNAMETONUMBER (CAR CE))) - (T 'IGNOREMACRO]) -(DECLARE%: EVAL@COMPILE - -(PUTPROPS \TEMPCOPYTIMER MACRO ((X) - (PROGN (\BLT \MOUSETIMERTEMP (LOCF X) - WORDSPERCELL) - \MOUSETIMERTEMP))) -) - - - -(* ; "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") - -(DECLARE%: DONTCOPY -(* "FOLLOWING DEFINITIONS EXPORTED") -(DEFOPTIMIZER KEYDOWNP (KEYNAME) - `(\NEWKEYDOWNP (\KEYNAMETONUMBER ,KEYNAME))) - -(* "END EXPORTED DEFINITIONS") - -) -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE - -[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] -) - -(* "END EXPORTED DEFINITIONS") - - - - -(* ; "A raw keyboard device/stream") - -(DEFINEQ - -(\INIT.KEYBOARD.STREAM [LAMBDA NIL (* ; "Edited 4-Sep-87 10:25 by jds") (* ;; "Initialize the %"Keyboard%" device: Set up the FDEV and the prototype keyboard stream in their respective global variables.") (DECLARE (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM)) [\DEFINEDEVICE 'KEYBOARD (SETQ \KEYBOARD.DEVICE (create FDEV DEVICENAME _ 'KEYBOARD CLOSEFILE _ (FUNCTION NILL) EVENTFN _ (FUNCTION \KEYBOARDEVENTFN) BIN _ (FUNCTION \GETKEY) PEEKBIN _ (FUNCTION \PEEKSYSBUF) READP _ (FUNCTION \SYSBUFP) EOFP _ (FUNCTION NILL) GETFILENAME _ (FUNCTION (LAMBDA (X MODE) (if (EQ MODE 'INPUT) then \KEYBOARD.STREAM] (SETQ \KEYBOARD.STREAM (create STREAM USERCLOSEABLE _ NIL USERVISIBLE _ NIL FULLFILENAME _ '{KEYBOARD} DEVICE _ \KEYBOARD.DEVICE ACCESS _ 'INPUT]) -) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(\INIT.KEYBOARD.STREAM) -) -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM) -) - -(* "END EXPORTED DEFINITIONS") - - - - -(* ; "Hook for a periodic interrupt") - -(DEFINEQ - -(\DOBUFFEREDTRANSITIONS [LAMBDA (\INTERRUPTABLE) (DECLARE (SPECVARS \INTERRUPTABLE)) (* ; "Edited 1-Feb-92 11:59 by jds") (SETQ \KEYBUFFERING 'INPROGRESS) (LET ((PENDINGINTERRUPT)) (DECLARE (SPECVARS PENDINGINTERRUPT)) (* ; "Used by \DECODETRANSITION") [bind R RPTR until (EQ 0 (SETQ R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) ) do (SETQ RPTR (\ADDBASE \KEYBOARDEVENTQUEUE R)) (* ; "get pointer to this event") (* ;  "handle simple keyboard words by calling \DOTRANSITIONS for each word") [COND ((NEQ (fetch (KEYBOARDEVENT W0) of RPTR) (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE )) (\DOTRANSITIONS 0 (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W0) of RPTR)) (replace (KEYBOARDEVENT W0) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W0) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W1) of RPTR) (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE )) (\DOTRANSITIONS 16 (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W1) of RPTR)) (replace (KEYBOARDEVENT W1) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W1) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W2) of RPTR) (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE )) (\DOTRANSITIONS 32 (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W2) of RPTR)) (replace (KEYBOARDEVENT W2) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W2) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W3) of RPTR) (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE )) (\DOTRANSITIONS 48 (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W3) of RPTR)) (replace (KEYBOARDEVENT W3) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W3) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W4) of RPTR) (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE )) (\DOTRANSITIONS 80 (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W4) of RPTR)) (replace (KEYBOARDEVENT W4) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W4) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W5) of RPTR) (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE )) (\DOTRANSITIONS 96 (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W5) of RPTR)) (replace (KEYBOARDEVENT W5) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W5) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT WU) of RPTR) (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE )) (\DOTRANSITIONS 64 (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT WU) of RPTR)) (replace (KEYBOARDEVENT WU) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT WU) of RPTR] (* ;;; "now remove event from queue") (COND ((EQ [replace (RING READ) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ R \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS \KEYBOARDEVENT.SIZE R] (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE )) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0] (PROGN (* ; "update dummy shift state") (replace DUMMY1SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 1SHIFT ) of \LASTKEYSTATE )) (replace DUMMY2SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 2SHIFT ) of \LASTKEYSTATE )) (replace DUMMYLOCK of \SHIFTSTATE with (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (replace DUMMYCTRL of \SHIFTSTATE with (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (replace DUMMYMETA of \SHIFTSTATE with (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (replace DUMMYFONT of \SHIFTSTATE with (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (replace DUMMYUSERMODE1 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (replace DUMMYUSERMODE2 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (replace DUMMYUSERMODE3 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (replace DUMMYALTGRAPH of \SHIFTSTATE with (fetch (KEYBOARDEVENT ALTGRAPH) of \LASTKEYSTATE)) (replace DUMMYDEADKEYPENDING of \SHIFTSTATE with (fetch ( KEYBOARDEVENT DEADKEYPENDING ) of \LASTKEYSTATE) )) (* ;; "Note: there is a window between the test of READ above and the setting of \KEYBUFFERING below where a keyboard transition can be ignored until the next transition causes \KEYBUFFERING to be set again") (COND ((NOT (OR PENDINGINTERRUPT \PENDINGINTERRUPT)) (* ;  "No interrupt noticed this time or on any previous invocation") (SETQ \KEYBUFFERING NIL)) ((NOT (\GETBASEPTR (\STKSCAN '\INTERRUPTABLE) 0)) (* ;  "We're not interruptable, so try again later") (SETQ \PENDINGINTERRUPT T) (SETQ \KEYBUFFERING NIL)) (T (SETQ \PENDINGINTERRUPT NIL) (SETQ \KEYBUFFERING NIL) (LET ((\INTERRUPTABLE T)) (INTERRUPTED]) - -(\TIMER.INTERRUPTFRAME [LAMBDA NIL (* lmm "22-Apr-85 09:47") (* place holder for periodic  interrupts) (if NIL then (APPLY* \PERIODIC.INTERRUPT) (if \PERIODIC.INTERRUPT then (SETUPTIMER (QUOTIENT (TIMES \PERIODIC.INTERRUPT.FREQUENCY \RCLKSECOND) 77) (LOCF (fetch DLMOUSETIMER of \MISCSTATS)) 'TICKS) (SETQ \TIMER.INTERRUPT.PENDING T]) - -(\PERIODIC.INTERRUPTFRAME [LAMBDA NIL (DECLARE (GLOBALVARS \PERIODIC.INTERRUPT)) (* lmm "16-Jul-85 16:22") (LET ((FN \PERIODIC.INTERRUPT)) (AND FN (SPREADAPPLY* FN]) -) - -(RPAQ? \KEYBUFFERING ) - -(RPAQ? \PERIODIC.INTERRUPT ) - -(RPAQ? \TIMER.INTERRUPT.PENDING ) - -(RPAQ? \PERIODIC.INTERRUPT.FREQUENCY 77) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(LOCALVARS . T) -) - - - -(* ; "cursor and mouse related functions.") - -(DEFINEQ - -(\HARDCURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 2-Jan-2000 18:10 by kaplan") (* ;  "version of \CURSORUP that knows about the possibility of the cursor being on the color screen.") (PROG (IMAGE) (SETQ \SOFTCURSORP NIL) (SETQ \CURRENTCURSOR NEWCURSOR) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION))) (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR] (BITBLT IMAGE 0 0 CursorBitMap 0 (IDIFFERENCE HARDCURSORHEIGHT (fetch (BITMAP BITMAPHEIGHT ) of IMAGE)) HARDCURSORWIDTH HARDCURSORHEIGHT (COND (INVERTFLG 'INVERT) (T 'INPUT)) 'REPLACE) (SELECTC \MACHINETYPE (\DAYBREAK (\DoveDisplay.SetCursorShape CursorBitMap)) (\MAIKO (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR))) NIL]) - -(\HARDCURSORPOSITION [LAMBDA (XPOS YPOS) (* kbr%: "13-Jun-85 21:24") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS)) NIL]) - -(\HARDCURSORDOWN [LAMBDA NIL (* kbr%: "23-Apr-85 18:26") (\CLEARBM (CURSORBITMAP]) -) -(DEFINEQ - -(CURSOR.INIT [LAMBDA NIL (* kbr%: "23-Jan-86 17:34") (PROG (DESTBPL) (* Assorted globals for doing the  color cursor. *) (SETQ \CURSORDESTINATION ScreenBitMap) (SETQ \SOFTCURSORUPBM NIL) (SETQ \SOFTCURSORDOWNBM NIL) (SETQ \CURSORDESTLINE 0) (SETQ \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of ScreenBitMap)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of ScreenBitMap)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of ScreenBitMap)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of ScreenBitMap)) (* Initialize PILOTBBTs.  *) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (* These PILOTBBTs are the mixing areas for forming the color cursor image.  *) (* Does SCREEN to DOWNBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT1 (create PILOTBBT PBTSOURCEBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT1) (* Does DOWNBM to UPBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT2 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT2) (* Does MASK to UPBM via INPUT,  ERASE. *) (SETQ \SOFTCURSORBBT3 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 1 PBTOPERATION _ 1)) (\LOCKCELL \SOFTCURSORBBT3) (* Does IMAGE to UPBM via INPUT,  PAINT. *) (SETQ \SOFTCURSORBBT4 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 2)) (\LOCKCELL \SOFTCURSORBBT4) (* Does UPBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT5 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT5) (* Does DOWNBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT6 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT6) (* Lock things down.  *) ]) - -(\CURSORDESTINATION [LAMBDA (DESTINATION) (* kbr%: " 2-Sep-85 20:13") (* Change DESTINATION of  \CURRENTCURSOR, assuming it is down.  *) (PROG (DESTBPL) (COND ((NOT (EQ DESTINATION \CURSORDESTINATION)) (UNINTERRUPTABLY [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CURSOR CUIMAGE) of \CURRENTCURSOR )) (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION))) (\CURSORBITSPERPIXEL \CURRENTCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION] (\SETMOUSEXY 0 0) (\PUTBASE \EM.CURSORX 0 0) (\PUTBASE \EM.CURSORY 0 0) (SETQ \CURSORDESTLINE 0) (SETQ.NOREF \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of DESTINATION)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of DESTINATION)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of DESTINATION)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of DESTINATION )) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT1 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT5 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT6 with DESTBPL) (SETQ \CURSORDESTINATION DESTINATION))]) - -(\SOFTCURSORUP [LAMBDA (NEWCURSOR) (* kbr%: " 2-Sep-85 20:15") (* Put soft NEWCURSOR up, assuming soft cursor is down.  *) (PROG (IMAGE MASK WIDTH BWIDTH HEIGHT CURSORBITSPERPIXEL CURSORBPL UPBMBASE DOWNBMBASE) (* Get cursor IMAGE & MASK.  *) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) (SETQ MASK (fetch (CURSOR CUMASK) of NEWCURSOR)) (SETQ WIDTH (fetch (BITMAP BITMAPWIDTH) of IMAGE)) (SETQ HEIGHT (fetch (BITMAP BITMAPHEIGHT) of IMAGE)) (SETQ CURSORBITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE)) (* Create new UPBM & DOWNBM caches  if necessary. *) (COND ((NOT (AND (type? BITMAP \SOFTCURSORUPBM) (EQ (fetch (BITMAP BITMAPWIDTH) of \SOFTCURSORUPBM) WIDTH) (EQ (fetch (BITMAP BITMAPHEIGHT) of \SOFTCURSORUPBM) HEIGHT) (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of \SOFTCURSORUPBM) CURSORBITSPERPIXEL))) (SETQ \SOFTCURSORWIDTH WIDTH) (SETQ \SOFTCURSORHEIGHT HEIGHT) (SETQ \SOFTCURSORUPBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ \SOFTCURSORDOWNBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ UPBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM)) (\TEMPLOCKPAGES UPBMBASE 1) (SETQ DOWNBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM)) (\TEMPLOCKPAGES DOWNBMBASE 1) (SETQ CURSORBPL (UNFOLD (fetch (BITMAP BITMAPRASTERWIDTH) of IMAGE) BITSPERWORD)) (SETQ BWIDTH (ITIMES (fetch (BITMAP BITMAPWIDTH) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE))) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT1 with CURSORBPL) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT2 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT2 with DOWNBMBASE) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT2 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT2 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT3 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT3 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT3 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT4 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT4 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT4 with HEIGHT) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT5 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT6 with CURSORBPL))) (* Change PILOTBBTs.  *) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT3 with (fetch (BITMAP BITMAPBASE ) of MASK)) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT4 with (fetch (BITMAP BITMAPBASE ) of IMAGE)) (* Put up new \CURRENTCURSOR.  *) (SETQ \CURRENTCURSOR NEWCURSOR) (\TEMPLOCKPAGES \CURRENTCURSOR 1) (SETQ \SOFTCURSORP T) (\SOFTCURSORUPCURRENT]) - -(\SOFTCURSORUPCURRENT [LAMBDA NIL (* kbr%: "18-Aug-85 15:09") (* Put soft \CURRENTCURSOR up, assuming soft cursor is down.  *) (PROG (DISPINTERRUPT X Y XBASE YBASE WIDTH HEIGHT BITSPERPIXEL MINUSDESTRASTERWIDTH DEST DESTBIT SOURCEOFFSET UPBMSOURCE DOWNBMSOURCE SOURCEBIT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP T) (* Roughly, we want to  (BITBLT CURSOR XBASE YBASE SCREEN X  Y WIDTH HEIGHT) *) (SETQ X (SIGNED (\GETBASE \EM.MOUSEX 0) BITSPERWORD)) (SETQ Y (SIGNED (\GETBASE \EM.MOUSEY 0) BITSPERWORD)) (SETQ XBASE 0) (SETQ YBASE 0) (SETQ WIDTH \SOFTCURSORWIDTH) (SETQ HEIGHT \SOFTCURSORHEIGHT) (* Clip off screen parts of cursor.  *) [COND ((IGREATERP 0 X) (* Some of cursor is to left of  screen. *) (SETQ XBASE (IMINUS X)) (SETQ WIDTH (IDIFFERENCE WIDTH XBASE)) (SETQ X 0)) ((IGREATERP (IPLUS X WIDTH) \CURSORDESTWIDTH) (* Some of cursor is to right of  screen. *) (SETQ WIDTH (IDIFFERENCE \CURSORDESTWIDTH X] (COND ((ILESSP WIDTH 0) (GO EXIT))) [COND ((IGREATERP 0 Y) (* Some of cursor is to above of  screen. *) (SETQ YBASE (IMINUS Y)) (SETQ HEIGHT (IDIFFERENCE HEIGHT YBASE)) (SETQ Y 0)) ((IGREATERP (IPLUS Y HEIGHT) \CURSORDESTHEIGHT) (* Some of cursor is to below of  screen. *) (SETQ HEIGHT (IDIFFERENCE \CURSORDESTHEIGHT Y] (COND ((ILESSP HEIGHT 0) (GO EXIT))) (* These loops reset \CURSORDESTLINEBASE while avoiding large number  arithmetic. *) [COND [(IGREATERP \CURSORDESTLINE Y) (SETQ MINUSDESTRASTERWIDTH (IMINUS \CURSORDESTRASTERWIDTH)) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (SUB1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE MINUSDESTRASTERWIDTH] ((ILESSP \CURSORDESTLINE Y) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (ADD1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE \CURSORDESTRASTERWIDTH] (* Reset PILOTBBTs.  *) (SETQ BITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of \CURRENTCURSOR)) (SETQ X (ITIMES BITSPERPIXEL X)) (SETQ XBASE (ITIMES BITSPERPIXEL XBASE)) (SETQ WIDTH (ITIMES BITSPERPIXEL WIDTH)) (SETQ DEST \CURSORDESTLINEBASE) (SETQ DESTBIT X) (SETQ SOURCEOFFSET (ITIMES YBASE (fetch (BITMAP BITMAPRASTERWIDTH) of \SOFTCURSORUPBM ))) (SETQ UPBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM) SOURCEOFFSET)) (SETQ DOWNBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM) SOURCEOFFSET)) (SETQ SOURCEBIT XBASE) (* TBW%: Most of these fields only need to be set if we are clipping this  time or the previous time we put the cursor up.  *) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT1 with DOWNBMSOURCE) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT1 with SOURCEBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT1 with DEST) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT1 with DESTBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT1 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT1 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT5 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT5 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT5 with UPBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT5 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT5 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT5 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT6 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT6 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT6 with DOWNBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT6 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT6 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT6 with HEIGHT) (* Save background behind cursor.  *) (\PILOTBITBLT \SOFTCURSORBBT1 0) (* Compute cursor appearance.  UPBM = (OR IMAGE (AND DOWNBM  (NOT MASK))) *) (\PILOTBITBLT \SOFTCURSORBBT2 0) (\PILOTBITBLT \SOFTCURSORBBT3 0) (\PILOTBITBLT \SOFTCURSORBBT4 0) (* Put color cursor up.  *) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT5 0) EXIT (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) - -(\SOFTCURSORPOSITION [LAMBDA (X Y) (* kbr%: "18-Aug-85 14:50") (* Move soft cursor.  *) (PROG (DISPINTERRUPT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) [COND ((OR (NOT (EQ (\GETBASE \EM.CURSORX 0) X)) (NOT (EQ (\GETBASE \EM.CURSORY 0) Y))) (COND (\SOFTCURSORUPP (\SOFTCURSORDOWN) (\SOFTCURSORUPCURRENT] (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) - -(\SOFTCURSORDOWN [LAMBDA NIL (* kbr%: " 6-Jul-85 00:09") (* Take COLOR cursor down.  *) (PROG (DISPINTERRUPT) (* \SOFTCURSORUPP must be set to NIL  before BITBLTing. *) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP NIL) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT6 0) (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) - -(CURSORPROP [LAMBDA X (* kbr%: "11-Jan-86 20:03") (COND ((IGREATERP X 2) (PUTCURSORPROP (ARG X 1) (ARG X 2) (ARG X 3))) ((EQ X 2) (GETCURSORPROP (ARG X 1) (ARG X 2))) (T (\ILLEGAL.ARG NIL]) - -(GETCURSORPROP [LAMBDA (CURSOR PROP) (* kbr%: "26-Apr-85 11:18") (LISTGET (fetch (CURSOR CUDATA) of CURSOR) PROP]) - -(PUTCURSORPROP [LAMBDA (CURSOR PROP VALUE) (* kbr%: "26-Apr-85 11:18") (PROG (OLDDATA OLDVALUE) (SETQ OLDDATA (fetch (CURSOR CUDATA) of CURSOR)) [COND [OLDDATA (SETQ OLDVALUE (LISTGET OLDDATA PROP)) (COND (VALUE (LISTPUT OLDDATA PROP VALUE)) (OLDVALUE (COND [(EQ (CAR OLDDATA) PROP) (replace (CURSOR CUDATA) of CURSOR with (CDDR (fetch (CURSOR CUDATA) of CURSOR] (T (FOR TAIL ON (CDR OLDDATA) BY (CDDR TAIL) WHEN (EQ (CADR TAIL) PROP) DO (FRPLACD TAIL (CDDDR TAIL)) (RETURN] (VALUE (replace (CURSOR CUDATA) of CURSOR with (LIST PROP VALUE] (RETURN OLDVALUE]) - -(\CURSORBITSPERPIXEL [LAMBDA (CURSOR NEWBITSPERPIXEL) (* kbr%: "12-May-85 17:15") (* Swap in NEWBITSPERPIXEL IMAGE and MASK, creating them if necessary.  *) (PROG (OLDBITSPERPIXEL OLDIMAGE OLDMASK WHITE BLACK NEWIMAGE NEWMASK) (SETQ OLDBITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of CURSOR)) (COND ((EQ OLDBITSPERPIXEL NEWBITSPERPIXEL) (RETURN))) (* Save OLDIMAGE and OLDMASK.  *) (SETQ OLDIMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (SETQ OLDMASK (fetch (CURSOR CUMASK) of CURSOR)) (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME OLDBITSPERPIXEL) OLDIMAGE) (CURSORPROP CURSOR (\CURSORMASKPROPNAME OLDBITSPERPIXEL) OLDMASK) (* Unsave NEWIMAGE and NEWMASK if possible, otherwise create them.  *) [COND [(SETQ NEWIMAGE (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME NEWBITSPERPIXEL))) (* Use cached NEWIMAGE & NEWMASK.  *) (SETQ NEWMASK (CURSORPROP CURSOR (\CURSORMASKPROPNAME NEWBITSPERPIXEL] (T (* Create NEWIMAGE & NEWMASK.  *) (SETQ WHITE (MASK.1'S 0 NEWBITSPERPIXEL)) (SETQ BLACK 0) (SETQ NEWIMAGE (COLORIZEBITMAP (CURSORPROP CURSOR 'IMAGE1) BLACK WHITE NEWBITSPERPIXEL)) (SETQ NEWMASK (COLORIZEBITMAP (CURSORPROP CURSOR 'MASK1) BLACK WHITE NEWBITSPERPIXEL] (replace (CURSOR CUIMAGE) of CURSOR with NEWIMAGE) (replace (CURSOR CUMASK) of CURSOR with NEWMASK]) - -(\CURSORIMAGEPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'IMAGE1) (4 'IMAGE4) (8 'IMAGE8) (SHOULDNT]) - -(\CURSORMASKPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'MASK1) (4 'MASK4) (8 'MASK8) (SHOULDNT]) -) -(DEFINEQ - -(CURSORCREATE [LAMBDA (IMAGE MASK HOTSPOTX HOTSPOTY DATA) (* ; "Edited 10-Jul-92 16:32 by cat") (* ; "Edited 31-Jul-87 10:01 by jds") (* ;; "creates a cursor from a bitmap. HOTSPOTX and HOTSPOTY specify the hotspot.") (* ;; "INVARIANTS: the hot spot X and Y must be in the range 0..(width - 1) and 0..(height - 1), respectively.") (PROG (CURSOR) (COND ((OR (FIXP MASK) (POSITIONP MASK)) (* ;; "If Mask is a fixp then we presume this is the old arg list (bitmap x y). the cursor filepkgtype has been changed to write the new arg list. The other is provided for (dubious) compatibility") (SETQ HOTSPOTY HOTSPOTX) (SETQ HOTSPOTX MASK) (SETQ MASK NIL))) (* ;; "Make sure that the image and mask bitmaps are no larger than the hardware cursor, i.e. 16x16 bits [AR 8916 7/31/87]:") (COND ((OR (IGREATERP (BITMAPWIDTH IMAGE) 16) (IGREATERP (BITMAPHEIGHT IMAGE) 16)) (* ; "IMAGE is too big.") (\ILLEGAL.ARG IMAGE)) ((NOT MASK) (* ; "No mask, so it's OK") ) ((OR (IGREATERP (BITMAPWIDTH MASK) 16) (IGREATERP (BITMAPHEIGHT MASK) 16)) (* ; "MASK is too big.") (\ILLEGAL.ARG MASK))) [COND ((POSITIONP HOTSPOTX) (* ;;  "The hot spot can be specified as a position in one arg, rather than X and Y in two:") (SETQ HOTSPOTY (fetch (POSITION YCOORD) of HOTSPOTX)) (SETQ HOTSPOTX (fetch (POSITION XCOORD) of HOTSPOTX] (SETQ CURSOR (create CURSOR CUIMAGE _ IMAGE CUMASK _ (OR MASK IMAGE) CUHOTSPOTX _ (IMAX 0 (IMIN (SUB1 (BITMAPWIDTH IMAGE)) (OR (FIXP HOTSPOTX) 0))) CUHOTSPOTY _ [IMAX 0 (IMIN (SUB1 (BITMAPHEIGHT IMAGE)) (OR (FIXP HOTSPOTY) (SUB1 (BITMAPHEIGHT IMAGE] CUDATA _ DATA)) (RETURN CURSOR]) - -(CURSOR [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 24-Mar-87 18:30 by jds") (* ;; "Installs NEWCURSOR as the cursor and returns the old cursor state. If INVERTFLG is non-NIL, the cursor image is inverted during installation. If NEWCURSOR is NIL, just returns the current cursor state.") (DECLARE (GLOBALVARS DEFAULTCURSOR \SOFTCURSORP)) (PROG (OLDCURSOR) (SETQ OLDCURSOR \CURRENTCURSOR) (COND ((EQ NEWCURSOR T) (* ;  "If NEWCURSOR is T, use the system default cursor.") (SETQ NEWCURSOR DEFAULTCURSOR))) (COND [(\CURSOR-VALID-P NEWCURSOR \SOFTCURSORP) (* ;  "Only install the cursor if it's a real, valid one.") (\CURSORDOWN) (\CURSORUP NEWCURSOR INVERTFLG) (* ;  "set after adjustment to avoid confusion about hotspot during adjustment.") (SETQ \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (SETQ \CURSORHOTSPOTY (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR] (NEWCURSOR (* ; "NEWCURSOR = NIL means just return the old one, so only error if one got specified that wasn't valid.") (\ILLEGAL.ARG NEWCURSOR))) (RETURN OLDCURSOR]) - -(\CURSOR-VALID-P [LAMBDA (CURSOR SOFT?) (* ; "Edited 25-Mar-87 09:41 by jds") (* ;; "It returns T if CURSOR is a valid cursor. Validity depends on whether it's meant to be displayed using the cursor hardware or the cursor software.") (* ;; "This is really wed to the D-machine display architecture. ") (AND (CURSORP CURSOR) (COND (SOFT? T) (T (LET ((IMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (HOTSPOT-X (fetch (CURSOR CUHOTSPOTX) of CURSOR)) (HOTSPOT-Y (fetch (CURSOR CUHOTSPOTY) of CURSOR))) (* ;; "The bitmap must be <= 16x16, and the hot spot must be within the cursor if we're using hardware cursor.") (AND (>= 16 (BITMAPWIDTH IMAGE)) (>= 16 (BITMAPHEIGHT IMAGE)) (<= 0 HOTSPOT-X) (< HOTSPOT-X 16) (<= 0 HOTSPOT-Y) (< HOTSPOT-Y 16]) - -(\CURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* kbr%: "18-Aug-85 14:38") (UNINTERRUPTABLY (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (COND ((AND (EQ (fetch (CURSOR CUIMAGE) of NEWCURSOR) (fetch (CURSOR CUMASK) of NEWCURSOR)) (ILEQ (fetch (BITMAP BITMAPWIDTH) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORWIDTH) (ILEQ (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORHEIGHT) (EQ \CURSORDESTINATION ScreenBitMap)) (\HARDCURSORUP NEWCURSOR INVERTFLG)) (T (\SOFTCURSORUP NEWCURSOR))) (ADJUSTCURSORPOSITION (IDIFFERENCE \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (IDIFFERENCE (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR)) \CURSORHOTSPOTY)))]) - -(\CURSORPOSITION [LAMBDA (XPOS YPOS) (* ; "Edited 19-Mar-98 14:41 by jds") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND (NIL (* ;; "Removed 2000/1/3 JDS so mousr cursors work.") (ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND (NIL (ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (COND (\SOFTCURSORP (\SOFTCURSORPOSITION XPOS YPOS))) [PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Need to notify DAYBREAK IOP to  move cursor. *) (\DoveDisplay.SetCursorPosition XPOS YPOS] NIL]) - -(\CURSORDOWN [LAMBDA NIL (* kbr%: "12-Jun-85 17:21") (UNINTERRUPTABLY (COND (\SOFTCURSORP (\SOFTCURSORDOWN)) (T (\HARDCURSORDOWN))))]) - -(ADJUSTCURSORPOSITION [LAMBDA (DELTAX DELTAY) (* kbr%: " 6-Jan-86 11:55") (COND [(POSITIONP DELTAX) (\CURSORPOSITION (IPLUS (fetch (POSITION XCOORD) of DELTAX) (\XMOUSECOORD)) (IPLUS (fetch (POSITION YCOORD) of DELTAX) (\YMOUSECOORD] (T (\CURSORPOSITION (IPLUS (OR DELTAX 0) (\XMOUSECOORD)) (IPLUS (OR DELTAY 0) (\YMOUSECOORD]) - -(CURSORPOSITION [LAMBDA (NEWPOSITION DISPLAYSTREAM OLDPOSITION) (* kbr%: "13-Feb-86 15:53") (PROG (DD) (SETQ DD (\GETDISPLAYDATA DISPLAYSTREAM)) (OR (type? POSITION OLDPOSITION) (SETQ OLDPOSITION (create POSITION))) (freplace (POSITION XCOORD) of OLDPOSITION with (\DSPUNTRANSFORMX (\XMOUSECOORD ) DD)) (freplace (POSITION YCOORD) of OLDPOSITION with (\DSPUNTRANSFORMY (\YMOUSECOORD ) DD)) (COND ((type? POSITION NEWPOSITION) (\CURSORPOSITION (\DSPTRANSFORMX (fetch (POSITION XCOORD) of NEWPOSITION) DD) (\DSPTRANSFORMY (fetch (POSITION YCOORD) of NEWPOSITION) DD))) ((type? SCREENPOSITION NEWPOSITION) (CURSORSCREEN (fetch (SCREENPOSITION SCREEN) of NEWPOSITION) (fetch (SCREENPOSITION XCOORD) of NEWPOSITION) (fetch (SCREENPOSITION YCOORD) of NEWPOSITION))) (NEWPOSITION (\ILLEGAL.ARG NEWPOSITION))) (RETURN OLDPOSITION]) - -(CURSORSCREEN [LAMBDA (SCREEN XCOORD YCOORD) (* gbn%: "25-Jan-86 16:53") (* * sets up SCREEN to be the current screen, XCOORD %, YCOORD is initial pos  of cursor on SCREEN) (COND ((NULL XCOORD) (SETQ XCOORD 0))) (COND ((NULL YCOORD) (SETQ YCOORD 0))) (PROG (DESTINATION) (SETQ DESTINATION (fetch (SCREEN SCDESTINATION) of SCREEN)) (\CURSORDOWN) (SETQ \CURSORSCREEN SCREEN) (\CURSORDESTINATION DESTINATION) (\CURSORUP \CURRENTCURSOR) (\CURSORPOSITION XCOORD YCOORD]) - -(CURSOREXIT [LAMBDA NIL (* gbn%: "25-Jan-86 16:52") (* * called when cursor moves off the screen edge) (DECLARE (GLOBALVARS LASTSCREEN LASTMOUSEX LASTMOUSEY)) (PROG (SCREEN XCOORD YCOORD SCREEN2 XCOORD2 YCOORD2) (SETQ SCREEN LASTSCREEN) (SETQ XCOORD LASTMOUSEX) (SETQ YCOORD LASTMOUSEY) (SETQ SCREEN2 (COND ((EQ SCREEN \MAINSCREEN) \COLORSCREEN) (T \MAINSCREEN))) (* generalize for more than two  screens (or alternate physical  arrangement of screens.)) (COND ((EQ XCOORD 0) (SETQ XCOORD2 (IDIFFERENCE (fetch (SCREEN SCWIDTH) of SCREEN2) 2))) ((EQ XCOORD (SUB1 (fetch (SCREEN SCWIDTH) of SCREEN))) (SETQ XCOORD2 1)) (T (RETURN))) [SETQ YCOORD2 (IQUOTIENT (ITIMES YCOORD (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN2)) ) (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN] (CURSORSCREEN SCREEN2 XCOORD2 YCOORD2]) - -(FLIPCURSOR - [LAMBDA NIL (* ; "Edited 24-Apr-88 00:04 by MASINTER") - (PROG (ADDR) - (COND - ((NOT \SOFTCURSORP) - (SETQ ADDR \EM.CURSORBITMAP) - (FRPTQ HARDCURSORHEIGHT [\PUTBASE ADDR 0 (LOGXOR (\GETBASE ADDR 0) - (CONSTANT (SUB1 (EXPT 2 HARDCURSORWIDTH - ] - (SETQ ADDR (\ADDBASE ADDR 1))) - (SELECTC \MACHINETYPE - (\DAYBREAK (\DoveDisplay.SetCursorShape)) - (\MAIKO (AND \CURRENTCURSOR (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) - of \CURRENTCURSOR) - (fetch (CURSOR CUHOTSPOTY) of - \CURRENTCURSOR - )))) - NIL]) - -(FLIPCURSORBAR - [LAMBDA (N) (* ; "Edited 19-Mar-98 14:23 by jds") - -(* ;;; "Inverts the Nth line of the cursor, N = 0 being the top") - - (COND - ((NOT \SOFTCURSORP) - (\PUTBASE \EM.CURSORBITMAP N (LOGXOR (\GETBASE \EM.CURSORBITMAP N) - MAX.SMALLP)) - (SELECTC \MACHINETYPE - (\DAYBREAK (* ; "Notify IOP") - (\DoveDisplay.SetCursorShape)) - (\MAIKO (AND \CURRENTCURSOR (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) - of \CURRENTCURSOR) - (fetch (CURSOR CUHOTSPOTY) of - \CURRENTCURSOR - )))) - NIL]) - -(LASTMOUSEX [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse x position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMX LASTMOUSEX (\GETDISPLAYDATA DS]) - -(LASTMOUSEY [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse y position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMY LASTMOUSEY (\GETDISPLAYDATA DS]) - -(CREATEPOSITION [LAMBDA (XCOORD YCOORD) (* rmk%: " 6-Aug-84 13:43") (create POSITION XCOORD _ (OR XCOORD 0) YCOORD _ (OR YCOORD 0]) - -(POSITIONP [LAMBDA (X) (* rrb "25-AUG-82 11:04") (* is X a position? For now just a cons check but should be made a datatype.) (AND (LISTP X) (NUMBERP (CAR X)) (NUMBERP (CDR X)) X]) - -(CURSORHOTSPOT [LAMBDA (NEWPOSITION) (* gbn%: "26-Jan-86 15:36") (* returns the current cursor hot spot and sets the hot spot to NEWPOSITON if  one is given.) (PROG1 (create POSITION XCOORD _ \CURSORHOTSPOTX YCOORD _ \CURSORHOTSPOTY) (COND ((POSITIONP NEWPOSITION) (SETQ \CURSORHOTSPOTX (fetch (POSITION YCOORD) of NEWPOSITION)) (SETQ \CURSORHOTSPOTY (fetch (POSITION YCOORD) of NEWPOSITION]) -) - -(PUTPROPS CURSORPROP ARGNAMES (NIL (CURSOR PROP {NEWVALUE}) . U)) - -(RPAQ? \CURSORHOTSPOTX 0) - -(RPAQ? \CURSORHOTSPOTY 0) - -(RPAQ? \CURRENTCURSOR NIL) - -(RPAQ? \SOFTCURSORWIDTH NIL) - -(RPAQ? \SOFTCURSORHEIGHT NIL) - -(RPAQ? \SOFTCURSORP NIL) - -(RPAQ? \SOFTCURSORUPP NIL) - -(RPAQ? \SOFTCURSORUPBM NIL) - -(RPAQ? \SOFTCURSORDOWNBM NIL) - -(RPAQ? \SOFTCURSORBBT1 NIL) - -(RPAQ? \SOFTCURSORBBT2 NIL) - -(RPAQ? \SOFTCURSORBBT3 NIL) - -(RPAQ? \SOFTCURSORBBT4 NIL) - -(RPAQ? \SOFTCURSORBBT5 NIL) - -(RPAQ? \SOFTCURSORBBT6 NIL) - -(RPAQ? \CURSORSCREEN NIL) - -(RPAQ? \CURSORDESTINATION NIL) - -(RPAQ? \CURSORDESTHEIGHT 808) - -(RPAQ? \CURSORDESTWIDTH 1024) - -(RPAQ? \CURSORDESTRASTERWIDTH 64) - -(RPAQ? \CURSORDESTLINE 0) - -(RPAQ? \CURSORDESTLINEBASE NIL) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT - \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 - \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION - \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) -) -(DEFINEQ - -(GETMOUSESTATE [LAMBDA NIL (* kbr%: " 6-Jul-85 14:16") (* Reads the current state of the  mouse and keyboard) (SETQ LASTMOUSEX (\XMOUSECOORD)) (SETQ LASTMOUSEY (\YMOUSECOORD)) (SETQ LASTMOUSEBUTTONS (LOGXOR (LOGAND (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) \MOUSE.ALLBITS) \MOUSE.ALLBITS)) (SETQ LASTKEYBOARD (\EVENTKEYS)) (SETQ LASTSCREEN \CURSORSCREEN) NIL]) - -(\EVENTKEYS [LAMBDA NIL (* rmk%: " 4-JUN-81 22:58") (* Returns the state of the various keys that are represented in mouse events) (LOGOR (COND ((KEYDOWNP 'LOCK) 128) (T 0)) (COND ((KEYDOWNP 'LSHIFT) 64) (T 0)) (COND ((KEYDOWNP 'CTRL) 32) (T 0)) (COND ((KEYDOWNP 'RSHIFT) 8) (T 0)) (COND ((KEYDOWNP 'BLANK-TOP) 4) (T 0)) (COND ((KEYDOWNP 'BLANK-MIDDLE) 2) (T 0)) (COND ((KEYDOWNP 'BLANK-BOTTOM) 1) (T 0]) -) -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE - -(RPAQQ HARDCURSORHEIGHT 16) - -(RPAQQ HARDCURSORWIDTH 16) - - -(CONSTANTS (HARDCURSORHEIGHT 16) - (HARDCURSORWIDTH 16)) -) -(DECLARE%: EVAL@COMPILE - -(ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) -) - -(* "END EXPORTED DEFINITIONS") - -(DECLARE%: DONTCOPY -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE - -[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] -) - -(* "END EXPORTED DEFINITIONS") - - -(DECLARE%: EVAL@COMPILE - -[PUTPROPS \XMOUSECOORD MACRO (NIL (IPLUS \CURSORHOTSPOTX (SIGNED (\GETBASE \EM.CURSORX 0) - BITSPERWORD] - -[PUTPROPS \YMOUSECOORD MACRO (NIL (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) - (IPLUS \CURSORHOTSPOTY (SIGNED (\GETBASE \EM.CURSORY 0) - BITSPERWORD] -) -) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(MOVD 'CURSOR 'SETCURSOR) - -(MOVD '\CURSORPOSITION '\SETCURSORPOSITION) - - -(RPAQ \SFPosition (CREATEPOSITION)) -) -(DECLARE%: DONTCOPY -(DECLARE%: EVAL@COMPILE - -(BLOCKRECORD KEYBOARDEVENT - ((W0 WORD) - (W1 WORD) - (W2 WORD) - (W3 WORD) - (WU WORD) - (W4 WORD) - (W5 WORD) - (TIME FIXP) - (MOUSESTATE BITS 3) - (1SHIFT FLAG) - (2SHIFT FLAG) - (LOCK FLAG) - (CTRL FLAG) - (META FLAG) - (FONT FLAG) - (USERMODE1 FLAG) - (USERMODE2 FLAG) - (USERMODE3 FLAG) - (ALTGRAPH FLAG) - (DEADKEYPENDING FLAG) (* ; "T if the last key was a dead (accent) key, and we should generate an accented character if possible.") - (NIL BITS 2) - (MOUSEX WORD) - (MOUSEY WORD) - (DEADKEY-ALIST XPOINTER) (* ; - "The ALIST describing accents possible from teh last dead key.") - ) - (CREATE (\ALLOCBLOCK (FOLDHI \KEYBOARDEVENT.SIZE WORDSPERCELL))) - W0 _ ALLUP W1 _ ALLUP W2 _ ALLUP W3 _ ALLUP W4 _ ALLUP W5 _ ALLUP WU _ ALLUP MOUSESTATE - _ \DLMOUSE.UP [ACCESSFNS KEYBOARDEVENT ((SIZE (INDEXF (fetch MOUSEY of DATUM))) - (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) - DATUM) - (fetch (KEYBOARDEVENT 2SHIFT) - DATUM))) - (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT - SHIFT) - DATUM) - (fetch (KEYBOARDEVENT - LOCK) - DATUM] - LOCK _ (XKEYDOWNP 'LOCK) - TIME _ 0 DEADKEYPENDING _ NIL) -) - -(DECLARE%: EVAL@COMPILE - -(RPAQ \KEYBOARDEVENT.FIRST NRINGINDEXWORDS) - -(RPAQQ \KEYBOARDEVENT.SIZE 14) - -(RPAQ \KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383))) - - -[CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) - \KEYBOARDEVENT.SIZE - (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] -) -) -(DEFINEQ - -(MACHINETYPE [LAMBDA NIL (* ; "Edited 30-Mar-88 10:27 by Snow") (SELECTC (fetch MachineType of \InterfacePage) (\DORADO 'DORADO) (\DANDELION 'DANDELION) (\DAYBREAK (* This is \DAYBREAK internally) 'DOVE) (\MAIKO 'MAIKO) NIL]) - -(SETMAINTPANEL [LAMBDA (N) (* mpl "21-Jul-85 18:15") (SELECTC \MACHINETYPE (\DANDELION (replace DLMAINTPANEL of \IOPAGE with N)) (\DOLPHIN ((OPCODES MISC1 3) (\DTEST N 'SMALLP))) (\DAYBREAK ((OPCODES DOVEMISC 2) (\DTEST N 'SMALLP))) NIL]) -) - - - -(* ; "DLion beeper") - -(DEFINEQ - -(BEEPON [LAMBDA (FREQ) (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPFREQ of \IOPAGE with (IQUOTIENT 1843200 (IMAX FREQ 29))) (replace DLBEEPCMD of \IOPAGE with 32768)) (\DAYBREAK (\DoveMisc.BeepOn FREQ)) (\MAIKO (SUBRCALL KEYBOARDBEEP T FREQ)) (PROGN NIL)) NIL]) - -(BEEPOFF [LAMBDA NIL (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPCMD of \IOPAGE with 32769)) (\DAYBREAK (\DoveMisc.BeepOff)) (\MAIKO (SUBRCALL KEYBOARDBEEP NIL NIL)) (PROGN NIL)) NIL]) -) -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(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) -) - -(* "END EXPORTED DEFINITIONS") - -(DEFINEQ - -(WITHOUT-INTERRUPTS [NLAMBDA (FORM) (* lmm "18-Apr-85 02:53") (PROG (VAL) (\KEYBOARDOFF) (SETQ VAL (DISPLAYDOWN FORM)) (\KEYBOARDON) (RETURN VAL]) -) - - - -(* ; "Compile locked fns together for locality") - -(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY - -(BLOCK%: NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME - \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS - \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP - \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN) -) -(DECLARE%: DONTCOPY - -(ADDTOVAR INEWCOMS - (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 - \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT - LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE - \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS - \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING - \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION - \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT - \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) - (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR - \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP - \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 - \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 - \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH - \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE - \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY - \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING - SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX - \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN - \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT - \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND)))) - -(ADDTOVAR RDCOMS (FNS \SETIOPOINTERS)) -) - -(PUTPROPS LLKEY FILETYPE CL:COMPILE-FILE) -(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS - -(ADDTOVAR NLAMA ) - -(ADDTOVAR NLAML WITHOUT-INTERRUPTS) - -(ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT) -) -(PUTPROPS LLKEY COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1989 1990 -1992 1999 1920 2000)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (14769 21865 (BKSYSCHARCODE 14779 . 15128) (\CLEARSYSBUF 15130 . 15688) (\GETKEY 15690 - . 16865) (\NSYSBUFCHARS 16867 . 17507) (\SAVESYSBUF 17509 . 19121) (\SYSBUFP 19123 . 19427) ( -\GETSYSBUF 19429 . 19609) (\PUTSYSBUF 19611 . 20825) (\PEEKSYSBUF 20827 . 21863)) (23123 59302 ( -\KEYBOARDINIT 23133 . 24856) (\KEYBOARDEVENTFN 24858 . 29558) (\ALLOCLOCKED 29560 . 30150) ( -\SETIOPOINTERS 30152 . 34621) (\KEYBOARDOFF 34623 . 34970) (\KEYBOARDON 34972 . 35284) (\KEYHANDLER -35286 . 35417) (\KEYHANDLER1 35419 . 42737) (\RESETKEYBOARD 42739 . 44248) (\DOMOUSECHORDING 44250 . -47921) (\DOTRANSITIONS 47923 . 48600) (\DECODETRANSITION 48602 . 55291) (MOUSECHORDWAIT 55293 . 55976) - (\TRACKCURSOR 55978 . 59300)) (101704 125063 (KEYACTION 101714 . 102558) (KEYACTIONTABLE 102560 . -103742) (KEYBOARDTYPE 103744 . 104846) (RESETKEYACTION 104848 . 106607) ( -\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 106609 . 110016) (\KEYACTION1 110018 . 120639) (KEYDOWNP 120641 - . 120976) (KEYNUMBERP 120978 . 121176) (\KEYNAMETONUMBER 121178 . 121872) (MODIFY.KEYACTIONS 121874 - . 122735) (METASHIFT 122737 . 123681) (SHIFTDOWNP 123683 . 125061)) (125126 125422 ( -SETUP.OFFICE.KEYBOARD 125136 . 125420)) (128845 130557 (\INIT.KEYBOARD.STREAM 128855 . 130555)) ( -130822 147199 (\DOBUFFEREDTRANSITIONS 130832 . 146262) (\TIMER.INTERRUPTFRAME 146264 . 146989) ( -\PERIODIC.INTERRUPTFRAME 146991 . 147197)) (147453 151530 (\HARDCURSORUP 147463 . 149345) ( -\HARDCURSORPOSITION 149347 . 151383) (\HARDCURSORDOWN 151385 . 151528)) (151531 175591 (CURSOR.INIT -151541 . 155241) (\CURSORDESTINATION 155243 . 157561) (\SOFTCURSORUP 157563 . 162817) ( -\SOFTCURSORUPCURRENT 162819 . 169855) (\SOFTCURSORPOSITION 169857 . 170622) (\SOFTCURSORDOWN 170624 . -171332) (CURSORPROP 171334 . 171676) (GETCURSORPROP 171678 . 171866) (PUTCURSORPROP 171868 . 173023) ( -\CURSORBITSPERPIXEL 173025 . 175141) (\CURSORIMAGEPROPNAME 175143 . 175367) (\CURSORMASKPROPNAME -175369 . 175589)) (175592 193542 (CURSORCREATE 175602 . 178277) (CURSOR 178279 . 180091) ( -\CURSOR-VALID-P 180093 . 181180) (\CURSORUP 181182 . 182897) (\CURSORPOSITION 182899 . 185427) ( -\CURSORDOWN 185429 . 185662) (ADJUSTCURSORPOSITION 185664 . 186242) (CURSORPOSITION 186244 . 187786) ( -CURSORSCREEN 187788 . 188444) (CURSOREXIT 188446 . 189837) (FLIPCURSOR 189839 . 190965) (FLIPCURSORBAR - 190967 . 191947) (LASTMOUSEX 191949 . 192203) (LASTMOUSEY 192205 . 192459) (CREATEPOSITION 192461 . -192667) (POSITIONP 192669 . 192953) (CURSORHOTSPOT 192955 . 193540)) (194776 196324 (GETMOUSESTATE -194786 . 195445) (\EVENTKEYS 195447 . 196322)) (202185 202981 (MACHINETYPE 202195 . 202595) ( -SETMAINTPANEL 202597 . 202979)) (203011 204150 (BEEPON 203021 . 203674) (BEEPOFF 203676 . 204148)) ( -204601 204864 (WITHOUT-INTERRUPTS 204611 . 204862))))) -STOP diff --git a/sources/LLKEY.~4~ b/sources/LLKEY.~4~ deleted file mode 100644 index 04a57a3d..00000000 --- a/sources/LLKEY.~4~ +++ /dev/null @@ -1,35 +0,0 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "19-May-2018 13:32:12" {DSK}kaplan>Local>medley3.5>lispcore>sources>LLKEY.;4 199267 changes to%: (VARS LLKEYCOMS \KEYNAMES) previous date%: " 9-Apr-2000 16:28:23" {DSK}kaplan>Local>medley3.5>lispcore>sources>LLKEY.;1) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1992, 1999, 1920, 2000, 2018 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT LLKEYCOMS) (RPAQQ LLKEYCOMS [(COMS (* ; "Access to keyboard") (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF \PUTSYSBUF \PEEKSYSBUF) (INITVARS (\LONGSYSBUF)) (INITVARS (\\KEYBOARDWAITBOX.GLOBALRESOURCE)) (DECLARE%: DONTCOPY (RESOURCES \KEYBOARDWAITBOX)) (DECLARE%: DONTCOPY (CONSTANTS (\SYSBUFSIZE 200)) (MACROS \GETREALSYSBUF))) [DECLARE%: DOCOPY DONTEVAL@LOAD (COMS (* ;  "Here because it must be done in init before PROC loaded") (P (MOVD? 'NILL 'CARET] (COMS (* ; "Key handler") (FNS \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) (INITVARS (\MOUSECHORDTICKS) (\MOUSECHORDMILLISECONDS 50)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\KEYBOARDINIT))) [DECLARE%: DONTCOPY (MACROS .NOTELASTUSERACTION) (CONSTANTS ALLUP \CTRLMASK \METABIT) (CONSTANTS * DLMOUSEBITS) (CONSTANTS * DLMOUSESTATES) (CONSTANTS * TRANSITIONFLAGS) (MACROS \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) (EXPORT (RECORDS KEYACTION) (CONSTANTS \NKEYS)) (RECORDS RING) (COMS (* ;  "can get rid of shiftstate after clients have been fixed") (RECORDS SHIFTSTATE) (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP)) (CONSTANTS NRINGINDEXWORDS) (CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] (DECLARE%: EVAL@COMPILE (VARS \KEYNAMES)) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun.") (VARS \ORIGKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DORADOKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS \MAIKOKEYACTIONS \MAIKOKEYACTIONST4 \MAIKO-JLE-KEYACTIONS \TOSHIBA-KEYACTIONS) (VARS (KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL)) (INITVARS (\KEYBOARD.META 256) (\MODIFIED.KEYACTIONS)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) )) (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (COMS (* ; "Key interpretation") (FNS KEYACTION KEYACTIONTABLE KEYBOARDTYPE RESETKEYACTION \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS \KEYACTION1 KEYDOWNP KEYNUMBERP \KEYNAMETONUMBER MODIFY.KEYACTIONS METASHIFT SHIFTDOWNP) (* ;  "To support office style 1108 & 1186 keyboards") (FNS SETUP.OFFICE.KEYBOARD) (OPTIMIZERS \KEYNAMETONUMBER) (MACROS \TEMPCOPYTIMER) (* ;  "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (EXPORT (OPTIMIZERS KEYDOWNP))) (EXPORT (MACROS XKEYDOWNP KEYDOWNP1 \NEWKEYDOWNP))) (COMS (* ; "A raw keyboard device/stream") (FNS \INIT.KEYBOARD.STREAM) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\INIT.KEYBOARD.STREAM))) (EXPORT (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM))) (COMS (* ; "Hook for a periodic interrupt") (FNS \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \PERIODIC.INTERRUPTFRAME) (INITVARS (\KEYBUFFERING) (\PERIODIC.INTERRUPT) (\TIMER.INTERRUPT.PENDING) (\PERIODIC.INTERRUPT.FREQUENCY 77))) (LOCALVARS . T) [COMS (* ;  "cursor and mouse related functions.") (FNS \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN) (FNS CURSOR.INIT \CURSORDESTINATION \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN CURSORPROP GETCURSORPROP PUTCURSORPROP \CURSORBITSPERPIXEL \CURSORIMAGEPROPNAME \CURSORMASKPROPNAME) (FNS CURSORCREATE CURSOR \CURSOR-VALID-P \CURSORUP \CURSORPOSITION \CURSORDOWN ADJUSTCURSORPOSITION CURSORPOSITION CURSORSCREEN CURSOREXIT FLIPCURSOR FLIPCURSORBAR LASTMOUSEX LASTMOUSEY CREATEPOSITION POSITIONP CURSORHOTSPOT) (PROPS (CURSORPROP ARGNAMES)) (INITVARS (\CURSORHOTSPOTX 0) (\CURSORHOTSPOTY 0) (\CURRENTCURSOR NIL) (\SOFTCURSORWIDTH NIL) (\SOFTCURSORHEIGHT NIL) (\SOFTCURSORP NIL) (\SOFTCURSORUPP NIL) (\SOFTCURSORUPBM NIL) (\SOFTCURSORDOWNBM NIL) (\SOFTCURSORBBT1 NIL) (\SOFTCURSORBBT2 NIL) (\SOFTCURSORBBT3 NIL) (\SOFTCURSORBBT4 NIL) (\SOFTCURSORBBT5 NIL) (\SOFTCURSORBBT6 NIL) (\CURSORSCREEN NIL) (\CURSORDESTINATION NIL) (\CURSORDESTHEIGHT 808) (\CURSORDESTWIDTH 1024) (\CURSORDESTRASTERWIDTH 64) (\CURSORDESTLINE 0) (\CURSORDESTLINEBASE NIL)) (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) (FNS GETMOUSESTATE \EVENTKEYS) [EXPORT (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD] (DECLARE%: DONTCOPY (EXPORT (MACROS \SETMOUSEXY)) (MACROS \XMOUSECOORD \YMOUSECOORD)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION)) (VARS (\SFPosition (CREATEPOSITION] [COMS (DECLARE%: DONTCOPY (RECORDS KEYBOARDEVENT) (CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] (COMS (FNS MACHINETYPE SETMAINTPANEL) (* ; "DLion beeper") (FNS BEEPON BEEPOFF)) (EXPORT (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)) (FNS WITHOUT-INTERRUPTS) (COMS (* ;  "Compile locked fns together for locality") (BLOCKS (NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN))) [DECLARE%: DONTCOPY (ADDVARS [INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND ] (RDCOMS (FNS \SETIOPOINTERS] (PROP FILETYPE LLKEY) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML WITHOUT-INTERRUPTS ) (LAMA CURSORPROP METASHIFT MOUSECHORDWAIT]) (* ; "Access to keyboard") (DEFINEQ (BKSYSCHARCODE [LAMBDA (CHAR) (* rrb "30-Dec-83 11:56") (OR (\PUTSYSBUF CHAR) (PROGN (SETQ \LONGSYSBUF (NCONC \LONGSYSBUF (bind C while (SETQ C (\GETREALSYSBUF)) collect C))) (\PUTSYSBUF CHAR]) (\CLEARSYSBUF [LAMBDA (ALLFLG) (* mpl "27-Jun-85 20:04") (DECLARE (GLOBALVARS \PROCESSES)) (COND ((OR ALLFLG (TTY.PROCESSP)) (SETQ \LONGSYSBUF) (replace (RING READ) of \SYSBUFFER with 0))) (COND (ALLFLG (for PROC in \PROCESSES do (replace PROCTYPEAHEAD of PROC with NIL))) ((THIS.PROCESS) (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL]) (\GETKEY [LAMBDA NIL (* lmm "18-Apr-85 00:07") (DECLARE (GLOBALVARS \KEYBOARDWAIT1 \KEYBOARDWAIT2)) (COND [(AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS))) (pop (fetch PROCTYPEAHEAD of (THIS.PROCESS] (T (WAIT.FOR.TTY) (OR (\GETSYSBUF) (GLOBALRESOURCE (\KEYBOARDWAITBOX) (* Busy-wait loop that gets next  character) (\CLOCK0 \KEYBOARDWAITBOX) (bind C do (COND ((SETQ C (\GETSYSBUF)) (\BOXIPLUS (LOCF (fetch KEYBOARDWAITTIME of \MISCSTATS)) (CLOCKDIFFERENCE \KEYBOARDWAITBOX)) (RETURN C))) (\TTYBACKGROUND) (\WAIT.FOR.TTY]) (\NSYSBUFCHARS [LAMBDA NIL (* JonL " 7-May-84 01:50") (* Tells how many characters can be \GETSYSBUFed.  Used by \SAVESYSBUF.) (IPLUS (LENGTH \LONGSYSBUF) (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ 0 R) 0) ((IGREATERP W R) (IDIFFERENCE W R)) (T (IDIFFERENCE W (IDIFFERENCE R \SYSBUFSIZE]) (\SAVESYSBUF [LAMBDA NIL (* JonL " 7-May-84 01:50") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (PROG (TA (BUF \SAVEDSYSBUFFER) (NC (\NSYSBUFCHARS)) (J 0)) [COND ((TTY.PROCESSP) [COND ([AND (THIS.PROCESS) (SETQ TA (fetch PROCTYPEAHEAD of (THIS.PROCESS] (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL) (add NC (LENGTH TA)) [COND ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for CH in TA do (RPLCHARCODE BUF (add J 1) CH))) ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for I from (ADD1 J) to NC do (* Test on J means that we'll ignore extra chars typed since we got the  length. Test on \GETSYSBUF so we don't get screwed if buffer gets cleared  while during this loop) (RPLCHARCODE BUF I (OR (\GETSYSBUF) (PROGN (SETQ NC (SUB1 I)) (RETURN] (RETURN (AND (NOT (EQ 0 NC)) (SUBSTRING BUF 1 NC]) (\SYSBUFP [LAMBDA NIL (* JonL " 7-May-84 01:52") (OR [AND (TTY.PROCESSP) (OR \LONGSYSBUF (NOT (EQ 0 (fetch (RING READ) of \SYSBUFFER] (AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS]) (\GETSYSBUF [LAMBDA NIL (* lmm " 9-JUL-83 00:56") (OR (AND \LONGSYSBUF (pop \LONGSYSBUF)) (\GETREALSYSBUF]) (\PUTSYSBUF [LAMBDA (CHAR) (* rmk%: "27-Nov-84 17:51") (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ R W) (* Full) NIL) (T (\PUTBASEFAT \SYSBUFFER W CHAR) (AND (EQ 0 R) (replace (RING READ) of \SYSBUFFER with W)) (* Return random non-NIL value to  indicate success for BKSYSBUF) [replace (RING WRITE) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST W) \SYSBUFFER.FIRST) (T (ADD1 W] T]) (\PEEKSYSBUF [LAMBDA (STREAM) (* bvm%: " 8-Feb-85 17:50") (PROG (R) WAIT (until (\SYSBUFP) do (BLOCK)) (RETURN (if (TTY.PROCESSP) then (if \LONGSYSBUF then (CAR \LONGSYSBUF) elseif (NEQ (SETQ R (fetch (RING READ) of \SYSBUFFER)) 0) then (* Here's the vanilla case) (\GETBASEFAT \SYSBUFFER R) else (* Foo an interrupt could have sneaked in here and gobbled down the remaining  characters) (GO WAIT)) elseif (THIS.PROCESS) then (CAR (fetch PROCTYPEAHEAD of (THIS.PROCESS))) else (SHOULDNT]) ) (RPAQ? \LONGSYSBUF ) (RPAQ? \\KEYBOARDWAITBOX.GLOBALRESOURCE ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE [PUTDEF '\KEYBOARDWAITBOX 'RESOURCES '(NEW (CREATECELL \FIXP] ) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (RPAQQ \SYSBUFSIZE 200) (CONSTANTS (\SYSBUFSIZE 200)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \GETREALSYSBUF MACRO [NIL (PROG ((R (fetch (RING READ) of \SYSBUFFER))) (RETURN (AND (NOT (EQ 0 R)) (PROG1 (\GETBASEFAT \SYSBUFFER R) (AND [EQ (fetch (RING WRITE) of \SYSBUFFER) (replace (RING READ) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST R) \SYSBUFFER.FIRST) (T (ADD1 R] (replace (RING READ) of \SYSBUFFER with 0)))]) ) ) (DECLARE%: DOCOPY DONTEVAL@LOAD (* ; "Here because it must be done in init before PROC loaded") (MOVD? 'NILL 'CARET) ) (* ; "Key handler") (DEFINEQ (\KEYBOARDINIT [LAMBDA NIL (* ; "Edited 19-Nov-87 16:46 by Snow") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (* ;  "Sets up keyboard decoding tables.") (SETQ \CURRENTKEYACTION (SETQ \DEFAULTKEYACTION (KEYACTIONTABLE))) (* ;  "added \commandkeyaction 11-19-87 WAS") (SETQ \COMMANDKEYACTION (KEYACTIONTABLE)) (SETQ \INTERRUPTSTATE (\ALLOCLOCKED 2)) (PROGN (SETQ \SYSBUFFER (\ALLOCBLOCK (FOLDHI (ADD1 \SYSBUFFER.LAST) WORDSPERCELL))) (replace (RING READ) of \SYSBUFFER with 0) (replace (RING WRITE) of \SYSBUFFER with \SYSBUFFER.FIRST)) (SETQ \SAVEDSYSBUFFER (ALLOCSTRING \SYSBUFSIZE NIL NIL T)) (SETQ \LASTUSERACTION (LOCF (fetch LASTUSERACTION of \MISCSTATS))) (PROGN (SETQ \KEYBOARDEVENTQUEUE (\ALLOCLOCKED (FOLDHI (PLUS \KEYBOARDEVENT.LAST \KEYBOARDEVENT.SIZE) WORDSPERCELL))) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with \KEYBOARDEVENT.FIRST)) (SETQ \LASTKEYSTATE (create KEYBOARDEVENT)) (SETQ \SHIFTSTATE (create SHIFTSTATE)) (SETQ \MOUSETIMERTEMP (SETUPTIMER 0 NIL 'TICKS)) (MOUSECHORDWAIT \MOUSECHORDMILLISECONDS) (\KEYBOARDON]) (\KEYBOARDEVENTFN [LAMBDA (FDEV EVENT EXTRA) (* ; "Edited 11-Oct-90 09:49 by jds") (DECLARE (GLOBALVARS \KEYBOARD.BEFORETYPE \DORADOKEYACTIONS \DLIONKEYACTIONS \MAIKO.BEFOREKEYTYPE)) (SELECTQ EVENT ((BEFORELOGOUT BEFOREMAKESYS BEFORESYSOUT BEFORESAVEVM) (SETQ \KEYBOARD.BEFORETYPE \MACHINETYPE) (SETQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (SETQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) ((AFTERLOGOUT AFTERMAKESYS AFTERSYSOUT AFTERSAVEVM) (* ;  "Restarting a world. If we changed machines, fix up the key actions to match the new machine.") (* ; "(COND ((NEQ \\MACHINETYPE \\KEYBOARD.BEFORETYPE) ; Changed machines. Change Keyactions. (|for| X |in| (\\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) |do| (KEYACTION (CAR X) (CDR X) \\COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \\DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT))))") [COND ((OR (NEQ \MACHINETYPE \KEYBOARD.BEFORETYPE) (NEQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) (* ;  "Changed machines. Change Keyactions.") [COND ((NEQ (MACHINETYPE) 'MAIKO) (* ;; "Non-SUN, so just change machine-specific key actions:") (for X in (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION))) (T (* ;;  "On a SUN: Some keyactions contradict %"normal%" ones, so reset them all.") (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION] (MOUSECHORDWAIT (MOUSECHORDWAIT))) ((EQ (MACHINETYPE) 'MAIKO) (* ;; "Same machine type. SO only worry if we're on SUNs, where the keyboard type can differ between machines.") (COND ((NEQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT]) NIL]) (\ALLOCLOCKED [LAMBDA (NCELLS) (* lmm "20-Apr-85 13:08") (* allocate a block of NCELLS cells  and lock it) (PROG [(BLOCK (\ALLOCBLOCK NCELLS NIL (IMIN NCELLS CELLSPERPAGE] (\LOCKCELL BLOCK (FOLDHI (IPLUS (fetch (POINTER WORDINPAGE) of BLOCK) (UNFOLD NCELLS WORDSPERCELL)) WORDSPERPAGE)) (RETURN BLOCK]) (\SETIOPOINTERS [LAMBDA NIL (* ; "Edited 28-Apr-88 01:10 by MASINTER") (SELECTC (SETTOPVAL '\MACHINETYPE (fetch MachineType of \InterfacePage)) ((LIST \DOLPHIN \DORADO) (SETTOPVAL '\EM.MOUSEX (EMADDRESS MOUSEX.EM)) (SETTOPVAL '\EM.MOUSEY (EMADDRESS MOUSEY.EM)) (SETTOPVAL '\EM.CURSORX (EMADDRESS CURSORX.EM)) (SETTOPVAL '\EM.CURSORY (EMADDRESS CURSORY.EM)) (SETTOPVAL '\EM.REALUTILIN (EMADDRESS UTILIN.EM)) (SETTOPVAL '\EM.KBDAD0 (EMADDRESS KBDAD0.EM)) (SETTOPVAL '\EM.KBDAD1 (EMADDRESS KBDAD1.EM)) (SETTOPVAL '\EM.KBDAD2 (EMADDRESS KBDAD2.EM)) (SETTOPVAL '\EM.KBDAD3 (EMADDRESS KBDAD3.EM)) (SETTOPVAL '\EM.KBDAD4 (LOCF (fetch FAKEKBDAD4 of \InterfacePage))) (\PUTBASE \EM.KBDAD4 0 ALLUP) (SETTOPVAL '\EM.KBDAD5 (LOCF (fetch FAKEKBDAD5 OF \InterfacePage))) (\PUTBASE \EM.KBDAD5 0 ALLUP) (SETTOPVAL '\EM.DISPINTERRUPT (EMADDRESS DISPINTERRUPT.EM)) (SETTOPVAL '\EM.CURSORBITMAP (EMADDRESS CURSORBITMAP.EM)) (SETTOPVAL '\EM.DISPLAYHEAD (EMADDRESS DCB.EM)) (SETTOPVAL 'SCREENWIDTH (UNFOLD (fetch ScreenWidth of \InterfacePage) BITSPERWORD))) ((LIST \DANDELION \MAIKO) (SETTOPVAL '\EM.MOUSEX (fetch DLMOUSEXPTR of \IOPAGE)) (SETTOPVAL '\EM.MOUSEY (fetch DLMOUSEYPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN (fetch DLUTILINPTR of \IOPAGE)) (* ;; "Where the hardware bits live, vs. where the Lisp software sees them after reinterpretation by keyhandler") ) (SETTOPVAL '\EM.KBDAD0 (fetch DLKBDAD0PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD1 (fetch DLKBDAD1PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD2 (fetch DLKBDAD2PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD3 (fetch DLKBDAD3PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD4 (fetch DLKBDAD4PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD5 (fetch DLKBDAD5PTR of \IOPAGE)) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORBITMAP (fetch DLCURSORBITMAPPTR of \IOPAGE)) (SETTOPVAL '\EM.DISPLAYHEAD NIL) (SETTOPVAL 'SCREENWIDTH (SELECTC \MACHINETYPE (\MAIKO (SUBRCALL DSP-SCREENWIDTH)) 1024))) (\DAYBREAK (PROG ((KBDBASE (\DoveMisc.GetKBDBase))) (SETTOPVAL '\EM.KBDAD0 (\ADDBASE KBDBASE 1)) (SETTOPVAL '\EM.KBDAD1 (\ADDBASE KBDBASE 2)) (SETTOPVAL '\EM.KBDAD2 (\ADDBASE KBDBASE 3)) (SETTOPVAL '\EM.KBDAD3 (\ADDBASE KBDBASE 4)) (SETTOPVAL '\EM.KBDAD4 (\ADDBASE KBDBASE 5)) (SETTOPVAL '\EM.KBDAD5 (\ADDBASE KBDBASE 6)) (SETTOPVAL '\EM.MOUSEX (\DoveMisc.GetMouseXBase)) (SETTOPVAL '\EM.MOUSEY (\DoveMisc.GetMouseYBase)) (SETTOPVAL '\EM.CURSORBITMAP (\DoveDisplay.GetCursorBitmapBase)) (* These three set this way to  prevent address faults) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN KBDBASE) (* Where the hardware bits live, vs. where the Lisp software sees them after  reinterpretation by keyhandler) ) (SETTOPVAL 'SCREENWIDTH (\DoveDisplay.ScreenWidth)))) (RAID)) (SETTOPVAL '\EM.UTILIN (LOCF (fetch (IFPAGE FAKEMOUSEBITS) of \InterfacePage]) (\KEYBOARDOFF [LAMBDA NIL (* ; "Edited 20-Apr-88 10:28 by MASINTER") (\PUTBASE \EM.DISPINTERRUPT 0 (LOGAND (LOGXOR 65535 \LispKeyMask) (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE NIL]) (\KEYBOARDON [LAMBDA (NOCHECK) (* ; "Edited 24-Apr-88 00:03 by MASINTER") (\SETIOPOINTERS) (\PUTBASE \EM.DISPINTERRUPT 0 (LOGOR \LispKeyMask (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE T]) (\KEYHANDLER [LAMBDA NIL (* lmm "30-MAR-83 20:40") (\KEYHANDLER1]) (\KEYHANDLER1 [LAMBDA NIL (* ; "Edited 30-Mar-88 10:40 by Snow") (PROG ((OLD0 ALLUP) (OLD1 ALLUP) (OLD2 ALLUP) (OLD3 ALLUP) (OLD4 ALLUP) (OLD5 ALLUP) (OLDU ALLUP) (OLDFAKEU ALLUP) (LOOPCNT 10) (PERIODCNT 60) (MOUSESTATE \DLMOUSE.UP) (MOUSETIMER (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) (MOUSETEMP (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) CURSORX CURSORY YHOT) (SETQ \KEYBUFFERING NIL) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) LP (\CONTEXTSWITCH \KbdFXP) [COND (\PERIODIC.INTERRUPT (* eventually can be replaced with  general timer mechanism) (COND ((IGREATERP PERIODCNT 0) (* Continue counting down to zero) (SETQ PERIODCNT (SUB1 PERIODCNT))) ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \PERIODIC.INTERRUPTFRAME)) (* When we've counted down, then keep trying to cause the interrupt, and  reset the counter when it finally happens) (SETQ PERIODCNT (SUB1 (OR \PERIODIC.INTERRUPT.FREQUENCY 1] [COND ((OR (NEQ (\GETBASE \EM.MOUSEX 0) CURSORX) (NEQ (\GETBASE \EM.MOUSEY 0) CURSORY)) (\TRACKCURSOR (SETQ CURSORX (\GETBASE \EM.MOUSEX 0)) (SETQ CURSORY (\GETBASE \EM.MOUSEY 0] [COND ((OR [COND ((OR (NEQ OLDU (\GETBASE \EM.REALUTILIN 0)) (COND ((AND (EQ MOUSESTATE \DLMOUSE.WAITING) (IGREATERP (\BOXIDIFFERENCE (\RCLK MOUSETEMP) MOUSETIMER) 0)) (* Timer expired on seeing both left and right down, so set state to normal) (SETQ MOUSESTATE \DLMOUSE.NORMAL) T))) (SETQ MOUSESTATE (\DOMOUSECHORDING (SETQ OLDU (\GETBASE \EM.REALUTILIN 0)) MOUSESTATE)) (NEQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (NEQ OLD0 (\GETBASE \EM.KBDAD0 0)) (NEQ OLD1 (\GETBASE \EM.KBDAD1 0)) (NEQ OLD2 (\GETBASE \EM.KBDAD2 0)) (NEQ OLD3 (\GETBASE \EM.KBDAD3 0)) (NEQ OLD4 (\GETBASE \EM.KBDAD4 0)) (NEQ OLD5 (\GETBASE \EM.KBDAD5 0))) (COND ((EQ 0 (LOGAND (\GETBASE \EM.KBDAD2 0) 2114)) (* Ctrl-shift-DEL panic interrupt --  switch to TeleRaid immediately) (swap (fetch (IFPAGE TELERAIDFXP) of \InterfacePage) (fetch (IFPAGE KbdFXP) of \InterfacePage)) (\KEYBOARDOFF) (SETQ OLD2 (\GETBASE \EM.KBDAD2 0)) (GO LP))) [PROG ((W (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE)) (R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) WPTR) (COND ((EQ R W) (* eventqueue full!) (RETURN))) (SETQ WPTR (\ADDBASE \KEYBOARDEVENTQUEUE W)) (\RCLK (LOCF (fetch TIME of WPTR))) [with KEYBOARDEVENT WPTR (PROGN (SETQ W0 (SETQ OLD0 (\GETBASE \EM.KBDAD0 0))) (SETQ W1 (SETQ OLD1 (\GETBASE \EM.KBDAD1 0))) (SETQ W2 (SETQ OLD2 (\GETBASE \EM.KBDAD2 0))) (SETQ W3 (SETQ OLD3 (\GETBASE \EM.KBDAD3 0))) (SETQ W4 (SETQ OLD4 (\GETBASE \EM.KBDAD4 0))) (SETQ W5 (SETQ OLD5 (\GETBASE \EM.KBDAD5 0))) (SETQ WU (SETQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (COND ((EQ R 0) (* Queue was empty) (replace (RING READ) of \KEYBOARDEVENTQUEUE with W))) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ W \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS W \KEYBOARDEVENT.SIZE] (OR \KEYBUFFERING (SETQ \KEYBUFFERING T] [COND [\KEYBUFFERING (COND ((EQ \KEYBUFFERING T) (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \DOBUFFEREDTRANSITIONS)) (SETQ \KEYBUFFERING 'STARTED) (* don't call until  \DOBUFFEREDTRANSITIONS is done) ] (T (COND (\PENDINGINTERRUPT (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \INTERRUPTFRAME)) (SETQ \PENDINGINTERRUPT] [COND ((AND (NEQ \MACHINETYPE \MAIKO) (ILEQ (SETQ LOOPCNT (SUB1 LOOPCNT)) 0)) (* Only do this once in a while) (SETQ LOOPCNT (COND ((\UPDATETIMERS) (* Timer was updated, so do it next time around, too, in case we just came  back from RAID or other bcpl code) 1) (T 20] (COND ([AND NIL \TIMER.INTERRUPT.PENDING (IGREATERP (\BOXIDIFFERENCE (\RCLK (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) 0) (COND ((EQ \TIMER.INTERRUPT.PENDING '\MOUSECHANGE) (SETQ OLDU NIL) T) (T (\CAUSEINTERRUPT \KbdFXP (FUNCTION \TIMER.INTERRUPTFRAME] (SETQ \TIMER.INTERRUPT.PENDING))) (GO LP]) (\RESETKEYBOARD [LAMBDA NIL (* ; "Edited 30-Mar-88 10:07 by Snow") (\SETIOPOINTERS) (* Called with lisp keyboard disabled whenever Lisp is resumed from bcpl  logout or copysys.) (SETQ \KEYBUFFERING NIL) (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK) (EQ \MACHINETYPE \MAIKO)) (* Initialize fake mouse bits to all  up) (\PUTBASE \EM.UTILIN 0 ALLUP))) (with KEYBOARDEVENT \LASTKEYSTATE (SETQ W0 (\GETBASE \EM.KBDAD0 0)) (SETQ W1 (\GETBASE \EM.KBDAD1 0)) (SETQ W2 (\GETBASE \EM.KBDAD2 0)) (SETQ W3 (\GETBASE \EM.KBDAD3 0)) (SETQ W4 (\GETBASE \EM.KBDAD4 0)) (SETQ W5 (\GETBASE \EM.KBDAD5 0)) (SETQ WU (\GETBASE \EM.REALUTILIN 0)) (SETQ LOCK (XKEYDOWNP 'LOCK)) (SETQ 1SHIFT NIL) (SETQ 2SHIFT NIL) (SETQ CTRL NIL) (SETQ META NIL) (SETQ FONT NIL) (SETQ USERMODE1 NIL) (SETQ USERMODE2 NIL) (SETQ USERMODE3 NIL) (SETQ MOUSESTATE \DLMOUSE.UP)) (SETQ \TIMER.INTERRUPT.PENDING) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING READ) of \SYSBUFFER with 0) (SETQ \LONGSYSBUF) (\DAYTIME0 \LASTUSERACTION) (\KEYBOARDON]) (\DOMOUSECHORDING [LAMBDA (REALUTILIN STATE) (* bvm%: " 9-Oct-85 11:24") (* Handles mouse transitions on a DLion.  REALUTILIN is the actual util word from the processor.  STATE is our internal state. Sets contents of \EM.UTILIN to reflect the  virtual mouse state, which may contain a middle mouse button even where there  is only a two-button mouse. Returns new state) (PROG (LRSTATE) [COND ((OR (NULL \MOUSECHORDTICKS) (EQ (SETQ LRSTATE (LOGXOR (LOGAND REALUTILIN \MOUSE.ALLBITS) \MOUSE.ALLBITS)) 0)) (* Not interpreting chording, or both LEFT and RIGHT are up --  real state and virtual state the same) (SETQ STATE \DLMOUSE.UP)) (T (* Either L or R or both are down, so have to decide about Middle) (SELECTC STATE ((LIST \DLMOUSE.UP \DLMOUSE.WAITING) (SETQ REALUTILIN (LOGOR REALUTILIN \MOUSE.LRBIT)) (* Turn off the L and/or R bits) (COND ((EQ LRSTATE \MOUSE.LRBIT) (* Both L and R down at once, interpret as MIDDLE without waiting) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) REALUTILIN)) (SETQ STATE \DLMOUSE.MIDDLE)) ((NEQ STATE \DLMOUSE.WAITING) (* Only one of L and R down. Set timer, and ignore the down bit for now) (\BOXIPLUS (\RCLK (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) \MOUSECHORDTICKS) (SETQ STATE \DLMOUSE.WAITING)))) (\DLMOUSE.MIDDLE (* State is middle and at least one of L and R is still down, so consider it  to be still only middle) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LRBIT))) (SELECTC LRSTATE (\MOUSE.LEFTBIT (* Right came up. Henceforth treat  right transparently) (SETQ STATE \DLMOUSE.MIDDLE&RIGHT)) (\MOUSE.RIGHTBIT (* Left came up. Henceforth treat  left transparently) (SETQ STATE \DLMOUSE.MIDDLE&LEFT)) NIL)) (\DLMOUSE.MIDDLE&RIGHT (* Only ignore LEFT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LEFTBIT)))) (\DLMOUSE.MIDDLE&LEFT (* Only ignore RIGHT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.RIGHTBIT)))) (PROGN (* Remaining state is \DLMOUSE.NORMAL which means treat mouse normally, and  the only interesting transition is back to \DLMOUSE.UP) ] (\PUTBASE \EM.UTILIN 0 REALUTILIN) (RETURN STATE]) (\DOTRANSITIONS [LAMBDA (KEYBASE OLD NEW) (* ; "Edited 1-Feb-92 11:59 by jds") (* ;; "OLD and NEW are keyboard state words that are known to have changed. KEYBASE is the number in hardware order of the key corresponding to the first bit in these words. This function figures out the indices of transitioning keys and calls the decoder.") (for I (BITMASK _ (LLSH 1 15)) from 0 to 15 do [OR (EQ 0 (LOGAND BITMASK (LOGXOR OLD NEW))) (\DECODETRANSITION (IPLUS I KEYBASE) (EQ 0 (LOGAND NEW BITMASK] (SETQ BITMASK (LRSH BITMASK 1))) T]) (\DECODETRANSITION [LAMBDA (KEYNUMBER DOWNFLG) (* ; "Edited 19-Nov-87 16:29 by Snow") (* ;; "KEYNUMBER is the key number in the hardware keyboard layout, DOWNFLG is T if the key just went down. PENDINGINTERRUPT, bound in \KEYHANDLER, is set to the decoded character if it is an interrupt.") (.NOTELASTUSERACTION) (PROG ((TI (\TRANSINDEX KEYNUMBER DOWNFLG)) (KEYSTATE \LASTKEYSTATE) ASCIICODE SHIFTED) (SELECTC (TRANSITIONFLAGS \CURRENTKEYACTION TI) (IGNORE.TF (RETURN)) (LOCKSHIFT.TF (* ;  "Take shift action if either Shift or Caps Lock is down") (IF (fetch (KEYBOARDEVENT SHIFTORLOCK) of KEYSTATE) THEN (SETQ SHIFTED T))) (NOLOCKSHIFT.TF (* ;  "Take shift action only when Shift is down") (IF (fetch (KEYBOARDEVENT SHIFT) of KEYSTATE) THEN (SETQ SHIFTED T))) (EVENT.TF (RETURN)) (1SHIFTUP.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with NIL) (RETURN)) (1SHIFTDOWN.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with T) (RETURN)) (2SHIFTUP.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with NIL) (RETURN)) (2SHIFTDOWN.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with T) (RETURN)) (LOCKUP.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with NIL) (RETURN)) (LOCKDOWN.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with T) (RETURN)) (LOCKTOGGLE.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT LOCK) of KEYSTATE))) (RETURN)) (CTRLUP.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with NIL) (RETURN)) (CTRLDOWN.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with T) (RETURN)) (METAUP.TF (replace (KEYBOARDEVENT META) of KEYSTATE with NIL) (RETURN)) (METADOWN.TF (replace (KEYBOARDEVENT META) of KEYSTATE with T) (RETURN)) (FONTUP.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with NIL) (RETURN)) (FONTDOWN.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with T) (RETURN)) (FONTTOGGLE.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT FONT) of KEYSTATE))) (RETURN)) (USERMODE1UP.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with NIL) (RETURN)) (USERMODE1DOWN.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with T) (RETURN)) (USERMODE1TOGGLE.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE1) of KEYSTATE))) (RETURN)) (USERMODE2UP.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with NIL) (RETURN)) (USERMODE2DOWN.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with T) (RETURN)) (USERMODE2TOGGLE.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE2) of KEYSTATE))) (RETURN)) (USERMODE3UP.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with NIL) (RETURN)) (USERMODE3DOWN.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with T) (RETURN)) (USERMODE3TOGGLE.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE3) of KEYSTATE))) (RETURN)) (SHOULDNT)) (* ;;  "Only the LOCKSHIFT and NOLOCKSHIFT cases make it to here, having set SHIFTED if appropriate.") [SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \CURRENTKEYACTION TI)) (T (TRANSITIONCODE \CURRENTKEYACTION TI] [COND ((OR (fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) [IF (IGREATERP ASCIICODE 127) THEN (* ;; "Non-ascii interpretation--what is cntrl/meta supposed to mean? Try using the original interpretation. This way we can type ^E or Meta-D even if Russian keyboard is set, but doesn't mess up simple ascii remappings, such as bs->del.") (SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \COMMANDKEYACTION TI)) (T (TRANSITIONCODE \COMMANDKEYACTION TI] [COND ((fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (SETQ ASCIICODE (LOGAND ASCIICODE \CTRLMASK] (COND ((AND (OR (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) (ILESSP ASCIICODE \KEYBOARD.META)) (SETQ ASCIICODE (LOGOR ASCIICODE \KEYBOARD.META] (COND ((ASSOC ASCIICODE (fetch INTERRUPTLIST of \CURRENTKEYACTION)) (SETQ PENDINGINTERRUPT T) (replace WAITINGINTERRUPT of \INTERRUPTSTATE with T) (replace INTCHARCODE of \INTERRUPTSTATE with ASCIICODE)) (T (\PUTSYSBUF ASCIICODE]) (MOUSECHORDWAIT [LAMBDA MSECS (* MPL "21-Jun-85 16:31") (DECLARE (GLOBALVARS \RCLKMILLISECOND)) (PROG1 (AND \MOUSECHORDTICKS \MOUSECHORDMILLISECONDS) (COND ((IGREATERP MSECS 0) (SETQ \MOUSECHORDTICKS (AND (ARG MSECS 1) (IMIN MAX.SMALLP (ITIMES (SETQ \MOUSECHORDMILLISECONDS (OR (SMALLP (ARG MSECS 1)) 50)) \RCLKMILLISECOND]) (\TRACKCURSOR [LAMBDA (CURSORX CURSORY) (* ; "Edited 30-Mar-88 11:11 by Snow") (DECLARE (GLOBALVARS \CURSORDESTHEIGHT \CURSORDESTWIDTH)) (.NOTELASTUSERACTION) [COND ((OR [COND ((IGEQ CURSORX (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX)) (* Large cursor values are either out of bounds to the right or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORX 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORX 65535)) \CURSORHOTSPOTX) 0) (* Cursor pos + hotspot is still off to the left  (the IPLUS is an optimization of (\XMOUSECOORD))%, so clip to effective zero) (SETQ CURSORX (COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTX) BITSPERWORD] (T (SETQ CURSORX (SUB1 (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX] (IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT HARDCURSORHEIGHT))) (* repeat test so that both X and Y will get clipped each cycle.  This keeps the cursor from moving off the screen.) [COND ((IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY)) (* Large cursor values are either out of bounds to the bottom or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORY 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORY 65535)) \CURSORHOTSPOTY) 0) (* Cursor pos + hotspot is still off to the top, so clip to effective zero) (SETQ CURSORY (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTY) BITSPERWORD] (T (SETQ CURSORY (SUB1 (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY] (* If need to clip mouse, do so here. \SETMOUSEXY MACRO takes dlion  complexities into account.) (COND ((NEQ \MACHINETYPE \MAIKO) (\SETMOUSEXY CURSORX CURSORY] (COND (\SOFTCURSORUPP (\SOFTCURSORPOSITION CURSORX CURSORY))) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Have to kick DAYBREAK IOP to track the cursor.  *) (\DoveDisplay.SetCursorPosition CURSORX CURSORY))) (\PUTBASE \EM.CURSORX 0 CURSORX) (\PUTBASE \EM.CURSORY 0 CURSORY]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \SUN.TYPE3KEYBOARD 0) (RPAQQ \SUN.TYPE4KEYBOARD 1) (RPAQQ \SUN.JLEKEYBOARD 2) (RPAQQ \TOSHIBA.JIS 7) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) ) (RPAQ? \MOUSECHORDTICKS ) (RPAQ? \MOUSECHORDMILLISECONDS 50) (DECLARE%: DONTEVAL@LOAD DOCOPY (\KEYBOARDINIT) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS .NOTELASTUSERACTION MACRO (NIL (\BLT \LASTUSERACTION (LOCF (fetch SECONDSTMP of \MISCSTATS)) WORDSPERCELL))) ) (DECLARE%: EVAL@COMPILE (RPAQQ ALLUP 65535) (RPAQQ \CTRLMASK 159) (RPAQQ \METABIT 128) (CONSTANTS ALLUP \CTRLMASK \METABIT) ) (RPAQQ DLMOUSEBITS ((\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6))) (DECLARE%: EVAL@COMPILE (RPAQQ \MOUSE.LEFTBIT 4) (RPAQQ \MOUSE.RIGHTBIT 2) (RPAQQ \MOUSE.MIDDLEBIT 1) (RPAQQ \MOUSE.ALLBITS 7) (RPAQQ \MOUSE.LRBIT 6) (CONSTANTS (\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6)) ) (RPAQQ DLMOUSESTATES ((\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5))) (DECLARE%: EVAL@COMPILE (RPAQQ \DLMOUSE.UP 0) (RPAQQ \DLMOUSE.WAITING 1) (RPAQQ \DLMOUSE.NORMAL 2) (RPAQQ \DLMOUSE.MIDDLE 3) (RPAQQ \DLMOUSE.MIDDLE&LEFT 4) (RPAQQ \DLMOUSE.MIDDLE&RIGHT 5) (CONSTANTS (\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5)) ) (RPAQQ TRANSITIONFLAGS (ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF)) (DECLARE%: EVAL@COMPILE (RPAQQ ALTGRDOWN.TF 27) (RPAQQ ALTGRUP.TF 28) (RPAQQ ALTGRTOGGLE.TF 29) (RPAQQ CTRLDOWN.TF 5) (RPAQQ CTRLUP.TF 4) (RPAQQ DEADKEY.TF 30) (RPAQQ IGNORE.TF 0) (RPAQQ EVENT.TF 1) (RPAQQ LOCKDOWN.TF 8) (RPAQQ LOCKSHIFT.TF 2) (RPAQQ LOCKTOGGLE.TF 14) (RPAQQ LOCKUP.TF 7) (RPAQQ NOLOCKSHIFT.TF 3) (RPAQQ 1SHIFTDOWN.TF 6) (RPAQQ 1SHIFTUP.TF 9) (RPAQQ 2SHIFTDOWN.TF 11) (RPAQQ 2SHIFTUP.TF 10) (RPAQQ METADOWN.TF 13) (RPAQQ METAUP.TF 12) (RPAQQ FONTDOWN.TF 24) (RPAQQ FONTUP.TF 25) (RPAQQ FONTTOGGLE.TF 26) (RPAQQ USERMODE1UP.TF 15) (RPAQQ USERMODE1DOWN.TF 16) (RPAQQ USERMODE1TOGGLE.TF 17) (RPAQQ USERMODE2UP.TF 18) (RPAQQ USERMODE2DOWN.TF 19) (RPAQQ USERMODE2TOGGLE.TF 20) (RPAQQ USERMODE3UP.TF 21) (RPAQQ USERMODE3DOWN.TF 22) (RPAQQ USERMODE3TOGGLE.TF 23) (CONSTANTS ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \TRANSINDEX MACRO ((KEYNUMBER DOWNFLG) (COND (DOWNFLG (IPLUS \NKEYS KEYNUMBER)) (T KEYNUMBER)))) (PUTPROPS ARMEDCODE MACRO ((TABLE CHAR) (\GETBASEBIT (fetch (KEYACTION ARMED) TABLE) CHAR))) (PUTPROPS TRANSITIONALTGRCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION ALTGRAPHCODES) of TABLE) CHAR))) (PUTPROPS TRANSITIONSHIFTCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION SHIFTCODES) TABLE) CHAR))) (PUTPROPS TRANSITIONCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION CODES) TABLE) CHAR))) (PUTPROPS TRANSITIONFLAGS MACRO ((TABLE CHAR) (\GETBASEBYTE (fetch (KEYACTION FLAGS) TABLE) CHAR))) (PUTPROPS TRANSITIONDEADLIST MACRO ((TABLE CHAR SHIFTED) (\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1)))) (PUTPROPS CHECKFORDEADKEY MACRO [(KEYCODE TABLE CHAR SHIFTED) (LET ((CODE KEYCODE)) (COND [(IEQP CODE 65535) `(DEADKEY ,(\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1] (T CODE]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \NKEYS 112) (CONSTANTS \NKEYS) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (BLOCKRECORD RING ((READ WORD) (WRITE WORD))) ) (* ; "can get rid of shiftstate after clients have been fixed") (DECLARE%: EVAL@COMPILE (ACCESSFNS SHIFTSTATE [[DUMMYSHIFT (NOT (EQ 0 (LOGAND (\GETBASEBYTE DATUM 0) (LOGOR 1 2] [DUMMY1SHIFT [NOT (EQ 0 (LOGAND 1 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 1 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 1] [DUMMY2SHIFT [NOT (EQ 0 (LOGAND 2 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 2 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 2] [DUMMYLOCK [NOT (EQ 0 (LOGAND 4 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 4 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 4] [DUMMYSHIFTORLOCK (NOT (EQ 0 (\GETBASEBYTE DATUM 0))) (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (HELP " Can't turn on SHIFTORLOCK" )) (T 0] [DUMMYCTRL (NOT (EQ 0 (\GETBASEBYTE DATUM 1))) (\PUTBASEBYTE DATUM 1 (COND (NEWVALUE 1) (T 0] [DUMMYMETA (NOT (EQ 0 (\GETBASEBYTE DATUM 2))) (\PUTBASEBYTE DATUM 2 (COND (NEWVALUE 1) (T 0] [DUMMYFONT (NEQ 0 (LOGAND (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 3] [DUMMYUSERMODE1 (NEQ 0 (LOGAND (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 0] [DUMMYUSERMODE2 (NEQ 0 (LOGAND (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 1] [DUMMYUSERMODE3 (NEQ 0 (LOGAND (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 2] [DUMMYALTGRAPH (NEQ 0 (LOGAND (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 4] (DUMMYDEADKEYPENDING (NEQ 0 (LOGAND (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 5] (CREATE (\ALLOCBLOCK (FOLDHI 3 BYTESPERCELL)))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP) ) (DECLARE%: EVAL@COMPILE (RPAQQ NRINGINDEXWORDS 2) (CONSTANTS NRINGINDEXWORDS) ) (DECLARE%: EVAL@COMPILE (RPAQ \SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (RPAQ \SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE))) [CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] ) ) (DECLARE%: EVAL@COMPILE (RPAQQ \KEYNAMES ((5 %% FIVE) (4 $ FOUR) (6 ~ SIX) (e E) (7 & SEVEN) (d D) (u U) (v V) (0 %) ZERO) (k K) (- %) (p P) (/ ?) (\ %| FONT LOOKS) (LF SAME) (BS <-) (3 %# THREE) (2 @ TWO) (w W) (q Q) (s S) (a A) (9 %( NINE) (i I) (x X) (o O) (l L) (%, <) (%' %") (%] }) (BLANK-MIDDLE OPEN DBK-HELP) (BLANK-TOP KEYBOARD DBK-META) (1 ! ONE) (ESC ESCAPE ->) (TAB =>) (f F) (CTRL PROP'S EDIT) (c C) (j J) (b B) (z Z) (LSHIFT) (%. >) (; %:) (CR <-%|) (_ ^) (DEL DELETE) (SKIP NEXT) (r R) (t T) (g G) (y Y) (h H) (8 * EIGHT) (n N) (m M) (LOCK) (SPACE) (%[ {) (= +) (RSHIFT) (BLANK-BOTTOM STOP) (MOVE) (UNDO) (UTIL0 SUN-KEYPAD=) (UTIL1 SUN-KEYPAD/) (UTIL2 SUPER/SUB) (UTIL3 CASE) (UTIL4 STRIKEOUT) (UTIL5 KEYPAD2) (UTIL6 KEYPAD3 PGDN) (UTIL7 SUN-LF) (PAD1 LEFTKEY CAPSLOCK KEYPAD+) (PAD2 LEFTMIDDLEKEY NUMLOCK KEYPAD-) (PAD3 MIDDLEKEY SCROLLLOCK KEYPAD*) (PAD4 RIGHTMIDDLEKEY BREAK KEYPAD/ SUN-PAUSE) (PAD5 RIGHTKEY DOIT PRTSC) (LEFT RED MOUSERED) (RIGHT BLUE MOUSEBLUE) (MIDDLE YELLOW MOUSEYELLOW) (MARGINS) (K41 KEYPAD7 HOME) (K42 KEYPAD8) (K43 KEYPAD9 PGUP) (K44 KEYPAD4) (K45 KEYPAD5) (K46 SUN-LEFT-SPACE) (K47 KEYPAD6) (K48 RIGHT-COMMAND SUN-RIGHT-SPACE) (COPY) (FIND) (AGAIN) (HELP) (DEF'N EXPAND) (K4E KEYPAD1 END) (ALWAYS-ON-1) (ALWAYS-ON-2) (CENTER) (K52 KEYPAD0 INS) (BOLD) (ITALICS) (UNDERLINE) (SUPERSCRIPT) (SUBSCRIPT) (LARGER SMALLER) (K59 KEYPAD%| KEYPAD.) (K5A KEYPAD\ KEYPAD, SUN-F10) (K5B SUN-F11) (K5C SUN-F12) (DEFAULTS SUN-PROP) (K5E SUN-PRTSC) (K5F SUN-OPEN))) ) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun." ) (RPAQQ \ORIGKEYACTIONS ((0 (53 "%%" NOLOCKSHIFT)) (1 (52 "$" NOLOCKSHIFT)) (2 (54 "~" NOLOCKSHIFT)) (3 ("e" "E" LOCKSHIFT)) (4 (55 "&" NOLOCKSHIFT)) (5 ("d" "D" LOCKSHIFT)) (6 ("u" "U" LOCKSHIFT)) (7 ("v" "V" LOCKSHIFT)) (8 (48 ")" NOLOCKSHIFT)) (9 ("k" "K" LOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (11 ("p" "P" LOCKSHIFT)) (12 ("/" "?" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (15 (8 8 NOLOCKSHIFT)) (16 (51 "#" NOLOCKSHIFT)) (17 (50 "@" NOLOCKSHIFT)) (18 ("w" "W" LOCKSHIFT)) (19 ("q" "Q" LOCKSHIFT)) (20 ("s" "S" LOCKSHIFT)) (21 ("a" "A" LOCKSHIFT)) (22 (57 "(" NOLOCKSHIFT)) (23 ("i" "I" LOCKSHIFT)) (24 ("x" "X" LOCKSHIFT)) (25 ("o" "O" LOCKSHIFT)) (26 ("l" "L" LOCKSHIFT)) (27 ("," "<" NOLOCKSHIFT)) (28 ("'" "%"" NOLOCKSHIFT)) (29 ("]" "}" NOLOCKSHIFT)) (30 (194 194 NOLOCKSHIFT)) (31 (193 193 NOLOCKSHIFT)) (32 (49 "!" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (34 (9 9 NOLOCKSHIFT)) (35 ("f" "F" LOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (37 ("c" "C" LOCKSHIFT)) (38 ("j" "J" LOCKSHIFT)) (39 ("b" "B" LOCKSHIFT)) (40 ("z" "Z" LOCKSHIFT)) (41 1SHIFTDOWN . 1SHIFTUP) (42 ("." ">" NOLOCKSHIFT)) (43 (";" ":" NOLOCKSHIFT)) (44 (13 13 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)) (46 (127 535 NOLOCKSHIFT)) (47 ("(" "[" NOLOCKSHIFT)) (48 ("r" "R" LOCKSHIFT)) (49 ("t" "T" LOCKSHIFT)) (50 ("g" "G" LOCKSHIFT)) (51 ("y" "Y" LOCKSHIFT)) (52 ("h" "H" LOCKSHIFT)) (53 (56 "*" NOLOCKSHIFT)) (54 ("n" "N" LOCKSHIFT)) (55 ("m" "M" LOCKSHIFT)) (56 LOCKDOWN . LOCKUP) (57 (32 32 NOLOCKSHIFT)) (58 ("[" "{" NOLOCKSHIFT)) (59 ("=" "+" NOLOCKSHIFT)) (60 2SHIFTDOWN . 2SHIFTUP) (61 (195 195 NOLOCKSHIFT)) (63 (")" "]" NOLOCKSHIFT)) (77 EVENT . EVENT) (78 EVENT . EVENT) (79 EVENT . EVENT) (102 LOCKDOWN) (103 LOCKUP))) (RPAQQ \DLIONKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 ("\" "|" NOLOCKSHIFT)) (45 (96 "~" NOLOCKSHIFT)) (OPEN METADOWN . METAUP) (PROP'S CTRLDOWN . CTRLUP) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPERSCRIPT ("2,113" "2,153" NOLOCKSHIFT)) (SUBSCRIPT ("2,114" "2,154" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (DEFAULTS ("2,115" "2,155" NOLOCKSHIFT)) (93 (27 "2,64" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (31 ("2,5" "2,45" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (80 ("2,13" "2,53" NOLOCKSHIFT)) (FONT ("2,112" "2,152" NOLOCKSHIFT)))) (RPAQQ \DLIONOSDKEYACTIONS ((56 LOCKTOGGLE))) (RPAQQ \DORADOKEYACTIONS ((2 (54 "~" NOLOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)))) (RPAQQ \DOVEKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (56 CTRLDOWN . CTRLUP) (65 (27 27 NOLOCKSHIFT)) (71 (39 34 NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (108 (96 126 NOLOCKSHIFT)) (DBK-META METADOWN . METAUP) (DBK-HELP ("2,1" "2,41" NOLOCKSHIFT)) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (EDIT ("2,5" "2,45" NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (CASE ("2,104" "2,144" NOLOCKSHIFT)) (STRIKEOUT ("2,105" "2,145" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPER/SUB ("2,107" "2,147" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (MARGINS ("2,111" "2,151" NOLOCKSHIFT)) (LOOKS ("2,112" "2,152" NOLOCKSHIFT)) (CAPSLOCK LOCKTOGGLE) (NUMLOCK ("2,11" "-" NOLOCKSHIFT)) (SCROLLLOCK ("2,12" 180 NOLOCKSHIFT)) (BREAK (2 184 NOLOCKSHIFT)) (DOIT ("2,13" "2,53" NOLOCKSHIFT)) (KEYPAD7 ("2,14" 55 NOLOCKSHIFT)) (KEYPAD8 (173 56 NOLOCKSHIFT)) (KEYPAD9 ("2,15" 57 NOLOCKSHIFT)) (KEYPAD4 (172 52 NOLOCKSHIFT)) (KEYPAD5 ("2,16" 53 NOLOCKSHIFT)) (KEYPAD6 (174 54 NOLOCKSHIFT)) (KEYPAD1 ("2,17" 49 NOLOCKSHIFT)) (KEYPAD2 (175 50 NOLOCKSHIFT)) (KEYPAD3 ("2,20" 51 NOLOCKSHIFT)) (KEYPAD0 ("2,21" 48 NOLOCKSHIFT)) (KEYPAD%| ("|" 46 NOLOCKSHIFT)) (KEYPAD\ ("\" 44 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)))) (RPAQQ \DOVEOSDKEYACTIONS ((56 LOCKDOWN . LOCKUP) (36 CTRLDOWN . CTRLUP) (CAPSLOCK ("2,5" "2,45" NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONS ((61 (5 7 NOLOCKSHIFT)) (91 (520 552 NOLOCKSHIFT)) (92 (513 545 NOLOCKSHIFT)) (30 (513 545 NOLOCKSHIFT)) (63 (516 548 NOLOCKSHIFT)) (93 (532 564 NOLOCKSHIFT)) (62) (111 (329 263 NOLOCKSHIFT)) (89) (90 (515 547 NOLOCKSHIFT)) (73 (521 521 NOLOCKSHIFT)) (74 (522 522 NOLOCKSHIFT)) (75 (2 2 NOLOCKSHIFT)) (81 (524 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 (525 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 (526 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 (527 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 (528 51 NOLOCKSHIFT)) (98 (529 48 NOLOCKSHIFT)) (76 (523 555 NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 (577 609 NOLOCKSHIFT)) (99 (578 610 NOLOCKSHIFT)) (100 (579 611 NOLOCKSHIFT)) (67 (580 612 NOLOCKSHIFT)) (68 (581 613 NOLOCKSHIFT)) (101 (582 614 NOLOCKSHIFT)) (66 (583 615 NOLOCKSHIFT)) (104 (584 616 NOLOCKSHIFT)) (80 (585 617 NOLOCKSHIFT)) (13 (23 21 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (2 (54 94 NOLOCKSHIFT)) (10 (45 95 NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 (96 126 NOLOCKSHIFT)) (31 METADOWN . METAUP) (14 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 (530 562 NOLOCKSHIFT)) (105 (92 124 NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONST4 ((61 ("^E" "^G" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (30 ("2,1" "2,41" NOLOCKSHIFT)) (109 ("2,25" "2,65" NOLOCKSHIFT)) (63 ("2,4" "2,44" NOLOCKSHIFT)) (14 METADOWN . METAUP) (93 ("2,24" "2,64" NOLOCKSHIFT)) (62) (111 ("1,111" "1,79" NOLOCKSHIFT)) (89) (90 ("2,3" "2,43" NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 ("2,17" 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (98 ("2,21" 48 NOLOCKSHIFT)) (76 ("2,13" "2,13" NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 ("2,101" "2,141" NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (100 ("2,103" "2,143" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (68 ("2,105" "2,145" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (33 ("ESC" "ESC" NOLOCKSHIFT)) (64 IGNORE . IGNORE) (65 (27 27 NOLOCKSHIFT)) (95 IGNORE . IGNORE) (96 IGNORE . IGNORE) (102 IGNORE . IGNORE) (2 ("6" "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 ("`" "~" NOLOCKSHIFT)) (31 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (86 IGNORE . IGNORE) (88 IGNORE . IGNORE) (105 ("\" "|" NOLOCKSHIFT)))) (RPAQQ \MAIKO-JLE-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("\" "_" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (14 METADOWN . METAUP) (15 (8 8 NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (30 ("]" "}" NOLOCKSHIFT)) (31 METADOWN . METAUP) (33 ("ESC" "ESC" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (43 (";" "+" NOLOCKSHIFT)) (45 ("^" "~" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (56 LOCKTOGGLE . IGNORE) (58 ("@" "`" NOLOCKSHIFT)) (59 ("-" "=" NOLOCKSHIFT)) (61 ("^E" "^G" NOLOCKSHIFT)) (62) (63 ("2,4" "2,44" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (71 (10 10 NOLOCKSHIFT)) (72 (766 766 NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (86 (765 765 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (88 (770 771 NOLOCKSHIFT)) (90 ("2,3" "2,43" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (96 IGNORE . IGNORE) (98 ("2,21" 48 NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (102 IGNORE . IGNORE) (103 (767 768 NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (105 ("\" "|" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (109 (769 769 NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (111 ("1,111" "1,79" NOLOCKSHIFT)))) (RPAQQ \TOSHIBA-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("-" "=" NOLOCKSHIFT)) (59 ("^" "~" NOLOCKSHIFT)) (45 ("\" "|" NOLOCKSHIFT)) (58 ("@" "`" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (105 ("]" "}" NOLOCKSHIFT)) (43 (";" "+" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (15 (23 95 NOLOCKSHIFT)) (13 (8 8 NOLOCKSHIFT)) (86 METADOWN . METAUP) (73 (530 562 NOLOCKSHIFT)) (88 ("2,24" "2,64" NOLOCKSHIFT)) (98 IGNORE . IGNORE) (75 ("2,11" "2,11" NOLOCKSHIFT)) (110 ("2,12" "2,12" NOLOCKSHIFT)) (74 ("^B" "^B" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (173 56 NOLOCKSHIFT)) (95 ("2,15" 57 NOLOCKSHIFT)) (81 (172 52 NOLOCKSHIFT)) (82 ("2,16" 53 NOLOCKSHIFT)) (83 (174 54 NOLOCKSHIFT)) (84 ("2,17" 49 NOLOCKSHIFT)) (85 (175 50 NOLOCKSHIFT)) (87 ("2,20" 51 NOLOCKSHIFT)) (94 ("2,21" 48 NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 LOCKTOGGLE))) (RPAQQ KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL) (RPAQ? \KEYBOARD.META 256) (RPAQ? \MODIFIED.KEYACTIONS ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS) ) (* ; "Key interpretation") (DEFINEQ (KEYACTION [LAMBDA (KEYNAME ACTIONS TABLE) (* ; "Edited 19-Nov-87 16:19 by Snow") (LET ((NUMB (OR (SMALLP KEYNAME) (\KEYNAMETONUMBER KEYNAME))) (TABLE (OR TABLE \CURRENTKEYACTION))) (OR (TYPE? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (* ;  "Make sure he supplied a valid TABLE argument.") (CONS (\KEYACTION1 (\TRANSINDEX NUMB T) (AND ACTIONS (OR (CAR ACTIONS) 'IGNORE)) TABLE) (\KEYACTION1 (\TRANSINDEX NUMB NIL) (AND ACTIONS (OR (CDR ACTIONS) 'IGNORE)) TABLE]) (KEYACTIONTABLE [LAMBDA (OLD) (* ; "Edited 23-Mar-92 12:44 by jds") (* ;; "Create a fresh key action table (or copy OLD so it can be modified without danger). Returns a fresh keyaction table.") (COND (OLD (* ;; "He supplied an existing table; create a copy of it:") (OR (type? KEYACTION OLD) (\ILLEGAL.ARG OLD)) (* ;  "Make sure the argument IS a key action table.") (create KEYACTION copying OLD)) (T (* ;; "Create a completely fresh table, filled in from \ORIGKEYACTIONS, and the machine-specific exceptions:") (PROG1 (SETQ OLD (create KEYACTION)) (for X in (APPEND (COPY \ORIGKEYACTIONS) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) OLD)))]) (KEYBOARDTYPE [LAMBDA NIL (* ; "Edited 6-Nov-95 15:35 by ") (* ; "Edited 17-Feb-95 14:36 by rmk:") (* ;  "Edited 16-Jun-92 11:03 by kaplan") (* ;; "Returns a symbol identifying the currently connected keyboard type. For now, infers it from the machine type, defaults to NIL (= unknown).") (LET ((MT (MACHINETYPE))) (SELECTQ MT (MAIKO (OR [CADR (SASSOC (L-CASE (UNIX-GETENV "LDEKBDTYPE")) '(("type3" SUN3) ("type4" SUN4) ("type5" SUN5] (MKATOM (U-CASE (UNIX-GETENV "LDEKBDTYPE"))) (AND (STREQUAL "dos" (UNIX-GETPARM "ARCH")) 'FULL-IBMPC))) ((DORADO DANDELION DOVE) MT) NIL]) (RESETKEYACTION [LAMBDA (TABLE FROM RESETINTERRUPTS) (* ; "Edited 19-Nov-87 16:55 by Snow") (* ;; "Resets the actions of key transitions in the keyaction table TABLE, copying in the actions from FROM. If RESETINTERRUPTS is true, also copies the interrupt-character settings from FROM.") (DECLARE (GLOBALVARS \DEFAULTKEYACTION)) (* ;; "do some type checking first.") (OR (type? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (OR FROM (SETQ FROM \DEFAULTKEYACTION)) (OR (type? KEYACTION FROM) (\ILLEGAL.ARG TABLE)) (* ;; "do the resetting.") (\BLT (fetch (KEYACTION FLAGS) of TABLE) (fetch (KEYACTION FLAGS) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION FLAGS) of TABLE)) 1)) (\BLT (fetch (KEYACTION CODES) of TABLE) (fetch (KEYACTION CODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION CODES) of TABLE)) 1)) (\BLT (fetch (KEYACTION SHIFTCODES) of TABLE) (fetch (KEYACTION SHIFTCODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION SHIFTCODES) of TABLE)) 1)) [if RESETINTERRUPTS then (\BLT (fetch (KEYACTION ARMED) of TABLE) (fetch (KEYACTION ARMED) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION ARMED) of TABLE)) 1)) (replace (KEYACTION INTERRUPTLIST) of TABLE with (COPY (fetch (KEYACTION INTERRUPTLIST) of FROM] TABLE]) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS [LAMBDA NIL (* ; "Edited 18-Sep-90 22:36 by jds") (* ;;  "Return a list of machine-specific keyactions appropriate to the machine you're running on.") (* ;; "Also take account (on Maiko implementations) of whether we're running under X or not -- the CAPS-LOCK key works differently.") (SELECTC \MACHINETYPE (\DORADO \DORADOKEYACTIONS) (\DANDELION \DLIONKEYACTIONS) (\MAIKO (LET [(CAPS-LOCK-ACTIONS (COND ((EQUAL (UNIX-GETPARM "DISPLAY") "X") '((56 LOCKDOWN . LOCKUP) (72 LOCKDOWN . LOCKUP] (* ;; "If we're running under X windows, CAPS-LOCK-ACTIONS, appended to the normal keyactions, will reset the keyboard appropriately.") (COND ((EQUAL \SUN.TYPE3KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONS CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.TYPE4KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONST4 CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.JLEKEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) \MAIKO-JLE-KEYACTIONS) ((EQUAL \TOSHIBA.JIS (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (* ; "Toshiba JIS") (APPEND \MAIKOKEYACTIONST4 \TOSHIBA-KEYACTIONS)) (T (* ; "default is type3") \MAIKOKEYACTIONS)))) (\DAYBREAK (* ;  "Moving to a daybreak. Need to distinguish among the various kinds of keyboard.") (* ;; "For now, we only distinguish between the office keyboards (1 = US, 2 = Euro, 3 = Japanese, 4 = ADM-3), and some yet-to-be-determined Lisp-keyboard number") (COND ((ILEQ (\DoveMisc.ReadKeyboardType) 4) (* ;  "It's an office keyboard. Set it up right!") (APPEND \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (T (* ;  "Lisp keyboard. Leave the Dove keyactions as they were.") \DOVEKEYACTIONS))) NIL]) (\KEYACTION1 [LAMBDA (TI ACTION TABLE) (* ; "Edited 4-Mar-92 13:59 by jds") (PROG1 (SELECTC (TRANSITIONFLAGS TABLE TI) (IGNORE.TF 'IGNORE) ((LIST LOCKSHIFT.TF NOLOCKSHIFT.TF) [LET (CODE) (LIST (CHECKFORDEADKEY (TRANSITIONCODE TABLE TI) TABLE TI NIL) (CHECKFORDEADKEY (TRANSITIONSHIFTCODE TABLE TI) TABLE TI T) (TRANSITIONALTGRCODE TABLE TI) (COND ((EQ LOCKSHIFT.TF (TRANSITIONFLAGS TABLE TI)) 'LOCKSHIFT) (T 'NOLOCKSHIFT]) (EVENT.TF 'EVENT) (CTRLDOWN.TF 'CTRLDOWN) (CTRLUP.TF 'CTRLUP) (DEADKEY.TF (LIST 'DEADKEY (TRANSITIONDEADLIST TABLE TI) (TRANSITIONDEADLIST TABLE TI T))) (1SHIFTDOWN.TF '1SHIFTDOWN) (1SHIFTUP.TF '1SHIFTUP) (2SHIFTDOWN.TF '2SHIFTDOWN) (2SHIFTUP.TF '2SHIFTUP) (LOCKDOWN.TF 'LOCKDOWN) (LOCKUP.TF 'LOCKUP) (LOCKTOGGLE.TF 'LOCKTOGGLE) (METADOWN.TF 'METADOWN) (METAUP.TF 'METAUP) (FONTUP.TF 'FONTUP) (FONTDOWN.TF 'FONTDOWN) (FONTTOGGLE.TF 'FONTTOGGLE) (USERMODE1UP.TF 'USERMODE1UP) (USERMODE1DOWN.TF 'USERMODE1DOWN) (USERMODE1TOGGLE.TF 'USERMODE1TOGGLE) (USERMODE2UP.TF 'USERMODE2UP) (USERMODE2DOWN.TF 'USERMODE2DOWN) (USERMODE2TOGGLE.TF 'USERMODE2TOGGLE) (USERMODE3UP.TF 'USERMODE3UP) (USERMODE3DOWN.TF 'USERMODE3DOWN) (USERMODE3TOGGLE.TF 'USERMODE3TOGGLE) (ALTGRUP.TF 'ALTGRUP) (ALTGRDOWN.TF 'ALTGRDOWN) (ALTGRTOGGLE.TF 'ALTGRTOGGLE) (SHOULDNT)) [SELECTQ ACTION ((NIL NOCHANGE)) (IGNORE (change (TRANSITIONFLAGS TABLE TI) IGNORE.TF)) (EVENT (change (TRANSITIONFLAGS TABLE TI) EVENT.TF)) (CTRLUP (change (TRANSITIONFLAGS TABLE TI) CTRLUP.TF)) (CTRLDOWN (change (TRANSITIONFLAGS TABLE TI) CTRLDOWN.TF)) (1SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 1SHIFTUP.TF)) (1SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 1SHIFTDOWN.TF)) (2SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 2SHIFTUP.TF)) (2SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 2SHIFTDOWN.TF)) (LOCKUP (change (TRANSITIONFLAGS TABLE TI) LOCKUP.TF)) (LOCKDOWN (change (TRANSITIONFLAGS TABLE TI) LOCKDOWN.TF)) (LOCKTOGGLE (change (TRANSITIONFLAGS TABLE TI) LOCKTOGGLE.TF)) (METAUP (change (TRANSITIONFLAGS TABLE TI) METAUP.TF)) (METADOWN (change (TRANSITIONFLAGS TABLE TI) METADOWN.TF)) (FONTUP (change (TRANSITIONFLAGS TABLE TI) FONTUP.TF)) (FONTDOWN (change (TRANSITIONFLAGS TABLE TI) FONTDOWN.TF)) (FONTTOGGLE (change (TRANSITIONFLAGS TABLE TI) FONTTOGGLE.TF)) (USERMODE1UP (change (TRANSITIONFLAGS TABLE TI) USERMODE1UP.TF)) (USERMODE1DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE1DOWN.TF)) (USERMODE1TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE1TOGGLE.TF)) (USERMODE2UP (change (TRANSITIONFLAGS TABLE TI) USERMODE2UP.TF)) (USERMODE2DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE2DOWN.TF)) (USERMODE2TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE2TOGGLE.TF)) (USERMODE3UP (change (TRANSITIONFLAGS TABLE TI) USERMODE3UP.TF)) (USERMODE3DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE3DOWN.TF)) (USERMODE3TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE3TOGGLE.TF)) (ALTGRUP (change (TRANSITIONFLAGS TABLE TI) ALTGRUP.TF)) (ALTGRDOWN (change (TRANSITIONFLAGS TABLE TI) ALTGRDOWN.TF)) (ALTGRTOGGLE (change (TRANSITIONFLAGS TABLE TI) ALTGRTOGGLE.TF)) (PROG (CODE SHIFTCODE ALTGRCODE ACT DEAD SHIFTDEAD) (COND ([AND [OR (AND (AND (LISTP (CAR (LISTP ACTION))) (EQ (CAAR (LISTP ACTION)) 'DEADKEY)) [SETQ DEAD (for PAIR in (CADAR (LISTP ACTION)) collect (* ;;  "Make sure we'll take string charcode specs in the deadkey list.") (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ CODE 65535)) [\CHARCODEP (SETQ CODE (\GETCHARCODE (CAR (LISTP ACTION] (SETQ CODE (APPLY* (FUNCTION CHARCODE) (CAR (LISTP ACTION] [OR (AND (AND (LISTP (CADR (LISTP ACTION))) (EQ (CAADR (LISTP ACTION)) 'DEADKEY)) [SETQ SHIFTDEAD (for PAIR in (CADADR (LISTP ACTION)) collect (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ SHIFTCODE 65535) (SETQ ACT (CDR ACTION))) [\CHARCODEP (SETQ SHIFTCODE (\GETCHARCODE (CAR (SETQ ACT (LISTP (CDR ACTION] (SETQ SHIFTCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) (AND [OR [\CHARCODEP (SETQ ALTGRCODE (\GETCHARCODE (CAR ACT] (SETQ ALTGRCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) NIL] (change (TRANSITIONCODE TABLE TI) CODE) (change (TRANSITIONSHIFTCODE TABLE TI) SHIFTCODE) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH TI 1) DEAD) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (IPLUS \NKEYS \NKEYS TI) 1) SHIFTDEAD) (AND ALTGRCODE (change (TRANSITIONALTGRCODE TABLE TI) ALTGRCODE))) (T (\ILLEGAL.ARG ACTION])]) (KEYDOWNP [LAMBDA (KEYNAME) (* lmm "18-Apr-85 02:09") (* T if the indicated key is  instantaneously down.) (\NEWKEYDOWNP (\KEYNAMETONUMBER KEYNAME]) (KEYNUMBERP [LAMBDA (X) (* ; "Edited 16-Jan-96 13:16 by rmk") (AND (SMALLP X) (IGEQ X 0) (ILESSP X \NKEYS) X]) (\KEYNAMETONUMBER [LAMBDA (KEYNAME) (* rmk%: " 2-SEP-83 10:29") (DECLARE (GLOBALVARS \KEYNAMES)) (* The fast case is when KEYNAME is  lower-case) (for X N in \KEYNAMES as I from 0 when (EQMEMB KEYNAME X) do (RETURN I) finally (RETURN (OR (AND (NEQ KEYNAME (SETQ N (L-CASE KEYNAME))) (for Y in \KEYNAMES as I from 0 when (EQMEMB N Y) do (RETURN I))) (\ILLEGAL.ARG KEYNAME]) (MODIFY.KEYACTIONS [LAMBDA (KeyActions SaveCurrent?) (* ; "Edited 2-Feb-89 15:38 by GADENER") (PROG1 [if SaveCurrent? then (SETQ \MODIFIED.KEYACTIONS (for ITEM in KeyActions collect (CONS (CAR ITEM) (KEYACTION (CAR ITEM] [for action in KeyActions do (for table in '(\CURRENTKEYACTION \COMMANDKEYACTION) do (KEYACTION (CAR action) (CDR action) (EVAL table])]) (METASHIFT [LAMBDA FLG (* ; "Edited 19-Nov-87 16:59 by Snow") (* ;; "Sets interpretation of swat key to first arg, where T means meta-shift, NIL means original setting. Returns previous setting") (PROG ((METASTATUS '(METADOWN . METAUP)) OLDSETTING) [SETQ OLDSETTING (KEYACTION 'BLANK-BOTTOM (AND (IGREATERP FLG 0) (COND ((EQ (ARG FLG 1) T) METASTATUS) (T (OR (ARG FLG 1) (CDR (ASSOC 'BLANK-BOTTOM \ORIGKEYACTIONS] (RETURN (COND ((EQUAL OLDSETTING METASTATUS) T) (T OLDSETTING]) (SHIFTDOWNP [LAMBDA (SHIFT) (* lmm "18-Apr-85 01:07") (* Tells whether a given shift is  down) (SELECTQ SHIFT (LOCK (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (META (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE))) (1SHIFT (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE)) (2SHIFT (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE)) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE))) (CTRL (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (FONT (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (USERMODE1 (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (USERMODE2 (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (USERMODE3 (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (\ILLEGAL.ARG SHIFT]) ) (* ; "To support office style 1108 & 1186 keyboards") (DEFINEQ (SETUP.OFFICE.KEYBOARD [LAMBDA NIL (* jds " 8-Oct-85 16:27") (SELECTQ (MACHINETYPE) (DANDELION (MODIFY.KEYACTIONS \DLIONOSDKEYACTIONS)) (DOVE (MODIFY.KEYACTIONS \DOVEOSDKEYACTIONS)) NIL]) ) (DEFOPTIMIZER \KEYNAMETONUMBER (&REST X) [LET [(CE (CONSTANTEXPRESSIONP (CAR X] (COND (CE (\KEYNAMETONUMBER (CAR CE))) (T 'IGNOREMACRO]) (DECLARE%: EVAL@COMPILE (PUTPROPS \TEMPCOPYTIMER MACRO ((X) (PROGN (\BLT \MOUSETIMERTEMP (LOCF X) WORDSPERCELL) \MOUSETIMERTEMP))) ) (* ; "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED") (DEFOPTIMIZER KEYDOWNP (KEYNAME) `(\NEWKEYDOWNP (\KEYNAMETONUMBER ,KEYNAME))) (* "END EXPORTED DEFINITIONS") ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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)))) ) (* "END EXPORTED DEFINITIONS") (* ; "A raw keyboard device/stream") (DEFINEQ (\INIT.KEYBOARD.STREAM [LAMBDA NIL (* ; "Edited 4-Sep-87 10:25 by jds") (* ;; "Initialize the %"Keyboard%" device: Set up the FDEV and the prototype keyboard stream in their respective global variables.") (DECLARE (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM)) [\DEFINEDEVICE 'KEYBOARD (SETQ \KEYBOARD.DEVICE (create FDEV DEVICENAME _ 'KEYBOARD CLOSEFILE _ (FUNCTION NILL) EVENTFN _ (FUNCTION \KEYBOARDEVENTFN) BIN _ (FUNCTION \GETKEY) PEEKBIN _ (FUNCTION \PEEKSYSBUF) READP _ (FUNCTION \SYSBUFP) EOFP _ (FUNCTION NILL) GETFILENAME _ (FUNCTION (LAMBDA (X MODE) (if (EQ MODE 'INPUT) then \KEYBOARD.STREAM] (SETQ \KEYBOARD.STREAM (create STREAM USERCLOSEABLE _ NIL USERVISIBLE _ NIL FULLFILENAME _ '{KEYBOARD} DEVICE _ \KEYBOARD.DEVICE ACCESS _ 'INPUT]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\INIT.KEYBOARD.STREAM) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM) ) (* "END EXPORTED DEFINITIONS") (* ; "Hook for a periodic interrupt") (DEFINEQ (\DOBUFFEREDTRANSITIONS [LAMBDA (\INTERRUPTABLE) (DECLARE (SPECVARS \INTERRUPTABLE)) (* ; "Edited 1-Feb-92 11:59 by jds") (SETQ \KEYBUFFERING 'INPROGRESS) (LET ((PENDINGINTERRUPT)) (DECLARE (SPECVARS PENDINGINTERRUPT)) (* ; "Used by \DECODETRANSITION") [bind R RPTR until (EQ 0 (SETQ R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) ) do (SETQ RPTR (\ADDBASE \KEYBOARDEVENTQUEUE R)) (* ; "get pointer to this event") (* ;  "handle simple keyboard words by calling \DOTRANSITIONS for each word") [COND ((NEQ (fetch (KEYBOARDEVENT W0) of RPTR) (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE )) (\DOTRANSITIONS 0 (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W0) of RPTR)) (replace (KEYBOARDEVENT W0) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W0) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W1) of RPTR) (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE )) (\DOTRANSITIONS 16 (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W1) of RPTR)) (replace (KEYBOARDEVENT W1) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W1) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W2) of RPTR) (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE )) (\DOTRANSITIONS 32 (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W2) of RPTR)) (replace (KEYBOARDEVENT W2) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W2) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W3) of RPTR) (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE )) (\DOTRANSITIONS 48 (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W3) of RPTR)) (replace (KEYBOARDEVENT W3) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W3) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W4) of RPTR) (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE )) (\DOTRANSITIONS 80 (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W4) of RPTR)) (replace (KEYBOARDEVENT W4) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W4) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W5) of RPTR) (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE )) (\DOTRANSITIONS 96 (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W5) of RPTR)) (replace (KEYBOARDEVENT W5) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W5) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT WU) of RPTR) (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE )) (\DOTRANSITIONS 64 (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT WU) of RPTR)) (replace (KEYBOARDEVENT WU) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT WU) of RPTR] (* ;;; "now remove event from queue") (COND ((EQ [replace (RING READ) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ R \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS \KEYBOARDEVENT.SIZE R] (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE )) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0] (PROGN (* ; "update dummy shift state") (replace DUMMY1SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 1SHIFT ) of \LASTKEYSTATE )) (replace DUMMY2SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 2SHIFT ) of \LASTKEYSTATE )) (replace DUMMYLOCK of \SHIFTSTATE with (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (replace DUMMYCTRL of \SHIFTSTATE with (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (replace DUMMYMETA of \SHIFTSTATE with (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (replace DUMMYFONT of \SHIFTSTATE with (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (replace DUMMYUSERMODE1 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (replace DUMMYUSERMODE2 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (replace DUMMYUSERMODE3 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (replace DUMMYALTGRAPH of \SHIFTSTATE with (fetch (KEYBOARDEVENT ALTGRAPH) of \LASTKEYSTATE)) (replace DUMMYDEADKEYPENDING of \SHIFTSTATE with (fetch ( KEYBOARDEVENT DEADKEYPENDING ) of \LASTKEYSTATE) )) (* ;; "Note: there is a window between the test of READ above and the setting of \KEYBUFFERING below where a keyboard transition can be ignored until the next transition causes \KEYBUFFERING to be set again") (COND ((NOT (OR PENDINGINTERRUPT \PENDINGINTERRUPT)) (* ;  "No interrupt noticed this time or on any previous invocation") (SETQ \KEYBUFFERING NIL)) ((NOT (\GETBASEPTR (\STKSCAN '\INTERRUPTABLE) 0)) (* ;  "We're not interruptable, so try again later") (SETQ \PENDINGINTERRUPT T) (SETQ \KEYBUFFERING NIL)) (T (SETQ \PENDINGINTERRUPT NIL) (SETQ \KEYBUFFERING NIL) (LET ((\INTERRUPTABLE T)) (INTERRUPTED]) (\TIMER.INTERRUPTFRAME [LAMBDA NIL (* lmm "22-Apr-85 09:47") (* place holder for periodic  interrupts) (if NIL then (APPLY* \PERIODIC.INTERRUPT) (if \PERIODIC.INTERRUPT then (SETUPTIMER (QUOTIENT (TIMES \PERIODIC.INTERRUPT.FREQUENCY \RCLKSECOND) 77) (LOCF (fetch DLMOUSETIMER of \MISCSTATS)) 'TICKS) (SETQ \TIMER.INTERRUPT.PENDING T]) (\PERIODIC.INTERRUPTFRAME [LAMBDA NIL (DECLARE (GLOBALVARS \PERIODIC.INTERRUPT)) (* lmm "16-Jul-85 16:22") (LET ((FN \PERIODIC.INTERRUPT)) (AND FN (SPREADAPPLY* FN]) ) (RPAQ? \KEYBUFFERING ) (RPAQ? \PERIODIC.INTERRUPT ) (RPAQ? \TIMER.INTERRUPT.PENDING ) (RPAQ? \PERIODIC.INTERRUPT.FREQUENCY 77) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (* ; "cursor and mouse related functions.") (DEFINEQ (\HARDCURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 2-Jan-2000 18:10 by kaplan") (* ;  "version of \CURSORUP that knows about the possibility of the cursor being on the color screen.") (PROG (IMAGE) (SETQ \SOFTCURSORP NIL) (SETQ \CURRENTCURSOR NEWCURSOR) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION))) (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR] (BITBLT IMAGE 0 0 CursorBitMap 0 (IDIFFERENCE HARDCURSORHEIGHT (fetch (BITMAP BITMAPHEIGHT ) of IMAGE)) HARDCURSORWIDTH HARDCURSORHEIGHT (COND (INVERTFLG 'INVERT) (T 'INPUT)) 'REPLACE) (SELECTC \MACHINETYPE (\DAYBREAK (\DoveDisplay.SetCursorShape CursorBitMap)) (\MAIKO (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR))) NIL]) (\HARDCURSORPOSITION [LAMBDA (XPOS YPOS) (* kbr%: "13-Jun-85 21:24") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS)) NIL]) (\HARDCURSORDOWN [LAMBDA NIL (* kbr%: "23-Apr-85 18:26") (\CLEARBM (CURSORBITMAP]) ) (DEFINEQ (CURSOR.INIT [LAMBDA NIL (* kbr%: "23-Jan-86 17:34") (PROG (DESTBPL) (* Assorted globals for doing the  color cursor. *) (SETQ \CURSORDESTINATION ScreenBitMap) (SETQ \SOFTCURSORUPBM NIL) (SETQ \SOFTCURSORDOWNBM NIL) (SETQ \CURSORDESTLINE 0) (SETQ \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of ScreenBitMap)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of ScreenBitMap)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of ScreenBitMap)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of ScreenBitMap)) (* Initialize PILOTBBTs.  *) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (* These PILOTBBTs are the mixing areas for forming the color cursor image.  *) (* Does SCREEN to DOWNBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT1 (create PILOTBBT PBTSOURCEBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT1) (* Does DOWNBM to UPBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT2 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT2) (* Does MASK to UPBM via INPUT,  ERASE. *) (SETQ \SOFTCURSORBBT3 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 1 PBTOPERATION _ 1)) (\LOCKCELL \SOFTCURSORBBT3) (* Does IMAGE to UPBM via INPUT,  PAINT. *) (SETQ \SOFTCURSORBBT4 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 2)) (\LOCKCELL \SOFTCURSORBBT4) (* Does UPBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT5 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT5) (* Does DOWNBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT6 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT6) (* Lock things down.  *) ]) (\CURSORDESTINATION [LAMBDA (DESTINATION) (* kbr%: " 2-Sep-85 20:13") (* Change DESTINATION of  \CURRENTCURSOR, assuming it is down.  *) (PROG (DESTBPL) (COND ((NOT (EQ DESTINATION \CURSORDESTINATION)) (UNINTERRUPTABLY [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CURSOR CUIMAGE) of \CURRENTCURSOR )) (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION))) (\CURSORBITSPERPIXEL \CURRENTCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION] (\SETMOUSEXY 0 0) (\PUTBASE \EM.CURSORX 0 0) (\PUTBASE \EM.CURSORY 0 0) (SETQ \CURSORDESTLINE 0) (SETQ.NOREF \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of DESTINATION)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of DESTINATION)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of DESTINATION)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of DESTINATION )) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT1 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT5 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT6 with DESTBPL) (SETQ \CURSORDESTINATION DESTINATION))]) (\SOFTCURSORUP [LAMBDA (NEWCURSOR) (* kbr%: " 2-Sep-85 20:15") (* Put soft NEWCURSOR up, assuming soft cursor is down.  *) (PROG (IMAGE MASK WIDTH BWIDTH HEIGHT CURSORBITSPERPIXEL CURSORBPL UPBMBASE DOWNBMBASE) (* Get cursor IMAGE & MASK.  *) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) (SETQ MASK (fetch (CURSOR CUMASK) of NEWCURSOR)) (SETQ WIDTH (fetch (BITMAP BITMAPWIDTH) of IMAGE)) (SETQ HEIGHT (fetch (BITMAP BITMAPHEIGHT) of IMAGE)) (SETQ CURSORBITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE)) (* Create new UPBM & DOWNBM caches  if necessary. *) (COND ((NOT (AND (type? BITMAP \SOFTCURSORUPBM) (EQ (fetch (BITMAP BITMAPWIDTH) of \SOFTCURSORUPBM) WIDTH) (EQ (fetch (BITMAP BITMAPHEIGHT) of \SOFTCURSORUPBM) HEIGHT) (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of \SOFTCURSORUPBM) CURSORBITSPERPIXEL))) (SETQ \SOFTCURSORWIDTH WIDTH) (SETQ \SOFTCURSORHEIGHT HEIGHT) (SETQ \SOFTCURSORUPBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ \SOFTCURSORDOWNBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ UPBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM)) (\TEMPLOCKPAGES UPBMBASE 1) (SETQ DOWNBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM)) (\TEMPLOCKPAGES DOWNBMBASE 1) (SETQ CURSORBPL (UNFOLD (fetch (BITMAP BITMAPRASTERWIDTH) of IMAGE) BITSPERWORD)) (SETQ BWIDTH (ITIMES (fetch (BITMAP BITMAPWIDTH) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE))) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT1 with CURSORBPL) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT2 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT2 with DOWNBMBASE) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT2 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT2 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT3 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT3 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT3 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT4 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT4 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT4 with HEIGHT) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT5 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT6 with CURSORBPL))) (* Change PILOTBBTs.  *) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT3 with (fetch (BITMAP BITMAPBASE ) of MASK)) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT4 with (fetch (BITMAP BITMAPBASE ) of IMAGE)) (* Put up new \CURRENTCURSOR.  *) (SETQ \CURRENTCURSOR NEWCURSOR) (\TEMPLOCKPAGES \CURRENTCURSOR 1) (SETQ \SOFTCURSORP T) (\SOFTCURSORUPCURRENT]) (\SOFTCURSORUPCURRENT [LAMBDA NIL (* kbr%: "18-Aug-85 15:09") (* Put soft \CURRENTCURSOR up, assuming soft cursor is down.  *) (PROG (DISPINTERRUPT X Y XBASE YBASE WIDTH HEIGHT BITSPERPIXEL MINUSDESTRASTERWIDTH DEST DESTBIT SOURCEOFFSET UPBMSOURCE DOWNBMSOURCE SOURCEBIT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP T) (* Roughly, we want to  (BITBLT CURSOR XBASE YBASE SCREEN X  Y WIDTH HEIGHT) *) (SETQ X (SIGNED (\GETBASE \EM.MOUSEX 0) BITSPERWORD)) (SETQ Y (SIGNED (\GETBASE \EM.MOUSEY 0) BITSPERWORD)) (SETQ XBASE 0) (SETQ YBASE 0) (SETQ WIDTH \SOFTCURSORWIDTH) (SETQ HEIGHT \SOFTCURSORHEIGHT) (* Clip off screen parts of cursor.  *) [COND ((IGREATERP 0 X) (* Some of cursor is to left of  screen. *) (SETQ XBASE (IMINUS X)) (SETQ WIDTH (IDIFFERENCE WIDTH XBASE)) (SETQ X 0)) ((IGREATERP (IPLUS X WIDTH) \CURSORDESTWIDTH) (* Some of cursor is to right of  screen. *) (SETQ WIDTH (IDIFFERENCE \CURSORDESTWIDTH X] (COND ((ILESSP WIDTH 0) (GO EXIT))) [COND ((IGREATERP 0 Y) (* Some of cursor is to above of  screen. *) (SETQ YBASE (IMINUS Y)) (SETQ HEIGHT (IDIFFERENCE HEIGHT YBASE)) (SETQ Y 0)) ((IGREATERP (IPLUS Y HEIGHT) \CURSORDESTHEIGHT) (* Some of cursor is to below of  screen. *) (SETQ HEIGHT (IDIFFERENCE \CURSORDESTHEIGHT Y] (COND ((ILESSP HEIGHT 0) (GO EXIT))) (* These loops reset \CURSORDESTLINEBASE while avoiding large number  arithmetic. *) [COND [(IGREATERP \CURSORDESTLINE Y) (SETQ MINUSDESTRASTERWIDTH (IMINUS \CURSORDESTRASTERWIDTH)) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (SUB1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE MINUSDESTRASTERWIDTH] ((ILESSP \CURSORDESTLINE Y) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (ADD1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE \CURSORDESTRASTERWIDTH] (* Reset PILOTBBTs.  *) (SETQ BITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of \CURRENTCURSOR)) (SETQ X (ITIMES BITSPERPIXEL X)) (SETQ XBASE (ITIMES BITSPERPIXEL XBASE)) (SETQ WIDTH (ITIMES BITSPERPIXEL WIDTH)) (SETQ DEST \CURSORDESTLINEBASE) (SETQ DESTBIT X) (SETQ SOURCEOFFSET (ITIMES YBASE (fetch (BITMAP BITMAPRASTERWIDTH) of \SOFTCURSORUPBM ))) (SETQ UPBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM) SOURCEOFFSET)) (SETQ DOWNBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM) SOURCEOFFSET)) (SETQ SOURCEBIT XBASE) (* TBW%: Most of these fields only need to be set if we are clipping this  time or the previous time we put the cursor up.  *) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT1 with DOWNBMSOURCE) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT1 with SOURCEBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT1 with DEST) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT1 with DESTBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT1 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT1 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT5 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT5 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT5 with UPBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT5 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT5 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT5 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT6 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT6 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT6 with DOWNBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT6 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT6 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT6 with HEIGHT) (* Save background behind cursor.  *) (\PILOTBITBLT \SOFTCURSORBBT1 0) (* Compute cursor appearance.  UPBM = (OR IMAGE (AND DOWNBM  (NOT MASK))) *) (\PILOTBITBLT \SOFTCURSORBBT2 0) (\PILOTBITBLT \SOFTCURSORBBT3 0) (\PILOTBITBLT \SOFTCURSORBBT4 0) (* Put color cursor up.  *) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT5 0) EXIT (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORPOSITION [LAMBDA (X Y) (* kbr%: "18-Aug-85 14:50") (* Move soft cursor.  *) (PROG (DISPINTERRUPT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) [COND ((OR (NOT (EQ (\GETBASE \EM.CURSORX 0) X)) (NOT (EQ (\GETBASE \EM.CURSORY 0) Y))) (COND (\SOFTCURSORUPP (\SOFTCURSORDOWN) (\SOFTCURSORUPCURRENT] (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORDOWN [LAMBDA NIL (* kbr%: " 6-Jul-85 00:09") (* Take COLOR cursor down.  *) (PROG (DISPINTERRUPT) (* \SOFTCURSORUPP must be set to NIL  before BITBLTing. *) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP NIL) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT6 0) (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (CURSORPROP [LAMBDA X (* kbr%: "11-Jan-86 20:03") (COND ((IGREATERP X 2) (PUTCURSORPROP (ARG X 1) (ARG X 2) (ARG X 3))) ((EQ X 2) (GETCURSORPROP (ARG X 1) (ARG X 2))) (T (\ILLEGAL.ARG NIL]) (GETCURSORPROP [LAMBDA (CURSOR PROP) (* kbr%: "26-Apr-85 11:18") (LISTGET (fetch (CURSOR CUDATA) of CURSOR) PROP]) (PUTCURSORPROP [LAMBDA (CURSOR PROP VALUE) (* kbr%: "26-Apr-85 11:18") (PROG (OLDDATA OLDVALUE) (SETQ OLDDATA (fetch (CURSOR CUDATA) of CURSOR)) [COND [OLDDATA (SETQ OLDVALUE (LISTGET OLDDATA PROP)) (COND (VALUE (LISTPUT OLDDATA PROP VALUE)) (OLDVALUE (COND [(EQ (CAR OLDDATA) PROP) (replace (CURSOR CUDATA) of CURSOR with (CDDR (fetch (CURSOR CUDATA) of CURSOR] (T (FOR TAIL ON (CDR OLDDATA) BY (CDDR TAIL) WHEN (EQ (CADR TAIL) PROP) DO (FRPLACD TAIL (CDDDR TAIL)) (RETURN] (VALUE (replace (CURSOR CUDATA) of CURSOR with (LIST PROP VALUE] (RETURN OLDVALUE]) (\CURSORBITSPERPIXEL [LAMBDA (CURSOR NEWBITSPERPIXEL) (* kbr%: "12-May-85 17:15") (* Swap in NEWBITSPERPIXEL IMAGE and MASK, creating them if necessary.  *) (PROG (OLDBITSPERPIXEL OLDIMAGE OLDMASK WHITE BLACK NEWIMAGE NEWMASK) (SETQ OLDBITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of CURSOR)) (COND ((EQ OLDBITSPERPIXEL NEWBITSPERPIXEL) (RETURN))) (* Save OLDIMAGE and OLDMASK.  *) (SETQ OLDIMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (SETQ OLDMASK (fetch (CURSOR CUMASK) of CURSOR)) (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME OLDBITSPERPIXEL) OLDIMAGE) (CURSORPROP CURSOR (\CURSORMASKPROPNAME OLDBITSPERPIXEL) OLDMASK) (* Unsave NEWIMAGE and NEWMASK if possible, otherwise create them.  *) [COND [(SETQ NEWIMAGE (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME NEWBITSPERPIXEL))) (* Use cached NEWIMAGE & NEWMASK.  *) (SETQ NEWMASK (CURSORPROP CURSOR (\CURSORMASKPROPNAME NEWBITSPERPIXEL] (T (* Create NEWIMAGE & NEWMASK.  *) (SETQ WHITE (MASK.1'S 0 NEWBITSPERPIXEL)) (SETQ BLACK 0) (SETQ NEWIMAGE (COLORIZEBITMAP (CURSORPROP CURSOR 'IMAGE1) BLACK WHITE NEWBITSPERPIXEL)) (SETQ NEWMASK (COLORIZEBITMAP (CURSORPROP CURSOR 'MASK1) BLACK WHITE NEWBITSPERPIXEL] (replace (CURSOR CUIMAGE) of CURSOR with NEWIMAGE) (replace (CURSOR CUMASK) of CURSOR with NEWMASK]) (\CURSORIMAGEPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'IMAGE1) (4 'IMAGE4) (8 'IMAGE8) (SHOULDNT]) (\CURSORMASKPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'MASK1) (4 'MASK4) (8 'MASK8) (SHOULDNT]) ) (DEFINEQ (CURSORCREATE [LAMBDA (IMAGE MASK HOTSPOTX HOTSPOTY DATA) (* ; "Edited 10-Jul-92 16:32 by cat") (* ; "Edited 31-Jul-87 10:01 by jds") (* ;; "creates a cursor from a bitmap. HOTSPOTX and HOTSPOTY specify the hotspot.") (* ;; "INVARIANTS: the hot spot X and Y must be in the range 0..(width - 1) and 0..(height - 1), respectively.") (PROG (CURSOR) (COND ((OR (FIXP MASK) (POSITIONP MASK)) (* ;; "If Mask is a fixp then we presume this is the old arg list (bitmap x y). the cursor filepkgtype has been changed to write the new arg list. The other is provided for (dubious) compatibility") (SETQ HOTSPOTY HOTSPOTX) (SETQ HOTSPOTX MASK) (SETQ MASK NIL))) (* ;; "Make sure that the image and mask bitmaps are no larger than the hardware cursor, i.e. 16x16 bits [AR 8916 7/31/87]:") (COND ((OR (IGREATERP (BITMAPWIDTH IMAGE) 16) (IGREATERP (BITMAPHEIGHT IMAGE) 16)) (* ; "IMAGE is too big.") (\ILLEGAL.ARG IMAGE)) ((NOT MASK) (* ; "No mask, so it's OK") ) ((OR (IGREATERP (BITMAPWIDTH MASK) 16) (IGREATERP (BITMAPHEIGHT MASK) 16)) (* ; "MASK is too big.") (\ILLEGAL.ARG MASK))) [COND ((POSITIONP HOTSPOTX) (* ;;  "The hot spot can be specified as a position in one arg, rather than X and Y in two:") (SETQ HOTSPOTY (fetch (POSITION YCOORD) of HOTSPOTX)) (SETQ HOTSPOTX (fetch (POSITION XCOORD) of HOTSPOTX] (SETQ CURSOR (create CURSOR CUIMAGE _ IMAGE CUMASK _ (OR MASK IMAGE) CUHOTSPOTX _ (IMAX 0 (IMIN (SUB1 (BITMAPWIDTH IMAGE)) (OR (FIXP HOTSPOTX) 0))) CUHOTSPOTY _ [IMAX 0 (IMIN (SUB1 (BITMAPHEIGHT IMAGE)) (OR (FIXP HOTSPOTY) (SUB1 (BITMAPHEIGHT IMAGE] CUDATA _ DATA)) (RETURN CURSOR]) (CURSOR [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 24-Mar-87 18:30 by jds") (* ;; "Installs NEWCURSOR as the cursor and returns the old cursor state. If INVERTFLG is non-NIL, the cursor image is inverted during installation. If NEWCURSOR is NIL, just returns the current cursor state.") (DECLARE (GLOBALVARS DEFAULTCURSOR \SOFTCURSORP)) (PROG (OLDCURSOR) (SETQ OLDCURSOR \CURRENTCURSOR) (COND ((EQ NEWCURSOR T) (* ;  "If NEWCURSOR is T, use the system default cursor.") (SETQ NEWCURSOR DEFAULTCURSOR))) (COND [(\CURSOR-VALID-P NEWCURSOR \SOFTCURSORP) (* ;  "Only install the cursor if it's a real, valid one.") (\CURSORDOWN) (\CURSORUP NEWCURSOR INVERTFLG) (* ;  "set after adjustment to avoid confusion about hotspot during adjustment.") (SETQ \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (SETQ \CURSORHOTSPOTY (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR] (NEWCURSOR (* ; "NEWCURSOR = NIL means just return the old one, so only error if one got specified that wasn't valid.") (\ILLEGAL.ARG NEWCURSOR))) (RETURN OLDCURSOR]) (\CURSOR-VALID-P [LAMBDA (CURSOR SOFT?) (* ; "Edited 25-Mar-87 09:41 by jds") (* ;; "It returns T if CURSOR is a valid cursor. Validity depends on whether it's meant to be displayed using the cursor hardware or the cursor software.") (* ;; "This is really wed to the D-machine display architecture. ") (AND (CURSORP CURSOR) (COND (SOFT? T) (T (LET ((IMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (HOTSPOT-X (fetch (CURSOR CUHOTSPOTX) of CURSOR)) (HOTSPOT-Y (fetch (CURSOR CUHOTSPOTY) of CURSOR))) (* ;; "The bitmap must be <= 16x16, and the hot spot must be within the cursor if we're using hardware cursor.") (AND (>= 16 (BITMAPWIDTH IMAGE)) (>= 16 (BITMAPHEIGHT IMAGE)) (<= 0 HOTSPOT-X) (< HOTSPOT-X 16) (<= 0 HOTSPOT-Y) (< HOTSPOT-Y 16]) (\CURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* kbr%: "18-Aug-85 14:38") (UNINTERRUPTABLY (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (COND ((AND (EQ (fetch (CURSOR CUIMAGE) of NEWCURSOR) (fetch (CURSOR CUMASK) of NEWCURSOR)) (ILEQ (fetch (BITMAP BITMAPWIDTH) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORWIDTH) (ILEQ (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORHEIGHT) (EQ \CURSORDESTINATION ScreenBitMap)) (\HARDCURSORUP NEWCURSOR INVERTFLG)) (T (\SOFTCURSORUP NEWCURSOR))) (ADJUSTCURSORPOSITION (IDIFFERENCE \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (IDIFFERENCE (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR)) \CURSORHOTSPOTY)))]) (\CURSORPOSITION [LAMBDA (XPOS YPOS) (* ; "Edited 19-Mar-98 14:41 by jds") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND (NIL (* ;; "Removed 2000/1/3 JDS so mousr cursors work.") (ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND (NIL (ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (COND (\SOFTCURSORP (\SOFTCURSORPOSITION XPOS YPOS))) [PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Need to notify DAYBREAK IOP to  move cursor. *) (\DoveDisplay.SetCursorPosition XPOS YPOS] NIL]) (\CURSORDOWN [LAMBDA NIL (* kbr%: "12-Jun-85 17:21") (UNINTERRUPTABLY (COND (\SOFTCURSORP (\SOFTCURSORDOWN)) (T (\HARDCURSORDOWN))))]) (ADJUSTCURSORPOSITION [LAMBDA (DELTAX DELTAY) (* kbr%: " 6-Jan-86 11:55") (COND [(POSITIONP DELTAX) (\CURSORPOSITION (IPLUS (fetch (POSITION XCOORD) of DELTAX) (\XMOUSECOORD)) (IPLUS (fetch (POSITION YCOORD) of DELTAX) (\YMOUSECOORD] (T (\CURSORPOSITION (IPLUS (OR DELTAX 0) (\XMOUSECOORD)) (IPLUS (OR DELTAY 0) (\YMOUSECOORD]) (CURSORPOSITION [LAMBDA (NEWPOSITION DISPLAYSTREAM OLDPOSITION) (* kbr%: "13-Feb-86 15:53") (PROG (DD) (SETQ DD (\GETDISPLAYDATA DISPLAYSTREAM)) (OR (type? POSITION OLDPOSITION) (SETQ OLDPOSITION (create POSITION))) (freplace (POSITION XCOORD) of OLDPOSITION with (\DSPUNTRANSFORMX (\XMOUSECOORD ) DD)) (freplace (POSITION YCOORD) of OLDPOSITION with (\DSPUNTRANSFORMY (\YMOUSECOORD ) DD)) (COND ((type? POSITION NEWPOSITION) (\CURSORPOSITION (\DSPTRANSFORMX (fetch (POSITION XCOORD) of NEWPOSITION) DD) (\DSPTRANSFORMY (fetch (POSITION YCOORD) of NEWPOSITION) DD))) ((type? SCREENPOSITION NEWPOSITION) (CURSORSCREEN (fetch (SCREENPOSITION SCREEN) of NEWPOSITION) (fetch (SCREENPOSITION XCOORD) of NEWPOSITION) (fetch (SCREENPOSITION YCOORD) of NEWPOSITION))) (NEWPOSITION (\ILLEGAL.ARG NEWPOSITION))) (RETURN OLDPOSITION]) (CURSORSCREEN [LAMBDA (SCREEN XCOORD YCOORD) (* gbn%: "25-Jan-86 16:53") (* * sets up SCREEN to be the current screen, XCOORD %, YCOORD is initial pos  of cursor on SCREEN) (COND ((NULL XCOORD) (SETQ XCOORD 0))) (COND ((NULL YCOORD) (SETQ YCOORD 0))) (PROG (DESTINATION) (SETQ DESTINATION (fetch (SCREEN SCDESTINATION) of SCREEN)) (\CURSORDOWN) (SETQ \CURSORSCREEN SCREEN) (\CURSORDESTINATION DESTINATION) (\CURSORUP \CURRENTCURSOR) (\CURSORPOSITION XCOORD YCOORD]) (CURSOREXIT [LAMBDA NIL (* gbn%: "25-Jan-86 16:52") (* * called when cursor moves off the screen edge) (DECLARE (GLOBALVARS LASTSCREEN LASTMOUSEX LASTMOUSEY)) (PROG (SCREEN XCOORD YCOORD SCREEN2 XCOORD2 YCOORD2) (SETQ SCREEN LASTSCREEN) (SETQ XCOORD LASTMOUSEX) (SETQ YCOORD LASTMOUSEY) (SETQ SCREEN2 (COND ((EQ SCREEN \MAINSCREEN) \COLORSCREEN) (T \MAINSCREEN))) (* generalize for more than two  screens (or alternate physical  arrangement of screens.)) (COND ((EQ XCOORD 0) (SETQ XCOORD2 (IDIFFERENCE (fetch (SCREEN SCWIDTH) of SCREEN2) 2))) ((EQ XCOORD (SUB1 (fetch (SCREEN SCWIDTH) of SCREEN))) (SETQ XCOORD2 1)) (T (RETURN))) [SETQ YCOORD2 (IQUOTIENT (ITIMES YCOORD (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN2)) ) (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN] (CURSORSCREEN SCREEN2 XCOORD2 YCOORD2]) (FLIPCURSOR - [LAMBDA NIL (* ; "Edited 24-Apr-88 00:04 by MASINTER") - (PROG (ADDR) - (COND - ((NOT \SOFTCURSORP) - (SETQ ADDR \EM.CURSORBITMAP) - (FRPTQ HARDCURSORHEIGHT [\PUTBASE ADDR 0 (LOGXOR (\GETBASE ADDR 0) - (CONSTANT (SUB1 (EXPT 2 HARDCURSORWIDTH - ] - (SETQ ADDR (\ADDBASE ADDR 1))) - (SELECTC \MACHINETYPE - (\DAYBREAK (\DoveDisplay.SetCursorShape)) - (\MAIKO (AND \CURRENTCURSOR (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) - of \CURRENTCURSOR) - (fetch (CURSOR CUHOTSPOTY) of - \CURRENTCURSOR - )))) - NIL]) (FLIPCURSORBAR - [LAMBDA (N) (* ; "Edited 19-Mar-98 14:23 by jds") - -(* ;;; "Inverts the Nth line of the cursor, N = 0 being the top") - - (COND - ((NOT \SOFTCURSORP) - (\PUTBASE \EM.CURSORBITMAP N (LOGXOR (\GETBASE \EM.CURSORBITMAP N) - MAX.SMALLP)) - (SELECTC \MACHINETYPE - (\DAYBREAK (* ; "Notify IOP") - (\DoveDisplay.SetCursorShape)) - (\MAIKO (AND \CURRENTCURSOR (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) - of \CURRENTCURSOR) - (fetch (CURSOR CUHOTSPOTY) of - \CURRENTCURSOR - )))) - NIL]) (LASTMOUSEX [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse x position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMX LASTMOUSEX (\GETDISPLAYDATA DS]) (LASTMOUSEY [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse y position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMY LASTMOUSEY (\GETDISPLAYDATA DS]) (CREATEPOSITION [LAMBDA (XCOORD YCOORD) (* rmk%: " 6-Aug-84 13:43") (create POSITION XCOORD _ (OR XCOORD 0) YCOORD _ (OR YCOORD 0]) (POSITIONP [LAMBDA (X) (* rrb "25-AUG-82 11:04") (* is X a position? For now just a cons check but should be made a datatype.) (AND (LISTP X) (NUMBERP (CAR X)) (NUMBERP (CDR X)) X]) (CURSORHOTSPOT [LAMBDA (NEWPOSITION) (* gbn%: "26-Jan-86 15:36") (* returns the current cursor hot spot and sets the hot spot to NEWPOSITON if  one is given.) (PROG1 (create POSITION XCOORD _ \CURSORHOTSPOTX YCOORD _ \CURSORHOTSPOTY) (COND ((POSITIONP NEWPOSITION) (SETQ \CURSORHOTSPOTX (fetch (POSITION YCOORD) of NEWPOSITION)) (SETQ \CURSORHOTSPOTY (fetch (POSITION YCOORD) of NEWPOSITION]) ) (PUTPROPS CURSORPROP ARGNAMES (NIL (CURSOR PROP {NEWVALUE}) . U)) (RPAQ? \CURSORHOTSPOTX 0) (RPAQ? \CURSORHOTSPOTY 0) (RPAQ? \CURRENTCURSOR NIL) (RPAQ? \SOFTCURSORWIDTH NIL) (RPAQ? \SOFTCURSORHEIGHT NIL) (RPAQ? \SOFTCURSORP NIL) (RPAQ? \SOFTCURSORUPP NIL) (RPAQ? \SOFTCURSORUPBM NIL) (RPAQ? \SOFTCURSORDOWNBM NIL) (RPAQ? \SOFTCURSORBBT1 NIL) (RPAQ? \SOFTCURSORBBT2 NIL) (RPAQ? \SOFTCURSORBBT3 NIL) (RPAQ? \SOFTCURSORBBT4 NIL) (RPAQ? \SOFTCURSORBBT5 NIL) (RPAQ? \SOFTCURSORBBT6 NIL) (RPAQ? \CURSORSCREEN NIL) (RPAQ? \CURSORDESTINATION NIL) (RPAQ? \CURSORDESTHEIGHT 808) (RPAQ? \CURSORDESTWIDTH 1024) (RPAQ? \CURSORDESTRASTERWIDTH 64) (RPAQ? \CURSORDESTLINE 0) (RPAQ? \CURSORDESTLINEBASE NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) ) (DEFINEQ (GETMOUSESTATE [LAMBDA NIL (* kbr%: " 6-Jul-85 14:16") (* Reads the current state of the  mouse and keyboard) (SETQ LASTMOUSEX (\XMOUSECOORD)) (SETQ LASTMOUSEY (\YMOUSECOORD)) (SETQ LASTMOUSEBUTTONS (LOGXOR (LOGAND (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) \MOUSE.ALLBITS) \MOUSE.ALLBITS)) (SETQ LASTKEYBOARD (\EVENTKEYS)) (SETQ LASTSCREEN \CURSORSCREEN) NIL]) (\EVENTKEYS [LAMBDA NIL (* rmk%: " 4-JUN-81 22:58") (* Returns the state of the various keys that are represented in mouse events) (LOGOR (COND ((KEYDOWNP 'LOCK) 128) (T 0)) (COND ((KEYDOWNP 'LSHIFT) 64) (T 0)) (COND ((KEYDOWNP 'CTRL) 32) (T 0)) (COND ((KEYDOWNP 'RSHIFT) 8) (T 0)) (COND ((KEYDOWNP 'BLANK-TOP) 4) (T 0)) (COND ((KEYDOWNP 'BLANK-MIDDLE) 2) (T 0)) (COND ((KEYDOWNP 'BLANK-BOTTOM) 1) (T 0]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (PUTPROPS \XMOUSECOORD MACRO (NIL (IPLUS \CURSORHOTSPOTX (SIGNED (\GETBASE \EM.CURSORX 0) BITSPERWORD)))) (PUTPROPS \YMOUSECOORD MACRO [NIL (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) (IPLUS \CURSORHOTSPOTY (SIGNED (\GETBASE \EM.CURSORY 0) BITSPERWORD]) ) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION) (RPAQ \SFPosition (CREATEPOSITION)) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (BLOCKRECORD KEYBOARDEVENT ((W0 WORD) (W1 WORD) (W2 WORD) (W3 WORD) (WU WORD) (W4 WORD) (W5 WORD) (TIME FIXP) (MOUSESTATE BITS 3) (1SHIFT FLAG) (2SHIFT FLAG) (LOCK FLAG) (CTRL FLAG) (META FLAG) (FONT FLAG) (USERMODE1 FLAG) (USERMODE2 FLAG) (USERMODE3 FLAG) (ALTGRAPH FLAG) (DEADKEYPENDING FLAG) (* ; "T if the last key was a dead (accent) key, and we should generate an accented character if possible.") (NIL BITS 2) (MOUSEX WORD) (MOUSEY WORD) (DEADKEY-ALIST XPOINTER) (* ;  "The ALIST describing accents possible from teh last dead key.") ) (CREATE (\ALLOCBLOCK (FOLDHI \KEYBOARDEVENT.SIZE WORDSPERCELL))) W0 _ ALLUP W1 _ ALLUP W2 _ ALLUP W3 _ ALLUP W4 _ ALLUP W5 _ ALLUP WU _ ALLUP MOUSESTATE _ \DLMOUSE.UP [ACCESSFNS KEYBOARDEVENT ((SIZE (INDEXF (fetch MOUSEY of DATUM))) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) DATUM) (fetch (KEYBOARDEVENT 2SHIFT) DATUM))) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT SHIFT) DATUM) (fetch (KEYBOARDEVENT LOCK) DATUM] LOCK _ (XKEYDOWNP 'LOCK) TIME _ 0 DEADKEYPENDING _ NIL) ) (DECLARE%: EVAL@COMPILE (RPAQ \KEYBOARDEVENT.FIRST NRINGINDEXWORDS) (RPAQQ \KEYBOARDEVENT.SIZE 14) (RPAQ \KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383))) [CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] ) ) (DEFINEQ (MACHINETYPE [LAMBDA NIL (* ; "Edited 30-Mar-88 10:27 by Snow") (SELECTC (fetch MachineType of \InterfacePage) (\DORADO 'DORADO) (\DANDELION 'DANDELION) (\DAYBREAK (* This is \DAYBREAK internally) 'DOVE) (\MAIKO 'MAIKO) NIL]) (SETMAINTPANEL [LAMBDA (N) (* mpl "21-Jul-85 18:15") (SELECTC \MACHINETYPE (\DANDELION (replace DLMAINTPANEL of \IOPAGE with N)) (\DOLPHIN ((OPCODES MISC1 3) (\DTEST N 'SMALLP))) (\DAYBREAK ((OPCODES DOVEMISC 2) (\DTEST N 'SMALLP))) NIL]) ) (* ; "DLion beeper") (DEFINEQ (BEEPON [LAMBDA (FREQ) (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPFREQ of \IOPAGE with (IQUOTIENT 1843200 (IMAX FREQ 29))) (replace DLBEEPCMD of \IOPAGE with 32768)) (\DAYBREAK (\DoveMisc.BeepOn FREQ)) (\MAIKO (SUBRCALL KEYBOARDBEEP T FREQ)) (PROGN NIL)) NIL]) (BEEPOFF [LAMBDA NIL (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPCMD of \IOPAGE with 32769)) (\DAYBREAK (\DoveMisc.BeepOff)) (\MAIKO (SUBRCALL KEYBOARDBEEP NIL NIL)) (PROGN NIL)) NIL]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (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) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (WITHOUT-INTERRUPTS [NLAMBDA (FORM) (* lmm "18-Apr-85 02:53") (PROG (VAL) (\KEYBOARDOFF) (SETQ VAL (DISPLAYDOWN FORM)) (\KEYBOARDON) (RETURN VAL]) ) (* ; "Compile locked fns together for locality") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN) ) (DECLARE%: DONTCOPY (ADDTOVAR INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND)))) (ADDTOVAR RDCOMS (FNS \SETIOPOINTERS)) ) (PUTPROPS LLKEY FILETYPE :BCOMPL) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML WITHOUT-INTERRUPTS) (ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT) ) (PUTPROPS LLKEY COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1989 1990 1992 1999 1920 2000 2018)) (DECLARE%: DONTCOPY (FILEMAP (NIL (14799 21895 (BKSYSCHARCODE 14809 . 15158) (\CLEARSYSBUF 15160 . 15718) (\GETKEY 15720 . 16895) (\NSYSBUFCHARS 16897 . 17537) (\SAVESYSBUF 17539 . 19151) (\SYSBUFP 19153 . 19457) ( \GETSYSBUF 19459 . 19639) (\PUTSYSBUF 19641 . 20855) (\PEEKSYSBUF 20857 . 21893)) (23192 59371 ( \KEYBOARDINIT 23202 . 24925) (\KEYBOARDEVENTFN 24927 . 29627) (\ALLOCLOCKED 29629 . 30219) ( \SETIOPOINTERS 30221 . 34690) (\KEYBOARDOFF 34692 . 35039) (\KEYBOARDON 35041 . 35353) (\KEYHANDLER 35355 . 35486) (\KEYHANDLER1 35488 . 42806) (\RESETKEYBOARD 42808 . 44317) (\DOMOUSECHORDING 44319 . 47990) (\DOTRANSITIONS 47992 . 48669) (\DECODETRANSITION 48671 . 55360) (MOUSECHORDWAIT 55362 . 56045) (\TRACKCURSOR 56047 . 59369)) (93113 116472 (KEYACTION 93123 . 93967) (KEYACTIONTABLE 93969 . 95151) (KEYBOARDTYPE 95153 . 96255) (RESETKEYACTION 96257 . 98016) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 98018 . 101425) (\KEYACTION1 101427 . 112048) (KEYDOWNP 112050 . 112385) (KEYNUMBERP 112387 . 112585) (\KEYNAMETONUMBER 112587 . 113281) (MODIFY.KEYACTIONS 113283 . 114144) (METASHIFT 114146 . 115090) ( SHIFTDOWNP 115092 . 116470)) (116535 116831 (SETUP.OFFICE.KEYBOARD 116545 . 116829)) (119841 121553 ( \INIT.KEYBOARD.STREAM 119851 . 121551)) (121818 138195 (\DOBUFFEREDTRANSITIONS 121828 . 137258) ( \TIMER.INTERRUPTFRAME 137260 . 137985) (\PERIODIC.INTERRUPTFRAME 137987 . 138193)) (138449 142526 ( \HARDCURSORUP 138459 . 140341) (\HARDCURSORPOSITION 140343 . 142379) (\HARDCURSORDOWN 142381 . 142524) ) (142527 166587 (CURSOR.INIT 142537 . 146237) (\CURSORDESTINATION 146239 . 148557) (\SOFTCURSORUP 148559 . 153813) (\SOFTCURSORUPCURRENT 153815 . 160851) (\SOFTCURSORPOSITION 160853 . 161618) ( \SOFTCURSORDOWN 161620 . 162328) (CURSORPROP 162330 . 162672) (GETCURSORPROP 162674 . 162862) ( PUTCURSORPROP 162864 . 164019) (\CURSORBITSPERPIXEL 164021 . 166137) (\CURSORIMAGEPROPNAME 166139 . 166363) (\CURSORMASKPROPNAME 166365 . 166585)) (166588 184538 (CURSORCREATE 166598 . 169273) (CURSOR 169275 . 171087) (\CURSOR-VALID-P 171089 . 172176) (\CURSORUP 172178 . 173893) (\CURSORPOSITION 173895 . 176423) (\CURSORDOWN 176425 . 176658) (ADJUSTCURSORPOSITION 176660 . 177238) (CURSORPOSITION 177240 . 178782) (CURSORSCREEN 178784 . 179440) (CURSOREXIT 179442 . 180833) (FLIPCURSOR 180835 . 181961) ( FLIPCURSORBAR 181963 . 182943) (LASTMOUSEX 182945 . 183199) (LASTMOUSEY 183201 . 183455) ( CREATEPOSITION 183457 . 183663) (POSITIONP 183665 . 183949) (CURSORHOTSPOT 183951 . 184536)) (185776 187324 (GETMOUSESTATE 185786 . 186445) (\EVENTKEYS 186447 . 187322)) (193751 194547 (MACHINETYPE 193761 . 194161) (SETMAINTPANEL 194163 . 194545)) (194577 195716 (BEEPON 194587 . 195240) (BEEPOFF 195242 . 195714)) (196167 196430 (WITHOUT-INTERRUPTS 196177 . 196428))))) STOP \ No newline at end of file diff --git a/sources/MAKEINIT.LCOM.~9~ b/sources/MAKEINIT.LCOM.~9~ deleted file mode 100644 index 78c18b63287037aa1cb27cf07da9195bd7065b78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12989 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 T5D*VNNKa~=8mALuxSjt84Yc;X diff --git a/sources/MAKEINIT.~1~ b/sources/MAKEINIT.~1~ deleted file mode 100644 index 617a16be..00000000 --- a/sources/MAKEINIT.~1~ +++ /dev/null @@ -1 +0,0 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "27-Oct-92 14:10:38" "{Pele:mv:envos}Sources>MAKEINIT.;7" 26118 changes to%: (FNS I.ATOMNUMBER I.\ATOMCELL) (FILES MEM) previous date%: "25-Jan-91 16:00:30" "{Pele:mv:envos}Sources>MAKEINIT.;3") (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT MAKEINITCOMS) (RPAQQ MAKEINITCOMS ((FNS LOADMAKEINIT LOADMKIFILES RELOAD MAKEINIT MKI.START) (COMS (* ;  "reading compiled files and processing well-known expressions") (FNS MKI.PASSFILE SCRATCHARRAY DOFORM CONSTFORMP NOTICECOMS EVALFORMAKEINIT) (FNS I.ADDTOVAR I.DECLARE%: I.DEFINE-FILE-INFO I.FILECREATED I.PUTPROPS I.RPAQ I.RPAQQ I.RPAQ? I.SETTOPVAL I.NOUNDO) (PROP MKI ADDTOVAR DECLARE%: DEFINE-FILE-INFO FILECREATED PUTPROPS RPAQ RPAQ? RPAQQ LISPXPRINT PRETTYCOMPRINT * SETTOPVAL SETQQ SETQ /SETTOPVAL)) (FNS I.ATOMNUMBER I.\ATOMCELL I.FIXUPNUM I.FIXUPPTR I.FIXUPSYM I.WORDSPERNAMEENTRY I.SETSTKNTOFFSET) (COMS (* ; "stuff for MAXC") (FNS MKI.ATOM MKI.IEEE)) [COMS (* ;  "stuff to maintain symbol values, prop lists during makeinit--all dumped at end.") (FNS MKI.DSET MKI.ADDTO MKI.PUTPROP) (VARS (MKI.ARRAY) (MKI.TVHA (HASHARRAY 400)) (MKI.PLHA (HASHARRAY 150)) (MKI.ATOMARRAY (HASHARRAY 5000)) (INIT.EXT 'SYSOUT] (COMS (FNS DUMPVP BOUTZEROS BIN16 BOUT16) (VARS (MKI.FirstDataByte 1024) (MKI.Page0Byte 512) (MKI.DATE (DATE)) MKI.CODESTARTOFFSET MKI.SEQUENTIAL PRINTEXPRS)) (INITVARS (PRINTEXPRS T) (REMOTECOMPILE.EXT COMPILE.EXT)) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (PUTPROP (NAMEFIELD (INPUT) T) 'LOADDATE (GETFILEINFO (INPUT) 'ICREATIONDATE] (DECLARE%: EVAL@COMPILE (PROP MACRO SETXVAR IEQ) DONTCOPY (FILES (LOADCOMP) MEM)))) (DEFINEQ (LOADMAKEINIT (LAMBDA (LARGEFLG) (* lmm "31-JUL-81 14:27") (SELECTQ (SYSTEMTYPE) ((D ALTO)) (PROGN (ADDTOVAR DIRECTORIES BLISP) (GCGAG 1000) (COND ((NOT LARGEFLG) (SETSEPR (QUOTE (%| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26)) 1 FILERDTBL) (MINFS 45000 (QUOTE ARRAYP)) (MINFS 10000 (QUOTE FIXP)) (MINFS 3000 (QUOTE STRING.CHARS)) (MINFS 2000 (QUOTE ATOM.CHARS)))) (MOVD? (QUOTE NILL) (QUOTE MKNUMATOM)) (* ;; "This is a kludge to get around the problem that, while MKATOM is in LLNEW, MKNUMATOM is not, and MKATOM calls MKNUMATOM when given an atom beginning with a digit. It turns out that MKNUMATOM will always return NIL in the cases called from MAKEINIT because MAKEINIT is merely copying things which it knows are really LITATOM and spelled like it.") (MOVD? (QUOTE *) (QUOTE BLOCKRECORD)) (PUTDQ? FIXSPELL1 (LAMBDA (OLD NEW) (PRINT (LIST OLD (QUOTE ->) NEW) T T))))) (LOADMKIFILES) (SELECTQ (SYSTEMTYPE) ((D ALTO)) (PROGN (MINFS 10000 (QUOTE ALTOPOINTER)) (* ; "doesn't work until after datatype declaration has been loaded") (RECLAIM (QUOTE ARRAYP)) (RECLAIM (QUOTE ATOM.CHARS)) (MINFS 10000 (QUOTE ARRAYP)) (MINFS 5000 (QUOTE LISTP)) (SYSOUT (QUOTE MKI.SAV))))) ) (LOADMKIFILES (LAMBDA NIL (* mjs "13-Mar-84 14:41") (for X in (UNION MAKEINITFILES (SELECTQ (SYSTEMTYPE) ((ALTO D) NIL) MAXC.MAKEINITFILES)) do (RELOAD (PACKFILENAME (QUOTE BODY) X (QUOTE EXTENSION) COMPILE.EXT)))) ) (RELOAD (LAMBDA (FILE) (* lmm "13-APR-81 21:16") (PROG (DATE FULLFILENAME) RETRY (COND ((ILESSP (OR (GETPROP FILE (QUOTE LOADDATE)) MIN.INTEGER) (SETQ DATE (GETFILEINFO (SETQ FULLFILENAME (OR (FINDFILE FILE T) (GO NOTFOUND))) (QUOTE ICREATIONDATE)))) (LOAD FULLFILENAME T) (PUTPROP FILE (QUOTE LOADDATE) DATE))) (RETURN T) NOTFOUND (COND ((GETP (NAMEFIELD FILE) (QUOTE FILEDATES)) (PRINT (CONS FILE (QUOTE (already loaded))) T) (RETURN))) (ERROR FILE "not found.") (GO RETRY))) ) (MAKEINIT [LAMBDA (VERSIONS TYPE TOFILE LOADUPDIRS FONTDIRS) (* ; "Edited 19-Jul-90 17:26 by jds") (LOADMKIFILES) (* ;  "Load the files that have to be here to start making the init.") (PROG ([TYPELST (OR (LISTP TYPE) (OR (CDR (ASSOC TYPE MAKEINITTYPES)) (ERROR TYPE '?] FILES SIZEGUESS AFTERINITFILESET EXPRESSIONS) (* ;; "TYPELST is a list of the form (type file-list after-init-files init-size-guess)") (SETQ FILES (CADR TYPELST)) (SETQ AFTERINITFILESET (CADDR TYPELST)) (SETQ SIZEGUESS (CADDDR TYPELST)) (RESETLST [RESETSAVE (OUTPUT (SETQ TOFILE (OPENSTREAM (PACKFILENAME.STRING 'BODY (OR TOFILE (CAR TYPELST) 'XXX) 'EXTENSION INIT.EXT) 'OUTPUT 'NEW 8 (COND [NIL (* ;  "Can't do this until we can do GETFILEPTR on a sequential output file") (APPEND MKI.SEQUENTIAL '((TYPE BINARY)) (AND SIZEGUESS (CONS (LIST 'LENGTH (UNFOLD SIZEGUESS BYTESPERPAGE] (T '((TYPE BINARY] (RESETSAVE NIL (LIST [FUNCTION (LAMBDA (FL) (AND (OPENP FL) (CLOSEF FL)) (AND RESETSTATE (DELFILE (FULLNAME FL] TOFILE)) (PROG ((OUTX TOFILE)) (SETQ DIRECTORIES LOADUPDIRS) (MKI.START) (for X in FILES do (MKI.PASSFILE X)) (* ;; "Generally loads the files in 0LISPSET and 1LISPSET, with 2LISPSET getting loaded immediately after the init starts.") (AND LOADUPDIRS (MKI.DSET 'LOADUPDIRECTORIES LOADUPDIRS)) (AND FONTDIRS (MKI.DSET 'DISPLAYFONTDIRECTORIES FONTDIRS)) [COND (AFTERINITFILESET (* ; "Load stuff that has to be loaded before we can call LOADUP. Ugly expression here is because FILESLOAD is on MACHINEINDEPENDENT.") [MKI.ADDTO 'MAKEINIT.EXPRESSIONS `((MAPC ',(EVAL AFTERINITFILESET) (FUNCTION (LAMBDA (FILE) (OR [SOME LOADUPDIRECTORIES (FUNCTION (LAMBDA (DIR FL) (COND ((SETQ FL (INFILEP (PACKFILENAME.STRING 'DIRECTORY DIR 'NAME FILE 'EXTENSION COMPILE.EXT))) (LOAD FL 'SYSLOAD) T] (PRINT (CONS FILE '(not found)) T] (MKI.ADDTO 'BOOTFILES '(MAKEINIT.EXPRESSIONS] (I.MAKEINITLAST VERSIONS))) (RETURN (FULLNAME TOFILE]) (MKI.START (LAMBDA NIL (* bvm%: "12-Dec-84 15:23") (SETQ RESETPTR) (SETQ RESETPC) (BOUTZEROS MKI.FirstDataByte) (CLRHASH MKI.TVHA) (CLRHASH MKI.PLHA) (CLRHASH MKI.ATOMARRAY) (RESETMEMORY) (SETQ MKI.VALUES (for X in INITVALUES bind Y collect (SET (SETQ Y (PACK* "I." (SUBSTRING (CAR X) 2 -1))) (EVAL (CADR X))) Y)) (SETQ MKI.PTRS (for X in INITPTRS bind Y collect (SET (SETQ Y (PACK* "I." (SUBSTRING (CAR X) 2 -1))) (CADR X)) Y)) (I.MAKEINITFIRST) (MKI.DSET NIL NIL) (MKI.DSET T T) (MKI.DSET (QUOTE MAKEINITDATES) (LIST MKI.DATE (DATE))) (for X in INITCONSTANTS when (NEQ (CAR X) (QUOTE *)) do (I.FSETVAL (CAR X) (COND ((LISTP (CADR X)) (I.VAG2 (CAADR X) (CADR (CADR X)))) (T (I.\COPY (CADR X))))))) ) ) (* ; "reading compiled files and processing well-known expressions") (DEFINEQ (MKI.PASSFILE (LAMBDA (FILESET) (* ; "Edited 30-Mar-87 17:17 by bvm:") (* ;;; "Read a DCOM file and load its contents into the INIT.") (* ;;; "FILESET can be one of a number, which is a LISPSET number, or a list of file names, or a file name") (COND ((NUMBERP FILESET) (* ; "We were given a nLISPSET number. Pack it up to get the list of files") (MKI.PASSFILE (EVALV (PACK* FILESET (QUOTE LISPSET))))) ((LISTP FILESET) (* ; "We were given a list of file names") (MAPC FILESET (FUNCTION MKI.PASSFILE))) (T (* ; "It's a file name. Read it in.") (INPUT (SETQ FILESET (OPENSTREAM (OR (FINDFILE (PACKFILENAME.STRING (QUOTE BODY) FILESET (QUOTE EXTENSION) REMOTECOMPILE.EXT) T) FILESET) (QUOTE INPUT) (QUOTE OLD) 8 MKI.SEQUENTIAL))) (MKI.ADDTO (QUOTE LOADEDFILELST) (LIST (SETQ FILESET (FULLNAME FILESET)))) (PRINT FILESET T T) (LET* ((FILEROOT (NAMEFIELD FILESET)) (COMSNAMES (LIST (PACK* FILEROOT (QUOTE COMS)))) SKIPVARS MEXPRS X) (DECLARE (SPECVARS COMSNAMES SKIPVARS MEXPRS)) (* ; " used by I.RPAQQ and DOFORM") (* ;;; "Loop here reading from the dcom file into the init.") (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (until (SELECTQ (SETQ X (READ)) ((STOP NIL) (* ; "End of file") T) NIL) do (COND ((NLISTP X) (* ;; "Start of a code object. Skip the code indicator (assume it says to read with DCODERD) and read the code") (IF (NOT (LITATOM (READ))) THEN (ERROR "Bad compiled function" X)) (I.DCODERD X)) (T (* ; "It's a form. go either do it now or add it to the forms to execute inside the init.") (DOFORM X))) finally (COND ((CAR MEXPRS) (* ; "There are expressions to be executed in the INIT when it comes up. Save them.") (MKI.ADDTO (SETQ FILESET (PACK* FILEROOT ".EXPRESSIONS")) (CAR MEXPRS)) (MKI.ADDTO (QUOTE BOOTFILES) (LIST FILESET)))))) (CLOSEF (INPUT)))))) ) (SCRATCHARRAY (LAMBDA (NBYTES ALIGN) (* ; "Edited 30-Mar-87 16:20 by bvm:") (COND ((OR (NULL MKI.ARRAY) (IGREATERP NBYTES (ARRAYSIZE MKI.ARRAY))) (* ;; "make sure the scratch array is big enough. Note that the scratch array is unboxed, not code, since we aren't going to be storing legitimate local code in it (let's not fool the garbage collector too much).") (SETQ MKI.ARRAY (create ARRAYP TYP _ \ST.BYTE BASE _ (\ALLOCBLOCK (FOLDHI NBYTES BYTESPERCELL) UNBOXEDBLOCK.GCT 0 CELLSPERQUAD) LENGTH _ NBYTES ORIG _ 0)))) (for I from 0 to (SUB1 (UNFOLD ALIGN BYTESPERCELL)) do (\BYTESETA MKI.ARRAY I 0)) (* ; "clear the fnheader area") MKI.ARRAY) ) (DOFORM (LAMBDA (X NOPROP) (* bvm%: "30-Aug-86 15:36") (* ;;; "Handle a raw form found in a dcom file that's going into a makeinit.") (LET ((FN (GETPROP (CAR X) (QUOTE MKI)))) (if (AND FN (NOT NOPROP)) then (* ; "it's a local command that can be run `renamed' . Execute it in the local context.") (* ASSERT%: (CALLS I.ADDTOVAR I.DECLARE%: I.DEFINE-FILE-INFO I.DEFLIST I.FILECREATED I.PRETTYDEFMACROS I.PUTPROPS I.RPAQ I.RPAQQ I.SETHASHQ)) (APPLY* FN X) else (* ;; "it's a command that has to be done remotely, since we don't know how to do it from here. Add it to the collection of init expressions.") (COND (PRINTEXPRS (PRINT X T T))) (SETQ MEXPRS (TCONC MEXPRS X))))) ) (CONSTFORMP (LAMBDA (X) (* lmm " 7-MAR-80 08:54") (COND ((LISTP X) (SELECTQ (CAR X) ((QUOTE FUNCTION) X) NIL)) ((LITATOM X) (SELECTQ X (NIL (QUOTE (QUOTE NIL))) (T T) (AND (SETQ X (GETHASH X MKI.TVHA)) (KWOTE (CDR X))))) (T X))) ) (NOTICECOMS (LAMBDA (VAL) (* lmm "10-Mar-85 14:51") (for X in VAL when (LISTP X) do (COND ((AND (EQ (CADR X) (QUOTE *)) (LITATOM (CADDR X))) (COND ((EQ (CAR X) (QUOTE COMS)) (push COMSNAMES (CADDR X))) (T (push SKIPVARS (CADDR X))))) (T (SELECTQ (CAR X) ((COMS DECLARE%:) (NOTICECOMS (CDR X))) NIL))))) ) (EVALFORMAKEINIT (LAMBDA (FORM) (* bvm%: " 2-NOV-83 15:22") (COND ((LISTP FORM) (SELECTQ (CAR FORM) (MKATOM (COND ((STRINGP (CADR FORM)) (MKATOM (CADR FORM))) (T (HELP)))) (HELP))) ((FIXP FORM) FORM) (T (HELP)))) ) ) (DEFINEQ (I.ADDTOVAR (LAMBDA (FORM) (* lmm " 2-DEC-81 23:58") (MKI.ADDTO (CADR FORM) (CDDR FORM)))) (I.DECLARE%: (LAMBDA (FORM) (* lmm "18-FEB-80 14:04") (PROG ((L FORM) (FLAG T) X FN) LP (COND ((NULL (SETQ L (CDR L))) (RETURN)) ((NLISTP (SETQ X (CAR L))) (SELECTQ X ((EVAL@LOAD DOEVAL@LOAD) (SETQ FLAG T)) (DONTEVAL@LOAD (SETQ FLAG NIL)) NIL)) (T (DOFORM X))) (GO LP))) ) (I.DEFINE-FILE-INFO (LAMBDA (FORM) (* bvm%: "30-Aug-86 15:32") (* ;;; "Set reader environment for reading rest of file") (SET-READER-ENVIRONMENT (\DO-DEFINE-FILE-INFO NIL (CDR FORM)))) ) (I.FILECREATED (LAMBDA (X) (* ; "Edited 12-Jan-88 11:00 by bvm") (* ;; "Form is (FILECREATED date filename . otherstuff)") (COND ((NLISTP (CADDR X)) (* ; "FILENAME a list is for the %"compiled on%" expression") (LET ((NAME (NAMEFIELD (CADDR X)))) (MKI.ADDTO (QUOTE BOOTLOADEDFILES) (LIST NAME)) (MKI.PUTPROP NAME (QUOTE FILEDATES) (LIST (CONS (CADR X) (CADDR X)))))))) ) (I.PUTPROPS (LAMBDA (FORM) (* lpd%: "29-APR-77 13:22") (MKI.PUTPROP (CADR FORM) (CADDR FORM) (CADDDR FORM)))) (I.RPAQ (LAMBDA (FORM) (* edited%: "10-Jul-84 14:05") (PROG ((VAL (CADDR FORM)) V) (COND ((SETQ V (CONSTFORMP VAL)) (MKI.DSET (CADR FORM) (EVAL V))) (T (DOFORM (LIST (QUOTE SETTOPVAL) (KWOTE (CADR FORM)) VAL) T))))) ) (I.RPAQQ (LAMBDA (FORM) (* lmm "30-APR-80 22:12") (PROG ((ATM (CADR FORM)) (VAL (CADDR FORM))) (COND ((FMEMB ATM COMSNAMES) (NOTICECOMS VAL)) ((FMEMB ATM SKIPVARS)) (T (MKI.DSET ATM VAL))))) ) (I.RPAQ? (LAMBDA (FORM) (* lmm " 7-MAR-80 08:36") (PROG ((VAL (CADDR FORM)) V) (COND ((SETQ V (CONSTFORMP VAL)) (MKI.DSET (CADR FORM) (EVAL V))) (T (DOFORM (LIST (QUOTE SETTOPVAL) (KWOTE (CADR FORM)) VAL)))))) ) (I.SETTOPVAL (LAMBDA (FORM) (* edited%: "10-Jul-84 14:07") (PROG (V) (if (AND (EQ (CAR (LISTP (CADR FORM))) (QUOTE QUOTE)) (SETQ V (CONSTFORMP (CADDR FORM)))) then (MKI.DSET (CADR (CADR FORM)) (EVAL V)) else (DOFORM FORM T)))) ) (I.NOUNDO (LAMBDA (FORM) (* edited%: "10-Jul-84 14:02") (if (EQ (NTHCHAR (CAR FORM) 1) (QUOTE /)) then (DOFORM (CONS (SUBATOM (CAR FORM) 2 -1) (CDR FORM))) else (SHOULDNT))) ) ) (PUTPROPS ADDTOVAR MKI I.ADDTOVAR) (PUTPROPS DECLARE%: MKI I.DECLARE%:) (PUTPROPS DEFINE-FILE-INFO MKI I.DEFINE-FILE-INFO) (PUTPROPS FILECREATED MKI I.FILECREATED) (PUTPROPS PUTPROPS MKI I.PUTPROPS) (PUTPROPS RPAQ MKI I.RPAQ) (PUTPROPS RPAQ? MKI I.RPAQ?) (PUTPROPS RPAQQ MKI I.RPAQQ) (PUTPROPS LISPXPRINT MKI NILL) (PUTPROPS PRETTYCOMPRINT MKI NILL) (PUTPROPS * MKI NILL) (PUTPROPS SETTOPVAL MKI I.SETTOPVAL) (PUTPROPS SETQQ MKI I.RPAQQ) (PUTPROPS SETQ MKI I.RPAQ) (PUTPROPS /SETTOPVAL MKI I.NOUNDO) (DEFINEQ (I.ATOMNUMBER [LAMBDA (A) (* ;  "Edited 27-Oct-92 14:10 by sybalsky:mv:envos") (* ;; "Given a symbol, return the symbol's atom #, in the INIT being made.") (* ;; "NB that this will work only so long as there are no NEW-SYMBOLs in the INIT, because of the LOLOC.") (I.LOLOC (COND ((LITATOM A) (MKI.ATOM A)) (T A]) (I.\ATOMCELL [LAMBDA (X N) (* ;  "Edited 26-Oct-92 14:24 by sybalsky:mv:envos") (LET ((ATOMNO (I.ATOMNUMBER X))) (COND (NIL (* ;; "THIS WAS THE PRE-BIGVM CODE:") (LET [(LOC (SELECTC N (10 (I.ATOMNUMBER X)) (12 (I.ATOMNUMBER X)) (2 (I.ATOMNUMBER X)) (8 (I.ATOMNUMBER X)) (SHOULDNT] (I.ADDBASE (I.VAG2 N LOC) LOC))) [(EQ (LRSH ATOMNO 16) 0) (* ; "Xerox Lisp traditional symbol") (LET [(LOC (SELECTC N (10 4) (12 2) (2 6) (8 0) (SHOULDNT] (I.ADDBASE (I.VAG2 8 0) (IPLUS LOC (ITIMES 10 ATOMNO] (T (* ;  "New symbol that appears after traditional symbol runs out.") (LET [(OFFSET (SELECTC N (10 4) (12 2) (2 6) (8 0) (SHOULDNT] (I.ADDBASE ATOMNO OFFSET]) (I.FIXUPNUM [LAMBDA (CA BN NUM MASK) (* ; "Edited 17-Jul-90 14:28 by jds") (* ;; "ÿ2ÿPerform atom-number fixup for a code block.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) (* ;; "If it's on a machine wiht 3 byte atom numbers, treat it as a pointer.") (I.FIXUPPTR CA BN NUM)) (T (* ;; "Otherwise, fill in the two bytes.") (\BYTESETA CA (SUB1 BN) (LOGOR (LOGAND (\BYTELT CA (SUB1 BN)) (LRSH (LOGXOR MASK 65535) 8)) (LOGAND (LRSH (LOGAND NUM MASK) 8) 255))) (\BYTESETA CA BN (LOGAND NUM 255]) (I.FIXUPPTR [LAMBDA (CA BN PTR) (* ; "Edited 22-Jul-90 12:10 by jds") (* ;; "Specific for MAXC --- actual ptr is same as simulated ptr") (PROG ((LOLOC (I.LOLOC PTR))) (\BYTESETA CA (SUB1 BN) (LRSH LOLOC 8)) (\BYTESETA CA BN (LOGAND LOLOC 255)) (\BYTESETA CA (IDIFFERENCE BN 2) (LOGOR (\BYTELT CA (IDIFFERENCE BN 2)) (I.HILOC PTR]) (I.FIXUPSYM [LAMBDA (CA BN NUM MASK) (* ; "Edited 23-Jan-91 19:04 by jds") (* ;; "ÿ2ÿPerform SYMBOL fixup for a code block.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) (* ;; "If it's on a machine wiht 3 byte atom numbers, treat it as a pointer.") (I.FIXUPPTR CA BN (I.ATOMNUMBER NUM))) (T (* ;; "Otherwise, fill in the two bytes.") (\BYTESETA CA (SUB1 BN) (LOGOR (LOGAND (\BYTELT CA (SUB1 BN)) (LRSH (LOGXOR MASK 65535) 8)) (LOGAND (LRSH (LOGAND (I.ATOMNUMBER NUM) MASK) 8) 255))) (\BYTESETA CA BN (LOGAND (I.ATOMNUMBER NUM) 255]) (I.WORDSPERNAMEENTRY [LAMBDA NIL (* ; "Edited 25-Jan-91 15:35 by jds") (* ;; "For MAKEINIT, returns the number of words in a name-table entry.") (* ;; "For the old 2-byte atom case, it's 1 word; for 3-byte atoms, 2 words.") (* ;; "An %"Entry%" means an entry in each half of the name table (symbol & type/offset).") (* ;; "While we're building the INIT, react to either :3-BYTE or :3-BYTE-INIT in the target architecture -- we're automatically CROSSCOMPILING as far as this function is concerned.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) 2) ((FMEMB :3-BYTE-INIT COMPILER::*TARGET-ARCHITECTURE*) 2) (T 1]) (I.SETSTKNTOFFSET [LAMBDA (BASE OFFSET TYPE VAL) (* ; "Edited 25-Jan-91 16:00 by jds") (* ;; "FOR MAKEINIT: 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::*TARGET-ARCHITECTURE*) (I.FIXUPNUM BASE (IDIFFERENCE OFFSET BYTESPERWORD) TYPE) (I.FIXUPNUM BASE OFFSET VAL)) ((FMEMB :3-BYTE-INIT COMPILER::*TARGET-ARCHITECTURE*) (I.FIXUPNUM BASE (IDIFFERENCE OFFSET BYTESPERWORD) TYPE) (I.FIXUPNUM BASE OFFSET VAL)) (T (I.FIXUPNUM BASE OFFSET (IPLUS TYPE VAL]) ) (* ; "stuff for MAXC") (DEFINEQ (MKI.ATOM (LAMBDA (X) (* lmm "29-JUL-81 22:46") (* ; "for MAXC") (AND X (OR (GETHASH X MKI.ATOMARRAY) (PUTHASH X (COND ((EQ X (QUOTE NOBIND)) PTRNOBIND) (T (I.COPYATOM X))) MKI.ATOMARRAY)))) ) (MKI.IEEE (LAMBDA (X BOX) (* bvm%: "16-Dec-80 00:44") (* ;; "Converts pdp-10 floating-point number X to IEEE standard for Dolphin, storing (with I.PUTBASE) into BOX. For MAXC only.") (PROG (MAGNITUDE (SIGN 0) (EXP 0) (FRAC 0)) RETRY (SETQ MAGNITUDE (COND ((MINUSP X) (SETQ SIGN 32768) (IMINUS (OPENR (LOC X)))) (T (OPENR (LOC X))))) (COND ((ZEROP MAGNITUDE) (GO DONE)) ((IEQP (LOGAND MAGNITUDE 67108864) 0) (* ; "unnormalized number???") (SETQ X (FPLUS X 0.0)) (GO RETRY))) (COND ((ILEQ (SETQ EXP (IDIFFERENCE (LRSH MAGNITUDE 27) 2)) 0) (* ;; "Exponent bias is off by 1, plus another 1 because of the implicit high bit. Thus have to watch for underflow") (ERROR "Unrepresentable floating-point number" X) (SETQ EXP (SETQ SIGN 0)) (* ; "If continued, make it zero") (GO DONE))) (SETQ FRAC (IPLUS (LOGAND (LRSH MAGNITUDE 3) 16777215) (COND ((OR (ILESSP (LOGAND MAGNITUDE 7) 4) (EQ (LOGAND MAGNITUDE 15) 4)) (* ; "Round down") 0) (T 1)))) (COND ((IGREATERP FRAC 16777215) (* ; "Rounding overflowed the high bit") (SETQ FRAC (LRSH FRAC 1)) (* ; "EXP can't overflow, because of bias difference") (SETQ EXP (ADD1 EXP)))) (* ; "FRAC is now a 24-bit fraction with its high bit on") DONE (I.PUTBASE BOX 0 (LOGOR SIGN (LLSH EXP 7) (LOGAND (LRSH FRAC 16) 127))) (I.PUTBASE BOX 1 (LOGAND FRAC 65535)))) ) ) (* ; "stuff to maintain symbol values, prop lists during makeinit--all dumped at end.") (DEFINEQ (MKI.DSET (LAMBDA (A VAL) (* ; "Edited 12-Jan-88 11:03 by bvm") (LET ((LST (GETHASH A MKI.TVHA))) (COND (LST (COND ((NOT (EQUAL VAL (CDR LST))) (EXEC-FORMAT "(Value of ~S changed from ~S to ~S)~%%" A (CDR LST) VAL))) (RPLACD LST VAL)) (T (PUTHASH A (CONS NIL VAL) MKI.TVHA))))) ) (MKI.ADDTO (LAMBDA (A VAL) (* lpd%: "29-APR-77 13:20") (PROG ((LST (GETHASH A MKI.TVHA))) (COND (LST (RPLACD LST (UNION VAL (CDR LST)))) (T (PUTHASH A (CONS NIL VAL) MKI.TVHA))))) ) (MKI.PUTPROP (LAMBDA (A PROP VAL) (* ; "Edited 12-Jan-88 11:04 by bvm") (LET ((LST (GETHASH A MKI.PLHA))) (COND (LST (COND ((LISTGET LST PROP) (EXEC-FORMAT "(Property ~S of ~S has been changed)~%%" A PROP))) (LISTPUT LST PROP VAL)) (T (PUTHASH A (LIST PROP VAL) MKI.PLHA))))) ) ) (RPAQQ MKI.ARRAY NIL) (RPAQ MKI.TVHA (HASHARRAY 400)) (RPAQ MKI.PLHA (HASHARRAY 150)) (RPAQ MKI.ATOMARRAY (HASHARRAY 5000)) (RPAQQ INIT.EXT SYSOUT) (DEFINEQ (DUMPVP (LAMBDA (VP) (* lpd%: "27-APR-77 20:24") (PRIN1 (QUOTE *) T) (WriteoutPage OUTX VP))) (BOUTZEROS (LAMBDA (N) (* lmm "16-MAY-81 16:49") (FRPTQ N (\BOUT OUTX 0)))) (BIN16 (LAMBDA (J) (* lmm "16-MAY-81 16:49") (IPLUS (LLSH (\BIN J) 8) (\BIN J)))) (BOUT16 (LAMBDA (J N) (* lmm "16-MAY-81 16:51") (\BOUT J (LRSH N 8)) (\BOUT J (LOGAND N 255)))) ) (RPAQQ MKI.FirstDataByte 1024) (RPAQQ MKI.Page0Byte 512) (RPAQ MKI.DATE (DATE)) (RPAQQ MKI.CODESTARTOFFSET 60) (RPAQQ MKI.SEQUENTIAL ((SEQUENTIAL T))) (RPAQQ PRINTEXPRS T) (RPAQ? PRINTEXPRS T) (RPAQ? REMOTECOMPILE.EXT COMPILE.EXT) (DECLARE%: DONTEVAL@LOAD DOCOPY (PUTPROP (NAMEFIELD (INPUT) T) 'LOADDATE (GETFILEINFO (INPUT) 'ICREATIONDATE)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS SETXVAR MACRO [X `(SETQ.NOREF %, (CADAR X) %, (CADR X]) (PUTPROPS IEQ MACRO ((X Y) (IEQP X Y))) DONTCOPY (FILESLOAD (LOADCOMP) MEM) ) (PUTPROPS MAKEINIT COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1990 1991 1992)) (DECLARE%: DONTCOPY (FILEMAP (NIL (2698 9690 (LOADMAKEINIT 2708 . 3911) (LOADMKIFILES 3913 . 4133) (RELOAD 4135 . 4618) ( MAKEINIT 4620 . 8982) (MKI.START 8984 . 9688)) (9768 13669 (MKI.PASSFILE 9778 . 11571) (SCRATCHARRAY 11573 . 12222) (DOFORM 12224 . 12901) (CONSTFORMP 12903 . 13137) (NOTICECOMS 13139 . 13447) ( EVALFORMAKEINIT 13449 . 13667)) (13670 15790 (I.ADDTOVAR 13680 . 13774) (I.DECLARE%: 13776 . 14052) ( I.DEFINE-FILE-INFO 14054 . 14244) (I.FILECREATED 14246 . 14620) (I.PUTPROPS 14622 . 14735) (I.RPAQ 14737 . 14958) (I.RPAQQ 14960 . 15156) (I.RPAQ? 15158 . 15373) (I.SETTOPVAL 15375 . 15607) (I.NOUNDO 15609 . 15788)) (16426 22289 (I.ATOMNUMBER 16436 . 16927) (I.\ATOMCELL 16929 . 18545) (I.FIXUPNUM 18547 . 19364) (I.FIXUPPTR 19366 . 19847) (I.FIXUPSYM 19849 . 20797) (I.WORDSPERNAMEENTRY 20799 . 21554) (I.SETSTKNTOFFSET 21556 . 22287)) (22321 23829 (MKI.ATOM 22331 . 22527) (MKI.IEEE 22529 . 23827 )) (23926 24691 (MKI.DSET 23936 . 24219) (MKI.ADDTO 24221 . 24406) (MKI.PUTPROP 24408 . 24689)) (24865 25243 (DUMPVP 24875 . 24972) (BOUTZEROS 24974 . 25053) (BIN16 25055 . 25140) (BOUT16 25142 . 25241))) )) STOP \ No newline at end of file diff --git a/sunloadup/LLPARAMS b/sunloadup/LLPARAMS deleted file mode 100644 index 55b21afc..00000000 --- a/sunloadup/LLPARAMS +++ /dev/null @@ -1,1705 +0,0 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP" BASE 8) -(FILECREATED "31-Jan-98 09:16:51" {DSK}disk2>jdstools>lc3>lispcore3.0>sources>LLPARAMS.;15 232505Q - - changes to%: (VARS INITCONSTANTS) - - previous date%: "30-Jan-98 12:43:29" -{DSK}disk2>jdstools>lc3>lispcore3.0>sources>LLPARAMS.;14) - - -(* ; " -Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1994, 1998 by Syntelligence Systems, Inc. This program or documentation contains confidential information and trade secrets of Syntelligence Systems, Inc. Reverse engineering, reverse compiling and disassembling of object code are prohibited. Use of this program or documentation is governed by written agreement with Syntelligence Systems, Inc. Use of copyright notice is precautionary and does not imply publication or disclosure of trade secrets. All rights reserved. -") - -(PRETTYCOMPRINT LLPARAMSCOMS) - -(RPAQQ LLPARAMSCOMS ( - (* ;; - "This file defines the constants that control how a SYSOUT is laid out.") - - (FNS MAKERECORD) - - (* ;; "When you change the SYSOUT's layout in this file, you must also") - - - (* ;; " Recreate RDSYS in the library, using (DORENAME 'R)") - - - (* ;; - " Recompile DLFIXINIT and anything else that uses the constants defined here.") - - - (* ;; " Recompile LLFAULT. recompile VMEM") - - (DECLARE%: DONTCOPY - (EXPORT (CONSTANTS (WINDFLG T)) - - (* ;; - "INITCONSTANTS are constants (e.g. \LISTPDTD) to be defined at init time.") - - (VARS INITCONSTANTS MISCSTATSLAYOUT IFPAGELAYOUT - MAIKO.IFPAGELAYOUT IOPAGELAYOUT) - [CONSTANTS * (for X in INITCONSTANTS when (FIXP (CADR X)) - collect - (LIST (CAR X) - (CADR X] - (CONSTANTS * \MPERRORS) - (GLOBALVARS * (for X in INITCONSTANTS when - [AND (NEQ (CAR X) - '*) - (NOT (FIXP (CADR X] - collect - (CAR X))) - (P * (LIST (MAKERECORD 'MISCSTATS MISCSTATSLAYOUT) - (COND ((EQ \MACHINETYPE \MAIKO) - (MAKERECORD 'IFPAGE MAIKO.IFPAGELAYOUT)) - (T (MAKERECORD 'IFPAGE IFPAGELAYOUT))) - (MAKERECORD 'IOPAGE IOPAGELAYOUT))) - (MACROS EMADDRESS EMGETBASE EMPUTBASE EMULATORSEGMENT - EMPOINTER EMADDRESSP))) - (PROP MAKEFILE-ENVIRONMENT LLPARAMS))) - - - -(* ;; "This file defines the constants that control how a SYSOUT is laid out.") - -(DEFINEQ - -(MAKERECORD [LAMBDA (NAME LAYOUT) (* bvm%: "29-NOV-82 17:40") (PROG ((I 0) PTRS M NAM) (RETURN `(BLOCKRECORD %, NAME %, [for X in LAYOUT collect (CONS (SETQ NAM (CAR X)) (COND ((EQ NAM '*) (CDR X)) (T (PROG1 [COND [[FIXP (SETQ M (CAR (SETQ X (CDR X] (LIST M (CAR (SETQ X (CDR X] (T (SETQ M (SELECTQ (CAR X) ((FIXP FULLXPOINTER) (OR (EVENP I WORDSPERCELL) (ERROR "Record field not aligned" (CONS NAM X))) 2) (WORD 1) (SHOULDNT))) (LIST (CAR X] [COND ((CADDR X) (SETQ PTRS (CONS (LIST (PACK* NAM 'PTR) `(\ADDBASE DATUM %, I)) PTRS] (add I M))] %,. [AND PTRS `((ACCESSFNS %, NAME %, PTRS] (CREATE (\ALLOCBLOCK %, (FOLDHI I WORDSPERCELL]) -) - - - -(* ;; "When you change the SYSOUT's layout in this file, you must also") - - - - -(* ;; " Recreate RDSYS in the library, using (DORENAME 'R)") - - - - -(* ;; " Recompile DLFIXINIT and anything else that uses the constants defined here.") - - - - -(* ;; " Recompile LLFAULT. recompile VMEM") - -(DECLARE%: DONTCOPY -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE - -(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 10Q) - (\CHARACTERP 11Q) - (\VMEMPAGEP 12Q NIL VMemPagePType) - (\STREAM 13Q NIL STREAMTYPE) - - (* ;; "TYPE TABLE CONSTANTS - - - - - - - - - - - - - - - - - - - - - -") - - (\TT.TYPEMASK 3777Q TTTypeMask T) - (\TT.NOREF 100000Q NIL T) - (\TT.SYMBOLP 40000Q NIL T) - (\TT.FIXP 20000Q) - (\TT.NUMBERP 10000Q) - (\TT.ATOM 4000Q) - - (* ;; - "page map - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") - - (\PMblockSize 40Q PMBLOCKSIZE) - (\STATSsize 10Q T) - (\NumPMTpages 10Q) - (\EmptyPMTEntry 177777Q T) - (\FirstVmemBlock 2 T) - (\MAXVMPAGE 377775Q) - (\MAXVMSEGMENT 377Q) - - (* ;; "interface page") - - (\IFPValidKey 12743Q T) - - (* ;; "MDS") - - (\FirstMDSPage 77776Q) (* ; "Was 37776Q pre 16-meg intiial") - (\MaxMDSPage 1777775Q) - (\DefaultSecondMDSPage 177774Q) - (\MDSIncrement 1000Q) - (\PagesPerMDSUnit 2) - (* ; - "(FOLDLO \MDSIncrement WORDSPERPAGE)") - - (* ;; "arrays") - - (\ARRAYSPACE (56Q 0)) - (\FirstArraySegment 56Q) - (\FirstArrayPage 27000Q) - (\ARRAYSPACE2 (100Q 0)) - (\DefaultSecondArrayPage 100000Q) (* ; "Was 40000Q before 16meg initial") - - (* ;; "stack block constants") - - (\StackMask 160000Q T T) - (\FxtnBlock 140000Q T T) - (\GuardBlock 160000Q T T) - (\BFBlock 100000Q T T) - (\FreeStackBlock 120000Q T T) - (\NotStackBlock 0) - (* ; "none of the above") - (\MinExtraStackWords 40Q T T) - - (* ;; "backspace kludge") - - (ERASECHARCODE 0 T) - - (* ;; "GC constants") - - (\HT1CNT 2000Q NIL T) - (\HTSTKBIT 1000Q NIL T) - (\HTCNTMASK 176000Q NIL T) - (\HTMAINSIZE 200000Q NIL T) - (\HTCOLLSIZE 4000000Q 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 (25Q 0) - (AHTspace AHTbase)) - (\AtomHTpages 400Q AHTSIZE) - (\LastAtomPage 377Q) - (\MaxAtomFrLst 177777Q) - (\SMALLPOSPSPACE (16Q 0)) - (\SmallPosHi 16Q SMALLPOSspace smallpl) - (\SMALLNEGSPACE (17Q 0)) - (\SmallNegHi 17Q SMALLNEGspace smallneg) - (\NumSmallPages 1000Q) - - (* ;; "PNAME SPACEin the old world; used for initial atoms now.") - - (\PNPSPACE (10Q 0) - (PNPspace PNPbase)) - (\PNAME.HI 10Q) - (\OLDATOMSPACE (54Q 0)) - (* ; "NEW ATOM SPACE") - (\ATOM.HI 54Q) - (* ; "HI PART OF NEW ATOM SPACE") - - (* ;; "Definitions in old atom world") - - (\DEFSPACE (12Q 0) - (DEFspace DEFbase) - (DEFspace DEFbase)) - (\DEF.HI 12Q) - (\VALSPACE (14Q 0) - (TOPVALspace TOPVALbase) - (VALspace VALbase)) - (\VAL.HI 14Q) - (\PLISTSPACE (2 0) - (PLISTspace PLISTbase)) - (\PLIST.HI 2) - (\PAGEMAP (5 0) - (PAGEMAPspace PAGEMAPbase)) - (\NumPageMapPages 400Q) - (\PageMapTBL (24Q 1000Q) - (PMTspace PMTbase)) - (\InterfacePage (24Q 0) - (INTERFACEspace INTERFACEbase) - (INTERFACEspace INTERFACEbase)) - (\IOPAGE (0 177400Q)) - (\DoveIORegion (0 40000Q)) - (\IOCBPAGE (0 400Q)) - (\FPTOVP (2 0)) - (\MDSTypeTable (30Q 0) - (MDSTYPEspace MDSTYPEbase) - (MDSTYPEspace MDSTYPEbase)) - (\MDSTTsize 2000Q T) - (* ; "in Pages") - (\MISCSTATS (24Q 5000Q) - (STATSspace MISCSTATSbase)) - (\UFNTable (24Q 6000Q) - NIL - (STATSspace UFNTablebase)) - (\UFNTableSize 2) - (\DTDSpaceBase (24Q 10000Q) - (DTDspace DTDbase) - (DTDspace DTDbase)) - (\DTDSize 22Q T) - (\LISTPDTD (24Q 10132Q)) - (\EndTypeNumber 3777Q) - (\LOCKEDPAGETABLE (24Q 70000Q)) - (\NumLPTPages 20Q) - (\STACKSPACE (1 0) - (STACKspace NIL) - (STACKspace NIL)) - (\GuardStackAddr 170000Q) - (\LastStackAddr 177776Q) - (\STACKHI 1 T T) - (\HTMAIN (26Q 0) - (HTMAINspace HTMAINbase) - (HTMAINspace HTMAINbase)) - (\HTMAINnpages 400Q T) - (\HTOVERFLOW (27Q 0) - NIL - (NIL HTOVERFLOWbase)) - (\HTBIGCOUNT (27Q 100000Q)) - (\HTCOLL (34Q 0) - NIL - (HTCOLLspace HTCOLLbase)) - (\DISPLAYREGION (22Q 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 16Q T T) - (\TeleRaidFXP 30Q T T) - - (* ;; "emulator segment locations") - - (DCB.EM 420Q) - (DISPINTERRUPT.EM 421Q) - (CURSORBITMAP.EM 431Q) - (KBDAD0.EM 177034Q) - (KBDAD1.EM 177035Q) - (KBDAD2.EM 177036Q) - (KBDAD3.EM 177037Q) - (UTILIN.EM 177030Q) - (CURSORX.EM 426Q) - (CURSORY.EM 427Q) - (MOUSEX.EM 424Q) - (MOUSEY.EM 425Q) - (\LispKeyMask 20000Q T T) - (\BcplKeyMask 10400Q T T) - (* ; "Machine types") - (\MAIKO 3) - (\DOLPHIN 4) - (\DORADO 5) - (\DANDELION 6) - (\DAYBREAK 10Q) - - (* ;; "FOR DLION (AND DAYBREAK)") - - (\VP.DISPLAY 11000Q) - (\NP.DISPLAY 312Q) - (* ; - "for Dorado display 1024x808 pixels / (16 pixels/word x 256 words/page)") - (\NP.WIDEDOVEDISPLAY 363Q) - (* ; - "Wide Dove display 1152x864 pixels") - (\WIDEDOVEDISPLAYWIDTH 2200Q) - (\RP.AFTERDISPLAY 316Q) - (* ; "Includes 4 pages for cursor") - (\RP.AFTERDOVEDISPLAY 363Q) - (* ; "if big screen") - (\RP.DISPLAY 0) - (\RP.TEMPDISPLAY 5001Q) - (\RP.MISCLOCKED 5364Q) - (* ; - "(+ \RP.TEMPDISPLAY \NP.WIDEDOVEDISPLAY)") - (\RP.STACK 1400Q) - (\VP.STACK 400Q) - (\RP.MAP 400Q) - (\NP.MAP 400Q) - (\RP.IOPAGE 1000Q) - (* ; - "The DOVE IOCBPAGE can go anywhere, but should be under the 1mbyte range") - (\RP.DOVEIOCBPAGE 1037Q) - (\RP.DOVEIORGN 1040Q) - (\VP.DOVEIORGN 100Q) - (\DOVEIORGNSIZE 100Q) - (\VP.IOPAGE 377Q) - (\VP.IFPAGE 12000Q) - (\VP.FPTOVP 1000Q) - (\NP.FPTOVP 10000Q) - (\RP.FPTOVP 2000Q) - (\RP.STARTBUFFERS 1200Q) - (\VP.TYPETABLE 14000Q) - (\NP.TYPETABLE 2000Q) - (\RP.TYPETABLE 12000Q) - (\VP.GCTABLE 13000Q) - (\NP.GCTABLE 400Q) - (\RP.GCTABLE 14000Q) - (\VP.GCOVERFLOW 13400Q) - (\NP.GCOVERFLOW 1) - (\RP.GCOVERFLOW 14400Q) - (\FP.IFPAGE 2) - (\VP.IOCBS 1) - (\VP.PRIMARYMAP 12002Q) - (\VP.SECONDARYMAP 2400Q) - (\VP.LPT 12160Q) - (\VP.INITSCRATCH 10Q) - (\VP.RPT 200Q) - (\VP.BUFFERS 332Q) - (* ; "DLion processor commands") - (\DL.PROCESSORBUSY 100000Q) - (\DL.SETTOD 100001Q) - (\DL.READTOD 100002Q) - (\DL.READPID 100003Q) - (\DL.BOOTBUTTON 100004Q))) - -(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 22Q 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 40Q WORD) - (DLIOPHARDWARECONFIG WORD) - (NIL 13Q WORD) - (DLRS232CPARAMETERCSBLO.11 WORD) - (DLRS232CPARAMETERCSBHI.11 WORD) - (DLRS232CSETRS366STATUS.11 16Q WORD) - (NIL 74Q WORD) - (DLMAGTAPE 4 WORD) - (DLETHERNET 14Q WORD NIL T) - (NIL 37Q WORD) - (DLDISPINTERRUPT WORD NIL T) - (DLDISPCONTROL WORD) - (DLDISPBORDER WORD) - (DLCURSORX WORD NIL T) - (DLCURSORY WORD NIL T) - (DLCURSORBITMAP 20Q WORD NIL T))) -(DECLARE%: EVAL@COMPILE - -(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 10Q) - -(RPAQQ \CHARACTERP 11Q) - -(RPAQQ \VMEMPAGEP 12Q) - -(RPAQQ \STREAM 13Q) - -(RPAQQ \TT.TYPEMASK 3777Q) - -(RPAQQ \TT.NOREF 100000Q) - -(RPAQQ \TT.SYMBOLP 40000Q) - -(RPAQQ \TT.FIXP 20000Q) - -(RPAQQ \TT.NUMBERP 10000Q) - -(RPAQQ \TT.ATOM 4000Q) - -(RPAQQ \PMblockSize 40Q) - -(RPAQQ \STATSsize 10Q) - -(RPAQQ \NumPMTpages 10Q) - -(RPAQQ \EmptyPMTEntry 177777Q) - -(RPAQQ \FirstVmemBlock 2) - -(RPAQQ \MAXVMPAGE 377775Q) - -(RPAQQ \MAXVMSEGMENT 377Q) - -(RPAQQ \IFPValidKey 12743Q) - -(RPAQQ \FirstMDSPage 77776Q) - -(RPAQQ \MaxMDSPage 1777775Q) - -(RPAQQ \DefaultSecondMDSPage 177774Q) - -(RPAQQ \MDSIncrement 1000Q) - -(RPAQQ \PagesPerMDSUnit 2) - -(RPAQQ \FirstArraySegment 56Q) - -(RPAQQ \FirstArrayPage 27000Q) - -(RPAQQ \DefaultSecondArrayPage 100000Q) - -(RPAQQ \StackMask 160000Q) - -(RPAQQ \FxtnBlock 140000Q) - -(RPAQQ \GuardBlock 160000Q) - -(RPAQQ \BFBlock 100000Q) - -(RPAQQ \FreeStackBlock 120000Q) - -(RPAQQ \NotStackBlock 0) - -(RPAQQ \MinExtraStackWords 40Q) - -(RPAQQ ERASECHARCODE 0) - -(RPAQQ \HT1CNT 2000Q) - -(RPAQQ \HTSTKBIT 1000Q) - -(RPAQQ \HTCNTMASK 176000Q) - -(RPAQQ \HTMAINSIZE 200000Q) - -(RPAQQ \HTCOLLSIZE 4000000Q) - -(RPAQQ \HTENDFREE 1) - -(RPAQQ \HTFREEPTR 0) - -(RPAQQ \AtomHI 0) - -(RPAQQ \CHARHI 7) - -(RPAQQ \AtomHTpages 400Q) - -(RPAQQ \LastAtomPage 377Q) - -(RPAQQ \MaxAtomFrLst 177777Q) - -(RPAQQ \SmallPosHi 16Q) - -(RPAQQ \SmallNegHi 17Q) - -(RPAQQ \NumSmallPages 1000Q) - -(RPAQQ \PNAME.HI 10Q) - -(RPAQQ \ATOM.HI 54Q) - -(RPAQQ \DEF.HI 12Q) - -(RPAQQ \VAL.HI 14Q) - -(RPAQQ \PLIST.HI 2) - -(RPAQQ \NumPageMapPages 400Q) - -(RPAQQ \MDSTTsize 2000Q) - -(RPAQQ \UFNTableSize 2) - -(RPAQQ \DTDSize 22Q) - -(RPAQQ \EndTypeNumber 3777Q) - -(RPAQQ \NumLPTPages 20Q) - -(RPAQQ \GuardStackAddr 170000Q) - -(RPAQQ \LastStackAddr 177776Q) - -(RPAQQ \STACKHI 1) - -(RPAQQ \HTMAINnpages 400Q) - -(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 16Q) - -(RPAQQ \TeleRaidFXP 30Q) - -(RPAQQ DCB.EM 420Q) - -(RPAQQ DISPINTERRUPT.EM 421Q) - -(RPAQQ CURSORBITMAP.EM 431Q) - -(RPAQQ KBDAD0.EM 177034Q) - -(RPAQQ KBDAD1.EM 177035Q) - -(RPAQQ KBDAD2.EM 177036Q) - -(RPAQQ KBDAD3.EM 177037Q) - -(RPAQQ UTILIN.EM 177030Q) - -(RPAQQ CURSORX.EM 426Q) - -(RPAQQ CURSORY.EM 427Q) - -(RPAQQ MOUSEX.EM 424Q) - -(RPAQQ MOUSEY.EM 425Q) - -(RPAQQ \LispKeyMask 20000Q) - -(RPAQQ \BcplKeyMask 10400Q) - -(RPAQQ \MAIKO 3) - -(RPAQQ \DOLPHIN 4) - -(RPAQQ \DORADO 5) - -(RPAQQ \DANDELION 6) - -(RPAQQ \DAYBREAK 10Q) - -(RPAQQ \VP.DISPLAY 11000Q) - -(RPAQQ \NP.DISPLAY 312Q) - -(RPAQQ \NP.WIDEDOVEDISPLAY 363Q) - -(RPAQQ \WIDEDOVEDISPLAYWIDTH 2200Q) - -(RPAQQ \RP.AFTERDISPLAY 316Q) - -(RPAQQ \RP.AFTERDOVEDISPLAY 363Q) - -(RPAQQ \RP.DISPLAY 0) - -(RPAQQ \RP.TEMPDISPLAY 5001Q) - -(RPAQQ \RP.MISCLOCKED 5364Q) - -(RPAQQ \RP.STACK 1400Q) - -(RPAQQ \VP.STACK 400Q) - -(RPAQQ \RP.MAP 400Q) - -(RPAQQ \NP.MAP 400Q) - -(RPAQQ \RP.IOPAGE 1000Q) - -(RPAQQ \RP.DOVEIOCBPAGE 1037Q) - -(RPAQQ \RP.DOVEIORGN 1040Q) - -(RPAQQ \VP.DOVEIORGN 100Q) - -(RPAQQ \DOVEIORGNSIZE 100Q) - -(RPAQQ \VP.IOPAGE 377Q) - -(RPAQQ \VP.IFPAGE 12000Q) - -(RPAQQ \VP.FPTOVP 1000Q) - -(RPAQQ \NP.FPTOVP 10000Q) - -(RPAQQ \RP.FPTOVP 2000Q) - -(RPAQQ \RP.STARTBUFFERS 1200Q) - -(RPAQQ \VP.TYPETABLE 14000Q) - -(RPAQQ \NP.TYPETABLE 2000Q) - -(RPAQQ \RP.TYPETABLE 12000Q) - -(RPAQQ \VP.GCTABLE 13000Q) - -(RPAQQ \NP.GCTABLE 400Q) - -(RPAQQ \RP.GCTABLE 14000Q) - -(RPAQQ \VP.GCOVERFLOW 13400Q) - -(RPAQQ \NP.GCOVERFLOW 1) - -(RPAQQ \RP.GCOVERFLOW 14400Q) - -(RPAQQ \FP.IFPAGE 2) - -(RPAQQ \VP.IOCBS 1) - -(RPAQQ \VP.PRIMARYMAP 12002Q) - -(RPAQQ \VP.SECONDARYMAP 2400Q) - -(RPAQQ \VP.LPT 12160Q) - -(RPAQQ \VP.INITSCRATCH 10Q) - -(RPAQQ \VP.RPT 200Q) - -(RPAQQ \VP.BUFFERS 332Q) - -(RPAQQ \DL.PROCESSORBUSY 100000Q) - -(RPAQQ \DL.SETTOD 100001Q) - -(RPAQQ \DL.READTOD 100002Q) - -(RPAQQ \DL.READPID 100003Q) - -(RPAQQ \DL.BOOTBUTTON 100004Q) - - -(CONSTANTS (CDRCODING 1) - (\SMALLP 1) - (\FIXP 2) - (\FLOATP 3) - (\LITATOM 4) - (\LISTP 5) - (\ARRAYP 6) - (\STRINGP 7) - (\STACKP 10Q) - (\CHARACTERP 11Q) - (\VMEMPAGEP 12Q) - (\STREAM 13Q) - (\TT.TYPEMASK 3777Q) - (\TT.NOREF 100000Q) - (\TT.SYMBOLP 40000Q) - (\TT.FIXP 20000Q) - (\TT.NUMBERP 10000Q) - (\TT.ATOM 4000Q) - (\PMblockSize 40Q) - (\STATSsize 10Q) - (\NumPMTpages 10Q) - (\EmptyPMTEntry 177777Q) - (\FirstVmemBlock 2) - (\MAXVMPAGE 377775Q) - (\MAXVMSEGMENT 377Q) - (\IFPValidKey 12743Q) - (\FirstMDSPage 77776Q) - (\MaxMDSPage 1777775Q) - (\DefaultSecondMDSPage 177774Q) - (\MDSIncrement 1000Q) - (\PagesPerMDSUnit 2) - (\FirstArraySegment 56Q) - (\FirstArrayPage 27000Q) - (\DefaultSecondArrayPage 100000Q) - (\StackMask 160000Q) - (\FxtnBlock 140000Q) - (\GuardBlock 160000Q) - (\BFBlock 100000Q) - (\FreeStackBlock 120000Q) - (\NotStackBlock 0) - (\MinExtraStackWords 40Q) - (ERASECHARCODE 0) - (\HT1CNT 2000Q) - (\HTSTKBIT 1000Q) - (\HTCNTMASK 176000Q) - (\HTMAINSIZE 200000Q) - (\HTCOLLSIZE 4000000Q) - (\HTENDFREE 1) - (\HTFREEPTR 0) - (\AtomHI 0) - (\CHARHI 7) - (\AtomHTpages 400Q) - (\LastAtomPage 377Q) - (\MaxAtomFrLst 177777Q) - (\SmallPosHi 16Q) - (\SmallNegHi 17Q) - (\NumSmallPages 1000Q) - (\PNAME.HI 10Q) - (\ATOM.HI 54Q) - (\DEF.HI 12Q) - (\VAL.HI 14Q) - (\PLIST.HI 2) - (\NumPageMapPages 400Q) - (\MDSTTsize 2000Q) - (\UFNTableSize 2) - (\DTDSize 22Q) - (\EndTypeNumber 3777Q) - (\NumLPTPages 20Q) - (\GuardStackAddr 170000Q) - (\LastStackAddr 177776Q) - (\STACKHI 1) - (\HTMAINnpages 400Q) - (\D1BCPLspace 0) - (\D0BCPLspace 0) - (\CurrentFXP 0) - (\ResetFXP 1) - (\SubovFXP 2) - (\KbdFXP 3) - (\HardReturnFXP 4) - (\GCFXP 5) - (\FAULTFXP 6) - (\MiscFXP 16Q) - (\TeleRaidFXP 30Q) - (DCB.EM 420Q) - (DISPINTERRUPT.EM 421Q) - (CURSORBITMAP.EM 431Q) - (KBDAD0.EM 177034Q) - (KBDAD1.EM 177035Q) - (KBDAD2.EM 177036Q) - (KBDAD3.EM 177037Q) - (UTILIN.EM 177030Q) - (CURSORX.EM 426Q) - (CURSORY.EM 427Q) - (MOUSEX.EM 424Q) - (MOUSEY.EM 425Q) - (\LispKeyMask 20000Q) - (\BcplKeyMask 10400Q) - (\MAIKO 3) - (\DOLPHIN 4) - (\DORADO 5) - (\DANDELION 6) - (\DAYBREAK 10Q) - (\VP.DISPLAY 11000Q) - (\NP.DISPLAY 312Q) - (\NP.WIDEDOVEDISPLAY 363Q) - (\WIDEDOVEDISPLAYWIDTH 2200Q) - (\RP.AFTERDISPLAY 316Q) - (\RP.AFTERDOVEDISPLAY 363Q) - (\RP.DISPLAY 0) - (\RP.TEMPDISPLAY 5001Q) - (\RP.MISCLOCKED 5364Q) - (\RP.STACK 1400Q) - (\VP.STACK 400Q) - (\RP.MAP 400Q) - (\NP.MAP 400Q) - (\RP.IOPAGE 1000Q) - (\RP.DOVEIOCBPAGE 1037Q) - (\RP.DOVEIORGN 1040Q) - (\VP.DOVEIORGN 100Q) - (\DOVEIORGNSIZE 100Q) - (\VP.IOPAGE 377Q) - (\VP.IFPAGE 12000Q) - (\VP.FPTOVP 1000Q) - (\NP.FPTOVP 10000Q) - (\RP.FPTOVP 2000Q) - (\RP.STARTBUFFERS 1200Q) - (\VP.TYPETABLE 14000Q) - (\NP.TYPETABLE 2000Q) - (\RP.TYPETABLE 12000Q) - (\VP.GCTABLE 13000Q) - (\NP.GCTABLE 400Q) - (\RP.GCTABLE 14000Q) - (\VP.GCOVERFLOW 13400Q) - (\NP.GCOVERFLOW 1) - (\RP.GCOVERFLOW 14400Q) - (\FP.IFPAGE 2) - (\VP.IOCBS 1) - (\VP.PRIMARYMAP 12002Q) - (\VP.SECONDARYMAP 2400Q) - (\VP.LPT 12160Q) - (\VP.INITSCRATCH 10Q) - (\VP.RPT 200Q) - (\VP.BUFFERS 332Q) - (\DL.PROCESSORBUSY 100000Q) - (\DL.SETTOD 100001Q) - (\DL.READTOD 100002Q) - (\DL.READPID 100003Q) - (\DL.BOOTBUTTON 100004Q)) -) - -(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 10Q "Loop in \SELECTREALPAGE") - (\MP.NEWPAGE 11Q "Attempt to allocate already existing page") - (\MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") - (\MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") - (\MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") - (\MP.RESIDENT 15Q "Fault on resident page") - (\MP.STACKFAULT 16Q "Fault on stack") - (\MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") - (\MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") - (\MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") - (\MP.STACKFULL 23Q) - (\MP.MDSFULL 24Q) - (\MP.UNKNOWN.UFN 25Q) - (\MP.ATOMSFULL 26Q) - (\MP.PNAMESFULL 27Q) - (\MP.USECOUNTOVERFLOW 30Q) - (\MP.MDSFULLWARNING 31Q) - (\MP.BADMDSFREELIST 32Q) - (\MP.BADARRAYBLOCK 33Q) - (\MP.BADDELETEBLOCK 34Q) - (\MP.BADARRAYRECLAIM 35Q) - (\MP.BIGREFCNTMISSING 36Q - "PTR refcnt previously overflowed, but not found in table.") - (\MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") - (\MP.DELREF0 40Q) - (\MP.PROCERROR 41Q) - (\MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") - (\MP.32MBINUSE 43Q) - (\MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") - (\MP.STACKRELEASED 45Q) - (\MP.FLUSHLOCKED 46Q) - (\MP.MAPNOTLOCKED 47Q) - (\MP.UNLOCKINGMAP 50Q) - (\MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") - (\MP.BADRUNTABLE 52Q "Malformed run table for vmem file"))) -(DECLARE%: EVAL@COMPILE - -(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 10Q "Loop in \SELECTREALPAGE") - -(RPAQ \MP.NEWPAGE 11Q "Attempt to allocate already existing page") - -(RPAQ \MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") - -(RPAQ \MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") - -(RPAQ \MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") - -(RPAQ \MP.RESIDENT 15Q "Fault on resident page") - -(RPAQ \MP.STACKFAULT 16Q "Fault on stack") - -(RPAQ \MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") - -(RPAQ \MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") - -(RPAQ \MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") - -(RPAQQ \MP.STACKFULL 23Q) - -(RPAQQ \MP.MDSFULL 24Q) - -(RPAQQ \MP.UNKNOWN.UFN 25Q) - -(RPAQQ \MP.ATOMSFULL 26Q) - -(RPAQQ \MP.PNAMESFULL 27Q) - -(RPAQQ \MP.USECOUNTOVERFLOW 30Q) - -(RPAQQ \MP.MDSFULLWARNING 31Q) - -(RPAQQ \MP.BADMDSFREELIST 32Q) - -(RPAQQ \MP.BADARRAYBLOCK 33Q) - -(RPAQQ \MP.BADDELETEBLOCK 34Q) - -(RPAQQ \MP.BADARRAYRECLAIM 35Q) - -(RPAQ \MP.BIGREFCNTMISSING 36Q "PTR refcnt previously overflowed, but not found in table.") - -(RPAQ \MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") - -(RPAQQ \MP.DELREF0 40Q) - -(RPAQQ \MP.PROCERROR 41Q) - -(RPAQ \MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") - -(RPAQQ \MP.32MBINUSE 43Q) - -(RPAQ \MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") - -(RPAQQ \MP.STACKRELEASED 45Q) - -(RPAQQ \MP.FLUSHLOCKED 46Q) - -(RPAQQ \MP.MAPNOTLOCKED 47Q) - -(RPAQQ \MP.UNLOCKINGMAP 50Q) - -(RPAQ \MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") - -(RPAQ \MP.BADRUNTABLE 52Q "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 10Q "Loop in \SELECTREALPAGE") - (\MP.NEWPAGE 11Q "Attempt to allocate already existing page") - (\MP.NEWMAPPAGE 12Q "\DONEWPAGE failed to allocate new map page") - (\MP.BADLOCKED 13Q "Locked page occupies a file page needed to lock another") - (\MP.CLOCK0 14Q "Arg to CLOCK0 not an integer box") - (\MP.RESIDENT 15Q "Fault on resident page") - (\MP.STACKFAULT 16Q "Fault on stack") - (\MP.VMEMTOOLONG 20Q "Attempt to extend Vmem File beyond fixed limit (8mb)") - (\MP.WRITING.LOCKED.PAGE 21Q "Writing a locked page with UPDATEKEY = T") - (\MP.UNINTERRUPTABLE 22Q "Error in uninterruptable system code") - (\MP.STACKFULL 23Q) - (\MP.MDSFULL 24Q) - (\MP.UNKNOWN.UFN 25Q) - (\MP.ATOMSFULL 26Q) - (\MP.PNAMESFULL 27Q) - (\MP.USECOUNTOVERFLOW 30Q) - (\MP.MDSFULLWARNING 31Q) - (\MP.BADMDSFREELIST 32Q) - (\MP.BADARRAYBLOCK 33Q) - (\MP.BADDELETEBLOCK 34Q) - (\MP.BADARRAYRECLAIM 35Q) - (\MP.BIGREFCNTMISSING 36Q "PTR refcnt previously overflowed, but not found in table.") - (\MP.BIGREFCNTALREADYPRESENT 37Q "PTR already in overflow table") - (\MP.DELREF0 40Q) - (\MP.PROCERROR 41Q) - (\MP.PROCNOFRAME 42Q "Failed to build frame for PROCESS use") - (\MP.32MBINUSE 43Q) - (\MP.TOPUNWOUND 44Q "Unexpected (RETTO T)") - (\MP.STACKRELEASED 45Q) - (\MP.FLUSHLOCKED 46Q) - (\MP.MAPNOTLOCKED 47Q) - (\MP.UNLOCKINGMAP 50Q) - (\MP.SWAPDISKERROR 51Q "Hard Disk Error in swapper") - (\MP.BADRUNTABLE 52Q "Malformed run table for vmem file")) -) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(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 37Q))) - -(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 53Q))) - -(BLOCKRECORD IOPAGE ((NIL 22Q 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 40Q WORD) - (DLIOPHARDWARECONFIG WORD) - (NIL 13Q WORD) - (DLRS232CPARAMETERCSBLO.11 WORD) - (DLRS232CPARAMETERCSBHI.11 WORD) - (DLRS232CSETRS366STATUS.11 16Q WORD) - (NIL 74Q WORD) - (DLMAGTAPE 4 WORD) - (DLETHERNET 14Q WORD) - (NIL 37Q WORD) - (DLDISPINTERRUPT WORD) - (DLDISPCONTROL WORD) - (DLDISPBORDER WORD) - (DLCURSORX WORD) - (DLCURSORY WORD) - (DLCURSORBITMAP 20Q WORD)) - [ACCESSFNS IOPAGE ((DLCURSORBITMAPPTR (\ADDBASE DATUM 360Q)) - (DLCURSORYPTR (\ADDBASE DATUM 357Q)) - (DLCURSORXPTR (\ADDBASE DATUM 356Q)) - (DLDISPINTERRUPTPTR (\ADDBASE DATUM 353Q)) - (DLETHERNETPTR (\ADDBASE DATUM 300Q)) - (DLKBDAD5PTR (\ADDBASE DATUM 103Q)) - (DLKBDAD4PTR (\ADDBASE DATUM 102Q)) - (DLKBDAD3PTR (\ADDBASE DATUM 101Q)) - (DLKBDAD2PTR (\ADDBASE DATUM 100Q)) - (DLKBDAD1PTR (\ADDBASE DATUM 77Q)) - (DLKBDAD0PTR (\ADDBASE DATUM 76Q)) - (DLUTILINPTR (\ADDBASE DATUM 75Q)) - (DLMOUSEYPTR (\ADDBASE DATUM 74Q)) - (DLMOUSEXPTR (\ADDBASE DATUM 73Q)) - (DLTODLOPTR (\ADDBASE DATUM 70Q)) - (DLMAINTPANELPTR (\ADDBASE DATUM 22Q] - (CREATE (\ALLOCBLOCK 200Q))) -(DECLARE%: EVAL@COMPILE - -[PUTPROPS EMADDRESS MACRO (ARGS ([LAMBDA (ADDR) - (COND - [(EQ \D1BCPLspace \D0BCPLspace) - (LIST (BIG-VMEM-CODE (LIST 'OPCODES 'GCONST 0 0 - (LRSH ADDR 10Q) - (LOGAND ADDR 377Q)) - (LIST 'OPCODES 'GCONST 0 (LRSH ADDR 10Q) - (LOGAND ADDR 377Q] - (T `(\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 '\VAG2 '(fetch (IFPAGE EmulatorSpace) of - \InterfacePage - ) - (CAR X))) - ((ZEROP (CAR X)) - NIL) - (T (LIST '\VAG2 \D0BCPLspace (CAR X] - -[PUTPROPS EMADDRESSP MACRO (X (LIST 'EQ (LIST '\HILOC (CAR X)) - (COND - ((EQ \D1BCPLspace \D0BCPLspace) - \D0BCPLspace) - (T '(fetch (IFPAGE EmulatorSpace) of \InterfacePage] -) - -(* "END EXPORTED DEFINITIONS") - -) - -(PUTPROPS LLPARAMS MAKEFILE-ENVIRONMENT (:READTABLE "INTERLISP" :PACKAGE "INTERLISP" :BASE 10Q)) -(PUTPROPS LLPARAMS COPYRIGHT ( -"Syntelligence Systems, Inc. This program or documentation contains confidential information and trade secrets of Syntelligence Systems, Inc. Reverse engineering, reverse compiling and disassembling of object code are prohibited. Use of this program or documentation is governed by written agreement with Syntelligence Systems, Inc. Use of copyright notice is precautionary and does not imply publication or disclosure of trade secrets" - 3675Q 3676Q 3677Q 3700Q 3701Q 3702Q 3703Q 3704Q 3706Q 3707Q 3710Q 3712Q 3716Q)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (7177Q 13221Q (MAKERECORD 7211Q . 13217Q))))) -STOP From bef35d1423bf5baf8a64dc8cdb488be6596b5cc3 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Fri, 12 Feb 2021 23:14:33 -0800 Subject: [PATCH 09/37] Fixing init build --- sources/DLFIXINIT | 118 +---------------- sources/DLFIXINIT.LCOM | Bin 12150 -> 10808 bytes sources/FILESETS | 176 +------------------------- sources/MAKEINIT | 251 +------------------------------------ sources/MAKEINIT.LCOM | Bin 0 -> 13022 bytes sources/MAKEINITGREET | 1 + sources/MAKEINITGREET.LCOM | Bin 0 -> 1352 bytes 7 files changed, 6 insertions(+), 540 deletions(-) create mode 100755 sources/MAKEINIT.LCOM create mode 100755 sources/MAKEINITGREET create mode 100755 sources/MAKEINITGREET.LCOM diff --git a/sources/DLFIXINIT b/sources/DLFIXINIT index c10cbe6e..6ec6fa4d 100644 --- a/sources/DLFIXINIT +++ b/sources/DLFIXINIT @@ -1,44 +1,4 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "29-Jan-98 17:51:06" {DSK}disk2>jdstools>lc3>lispcore3.0>sources>DLFIXINIT.;2 27711 - - changes to%: (FNS DLCOPYPAGEMAP) - - previous date%: " 9-Nov-92 14:54:57" -{DSK}disk2>jdstools>lc3>lispcore3.0>sources>DLFIXINIT.;1) - - -(* ; " -Copyright (c) 1983, 1984, 1990, 1992, 1998 by Venue & Xerox Corporation. All rights reserved. -") - -(PRETTYCOMPRINT DLFIXINITCOMS) - -(RPAQQ DLFIXINITCOMS - [(FNS DLFIXINIT DLSORTSYSOUTPAGES DLNEXTFP DLLOCKEDPAGEP DLSETLOCKBIT DLCOPYPAGEMAP - DLCOPYVMPAGE DLADDPAGEMAPENTRIES ASSIGNFILEPAGE ASSIGNFILEPAGERANGE DLDUMPSYSOUT - DLDUMPFPTOVP DLDUMPPAGEMAPS DLDUMPVMEMPAGES DLSETBOOTPTR DLDUMPARRAY DLMARKASDUMPED - DLDUMPVMEMPAGE INSTALLDOMINO INSTALLDOMINO.DIRECT INSTALLNEWDOMINO) - (FNS DLPRINTFPTOVP PRINTPRIMARYMAP DLREADPAGEOFWORDS SETDIF) - (CONSTANTS \NO.PAGE.ASSIGNED) - (GLOBALVARS DLPRIMARYMAP DLSECONDARYMAP DLLOCKBITS DLLASTDOMINOPAGE DLIFPAGE DLNEXTPM - DLPAGEMAPFP FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) - (DECLARE%: DONTEVAL@LOAD EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) - READSYS LLFAULT) - (P (CHECKIMPORTS '(MODARITH LLPARAMS) - T]) -(DEFINEQ - -(DLFIXINIT [LAMBDA (SYSOUTFILE DLBOOTFILE DBFILE %#UCODEPAGES) (* ;  "Edited 2-Nov-92 08:16 by sybalsky:mv:envos") [COND ((NOT DLBOOTFILE) (SETQ DLBOOTFILE (PACKFILENAME 'EXTENSION 'DLINIT 'VERSION NIL 'BODY SYSOUTFILE] (FILESLOAD (SYSLOAD) READSYS RDSYS) (RESETLST (SETQ DBFILE (OPENFILE (OR DBFILE '{PHYLUM}FUGUE>DLISPDOMINO.DB) 'INPUT)) (RESETSAVE NIL (LIST 'CLOSEF DBFILE)) (PROG ((DBPAGES (IPLUS (FOLDHI (GETFILEINFO DBFILE 'LENGTH) BYTESPERPAGE) 2)) (%#ADDEDFILEPAGES 0) %#OLDFILEPAGES %#NEWFILEPAGES %#FPTOVPPAGES DLFILEX) (DECLARE (SPECVARS %#NEWFILEPAGES %#OLDFILEPAGES %#ADDEDFILEPAGES %#FPTOVPPAGES DLFILEX)) (* ;  "Plus 2 is to allow for interface page and copy of page 0") (COND ((NOT %#UCODEPAGES) (SETQ %#UCODEPAGES (IQUOTIENT (ITIMES DBPAGES 5) 4)) (printout T " Assuming " .P2 %#UCODEPAGES " pages of uCode/Domino" T)) ((ILESSP %#UCODEPAGES DBPAGES) (printout T "Not enough space for Domino; raising it to " .P2 (SETQ %#UCODEPAGES DBPAGES) " pages" T))) (READSYS SYSOUTFILE) (RESETSAVE NIL '(READSYS)) (* ;  "To close the sysout source on exit") (SETQ %#OLDFILEPAGES (FOLDHI (GETFILEINFO VMEMFILE 'LENGTH) BYTESPERPAGE)) (DLCOPYPAGEMAP) (SETQ NEWFPFROMOLD (ARRAY %#OLDFILEPAGES 'WORD \NO.PAGE.ASSIGNED 1)) (DLSORTSYSOUTPAGES) (until (ERSETQ (DLDUMPSYSOUT)) do (printout T T "DLFIXINIT failed, trying again..." T)) (RETURN DLBOOTFILE)))]) - -(DLSORTSYSOUTPAGES [LAMBDA NIL (* ;  "Edited 4-Nov-92 15:47 by sybalsky:mv:envos") (DECLARE (USEDFREE FPSIZE NEWFPFROMOLD FPTOVPSIZE FPTOVP PGTAB %#FPTOVPPAGES) (SPECVARS LASTFP)) (PROG (LASTFP) (ASSIGNFILEPAGE \FP.IFPAGE \VP.IFPAGE (SUB1 \FP.IFPAGE) T) (* ;  "SUB1 because old FP's are zero-based! See VMEM structures") (ASSIGNFILEPAGERANGE \VP.DISPLAY \NP.DISPLAY (DLFPFROMRP \RP.TEMPDISPLAY)) (ASSIGNFILEPAGERANGE \VP.STACK PAGESPERSEGMENT (DLFPFROMRP \RP.STACK) T) (ASSIGNFILEPAGERANGE \VP.TYPETABLE \NP.TYPETABLE (DLFPFROMRP \RP.TYPETABLE)) (ASSIGNFILEPAGERANGE \VP.GCTABLE \NP.GCTABLE (DLFPFROMRP \RP.GCTABLE)) (ASSIGNFILEPAGERANGE \VP.GCOVERFLOW \NP.GCOVERFLOW (DLFPFROMRP \RP.GCOVERFLOW)) (ASSIGNFILEPAGERANGE \VP.FPTOVP %#FPTOVPPAGES (DLFPFROMRP \RP.FPTOVP)) (replace (IFPAGE FPTOVPStart) of DLIFPAGE with (DLFPFROMRP \RP.FPTOVP)) (replace (IFPAGE LastDominoFilePage) of DLIFPAGE with (SETQ DLLASTDOMINOPAGE %#UCODEPAGES)) [SETQ LASTFP (SUB1 (SETQ DLPAGEMAPFP (DLFPFROMRP \RP.MISCLOCKED] (* ;; "Assign next the pagemap pages, since we have to know where they live (some are new) and it is very convenient for them to be contiguous") (for J from 0 to (SUB1 \NumPMTpages) do (ASSIGNFILEPAGE (DLNEXTFP) (IPLUS J \VP.PRIMARYMAP) NIL T)) (replace (IFPAGE filePnPMT0) of DLIFPAGE with DLPAGEMAPFP) (replace (IFPAGE filePnPMP0) of DLIFPAGE with (IPLUS DLPAGEMAPFP \NumPMTpages)) (* ;; "NO LONGER -- 5,,0 TAKEN FOR FPTOVP IN MEDLEY 2.1 -- but we need the decondary page table up thru building things, so assign it:") (for J from 0 to (SUB1 (FOLDHI DLNEXTPM WORDSPERPAGE)) do (ASSIGNFILEPAGE (DLNEXTFP) (IPLUS J \VP.SECONDARYMAP) NIL T)) (* ;; "Similarly, assign locked page table, which is another structure we rewrite") (for J from 0 to (SUB1 \NumLPTPages) do (ASSIGNFILEPAGE (DLNEXTFP) (IPLUS J \VP.LPT) NIL T)) (* ;; "Finally, assign file pages for everyone we haven't taken care of yet. First the locked pages, which have to be at the front of the sysout, after the fixed assignments we have already made") [for IFLOCKED in '(T NIL) do (for VPSEG from 0 to \MAXVMSEGMENT bind PGTAB2 when (NEQ (SETQ PGTAB2 (FASTELT PGTAB VPSEG)) PGEMPTY) do (for I from 0 to (SUB1 PAGESPERSEGMENT) bind (VPBASE _ (UNFOLD VPSEG PAGESPERSEGMENT)) OLDFP when (AND [NOT (ZEROP (SETQ OLDFP (FASTELTN PGTAB2 I ] (EQ (DLLOCKEDPAGEP (IPLUS VPBASE I)) IFLOCKED) (EQ (FASTELTN NEWFPFROMOLD OLDFP) \NO.PAGE.ASSIGNED)) do (ASSIGNFILEPAGE (DLNEXTFP) (IPLUS VPBASE I) OLDFP IFLOCKED))) (COND (IFLOCKED (replace (IFPAGE LastLockedFilePage) of DLIFPAGE with LASTFP) (SETQ LASTFP DLLASTDOMINOPAGE] (replace (IFPAGE NDirtyPages) of DLIFPAGE with (replace (IFPAGE NActivePages ) of DLIFPAGE with %#NEWFILEPAGES ]) - -(DLNEXTFP [LAMBDA NIL (* ;  "Edited 2-Nov-92 12:29 by sybalsky:mv:envos") (do (add LASTFP 1) repeatuntil (EQ (FASTELTN FPTOVP (LLSH LASTFP 1)) \NO.VMEM.PAGE)) LASTFP]) - -(DLLOCKEDPAGEP [LAMBDA (VP) (* bvm%: " 6-Dec-84 22:25") (NEQ 0 (LOGAND (.LOCKEDVPMASK. VP) (FASTELTN DLLOCKBITS (FOLDLO VP BITSPERWORD]) - -(DLSETLOCKBIT [LAMBDA (VP) (* bvm%: " 6-Dec-84 22:26") (FASTSETAN DLLOCKBITS (FOLDLO VP BITSPERWORD) (LOGOR (.LOCKEDVPMASK. VP) (FASTELTN DLLOCKBITS (FOLDLO VP BITSPERWORD]) - -(DLCOPYPAGEMAP +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED " 7-Feb-2021 21:08:57" {DSK}larry>ilisp>medley>sources>DLFIXINIT.;6 26465 changes to%: (FNS DLDUMPSYSOUT) previous date%: " 7-Feb-2021 14:45:27" {DSK}larry>ilisp>medley>sources>DLFIXINIT.;5) (PRETTYCOMPRINT DLFIXINITCOMS) (RPAQQ DLFIXINITCOMS [ (* ;; " This file is all because the dandelion needed its microcode embedded in the init file, and MAIKO wasn't around. So this is all to make room for microcode we don't need. Except something(?) might expect the %"InterfacePage%" as page 2 of the file, so we're leaving it in place now") (FNS DLFIXINIT DLSORTSYSOUTPAGES DLNEXTFP DLLOCKEDPAGEP DLSETLOCKBIT DLCOPYPAGEMAP DLCOPYVMPAGE DLADDPAGEMAPENTRIES ASSIGNFILEPAGE ASSIGNFILEPAGERANGE DLDUMPSYSOUT DLDUMPFPTOVP DLDUMPPAGEMAPS DLDUMPVMEMPAGES DLSETBOOTPTR DLDUMPARRAY DLMARKASDUMPED DLDUMPVMEMPAGE INSTALLDOMINO INSTALLDOMINO.DIRECT INSTALLNEWDOMINO) (FILES RDSYS READSYS) (FNS DLPRINTFPTOVP PRINTPRIMARYMAP DLREADPAGEOFWORDS SETDIF) (CONSTANTS \NO.PAGE.ASSIGNED) (GLOBALVARS DLPRIMARYMAP DLSECONDARYMAP DLLOCKBITS DLLASTDOMINOPAGE DLIFPAGE DLNEXTPM DLPAGEMAPFP FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) (DECLARE%: DONTEVAL@LOAD EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) READSYS LLFAULT) (P (CHECKIMPORTS '(MODARITH LLPARAMS) T]) (* ;; " This file is all because the dandelion needed its microcode embedded in the init file, and MAIKO wasn't around. So this is all to make room for microcode we don't need. Except something(?) might expect the %"InterfacePage%" as page 2 of the file, so we're leaving it in place now" ) (DEFINEQ (DLFIXINIT [LAMBDA (SYSOUTFILE DLBOOTFILE) (* ; "Edited 7-Feb-2021 13:49 by lmm") (* ;  "Edited 2-Nov-92 08:16 by sybalsky:mv:envos") (PROG ((DBPAGES 3) (%#UCODEPAGES 3) (%#ADDEDFILEPAGES 0) %#OLDFILEPAGES %#NEWFILEPAGES %#FPTOVPPAGES DLFILEX) (DECLARE (SPECVARS %#UCODEPAGES NEWFPFROMOLD DBPAGES %#NEWFILEPAGES %#OLDFILEPAGES %#ADDEDFILEPAGES %#FPTOVPPAGES DLFILEX)) (READSYS SYSOUTFILE) (SETQ %#OLDFILEPAGES (FOLDHI (GETFILEINFO VMEMFILE 'LENGTH) BYTESPERPAGE)) (DLCOPYPAGEMAP) (SETQ NEWFPFROMOLD (ARRAY %#OLDFILEPAGES 'WORD \NO.PAGE.ASSIGNED 1)) (DLSORTSYSOUTPAGES) (DLDUMPSYSOUT) (READSYS) (RETURN DLBOOTFILE]) (DLSORTSYSOUTPAGES [LAMBDA NIL (* ;  "Edited 4-Nov-92 15:47 by sybalsky:mv:envos") (DECLARE (USEDFREE FPSIZE NEWFPFROMOLD FPTOVPSIZE FPTOVP PGTAB %#FPTOVPPAGES) (SPECVARS LASTFP)) (PROG (LASTFP) (ASSIGNFILEPAGE \FP.IFPAGE \VP.IFPAGE (SUB1 \FP.IFPAGE) T) (* ;  "SUB1 because old FP's are zero-based! See VMEM structures") (ASSIGNFILEPAGERANGE \VP.DISPLAY \NP.DISPLAY (DLFPFROMRP \RP.TEMPDISPLAY)) (ASSIGNFILEPAGERANGE \VP.STACK PAGESPERSEGMENT (DLFPFROMRP \RP.STACK) T) (ASSIGNFILEPAGERANGE \VP.TYPETABLE \NP.TYPETABLE (DLFPFROMRP \RP.TYPETABLE)) (ASSIGNFILEPAGERANGE \VP.GCTABLE \NP.GCTABLE (DLFPFROMRP \RP.GCTABLE)) (ASSIGNFILEPAGERANGE \VP.GCOVERFLOW \NP.GCOVERFLOW (DLFPFROMRP \RP.GCOVERFLOW)) (ASSIGNFILEPAGERANGE \VP.FPTOVP %#FPTOVPPAGES (DLFPFROMRP \RP.FPTOVP)) (replace (IFPAGE FPTOVPStart) of DLIFPAGE with (DLFPFROMRP \RP.FPTOVP)) (replace (IFPAGE LastDominoFilePage) of DLIFPAGE with (SETQ DLLASTDOMINOPAGE %#UCODEPAGES)) [SETQ LASTFP (SUB1 (SETQ DLPAGEMAPFP (DLFPFROMRP \RP.MISCLOCKED] (* ;; "Assign next the pagemap pages, since we have to know where they live (some are new) and it is very convenient for them to be contiguous") (for J from 0 to (SUB1 \NumPMTpages) do (ASSIGNFILEPAGE (DLNEXTFP) (IPLUS J \VP.PRIMARYMAP) NIL T)) (replace (IFPAGE filePnPMT0) of DLIFPAGE with DLPAGEMAPFP) (replace (IFPAGE filePnPMP0) of DLIFPAGE with (IPLUS DLPAGEMAPFP \NumPMTpages)) (* ;; "NO LONGER -- 5,,0 TAKEN FOR FPTOVP IN MEDLEY 2.1 -- but we need the decondary page table up thru building things, so assign it:") (for J from 0 to (SUB1 (FOLDHI DLNEXTPM WORDSPERPAGE)) do (ASSIGNFILEPAGE (DLNEXTFP) (IPLUS J \VP.SECONDARYMAP) NIL T)) (* ;; "Similarly, assign locked page table, which is another structure we rewrite") (for J from 0 to (SUB1 \NumLPTPages) do (ASSIGNFILEPAGE (DLNEXTFP) (IPLUS J \VP.LPT) NIL T)) (* ;; "Finally, assign file pages for everyone we haven't taken care of yet. First the locked pages, which have to be at the front of the sysout, after the fixed assignments we have already made") [for IFLOCKED in '(T NIL) do (for VPSEG from 0 to \MAXVMSEGMENT bind PGTAB2 when (NEQ (SETQ PGTAB2 (FASTELT PGTAB VPSEG)) PGEMPTY) do (for I from 0 to (SUB1 PAGESPERSEGMENT) bind (VPBASE _ (UNFOLD VPSEG PAGESPERSEGMENT)) OLDFP when (AND [NOT (ZEROP (SETQ OLDFP (FASTELTN PGTAB2 I ] (EQ (DLLOCKEDPAGEP (IPLUS VPBASE I)) IFLOCKED) (EQ (FASTELTN NEWFPFROMOLD OLDFP) \NO.PAGE.ASSIGNED)) do (ASSIGNFILEPAGE (DLNEXTFP) (IPLUS VPBASE I) OLDFP IFLOCKED))) (COND (IFLOCKED (replace (IFPAGE LastLockedFilePage) of DLIFPAGE with LASTFP) (SETQ LASTFP DLLASTDOMINOPAGE] (replace (IFPAGE NDirtyPages) of DLIFPAGE with (replace (IFPAGE NActivePages ) of DLIFPAGE with %#NEWFILEPAGES ]) (DLNEXTFP [LAMBDA NIL (* ;  "Edited 2-Nov-92 12:29 by sybalsky:mv:envos") (do (add LASTFP 1) repeatuntil (EQ (FASTELTN FPTOVP (LLSH LASTFP 1)) \NO.VMEM.PAGE)) LASTFP]) (DLLOCKEDPAGEP [LAMBDA (VP) (* bvm%: " 6-Dec-84 22:25") (NEQ 0 (LOGAND (.LOCKEDVPMASK. VP) (FASTELTN DLLOCKBITS (FOLDLO VP BITSPERWORD]) (DLSETLOCKBIT [LAMBDA (VP) (* bvm%: " 6-Dec-84 22:26") (FASTSETAN DLLOCKBITS (FOLDLO VP BITSPERWORD) (LOGOR (.LOCKEDVPMASK. VP) (FASTELTN DLLOCKBITS (FOLDLO VP BITSPERWORD]) (DLCOPYPAGEMAP [LAMBDA NIL (* ;  "Edited 3-Nov-92 15:46 by sybalsky:mv:envos") (PROG NIL @@ -89,78 +49,4 @@ Copyright (c) 1983, 1984, 1990, 1992, 1998 by Venue & Xerox Corporation. All ri (for J from 0 to (SUB1 \NumLPTPages) do (DLCOPYVMPAGE (IPLUS J \VP.LPT) (\ADDBASE (fetch (ARRAYP BASE) of DLLOCKBITS) - (UNFOLD J WORDSPERPAGE]) - -(DLCOPYVMPAGE [LAMBDA (VP BASE) (* bvm%: "14-Dec-84 12:46") (* Reads page VP from VMEMFILE into  BASE, returning BASE) (SETVMPTR (UNFOLD VP WORDSPERPAGE)) (\BINS VMEMFILEX BASE 0 BYTESPERPAGE) BASE]) - -(DLADDPAGEMAPENTRIES [LAMBDA (VP NPAGES) (* bvm%: "27-MAR-83 17:53") (to NPAGES do [COND ((IEQ (FASTELTN DLPRIMARYMAP (fetch (VP PRIMARYKEY) of VP)) \EmptyPMTEntry) (COND ((EVENP DLNEXTPM WORDSPERPAGE) (* must add a new page map page) (add %#ADDEDFILEPAGES 1))) (FASTSETAN DLPRIMARYMAP (fetch (VP PRIMARYKEY) of VP) DLNEXTPM) (SETQ DLNEXTPM (IPLUS DLNEXTPM \PMblockSize] (add VP 1]) - -(ASSIGNFILEPAGE [LAMBDA (FP VP OLDFP LOCKED) (* ;  "Edited 9-Nov-92 14:54 by sybalsky:mv:envos") (* ;; "Assign VP to live in FP (and hence a related real page); OLDFP is where VP lives in the old sysout") (COND ([NOT (ZEROP (OR OLDFP (SETQ OLDFP (LOGAND (FASTELTN (FASTELT PGTAB (LRSH VP 8)) (LOGAND VP 255)) 32767] (FASTSETAN NEWFPFROMOLD OLDFP FP))) (FASTSETAN FPTOVP (ADD1 (LLSH FP 1)) VP) (FASTSETAN FPTOVP (LLSH FP 1) 0) (PROG [(SECONDARY (FASTELTN DLPRIMARYMAP (fetch (VP PRIMARYKEY) of VP] (* ;  "Update pagemap to point to the new FP") (COND ((IEQ SECONDARY \EmptyPMTEntry) (HELP VP "has no primary map entry")) (T (FASTSETAN DLSECONDARYMAP (IPLUS SECONDARY (fetch (VP SECONDARYKEY) of VP)) FP))) (COND (LOCKED (DLSETLOCKBIT VP]) - -(ASSIGNFILEPAGERANGE [LAMBDA (VPSTART NPAGES FPSTART ONLYIFTHERE) (* bvm%: "25-MAR-83 12:44") (for I from 0 to (SUB1 NPAGES) unless [AND ONLYIFTHERE (NOT (VMPAGEP (IPLUS VPSTART I] do (ASSIGNFILEPAGE (IPLUS FPSTART I) (IPLUS VPSTART I) NIL T]) - -(DLDUMPSYSOUT [LAMBDA NIL (* ;  "Edited 3-Nov-92 10:50 by sybalsky:mv:envos") (PROG [(DLPAGEOFZEROS (NCREATE 'VMEMPAGEP] [RESETSAVE [SETQ DLFILEX (OPENSTREAM DLBOOTFILE 'OUTPUT 'NEW 8 (CONS (LIST 'LENGTH (UNFOLD %#NEWFILEPAGES BYTESPERPAGE)) '((SEQUENTIAL T) (TYPE BINARY] '(PROGN (CLOSEF? OLDVALUE) (AND RESETSTATE (DELFILE OLDVALUE] (SETQ DLBOOTFILE (FULLNAME DLFILEX)) (PROGN (COPYBYTES DBFILE DLFILEX 0 BYTESPERPAGE) (* ; "First page of domino") (\BOUTS DLFILEX DLIFPAGE 0 BYTESPERPAGE) (* ; "Interface Page") (COPYBYTES DBFILE DLFILEX) (* ; "Rest of Domino") (RPTQ (IDIFFERENCE (UNFOLD (SUB1 DLLASTDOMINOPAGE) BYTESPERPAGE) (IPLUS (GETFILEPTR DBFILE) BYTESPERPAGE)) (\BOUT DLFILEX 0)) (* ;  "(SETFILEPTR DLFILEX (UNFOLD (SUB1 DLLASTDOMINOPAGE) BYTESPERPAGE))") (SETFILEPTR DBFILE 0) (COPYBYTES DBFILE DLFILEX 0 BYTESPERPAGE) (* ; "Replicate domino first page") ) (DLDUMPVMEMPAGES (ADD1 DLLASTDOMINOPAGE) (SUB1 (DLFPFROMRP \RP.FPTOVP))) (DLDUMPFPTOVP) (DLDUMPVMEMPAGES (IPLUS (DLFPFROMRP \RP.FPTOVP) %#FPTOVPPAGES) (SUB1 DLPAGEMAPFP)) (DLDUMPPAGEMAPS) (DLDUMPVMEMPAGES (IPLUS DLPAGEMAPFP \NumPMTpages (FOLDHI DLNEXTPM WORDSPERPAGE) \NumLPTPages) %#NEWFILEPAGES]) - -(DLDUMPFPTOVP [LAMBDA NIL (* ;  "Edited 4-Nov-92 13:56 by sybalsky:mv:envos") (printout T "[FPTOVP]") (* ;; "Filepages are one-based, but FPTOVP in the sysout is zero-based for convenience. Hence, first entry (page zero) is dummy") (\WOUT DLFILEX \NO.VMEM.PAGE) (* ;; "With BIG VM, each FPTOVP entry is 2 words, and word 1 (the 1st element of the array) is actually part of the entry for page 0 (which we dumped the other half above). So we need to dump 2*#pages + 1 elements of the array:") (DLDUMPARRAY FPTOVP (ADD1 (LLSH %#NEWFILEPAGES 1))) (RPTQ (IDIFFERENCE (UNFOLD %#FPTOVPPAGES WORDSPERPAGE) (LLSH (ADD1 %#NEWFILEPAGES) 1)) (\WOUT DLFILEX \NO.VMEM.PAGE)) (* ; "Fill out rest of FPTOVP with no such page. Fill from #pages*2 (it's cells now, not words per FPTOVP entry), out to the end of the FPTOVP pages.") NIL]) - -(DLDUMPPAGEMAPS [LAMBDA NIL (* ;  "Edited 3-Nov-92 10:47 by sybalsky:mv:envos") (printout T "[PageMaps]") (DLDUMPARRAY DLPRIMARYMAP (UNFOLD \NumPMTpages WORDSPERPAGE)) (* ; "Dump primary map") (DLDUMPARRAY DLSECONDARYMAP (CEIL DLNEXTPM WORDSPERPAGE)) (* ; "Dump secondary map") (DLDUMPARRAY DLLOCKBITS (UNFOLD \NumLPTPages WORDSPERPAGE)) (* ; "Dump locked page table") NIL]) - -(DLDUMPVMEMPAGES [LAMBDA (FIRSTFP LASTFP) (* ;  "Edited 2-Nov-92 12:30 by sybalsky:mv:envos") (for FP from FIRSTFP to LASTFP bind VP do (COND ((AND (NEQ [SETQ VP (FASTELTN FPTOVP (ADD1 (LLSH FP 1] \NO.VMEM.PAGE) (VMPAGEP VP)) (SETVMPTR (UNFOLD VP WORDSPERPAGE)) (COPYBYTES VMEMFILE DLFILEX BYTESPERPAGE) (PRIN1 '* T)) (T (\BOUTS DLFILEX DLPAGEOFZEROS 0 BYTESPERPAGE) (PRIN1 'x T]) - -(DLSETBOOTPTR [LAMBDA (FP) (* bvm%: "27-MAR-83 17:39") (printout T "[" .P2 FP "]") (SETFILEPTR DLFILEX (UNFOLD (SUB1 FP) BYTESPERPAGE]) - -(DLDUMPARRAY [LAMBDA (ARR NWORDS) (* ;  "Edited 3-Nov-92 11:52 by sybalsky:mv:envos") (* ;; "Dump NWORDS from array ARR, starting with the first byte in the array's contents.") (\BOUTS DLFILEX (fetch (ARRAYP BASE) of ARR) 0 (UNFOLD NWORDS BYTESPERWORD]) - -(DLMARKASDUMPED [LAMBDA (FIRSTFP NPAGES) (* ;  "Edited 2-Nov-92 12:30 by sybalsky:mv:envos") (for I from FIRSTFP to (IPLUS FIRSTFP NPAGES -1) do (FASTSETAN FPTOVP (LLSH I 1) \NO.VMEM.PAGE]) - -(DLDUMPVMEMPAGE [LAMBDA (NEWFP VP LOCKEDP) (* bvm%: "28-MAR-83 12:11") (COND ((VMPAGEP VP) (SETVMPTR (UNFOLD VP WORDSPERPAGE)) [PROG ((DESTINATIONBYTE (UNFOLD (SUB1 NEWFP) BYTESPERPAGE))) (COND ((NOT (IEQP (\GETFILEPTR DLFILEX) DESTINATIONBYTE)) (printout T "[" .P2 NEWFP "]") (SETFILEPTR DLFILEX DESTINATIONBYTE] (COPYBYTES VMEMFILE DLFILEX BYTESPERPAGE) (PRIN1 (COND (LOCKEDP '$) (T '*)) T)) (T (PRIN1 'x T]) - -(INSTALLDOMINO [LAMBDA (DBFILE) (* edited%: "14-APR-83 12:00") (DLSETBOOTPTR 1) (COPYBYTES DBFILE DLFILEX 0 BYTESPERPAGE) (DLSETBOOTPTR (ADD1 \FP.IFPAGE)) (* Skip over InterfacePage) (COPYBYTES DBFILE DLFILEX) (* Copy rest of Domino) (DLSETBOOTPTR DLLASTDOMINOPAGE) (SETFILEPTR DBFILE 0) (* Copy first DB page into scratch at end of Domino reserved space so that  SYSOUT can get it (Dolphin and Dorado smash first page of vmem)) (COPYBYTES DBFILE DLFILEX 0 BYTESPERPAGE]) - -(INSTALLDOMINO.DIRECT [LAMBDA (DBFILE) (* bvm%: "29-JUL-83 16:16") (PROG [(BUFFER (COND ((IGREATERP \#SWAPBUFFERS 1) (RESETSAVE \EMUSWAPBUFFERS (\ADDBASE \EMUSWAPBUFFERS WORDSPERPAGE)) (RESETSAVE \#SWAPBUFFERS (SUB1 \#SWAPBUFFERS)) \EMUSWAPBUFFERS) (T (RESETSAVE \EMUDISKBUFFERS (\ADDBASE \EMUDISKBUFFERS WORDSPERPAGE)) (RESETSAVE \#DISKBUFFERS (SUB1 \#DISKBUFFERS)) \EMUDISKBUFFERS] (replace ENDOFSTREAMOP of DBFILE with (FUNCTION ZERO)) (\BINS DBFILE BUFFER 0 BYTESPERPAGE) (COND ((EQ \MACHINETYPE \DANDELION) (\ACTONVMEMFILE 1 BUFFER 1 T))) (\BINS DBFILE BUFFER 0 BYTESPERPAGE) (* Skip over InterfacePage) (for I from (ADD1 \FP.IFPAGE) until (\EOFP DBFILE) do (\BINS DBFILE BUFFER 0 BYTESPERPAGE) (\ACTONVMEMFILE I BUFFER 1 T)) (* Copy rest of Domino) ]) - -(INSTALLNEWDOMINO [LAMBDA (SYSOUTFILE DBFILE) (* bvm%: "29-JUL-83 16:08") (RESETLST (SETQ DBFILE (GETSTREAM (OPENFILE (OR DBFILE (INFILEP '{DSK}DLISPDOMINO.DB) '{PHYLUM}DLION>BASICS>DLISPDOMINO.DB) 'INPUT) 'INPUT)) (RESETSAVE NIL (LIST 'CLOSEF DBFILE)) (PROG ((DBPAGES (IPLUS (FOLDHI (GETFILEINFO DBFILE 'LENGTH) BYTESPERPAGE) 2)) %#UCODEPAGES DLFILEX) (DECLARE (SPECVARS DLFILEX)) [COND [SYSOUTFILE [RESETSAVE NIL (LIST 'CLOSEF (SETQ SYSOUTFILE (OPENFILE SYSOUTFILE 'INPUT] (SETQ %#UCODEPAGES (SETQ DLLASTDOMINOPAGE (fetch (IFPAGE LastDominoFilePage ) of (\MAPPAGE 1 (GETSTREAM SYSOUTFILE] ((ASKUSER NIL NIL (LIST "Shall I install" (fetch FULLFILENAME of DBFILE) "directly into the vmem file")) (SETQ %#UCODEPAGES (SETQ DLLASTDOMINOPAGE (fetch (IFPAGE LastDominoFilePage) of \InterfacePage] (COND ((ILESSP %#UCODEPAGES DBPAGES) (RETURN "Not enough space for Domino"))) (COND (SYSOUTFILE (OPENFILE (CLOSEF SYSOUTFILE) 'BOTH) (SETQ DLFILEX (GETSTREAM SYSOUTFILE)) (INSTALLDOMINO DBFILE)) (T (INSTALLDOMINO.DIRECT DBFILE))) (RETURN SYSOUTFILE)))]) -) -(DEFINEQ - -(DLPRINTFPTOVP [LAMBDA (STREAM) (* bvm%: "28-MAR-83 12:42") (\PRINTFPTOVP (\ADDBASE (fetch (ARRAYP BASE) of FPTOVP) -1) (fetch (IFPAGE NActivePages) of DLIFPAGE) STREAM]) - -(PRINTPRIMARYMAP [LAMBDA NIL (* bvm%: "28-MAR-83 23:25") (for I from 0 to 63 do (printout T I ": " 8) [for J from 0 to 7 bind PMPE do (COND ((EQ [SETQ PMPE (ELT DLPRIMARYMAP (PLUS J (TIMES I 8] 65535) (printout T " -----")) (T (printout T .I6.8 PMPE] (TERPRI T) unless (for J from 0 to 7 always (EQ (ELT DLPRIMARYMAP (PLUS J (TIMES I 8))) 65535]) - -(DLREADPAGEOFWORDS [LAMBDA (STREAM) (* bvm%: "29-MAR-83 00:03") (to WORDSPERPAGE collect (\WIN STREAM]) - -(SETDIF [LAMBDA (X Y) (* bvm%: "28-MAR-83 15:28") (for EL in X collect EL unless (FMEMB EL Y]) -) -(DECLARE%: EVAL@COMPILE - -(RPAQQ \NO.PAGE.ASSIGNED 0) - - -(CONSTANTS \NO.PAGE.ASSIGNED) -) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS DLPRIMARYMAP DLSECONDARYMAP DLLOCKBITS DLLASTDOMINOPAGE DLIFPAGE DLNEXTPM DLPAGEMAPFP - FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) -) -(DECLARE%: DONTEVAL@LOAD EVAL@COMPILE DONTCOPY - -(FILESLOAD (LOADCOMP) - READSYS LLFAULT) - - -(CHECKIMPORTS '(MODARITH LLPARAMS) - T) -) -(PUTPROPS DLFIXINIT COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1990 1992 1998)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (1368 25824 (DLFIXINIT 1378 . 3816) (DLSORTSYSOUTPAGES 3818 . 8944) (DLNEXTFP 8946 . -9283) (DLLOCKEDPAGEP 9285 . 9499) (DLSETLOCKBIT 9501 . 9763) (DLCOPYPAGEMAP 9765 . 12816) ( -DLCOPYVMPAGE 12818 . 13208) (DLADDPAGEMAPENTRIES 13210 . 14025) (ASSIGNFILEPAGE 14027 . 15260) ( -ASSIGNFILEPAGERANGE 15262 . 15669) (DLDUMPSYSOUT 15671 . 17682) (DLDUMPFPTOVP 17684 . 18723) ( -DLDUMPPAGEMAPS 18725 . 19425) (DLDUMPVMEMPAGES 19427 . 20083) (DLSETBOOTPTR 20085 . 20315) ( -DLDUMPARRAY 20317 . 20704) (DLMARKASDUMPED 20706 . 21159) (DLDUMPVMEMPAGE 21161 . 21849) ( -INSTALLDOMINO 21851 . 22498) (INSTALLDOMINO.DIRECT 22500 . 23652) (INSTALLNEWDOMINO 23654 . 25822)) ( -25825 27182 (DLPRINTFPTOVP 25835 . 26124) (PRINTPRIMARYMAP 26126 . 26840) (DLREADPAGEOFWORDS 26842 . -27009) (SETDIF 27011 . 27180))))) -STOP + (UNFOLD J WORDSPERPAGE]) (DLCOPYVMPAGE [LAMBDA (VP BASE) (* bvm%: "14-Dec-84 12:46") (* Reads page VP from VMEMFILE into  BASE, returning BASE) (SETVMPTR (UNFOLD VP WORDSPERPAGE)) (\BINS VMEMFILEX BASE 0 BYTESPERPAGE) BASE]) (DLADDPAGEMAPENTRIES [LAMBDA (VP NPAGES) (* bvm%: "27-MAR-83 17:53") (to NPAGES do [COND ((IEQ (FASTELTN DLPRIMARYMAP (fetch (VP PRIMARYKEY) of VP)) \EmptyPMTEntry) (COND ((EVENP DLNEXTPM WORDSPERPAGE) (* must add a new page map page) (add %#ADDEDFILEPAGES 1))) (FASTSETAN DLPRIMARYMAP (fetch (VP PRIMARYKEY) of VP) DLNEXTPM) (SETQ DLNEXTPM (IPLUS DLNEXTPM \PMblockSize] (add VP 1]) (ASSIGNFILEPAGE [LAMBDA (FP VP OLDFP LOCKED) (* ;  "Edited 9-Nov-92 14:54 by sybalsky:mv:envos") (* ;; "Assign VP to live in FP (and hence a related real page); OLDFP is where VP lives in the old sysout") (COND ([NOT (ZEROP (OR OLDFP (SETQ OLDFP (LOGAND (FASTELTN (FASTELT PGTAB (LRSH VP 8)) (LOGAND VP 255)) 32767] (FASTSETAN NEWFPFROMOLD OLDFP FP))) (FASTSETAN FPTOVP (ADD1 (LLSH FP 1)) VP) (FASTSETAN FPTOVP (LLSH FP 1) 0) (PROG [(SECONDARY (FASTELTN DLPRIMARYMAP (fetch (VP PRIMARYKEY) of VP] (* ;  "Update pagemap to point to the new FP") (COND ((IEQ SECONDARY \EmptyPMTEntry) (HELP VP "has no primary map entry")) (T (FASTSETAN DLSECONDARYMAP (IPLUS SECONDARY (fetch (VP SECONDARYKEY) of VP)) FP))) (COND (LOCKED (DLSETLOCKBIT VP]) (ASSIGNFILEPAGERANGE [LAMBDA (VPSTART NPAGES FPSTART ONLYIFTHERE) (* bvm%: "25-MAR-83 12:44") (for I from 0 to (SUB1 NPAGES) unless [AND ONLYIFTHERE (NOT (VMPAGEP (IPLUS VPSTART I] do (ASSIGNFILEPAGE (IPLUS FPSTART I) (IPLUS VPSTART I) NIL T]) (DLDUMPSYSOUT [LAMBDA NIL (* ; "Edited 7-Feb-2021 20:46 by larry") (* ; "Edited 7-Feb-2021 14:28 by lmm") (* ;  "Edited 3-Nov-92 10:50 by sybalsky:mv:envos") (PROG [(DLPAGEOFZEROS (NCREATE 'VMEMPAGEP] [SETQ DLFILEX (OPENSTREAM DLBOOTFILE 'OUTPUT 'NEW 8 (CONS (LIST 'LENGTH (UNFOLD %#NEWFILEPAGES BYTESPERPAGE )) '((SEQUENTIAL T) (TYPE BINARY] (SETQ DLBOOTFILE (FULLNAME DLFILEX)) (PROGN (\BOUTS DLFILEX DLPAGEOFZEROS 0 BYTESPERPAGE) (\BOUTS DLFILEX DLIFPAGE 0 BYTESPERPAGE) (\BOUTS DLFILEX DLPAGEOFZEROS 0 BYTESPERPAGE)) (DLDUMPVMEMPAGES (ADD1 DLLASTDOMINOPAGE) (SUB1 (DLFPFROMRP \RP.FPTOVP))) (DLDUMPFPTOVP) (DLDUMPVMEMPAGES (IPLUS (DLFPFROMRP \RP.FPTOVP) %#FPTOVPPAGES) (SUB1 DLPAGEMAPFP)) (DLDUMPPAGEMAPS) (DLDUMPVMEMPAGES (IPLUS DLPAGEMAPFP \NumPMTpages (FOLDHI DLNEXTPM WORDSPERPAGE) \NumLPTPages) %#NEWFILEPAGES) (CLOSEF DLFILEX]) (DLDUMPFPTOVP [LAMBDA NIL (* ;  "Edited 4-Nov-92 13:56 by sybalsky:mv:envos") (printout T "[FPTOVP]") (* ;; "Filepages are one-based, but FPTOVP in the sysout is zero-based for convenience. Hence, first entry (page zero) is dummy") (\WOUT DLFILEX \NO.VMEM.PAGE) (* ;; "With BIG VM, each FPTOVP entry is 2 words, and word 1 (the 1st element of the array) is actually part of the entry for page 0 (which we dumped the other half above). So we need to dump 2*#pages + 1 elements of the array:") (DLDUMPARRAY FPTOVP (ADD1 (LLSH %#NEWFILEPAGES 1))) (RPTQ (IDIFFERENCE (UNFOLD %#FPTOVPPAGES WORDSPERPAGE) (LLSH (ADD1 %#NEWFILEPAGES) 1)) (\WOUT DLFILEX \NO.VMEM.PAGE)) (* ; "Fill out rest of FPTOVP with no such page. Fill from #pages*2 (it's cells now, not words per FPTOVP entry), out to the end of the FPTOVP pages.") NIL]) (DLDUMPPAGEMAPS [LAMBDA NIL (* ;  "Edited 3-Nov-92 10:47 by sybalsky:mv:envos") (printout T "[PageMaps]") (DLDUMPARRAY DLPRIMARYMAP (UNFOLD \NumPMTpages WORDSPERPAGE)) (* ; "Dump primary map") (DLDUMPARRAY DLSECONDARYMAP (CEIL DLNEXTPM WORDSPERPAGE)) (* ; "Dump secondary map") (DLDUMPARRAY DLLOCKBITS (UNFOLD \NumLPTPages WORDSPERPAGE)) (* ; "Dump locked page table") NIL]) (DLDUMPVMEMPAGES [LAMBDA (FIRSTFP LASTFP) (* ;  "Edited 2-Nov-92 12:30 by sybalsky:mv:envos") (for FP from FIRSTFP to LASTFP bind VP do (COND ((AND (NEQ [SETQ VP (FASTELTN FPTOVP (ADD1 (LLSH FP 1] \NO.VMEM.PAGE) (VMPAGEP VP)) (SETVMPTR (UNFOLD VP WORDSPERPAGE)) (COPYBYTES VMEMFILE DLFILEX BYTESPERPAGE) (PRIN1 '* T)) (T (\BOUTS DLFILEX DLPAGEOFZEROS 0 BYTESPERPAGE) (PRIN1 'x T]) (DLSETBOOTPTR [LAMBDA (FP) (* bvm%: "27-MAR-83 17:39") (printout T "[" .P2 FP "]") (SETFILEPTR DLFILEX (UNFOLD (SUB1 FP) BYTESPERPAGE]) (DLDUMPARRAY [LAMBDA (ARR NWORDS) (* ;  "Edited 3-Nov-92 11:52 by sybalsky:mv:envos") (* ;; "Dump NWORDS from array ARR, starting with the first byte in the array's contents.") (\BOUTS DLFILEX (fetch (ARRAYP BASE) of ARR) 0 (UNFOLD NWORDS BYTESPERWORD]) (DLMARKASDUMPED [LAMBDA (FIRSTFP NPAGES) (* ;  "Edited 2-Nov-92 12:30 by sybalsky:mv:envos") (for I from FIRSTFP to (IPLUS FIRSTFP NPAGES -1) do (FASTSETAN FPTOVP (LLSH I 1) \NO.VMEM.PAGE]) (DLDUMPVMEMPAGE [LAMBDA (NEWFP VP LOCKEDP) (* bvm%: "28-MAR-83 12:11") (COND ((VMPAGEP VP) (SETVMPTR (UNFOLD VP WORDSPERPAGE)) [PROG ((DESTINATIONBYTE (UNFOLD (SUB1 NEWFP) BYTESPERPAGE))) (COND ((NOT (IEQP (\GETFILEPTR DLFILEX) DESTINATIONBYTE)) (printout T "[" .P2 NEWFP "]") (SETFILEPTR DLFILEX DESTINATIONBYTE] (COPYBYTES VMEMFILE DLFILEX BYTESPERPAGE) (PRIN1 (COND (LOCKEDP '$) (T '*)) T)) (T (PRIN1 'x T]) (INSTALLDOMINO [LAMBDA (DBFILE) (* edited%: "14-APR-83 12:00") (DLSETBOOTPTR 1) (COPYBYTES DBFILE DLFILEX 0 BYTESPERPAGE) (DLSETBOOTPTR (ADD1 \FP.IFPAGE)) (* Skip over InterfacePage) (COPYBYTES DBFILE DLFILEX) (* Copy rest of Domino) (DLSETBOOTPTR DLLASTDOMINOPAGE) (SETFILEPTR DBFILE 0) (* Copy first DB page into scratch at end of Domino reserved space so that  SYSOUT can get it (Dolphin and Dorado smash first page of vmem)) (COPYBYTES DBFILE DLFILEX 0 BYTESPERPAGE]) (INSTALLDOMINO.DIRECT [LAMBDA (DBFILE) (* bvm%: "29-JUL-83 16:16") (PROG [(BUFFER (COND ((IGREATERP \#SWAPBUFFERS 1) (RESETSAVE \EMUSWAPBUFFERS (\ADDBASE \EMUSWAPBUFFERS WORDSPERPAGE)) (RESETSAVE \#SWAPBUFFERS (SUB1 \#SWAPBUFFERS)) \EMUSWAPBUFFERS) (T (RESETSAVE \EMUDISKBUFFERS (\ADDBASE \EMUDISKBUFFERS WORDSPERPAGE)) (RESETSAVE \#DISKBUFFERS (SUB1 \#DISKBUFFERS)) \EMUDISKBUFFERS] (replace ENDOFSTREAMOP of DBFILE with (FUNCTION ZERO)) (\BINS DBFILE BUFFER 0 BYTESPERPAGE) (COND ((EQ \MACHINETYPE \DANDELION) (\ACTONVMEMFILE 1 BUFFER 1 T))) (\BINS DBFILE BUFFER 0 BYTESPERPAGE) (* Skip over InterfacePage) (for I from (ADD1 \FP.IFPAGE) until (\EOFP DBFILE) do (\BINS DBFILE BUFFER 0 BYTESPERPAGE) (\ACTONVMEMFILE I BUFFER 1 T)) (* Copy rest of Domino) ]) (INSTALLNEWDOMINO [LAMBDA (SYSOUTFILE DBFILE) (* bvm%: "29-JUL-83 16:08") (RESETLST (SETQ DBFILE (GETSTREAM (OPENFILE (OR DBFILE (INFILEP '{DSK}DLISPDOMINO.DB) '{PHYLUM}DLION>BASICS>DLISPDOMINO.DB) 'INPUT) 'INPUT)) (RESETSAVE NIL (LIST 'CLOSEF DBFILE)) (PROG ((DBPAGES (IPLUS (FOLDHI (GETFILEINFO DBFILE 'LENGTH) BYTESPERPAGE) 2)) %#UCODEPAGES DLFILEX) (DECLARE (SPECVARS DLFILEX)) [COND [SYSOUTFILE [RESETSAVE NIL (LIST 'CLOSEF (SETQ SYSOUTFILE (OPENFILE SYSOUTFILE 'INPUT] (SETQ %#UCODEPAGES (SETQ DLLASTDOMINOPAGE (fetch (IFPAGE LastDominoFilePage ) of (\MAPPAGE 1 (GETSTREAM SYSOUTFILE] ((ASKUSER NIL NIL (LIST "Shall I install" (fetch FULLFILENAME of DBFILE) "directly into the vmem file")) (SETQ %#UCODEPAGES (SETQ DLLASTDOMINOPAGE (fetch (IFPAGE LastDominoFilePage) of \InterfacePage] (COND ((ILESSP %#UCODEPAGES DBPAGES) (RETURN "Not enough space for Domino"))) (COND (SYSOUTFILE (OPENFILE (CLOSEF SYSOUTFILE) 'BOTH) (SETQ DLFILEX (GETSTREAM SYSOUTFILE)) (INSTALLDOMINO DBFILE)) (T (INSTALLDOMINO.DIRECT DBFILE))) (RETURN SYSOUTFILE)))]) ) (FILESLOAD RDSYS READSYS) (DEFINEQ (DLPRINTFPTOVP [LAMBDA (STREAM) (* bvm%: "28-MAR-83 12:42") (\PRINTFPTOVP (\ADDBASE (fetch (ARRAYP BASE) of FPTOVP) -1) (fetch (IFPAGE NActivePages) of DLIFPAGE) STREAM]) (PRINTPRIMARYMAP [LAMBDA NIL (* bvm%: "28-MAR-83 23:25") (for I from 0 to 63 do (printout T I ": " 8) [for J from 0 to 7 bind PMPE do (COND ((EQ [SETQ PMPE (ELT DLPRIMARYMAP (PLUS J (TIMES I 8] 65535) (printout T " -----")) (T (printout T .I6.8 PMPE] (TERPRI T) unless (for J from 0 to 7 always (EQ (ELT DLPRIMARYMAP (PLUS J (TIMES I 8))) 65535]) (DLREADPAGEOFWORDS [LAMBDA (STREAM) (* bvm%: "29-MAR-83 00:03") (to WORDSPERPAGE collect (\WIN STREAM]) (SETDIF [LAMBDA (X Y) (* bvm%: "28-MAR-83 15:28") (for EL in X collect EL unless (FMEMB EL Y]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \NO.PAGE.ASSIGNED 0) (CONSTANTS \NO.PAGE.ASSIGNED) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DLPRIMARYMAP DLSECONDARYMAP DLLOCKBITS DLLASTDOMINOPAGE DLIFPAGE DLNEXTPM DLPAGEMAPFP FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) ) (DECLARE%: DONTEVAL@LOAD EVAL@COMPILE DONTCOPY (FILESLOAD (LOADCOMP) READSYS LLFAULT) (CHECKIMPORTS '(MODARITH LLPARAMS) T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (1881 24637 (DLFIXINIT 1891 . 2879) (DLSORTSYSOUTPAGES 2881 . 8007) (DLNEXTFP 8009 . 8346) (DLLOCKEDPAGEP 8348 . 8562) (DLSETLOCKBIT 8564 . 8826) (DLCOPYPAGEMAP 8828 . 11879) ( DLCOPYVMPAGE 11881 . 12271) (DLADDPAGEMAPENTRIES 12273 . 13088) (ASSIGNFILEPAGE 13090 . 14323) ( ASSIGNFILEPAGERANGE 14325 . 14732) (DLDUMPSYSOUT 14734 . 16495) (DLDUMPFPTOVP 16497 . 17536) ( DLDUMPPAGEMAPS 17538 . 18238) (DLDUMPVMEMPAGES 18240 . 18896) (DLSETBOOTPTR 18898 . 19128) ( DLDUMPARRAY 19130 . 19517) (DLMARKASDUMPED 19519 . 19972) (DLDUMPVMEMPAGE 19974 . 20662) ( INSTALLDOMINO 20664 . 21311) (INSTALLDOMINO.DIRECT 21313 . 22465) (INSTALLNEWDOMINO 22467 . 24635)) ( 24665 26022 (DLPRINTFPTOVP 24675 . 24964) (PRINTPRIMARYMAP 24966 . 25680) (DLREADPAGEOFWORDS 25682 . 25849) (SETDIF 25851 . 26020))))) STOP \ No newline at end of file diff --git a/sources/DLFIXINIT.LCOM b/sources/DLFIXINIT.LCOM index cefd8ac0393f4481243e34166724bcb50baa4479..a8f36d86d58e7d7155107f1ff734b3244d4d407b 100644 GIT binary patch delta 1749 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 P@P1O13bwm#TIqiSM-b_1 diff --git a/sources/FILESETS b/sources/FILESETS index 44f2109e..dcb746e2 100644 --- a/sources/FILESETS +++ b/sources/FILESETS @@ -1,175 +1 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "29-Jan-98 16:26:53" {DSK}disk2>jdstools>lc3>lispcore3.0>sources>FILESETS.;2 7340 - - changes to%: (VARS RENAMETYPES) - - previous date%: " 9-Apr-90 16:57:44" -{DSK}disk2>jdstools>lc3>lispcore3.0>sources>FILESETS.;1) - - -(* ; " -Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1998 by Xerox Corporation. All rights reserved. -") - -(PRETTYCOMPRINT FILESETSCOMS) - -(RPAQQ FILESETSCOMS ( - -(* ;;; "contains all of the lists of files which are used in various ways") - - - (* ;; "I took out the EXPORT of the filesets because it led to inconsistency when one had loaded ABC. -- Pavel") - - (VARS * FILESETS) - (VARS EXPORTFILES) - (VARS MAKEINITFILES MAKEINITTYPES RENAMETYPES ABCFILES READSYSFILES - DATABASEFILES) - (VARS DEADFNS))) - - - -(* ;;; "contains all of the lists of files which are used in various ways") - - - - -(* ;; -"I took out the EXPORT of the filesets because it led to inconsistency when one had loaded ABC. -- Pavel" -) - - -(RPAQQ FILESETS (0LISPSET 1LISPSET 2LISPSET 3LISPSET 4LISPSET 5LISPSET 6LISPSET 7LISPSET 8LISPSET - 9LISPSET)) - -(RPAQQ 0LISPSET - (PACKAGE-CONVERSION-TABLE LLFAULT LLSUBRS LLBFS LLNEW FILEIO IMAGEIO LLBASIC LLGC LLARRAYELT - LLINTERP LLMVS DEFSTRUCT-RUN-TIME SETF-RUNTIME CMLSEQBASICS LLARITH LLFLOAT LLBIGNUM - LLREAD LLCHAR LLSTK LLDATATYPE IOCHAR LLKEY LLTIMER)) - -(RPAQQ 1LISPSET - (ASTACK DTDECLARE ATBL LLCODE ACODE COREIO AOFD ADIR PMAP VANILLADISK MOD44IO ATERM APRINT - ABASIC AERROR AINTERRUPT MISC BOOTSTRAP CMLMACROS CMLEVAL CMLPROGV CMLSPECIALFORMS - LLRESTART LLERROR LLSYMBOL LLPACKAGE PACKAGE-STARTUP CONDITION-PACKAGE XCL-PACKAGE PROC - CMLARRAY DSK UFS UFSCALLC LLETHER PUP LEAF PASSWORDS FONT SUNFONT LLDISPLAY APUTDQ - COMPATIBILITY DMISC CMLMACROS CMLLIST CMLCHARACTER CMLREADTABLE MAIKOLOADUPFNS - MAIKOBITBLT MAIKOINIT)) - -(RPAQQ 2LISPSET (MACHINEINDEPENDENT POSTLOADUP)) - -(RPAQQ 3LISPSET (MACROS DLAP BYTECOMPILER COMPILE)) - -(RPAQQ 4LISPSET (EDIT WEDIT HELPDL PRETTY COMMENT BREAK ADVISE LOADFNS FILEPKG DFILE DMISC)) - -(RPAQQ 5LISPSET (HIST UNDO SPELL DWIM WTFIX CLISP DWIMIFY CLISPIFY RECORD ASSIST)) - -(RPAQQ 6LISPSET (MSANALYZE MSPARSE MASTERSCOPE HPRINT BRKDWN MATCH)) - -(RPAQQ 7LISPSET - (ADISPLAY DEXEC AARITH AFONT HARDCOPY PRESS HLDISPLAY MENU WINDOW WBREAK INSPECT - INSPECT-CLOSURE BSP CHAT TRSERVER 10MBDRIVER LLNS DISKDLION SPP COURIER NSPRINT - CLEARINGHOUSE NSFILING INTERPRESS ADDARITH MACROAUX DEDIT DSPRINTDEF NEWPRINTDEF TTYIN - DPUPFTP FLOPPY)) - -(RPAQQ 8LISPSET (MAKEINIT MEM RENAMEFNS)) - -(RPAQQ 9LISPSET (LLFCOMPILE VMEM READSYS APS PCALLSTATS UPCSTATS REMOTEVMEM)) - -(RPAQQ EXPORTFILES - (FILESETS MODARITH LLPARAMS LLCODE AERROR AOFD APRINT ATERM LLARRAYELT LLDATATYPE LLNEW - LLBASIC LLCHAR LLSTK PMAP LLGC ATBL FILEIO LLARITH LLFLOAT FONT LLKEY LLDISPLAY - ADISPLAY AINTERRUPT PUP RENAMEMACROS HLDISPLAY WINDOW MACROAUX ADDARITH LLFAULT LLTIMER - LLETHER IMAGEIO PROC LLREAD PASSWORDS INTERPRESS HARDCOPY CMLARRAY LLSUBRS)) - -(RPAQQ MAKEINITFILES (MAKEINIT MEM I-NEW)) - -(RPAQQ MAKEINITTYPES - ((NIL INIT (0 1) - 2LISPSET 1600) - (SMALLINIT SMALLINIT (LLFAULT LLSUBRS LLNEW FILEIO LLBASIC LLGC LLINTERP LLARITH LLREAD - LLCHAR TINYPATCH)) - (MACROTEST MACROTEST ((MACROTEST) - 0 1) - 2LISPSET) - (MICROTEST MICROTEST ((MICROTEST LLFAULT LLSTK LLSUBRS LLKEY LLBFS))) - (NANOTEST NANOTEST ((MICROTEST LLSUBRS))) - (NULL NULL ((DUMMY))) - (MILLITEST MILLITEST - ((MACROTEST LLFAULT LLSUBRS LLNEW LLBASIC LLGC LLINTERP LLARITH LLFLOAT LLARRAYELT - LLSTK LLDATATYPE LLKEY ABASIC LLCHAR ASTACK MISC APUTDQ))) - (CHECKARRAYS CHECKARRAYS (CHECKARRAYSPACE 0 1) - 2LISPSET))) - -(RPAQQ RENAMETYPES - ((I (FILES LLPARAMS LLCODE LLARRAYELT LLCHAR LLNEW LLBASIC LLDATATYPE LLGC LLSTK RENAMEMACROS - MODARITH LLFAULT LLKEY LLBFS LLTIMER) - (RENAMEDFILE . I-NEW) - (SUBNAME . MKI.SUBFNS) - (COMSNAME . INEWCOMS) - (EXTRACOMS (VARS INITPTRS INITVALUES) - (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) - MAKEINIT))) - (MKI.SUBFNS) - (INEWCOMS) - (VALUES . INITVALUES) - (PTRS . INITPTRS) - (PREFIX . I.) - (VAG2FN . I.VAG2)) - (R (FILES LLCODE LLPARAMS LLBASIC LLDATATYPE LLNEW ACODE LLARRAYELT LLCHAR LLINTERP LLSTK - RENAMEMACROS MODARITH LLFAULT) - (RENAMEDFILE . RDSYS) - (SUBNAME . RD.SUBFNS) - (COMSNAME . RDCOMS) - (EXTRACOMS - - (* ;; "YOU MUST REMAKE THIS FILE using (DORENAME 'R) (after CONNing to library) whenever the SYSOUT layout changes in LLPARAMS (e.g., if MDSTypeTable moves)") - - (FILES VMEM) - (VARS RDVALS RDPTRS) - (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) - VMEM))) - (RD.SUBFNS (\CALLME . *)) - (RDCOMS) - (PTRS . RDPTRS) - (PREFIX . V) - (VAG2FN . VVAG2) - (VALUES . RDVALS) - (RDPTRS) - (RDVALUES)))) - -(RPAQQ ABCFILES (LOADABC COMPILEBANG SAMEDIR WHEREIS COMPILEFORMSLIST CHECKSET CMACROS DCODEFOR10 - DTDECLARE BYTECOMPILER DLAP LLCODE ACODE MACROAUX)) - -(RPAQQ READSYSFILES (RDSYS READSYS VMEM REMOTEVMEM)) - -(RPAQQ DATABASEFILES (0LISPSET 1LISPSET (2LISPSET ACODE) - (3LISPSET DLAP) - (4LISPSET DFILE DMISC) - 7LISPSET - (8LISPSET MAKEINIT MEM) - 9LISPSET - (10LISPSET LLPARAMS) - (NIL CHECKARRAYSPACE MAKEINEW PMEMSTATS PPAGESTATS LLFCOMPILE))) - -(RPAQQ DEADFNS ((PUTBASE \PUTBASE) - (GETBASE \GETBASE) - (ADDBASE \ADDBASE) - (GETBASEBYTE \GETBASEBYTE) - (PUTBASEBYTE \PUTBASEBYTE) - (PUTBASEPTR \PUTBASEPTR) - (HILOC \HILOC) - (LOLOC \LOLOC) - (VAG2 \VAG2) - (PAGEBASE NIL) - (PAGELOC NIL) - (WordsPerPage WORDSPERPAGE) - (ALTOMACRO DMACRO) - (\STACKSPACE ??) - (GETBASEPTR \GETBASEPTR) - (FPLUS2) - (FTIMES2) - (CREATECELL \CREATECELL))) -(PUTPROPS FILESETS COPYRIGHT ("Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 -1998)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL))) -STOP +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED " 7-Feb-2021 20:03:00" {DSK}larry>ilisp>medley>sources>FILESETS.;3 7121 changes to%: (VARS 1LISPSET) previous date%: " 7-Feb-2021 19:45:53" {DSK}larry>ilisp>medley>sources>FILESETS.;2) (* ; " Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1998, 2021 by Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT FILESETSCOMS) (RPAQQ FILESETSCOMS ( (* ;;; "contains all of the lists of files which are used in various ways") (* ;; "I took out the EXPORT of the filesets because it led to inconsistency when one had loaded ABC. -- Pavel") (VARS * FILESETS) (VARS EXPORTFILES) (VARS MAKEINITFILES MAKEINITTYPES RENAMETYPES ABCFILES READSYSFILES DATABASEFILES) (VARS DEADFNS))) (* ;;; "contains all of the lists of files which are used in various ways") (* ;; "I took out the EXPORT of the filesets because it led to inconsistency when one had loaded ABC. -- Pavel" ) (RPAQQ FILESETS (0LISPSET 1LISPSET 2LISPSET 3LISPSET 4LISPSET 5LISPSET 6LISPSET 7LISPSET 8LISPSET 9LISPSET)) (RPAQQ 0LISPSET (PACKAGE-CONVERSION-TABLE LLFAULT LLSUBRS LLBFS LLNEW FILEIO IMAGEIO LLBASIC LLGC LLARRAYELT LLINTERP LLMVS DEFSTRUCT-RUN-TIME SETF-RUNTIME CMLSEQBASICS LLARITH LLFLOAT LLBIGNUM LLREAD LLCHAR LLSTK LLDATATYPE IOCHAR LLKEY LLTIMER)) (RPAQQ 1LISPSET (ASTACK DTDECLARE ATBL LLCODE ACODE COREIO AOFD ADIR PMAP VANILLADISK ATERM APRINT ABASIC AERROR AINTERRUPT MISC BOOTSTRAP CMLMACROS CMLEVAL CMLPROGV CMLSPECIALFORMS LLRESTART LLERROR LLSYMBOL LLPACKAGE PACKAGE-STARTUP CONDITION-PACKAGE XCL-PACKAGE PROC CMLARRAY DSK UFS UFSCALLC PASSWORDS FONT LLDISPLAY APUTDQ COMPATIBILITY DMISC CMLMACROS CMLLIST CMLCHARACTER CMLREADTABLE MAIKOLOADUPFNS MAIKOBITBLT MAIKOINIT)) (RPAQQ 2LISPSET (MACHINEINDEPENDENT POSTLOADUP)) (RPAQQ 3LISPSET (MACROS DLAP BYTECOMPILER COMPILE)) (RPAQQ 4LISPSET (EDIT WEDIT HELPDL PRETTY COMMENT BREAK ADVISE LOADFNS FILEPKG DFILE DMISC)) (RPAQQ 5LISPSET (HIST UNDO SPELL DWIM WTFIX CLISP DWIMIFY CLISPIFY RECORD ASSIST)) (RPAQQ 6LISPSET (MSANALYZE MSPARSE MASTERSCOPE HPRINT BRKDWN MATCH)) (RPAQQ 7LISPSET (ADISPLAY DEXEC AARITH AFONT HARDCOPY PRESS HLDISPLAY MENU WINDOW WBREAK INSPECT INSPECT-CLOSURE BSP CHAT TRSERVER 10MBDRIVER LLNS DISKDLION SPP COURIER NSPRINT CLEARINGHOUSE NSFILING INTERPRESS ADDARITH MACROAUX DEDIT DSPRINTDEF NEWPRINTDEF TTYIN DPUPFTP FLOPPY)) (RPAQQ 8LISPSET (MAKEINIT MEM RENAMEFNS)) (RPAQQ 9LISPSET (LLFCOMPILE VMEM READSYS APS PCALLSTATS UPCSTATS REMOTEVMEM)) (RPAQQ EXPORTFILES (FILESETS MODARITH LLPARAMS LLCODE AERROR AOFD APRINT ATERM LLARRAYELT LLDATATYPE LLNEW LLBASIC LLCHAR LLSTK PMAP LLGC ATBL FILEIO LLARITH LLFLOAT FONT LLKEY LLDISPLAY ADISPLAY AINTERRUPT PUP RENAMEMACROS HLDISPLAY WINDOW MACROAUX ADDARITH LLFAULT LLTIMER LLETHER IMAGEIO PROC LLREAD PASSWORDS INTERPRESS HARDCOPY CMLARRAY LLSUBRS)) (RPAQQ MAKEINITFILES (MAKEINIT MEM I-NEW)) (RPAQQ MAKEINITTYPES ((NIL INIT (0 1) 2LISPSET 1600) (SMALLINIT SMALLINIT (LLFAULT LLSUBRS LLNEW FILEIO LLBASIC LLGC LLINTERP LLARITH LLREAD LLCHAR TINYPATCH)) (MACROTEST MACROTEST ((MACROTEST) 0 1) 2LISPSET) (MICROTEST MICROTEST ((MICROTEST LLFAULT LLSTK LLSUBRS LLKEY LLBFS))) (NANOTEST NANOTEST ((MICROTEST LLSUBRS))) (NULL NULL ((DUMMY))) (MILLITEST MILLITEST ((MACROTEST LLFAULT LLSUBRS LLNEW LLBASIC LLGC LLINTERP LLARITH LLFLOAT LLARRAYELT LLSTK LLDATATYPE LLKEY ABASIC LLCHAR ASTACK MISC APUTDQ))) (CHECKARRAYS CHECKARRAYS (CHECKARRAYSPACE 0 1) 2LISPSET))) (RPAQQ RENAMETYPES ((I (FILES LLPARAMS LLCODE LLARRAYELT LLCHAR LLNEW LLBASIC LLDATATYPE LLGC LLSTK RENAMEMACROS MODARITH LLFAULT LLKEY LLBFS LLTIMER) (RENAMEDFILE . I-NEW) (SUBNAME . MKI.SUBFNS) (COMSNAME . INEWCOMS) (EXTRACOMS (VARS INITPTRS INITVALUES) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) MAKEINIT))) (MKI.SUBFNS) (INEWCOMS) (VALUES . INITVALUES) (PTRS . INITPTRS) (PREFIX . I.) (VAG2FN . I.VAG2)) (R (FILES LLCODE LLPARAMS LLBASIC LLDATATYPE LLNEW ACODE LLARRAYELT LLCHAR LLINTERP LLSTK RENAMEMACROS MODARITH LLFAULT) (RENAMEDFILE . RDSYS) (SUBNAME . RD.SUBFNS) (COMSNAME . RDCOMS) (EXTRACOMS (* ;; "YOU MUST REMAKE THIS FILE using (DORENAME 'R) (after CONNing to library) whenever the SYSOUT layout changes in LLPARAMS (e.g., if MDSTypeTable moves)") (FILES VMEM) (VARS RDVALS RDPTRS) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) VMEM))) (RD.SUBFNS (\CALLME . *)) (RDCOMS) (PTRS . RDPTRS) (PREFIX . V) (VAG2FN . VVAG2) (VALUES . RDVALS) (RDPTRS) (RDVALUES)))) (RPAQQ ABCFILES (LOADABC COMPILEBANG SAMEDIR WHEREIS COMPILEFORMSLIST CHECKSET CMACROS DCODEFOR10 DTDECLARE BYTECOMPILER DLAP LLCODE ACODE MACROAUX)) (RPAQQ READSYSFILES (RDSYS READSYS VMEM REMOTEVMEM)) (RPAQQ DATABASEFILES (0LISPSET 1LISPSET (2LISPSET ACODE) (3LISPSET DLAP) (4LISPSET DFILE DMISC) 7LISPSET (8LISPSET MAKEINIT MEM) 9LISPSET (10LISPSET LLPARAMS) (NIL CHECKARRAYSPACE MAKEINEW PMEMSTATS PPAGESTATS LLFCOMPILE))) (RPAQQ DEADFNS ((PUTBASE \PUTBASE) (GETBASE \GETBASE) (ADDBASE \ADDBASE) (GETBASEBYTE \GETBASEBYTE) (PUTBASEBYTE \PUTBASEBYTE) (PUTBASEPTR \PUTBASEPTR) (HILOC \HILOC) (LOLOC \LOLOC) (VAG2 \VAG2) (PAGEBASE NIL) (PAGELOC NIL) (WordsPerPage WORDSPERPAGE) (ALTOMACRO DMACRO) (\STACKSPACE ??) (GETBASEPTR \GETBASEPTR) (FPLUS2) (FTIMES2) (CREATECELL \CREATECELL))) (PUTPROPS FILESETS COPYRIGHT ("Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1998 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL))) STOP \ No newline at end of file diff --git a/sources/MAKEINIT b/sources/MAKEINIT index 895c1666..bbef8e56 100644 --- a/sources/MAKEINIT +++ b/sources/MAKEINIT @@ -1,143 +1,4 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "30-Jan-98 12:46:00" {DSK}disk2>jdstools>lc3>lispcore3.0>sources>MAKEINIT.;3 26173 - - changes to%: (FNS I.\ATOMCELL) - - previous date%: "30-Jan-98 12:10:24" -{DSK}disk2>jdstools>lc3>lispcore3.0>sources>MAKEINIT.;2) - - -(* ; " -Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1998 by Venue & Xerox Corporation. All rights reserved. -") - -(PRETTYCOMPRINT MAKEINITCOMS) - -(RPAQQ MAKEINITCOMS - ((FNS LOADMAKEINIT LOADMKIFILES RELOAD MAKEINIT MKI.START) - (COMS (* ; - "reading compiled files and processing well-known expressions") - (FNS MKI.PASSFILE SCRATCHARRAY DOFORM CONSTFORMP NOTICECOMS EVALFORMAKEINIT) - (FNS I.ADDTOVAR I.DECLARE%: I.DEFINE-FILE-INFO I.FILECREATED I.PUTPROPS I.RPAQ I.RPAQQ - I.RPAQ? I.SETTOPVAL I.NOUNDO) - (PROP MKI ADDTOVAR DECLARE%: DEFINE-FILE-INFO FILECREATED PUTPROPS RPAQ RPAQ? RPAQQ - LISPXPRINT PRETTYCOMPRINT * SETTOPVAL SETQQ SETQ /SETTOPVAL)) - (FNS I.ATOMNUMBER I.\ATOMCELL I.FIXUPNUM I.FIXUPPTR I.FIXUPSYM I.WORDSPERNAMEENTRY - I.SETSTKNTOFFSET) - (COMS (* ; "stuff for MAXC") - (FNS MKI.ATOM MKI.IEEE)) - [COMS (* ; - "stuff to maintain symbol values, prop lists during makeinit--all dumped at end.") - (FNS MKI.DSET MKI.ADDTO MKI.PUTPROP) - (VARS (MKI.ARRAY) - (MKI.TVHA (HASHARRAY 400)) - (MKI.PLHA (HASHARRAY 150)) - (MKI.ATOMARRAY (HASHARRAY 5000)) - (INIT.EXT 'SYSOUT] - (COMS (FNS DUMPVP BOUTZEROS BIN16 BOUT16) - (VARS (MKI.FirstDataByte 1024) - (MKI.Page0Byte 512) - (MKI.DATE (DATE)) - MKI.CODESTARTOFFSET MKI.SEQUENTIAL PRINTEXPRS)) - (INITVARS (PRINTEXPRS T) - (REMOTECOMPILE.EXT COMPILE.EXT)) - [DECLARE%: DONTEVAL@LOAD DOCOPY (P (PUTPROP (NAMEFIELD (INPUT) - T) - 'LOADDATE - (GETFILEINFO (INPUT) - 'ICREATIONDATE] - (DECLARE%: EVAL@COMPILE (PROP MACRO SETXVAR IEQ) - DONTCOPY - (FILES (LOADCOMP) - MEM)))) -(DEFINEQ - -(LOADMAKEINIT (LAMBDA (LARGEFLG) (* lmm "31-JUL-81 14:27") (SELECTQ (SYSTEMTYPE) ((D ALTO)) (PROGN (ADDTOVAR DIRECTORIES BLISP) (GCGAG 1000) (COND ((NOT LARGEFLG) (SETSEPR (QUOTE (%| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26)) 1 FILERDTBL) (MINFS 45000 (QUOTE ARRAYP)) (MINFS 10000 (QUOTE FIXP)) (MINFS 3000 (QUOTE STRING.CHARS)) (MINFS 2000 (QUOTE ATOM.CHARS)))) (MOVD? (QUOTE NILL) (QUOTE MKNUMATOM)) (* ;; "This is a kludge to get around the problem that, while MKATOM is in LLNEW, MKNUMATOM is not, and MKATOM calls MKNUMATOM when given an atom beginning with a digit. It turns out that MKNUMATOM will always return NIL in the cases called from MAKEINIT because MAKEINIT is merely copying things which it knows are really LITATOM and spelled like it.") (MOVD? (QUOTE *) (QUOTE BLOCKRECORD)) (PUTDQ? FIXSPELL1 (LAMBDA (OLD NEW) (PRINT (LIST OLD (QUOTE ->) NEW) T T))))) (LOADMKIFILES) (SELECTQ (SYSTEMTYPE) ((D ALTO)) (PROGN (MINFS 10000 (QUOTE ALTOPOINTER)) (* ; "doesn't work until after datatype declaration has been loaded") (RECLAIM (QUOTE ARRAYP)) (RECLAIM (QUOTE ATOM.CHARS)) (MINFS 10000 (QUOTE ARRAYP)) (MINFS 5000 (QUOTE LISTP)) (SYSOUT (QUOTE MKI.SAV))))) ) - -(LOADMKIFILES (LAMBDA NIL (* mjs "13-Mar-84 14:41") (for X in (UNION MAKEINITFILES (SELECTQ (SYSTEMTYPE) ((ALTO D) NIL) MAXC.MAKEINITFILES)) do (RELOAD (PACKFILENAME (QUOTE BODY) X (QUOTE EXTENSION) COMPILE.EXT)))) ) - -(RELOAD (LAMBDA (FILE) (* lmm "13-APR-81 21:16") (PROG (DATE FULLFILENAME) RETRY (COND ((ILESSP (OR (GETPROP FILE (QUOTE LOADDATE)) MIN.INTEGER) (SETQ DATE (GETFILEINFO (SETQ FULLFILENAME (OR (FINDFILE FILE T) (GO NOTFOUND))) (QUOTE ICREATIONDATE)))) (LOAD FULLFILENAME T) (PUTPROP FILE (QUOTE LOADDATE) DATE))) (RETURN T) NOTFOUND (COND ((GETP (NAMEFIELD FILE) (QUOTE FILEDATES)) (PRINT (CONS FILE (QUOTE (already loaded))) T) (RETURN))) (ERROR FILE "not found.") (GO RETRY))) ) - -(MAKEINIT [LAMBDA (VERSIONS TYPE TOFILE LOADUPDIRS FONTDIRS) (* ; "Edited 19-Jul-90 17:26 by jds") (LOADMKIFILES) (* ;  "Load the files that have to be here to start making the init.") (PROG ([TYPELST (OR (LISTP TYPE) (OR (CDR (ASSOC TYPE MAKEINITTYPES)) (ERROR TYPE '?] FILES SIZEGUESS AFTERINITFILESET EXPRESSIONS) (* ;; "TYPELST is a list of the form (type file-list after-init-files init-size-guess)") (SETQ FILES (CADR TYPELST)) (SETQ AFTERINITFILESET (CADDR TYPELST)) (SETQ SIZEGUESS (CADDDR TYPELST)) (RESETLST [RESETSAVE (OUTPUT (SETQ TOFILE (OPENSTREAM (PACKFILENAME.STRING 'BODY (OR TOFILE (CAR TYPELST) 'XXX) 'EXTENSION INIT.EXT) 'OUTPUT 'NEW 8 (COND [NIL (* ;  "Can't do this until we can do GETFILEPTR on a sequential output file") (APPEND MKI.SEQUENTIAL '((TYPE BINARY)) (AND SIZEGUESS (CONS (LIST 'LENGTH (UNFOLD SIZEGUESS BYTESPERPAGE] (T '((TYPE BINARY] (RESETSAVE NIL (LIST [FUNCTION (LAMBDA (FL) (AND (OPENP FL) (CLOSEF FL)) (AND RESETSTATE (DELFILE (FULLNAME FL] TOFILE)) (PROG ((OUTX TOFILE)) (SETQ DIRECTORIES LOADUPDIRS) (MKI.START) (for X in FILES do (MKI.PASSFILE X)) (* ;; "Generally loads the files in 0LISPSET and 1LISPSET, with 2LISPSET getting loaded immediately after the init starts.") (AND LOADUPDIRS (MKI.DSET 'LOADUPDIRECTORIES LOADUPDIRS)) (AND FONTDIRS (MKI.DSET 'DISPLAYFONTDIRECTORIES FONTDIRS)) [COND (AFTERINITFILESET (* ; "Load stuff that has to be loaded before we can call LOADUP. Ugly expression here is because FILESLOAD is on MACHINEINDEPENDENT.") [MKI.ADDTO 'MAKEINIT.EXPRESSIONS `((MAPC ',(EVAL AFTERINITFILESET) (FUNCTION (LAMBDA (FILE) (OR [SOME LOADUPDIRECTORIES (FUNCTION (LAMBDA (DIR FL) (COND ((SETQ FL (INFILEP (PACKFILENAME.STRING 'DIRECTORY DIR 'NAME FILE 'EXTENSION COMPILE.EXT))) (LOAD FL 'SYSLOAD) T] (PRINT (CONS FILE '(not found)) T] (MKI.ADDTO 'BOOTFILES '(MAKEINIT.EXPRESSIONS] (I.MAKEINITLAST VERSIONS))) (RETURN (FULLNAME TOFILE]) - -(MKI.START (LAMBDA NIL (* bvm%: "12-Dec-84 15:23") (SETQ RESETPTR) (SETQ RESETPC) (BOUTZEROS MKI.FirstDataByte) (CLRHASH MKI.TVHA) (CLRHASH MKI.PLHA) (CLRHASH MKI.ATOMARRAY) (RESETMEMORY) (SETQ MKI.VALUES (for X in INITVALUES bind Y collect (SET (SETQ Y (PACK* "I." (SUBSTRING (CAR X) 2 -1))) (EVAL (CADR X))) Y)) (SETQ MKI.PTRS (for X in INITPTRS bind Y collect (SET (SETQ Y (PACK* "I." (SUBSTRING (CAR X) 2 -1))) (CADR X)) Y)) (I.MAKEINITFIRST) (MKI.DSET NIL NIL) (MKI.DSET T T) (MKI.DSET (QUOTE MAKEINITDATES) (LIST MKI.DATE (DATE))) (for X in INITCONSTANTS when (NEQ (CAR X) (QUOTE *)) do (I.FSETVAL (CAR X) (COND ((LISTP (CADR X)) (I.VAG2 (CAADR X) (CADR (CADR X)))) (T (I.\COPY (CADR X))))))) ) -) - - - -(* ; "reading compiled files and processing well-known expressions") - -(DEFINEQ - -(MKI.PASSFILE (LAMBDA (FILESET) (* ; "Edited 30-Mar-87 17:17 by bvm:") (* ;;; "Read a DCOM file and load its contents into the INIT.") (* ;;; "FILESET can be one of a number, which is a LISPSET number, or a list of file names, or a file name") (COND ((NUMBERP FILESET) (* ; "We were given a nLISPSET number. Pack it up to get the list of files") (MKI.PASSFILE (EVALV (PACK* FILESET (QUOTE LISPSET))))) ((LISTP FILESET) (* ; "We were given a list of file names") (MAPC FILESET (FUNCTION MKI.PASSFILE))) (T (* ; "It's a file name. Read it in.") (INPUT (SETQ FILESET (OPENSTREAM (OR (FINDFILE (PACKFILENAME.STRING (QUOTE BODY) FILESET (QUOTE EXTENSION) REMOTECOMPILE.EXT) T) FILESET) (QUOTE INPUT) (QUOTE OLD) 8 MKI.SEQUENTIAL))) (MKI.ADDTO (QUOTE LOADEDFILELST) (LIST (SETQ FILESET (FULLNAME FILESET)))) (PRINT FILESET T T) (LET* ((FILEROOT (NAMEFIELD FILESET)) (COMSNAMES (LIST (PACK* FILEROOT (QUOTE COMS)))) SKIPVARS MEXPRS X) (DECLARE (SPECVARS COMSNAMES SKIPVARS MEXPRS)) (* ; " used by I.RPAQQ and DOFORM") (* ;;; "Loop here reading from the dcom file into the init.") (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (until (SELECTQ (SETQ X (READ)) ((STOP NIL) (* ; "End of file") T) NIL) do (COND ((NLISTP X) (* ;; "Start of a code object. Skip the code indicator (assume it says to read with DCODERD) and read the code") (IF (NOT (LITATOM (READ))) THEN (ERROR "Bad compiled function" X)) (I.DCODERD X)) (T (* ; "It's a form. go either do it now or add it to the forms to execute inside the init.") (DOFORM X))) finally (COND ((CAR MEXPRS) (* ; "There are expressions to be executed in the INIT when it comes up. Save them.") (MKI.ADDTO (SETQ FILESET (PACK* FILEROOT ".EXPRESSIONS")) (CAR MEXPRS)) (MKI.ADDTO (QUOTE BOOTFILES) (LIST FILESET)))))) (CLOSEF (INPUT)))))) ) - -(SCRATCHARRAY (LAMBDA (NBYTES ALIGN) (* ; "Edited 30-Mar-87 16:20 by bvm:") (COND ((OR (NULL MKI.ARRAY) (IGREATERP NBYTES (ARRAYSIZE MKI.ARRAY))) (* ;; "make sure the scratch array is big enough. Note that the scratch array is unboxed, not code, since we aren't going to be storing legitimate local code in it (let's not fool the garbage collector too much).") (SETQ MKI.ARRAY (create ARRAYP TYP _ \ST.BYTE BASE _ (\ALLOCBLOCK (FOLDHI NBYTES BYTESPERCELL) UNBOXEDBLOCK.GCT 0 CELLSPERQUAD) LENGTH _ NBYTES ORIG _ 0)))) (for I from 0 to (SUB1 (UNFOLD ALIGN BYTESPERCELL)) do (\BYTESETA MKI.ARRAY I 0)) (* ; "clear the fnheader area") MKI.ARRAY) ) - -(DOFORM (LAMBDA (X NOPROP) (* bvm%: "30-Aug-86 15:36") (* ;;; "Handle a raw form found in a dcom file that's going into a makeinit.") (LET ((FN (GETPROP (CAR X) (QUOTE MKI)))) (if (AND FN (NOT NOPROP)) then (* ; "it's a local command that can be run `renamed' . Execute it in the local context.") (* ASSERT%: (CALLS I.ADDTOVAR I.DECLARE%: I.DEFINE-FILE-INFO I.DEFLIST I.FILECREATED I.PRETTYDEFMACROS I.PUTPROPS I.RPAQ I.RPAQQ I.SETHASHQ)) (APPLY* FN X) else (* ;; "it's a command that has to be done remotely, since we don't know how to do it from here. Add it to the collection of init expressions.") (COND (PRINTEXPRS (PRINT X T T))) (SETQ MEXPRS (TCONC MEXPRS X))))) ) - -(CONSTFORMP (LAMBDA (X) (* lmm " 7-MAR-80 08:54") (COND ((LISTP X) (SELECTQ (CAR X) ((QUOTE FUNCTION) X) NIL)) ((LITATOM X) (SELECTQ X (NIL (QUOTE (QUOTE NIL))) (T T) (AND (SETQ X (GETHASH X MKI.TVHA)) (KWOTE (CDR X))))) (T X))) ) - -(NOTICECOMS (LAMBDA (VAL) (* lmm "10-Mar-85 14:51") (for X in VAL when (LISTP X) do (COND ((AND (EQ (CADR X) (QUOTE *)) (LITATOM (CADDR X))) (COND ((EQ (CAR X) (QUOTE COMS)) (push COMSNAMES (CADDR X))) (T (push SKIPVARS (CADDR X))))) (T (SELECTQ (CAR X) ((COMS DECLARE%:) (NOTICECOMS (CDR X))) NIL))))) ) - -(EVALFORMAKEINIT (LAMBDA (FORM) (* bvm%: " 2-NOV-83 15:22") (COND ((LISTP FORM) (SELECTQ (CAR FORM) (MKATOM (COND ((STRINGP (CADR FORM)) (MKATOM (CADR FORM))) (T (HELP)))) (HELP))) ((FIXP FORM) FORM) (T (HELP)))) ) -) -(DEFINEQ - -(I.ADDTOVAR (LAMBDA (FORM) (* lmm " 2-DEC-81 23:58") (MKI.ADDTO (CADR FORM) (CDDR FORM)))) - -(I.DECLARE%: (LAMBDA (FORM) (* lmm "18-FEB-80 14:04") (PROG ((L FORM) (FLAG T) X FN) LP (COND ((NULL (SETQ L (CDR L))) (RETURN)) ((NLISTP (SETQ X (CAR L))) (SELECTQ X ((EVAL@LOAD DOEVAL@LOAD) (SETQ FLAG T)) (DONTEVAL@LOAD (SETQ FLAG NIL)) NIL)) (T (DOFORM X))) (GO LP))) ) - -(I.DEFINE-FILE-INFO (LAMBDA (FORM) (* bvm%: "30-Aug-86 15:32") (* ;;; "Set reader environment for reading rest of file") (SET-READER-ENVIRONMENT (\DO-DEFINE-FILE-INFO NIL (CDR FORM)))) ) - -(I.FILECREATED (LAMBDA (X) (* ; "Edited 12-Jan-88 11:00 by bvm") (* ;; "Form is (FILECREATED date filename . otherstuff)") (COND ((NLISTP (CADDR X)) (* ; "FILENAME a list is for the %"compiled on%" expression") (LET ((NAME (NAMEFIELD (CADDR X)))) (MKI.ADDTO (QUOTE BOOTLOADEDFILES) (LIST NAME)) (MKI.PUTPROP NAME (QUOTE FILEDATES) (LIST (CONS (CADR X) (CADDR X)))))))) ) - -(I.PUTPROPS (LAMBDA (FORM) (* lpd%: "29-APR-77 13:22") (MKI.PUTPROP (CADR FORM) (CADDR FORM) (CADDDR FORM)))) - -(I.RPAQ (LAMBDA (FORM) (* edited%: "10-Jul-84 14:05") (PROG ((VAL (CADDR FORM)) V) (COND ((SETQ V (CONSTFORMP VAL)) (MKI.DSET (CADR FORM) (EVAL V))) (T (DOFORM (LIST (QUOTE SETTOPVAL) (KWOTE (CADR FORM)) VAL) T))))) ) - -(I.RPAQQ (LAMBDA (FORM) (* lmm "30-APR-80 22:12") (PROG ((ATM (CADR FORM)) (VAL (CADDR FORM))) (COND ((FMEMB ATM COMSNAMES) (NOTICECOMS VAL)) ((FMEMB ATM SKIPVARS)) (T (MKI.DSET ATM VAL))))) ) - -(I.RPAQ? (LAMBDA (FORM) (* lmm " 7-MAR-80 08:36") (PROG ((VAL (CADDR FORM)) V) (COND ((SETQ V (CONSTFORMP VAL)) (MKI.DSET (CADR FORM) (EVAL V))) (T (DOFORM (LIST (QUOTE SETTOPVAL) (KWOTE (CADR FORM)) VAL)))))) ) - -(I.SETTOPVAL (LAMBDA (FORM) (* edited%: "10-Jul-84 14:07") (PROG (V) (if (AND (EQ (CAR (LISTP (CADR FORM))) (QUOTE QUOTE)) (SETQ V (CONSTFORMP (CADDR FORM)))) then (MKI.DSET (CADR (CADR FORM)) (EVAL V)) else (DOFORM FORM T)))) ) - -(I.NOUNDO (LAMBDA (FORM) (* edited%: "10-Jul-84 14:02") (if (EQ (NTHCHAR (CAR FORM) 1) (QUOTE /)) then (DOFORM (CONS (SUBATOM (CAR FORM) 2 -1) (CDR FORM))) else (SHOULDNT))) ) -) - -(PUTPROPS ADDTOVAR MKI I.ADDTOVAR) - -(PUTPROPS DECLARE%: MKI I.DECLARE%:) - -(PUTPROPS DEFINE-FILE-INFO MKI I.DEFINE-FILE-INFO) - -(PUTPROPS FILECREATED MKI I.FILECREATED) - -(PUTPROPS PUTPROPS MKI I.PUTPROPS) - -(PUTPROPS RPAQ MKI I.RPAQ) - -(PUTPROPS RPAQ? MKI I.RPAQ?) - -(PUTPROPS RPAQQ MKI I.RPAQQ) - -(PUTPROPS LISPXPRINT MKI NILL) - -(PUTPROPS PRETTYCOMPRINT MKI NILL) - -(PUTPROPS * MKI NILL) - -(PUTPROPS SETTOPVAL MKI I.SETTOPVAL) - -(PUTPROPS SETQQ MKI I.RPAQQ) - -(PUTPROPS SETQ MKI I.RPAQ) - -(PUTPROPS /SETTOPVAL MKI I.NOUNDO) -(DEFINEQ - -(I.ATOMNUMBER [LAMBDA (A) (* ;  "Edited 27-Oct-92 14:10 by sybalsky:mv:envos") (* ;; "Given a symbol, return the symbol's atom #, in the INIT being made.") (* ;; "NB that this will work only so long as there are no NEW-SYMBOLs in the INIT, because of the LOLOC.") (I.LOLOC (COND ((LITATOM A) (MKI.ATOM A)) (T A]) - -(I.\ATOMCELL +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED " 7-Feb-2021 18:08:30" {DSK}larry>ilisp>medley>sources>MAKEINIT.;6 25695 changes to%: (FILES MEM) (FNS MAKEINIT LOADMKIFILES) (VARS MAKEINITCOMS) previous date%: " 7-Feb-2021 17:49:57" {DSK}larry>ilisp>medley>sources>MAKEINIT.;5) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1998, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT MAKEINITCOMS) (RPAQQ MAKEINITCOMS ((FNS LOADMAKEINIT LOADMKIFILES RELOAD MAKEINIT MKI.START) (COMS (* ;  "reading compiled files and processing well-known expressions") (FNS MKI.PASSFILE SCRATCHARRAY DOFORM CONSTFORMP NOTICECOMS EVALFORMAKEINIT) (FNS I.ADDTOVAR I.DECLARE%: I.DEFINE-FILE-INFO I.FILECREATED I.PUTPROPS I.RPAQ I.RPAQQ I.RPAQ? I.SETTOPVAL I.NOUNDO) (PROP MKI ADDTOVAR DECLARE%: DEFINE-FILE-INFO FILECREATED PUTPROPS RPAQ RPAQ? RPAQQ LISPXPRINT PRETTYCOMPRINT * SETTOPVAL SETQQ SETQ /SETTOPVAL)) (FNS I.ATOMNUMBER I.\ATOMCELL I.FIXUPNUM I.FIXUPPTR I.FIXUPSYM I.WORDSPERNAMEENTRY I.SETSTKNTOFFSET) (COMS (* ; "stuff for MAXC") (FNS MKI.ATOM MKI.IEEE)) [COMS (* ;  "stuff to maintain symbol values, prop lists during makeinit--all dumped at end.") (FNS MKI.DSET MKI.ADDTO MKI.PUTPROP) (VARS (MKI.ARRAY) (MKI.TVHA (HASHARRAY 400)) (MKI.PLHA (HASHARRAY 150)) (MKI.ATOMARRAY (HASHARRAY 5000)) (INIT.EXT 'SYSOUT] (COMS (FNS DUMPVP BOUTZEROS BIN16 BOUT16) (VARS (MKI.FirstDataByte 1024) (MKI.Page0Byte 512) (MKI.DATE (DATE)) MKI.CODESTARTOFFSET MKI.SEQUENTIAL PRINTEXPRS)) (INITVARS (PRINTEXPRS T) (REMOTECOMPILE.EXT COMPILE.EXT)) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (PUTPROP (NAMEFIELD (INPUT) T) 'LOADDATE (GETFILEINFO (INPUT) 'ICREATIONDATE] (DECLARE%: EVAL@COMPILE (PROP MACRO SETXVAR IEQ) DONTCOPY (FILES (LOADCOMP) MEM)))) (DEFINEQ (LOADMAKEINIT (LAMBDA (LARGEFLG) (* lmm "31-JUL-81 14:27") (SELECTQ (SYSTEMTYPE) ((D ALTO)) (PROGN (ADDTOVAR DIRECTORIES BLISP) (GCGAG 1000) (COND ((NOT LARGEFLG) (SETSEPR (QUOTE (%| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26)) 1 FILERDTBL) (MINFS 45000 (QUOTE ARRAYP)) (MINFS 10000 (QUOTE FIXP)) (MINFS 3000 (QUOTE STRING.CHARS)) (MINFS 2000 (QUOTE ATOM.CHARS)))) (MOVD? (QUOTE NILL) (QUOTE MKNUMATOM)) (* ;; "This is a kludge to get around the problem that, while MKATOM is in LLNEW, MKNUMATOM is not, and MKATOM calls MKNUMATOM when given an atom beginning with a digit. It turns out that MKNUMATOM will always return NIL in the cases called from MAKEINIT because MAKEINIT is merely copying things which it knows are really LITATOM and spelled like it.") (MOVD? (QUOTE *) (QUOTE BLOCKRECORD)) (PUTDQ? FIXSPELL1 (LAMBDA (OLD NEW) (PRINT (LIST OLD (QUOTE ->) NEW) T T))))) (LOADMKIFILES) (SELECTQ (SYSTEMTYPE) ((D ALTO)) (PROGN (MINFS 10000 (QUOTE ALTOPOINTER)) (* ; "doesn't work until after datatype declaration has been loaded") (RECLAIM (QUOTE ARRAYP)) (RECLAIM (QUOTE ATOM.CHARS)) (MINFS 10000 (QUOTE ARRAYP)) (MINFS 5000 (QUOTE LISTP)) (SYSOUT (QUOTE MKI.SAV))))) ) (LOADMKIFILES [LAMBDA NIL (* ; "Edited 7-Feb-2021 17:39 by lmm") (* mjs "13-Mar-84 14:41") (for X in MAKEINITFILES do (RELOAD (PACKFILENAME 'BODY X 'EXTENSION COMPILE.EXT]) (RELOAD (LAMBDA (FILE) (* lmm "13-APR-81 21:16") (PROG (DATE FULLFILENAME) RETRY (COND ((ILESSP (OR (GETPROP FILE (QUOTE LOADDATE)) MIN.INTEGER) (SETQ DATE (GETFILEINFO (SETQ FULLFILENAME (OR (FINDFILE FILE T) (GO NOTFOUND))) (QUOTE ICREATIONDATE)))) (LOAD FULLFILENAME T) (PUTPROP FILE (QUOTE LOADDATE) DATE))) (RETURN T) NOTFOUND (COND ((GETP (NAMEFIELD FILE) (QUOTE FILEDATES)) (PRINT (CONS FILE (QUOTE (already loaded))) T) (RETURN))) (ERROR FILE "not found.") (GO RETRY))) ) (MAKEINIT [LAMBDA (VERSIONS TOFILE TYPE LOADUPDIRS FONTDIRS) (* ; "Edited 7-Feb-2021 17:46 by lmm") (* ; "Edited 19-Jul-90 17:26 by jds") (LOADMKIFILES) (PROG ([TYPELST (OR (LISTP TYPE) (OR (CDR (ASSOC TYPE MAKEINITTYPES)) (ERROR TYPE '?] FILES SIZEGUESS AFTERINITFILESET EXPRESSIONS) (* ;; "TYPELST is a list of the form (type file-list after-init-files init-size-guess)") (SETQ FILES (CADR TYPELST)) (SETQ AFTERINITFILESET (CADDR TYPELST)) (SETQ SIZEGUESS (CADDDR TYPELST)) (RESETLST [RESETSAVE (OUTPUT (SETQ TOFILE (OPENSTREAM (PACKFILENAME.STRING 'BODY (OR TOFILE (CAR TYPELST) 'XXX) 'EXTENSION INIT.EXT) 'OUTPUT 'NEW 8] (RESETSAVE NIL (LIST [FUNCTION (LAMBDA (FL) (AND (OPENP FL) (CLOSEF FL)) (AND RESETSTATE (DELFILE (FULLNAME FL] TOFILE)) (PROG ((OUTX TOFILE)) (SETQ DIRECTORIES LOADUPDIRS) (MKI.START) (for X in FILES do (MKI.PASSFILE X)) (* ;; "Generally loads the files in 0LISPSET and 1LISPSET, with 2LISPSET getting loaded immediately after the init starts.") (AND LOADUPDIRS (MKI.DSET 'LOADUPDIRECTORIES LOADUPDIRS)) (AND FONTDIRS (MKI.DSET 'DISPLAYFONTDIRECTORIES FONTDIRS)) [COND (AFTERINITFILESET (* ; "Load stuff that has to be loaded before we can call LOADUP. Ugly expression here is because FILESLOAD is on MACHINEINDEPENDENT.") [MKI.ADDTO 'MAKEINIT.EXPRESSIONS `((MAPC ',(EVAL AFTERINITFILESET) (FUNCTION (LAMBDA (FILE) (OR [SOME LOADUPDIRECTORIES (FUNCTION (LAMBDA (DIR FL) (COND ((SETQ FL (INFILEP (PACKFILENAME.STRING 'DIRECTORY DIR 'NAME FILE 'EXTENSION COMPILE.EXT))) (LOAD FL 'SYSLOAD) T] (PRINT (CONS FILE '(not found)) T] (MKI.ADDTO 'BOOTFILES '(MAKEINIT.EXPRESSIONS] (I.MAKEINITLAST VERSIONS))) (RETURN (FULLNAME TOFILE]) (MKI.START (LAMBDA NIL (* bvm%: "12-Dec-84 15:23") (SETQ RESETPTR) (SETQ RESETPC) (BOUTZEROS MKI.FirstDataByte) (CLRHASH MKI.TVHA) (CLRHASH MKI.PLHA) (CLRHASH MKI.ATOMARRAY) (RESETMEMORY) (SETQ MKI.VALUES (for X in INITVALUES bind Y collect (SET (SETQ Y (PACK* "I." (SUBSTRING (CAR X) 2 -1))) (EVAL (CADR X))) Y)) (SETQ MKI.PTRS (for X in INITPTRS bind Y collect (SET (SETQ Y (PACK* "I." (SUBSTRING (CAR X) 2 -1))) (CADR X)) Y)) (I.MAKEINITFIRST) (MKI.DSET NIL NIL) (MKI.DSET T T) (MKI.DSET (QUOTE MAKEINITDATES) (LIST MKI.DATE (DATE))) (for X in INITCONSTANTS when (NEQ (CAR X) (QUOTE *)) do (I.FSETVAL (CAR X) (COND ((LISTP (CADR X)) (I.VAG2 (CAADR X) (CADR (CADR X)))) (T (I.\COPY (CADR X))))))) ) ) (* ; "reading compiled files and processing well-known expressions") (DEFINEQ (MKI.PASSFILE (LAMBDA (FILESET) (* ; "Edited 30-Mar-87 17:17 by bvm:") (* ;;; "Read a DCOM file and load its contents into the INIT.") (* ;;; "FILESET can be one of a number, which is a LISPSET number, or a list of file names, or a file name") (COND ((NUMBERP FILESET) (* ; "We were given a nLISPSET number. Pack it up to get the list of files") (MKI.PASSFILE (EVALV (PACK* FILESET (QUOTE LISPSET))))) ((LISTP FILESET) (* ; "We were given a list of file names") (MAPC FILESET (FUNCTION MKI.PASSFILE))) (T (* ; "It's a file name. Read it in.") (INPUT (SETQ FILESET (OPENSTREAM (OR (FINDFILE (PACKFILENAME.STRING (QUOTE BODY) FILESET (QUOTE EXTENSION) REMOTECOMPILE.EXT) T) FILESET) (QUOTE INPUT) (QUOTE OLD) 8 MKI.SEQUENTIAL))) (MKI.ADDTO (QUOTE LOADEDFILELST) (LIST (SETQ FILESET (FULLNAME FILESET)))) (PRINT FILESET T T) (LET* ((FILEROOT (NAMEFIELD FILESET)) (COMSNAMES (LIST (PACK* FILEROOT (QUOTE COMS)))) SKIPVARS MEXPRS X) (DECLARE (SPECVARS COMSNAMES SKIPVARS MEXPRS)) (* ; " used by I.RPAQQ and DOFORM") (* ;;; "Loop here reading from the dcom file into the init.") (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (until (SELECTQ (SETQ X (READ)) ((STOP NIL) (* ; "End of file") T) NIL) do (COND ((NLISTP X) (* ;; "Start of a code object. Skip the code indicator (assume it says to read with DCODERD) and read the code") (IF (NOT (LITATOM (READ))) THEN (ERROR "Bad compiled function" X)) (I.DCODERD X)) (T (* ; "It's a form. go either do it now or add it to the forms to execute inside the init.") (DOFORM X))) finally (COND ((CAR MEXPRS) (* ; "There are expressions to be executed in the INIT when it comes up. Save them.") (MKI.ADDTO (SETQ FILESET (PACK* FILEROOT ".EXPRESSIONS")) (CAR MEXPRS)) (MKI.ADDTO (QUOTE BOOTFILES) (LIST FILESET)))))) (CLOSEF (INPUT)))))) ) (SCRATCHARRAY (LAMBDA (NBYTES ALIGN) (* ; "Edited 30-Mar-87 16:20 by bvm:") (COND ((OR (NULL MKI.ARRAY) (IGREATERP NBYTES (ARRAYSIZE MKI.ARRAY))) (* ;; "make sure the scratch array is big enough. Note that the scratch array is unboxed, not code, since we aren't going to be storing legitimate local code in it (let's not fool the garbage collector too much).") (SETQ MKI.ARRAY (create ARRAYP TYP _ \ST.BYTE BASE _ (\ALLOCBLOCK (FOLDHI NBYTES BYTESPERCELL) UNBOXEDBLOCK.GCT 0 CELLSPERQUAD) LENGTH _ NBYTES ORIG _ 0)))) (for I from 0 to (SUB1 (UNFOLD ALIGN BYTESPERCELL)) do (\BYTESETA MKI.ARRAY I 0)) (* ; "clear the fnheader area") MKI.ARRAY) ) (DOFORM (LAMBDA (X NOPROP) (* bvm%: "30-Aug-86 15:36") (* ;;; "Handle a raw form found in a dcom file that's going into a makeinit.") (LET ((FN (GETPROP (CAR X) (QUOTE MKI)))) (if (AND FN (NOT NOPROP)) then (* ; "it's a local command that can be run `renamed' . Execute it in the local context.") (* ASSERT%: (CALLS I.ADDTOVAR I.DECLARE%: I.DEFINE-FILE-INFO I.DEFLIST I.FILECREATED I.PRETTYDEFMACROS I.PUTPROPS I.RPAQ I.RPAQQ I.SETHASHQ)) (APPLY* FN X) else (* ;; "it's a command that has to be done remotely, since we don't know how to do it from here. Add it to the collection of init expressions.") (COND (PRINTEXPRS (PRINT X T T))) (SETQ MEXPRS (TCONC MEXPRS X))))) ) (CONSTFORMP (LAMBDA (X) (* lmm " 7-MAR-80 08:54") (COND ((LISTP X) (SELECTQ (CAR X) ((QUOTE FUNCTION) X) NIL)) ((LITATOM X) (SELECTQ X (NIL (QUOTE (QUOTE NIL))) (T T) (AND (SETQ X (GETHASH X MKI.TVHA)) (KWOTE (CDR X))))) (T X))) ) (NOTICECOMS (LAMBDA (VAL) (* lmm "10-Mar-85 14:51") (for X in VAL when (LISTP X) do (COND ((AND (EQ (CADR X) (QUOTE *)) (LITATOM (CADDR X))) (COND ((EQ (CAR X) (QUOTE COMS)) (push COMSNAMES (CADDR X))) (T (push SKIPVARS (CADDR X))))) (T (SELECTQ (CAR X) ((COMS DECLARE%:) (NOTICECOMS (CDR X))) NIL))))) ) (EVALFORMAKEINIT (LAMBDA (FORM) (* bvm%: " 2-NOV-83 15:22") (COND ((LISTP FORM) (SELECTQ (CAR FORM) (MKATOM (COND ((STRINGP (CADR FORM)) (MKATOM (CADR FORM))) (T (HELP)))) (HELP))) ((FIXP FORM) FORM) (T (HELP)))) ) ) (DEFINEQ (I.ADDTOVAR (LAMBDA (FORM) (* lmm " 2-DEC-81 23:58") (MKI.ADDTO (CADR FORM) (CDDR FORM)))) (I.DECLARE%: (LAMBDA (FORM) (* lmm "18-FEB-80 14:04") (PROG ((L FORM) (FLAG T) X FN) LP (COND ((NULL (SETQ L (CDR L))) (RETURN)) ((NLISTP (SETQ X (CAR L))) (SELECTQ X ((EVAL@LOAD DOEVAL@LOAD) (SETQ FLAG T)) (DONTEVAL@LOAD (SETQ FLAG NIL)) NIL)) (T (DOFORM X))) (GO LP))) ) (I.DEFINE-FILE-INFO (LAMBDA (FORM) (* bvm%: "30-Aug-86 15:32") (* ;;; "Set reader environment for reading rest of file") (SET-READER-ENVIRONMENT (\DO-DEFINE-FILE-INFO NIL (CDR FORM)))) ) (I.FILECREATED (LAMBDA (X) (* ; "Edited 12-Jan-88 11:00 by bvm") (* ;; "Form is (FILECREATED date filename . otherstuff)") (COND ((NLISTP (CADDR X)) (* ; "FILENAME a list is for the %"compiled on%" expression") (LET ((NAME (NAMEFIELD (CADDR X)))) (MKI.ADDTO (QUOTE BOOTLOADEDFILES) (LIST NAME)) (MKI.PUTPROP NAME (QUOTE FILEDATES) (LIST (CONS (CADR X) (CADDR X)))))))) ) (I.PUTPROPS (LAMBDA (FORM) (* lpd%: "29-APR-77 13:22") (MKI.PUTPROP (CADR FORM) (CADDR FORM) (CADDDR FORM)))) (I.RPAQ (LAMBDA (FORM) (* edited%: "10-Jul-84 14:05") (PROG ((VAL (CADDR FORM)) V) (COND ((SETQ V (CONSTFORMP VAL)) (MKI.DSET (CADR FORM) (EVAL V))) (T (DOFORM (LIST (QUOTE SETTOPVAL) (KWOTE (CADR FORM)) VAL) T))))) ) (I.RPAQQ (LAMBDA (FORM) (* lmm "30-APR-80 22:12") (PROG ((ATM (CADR FORM)) (VAL (CADDR FORM))) (COND ((FMEMB ATM COMSNAMES) (NOTICECOMS VAL)) ((FMEMB ATM SKIPVARS)) (T (MKI.DSET ATM VAL))))) ) (I.RPAQ? (LAMBDA (FORM) (* lmm " 7-MAR-80 08:36") (PROG ((VAL (CADDR FORM)) V) (COND ((SETQ V (CONSTFORMP VAL)) (MKI.DSET (CADR FORM) (EVAL V))) (T (DOFORM (LIST (QUOTE SETTOPVAL) (KWOTE (CADR FORM)) VAL)))))) ) (I.SETTOPVAL (LAMBDA (FORM) (* edited%: "10-Jul-84 14:07") (PROG (V) (if (AND (EQ (CAR (LISTP (CADR FORM))) (QUOTE QUOTE)) (SETQ V (CONSTFORMP (CADDR FORM)))) then (MKI.DSET (CADR (CADR FORM)) (EVAL V)) else (DOFORM FORM T)))) ) (I.NOUNDO (LAMBDA (FORM) (* edited%: "10-Jul-84 14:02") (if (EQ (NTHCHAR (CAR FORM) 1) (QUOTE /)) then (DOFORM (CONS (SUBATOM (CAR FORM) 2 -1) (CDR FORM))) else (SHOULDNT))) ) ) (PUTPROPS ADDTOVAR MKI I.ADDTOVAR) (PUTPROPS DECLARE%: MKI I.DECLARE%:) (PUTPROPS DEFINE-FILE-INFO MKI I.DEFINE-FILE-INFO) (PUTPROPS FILECREATED MKI I.FILECREATED) (PUTPROPS PUTPROPS MKI I.PUTPROPS) (PUTPROPS RPAQ MKI I.RPAQ) (PUTPROPS RPAQ? MKI I.RPAQ?) (PUTPROPS RPAQQ MKI I.RPAQQ) (PUTPROPS LISPXPRINT MKI NILL) (PUTPROPS PRETTYCOMPRINT MKI NILL) (PUTPROPS * MKI NILL) (PUTPROPS SETTOPVAL MKI I.SETTOPVAL) (PUTPROPS SETQQ MKI I.RPAQQ) (PUTPROPS SETQ MKI I.RPAQ) (PUTPROPS /SETTOPVAL MKI I.NOUNDO) (DEFINEQ (I.ATOMNUMBER [LAMBDA (A) (* ;  "Edited 27-Oct-92 14:10 by sybalsky:mv:envos") (* ;; "Given a symbol, return the symbol's atom #, in the INIT being made.") (* ;; "NB that this will work only so long as there are no NEW-SYMBOLs in the INIT, because of the LOLOC.") (I.LOLOC (COND ((LITATOM A) (MKI.ATOM A)) (T A]) (I.\ATOMCELL [LAMBDA (X N) (* ;  "Edited 26-Oct-92 14:24 by sybalsky:mv:envos") (LET ((ATOMNO (I.ATOMNUMBER X))) @@ -175,112 +36,4 @@ Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1998 b (2 6) (8 0) (SHOULDNT] - (I.ADDBASE ATOMNO OFFSET]) - -(I.FIXUPNUM [LAMBDA (CA BN NUM MASK) (* ; "Edited 17-Jul-90 14:28 by jds") (* ;; "ÿ2ÿPerform atom-number fixup for a code block.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) (* ;; "If it's on a machine wiht 3 byte atom numbers, treat it as a pointer.") (I.FIXUPPTR CA BN NUM)) (T (* ;; "Otherwise, fill in the two bytes.") (\BYTESETA CA (SUB1 BN) (LOGOR (LOGAND (\BYTELT CA (SUB1 BN)) (LRSH (LOGXOR MASK 65535) 8)) (LOGAND (LRSH (LOGAND NUM MASK) 8) 255))) (\BYTESETA CA BN (LOGAND NUM 255]) - -(I.FIXUPPTR [LAMBDA (CA BN PTR) (* ; "Edited 22-Jul-90 12:10 by jds") (* ;; "Specific for MAXC --- actual ptr is same as simulated ptr") (PROG ((LOLOC (I.LOLOC PTR))) (\BYTESETA CA (SUB1 BN) (LRSH LOLOC 8)) (\BYTESETA CA BN (LOGAND LOLOC 255)) (\BYTESETA CA (IDIFFERENCE BN 2) (LOGOR (\BYTELT CA (IDIFFERENCE BN 2)) (I.HILOC PTR]) - -(I.FIXUPSYM [LAMBDA (CA BN NUM MASK) (* ; "Edited 23-Jan-91 19:04 by jds") (* ;; "ÿ2ÿPerform SYMBOL fixup for a code block.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) (* ;; "If it's on a machine wiht 3 byte atom numbers, treat it as a pointer.") (I.FIXUPPTR CA BN (I.ATOMNUMBER NUM))) (T (* ;; "Otherwise, fill in the two bytes.") (\BYTESETA CA (SUB1 BN) (LOGOR (LOGAND (\BYTELT CA (SUB1 BN)) (LRSH (LOGXOR MASK 65535) 8)) (LOGAND (LRSH (LOGAND (I.ATOMNUMBER NUM) MASK) 8) 255))) (\BYTESETA CA BN (LOGAND (I.ATOMNUMBER NUM) 255]) - -(I.WORDSPERNAMEENTRY [LAMBDA NIL (* ; "Edited 25-Jan-91 15:35 by jds") (* ;; "For MAKEINIT, returns the number of words in a name-table entry.") (* ;; "For the old 2-byte atom case, it's 1 word; for 3-byte atoms, 2 words.") (* ;; "An %"Entry%" means an entry in each half of the name table (symbol & type/offset).") (* ;; "While we're building the INIT, react to either :3-BYTE or :3-BYTE-INIT in the target architecture -- we're automatically CROSSCOMPILING as far as this function is concerned.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) 2) ((FMEMB :3-BYTE-INIT COMPILER::*TARGET-ARCHITECTURE*) 2) (T 1]) - -(I.SETSTKNTOFFSET [LAMBDA (BASE OFFSET TYPE VAL) (* ; "Edited 25-Jan-91 16:00 by jds") (* ;; "FOR MAKEINIT: 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::*TARGET-ARCHITECTURE*) (I.FIXUPNUM BASE (IDIFFERENCE OFFSET BYTESPERWORD) TYPE) (I.FIXUPNUM BASE OFFSET VAL)) ((FMEMB :3-BYTE-INIT COMPILER::*TARGET-ARCHITECTURE*) (I.FIXUPNUM BASE (IDIFFERENCE OFFSET BYTESPERWORD) TYPE) (I.FIXUPNUM BASE OFFSET VAL)) (T (I.FIXUPNUM BASE OFFSET (IPLUS TYPE VAL]) -) - - - -(* ; "stuff for MAXC") - -(DEFINEQ - -(MKI.ATOM (LAMBDA (X) (* lmm "29-JUL-81 22:46") (* ; "for MAXC") (AND X (OR (GETHASH X MKI.ATOMARRAY) (PUTHASH X (COND ((EQ X (QUOTE NOBIND)) PTRNOBIND) (T (I.COPYATOM X))) MKI.ATOMARRAY)))) ) - -(MKI.IEEE (LAMBDA (X BOX) (* bvm%: "16-Dec-80 00:44") (* ;; "Converts pdp-10 floating-point number X to IEEE standard for Dolphin, storing (with I.PUTBASE) into BOX. For MAXC only.") (PROG (MAGNITUDE (SIGN 0) (EXP 0) (FRAC 0)) RETRY (SETQ MAGNITUDE (COND ((MINUSP X) (SETQ SIGN 32768) (IMINUS (OPENR (LOC X)))) (T (OPENR (LOC X))))) (COND ((ZEROP MAGNITUDE) (GO DONE)) ((IEQP (LOGAND MAGNITUDE 67108864) 0) (* ; "unnormalized number???") (SETQ X (FPLUS X 0.0)) (GO RETRY))) (COND ((ILEQ (SETQ EXP (IDIFFERENCE (LRSH MAGNITUDE 27) 2)) 0) (* ;; "Exponent bias is off by 1, plus another 1 because of the implicit high bit. Thus have to watch for underflow") (ERROR "Unrepresentable floating-point number" X) (SETQ EXP (SETQ SIGN 0)) (* ; "If continued, make it zero") (GO DONE))) (SETQ FRAC (IPLUS (LOGAND (LRSH MAGNITUDE 3) 16777215) (COND ((OR (ILESSP (LOGAND MAGNITUDE 7) 4) (EQ (LOGAND MAGNITUDE 15) 4)) (* ; "Round down") 0) (T 1)))) (COND ((IGREATERP FRAC 16777215) (* ; "Rounding overflowed the high bit") (SETQ FRAC (LRSH FRAC 1)) (* ; "EXP can't overflow, because of bias difference") (SETQ EXP (ADD1 EXP)))) (* ; "FRAC is now a 24-bit fraction with its high bit on") DONE (I.PUTBASE BOX 0 (LOGOR SIGN (LLSH EXP 7) (LOGAND (LRSH FRAC 16) 127))) (I.PUTBASE BOX 1 (LOGAND FRAC 65535)))) ) -) - - - -(* ; "stuff to maintain symbol values, prop lists during makeinit--all dumped at end.") - -(DEFINEQ - -(MKI.DSET (LAMBDA (A VAL) (* ; "Edited 12-Jan-88 11:03 by bvm") (LET ((LST (GETHASH A MKI.TVHA))) (COND (LST (COND ((NOT (EQUAL VAL (CDR LST))) (EXEC-FORMAT "(Value of ~S changed from ~S to ~S)~%%" A (CDR LST) VAL))) (RPLACD LST VAL)) (T (PUTHASH A (CONS NIL VAL) MKI.TVHA))))) ) - -(MKI.ADDTO (LAMBDA (A VAL) (* lpd%: "29-APR-77 13:20") (PROG ((LST (GETHASH A MKI.TVHA))) (COND (LST (RPLACD LST (UNION VAL (CDR LST)))) (T (PUTHASH A (CONS NIL VAL) MKI.TVHA))))) ) - -(MKI.PUTPROP (LAMBDA (A PROP VAL) (* ; "Edited 12-Jan-88 11:04 by bvm") (LET ((LST (GETHASH A MKI.PLHA))) (COND (LST (COND ((LISTGET LST PROP) (EXEC-FORMAT "(Property ~S of ~S has been changed)~%%" A PROP))) (LISTPUT LST PROP VAL)) (T (PUTHASH A (LIST PROP VAL) MKI.PLHA))))) ) -) - -(RPAQQ MKI.ARRAY NIL) - -(RPAQ MKI.TVHA (HASHARRAY 400)) - -(RPAQ MKI.PLHA (HASHARRAY 150)) - -(RPAQ MKI.ATOMARRAY (HASHARRAY 5000)) - -(RPAQQ INIT.EXT SYSOUT) -(DEFINEQ - -(DUMPVP (LAMBDA (VP) (* lpd%: "27-APR-77 20:24") (PRIN1 (QUOTE *) T) (WriteoutPage OUTX VP))) - -(BOUTZEROS (LAMBDA (N) (* lmm "16-MAY-81 16:49") (FRPTQ N (\BOUT OUTX 0)))) - -(BIN16 (LAMBDA (J) (* lmm "16-MAY-81 16:49") (IPLUS (LLSH (\BIN J) 8) (\BIN J)))) - -(BOUT16 (LAMBDA (J N) (* lmm "16-MAY-81 16:51") (\BOUT J (LRSH N 8)) (\BOUT J (LOGAND N 255)))) -) - -(RPAQQ MKI.FirstDataByte 1024) - -(RPAQQ MKI.Page0Byte 512) - -(RPAQ MKI.DATE (DATE)) - -(RPAQQ MKI.CODESTARTOFFSET 60) - -(RPAQQ MKI.SEQUENTIAL ((SEQUENTIAL T))) - -(RPAQQ PRINTEXPRS T) - -(RPAQ? PRINTEXPRS T) - -(RPAQ? REMOTECOMPILE.EXT COMPILE.EXT) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(PUTPROP (NAMEFIELD (INPUT) - T) - 'LOADDATE - (GETFILEINFO (INPUT) - 'ICREATIONDATE)) -) -(DECLARE%: EVAL@COMPILE - -(PUTPROPS SETXVAR MACRO [X `(SETQ.NOREF %, (CADAR X) - %, - (CADR X]) - -(PUTPROPS IEQ MACRO ((X Y) - (IEQP X Y))) -DONTCOPY - -(FILESLOAD (LOADCOMP) - MEM) -) -(PUTPROPS MAKEINIT COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1990 1991 - 1992 1998)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (2691 9683 (LOADMAKEINIT 2701 . 3904) (LOADMKIFILES 3906 . 4126) (RELOAD 4128 . 4611) ( -MAKEINIT 4613 . 8975) (MKI.START 8977 . 9681)) (9761 13662 (MKI.PASSFILE 9771 . 11564) (SCRATCHARRAY -11566 . 12215) (DOFORM 12217 . 12894) (CONSTFORMP 12896 . 13130) (NOTICECOMS 13132 . 13440) ( -EVALFORMAKEINIT 13442 . 13660)) (13663 15783 (I.ADDTOVAR 13673 . 13767) (I.DECLARE%: 13769 . 14045) ( -I.DEFINE-FILE-INFO 14047 . 14237) (I.FILECREATED 14239 . 14613) (I.PUTPROPS 14615 . 14728) (I.RPAQ -14730 . 14951) (I.RPAQQ 14953 . 15149) (I.RPAQ? 15151 . 15366) (I.SETTOPVAL 15368 . 15600) (I.NOUNDO -15602 . 15781)) (16359 22359 (I.ATOMNUMBER 16369 . 16860) (I.\ATOMCELL 16862 . 18615) (I.FIXUPNUM -18617 . 19434) (I.FIXUPPTR 19436 . 19917) (I.FIXUPSYM 19919 . 20867) (I.WORDSPERNAMEENTRY 20869 . -21624) (I.SETSTKNTOFFSET 21626 . 22357)) (22391 23899 (MKI.ATOM 22401 . 22597) (MKI.IEEE 22599 . 23897 -)) (23996 24761 (MKI.DSET 24006 . 24289) (MKI.ADDTO 24291 . 24476) (MKI.PUTPROP 24478 . 24759)) (24935 - 25313 (DUMPVP 24945 . 25042) (BOUTZEROS 25044 . 25123) (BIN16 25125 . 25210) (BOUT16 25212 . 25311))) -)) -STOP + (I.ADDBASE ATOMNO OFFSET]) (I.FIXUPNUM [LAMBDA (CA BN NUM MASK) (* ; "Edited 17-Jul-90 14:28 by jds") (* ;; "ÿ2ÿPerform atom-number fixup for a code block.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) (* ;; "If it's on a machine wiht 3 byte atom numbers, treat it as a pointer.") (I.FIXUPPTR CA BN NUM)) (T (* ;; "Otherwise, fill in the two bytes.") (\BYTESETA CA (SUB1 BN) (LOGOR (LOGAND (\BYTELT CA (SUB1 BN)) (LRSH (LOGXOR MASK 65535) 8)) (LOGAND (LRSH (LOGAND NUM MASK) 8) 255))) (\BYTESETA CA BN (LOGAND NUM 255]) (I.FIXUPPTR [LAMBDA (CA BN PTR) (* ; "Edited 22-Jul-90 12:10 by jds") (* ;; "Specific for MAXC --- actual ptr is same as simulated ptr") (PROG ((LOLOC (I.LOLOC PTR))) (\BYTESETA CA (SUB1 BN) (LRSH LOLOC 8)) (\BYTESETA CA BN (LOGAND LOLOC 255)) (\BYTESETA CA (IDIFFERENCE BN 2) (LOGOR (\BYTELT CA (IDIFFERENCE BN 2)) (I.HILOC PTR]) (I.FIXUPSYM [LAMBDA (CA BN NUM MASK) (* ; "Edited 23-Jan-91 19:04 by jds") (* ;; "ÿ2ÿPerform SYMBOL fixup for a code block.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) (* ;; "If it's on a machine wiht 3 byte atom numbers, treat it as a pointer.") (I.FIXUPPTR CA BN (I.ATOMNUMBER NUM))) (T (* ;; "Otherwise, fill in the two bytes.") (\BYTESETA CA (SUB1 BN) (LOGOR (LOGAND (\BYTELT CA (SUB1 BN)) (LRSH (LOGXOR MASK 65535) 8)) (LOGAND (LRSH (LOGAND (I.ATOMNUMBER NUM) MASK) 8) 255))) (\BYTESETA CA BN (LOGAND (I.ATOMNUMBER NUM) 255]) (I.WORDSPERNAMEENTRY [LAMBDA NIL (* ; "Edited 25-Jan-91 15:35 by jds") (* ;; "For MAKEINIT, returns the number of words in a name-table entry.") (* ;; "For the old 2-byte atom case, it's 1 word; for 3-byte atoms, 2 words.") (* ;; "An %"Entry%" means an entry in each half of the name table (symbol & type/offset).") (* ;; "While we're building the INIT, react to either :3-BYTE or :3-BYTE-INIT in the target architecture -- we're automatically CROSSCOMPILING as far as this function is concerned.") (COND ((FMEMB :3-BYTE COMPILER::*TARGET-ARCHITECTURE*) 2) ((FMEMB :3-BYTE-INIT COMPILER::*TARGET-ARCHITECTURE*) 2) (T 1]) (I.SETSTKNTOFFSET [LAMBDA (BASE OFFSET TYPE VAL) (* ; "Edited 25-Jan-91 16:00 by jds") (* ;; "FOR MAKEINIT: 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::*TARGET-ARCHITECTURE*) (I.FIXUPNUM BASE (IDIFFERENCE OFFSET BYTESPERWORD) TYPE) (I.FIXUPNUM BASE OFFSET VAL)) ((FMEMB :3-BYTE-INIT COMPILER::*TARGET-ARCHITECTURE*) (I.FIXUPNUM BASE (IDIFFERENCE OFFSET BYTESPERWORD) TYPE) (I.FIXUPNUM BASE OFFSET VAL)) (T (I.FIXUPNUM BASE OFFSET (IPLUS TYPE VAL]) ) (* ; "stuff for MAXC") (DEFINEQ (MKI.ATOM (LAMBDA (X) (* lmm "29-JUL-81 22:46") (* ; "for MAXC") (AND X (OR (GETHASH X MKI.ATOMARRAY) (PUTHASH X (COND ((EQ X (QUOTE NOBIND)) PTRNOBIND) (T (I.COPYATOM X))) MKI.ATOMARRAY)))) ) (MKI.IEEE (LAMBDA (X BOX) (* bvm%: "16-Dec-80 00:44") (* ;; "Converts pdp-10 floating-point number X to IEEE standard for Dolphin, storing (with I.PUTBASE) into BOX. For MAXC only.") (PROG (MAGNITUDE (SIGN 0) (EXP 0) (FRAC 0)) RETRY (SETQ MAGNITUDE (COND ((MINUSP X) (SETQ SIGN 32768) (IMINUS (OPENR (LOC X)))) (T (OPENR (LOC X))))) (COND ((ZEROP MAGNITUDE) (GO DONE)) ((IEQP (LOGAND MAGNITUDE 67108864) 0) (* ; "unnormalized number???") (SETQ X (FPLUS X 0.0)) (GO RETRY))) (COND ((ILEQ (SETQ EXP (IDIFFERENCE (LRSH MAGNITUDE 27) 2)) 0) (* ;; "Exponent bias is off by 1, plus another 1 because of the implicit high bit. Thus have to watch for underflow") (ERROR "Unrepresentable floating-point number" X) (SETQ EXP (SETQ SIGN 0)) (* ; "If continued, make it zero") (GO DONE))) (SETQ FRAC (IPLUS (LOGAND (LRSH MAGNITUDE 3) 16777215) (COND ((OR (ILESSP (LOGAND MAGNITUDE 7) 4) (EQ (LOGAND MAGNITUDE 15) 4)) (* ; "Round down") 0) (T 1)))) (COND ((IGREATERP FRAC 16777215) (* ; "Rounding overflowed the high bit") (SETQ FRAC (LRSH FRAC 1)) (* ; "EXP can't overflow, because of bias difference") (SETQ EXP (ADD1 EXP)))) (* ; "FRAC is now a 24-bit fraction with its high bit on") DONE (I.PUTBASE BOX 0 (LOGOR SIGN (LLSH EXP 7) (LOGAND (LRSH FRAC 16) 127))) (I.PUTBASE BOX 1 (LOGAND FRAC 65535)))) ) ) (* ; "stuff to maintain symbol values, prop lists during makeinit--all dumped at end.") (DEFINEQ (MKI.DSET (LAMBDA (A VAL) (* ; "Edited 12-Jan-88 11:03 by bvm") (LET ((LST (GETHASH A MKI.TVHA))) (COND (LST (COND ((NOT (EQUAL VAL (CDR LST))) (EXEC-FORMAT "(Value of ~S changed from ~S to ~S)~%%" A (CDR LST) VAL))) (RPLACD LST VAL)) (T (PUTHASH A (CONS NIL VAL) MKI.TVHA))))) ) (MKI.ADDTO (LAMBDA (A VAL) (* lpd%: "29-APR-77 13:20") (PROG ((LST (GETHASH A MKI.TVHA))) (COND (LST (RPLACD LST (UNION VAL (CDR LST)))) (T (PUTHASH A (CONS NIL VAL) MKI.TVHA))))) ) (MKI.PUTPROP (LAMBDA (A PROP VAL) (* ; "Edited 12-Jan-88 11:04 by bvm") (LET ((LST (GETHASH A MKI.PLHA))) (COND (LST (COND ((LISTGET LST PROP) (EXEC-FORMAT "(Property ~S of ~S has been changed)~%%" A PROP))) (LISTPUT LST PROP VAL)) (T (PUTHASH A (LIST PROP VAL) MKI.PLHA))))) ) ) (RPAQQ MKI.ARRAY NIL) (RPAQ MKI.TVHA (HASHARRAY 400)) (RPAQ MKI.PLHA (HASHARRAY 150)) (RPAQ MKI.ATOMARRAY (HASHARRAY 5000)) (RPAQQ INIT.EXT SYSOUT) (DEFINEQ (DUMPVP (LAMBDA (VP) (* lpd%: "27-APR-77 20:24") (PRIN1 (QUOTE *) T) (WriteoutPage OUTX VP))) (BOUTZEROS (LAMBDA (N) (* lmm "16-MAY-81 16:49") (FRPTQ N (\BOUT OUTX 0)))) (BIN16 (LAMBDA (J) (* lmm "16-MAY-81 16:49") (IPLUS (LLSH (\BIN J) 8) (\BIN J)))) (BOUT16 (LAMBDA (J N) (* lmm "16-MAY-81 16:51") (\BOUT J (LRSH N 8)) (\BOUT J (LOGAND N 255)))) ) (RPAQQ MKI.FirstDataByte 1024) (RPAQQ MKI.Page0Byte 512) (RPAQ MKI.DATE (DATE)) (RPAQQ MKI.CODESTARTOFFSET 60) (RPAQQ MKI.SEQUENTIAL ((SEQUENTIAL T))) (RPAQQ PRINTEXPRS T) (RPAQ? PRINTEXPRS T) (RPAQ? REMOTECOMPILE.EXT COMPILE.EXT) (DECLARE%: DONTEVAL@LOAD DOCOPY (PUTPROP (NAMEFIELD (INPUT) T) 'LOADDATE (GETFILEINFO (INPUT) 'ICREATIONDATE)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS SETXVAR MACRO [X `(SETQ.NOREF %, (CADAR X) %, (CADR X]) (PUTPROPS IEQ MACRO ((X Y) (IEQP X Y))) DONTCOPY (FILESLOAD (LOADCOMP) MEM) ) (PUTPROPS MAKEINIT COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1990 1991 1992 1998 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (2735 9120 (LOADMAKEINIT 2745 . 3948) (LOADMKIFILES 3950 . 4265) (RELOAD 4267 . 4750) ( MAKEINIT 4752 . 8412) (MKI.START 8414 . 9118)) (9198 13099 (MKI.PASSFILE 9208 . 11001) (SCRATCHARRAY 11003 . 11652) (DOFORM 11654 . 12331) (CONSTFORMP 12333 . 12567) (NOTICECOMS 12569 . 12877) ( EVALFORMAKEINIT 12879 . 13097)) (13100 15220 (I.ADDTOVAR 13110 . 13204) (I.DECLARE%: 13206 . 13482) ( I.DEFINE-FILE-INFO 13484 . 13674) (I.FILECREATED 13676 . 14050) (I.PUTPROPS 14052 . 14165) (I.RPAQ 14167 . 14388) (I.RPAQQ 14390 . 14586) (I.RPAQ? 14588 . 14803) (I.SETTOPVAL 14805 . 15037) (I.NOUNDO 15039 . 15218)) (15856 21856 (I.ATOMNUMBER 15866 . 16357) (I.\ATOMCELL 16359 . 18112) (I.FIXUPNUM 18114 . 18931) (I.FIXUPPTR 18933 . 19414) (I.FIXUPSYM 19416 . 20364) (I.WORDSPERNAMEENTRY 20366 . 21121) (I.SETSTKNTOFFSET 21123 . 21854)) (21888 23396 (MKI.ATOM 21898 . 22094) (MKI.IEEE 22096 . 23394 )) (23493 24258 (MKI.DSET 23503 . 23786) (MKI.ADDTO 23788 . 23973) (MKI.PUTPROP 23975 . 24256)) (24432 24810 (DUMPVP 24442 . 24539) (BOUTZEROS 24541 . 24620) (BIN16 24622 . 24707) (BOUT16 24709 . 24808))) )) STOP \ No newline at end of file diff --git a/sources/MAKEINIT.LCOM b/sources/MAKEINIT.LCOM new file mode 100755 index 0000000000000000000000000000000000000000..eaa990f6211cc870e34f67ed4826421c8702ea86 GIT binary patch literal 13022 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 H;d}l+!$SdH literal 0 HcmV?d00001 diff --git a/sources/MAKEINITGREET b/sources/MAKEINITGREET new file mode 100755 index 00000000..2d89d3a8 --- /dev/null +++ b/sources/MAKEINITGREET @@ -0,0 +1 @@ +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED " 7-Feb-2021 18:10:42" {DSK}larry>ilisp>medley>sources>MAKEINITGREET.;33 1897 changes to%: (FNS MAKEINITGREET) (FILES RENAMEFNS) (VARS MAKEINITGREETCOMS) previous date%: " 5-Dec-2017 15:26:33" {DSK}larry>ilisp>medley>sources>MAKEINITGREET.;28 ) (PRETTYCOMPRINT MAKEINITGREETCOMS) (RPAQQ MAKEINITGREETCOMS ((FNS MAKEINITGREET) (FILES (SOURCE) FILESETS) (FILES RENAMEFNS MAKEINIT DLFIXINIT XCL-PACKAGE CMLARRAY-SUPPORT VMEM))) (DEFINEQ (MAKEINITGREET [LAMBDA NIL (* ; "Edited 7-Feb-2021 18:06 by lmm") (* ;  "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "") (* ;; " Updated Lisp version for big physical memory --bvm |11/3/87") (* ;; "") (XCL:RESTORE-PROFILE "INTERLISP") (* ; "Doesn't exist") (SETQ LITATOM-PACKAGE-CONVERSION-ENABLED NIL) (SETQ *REMOVE-INTERLISP-COMMENTS* NIL) (LOAD 'FILESETS) (* ; "rmk: VMEM has WORDARRAY") (* Versions are Lisp Microcode Bcpl) (DORENAME 'I) (DLFIXINIT (MAKEINIT '(39424 5682 11008) (MEDLEYDIR "loadups" "init.sysout" T) NIL DIRECTORIES DISPLAYFONTDIRECTORIES) (MEDLEYDIR "loadups" "init.dlinit" T]) ) (FILESLOAD (SOURCE) FILESETS) (FILESLOAD RENAMEFNS MAKEINIT DLFIXINIT XCL-PACKAGE CMLARRAY-SUPPORT VMEM) (PUTPROPS MAKEINITGREET COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (681 1718 (MAKEINITGREET 691 . 1716))))) STOP \ No newline at end of file diff --git a/sources/MAKEINITGREET.LCOM b/sources/MAKEINITGREET.LCOM new file mode 100755 index 0000000000000000000000000000000000000000..436d37d4a820471028e5923c06d86a556e03c8bf GIT binary patch literal 1352 zcmbVM?`xY-6b)nhunl29c!OefIepnvZEBtzc@1$)Jq=@4MQ} zq$!N8`CxqaUOo4md#*}ALYfdQq!H0*5;8dB#0!M?Eg~S(L=Ya)ES2Fb_54fk;#p9Y zl;$}fpAaMf8Ae)|-)g3A8ellCp}PZ921Q;}t94Q4OQ;^ONctIMm%qN=SF3zd&NrLK zNl_N{da}xwW&Sv+tKDXi*OS=0Bs8Jof)gV8Uo1<-XUCei-XMUkHvqcfS_p8v$vcF_ z{rurBuRpsWJ$nHZ2pzWwVD)VXcV!9LBZ6%Kj6>V~eqV;=e2dM>$8pniEd+Grf8+d0 zib!fa0%=bIwiWVF!X$%dTvUvq>=|&9crn2|My4J=Df3y3iS;J`QB=FSCDq6xgRKSm z0!1`NVA!rXbS+DUS9NSU>WR#5;Gii$hlmPKuvpvMM)O%RB|M`n(XeZDR{$XxaL!50 zrj7OXPQ$`DCW*+-F>gXZIq?PK6zPUw;W3}^vN?0}o z>}f<`+7K}>fHB Date: Sat, 13 Feb 2021 08:58:16 -0800 Subject: [PATCH 10/37] Edit ATBL to match older version for init and loadup --- sources/ATBL | 2 +- sources/ATBL.LCOM | Bin 35321 -> 35146 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/ATBL b/sources/ATBL index 9cb0cf49..f5862949 100644 --- a/sources/ATBL +++ b/sources/ATBL @@ -1 +1 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "20-Apr-2018 17:35:56" {DSK}kaplan>Local>medley3.5>lispcore>sources>ATBL.;7 256555Q changes to%: (VARS ATBLCOMS) (FNS \ATBLSET) previous date%: "20-Apr-2018 16:53:30" {DSK}kaplan>Local>medley3.5>lispcore>sources>ATBL.;6) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1990, 1993, 2018 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT ATBLCOMS) (RPAQQ ATBLCOMS [(E (RESETSAVE (RADIX 8))) (COMS (* ;  "Common features of read and terminal tables") (DECLARE%: DONTCOPY (EXPORT (MACROS \SYNCODE \SETSYNCODE) (RECORDS CHARTABLE)) (CONSTANTS \NSCHARHASHKEYS \NSCHARHASHOVERFLOW) (MACROS \CREATENSCHARHASH)) (FNS GETSYNTAX SETSYNTAX SYNTAXP \COPYSYNTAX \GETCHARCODE \SETFATSYNCODE \MAPCHARTABLE) ) (COMS (* ; "terminal tables") (FNS CONTROL COPYTERMTABLE DELETECONTROL GETDELETECONTROL ECHOCHAR ECHOCONTROL ECHOMODE GETECHOMODE GETCONTROL GETTERMTABLE RAISE GETRAISE RESETTERMTABLE SETTERMTABLE TERMTABLEP \GETTERMSYNTAX \GTTERMTABLE \ORIGTERMTABLE \SETTERMSYNTAX \TERMCLASSTOCODE \TERMCODETOCLASS \LITCHECK) (DECLARE%: DONTCOPY (EXPORT (CONSTANTS * CCECHOMODES) (CONSTANTS * TERMCLASSES) (RECORDS TERMCODE TERMTABLEP))) (INITRECORDS TERMTABLEP)) (COMS (* ; "read tables") (FNS COPYREADTABLE FIND-READTABLE IN-READTABLE ESCAPE GETBRK GETREADTABLE GETSEPR READMACROS READTABLEP READTABLEPROP RESETREADTABLE SETBRK SETREADTABLE SETSEPR \GETREADSYNTAX \GTREADTABLE \GTREADTABLE1 \ORIGREADTABLE \READCLASSTOCODE \SETMACROSYNTAX \SETREADSYNTAX \READTABLEP.DEFPRINT) (PROP ARGNAMES READTABLEPROP) (DECLARE%: EVAL@COMPILE DONTCOPY (* ;  "READCLASSTOKENS Generates READCLASSES and some interesting SELECTQ's") (* ;  "OTHER must be zero because of initialization.") [VARS READCLASSTOKENS (READCLASSES (MAPCAR READCLASSTOKENS (FUNCTION (LAMBDA (PAIR) (LIST (PACK* (CAR PAIR) ".RC") (CADR PAIR] (MACROS \COMPUTED.FORM) (* ;  "This macro ought to be official somehow") (RECORDS CONTEXTS ESCAPES WAKEUPS) (EXPORT (MACROS \GETREADMACRODEF \GTREADTABLE \GTREADTABLE1) (CONSTANTS MACROBIT BREAKBIT STOPATOMBIT ESCAPEBIT INNERESCAPEBIT) (CONSTANTS * READCODEMASKS) (CONSTANTS * READMACROCONTEXTS) (CONSTANTS * READCLASSES) (CONSTANTS * READMACROWAKEUPS) (CONSTANTS * READMACROESCAPES) (RECORDS READCODE READMACRODEF READTABLEP)) (GLOBALVARS \ORIGREADTABLE \READTABLEHASH \ORIGTERMTABLE)) (INITRECORDS READTABLEP)) [COMS (INITVARS (\READTABLEHASH)) (FNS \ATBLSET) (INITRECORDS READER-ENVIRONMENT) (* ;  "Definition is on CMLREAD, need it here to initialize *OLD-INTERLISP-READ-ENVIRONMENT*") (FNS MAKE-READER-ENVIRONMENT EQUAL-READER-ENVIRONMENT SET-READER-ENVIRONMENT) (INITVARS (*LISP-PACKAGE*) (*INTERLISP-PACKAGE*) (*KEYWORD-PACKAGE*)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\ATBLSET] (LOCALVARS . T) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA READTABLEPROP]) (* ; "Common features of read and terminal tables") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (DECLARE%: EVAL@COMPILE (DATATYPE CHARTABLE ((CHARSET0 400Q BYTE) (NSCHARHASH FULLPOINTER))) ) (/DECLAREDATATYPE 'CHARTABLE '(BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE FULLPOINTER) '((CHARTABLE 0 (BITS . 7)) (CHARTABLE 0 (BITS . 207Q)) (CHARTABLE 1 (BITS . 7)) (CHARTABLE 1 (BITS . 207Q)) (CHARTABLE 2 (BITS . 7)) (CHARTABLE 2 (BITS . 207Q)) (CHARTABLE 3 (BITS . 7)) (CHARTABLE 3 (BITS . 207Q)) (CHARTABLE 4 (BITS . 7)) (CHARTABLE 4 (BITS . 207Q)) (CHARTABLE 5 (BITS . 7)) (CHARTABLE 5 (BITS . 207Q)) (CHARTABLE 6 (BITS . 7)) (CHARTABLE 6 (BITS . 207Q)) (CHARTABLE 7 (BITS . 7)) (CHARTABLE 7 (BITS . 207Q)) (CHARTABLE 10Q (BITS . 7)) (CHARTABLE 10Q (BITS . 207Q)) (CHARTABLE 11Q (BITS . 7)) (CHARTABLE 11Q (BITS . 207Q)) (CHARTABLE 12Q (BITS . 7)) (CHARTABLE 12Q (BITS . 207Q)) (CHARTABLE 13Q (BITS . 7)) (CHARTABLE 13Q (BITS . 207Q)) (CHARTABLE 14Q (BITS . 7)) (CHARTABLE 14Q (BITS . 207Q)) (CHARTABLE 15Q (BITS . 7)) (CHARTABLE 15Q (BITS . 207Q)) (CHARTABLE 16Q (BITS . 7)) (CHARTABLE 16Q (BITS . 207Q)) (CHARTABLE 17Q (BITS . 7)) (CHARTABLE 17Q (BITS . 207Q)) (CHARTABLE 20Q (BITS . 7)) (CHARTABLE 20Q (BITS . 207Q)) (CHARTABLE 21Q (BITS . 7)) (CHARTABLE 21Q (BITS . 207Q)) (CHARTABLE 22Q (BITS . 7)) (CHARTABLE 22Q (BITS . 207Q)) (CHARTABLE 23Q (BITS . 7)) (CHARTABLE 23Q (BITS . 207Q)) (CHARTABLE 24Q (BITS . 7)) (CHARTABLE 24Q (BITS . 207Q)) (CHARTABLE 25Q (BITS . 7)) (CHARTABLE 25Q (BITS . 207Q)) (CHARTABLE 26Q (BITS . 7)) (CHARTABLE 26Q (BITS . 207Q)) (CHARTABLE 27Q (BITS . 7)) (CHARTABLE 27Q (BITS . 207Q)) (CHARTABLE 30Q (BITS . 7)) (CHARTABLE 30Q (BITS . 207Q)) (CHARTABLE 31Q (BITS . 7)) (CHARTABLE 31Q (BITS . 207Q)) (CHARTABLE 32Q (BITS . 7)) (CHARTABLE 32Q (BITS . 207Q)) (CHARTABLE 33Q (BITS . 7)) (CHARTABLE 33Q (BITS . 207Q)) (CHARTABLE 34Q (BITS . 7)) (CHARTABLE 34Q (BITS . 207Q)) (CHARTABLE 35Q (BITS . 7)) (CHARTABLE 35Q (BITS . 207Q)) (CHARTABLE 36Q (BITS . 7)) (CHARTABLE 36Q (BITS . 207Q)) (CHARTABLE 37Q (BITS . 7)) (CHARTABLE 37Q (BITS . 207Q)) (CHARTABLE 40Q (BITS . 7)) (CHARTABLE 40Q (BITS . 207Q)) (CHARTABLE 41Q (BITS . 7)) (CHARTABLE 41Q (BITS . 207Q)) (CHARTABLE 42Q (BITS . 7)) (CHARTABLE 42Q (BITS . 207Q)) (CHARTABLE 43Q (BITS . 7)) (CHARTABLE 43Q (BITS . 207Q)) (CHARTABLE 44Q (BITS . 7)) (CHARTABLE 44Q (BITS . 207Q)) (CHARTABLE 45Q (BITS . 7)) (CHARTABLE 45Q (BITS . 207Q)) (CHARTABLE 46Q (BITS . 7)) (CHARTABLE 46Q (BITS . 207Q)) (CHARTABLE 47Q (BITS . 7)) (CHARTABLE 47Q (BITS . 207Q)) (CHARTABLE 50Q (BITS . 7)) (CHARTABLE 50Q (BITS . 207Q)) (CHARTABLE 51Q (BITS . 7)) (CHARTABLE 51Q (BITS . 207Q)) (CHARTABLE 52Q (BITS . 7)) (CHARTABLE 52Q (BITS . 207Q)) (CHARTABLE 53Q (BITS . 7)) (CHARTABLE 53Q (BITS . 207Q)) (CHARTABLE 54Q (BITS . 7)) (CHARTABLE 54Q (BITS . 207Q)) (CHARTABLE 55Q (BITS . 7)) (CHARTABLE 55Q (BITS . 207Q)) (CHARTABLE 56Q (BITS . 7)) (CHARTABLE 56Q (BITS . 207Q)) (CHARTABLE 57Q (BITS . 7)) (CHARTABLE 57Q (BITS . 207Q)) (CHARTABLE 60Q (BITS . 7)) (CHARTABLE 60Q (BITS . 207Q)) (CHARTABLE 61Q (BITS . 7)) (CHARTABLE 61Q (BITS . 207Q)) (CHARTABLE 62Q (BITS . 7)) (CHARTABLE 62Q (BITS . 207Q)) (CHARTABLE 63Q (BITS . 7)) (CHARTABLE 63Q (BITS . 207Q)) (CHARTABLE 64Q (BITS . 7)) (CHARTABLE 64Q (BITS . 207Q)) (CHARTABLE 65Q (BITS . 7)) (CHARTABLE 65Q (BITS . 207Q)) (CHARTABLE 66Q (BITS . 7)) (CHARTABLE 66Q (BITS . 207Q)) (CHARTABLE 67Q (BITS . 7)) (CHARTABLE 67Q (BITS . 207Q)) (CHARTABLE 70Q (BITS . 7)) (CHARTABLE 70Q (BITS . 207Q)) (CHARTABLE 71Q (BITS . 7)) (CHARTABLE 71Q (BITS . 207Q)) (CHARTABLE 72Q (BITS . 7)) (CHARTABLE 72Q (BITS . 207Q)) (CHARTABLE 73Q (BITS . 7)) (CHARTABLE 73Q (BITS . 207Q)) (CHARTABLE 74Q (BITS . 7)) (CHARTABLE 74Q (BITS . 207Q)) (CHARTABLE 75Q (BITS . 7)) (CHARTABLE 75Q (BITS . 207Q)) (CHARTABLE 76Q (BITS . 7)) (CHARTABLE 76Q (BITS . 207Q)) (CHARTABLE 77Q (BITS . 7)) (CHARTABLE 77Q (BITS . 207Q)) (CHARTABLE 100Q (BITS . 7)) (CHARTABLE 100Q (BITS . 207Q)) (CHARTABLE 101Q (BITS . 7)) (CHARTABLE 101Q (BITS . 207Q)) (CHARTABLE 102Q (BITS . 7)) (CHARTABLE 102Q (BITS . 207Q)) (CHARTABLE 103Q (BITS . 7)) (CHARTABLE 103Q (BITS . 207Q)) (CHARTABLE 104Q (BITS . 7)) (CHARTABLE 104Q (BITS . 207Q)) (CHARTABLE 105Q (BITS . 7)) (CHARTABLE 105Q (BITS . 207Q)) (CHARTABLE 106Q (BITS . 7)) (CHARTABLE 106Q (BITS . 207Q)) (CHARTABLE 107Q (BITS . 7)) (CHARTABLE 107Q (BITS . 207Q)) (CHARTABLE 110Q (BITS . 7)) (CHARTABLE 110Q (BITS . 207Q)) (CHARTABLE 111Q (BITS . 7)) (CHARTABLE 111Q (BITS . 207Q)) (CHARTABLE 112Q (BITS . 7)) (CHARTABLE 112Q (BITS . 207Q)) (CHARTABLE 113Q (BITS . 7)) (CHARTABLE 113Q (BITS . 207Q)) (CHARTABLE 114Q (BITS . 7)) (CHARTABLE 114Q (BITS . 207Q)) (CHARTABLE 115Q (BITS . 7)) (CHARTABLE 115Q (BITS . 207Q)) (CHARTABLE 116Q (BITS . 7)) (CHARTABLE 116Q (BITS . 207Q)) (CHARTABLE 117Q (BITS . 7)) (CHARTABLE 117Q (BITS . 207Q)) (CHARTABLE 120Q (BITS . 7)) (CHARTABLE 120Q (BITS . 207Q)) (CHARTABLE 121Q (BITS . 7)) (CHARTABLE 121Q (BITS . 207Q)) (CHARTABLE 122Q (BITS . 7)) (CHARTABLE 122Q (BITS . 207Q)) (CHARTABLE 123Q (BITS . 7)) (CHARTABLE 123Q (BITS . 207Q)) (CHARTABLE 124Q (BITS . 7)) (CHARTABLE 124Q (BITS . 207Q)) (CHARTABLE 125Q (BITS . 7)) (CHARTABLE 125Q (BITS . 207Q)) (CHARTABLE 126Q (BITS . 7)) (CHARTABLE 126Q (BITS . 207Q)) (CHARTABLE 127Q (BITS . 7)) (CHARTABLE 127Q (BITS . 207Q)) (CHARTABLE 130Q (BITS . 7)) (CHARTABLE 130Q (BITS . 207Q)) (CHARTABLE 131Q (BITS . 7)) (CHARTABLE 131Q (BITS . 207Q)) (CHARTABLE 132Q (BITS . 7)) (CHARTABLE 132Q (BITS . 207Q)) (CHARTABLE 133Q (BITS . 7)) (CHARTABLE 133Q (BITS . 207Q)) (CHARTABLE 134Q (BITS . 7)) (CHARTABLE 134Q (BITS . 207Q)) (CHARTABLE 135Q (BITS . 7)) (CHARTABLE 135Q (BITS . 207Q)) (CHARTABLE 136Q (BITS . 7)) (CHARTABLE 136Q (BITS . 207Q)) (CHARTABLE 137Q (BITS . 7)) (CHARTABLE 137Q (BITS . 207Q)) (CHARTABLE 140Q (BITS . 7)) (CHARTABLE 140Q (BITS . 207Q)) (CHARTABLE 141Q (BITS . 7)) (CHARTABLE 141Q (BITS . 207Q)) (CHARTABLE 142Q (BITS . 7)) (CHARTABLE 142Q (BITS . 207Q)) (CHARTABLE 143Q (BITS . 7)) (CHARTABLE 143Q (BITS . 207Q)) (CHARTABLE 144Q (BITS . 7)) (CHARTABLE 144Q (BITS . 207Q)) (CHARTABLE 145Q (BITS . 7)) (CHARTABLE 145Q (BITS . 207Q)) (CHARTABLE 146Q (BITS . 7)) (CHARTABLE 146Q (BITS . 207Q)) (CHARTABLE 147Q (BITS . 7)) (CHARTABLE 147Q (BITS . 207Q)) (CHARTABLE 150Q (BITS . 7)) (CHARTABLE 150Q (BITS . 207Q)) (CHARTABLE 151Q (BITS . 7)) (CHARTABLE 151Q (BITS . 207Q)) (CHARTABLE 152Q (BITS . 7)) (CHARTABLE 152Q (BITS . 207Q)) (CHARTABLE 153Q (BITS . 7)) (CHARTABLE 153Q (BITS . 207Q)) (CHARTABLE 154Q (BITS . 7)) (CHARTABLE 154Q (BITS . 207Q)) (CHARTABLE 155Q (BITS . 7)) (CHARTABLE 155Q (BITS . 207Q)) (CHARTABLE 156Q (BITS . 7)) (CHARTABLE 156Q (BITS . 207Q)) (CHARTABLE 157Q (BITS . 7)) (CHARTABLE 157Q (BITS . 207Q)) (CHARTABLE 160Q (BITS . 7)) (CHARTABLE 160Q (BITS . 207Q)) (CHARTABLE 161Q (BITS . 7)) (CHARTABLE 161Q (BITS . 207Q)) (CHARTABLE 162Q (BITS . 7)) (CHARTABLE 162Q (BITS . 207Q)) (CHARTABLE 163Q (BITS . 7)) (CHARTABLE 163Q (BITS . 207Q)) (CHARTABLE 164Q (BITS . 7)) (CHARTABLE 164Q (BITS . 207Q)) (CHARTABLE 165Q (BITS . 7)) (CHARTABLE 165Q (BITS . 207Q)) (CHARTABLE 166Q (BITS . 7)) (CHARTABLE 166Q (BITS . 207Q)) (CHARTABLE 167Q (BITS . 7)) (CHARTABLE 167Q (BITS . 207Q)) (CHARTABLE 170Q (BITS . 7)) (CHARTABLE 170Q (BITS . 207Q)) (CHARTABLE 171Q (BITS . 7)) (CHARTABLE 171Q (BITS . 207Q)) (CHARTABLE 172Q (BITS . 7)) (CHARTABLE 172Q (BITS . 207Q)) (CHARTABLE 173Q (BITS . 7)) (CHARTABLE 173Q (BITS . 207Q)) (CHARTABLE 174Q (BITS . 7)) (CHARTABLE 174Q (BITS . 207Q)) (CHARTABLE 175Q (BITS . 7)) (CHARTABLE 175Q (BITS . 207Q)) (CHARTABLE 176Q (BITS . 7)) (CHARTABLE 176Q (BITS . 207Q)) (CHARTABLE 177Q (BITS . 7)) (CHARTABLE 177Q (BITS . 207Q)) (CHARTABLE 200Q FULLPOINTER)) '202Q) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (RPAQQ \NSCHARHASHKEYS 12Q) (RPAQQ \NSCHARHASHOVERFLOW 1.3) (CONSTANTS \NSCHARHASHKEYS \NSCHARHASHOVERFLOW) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \CREATENSCHARHASH MACRO (ARGS (* ;  "added size argument for creation of \ORIGTERMTABLE during initialization.") (LIST 'HASHARRAY (OR (CAR ARGS) '\NSCHARHASHKEYS) '\NSCHARHASHOVERFLOW))) ) ) (DEFINEQ (GETSYNTAX [LAMBDA (CH TABLE) (* bvm%: " 8-Mar-86 17:22") (COND [(FIXP (SETQ CH (\GETCHARCODE CH))) (COND ((type? TERMTABLEP TABLE) (\GETTERMSYNTAX CH TABLE)) (T (\GETREADSYNTAX CH (\GTREADTABLE TABLE T] (T (PROG (TEM CHARTBL RESULT) (COND ((SETQ TEM (\READCLASSTOCODE CH)) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM VAL) (push RESULT KEY] CHARTBL)) ((EQ CH 'BREAK) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((fetch BREAK of VAL) (push RESULT KEY] CHARTBL)) ((SETQ TEM (\TERMCLASSTOCODE CH)) (SETQ CHARTBL (fetch TERMSA of (\GTTERMTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM (fetch TERMCLASS of VAL)) (push RESULT (PROG1 KEY (* SELECTC TEM ((LIST NONE.TC  WORDSEPR.TC) (* ;  "Only these classes have multiple members")  KEY) (RETURN (CONS KEY)))] CHARTBL)) [(FMEMB CH '(MACRO SPLICE INFIX)) (PROG [LST (A (fetch READMACRODEFS of (\GTREADTABLE TABLE T] (COND (A [MAPHASH A (FUNCTION (LAMBDA (DEF C) (AND (EQ CH (fetch MACROTYPE of DEF)) (push LST C] (RETURN LST] ((SETQ TEM (fetch (CONTEXTS VAL) of CH)) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM (fetch MACROCONTEXT of VAL)) (push RESULT KEY] CHARTBL)) ((SETQ TEM (fetch (WAKEUPS VAL) of CH)) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM (fetch WAKEUP of VAL)) (push RESULT KEY] CHARTBL)) ((SETQ TEM (fetch (ESCAPES VAL) of CH)) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM (fetch ESCAPE of VAL)) (push RESULT KEY] CHARTBL)) (T (\ILLEGAL.ARG CH))) (RETURN RESULT]) (SETSYNTAX [LAMBDA (CHAR CLASS TBL) (* rmk%: "20-Nov-84 15:47") (OR (FIXP (SETQ CHAR (\GETCHARCODE CHAR))) (\ILLEGAL.ARG CHAR)) [OR (type? READTABLEP TBL) (type? TERMTABLEP TBL) (SETQ TBL (COND ((OR (type? TERMTABLEP CLASS) (\TERMCLASSTOCODE CLASS)) (\GTTERMTABLE TBL)) (T (\GTREADTABLE TBL] [COND ((OR (type? READTABLEP CLASS) (type? TERMTABLEP CLASS) (SELECTQ CLASS ((NIL T ORIG) T) NIL)) (SETQ CLASS (GETSYNTAX CHAR CLASS))) ((FIXP (SETQ CLASS (\GETCHARCODE CLASS))) (SETQ CLASS (GETSYNTAX CLASS TBL] (COND ((type? READTABLEP TBL) (PROG1 (\GETREADSYNTAX CHAR TBL) (\SETREADSYNTAX CHAR CLASS TBL))) (T (PROG1 (\GETTERMSYNTAX CHAR TBL) (\SETTERMSYNTAX CHAR CLASS TBL]) (SYNTAXP [LAMBDA (CODE CLASS TABLE) (* rmk%: " 5-JUN-80 22:40") (PROG (D) (RETURN (COND ((EQ CLASS 'BREAK) (fetch BREAK of (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE))) ((SETQ D (\READCLASSTOCODE CLASS)) (EQ D (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE))) [(SETQ D (\TERMCLASSTOCODE CLASS)) (EQ D (fetch TERMCLASS of (\SYNCODE (fetch TERMSA of (\GTTERMTABLE TABLE)) CODE] [(FMEMB CLASS '(MACRO SPLICE INFIX)) (AND (SETQ D (fetch READMACRODEFS of (\GTREADTABLE TABLE))) (EQ CLASS (fetch MACROTYPE of (GETHASH CODE D] [(SETQ D (fetch (CONTEXTS VAL) of CLASS)) (EQ D (fetch MACROCONTEXT of (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE] [(SETQ D (fetch (WAKEUPS VAL) of CLASS)) (EQ D (fetch WAKEUP of (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE] [(SETQ D (fetch (ESCAPES VAL) of CLASS)) (EQ D (fetch ESCAPE of (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE] (T (\ILLEGAL.ARG CLASS]) (\COPYSYNTAX [LAMBDA (A B) (* gbn "15-Sep-85 22:36") (* ;; "Copies chartable A into chartable B") (CHECK (AND (type? CHARTABLE A) (type? CHARTABLE B))) (\MOVEBYTES A 0 B 0 (ADD1 \MAXTHINCHAR)) (COND ((fetch (CHARTABLE NSCHARHASH) of A) (replace (CHARTABLE NSCHARHASH) of B with (REHASH (fetch (CHARTABLE NSCHARHASH) of A) (\CREATENSCHARHASH]) (\GETCHARCODE [LAMBDA (C) (* rmk%: "20-Nov-84 15:46") (COND ((AND (NUMBERP C) (\CHARCODEP (FIX C))) (FIX C)) ((AND (LITATOM C) (EQ 1 (NCHARS C))) (CHCON1 C)) (T C]) (\SETFATSYNCODE [LAMBDA (TABLE CHAR CODE) (* bvm%: " 8-Mar-86 17:03") (* ;;; "Called by \SETSYNCODE macro for fat characters") (SETQ TABLE (\DTEST TABLE 'CHARTABLE)) (* ;  "CODE = 0 is REAL.CCE, NONE.TC, OTHER.RC") (COND ((ILEQ CHAR \MAXTHINCHAR) (\PUTBASEBYTE TABLE CHAR CODE)) ((EQ 0 CODE) (COND ((fetch (CHARTABLE NSCHARHASH) of TABLE) (* ;  "there was already a table here so record the change") (PUTHASH CHAR CODE (fetch (CHARTABLE NSCHARHASH) of TABLE))) (T (* ;  "No hashtable yet, and only the default is being stored, so don't build the hashtable") 0))) (T (PUTHASH CHAR CODE (OR (fetch (CHARTABLE NSCHARHASH) of TABLE) (replace (CHARTABLE NSCHARHASH) of TABLE with (\CREATENSCHARHASH]) (\MAPCHARTABLE [LAMBDA (FN CHARTBL) (* ; "Edited 20-Apr-2018 16:53 by rmk:") (for I from 0 to \MAXTHINCHAR do (APPLY* FN (\GETBASEBYTE CHARTBL I) I)) (COND ((fetch (CHARTABLE NSCHARHASH) of CHARTBL) (MAPHASH (fetch (CHARTABLE NSCHARHASH) of CHARTBL) FN]) ) (* ; "terminal tables") (DEFINEQ (CONTROL [LAMBDA (MODE TTBL) (* rmk%: " 8-FEB-80 11:59") (PROG1 (fetch CONTROLFLG of (SETQ TTBL (\GTTERMTABLE TTBL))) (replace CONTROLFLG of TTBL with (AND MODE T]) (COPYTERMTABLE [LAMBDA (TTBL) (* lmm "14-APR-81 14:27") (create TERMTABLEP using (SETQ TTBL (\GTTERMTABLE TTBL T)) TERMSA _ (create CHARTABLE using (fetch TERMSA of TTBL]) (DELETECONTROL [LAMBDA (TYPE MESSAGE TTBL) (* lmm " 1-Jan-85 21:34") (PROG [VAL (TBL (\GTTERMTABLE TTBL (NULL MESSAGE] (SETQ VAL (SELECTQ TYPE ((ECHO NOECHO) (PROG1 (fetch DELCHARECHO of TBL) (replace DELCHARECHO of TBL with TYPE))) (DELCHARECHO (PROG1 (fetch DELCHARECHO of TBL) (SELECTQ MESSAGE (NIL (* ; "Called only to get current value")) ((ECHO NOECHO) (replace DELCHARECHO of TBL with MESSAGE)) (LISPERROR "ILLEGAL ARG" MESSAGE)))) ((LINEDELETE DELETELINE) [PROG1 (fetch LINEDELETE of TBL) (AND MESSAGE (replace LINEDELETE of TBL with (\LITCHECK MESSAGE]) (1STCHDEL [PROG1 (fetch 1STCHDEL of TBL) (AND MESSAGE (replace 1STCHDEL of TBL with (\LITCHECK MESSAGE]) (NTHCHDEL [PROG1 (fetch NTHCHDEL of TBL) (AND MESSAGE (replace NTHCHDEL of TBL with (\LITCHECK MESSAGE]) (POSTCHDEL [PROG1 (fetch POSTCHDEL of TBL) (AND MESSAGE (replace POSTCHDEL of TBL with (\LITCHECK MESSAGE]) (EMPTYCHDEL [PROG1 (fetch EMPTYCHDEL of TBL) (AND MESSAGE (replace EMPTYCHDEL of TBL with (\LITCHECK MESSAGE]) (LISPERROR "ILLEGAL ARG" TYPE))) (RETURN (COND ((STRINGP VAL) (CONCAT VAL)) (T VAL]) (GETDELETECONTROL [LAMBDA (TYPE TTBL) (* lmm " 1-Jan-85 21:20") (PROG (TBL VAL) (SETQ TBL (\GTTERMTABLE TTBL T)) (SETQ VAL (SELECTQ TYPE ((ECHO NOECHO) (fetch DELCHARECHO of TBL)) (DELCHARECHO (fetch DELCHARECHO of TBL)) ((LINEDELETE DELETELINE) (fetch LINEDELETE of TBL)) (1STCHDEL (fetch 1STCHDEL of TBL)) (NTHCHDEL (fetch NTHCHDEL of TBL)) (POSTCHDEL (fetch POSTCHDEL of TBL)) (EMPTYCHDEL (fetch EMPTYCHDEL of TBL)) (LISPERROR "ILLEGAL ARG" TYPE))) (RETURN (COND ((STRINGP VAL) (CONCAT VAL)) (T VAL]) (ECHOCHAR [LAMBDA (CHARCODE MODE TTBL) (* lmm " 1-Jan-85 21:29") (COND ((LISTP CHARCODE) (for X in CHARCODE do (ECHOCHAR X MODE TTBL))) (T (PROG [B (SA (fetch TERMSA of (\GTTERMTABLE TTBL (NULL MODE] (RETURN (PROG1 (SELECTC (fetch CCECHO of (SETQ B (\SYNCODE SA CHARCODE))) (REAL.CCE 'REAL) (IGNORE.CCE 'IGNORE) (SIMULATE.CCE 'SIMULATE) 'INDICATE) (AND MODE (\SETSYNCODE SA CHARCODE (create TERMCODE using B CCECHO _ (SELECTQ MODE (REAL REAL.CCE) (IGNORE IGNORE.CCE) (SIMULATE SIMULATE.CCE) ((INDICATE UPARROW) INDICATE.CCE) (\ILLEGAL.ARG MODE]) (ECHOCONTROL [LAMBDA (CHAR MODE TTBL) (* rmk%: "20-Nov-84 15:14") (PROG ((C (\GETCHARCODE CHAR))) (OR [AND (\THINCHARCODEP C) (OR (ILESSP C 40Q) (AND (IGEQ C (CHARCODE A)) (ILEQ C (CHARCODE Z)) (SETQ C (IDIFFERENCE C 100Q] (\ILLEGAL.ARG C)) (RETURN (ECHOCHAR C MODE TTBL]) (ECHOMODE [LAMBDA (FLG TTBL) (* rmk%: " 8-FEB-80 11:57") (PROG1 (fetch ECHOFLG of (SETQ TTBL (\GTTERMTABLE TTBL))) (replace ECHOFLG of TTBL with (AND FLG T]) (GETECHOMODE [LAMBDA (TTBL) (* lmm " 1-Jan-85 21:21") (fetch ECHOFLG of (\GTTERMTABLE TTBL T]) (GETCONTROL [LAMBDA (TTBL) (* lmm " 1-Jan-85 21:21") (fetch CONTROLFLG of (\GTTERMTABLE TTBL T]) (GETTERMTABLE [LAMBDA (TTBL) (\GTTERMTABLE TTBL NIL]) (RAISE [LAMBDA (FLG TTBL) (* bvm%: "14-Feb-85 00:17") (PROG1 (fetch RAISEFLG of (SETQ TTBL (\GTTERMTABLE TTBL))) (replace RAISEFLG of TTBL with (COND ((EQ FLG 0) 0) (FLG T]) (GETRAISE [LAMBDA (TTBL) (* lmm " 1-Jan-85 21:21") (fetch RAISEFLG of (\GTTERMTABLE TTBL T]) (RESETTERMTABLE [LAMBDA (TTBL FROM) (* lmm "14-APR-81 14:34") (PROG ((FR (\GTTERMTABLE FROM T)) (TT (\GTTERMTABLE TTBL))) (\COPYSYNTAX (fetch TERMSA of FR) (fetch TERMSA of TT)) (replace RAISEFLG of TT with (fetch RAISEFLG of FR)) (replace DELCHARECHO of TT with (fetch DELCHARECHO of FR)) (replace LINEDELETE of TT with (fetch LINEDELETE of FR)) (replace 1STCHDEL of TT with (fetch 1STCHDEL of FR)) (replace NTHCHDEL of TT with (fetch NTHCHDEL of FR)) (replace POSTCHDEL of TT with (fetch POSTCHDEL of FR)) (replace EMPTYCHDEL of TT with (fetch EMPTYCHDEL of FR)) (replace CONTROLFLG of TT with (fetch CONTROLFLG of FR)) (replace ECHOFLG of TT with (fetch ECHOFLG of FR)) (RETURN TT]) (SETTERMTABLE [LAMBDA (TBL) (* rmk%: " 8-FEB-80 12:16") (PROG1 \PRIMTERMTABLE (SETQ \PRIMTERMSA (fetch TERMSA of (SETQ \PRIMTERMTABLE (\GTTERMTABLE TBL]) (TERMTABLEP [LAMBDA (TTBL) (* rmk%: "20-FEB-80 12:29") (AND (type? TERMTABLEP TTBL) TTBL]) (\GETTERMSYNTAX [LAMBDA (C TBL) (* rmk%: "24-APR-80 09:44") (\TERMCODETOCLASS (fetch TERMCLASS of (\SYNCODE (fetch TERMSA of TBL) C]) (\GTTERMTABLE [LAMBDA (TTBL FLG) (* lmm " 6-MAY-80 20:35") (COND ((type? TERMTABLEP TTBL) TTBL) ((NULL TTBL) \PRIMTERMTABLE) ((AND (EQ TTBL 'ORIG) FLG) \ORIGTERMTABLE) (T (LISPERROR "ILLEGAL TERMINAL TABLE" TTBL]) (\ORIGTERMTABLE [LAMBDA NIL (* rrb " 5-Oct-85 10:33") (* ;; "Creates the original terminal table") (* ;; "must be created with a hash table big enough to hold all of the indicates in character set 1 because this gets evaluated in the loadup before HASHOVERFLOW is defined. rrb 5-oct-85") (PROG ((TBL (create TERMTABLEP TERMSA _ (create CHARTABLE NSCHARHASH _ (\CREATENSCHARHASH 454Q)) DELCHARECHO _ 'ECHO ECHOFLG _ T LINEDELETE _ "## " 1STCHDEL _ "\" NTHCHDEL _ "" POSTCHDEL _ "\" EMPTYCHDEL _ "## "))) (PROGN (\SETTERMSYNTAX (SELECTQ (SYSTEMTYPE) ((TENEX D) (CHARCODE ^A)) ((JERICHO VAX TOPS-20) (CHARCODE DEL)) (SHOULDNT)) 'CHARDELETE TBL) (\SETTERMSYNTAX (CHARCODE ^H) 'CHARDELETE TBL) (* ;  "Added ^H as a CHARDELETE character 9/30/85") (\SETTERMSYNTAX (CHARCODE ^W) 'WORDDELETE TBL) (\SETTERMSYNTAX (SELECTQ (SYSTEMTYPE) ((TENEX D) (CHARCODE ^Q)) ((JERICHO VAX) (CHARCODE ^U)) (SHOULDNT)) 'LINEDELETE TBL) (\SETTERMSYNTAX (CHARCODE ^R) 'RETYPE TBL) (\SETTERMSYNTAX (CHARCODE ^V) 'CTRLV TBL) (\SETTERMSYNTAX (CHARCODE EOL) 'WAKEUPCHAR TBL) (for C in (CHARCODE (SPACE TAB ! @ %# $ ~ & * - = + %| { } ^ _ %: ; < > %, %. ? /)) do (\SETTERMSYNTAX C 'WORDSEPR TBL))) (PROGN (ECHOCHAR (CHARCODE (NULL ^A ^B ^C ^D ^E ^F ^H ^K ^L ^N ^O ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^\ ^%] ^^)) 'INDICATE TBL) (ECHOCHAR (CHARCODE (BELL TAB LF CR)) 'REAL TBL) (SELECTQ (SYSTEMTYPE) (D (ECHOCHAR (CHARCODE (NULL ^A ^W ^Q ^R)) 'IGNORE TBL) (ECHOCHAR (CHARCODE (BELL TAB ESCAPE LF TENEXEOL)) 'SIMULATE TBL)) (JERICHO (ECHOCHAR [CONSTANT (CONS ERASECHARCODE (CHARCODE (BELL TAB ESCAPE EOL] 'SIMULATE TBL)) (VAX (ECHOCHAR (CHARCODE (TAB ESCAPE EOL DEL)) 'SIMULATE TBL)) NIL)) (for C from 200Q to \MAXTHINCHAR do (ECHOCHAR C 'REAL TBL)) (for C from (CHARCODE 1,0) to (CHARCODE 1,377) do (ECHOCHAR C 'INDICATE TBL)) (RETURN TBL]) (\SETTERMSYNTAX [LAMBDA (C CLASS TBL) (* rmk%: "26-Mar-85 23:45") (* ;; "Changes the terminal syntax class for charcode C. Unlike Interlisp-10, does not turn off previous characters for CHARDELETE, etc. classes") (\SETSYNCODE (fetch TERMSA of TBL) C (create TERMCODE using (\SYNCODE (fetch TERMSA of TBL) C) TERMCLASS _ (OR (\TERMCLASSTOCODE CLASS) (LISPERROR "ILLEGAL ARG" CLASS]) (\TERMCLASSTOCODE [LAMBDA (CLASS) (* rmk%: "11-FEB-82 21:24") (SELECTQ CLASS ((EOL WAKEUPCHAR) EOL.TC) (NONE NONE.TC) (CHARDELETE CHARDELETE.TC) (WORDDELETE WORDDELETE.TC) (WORDSEPR WORDSEPR.TC) (LINEDELETE LINEDELETE.TC) (RETYPE RETYPE.TC) ((CTRLV CNTRLV) CTRLV.TC) NIL]) (\TERMCODETOCLASS [LAMBDA (CODE) (* rmk%: "11-FEB-82 21:24") (SELECTC CODE (EOL.TC 'EOL) (NONE.TC 'NONE) (CHARDELETE.TC 'CHARDELETE) (WORDDELETE.TC 'WORDDELETE) (WORDSEPR.TC 'WORDSEPR) (LINEDELETE.TC 'LINEDELETE) (RETYPE.TC 'RETYPE) (CTRLV.TC 'CNTRLV) NIL]) (\LITCHECK [LAMBDA (X) (* rmk%: "11-FEB-82 21:26") (COND ((EQ X 'BACKUP) (* ;  "Means take terminal/implementation dependent backup action") X) ((LITATOM X) (MKSTRING X)) ((STRINGP X) (CONCAT X)) (T (\ILLEGAL.ARG X]) ) (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED") (RPAQQ CCECHOMODES (REAL.CCE IGNORE.CCE SIMULATE.CCE INDICATE.CCE)) (DECLARE%: EVAL@COMPILE (RPAQQ REAL.CCE 0) (RPAQQ IGNORE.CCE 10Q) (RPAQQ SIMULATE.CCE 20Q) (RPAQQ INDICATE.CCE 30Q) (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)) (DECLARE%: EVAL@COMPILE (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) ) (DECLARE%: EVAL@COMPILE (ACCESSFNS TERMCODE ((CCECHO (LOGAND DATUM 30Q)) (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)) ) (/DECLAREDATATYPE 'TERMTABLEP '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG) '((TERMTABLEP 0 POINTER) (TERMTABLEP 2 POINTER) (TERMTABLEP 4 POINTER) (TERMTABLEP 6 POINTER) (TERMTABLEP 10Q POINTER) (TERMTABLEP 12Q POINTER) (TERMTABLEP 14Q POINTER) (TERMTABLEP 16Q POINTER) (TERMTABLEP 16Q (FLAGBITS . 0)) (TERMTABLEP 16Q (FLAGBITS . 20Q))) '20Q) (* "END EXPORTED DEFINITIONS") ) (/DECLAREDATATYPE 'TERMTABLEP '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG) '((TERMTABLEP 0 POINTER) (TERMTABLEP 2 POINTER) (TERMTABLEP 4 POINTER) (TERMTABLEP 6 POINTER) (TERMTABLEP 10Q POINTER) (TERMTABLEP 12Q POINTER) (TERMTABLEP 14Q POINTER) (TERMTABLEP 16Q POINTER) (TERMTABLEP 16Q (FLAGBITS . 0)) (TERMTABLEP 16Q (FLAGBITS . 20Q))) '20Q) (* ; "read tables") (DEFINEQ (COPYREADTABLE [LAMBDA (RDTBL) (* rmk%: " 2-FEB-80 12:26") (RESETREADTABLE (create READTABLEP) (\GTREADTABLE RDTBL T]) (FIND-READTABLE [LAMBDA (NAME) (* bvm%: "27-Jul-86 15:53") (GETHASH NAME \READTABLEHASH]) (IN-READTABLE [LAMBDA (RDTBL) (* bvm%: "27-Jul-86 15:55") (SETQ *READTABLE* (\GTREADTABLE RDTBL T]) (ESCAPE [LAMBDA (FLG RDTBL) (* rmk%: " 1-FEB-80 13:12") (PROG1 (fetch ESCAPEFLG of (SETQ RDTBL (\GTREADTABLE RDTBL))) (replace ESCAPEFLG of RDTBL with (NEQ FLG NIL]) (GETBRK [LAMBDA (RDTBL) (* rmk%: " 2-MAY-80 17:04") (GETSYNTAX 'BREAK RDTBL]) (GETREADTABLE [LAMBDA (RDTBL) (* lmm%: 4-FEB-76 3 62Q) (\GTREADTABLE RDTBL]) (GETSEPR [LAMBDA (RDTBL) (* rmk%: " 2-MAY-80 17:05") (GETSYNTAX 'SEPR RDTBL]) (READMACROS [LAMBDA (FLG RDTBL) (* rmk%: " 1-FEB-80 13:11") (PROG1 (fetch READMACROFLG of (SETQ RDTBL (\GTREADTABLE RDTBL))) (replace READMACROFLG of RDTBL with (NEQ FLG NIL]) (READTABLEP [LAMBDA (RDTBL) (* rmk%: "20-FEB-80 12:32") (AND (type? READTABLEP RDTBL) RDTBL]) (READTABLEPROP [LAMBDA ARGS (* bvm%: "28-Aug-86 15:28") (COND ((LESSP ARGS 2) (\ILLEGAL.ARG NIL)) ((GREATERP ARGS 3) (\ILLEGAL.ARG (ARG ARGS 4))) (T (LET [(RDTBL (\GTREADTABLE (ARG ARGS 1))) (NEWVALUEP (EQ ARGS 3)) (NEWVALUE (AND (EQ ARGS 3) (ARG ARGS 3] (SELECTQ (ARG ARGS 2) (NUMBERBASE [PROG1 (fetch (READTABLEP NUMBERBASE) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP NUMBERBASE) of RDTBL with NEWVALUE]) (NAME [LET ((OLDNAME (fetch (READTABLEP READTBLNAME) of RDTBL))) (PROG1 OLDNAME (COND (NEWVALUEP (COND (OLDNAME (REMHASH OLDNAME \READTABLEHASH))) (replace (READTABLEP READTBLNAME) of RDTBL with NEWVALUE) (PUTHASH NEWVALUE RDTBL \READTABLEHASH]) (COMMONLISP [PROG1 (fetch (READTABLEP COMMONLISP) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP COMMONLISP) of RDTBL with NEWVALUE) (if NEWVALUE then (* ;  "COMMONLISP implies COMMONNUMSYNTAX and not USESILPACKAGE") (replace (READTABLEP COMMONNUMSYNTAX) of RDTBL with T) (replace (READTABLEP USESILPACKAGE) of RDTBL with NIL]) (COMMONNUMSYNTAX [PROG1 (fetch (READTABLEP COMMONNUMSYNTAX) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP COMMONNUMSYNTAX) of RDTBL with NEWVALUE]) (USESILPACKAGE [PROG1 (fetch (READTABLEP USESILPACKAGE) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP USESILPACKAGE) of RDTBL with NEWVALUE]) (CASEINSENSITIVE [PROG1 (fetch (READTABLEP CASEINSENSITIVE) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP CASEINSENSITIVE) of RDTBL with NEWVALUE]) (ESCAPECHAR [PROG1 (fetch (READTABLEP ESCAPECHAR) of RDTBL) (COND (NEWVALUEP (\SETREADSYNTAX NEWVALUE 'ESCAPE RDTBL) (replace (READTABLEP ESCAPECHAR) of RDTBL with NEWVALUE]) (MULTIPLE-ESCAPECHAR [PROG1 (fetch (READTABLEP MULTESCAPECHAR) of RDTBL) (COND (NEWVALUEP (\SETREADSYNTAX NEWVALUE 'MULTIPLE-ESCAPE RDTBL) (replace (READTABLEP MULTESCAPECHAR) of RDTBL with NEWVALUE]) (PACKAGECHAR [PROG1 (fetch (READTABLEP PACKAGECHAR) of RDTBL) (COND (NEWVALUEP (\SETREADSYNTAX NEWVALUE 'PACKAGEDELIM RDTBL) (replace (READTABLEP PACKAGECHAR) of RDTBL with NEWVALUE]) (HASHMACROCHAR [PROG1 (fetch (READTABLEP HASHMACROCHAR) of RDTBL) (COND (NEWVALUEP (\SETREADSYNTAX NEWVALUE '(INFIX ALWAYS NONIMMEDIATE ESCQUOTE READVBAR) RDTBL) (replace (READTABLEP HASHMACROCHAR) of RDTBL with NEWVALUE]) (\ILLEGAL.ARG (ARG ARGS 2]) (RESETREADTABLE [LAMBDA (RDTBL FROM) (* ; "Edited 20-Apr-2018 16:22 by rmk:") (* bvm%: "27-Aug-86 22:28") (* ;; "RMK: Copy the macrodefs") [replace READMACROFLG of (SETQ RDTBL (\GTREADTABLE RDTBL)) with (fetch READMACROFLG of (SETQ FROM (\GTREADTABLE FROM T] (replace ESCAPEFLG of RDTBL with (fetch ESCAPEFLG of FROM)) (replace (READTABLEP COMMONLISP) of RDTBL with (fetch (READTABLEP COMMONLISP) of FROM)) (replace (READTABLEP NUMBERBASE) of RDTBL with (fetch (READTABLEP NUMBERBASE) of FROM)) (replace (READTABLEP CASEINSENSITIVE) of RDTBL with (fetch (READTABLEP CASEINSENSITIVE) of FROM)) (replace (READTABLEP COMMONNUMSYNTAX) of RDTBL with (fetch (READTABLEP COMMONNUMSYNTAX) of FROM)) (replace (READTABLEP USESILPACKAGE) of RDTBL with (fetch (READTABLEP USESILPACKAGE) of FROM)) (replace (READTABLEP HASHMACROCHAR) of RDTBL with (fetch (READTABLEP HASHMACROCHAR) of FROM)) (replace (READTABLEP ESCAPECHAR) of RDTBL with (fetch (READTABLEP ESCAPECHAR) of FROM)) (replace (READTABLEP MULTESCAPECHAR) of RDTBL with (fetch (READTABLEP MULTESCAPECHAR) of FROM)) (replace (READTABLEP PACKAGECHAR) of RDTBL with (fetch (READTABLEP PACKAGECHAR) of FROM)) (replace (READTABLEP DISPATCHMACRODEFS) of RDTBL with (COPY (fetch (READTABLEP DISPATCHMACRODEFS) of FROM))) (* ;; "Placeholder. If DISPATCHMACRODEFS ends up containing a CHARTABLE or a hash table, will have to do a REHASH or \COPYSYNTAX as well") [LET ((RDEFS (fetch (READTABLEP READMACRODEFS) of RDTBL)) (FDEFS (fetch (READTABLEP READMACRODEFS) of FROM))) [COND (RDEFS (CLRHASH RDEFS)) (T (SETQ RDEFS (replace (READTABLEP READMACRODEFS) of RDTBL with (HASHARRAY (HARRAYSIZE FDEFS) 7] (AND FDEFS (MAPHASH FDEFS (FUNCTION (LAMBDA (VAL KEY) (PUTHASH KEY (COPY VAL) RDEFS] (\COPYSYNTAX (fetch READSA of FROM) (fetch READSA of RDTBL)) RDTBL]) (SETBRK [LAMBDA (LST FLG RDTBL) (* rmk%: "13-AUG-81 00:01") (* ;  "This is a very ugly def which needs to be cleaned up cause a lot of people call SETBRK") (COND [(EQ LST T) [MAPC (GETSYNTAX 'BREAK RDTBL) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL] (MAPC (GETSYNTAX 'BREAK (COND ((EQ RDTBL T) 'ORIG) (T T))) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'BREAK RDTBL] (T (SELECTQ FLG (NIL (* ; "reset") [MAPC (GETSYNTAX 'BREAK RDTBL) (FUNCTION (LAMBDA (X) (OR (MEMB X LST) (SETSYNTAX X 'OTHER RDTBL] [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'BREAK RDTBL]) (0 (* ; "clear out lst") [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL]) (1 (* ; "add chars") [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'BREAK RDTBL]) NIL]) (SETREADTABLE [LAMBDA (RDTBL FLG) (* bvm%: " 4-May-86 16:32") (PROG1 *READTABLE* (SETQ *READTABLE* (\GTREADTABLE RDTBL]) (SETSEPR [LAMBDA (LST FLG RDTBL) (* rmk%: " 8-JUN-80 07:16") (* ;  "This one also needs to be cleaned up") (COND [(EQ LST T) [MAPC (GETSYNTAX 'SEPR RDTBL) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL] (MAPC (GETSYNTAX 'SEPR (COND ((EQ RDTBL T) 'ORIG) (T T))) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'SEPR RDTBL] (T (SELECTQ FLG (NIL (* ; "reset") [MAPC (GETSYNTAX 'SEPR RDTBL) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL] [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'SEPR RDTBL]) (0 (* ; "clear out lst") [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL]) (1 (* ; "add chars") [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'SEPR RDTBL]) NIL]) (\GETREADSYNTAX [LAMBDA (C TBL) (* bvm%: "30-Jun-86 17:49") (LET ((B (\SYNCODE (fetch READSA of TBL) C))) (* ;; "This will turn into a SELECTQ that keys off syntax code numbers and produces class tokens. The default clause at the end: if it's not a built-in class, must be a macro") (* ;; "Sample code:") (* (SELECTQ B (0 (QUOTE OTHER))  (140Q (QUOTE SEPRCHAR))  (160Q (QUOTE BREAKCHAR))  (161Q (QUOTE STRINGDELIM))  (162Q (QUOTE LEFTPAREN))  (163Q (QUOTE RIGHTPAREN))  (164Q (QUOTE LEFTBRACKET))  (165Q (QUOTE RIGHTBRACKET))  (106Q (QUOTE ESCAPE))  (107Q (QUOTE MULTIPLE-ESCAPE))  (105Q (QUOTE PACKAGEDELIM)) )) (\COMPUTED.FORM `(SELECTQ B (\,@ [for PAIR in READCLASSTOKENS collect (LIST (EVAL (CADR PAIR)) (KWOTE (CAR PAIR]) (LET ((E (\GETREADMACRODEF C TBL)) KEY) `(,(fetch MACROTYPE of E) ,(fetch (CONTEXTS KEY) of (fetch MACROCONTEXT of B)) ,@(AND (NEQ (SETQ KEY (fetch (WAKEUPS KEY) of (fetch WAKEUP of B))) 'NONIMMEDIATE) (LIST KEY)) ,@(AND (NEQ (SETQ KEY (fetch (ESCAPES KEY) of (fetch ESCAPE of B))) 'ESCQUOTE) (LIST KEY)) ,(fetch MACROFN of E]) (\GTREADTABLE [LAMBDA (X FLG) (* bvm%: " 5-May-86 11:05") (SELECTQ X ((NIL T) (\DTEST *READTABLE* 'READTABLEP)) (\GTREADTABLE1 X FLG]) (\GTREADTABLE1 [LAMBDA (X FLG) (* bvm%: "27-Jul-86 15:37") (COND ((type? READTABLEP X) X) ((AND FLG (GETHASH X \READTABLEHASH))) (T (LISPERROR "ILLEGAL READTABLE" X]) (\ORIGREADTABLE [LAMBDA NIL (* ; "Edited 16-Apr-87 17:45 by bvm:") (* ;; "Creates a copy of the 'original' read-table.") (PROG [(TBL (create READTABLEP READMACROFLG _ T ESCAPEFLG _ T NUMBERBASE _ 12Q USESILPACKAGE _ T ESCAPECHAR _ (CHARCODE %%) PACKAGECHAR _ (PROGN (* ;; "Need to have a character for package delimiter in all read tables, but for old read tables want one that is unlikely to have appeared in a symbol in an old source file. Also would like it to be a 7-bit char, so we don't needlessly force MAKEFILE to produce binary files.") (CHARCODE "^^")) HASHMACROCHAR _ (CHARCODE "|"] (* ;; "Actually, '|' is not defined in ORIG table, but rather later. But the radix printer and others want it, and this is better than nothing") (SETSEPR (CHARCODE (SPACE TENEXEOL CR ^L LF TAB)) 1 TBL) (\SETREADSYNTAX (CHARCODE %]) 'RIGHTBRACKET TBL) (\SETREADSYNTAX (CHARCODE %[) 'LEFTBRACKET TBL) (\SETREADSYNTAX (CHARCODE %)) 'RIGHTPAREN TBL) (\SETREADSYNTAX (CHARCODE %() 'LEFTPAREN TBL) (\SETREADSYNTAX (CHARCODE %%) 'ESCAPE TBL) (\SETREADSYNTAX (CHARCODE %") 'STRINGDELIM TBL) (\SETREADSYNTAX 247Q 'PACKAGEDELIM TBL) (* ; "Old choice for package delim char: the NS section symbol. Keep for compatibility with Lyric Beta files") (\SETREADSYNTAX (CHARCODE "^^") 'PACKAGEDELIM TBL) (RETURN TBL]) (\READCLASSTOCODE [LAMBDA (CLASS) (* bvm%: " 9-Jul-85 00:43") (* ;;; "This turns into a SELECTQ that goes from CLASS token to numeric code") (\COMPUTED.FORM `(SELECTQ CLASS (\,@ READCLASSTOKENS) (SEPR (* ; "Synonym for SEPRCHAR") SEPRCHAR.RC) NIL]) (\SETMACROSYNTAX [LAMBDA (C CLASS TBL) (* rmk%: " 3-Jan-84 13:20") (OR (AND (FMEMB (CAR CLASS) '(MACRO SPLICE INFIX)) (CDR CLASS)) (\ILLEGAL.ARG CLASS)) (PROG (CONTEXT WAKEUP ESCAPE (LST CLASS) (A (fetch READMACRODEFS of TBL))) LP (COND ([CDR (SETQ LST (LISTP (CDR LST] (OR [AND (NULL CONTEXT) (SETQ CONTEXT (fetch (CONTEXTS VAL) of (CAR LST] [AND (NULL WAKEUP) (SETQ WAKEUP (fetch (WAKEUPS VAL) of (CAR LST] [AND (NULL ESCAPE) (SETQ ESCAPE (fetch (ESCAPES VAL) of (CAR LST] (\ILLEGAL.ARG CLASS)) (GO LP))) (OR (LISTP LST) (\ILLEGAL.ARG CLASS)) [COND (A (* ;; "This hack guarantees that the hasharray will not overflow and cause an error in the uninterruptable PUTHASH below. If it didn't already have a value for C, then the macro bits are not set in C's syntax code, so the T value is harmless.") (OR (GETHASH C A) (PUTHASH C T A))) (T (replace READMACRODEFS of TBL with (SETQ A (HASHARRAY 7 7] (UNINTERRUPTABLY (PUTHASH C (create READMACRODEF MACROTYPE _ (CAR CLASS) MACROFN _ (CAR LST)) A) (\SETSYNCODE (fetch READSA of TBL) C (LOGOR (OR CONTEXT ALWAYS.RMC) (OR ESCAPE ESC.RME) (OR WAKEUP NONIMMEDIATE.RMW))))]) (\SETREADSYNTAX [LAMBDA (C CLASS TBL) (* bvm%: " 8-Mar-86 16:37") (PROG ((OLDSYNTAX (\SYNCODE (fetch (READTABLEP READSA) of TBL) C)) TEM) [COND ((EQ CLASS 'BREAK) (COND ((fetch BREAK of OLDSYNTAX) (RETURN)) (T (SETQ CLASS 'BREAKCHAR] (* ;  "If already a BREAK character but also something else, like LPAR, leave it alone") (COND ((LISTP CLASS) (\SETMACROSYNTAX C CLASS TBL)) ((SETQ TEM (\READCLASSTOCODE CLASS)) (UNINTERRUPTABLY [COND ((fetch MACROP of OLDSYNTAX) (* ; "No longer a macro") (REMHASH C (fetch READMACRODEFS of TBL] (\SETSYNCODE (fetch READSA of TBL) C TEM))) (T (\ILLEGAL.ARG CLASS]) (\READTABLEP.DEFPRINT [LAMBDA (RDTBL STREAM) (* bvm%: "13-Oct-86 17:32") (* ;; "Print read table as, for example, #") (LET ((NAME (fetch (READTABLEP READTBLNAME) of RDTBL))) [.SPACECHECK. STREAM (IPLUS (CONSTANT (NCHARS "")) (PROGN (* ; "Longest address is `177,177777'") 12Q) (COND (NAME (NCHARS NAME)) (T 0] (\OUTCHAR STREAM (fetch (READTABLEP HASHMACROCHAR) of *READTABLE*)) (\SOUT ")) T]) ) (PUTPROPS READTABLEPROP ARGNAMES (RDTBL PROP NEWVALUE)) (DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ READCLASSTOKENS ((OTHER 0) (SEPRCHAR (LOGOR ESCAPEBIT STOPATOMBIT 0)) (BREAKCHAR (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 0)) (STRINGDELIM (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 1)) (LEFTPAREN (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 2)) (RIGHTPAREN (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 3)) (LEFTBRACKET (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 4)) (RIGHTBRACKET (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 5)) (ESCAPE (LOGOR ESCAPEBIT INNERESCAPEBIT 6)) (MULTIPLE-ESCAPE (LOGOR ESCAPEBIT INNERESCAPEBIT 7)) (PACKAGEDELIM (LOGOR ESCAPEBIT INNERESCAPEBIT 1)))) (RPAQ READCLASSES [MAPCAR READCLASSTOKENS (FUNCTION (LAMBDA (PAIR) (LIST (PACK* (CAR PAIR) ".RC") (CADR PAIR]) (DECLARE%: EVAL@COMPILE (PUTPROPS \COMPUTED.FORM MACRO [X (CONS 'PROGN (MAPCAR X (FUNCTION EVAL]) ) (DECLARE%: EVAL@COMPILE (ACCESSFNS CONTEXTS ((KEY (SELECTC DATUM (ALWAYS.RMC 'ALWAYS) (FIRST.RMC 'FIRST) (ALONE.RMC 'ALONE) NIL)) (VAL (SELECTQ DATUM (ALWAYS ALWAYS.RMC) (FIRST FIRST.RMC) (ALONE ALONE.RMC) NIL)))) (ACCESSFNS ESCAPES ((KEY (SELECTC DATUM (ESC.RME 'ESCQUOTE) (NOESC.RME 'NOESCQUOTE) NIL)) (VAL (SELECTQ DATUM ((ESCQUOTE ESC) ESC.RME) ((NOESCQUOTE NOESC) NOESC.RME) NIL)))) (ACCESSFNS WAKEUPS ((KEY (SELECTC DATUM (IMMEDIATE.RMW 'IMMEDIATE) (NONIMMEDIATE.RMW 'NONIMMEDIATE) NIL)) (VAL (SELECTQ DATUM ((IMMEDIATE IMMED WAKEUP) IMMEDIATE.RMW) ((NONIMMEDIATE NONIMMED NOWAKEUP) NONIMMEDIATE.RMW) NIL)))) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (PUTPROPS \GETREADMACRODEF MACRO ((C TBL) (GETHASH C (fetch READMACRODEFS of TBL)))) (PUTPROPS \GTREADTABLE MACRO [ARGS (COND [(LITATOM (CAR ARGS)) (SUBPAIR '(X . FLG) ARGS '(SELECTQ X ((NIL T) (\DTEST *READTABLE* 'READTABLEP)) (\GTREADTABLE1 X . FLG] (T 'IGNOREMACRO]) (PUTPROPS \GTREADTABLE1 DMACRO [ARGS (COND [(NULL (CDR ARGS)) (LIST '\DTEST (CAR ARGS) ''READTABLEP] (T 'IGNOREMACRO]) ) (DECLARE%: EVAL@COMPILE (RPAQQ MACROBIT 10Q) (RPAQQ BREAKBIT 20Q) (RPAQQ STOPATOMBIT 40Q) (RPAQQ ESCAPEBIT 100Q) (RPAQQ INNERESCAPEBIT 4) (CONSTANTS MACROBIT BREAKBIT STOPATOMBIT ESCAPEBIT INNERESCAPEBIT) ) (RPAQQ READCODEMASKS ((CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1)) (WAKEUPMASK (LOGOR MACROBIT 2)))) (DECLARE%: EVAL@COMPILE (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)))) (DECLARE%: EVAL@COMPILE (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)))) (DECLARE%: EVAL@COMPILE (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)))) (DECLARE%: EVAL@COMPILE (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))) (DECLARE%: EVAL@COMPILE (RPAQ ESC.RME ESCAPEBIT) (RPAQQ NOESC.RME 0) (CONSTANTS (ESC.RME ESCAPEBIT) (NOESC.RME 0)) ) (DECLARE%: EVAL@COMPILE (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)) ) (/DECLAREDATATYPE 'READTABLEP '(POINTER POINTER FLAG FLAG FLAG (BITS 5) FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER BYTE BYTE BYTE BYTE POINTER) '((READTABLEP 0 POINTER) (READTABLEP 2 POINTER) (READTABLEP 2 (FLAGBITS . 0)) (READTABLEP 2 (FLAGBITS . 20Q)) (READTABLEP 2 (FLAGBITS . 40Q)) (READTABLEP 4 (BITS . 4)) (READTABLEP 2 (FLAGBITS . 60Q)) (READTABLEP 0 (FLAGBITS . 0)) (READTABLEP 0 (FLAGBITS . 20Q)) (READTABLEP 0 (FLAGBITS . 40Q)) (READTABLEP 0 (FLAGBITS . 60Q)) (READTABLEP 4 (FLAGBITS . 120Q)) (READTABLEP 4 (FLAGBITS . 140Q)) (READTABLEP 4 (FLAGBITS . 160Q)) (READTABLEP 6 POINTER) (READTABLEP 5 (BITS . 7)) (READTABLEP 5 (BITS . 207Q)) (READTABLEP 4 (BITS . 207Q)) (READTABLEP 10Q (BITS . 7)) (READTABLEP 12Q POINTER)) '14Q) (* "END EXPORTED DEFINITIONS") (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \ORIGREADTABLE \READTABLEHASH \ORIGTERMTABLE) ) ) (/DECLAREDATATYPE 'READTABLEP '(POINTER POINTER FLAG FLAG FLAG (BITS 5) FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER BYTE BYTE BYTE BYTE POINTER) '((READTABLEP 0 POINTER) (READTABLEP 2 POINTER) (READTABLEP 2 (FLAGBITS . 0)) (READTABLEP 2 (FLAGBITS . 20Q)) (READTABLEP 2 (FLAGBITS . 40Q)) (READTABLEP 4 (BITS . 4)) (READTABLEP 2 (FLAGBITS . 60Q)) (READTABLEP 0 (FLAGBITS . 0)) (READTABLEP 0 (FLAGBITS . 20Q)) (READTABLEP 0 (FLAGBITS . 40Q)) (READTABLEP 0 (FLAGBITS . 60Q)) (READTABLEP 4 (FLAGBITS . 120Q)) (READTABLEP 4 (FLAGBITS . 140Q)) (READTABLEP 4 (FLAGBITS . 160Q)) (READTABLEP 6 POINTER) (READTABLEP 5 (BITS . 7)) (READTABLEP 5 (BITS . 207Q)) (READTABLEP 4 (BITS . 207Q)) (READTABLEP 10Q (BITS . 7)) (READTABLEP 12Q POINTER)) '14Q) (RPAQ? \READTABLEHASH ) (DEFINEQ (\ATBLSET [LAMBDA NIL (* ; "Edited 20-Apr-2018 17:34 by rmk:") (* ; "Edited 3-Dec-86 18:07 by Pavel") (DECLARE (GLOBALVARS \ORIGREADTABLE \ORIGTERMTABLE)) (COND ((NULL (BOUNDP '\PRIMREADTABLE)) (initrecord CHARTABLE) (* ;; "Read tables") (* ;; "RMK: If reloading, don't smash an existing hash table") [OR (HARRAYP \READTABLEHASH) (SETQ \READTABLEHASH (HASHARRAY 24Q NIL (FUNCTION STRING-EQUAL-HASHBITS) (FUNCTION STRING-EQUAL] (LET (TRDTBL NEW-IL-RDTBL) (PROGN (* ; "The ORIG read table") (SETQ \ORIGREADTABLE (\ORIGREADTABLE)) (READTABLEPROP \ORIGREADTABLE 'NAME 'ORIG)) (PROGN (* ;  "The old Interlisp T read table. May not have a use for this any more") (SETQ TRDTBL (COPYREADTABLE \ORIGREADTABLE)) (SETSYNTAX (CHARCODE "|") '(MACRO READVBAR) TRDTBL) (SETSYNTAX (CHARCODE "`") '(MACRO FIRST READBQUOTE) TRDTBL) (SETSYNTAX (CHARCODE ",") '(MACRO FIRST READBQUOTECOMMA) TRDTBL) (SETSYNTAX (CHARCODE "'") '(MACRO FIRST READQUOTE) TRDTBL) (READTABLEPROP TRDTBL 'NAME "OLD-INTERLISP-T") (PROGN (* ; "Temporary") (SETTOPVAL '%#CURRENTRDTBL# TRDTBL))) (PROGN (* ; "The old FILERDTBL") (SETQ FILERDTBL (COPYREADTABLE \ORIGREADTABLE)) (SETSYNTAX (CHARCODE "|") TRDTBL FILERDTBL) (READTABLEPROP FILERDTBL 'NAME "OLD-INTERLISP-FILE") (SETQ *OLD-INTERLISP-READ-ENVIRONMENT* (create READER-ENVIRONMENT REREADTABLE _ FILERDTBL REBASE _ 12Q)) (* ;  "need this to read files in the loadup") ) (PROGN (SETQ NEW-IL-RDTBL (COPYREADTABLE TRDTBL)) (* ;  "The new Interlisp read table is more common lispy") (READTABLEPROP NEW-IL-RDTBL 'MULTIPLE-ESCAPECHAR (CHARCODE "|")) (READTABLEPROP NEW-IL-RDTBL 'HASHMACROCHAR (CHARCODE "#")) (SET-DEFAULT-HASHMACRO-SETTINGS NEW-IL-RDTBL) (READTABLEPROP NEW-IL-RDTBL 'COMMONNUMSYNTAX T) (READTABLEPROP NEW-IL-RDTBL 'USESILPACKAGE NIL) (READTABLEPROP NEW-IL-RDTBL 'NAME "INTERLISP") (for I from 1 to 32Q do (SETSYNTAX I 'SEPRCHAR FILERDTBL) (* ; "Make font switch chars seprs") (SETSYNTAX I 'SEPRCHAR NEW-IL-RDTBL)) (SETQ *READTABLE* NEW-IL-RDTBL)) (* ;; "Make ^Y like #. in the old T readtable and the new INTERLISP one.") (SETSYNTAX (CHARCODE ^Y) '[MACRO ALWAYS (LAMBDA (FILE RDTBL) (EVAL (READ FILE RDTBL] TRDTBL) (SETSYNTAX (CHARCODE ^Y) TRDTBL NEW-IL-RDTBL) (DEFPRINT 'READTABLEP '\READTABLEP.DEFPRINT)) (* ;; "Terminal tables") (SETQ \ORIGTERMTABLE (\ORIGTERMTABLE)) (SETQ \PRIMTERMTABLE (COPYTERMTABLE \ORIGTERMTABLE)) (SETQ \PRIMTERMSA (fetch TERMSA of \PRIMTERMTABLE)) (PUTD '\ATBLSET) (PUTD '\ORIGTERMTABLE) NIL]) ) (/DECLAREDATATYPE 'READER-ENVIRONMENT '(POINTER POINTER POINTER POINTER) '((READER-ENVIRONMENT 0 POINTER) (READER-ENVIRONMENT 2 POINTER) (READER-ENVIRONMENT 4 POINTER) (READER-ENVIRONMENT 6 POINTER)) '10Q) (* ; "Definition is on CMLREAD, need it here to initialize *OLD-INTERLISP-READ-ENVIRONMENT*") (DEFINEQ (MAKE-READER-ENVIRONMENT [LAMBDA (PACKAGE READTABLE BASE) (* ; "Edited 18-Dec-86 18:28 by bvm:") (create READER-ENVIRONMENT REPACKAGE _ (COND (PACKAGE (\DTEST PACKAGE 'PACKAGE)) (T *PACKAGE*)) REREADTABLE _ (COND (READTABLE (\DTEST READTABLE 'READTABLEP)) (T *READTABLE*)) REBASE _ (COND (BASE (\CHECKRADIX BASE)) (T *PRINT-BASE*]) (EQUAL-READER-ENVIRONMENT [LAMBDA (ENV1 ENV2) (* bvm%: "31-Jul-86 12:54") (AND (EQ (fetch (READER-ENVIRONMENT REREADTABLE) of ENV1) (fetch (READER-ENVIRONMENT REREADTABLE) of ENV2)) (EQ (fetch (READER-ENVIRONMENT REPACKAGE) of ENV1) (fetch (READER-ENVIRONMENT REPACKAGE) of ENV2)) (EQ (fetch (READER-ENVIRONMENT REBASE) of ENV1) (fetch (READER-ENVIRONMENT REBASE) of ENV2]) (SET-READER-ENVIRONMENT [LAMBDA (ENV) (* bvm%: "28-Aug-86 17:44") (* ;;; "Sets the reader environment variables from ENV. Should usually only be called inside a WITH-READER-ENVIRONMENT.") [SETQ *PACKAGE* (ffetch REPACKAGE of (\DTEST ENV 'READER-ENVIRONMENT] (SETQ *READTABLE* (ffetch REREADTABLE of ENV)) (SETQ *READ-BASE* (SETQ *PRINT-BASE* (ffetch REBASE of ENV))) ENV]) ) (RPAQ? *LISP-PACKAGE* ) (RPAQ? *INTERLISP-PACKAGE* ) (RPAQ? *KEYWORD-PACKAGE* ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\ATBLSET) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA READTABLEPROP) ) (PUTPROPS ATBL COPYRIGHT ("Venue & Xerox Corporation" 3676Q 3677Q 3700Q 3701Q 3702Q 3703Q 3706Q 3711Q 3742Q)) (DECLARE%: DONTCOPY (FILEMAP (NIL (44105Q 67336Q (GETSYNTAX 44117Q . 55046Q) (SETSYNTAX 55050Q . 57135Q) (SYNTAXP 57137Q . 62543Q) (\COPYSYNTAX 62545Q . 63630Q) (\GETCHARCODE 63632Q . 64276Q) (\SETFATSYNCODE 64300Q . 66453Q) (\MAPCHARTABLE 66455Q . 67334Q)) (67377Q 124165Q (CONTROL 67411Q . 70011Q) (COPYTERMTABLE 70013Q . 70455Q) (DELETECONTROL 70457Q . 75277Q) (GETDELETECONTROL 75301Q . 77207Q) (ECHOCHAR 77211Q . 102107Q) (ECHOCONTROL 102111Q . 103031Q) (ECHOMODE 103033Q . 103425Q) (GETECHOMODE 103427Q . 103677Q) (GETCONTROL 103701Q . 104153Q) (GETTERMTABLE 104155Q . 104260Q) (RAISE 104262Q . 105104Q) ( GETRAISE 105106Q . 105354Q) (RESETTERMTABLE 105356Q . 107456Q) (SETTERMTABLE 107460Q . 110147Q) ( TERMTABLEP 110151Q . 110416Q) (\GETTERMSYNTAX 110420Q . 111027Q) (\GTTERMTABLE 111031Q . 111555Q) ( \ORIGTERMTABLE 111557Q . 120420Q) (\SETTERMSYNTAX 120422Q . 121621Q) (\TERMCLASSTOCODE 121623Q . 122504Q) (\TERMCODETOCLASS 122506Q . 123315Q) (\LITCHECK 123317Q . 124163Q)) (131156Q 210103Q ( COPYREADTABLE 131170Q . 131502Q) (FIND-READTABLE 131504Q . 131733Q) (IN-READTABLE 131735Q . 132201Q) ( ESCAPE 132203Q . 132604Q) (GETBRK 132606Q . 133024Q) (GETREADTABLE 133026Q . 133237Q) (GETSEPR 133241Q . 133457Q) (READMACROS 133461Q . 134074Q) (READTABLEP 134076Q . 134345Q) (READTABLEPROP 134347Q . 146545Q) (RESETREADTABLE 146547Q . 157034Q) (SETBRK 157036Q . 162142Q) (SETREADTABLE 162144Q . 162431Q ) (SETSEPR 162433Q . 165433Q) (\GETREADSYNTAX 165435Q . 172615Q) (\GTREADTABLE 172617Q . 173164Q) ( \GTREADTABLE1 173166Q . 173572Q) (\ORIGREADTABLE 173574Q . 177413Q) (\READCLASSTOCODE 177415Q . 200324Q) (\SETMACROSYNTAX 200326Q . 203742Q) (\SETREADSYNTAX 203744Q . 206027Q) (\READTABLEP.DEFPRINT 206031Q . 210101Q)) (241125Q 251763Q (\ATBLSET 241137Q . 251761Q)) (252522Q 255615Q ( MAKE-READER-ENVIRONMENT 252534Q . 253622Q) (EQUAL-READER-ENVIRONMENT 253624Q . 254653Q) ( SET-READER-ENVIRONMENT 254655Q . 255613Q))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "12-Feb-2021 22:55:58" {DSK}larry>ilisp>medley>sources>ATBL.;9 257317Q changes to%: (FNS RESETREADTABLE) previous date%: "20-Apr-2018 17:35:56" {DSK}larry>ilisp>medley>sources>ATBL.;8) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT ATBLCOMS) (RPAQQ ATBLCOMS [(E (RESETSAVE (RADIX 8))) (COMS (* ;  "Common features of read and terminal tables") (DECLARE%: DONTCOPY (EXPORT (MACROS \SYNCODE \SETSYNCODE) (RECORDS CHARTABLE)) (CONSTANTS \NSCHARHASHKEYS \NSCHARHASHOVERFLOW) (MACROS \CREATENSCHARHASH)) (FNS GETSYNTAX SETSYNTAX SYNTAXP \COPYSYNTAX \GETCHARCODE \SETFATSYNCODE \MAPCHARTABLE) ) (COMS (* ; "terminal tables") (FNS CONTROL COPYTERMTABLE DELETECONTROL GETDELETECONTROL ECHOCHAR ECHOCONTROL ECHOMODE GETECHOMODE GETCONTROL GETTERMTABLE RAISE GETRAISE RESETTERMTABLE SETTERMTABLE TERMTABLEP \GETTERMSYNTAX \GTTERMTABLE \ORIGTERMTABLE \SETTERMSYNTAX \TERMCLASSTOCODE \TERMCODETOCLASS \LITCHECK) (DECLARE%: DONTCOPY (EXPORT (CONSTANTS * CCECHOMODES) (CONSTANTS * TERMCLASSES) (RECORDS TERMCODE TERMTABLEP))) (INITRECORDS TERMTABLEP)) (COMS (* ; "read tables") (FNS COPYREADTABLE FIND-READTABLE IN-READTABLE ESCAPE GETBRK GETREADTABLE GETSEPR READMACROS READTABLEP READTABLEPROP RESETREADTABLE SETBRK SETREADTABLE SETSEPR \GETREADSYNTAX \GTREADTABLE \GTREADTABLE1 \ORIGREADTABLE \READCLASSTOCODE \SETMACROSYNTAX \SETREADSYNTAX \READTABLEP.DEFPRINT) (PROP ARGNAMES READTABLEPROP) (DECLARE%: EVAL@COMPILE DONTCOPY (* ;  "READCLASSTOKENS Generates READCLASSES and some interesting SELECTQ's") (* ;  "OTHER must be zero because of initialization.") [VARS READCLASSTOKENS (READCLASSES (MAPCAR READCLASSTOKENS (FUNCTION (LAMBDA (PAIR) (LIST (PACK* (CAR PAIR) ".RC") (CADR PAIR] (MACROS \COMPUTED.FORM) (* ;  "This macro ought to be official somehow") (RECORDS CONTEXTS ESCAPES WAKEUPS) (EXPORT (MACROS \GETREADMACRODEF \GTREADTABLE \GTREADTABLE1) (CONSTANTS MACROBIT BREAKBIT STOPATOMBIT ESCAPEBIT INNERESCAPEBIT) (CONSTANTS * READCODEMASKS) (CONSTANTS * READMACROCONTEXTS) (CONSTANTS * READCLASSES) (CONSTANTS * READMACROWAKEUPS) (CONSTANTS * READMACROESCAPES) (RECORDS READCODE READMACRODEF READTABLEP)) (GLOBALVARS \ORIGREADTABLE \READTABLEHASH \ORIGTERMTABLE)) (INITRECORDS READTABLEP)) [COMS (INITVARS (\READTABLEHASH)) (FNS \ATBLSET) (INITRECORDS READER-ENVIRONMENT) (* ;  "Definition is on CMLREAD, need it here to initialize *OLD-INTERLISP-READ-ENVIRONMENT*") (FNS MAKE-READER-ENVIRONMENT EQUAL-READER-ENVIRONMENT SET-READER-ENVIRONMENT) (INITVARS (*LISP-PACKAGE*) (*INTERLISP-PACKAGE*) (*KEYWORD-PACKAGE*)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\ATBLSET] (LOCALVARS . T) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA READTABLEPROP]) (* ; "Common features of read and terminal tables") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (DECLARE%: EVAL@COMPILE (DATATYPE CHARTABLE ((CHARSET0 400Q BYTE) (NSCHARHASH FULLPOINTER))) ) (/DECLAREDATATYPE 'CHARTABLE '(BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE BYTE FULLPOINTER) '((CHARTABLE 0 (BITS . 7)) (CHARTABLE 0 (BITS . 207Q)) (CHARTABLE 1 (BITS . 7)) (CHARTABLE 1 (BITS . 207Q)) (CHARTABLE 2 (BITS . 7)) (CHARTABLE 2 (BITS . 207Q)) (CHARTABLE 3 (BITS . 7)) (CHARTABLE 3 (BITS . 207Q)) (CHARTABLE 4 (BITS . 7)) (CHARTABLE 4 (BITS . 207Q)) (CHARTABLE 5 (BITS . 7)) (CHARTABLE 5 (BITS . 207Q)) (CHARTABLE 6 (BITS . 7)) (CHARTABLE 6 (BITS . 207Q)) (CHARTABLE 7 (BITS . 7)) (CHARTABLE 7 (BITS . 207Q)) (CHARTABLE 10Q (BITS . 7)) (CHARTABLE 10Q (BITS . 207Q)) (CHARTABLE 11Q (BITS . 7)) (CHARTABLE 11Q (BITS . 207Q)) (CHARTABLE 12Q (BITS . 7)) (CHARTABLE 12Q (BITS . 207Q)) (CHARTABLE 13Q (BITS . 7)) (CHARTABLE 13Q (BITS . 207Q)) (CHARTABLE 14Q (BITS . 7)) (CHARTABLE 14Q (BITS . 207Q)) (CHARTABLE 15Q (BITS . 7)) (CHARTABLE 15Q (BITS . 207Q)) (CHARTABLE 16Q (BITS . 7)) (CHARTABLE 16Q (BITS . 207Q)) (CHARTABLE 17Q (BITS . 7)) (CHARTABLE 17Q (BITS . 207Q)) (CHARTABLE 20Q (BITS . 7)) (CHARTABLE 20Q (BITS . 207Q)) (CHARTABLE 21Q (BITS . 7)) (CHARTABLE 21Q (BITS . 207Q)) (CHARTABLE 22Q (BITS . 7)) (CHARTABLE 22Q (BITS . 207Q)) (CHARTABLE 23Q (BITS . 7)) (CHARTABLE 23Q (BITS . 207Q)) (CHARTABLE 24Q (BITS . 7)) (CHARTABLE 24Q (BITS . 207Q)) (CHARTABLE 25Q (BITS . 7)) (CHARTABLE 25Q (BITS . 207Q)) (CHARTABLE 26Q (BITS . 7)) (CHARTABLE 26Q (BITS . 207Q)) (CHARTABLE 27Q (BITS . 7)) (CHARTABLE 27Q (BITS . 207Q)) (CHARTABLE 30Q (BITS . 7)) (CHARTABLE 30Q (BITS . 207Q)) (CHARTABLE 31Q (BITS . 7)) (CHARTABLE 31Q (BITS . 207Q)) (CHARTABLE 32Q (BITS . 7)) (CHARTABLE 32Q (BITS . 207Q)) (CHARTABLE 33Q (BITS . 7)) (CHARTABLE 33Q (BITS . 207Q)) (CHARTABLE 34Q (BITS . 7)) (CHARTABLE 34Q (BITS . 207Q)) (CHARTABLE 35Q (BITS . 7)) (CHARTABLE 35Q (BITS . 207Q)) (CHARTABLE 36Q (BITS . 7)) (CHARTABLE 36Q (BITS . 207Q)) (CHARTABLE 37Q (BITS . 7)) (CHARTABLE 37Q (BITS . 207Q)) (CHARTABLE 40Q (BITS . 7)) (CHARTABLE 40Q (BITS . 207Q)) (CHARTABLE 41Q (BITS . 7)) (CHARTABLE 41Q (BITS . 207Q)) (CHARTABLE 42Q (BITS . 7)) (CHARTABLE 42Q (BITS . 207Q)) (CHARTABLE 43Q (BITS . 7)) (CHARTABLE 43Q (BITS . 207Q)) (CHARTABLE 44Q (BITS . 7)) (CHARTABLE 44Q (BITS . 207Q)) (CHARTABLE 45Q (BITS . 7)) (CHARTABLE 45Q (BITS . 207Q)) (CHARTABLE 46Q (BITS . 7)) (CHARTABLE 46Q (BITS . 207Q)) (CHARTABLE 47Q (BITS . 7)) (CHARTABLE 47Q (BITS . 207Q)) (CHARTABLE 50Q (BITS . 7)) (CHARTABLE 50Q (BITS . 207Q)) (CHARTABLE 51Q (BITS . 7)) (CHARTABLE 51Q (BITS . 207Q)) (CHARTABLE 52Q (BITS . 7)) (CHARTABLE 52Q (BITS . 207Q)) (CHARTABLE 53Q (BITS . 7)) (CHARTABLE 53Q (BITS . 207Q)) (CHARTABLE 54Q (BITS . 7)) (CHARTABLE 54Q (BITS . 207Q)) (CHARTABLE 55Q (BITS . 7)) (CHARTABLE 55Q (BITS . 207Q)) (CHARTABLE 56Q (BITS . 7)) (CHARTABLE 56Q (BITS . 207Q)) (CHARTABLE 57Q (BITS . 7)) (CHARTABLE 57Q (BITS . 207Q)) (CHARTABLE 60Q (BITS . 7)) (CHARTABLE 60Q (BITS . 207Q)) (CHARTABLE 61Q (BITS . 7)) (CHARTABLE 61Q (BITS . 207Q)) (CHARTABLE 62Q (BITS . 7)) (CHARTABLE 62Q (BITS . 207Q)) (CHARTABLE 63Q (BITS . 7)) (CHARTABLE 63Q (BITS . 207Q)) (CHARTABLE 64Q (BITS . 7)) (CHARTABLE 64Q (BITS . 207Q)) (CHARTABLE 65Q (BITS . 7)) (CHARTABLE 65Q (BITS . 207Q)) (CHARTABLE 66Q (BITS . 7)) (CHARTABLE 66Q (BITS . 207Q)) (CHARTABLE 67Q (BITS . 7)) (CHARTABLE 67Q (BITS . 207Q)) (CHARTABLE 70Q (BITS . 7)) (CHARTABLE 70Q (BITS . 207Q)) (CHARTABLE 71Q (BITS . 7)) (CHARTABLE 71Q (BITS . 207Q)) (CHARTABLE 72Q (BITS . 7)) (CHARTABLE 72Q (BITS . 207Q)) (CHARTABLE 73Q (BITS . 7)) (CHARTABLE 73Q (BITS . 207Q)) (CHARTABLE 74Q (BITS . 7)) (CHARTABLE 74Q (BITS . 207Q)) (CHARTABLE 75Q (BITS . 7)) (CHARTABLE 75Q (BITS . 207Q)) (CHARTABLE 76Q (BITS . 7)) (CHARTABLE 76Q (BITS . 207Q)) (CHARTABLE 77Q (BITS . 7)) (CHARTABLE 77Q (BITS . 207Q)) (CHARTABLE 100Q (BITS . 7)) (CHARTABLE 100Q (BITS . 207Q)) (CHARTABLE 101Q (BITS . 7)) (CHARTABLE 101Q (BITS . 207Q)) (CHARTABLE 102Q (BITS . 7)) (CHARTABLE 102Q (BITS . 207Q)) (CHARTABLE 103Q (BITS . 7)) (CHARTABLE 103Q (BITS . 207Q)) (CHARTABLE 104Q (BITS . 7)) (CHARTABLE 104Q (BITS . 207Q)) (CHARTABLE 105Q (BITS . 7)) (CHARTABLE 105Q (BITS . 207Q)) (CHARTABLE 106Q (BITS . 7)) (CHARTABLE 106Q (BITS . 207Q)) (CHARTABLE 107Q (BITS . 7)) (CHARTABLE 107Q (BITS . 207Q)) (CHARTABLE 110Q (BITS . 7)) (CHARTABLE 110Q (BITS . 207Q)) (CHARTABLE 111Q (BITS . 7)) (CHARTABLE 111Q (BITS . 207Q)) (CHARTABLE 112Q (BITS . 7)) (CHARTABLE 112Q (BITS . 207Q)) (CHARTABLE 113Q (BITS . 7)) (CHARTABLE 113Q (BITS . 207Q)) (CHARTABLE 114Q (BITS . 7)) (CHARTABLE 114Q (BITS . 207Q)) (CHARTABLE 115Q (BITS . 7)) (CHARTABLE 115Q (BITS . 207Q)) (CHARTABLE 116Q (BITS . 7)) (CHARTABLE 116Q (BITS . 207Q)) (CHARTABLE 117Q (BITS . 7)) (CHARTABLE 117Q (BITS . 207Q)) (CHARTABLE 120Q (BITS . 7)) (CHARTABLE 120Q (BITS . 207Q)) (CHARTABLE 121Q (BITS . 7)) (CHARTABLE 121Q (BITS . 207Q)) (CHARTABLE 122Q (BITS . 7)) (CHARTABLE 122Q (BITS . 207Q)) (CHARTABLE 123Q (BITS . 7)) (CHARTABLE 123Q (BITS . 207Q)) (CHARTABLE 124Q (BITS . 7)) (CHARTABLE 124Q (BITS . 207Q)) (CHARTABLE 125Q (BITS . 7)) (CHARTABLE 125Q (BITS . 207Q)) (CHARTABLE 126Q (BITS . 7)) (CHARTABLE 126Q (BITS . 207Q)) (CHARTABLE 127Q (BITS . 7)) (CHARTABLE 127Q (BITS . 207Q)) (CHARTABLE 130Q (BITS . 7)) (CHARTABLE 130Q (BITS . 207Q)) (CHARTABLE 131Q (BITS . 7)) (CHARTABLE 131Q (BITS . 207Q)) (CHARTABLE 132Q (BITS . 7)) (CHARTABLE 132Q (BITS . 207Q)) (CHARTABLE 133Q (BITS . 7)) (CHARTABLE 133Q (BITS . 207Q)) (CHARTABLE 134Q (BITS . 7)) (CHARTABLE 134Q (BITS . 207Q)) (CHARTABLE 135Q (BITS . 7)) (CHARTABLE 135Q (BITS . 207Q)) (CHARTABLE 136Q (BITS . 7)) (CHARTABLE 136Q (BITS . 207Q)) (CHARTABLE 137Q (BITS . 7)) (CHARTABLE 137Q (BITS . 207Q)) (CHARTABLE 140Q (BITS . 7)) (CHARTABLE 140Q (BITS . 207Q)) (CHARTABLE 141Q (BITS . 7)) (CHARTABLE 141Q (BITS . 207Q)) (CHARTABLE 142Q (BITS . 7)) (CHARTABLE 142Q (BITS . 207Q)) (CHARTABLE 143Q (BITS . 7)) (CHARTABLE 143Q (BITS . 207Q)) (CHARTABLE 144Q (BITS . 7)) (CHARTABLE 144Q (BITS . 207Q)) (CHARTABLE 145Q (BITS . 7)) (CHARTABLE 145Q (BITS . 207Q)) (CHARTABLE 146Q (BITS . 7)) (CHARTABLE 146Q (BITS . 207Q)) (CHARTABLE 147Q (BITS . 7)) (CHARTABLE 147Q (BITS . 207Q)) (CHARTABLE 150Q (BITS . 7)) (CHARTABLE 150Q (BITS . 207Q)) (CHARTABLE 151Q (BITS . 7)) (CHARTABLE 151Q (BITS . 207Q)) (CHARTABLE 152Q (BITS . 7)) (CHARTABLE 152Q (BITS . 207Q)) (CHARTABLE 153Q (BITS . 7)) (CHARTABLE 153Q (BITS . 207Q)) (CHARTABLE 154Q (BITS . 7)) (CHARTABLE 154Q (BITS . 207Q)) (CHARTABLE 155Q (BITS . 7)) (CHARTABLE 155Q (BITS . 207Q)) (CHARTABLE 156Q (BITS . 7)) (CHARTABLE 156Q (BITS . 207Q)) (CHARTABLE 157Q (BITS . 7)) (CHARTABLE 157Q (BITS . 207Q)) (CHARTABLE 160Q (BITS . 7)) (CHARTABLE 160Q (BITS . 207Q)) (CHARTABLE 161Q (BITS . 7)) (CHARTABLE 161Q (BITS . 207Q)) (CHARTABLE 162Q (BITS . 7)) (CHARTABLE 162Q (BITS . 207Q)) (CHARTABLE 163Q (BITS . 7)) (CHARTABLE 163Q (BITS . 207Q)) (CHARTABLE 164Q (BITS . 7)) (CHARTABLE 164Q (BITS . 207Q)) (CHARTABLE 165Q (BITS . 7)) (CHARTABLE 165Q (BITS . 207Q)) (CHARTABLE 166Q (BITS . 7)) (CHARTABLE 166Q (BITS . 207Q)) (CHARTABLE 167Q (BITS . 7)) (CHARTABLE 167Q (BITS . 207Q)) (CHARTABLE 170Q (BITS . 7)) (CHARTABLE 170Q (BITS . 207Q)) (CHARTABLE 171Q (BITS . 7)) (CHARTABLE 171Q (BITS . 207Q)) (CHARTABLE 172Q (BITS . 7)) (CHARTABLE 172Q (BITS . 207Q)) (CHARTABLE 173Q (BITS . 7)) (CHARTABLE 173Q (BITS . 207Q)) (CHARTABLE 174Q (BITS . 7)) (CHARTABLE 174Q (BITS . 207Q)) (CHARTABLE 175Q (BITS . 7)) (CHARTABLE 175Q (BITS . 207Q)) (CHARTABLE 176Q (BITS . 7)) (CHARTABLE 176Q (BITS . 207Q)) (CHARTABLE 177Q (BITS . 7)) (CHARTABLE 177Q (BITS . 207Q)) (CHARTABLE 200Q FULLPOINTER)) '202Q) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (RPAQQ \NSCHARHASHKEYS 12Q) (RPAQQ \NSCHARHASHOVERFLOW 1.3) (CONSTANTS \NSCHARHASHKEYS \NSCHARHASHOVERFLOW) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \CREATENSCHARHASH MACRO (ARGS (* ;  "added size argument for creation of \ORIGTERMTABLE during initialization.") (LIST 'HASHARRAY (OR (CAR ARGS) '\NSCHARHASHKEYS) '\NSCHARHASHOVERFLOW))) ) ) (DEFINEQ (GETSYNTAX [LAMBDA (CH TABLE) (* bvm%: " 8-Mar-86 17:22") (COND [(FIXP (SETQ CH (\GETCHARCODE CH))) (COND ((type? TERMTABLEP TABLE) (\GETTERMSYNTAX CH TABLE)) (T (\GETREADSYNTAX CH (\GTREADTABLE TABLE T] (T (PROG (TEM CHARTBL RESULT) (COND ((SETQ TEM (\READCLASSTOCODE CH)) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM VAL) (push RESULT KEY] CHARTBL)) ((EQ CH 'BREAK) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((fetch BREAK of VAL) (push RESULT KEY] CHARTBL)) ((SETQ TEM (\TERMCLASSTOCODE CH)) (SETQ CHARTBL (fetch TERMSA of (\GTTERMTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM (fetch TERMCLASS of VAL)) (push RESULT (PROG1 KEY (* SELECTC TEM ((LIST NONE.TC  WORDSEPR.TC) (* ;  "Only these classes have multiple members")  KEY) (RETURN (CONS KEY)))] CHARTBL)) [(FMEMB CH '(MACRO SPLICE INFIX)) (PROG [LST (A (fetch READMACRODEFS of (\GTREADTABLE TABLE T] (COND (A [MAPHASH A (FUNCTION (LAMBDA (DEF C) (AND (EQ CH (fetch MACROTYPE of DEF)) (push LST C] (RETURN LST] ((SETQ TEM (fetch (CONTEXTS VAL) of CH)) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM (fetch MACROCONTEXT of VAL)) (push RESULT KEY] CHARTBL)) ((SETQ TEM (fetch (WAKEUPS VAL) of CH)) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM (fetch WAKEUP of VAL)) (push RESULT KEY] CHARTBL)) ((SETQ TEM (fetch (ESCAPES VAL) of CH)) (SETQ CHARTBL (fetch READSA of (\GTREADTABLE TABLE T))) (\MAPCHARTABLE [FUNCTION (LAMBDA (VAL KEY) (DECLARE (USEDFREE TEM RESULT)) (COND ((EQ TEM (fetch ESCAPE of VAL)) (push RESULT KEY] CHARTBL)) (T (\ILLEGAL.ARG CH))) (RETURN RESULT]) (SETSYNTAX [LAMBDA (CHAR CLASS TBL) (* rmk%: "20-Nov-84 15:47") (OR (FIXP (SETQ CHAR (\GETCHARCODE CHAR))) (\ILLEGAL.ARG CHAR)) [OR (type? READTABLEP TBL) (type? TERMTABLEP TBL) (SETQ TBL (COND ((OR (type? TERMTABLEP CLASS) (\TERMCLASSTOCODE CLASS)) (\GTTERMTABLE TBL)) (T (\GTREADTABLE TBL] [COND ((OR (type? READTABLEP CLASS) (type? TERMTABLEP CLASS) (SELECTQ CLASS ((NIL T ORIG) T) NIL)) (SETQ CLASS (GETSYNTAX CHAR CLASS))) ((FIXP (SETQ CLASS (\GETCHARCODE CLASS))) (SETQ CLASS (GETSYNTAX CLASS TBL] (COND ((type? READTABLEP TBL) (PROG1 (\GETREADSYNTAX CHAR TBL) (\SETREADSYNTAX CHAR CLASS TBL))) (T (PROG1 (\GETTERMSYNTAX CHAR TBL) (\SETTERMSYNTAX CHAR CLASS TBL]) (SYNTAXP [LAMBDA (CODE CLASS TABLE) (* rmk%: " 5-JUN-80 22:40") (PROG (D) (RETURN (COND ((EQ CLASS 'BREAK) (fetch BREAK of (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE))) ((SETQ D (\READCLASSTOCODE CLASS)) (EQ D (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE))) [(SETQ D (\TERMCLASSTOCODE CLASS)) (EQ D (fetch TERMCLASS of (\SYNCODE (fetch TERMSA of (\GTTERMTABLE TABLE)) CODE] [(FMEMB CLASS '(MACRO SPLICE INFIX)) (AND (SETQ D (fetch READMACRODEFS of (\GTREADTABLE TABLE))) (EQ CLASS (fetch MACROTYPE of (GETHASH CODE D] [(SETQ D (fetch (CONTEXTS VAL) of CLASS)) (EQ D (fetch MACROCONTEXT of (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE] [(SETQ D (fetch (WAKEUPS VAL) of CLASS)) (EQ D (fetch WAKEUP of (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE] [(SETQ D (fetch (ESCAPES VAL) of CLASS)) (EQ D (fetch ESCAPE of (\SYNCODE (fetch READSA of (\GTREADTABLE TABLE)) CODE] (T (\ILLEGAL.ARG CLASS]) (\COPYSYNTAX [LAMBDA (A B) (* gbn "15-Sep-85 22:36") (* ;; "Copies chartable A into chartable B") (CHECK (AND (type? CHARTABLE A) (type? CHARTABLE B))) (\MOVEBYTES A 0 B 0 (ADD1 \MAXTHINCHAR)) (COND ((fetch (CHARTABLE NSCHARHASH) of A) (replace (CHARTABLE NSCHARHASH) of B with (REHASH (fetch (CHARTABLE NSCHARHASH) of A) (\CREATENSCHARHASH]) (\GETCHARCODE [LAMBDA (C) (* rmk%: "20-Nov-84 15:46") (COND ((AND (NUMBERP C) (\CHARCODEP (FIX C))) (FIX C)) ((AND (LITATOM C) (EQ 1 (NCHARS C))) (CHCON1 C)) (T C]) (\SETFATSYNCODE [LAMBDA (TABLE CHAR CODE) (* bvm%: " 8-Mar-86 17:03") (* ;;; "Called by \SETSYNCODE macro for fat characters") (SETQ TABLE (\DTEST TABLE 'CHARTABLE)) (* ;  "CODE = 0 is REAL.CCE, NONE.TC, OTHER.RC") (COND ((ILEQ CHAR \MAXTHINCHAR) (\PUTBASEBYTE TABLE CHAR CODE)) ((EQ 0 CODE) (COND ((fetch (CHARTABLE NSCHARHASH) of TABLE) (* ;  "there was already a table here so record the change") (PUTHASH CHAR CODE (fetch (CHARTABLE NSCHARHASH) of TABLE))) (T (* ;  "No hashtable yet, and only the default is being stored, so don't build the hashtable") 0))) (T (PUTHASH CHAR CODE (OR (fetch (CHARTABLE NSCHARHASH) of TABLE) (replace (CHARTABLE NSCHARHASH) of TABLE with (\CREATENSCHARHASH]) (\MAPCHARTABLE [LAMBDA (FN CHARTBL) (* ; "Edited 20-Apr-2018 16:53 by rmk:") (for I from 0 to \MAXTHINCHAR do (APPLY* FN (\GETBASEBYTE CHARTBL I) I)) (COND ((fetch (CHARTABLE NSCHARHASH) of CHARTBL) (MAPHASH (fetch (CHARTABLE NSCHARHASH) of CHARTBL) FN]) ) (* ; "terminal tables") (DEFINEQ (CONTROL [LAMBDA (MODE TTBL) (* rmk%: " 8-FEB-80 11:59") (PROG1 (fetch CONTROLFLG of (SETQ TTBL (\GTTERMTABLE TTBL))) (replace CONTROLFLG of TTBL with (AND MODE T]) (COPYTERMTABLE [LAMBDA (TTBL) (* lmm "14-APR-81 14:27") (create TERMTABLEP using (SETQ TTBL (\GTTERMTABLE TTBL T)) TERMSA _ (create CHARTABLE using (fetch TERMSA of TTBL]) (DELETECONTROL [LAMBDA (TYPE MESSAGE TTBL) (* lmm " 1-Jan-85 21:34") (PROG [VAL (TBL (\GTTERMTABLE TTBL (NULL MESSAGE] (SETQ VAL (SELECTQ TYPE ((ECHO NOECHO) (PROG1 (fetch DELCHARECHO of TBL) (replace DELCHARECHO of TBL with TYPE))) (DELCHARECHO (PROG1 (fetch DELCHARECHO of TBL) (SELECTQ MESSAGE (NIL (* ; "Called only to get current value")) ((ECHO NOECHO) (replace DELCHARECHO of TBL with MESSAGE)) (LISPERROR "ILLEGAL ARG" MESSAGE)))) ((LINEDELETE DELETELINE) [PROG1 (fetch LINEDELETE of TBL) (AND MESSAGE (replace LINEDELETE of TBL with (\LITCHECK MESSAGE]) (1STCHDEL [PROG1 (fetch 1STCHDEL of TBL) (AND MESSAGE (replace 1STCHDEL of TBL with (\LITCHECK MESSAGE]) (NTHCHDEL [PROG1 (fetch NTHCHDEL of TBL) (AND MESSAGE (replace NTHCHDEL of TBL with (\LITCHECK MESSAGE]) (POSTCHDEL [PROG1 (fetch POSTCHDEL of TBL) (AND MESSAGE (replace POSTCHDEL of TBL with (\LITCHECK MESSAGE]) (EMPTYCHDEL [PROG1 (fetch EMPTYCHDEL of TBL) (AND MESSAGE (replace EMPTYCHDEL of TBL with (\LITCHECK MESSAGE]) (LISPERROR "ILLEGAL ARG" TYPE))) (RETURN (COND ((STRINGP VAL) (CONCAT VAL)) (T VAL]) (GETDELETECONTROL [LAMBDA (TYPE TTBL) (* lmm " 1-Jan-85 21:20") (PROG (TBL VAL) (SETQ TBL (\GTTERMTABLE TTBL T)) (SETQ VAL (SELECTQ TYPE ((ECHO NOECHO) (fetch DELCHARECHO of TBL)) (DELCHARECHO (fetch DELCHARECHO of TBL)) ((LINEDELETE DELETELINE) (fetch LINEDELETE of TBL)) (1STCHDEL (fetch 1STCHDEL of TBL)) (NTHCHDEL (fetch NTHCHDEL of TBL)) (POSTCHDEL (fetch POSTCHDEL of TBL)) (EMPTYCHDEL (fetch EMPTYCHDEL of TBL)) (LISPERROR "ILLEGAL ARG" TYPE))) (RETURN (COND ((STRINGP VAL) (CONCAT VAL)) (T VAL]) (ECHOCHAR [LAMBDA (CHARCODE MODE TTBL) (* lmm " 1-Jan-85 21:29") (COND ((LISTP CHARCODE) (for X in CHARCODE do (ECHOCHAR X MODE TTBL))) (T (PROG [B (SA (fetch TERMSA of (\GTTERMTABLE TTBL (NULL MODE] (RETURN (PROG1 (SELECTC (fetch CCECHO of (SETQ B (\SYNCODE SA CHARCODE))) (REAL.CCE 'REAL) (IGNORE.CCE 'IGNORE) (SIMULATE.CCE 'SIMULATE) 'INDICATE) (AND MODE (\SETSYNCODE SA CHARCODE (create TERMCODE using B CCECHO _ (SELECTQ MODE (REAL REAL.CCE) (IGNORE IGNORE.CCE) (SIMULATE SIMULATE.CCE) ((INDICATE UPARROW) INDICATE.CCE) (\ILLEGAL.ARG MODE]) (ECHOCONTROL [LAMBDA (CHAR MODE TTBL) (* rmk%: "20-Nov-84 15:14") (PROG ((C (\GETCHARCODE CHAR))) (OR [AND (\THINCHARCODEP C) (OR (ILESSP C 40Q) (AND (IGEQ C (CHARCODE A)) (ILEQ C (CHARCODE Z)) (SETQ C (IDIFFERENCE C 100Q] (\ILLEGAL.ARG C)) (RETURN (ECHOCHAR C MODE TTBL]) (ECHOMODE [LAMBDA (FLG TTBL) (* rmk%: " 8-FEB-80 11:57") (PROG1 (fetch ECHOFLG of (SETQ TTBL (\GTTERMTABLE TTBL))) (replace ECHOFLG of TTBL with (AND FLG T]) (GETECHOMODE [LAMBDA (TTBL) (* lmm " 1-Jan-85 21:21") (fetch ECHOFLG of (\GTTERMTABLE TTBL T]) (GETCONTROL [LAMBDA (TTBL) (* lmm " 1-Jan-85 21:21") (fetch CONTROLFLG of (\GTTERMTABLE TTBL T]) (GETTERMTABLE [LAMBDA (TTBL) (\GTTERMTABLE TTBL NIL]) (RAISE [LAMBDA (FLG TTBL) (* bvm%: "14-Feb-85 00:17") (PROG1 (fetch RAISEFLG of (SETQ TTBL (\GTTERMTABLE TTBL))) (replace RAISEFLG of TTBL with (COND ((EQ FLG 0) 0) (FLG T]) (GETRAISE [LAMBDA (TTBL) (* lmm " 1-Jan-85 21:21") (fetch RAISEFLG of (\GTTERMTABLE TTBL T]) (RESETTERMTABLE [LAMBDA (TTBL FROM) (* lmm "14-APR-81 14:34") (PROG ((FR (\GTTERMTABLE FROM T)) (TT (\GTTERMTABLE TTBL))) (\COPYSYNTAX (fetch TERMSA of FR) (fetch TERMSA of TT)) (replace RAISEFLG of TT with (fetch RAISEFLG of FR)) (replace DELCHARECHO of TT with (fetch DELCHARECHO of FR)) (replace LINEDELETE of TT with (fetch LINEDELETE of FR)) (replace 1STCHDEL of TT with (fetch 1STCHDEL of FR)) (replace NTHCHDEL of TT with (fetch NTHCHDEL of FR)) (replace POSTCHDEL of TT with (fetch POSTCHDEL of FR)) (replace EMPTYCHDEL of TT with (fetch EMPTYCHDEL of FR)) (replace CONTROLFLG of TT with (fetch CONTROLFLG of FR)) (replace ECHOFLG of TT with (fetch ECHOFLG of FR)) (RETURN TT]) (SETTERMTABLE [LAMBDA (TBL) (* rmk%: " 8-FEB-80 12:16") (PROG1 \PRIMTERMTABLE (SETQ \PRIMTERMSA (fetch TERMSA of (SETQ \PRIMTERMTABLE (\GTTERMTABLE TBL]) (TERMTABLEP [LAMBDA (TTBL) (* rmk%: "20-FEB-80 12:29") (AND (type? TERMTABLEP TTBL) TTBL]) (\GETTERMSYNTAX [LAMBDA (C TBL) (* rmk%: "24-APR-80 09:44") (\TERMCODETOCLASS (fetch TERMCLASS of (\SYNCODE (fetch TERMSA of TBL) C]) (\GTTERMTABLE [LAMBDA (TTBL FLG) (* lmm " 6-MAY-80 20:35") (COND ((type? TERMTABLEP TTBL) TTBL) ((NULL TTBL) \PRIMTERMTABLE) ((AND (EQ TTBL 'ORIG) FLG) \ORIGTERMTABLE) (T (LISPERROR "ILLEGAL TERMINAL TABLE" TTBL]) (\ORIGTERMTABLE [LAMBDA NIL (* rrb " 5-Oct-85 10:33") (* ;; "Creates the original terminal table") (* ;; "must be created with a hash table big enough to hold all of the indicates in character set 1 because this gets evaluated in the loadup before HASHOVERFLOW is defined. rrb 5-oct-85") (PROG ((TBL (create TERMTABLEP TERMSA _ (create CHARTABLE NSCHARHASH _ (\CREATENSCHARHASH 454Q)) DELCHARECHO _ 'ECHO ECHOFLG _ T LINEDELETE _ "## " 1STCHDEL _ "\" NTHCHDEL _ "" POSTCHDEL _ "\" EMPTYCHDEL _ "## "))) (PROGN (\SETTERMSYNTAX (SELECTQ (SYSTEMTYPE) ((TENEX D) (CHARCODE ^A)) ((JERICHO VAX TOPS-20) (CHARCODE DEL)) (SHOULDNT)) 'CHARDELETE TBL) (\SETTERMSYNTAX (CHARCODE ^H) 'CHARDELETE TBL) (* ;  "Added ^H as a CHARDELETE character 9/30/85") (\SETTERMSYNTAX (CHARCODE ^W) 'WORDDELETE TBL) (\SETTERMSYNTAX (SELECTQ (SYSTEMTYPE) ((TENEX D) (CHARCODE ^Q)) ((JERICHO VAX) (CHARCODE ^U)) (SHOULDNT)) 'LINEDELETE TBL) (\SETTERMSYNTAX (CHARCODE ^R) 'RETYPE TBL) (\SETTERMSYNTAX (CHARCODE ^V) 'CTRLV TBL) (\SETTERMSYNTAX (CHARCODE EOL) 'WAKEUPCHAR TBL) (for C in (CHARCODE (SPACE TAB ! @ %# $ ~ & * - = + %| { } ^ _ %: ; < > %, %. ? /)) do (\SETTERMSYNTAX C 'WORDSEPR TBL))) (PROGN (ECHOCHAR (CHARCODE (NULL ^A ^B ^C ^D ^E ^F ^H ^K ^L ^N ^O ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^\ ^%] ^^)) 'INDICATE TBL) (ECHOCHAR (CHARCODE (BELL TAB LF CR)) 'REAL TBL) (SELECTQ (SYSTEMTYPE) (D (ECHOCHAR (CHARCODE (NULL ^A ^W ^Q ^R)) 'IGNORE TBL) (ECHOCHAR (CHARCODE (BELL TAB ESCAPE LF TENEXEOL)) 'SIMULATE TBL)) (JERICHO (ECHOCHAR [CONSTANT (CONS ERASECHARCODE (CHARCODE (BELL TAB ESCAPE EOL] 'SIMULATE TBL)) (VAX (ECHOCHAR (CHARCODE (TAB ESCAPE EOL DEL)) 'SIMULATE TBL)) NIL)) (for C from 200Q to \MAXTHINCHAR do (ECHOCHAR C 'REAL TBL)) (for C from (CHARCODE 1,0) to (CHARCODE 1,377) do (ECHOCHAR C 'INDICATE TBL)) (RETURN TBL]) (\SETTERMSYNTAX [LAMBDA (C CLASS TBL) (* rmk%: "26-Mar-85 23:45") (* ;; "Changes the terminal syntax class for charcode C. Unlike Interlisp-10, does not turn off previous characters for CHARDELETE, etc. classes") (\SETSYNCODE (fetch TERMSA of TBL) C (create TERMCODE using (\SYNCODE (fetch TERMSA of TBL) C) TERMCLASS _ (OR (\TERMCLASSTOCODE CLASS) (LISPERROR "ILLEGAL ARG" CLASS]) (\TERMCLASSTOCODE [LAMBDA (CLASS) (* rmk%: "11-FEB-82 21:24") (SELECTQ CLASS ((EOL WAKEUPCHAR) EOL.TC) (NONE NONE.TC) (CHARDELETE CHARDELETE.TC) (WORDDELETE WORDDELETE.TC) (WORDSEPR WORDSEPR.TC) (LINEDELETE LINEDELETE.TC) (RETYPE RETYPE.TC) ((CTRLV CNTRLV) CTRLV.TC) NIL]) (\TERMCODETOCLASS [LAMBDA (CODE) (* rmk%: "11-FEB-82 21:24") (SELECTC CODE (EOL.TC 'EOL) (NONE.TC 'NONE) (CHARDELETE.TC 'CHARDELETE) (WORDDELETE.TC 'WORDDELETE) (WORDSEPR.TC 'WORDSEPR) (LINEDELETE.TC 'LINEDELETE) (RETYPE.TC 'RETYPE) (CTRLV.TC 'CNTRLV) NIL]) (\LITCHECK [LAMBDA (X) (* rmk%: "11-FEB-82 21:26") (COND ((EQ X 'BACKUP) (* ;  "Means take terminal/implementation dependent backup action") X) ((LITATOM X) (MKSTRING X)) ((STRINGP X) (CONCAT X)) (T (\ILLEGAL.ARG X]) ) (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED") (RPAQQ CCECHOMODES (REAL.CCE IGNORE.CCE SIMULATE.CCE INDICATE.CCE)) (DECLARE%: EVAL@COMPILE (RPAQQ REAL.CCE 0) (RPAQQ IGNORE.CCE 10Q) (RPAQQ SIMULATE.CCE 20Q) (RPAQQ INDICATE.CCE 30Q) (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)) (DECLARE%: EVAL@COMPILE (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) ) (DECLARE%: EVAL@COMPILE (ACCESSFNS TERMCODE ((CCECHO (LOGAND DATUM 30Q)) (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)) ) (/DECLAREDATATYPE 'TERMTABLEP '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG) '((TERMTABLEP 0 POINTER) (TERMTABLEP 2 POINTER) (TERMTABLEP 4 POINTER) (TERMTABLEP 6 POINTER) (TERMTABLEP 10Q POINTER) (TERMTABLEP 12Q POINTER) (TERMTABLEP 14Q POINTER) (TERMTABLEP 16Q POINTER) (TERMTABLEP 16Q (FLAGBITS . 0)) (TERMTABLEP 16Q (FLAGBITS . 20Q))) '20Q) (* "END EXPORTED DEFINITIONS") ) (/DECLAREDATATYPE 'TERMTABLEP '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG FLAG) '((TERMTABLEP 0 POINTER) (TERMTABLEP 2 POINTER) (TERMTABLEP 4 POINTER) (TERMTABLEP 6 POINTER) (TERMTABLEP 10Q POINTER) (TERMTABLEP 12Q POINTER) (TERMTABLEP 14Q POINTER) (TERMTABLEP 16Q POINTER) (TERMTABLEP 16Q (FLAGBITS . 0)) (TERMTABLEP 16Q (FLAGBITS . 20Q))) '20Q) (* ; "read tables") (DEFINEQ (COPYREADTABLE [LAMBDA (RDTBL) (* rmk%: " 2-FEB-80 12:26") (RESETREADTABLE (create READTABLEP) (\GTREADTABLE RDTBL T]) (FIND-READTABLE [LAMBDA (NAME) (* bvm%: "27-Jul-86 15:53") (GETHASH NAME \READTABLEHASH]) (IN-READTABLE [LAMBDA (RDTBL) (* bvm%: "27-Jul-86 15:55") (SETQ *READTABLE* (\GTREADTABLE RDTBL T]) (ESCAPE [LAMBDA (FLG RDTBL) (* rmk%: " 1-FEB-80 13:12") (PROG1 (fetch ESCAPEFLG of (SETQ RDTBL (\GTREADTABLE RDTBL))) (replace ESCAPEFLG of RDTBL with (NEQ FLG NIL]) (GETBRK [LAMBDA (RDTBL) (* rmk%: " 2-MAY-80 17:04") (GETSYNTAX 'BREAK RDTBL]) (GETREADTABLE [LAMBDA (RDTBL) (* lmm%: 4-FEB-76 3 62Q) (\GTREADTABLE RDTBL]) (GETSEPR [LAMBDA (RDTBL) (* rmk%: " 2-MAY-80 17:05") (GETSYNTAX 'SEPR RDTBL]) (READMACROS [LAMBDA (FLG RDTBL) (* rmk%: " 1-FEB-80 13:11") (PROG1 (fetch READMACROFLG of (SETQ RDTBL (\GTREADTABLE RDTBL))) (replace READMACROFLG of RDTBL with (NEQ FLG NIL]) (READTABLEP [LAMBDA (RDTBL) (* rmk%: "20-FEB-80 12:32") (AND (type? READTABLEP RDTBL) RDTBL]) (READTABLEPROP [LAMBDA ARGS (* bvm%: "28-Aug-86 15:28") (COND ((LESSP ARGS 2) (\ILLEGAL.ARG NIL)) ((GREATERP ARGS 3) (\ILLEGAL.ARG (ARG ARGS 4))) (T (LET [(RDTBL (\GTREADTABLE (ARG ARGS 1))) (NEWVALUEP (EQ ARGS 3)) (NEWVALUE (AND (EQ ARGS 3) (ARG ARGS 3] (SELECTQ (ARG ARGS 2) (NUMBERBASE [PROG1 (fetch (READTABLEP NUMBERBASE) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP NUMBERBASE) of RDTBL with NEWVALUE]) (NAME [LET ((OLDNAME (fetch (READTABLEP READTBLNAME) of RDTBL))) (PROG1 OLDNAME (COND (NEWVALUEP (COND (OLDNAME (REMHASH OLDNAME \READTABLEHASH))) (replace (READTABLEP READTBLNAME) of RDTBL with NEWVALUE) (PUTHASH NEWVALUE RDTBL \READTABLEHASH]) (COMMONLISP [PROG1 (fetch (READTABLEP COMMONLISP) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP COMMONLISP) of RDTBL with NEWVALUE) (if NEWVALUE then (* ;  "COMMONLISP implies COMMONNUMSYNTAX and not USESILPACKAGE") (replace (READTABLEP COMMONNUMSYNTAX) of RDTBL with T) (replace (READTABLEP USESILPACKAGE) of RDTBL with NIL]) (COMMONNUMSYNTAX [PROG1 (fetch (READTABLEP COMMONNUMSYNTAX) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP COMMONNUMSYNTAX) of RDTBL with NEWVALUE]) (USESILPACKAGE [PROG1 (fetch (READTABLEP USESILPACKAGE) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP USESILPACKAGE) of RDTBL with NEWVALUE]) (CASEINSENSITIVE [PROG1 (fetch (READTABLEP CASEINSENSITIVE) of RDTBL) (COND (NEWVALUEP (replace (READTABLEP CASEINSENSITIVE) of RDTBL with NEWVALUE]) (ESCAPECHAR [PROG1 (fetch (READTABLEP ESCAPECHAR) of RDTBL) (COND (NEWVALUEP (\SETREADSYNTAX NEWVALUE 'ESCAPE RDTBL) (replace (READTABLEP ESCAPECHAR) of RDTBL with NEWVALUE]) (MULTIPLE-ESCAPECHAR [PROG1 (fetch (READTABLEP MULTESCAPECHAR) of RDTBL) (COND (NEWVALUEP (\SETREADSYNTAX NEWVALUE 'MULTIPLE-ESCAPE RDTBL) (replace (READTABLEP MULTESCAPECHAR) of RDTBL with NEWVALUE]) (PACKAGECHAR [PROG1 (fetch (READTABLEP PACKAGECHAR) of RDTBL) (COND (NEWVALUEP (\SETREADSYNTAX NEWVALUE 'PACKAGEDELIM RDTBL) (replace (READTABLEP PACKAGECHAR) of RDTBL with NEWVALUE]) (HASHMACROCHAR [PROG1 (fetch (READTABLEP HASHMACROCHAR) of RDTBL) (COND (NEWVALUEP (\SETREADSYNTAX NEWVALUE '(INFIX ALWAYS NONIMMEDIATE ESCQUOTE READVBAR) RDTBL) (replace (READTABLEP HASHMACROCHAR) of RDTBL with NEWVALUE]) (\ILLEGAL.ARG (ARG ARGS 2]) (RESETREADTABLE [LAMBDA (RDTBL FROM) (* ; "Edited 12-Feb-2021 22:54 by larry") (* ;  "Edited 20-Apr-2018 16:22 by rmk:") (* bvm%: "27-Aug-86 22:28") (* ;; "RMK: Copy the macrodefs") [replace READMACROFLG of (SETQ RDTBL (\GTREADTABLE RDTBL)) with (fetch READMACROFLG of (SETQ FROM (\GTREADTABLE FROM T] (replace ESCAPEFLG of RDTBL with (fetch ESCAPEFLG of FROM)) (replace (READTABLEP COMMONLISP) of RDTBL with (fetch (READTABLEP COMMONLISP) of FROM)) (replace (READTABLEP NUMBERBASE) of RDTBL with (fetch (READTABLEP NUMBERBASE) of FROM)) (replace (READTABLEP CASEINSENSITIVE) of RDTBL with (fetch (READTABLEP CASEINSENSITIVE) of FROM)) (replace (READTABLEP COMMONNUMSYNTAX) of RDTBL with (fetch (READTABLEP COMMONNUMSYNTAX) of FROM)) (replace (READTABLEP USESILPACKAGE) of RDTBL with (fetch (READTABLEP USESILPACKAGE) of FROM)) (replace (READTABLEP HASHMACROCHAR) of RDTBL with (fetch (READTABLEP HASHMACROCHAR) of FROM)) (replace (READTABLEP ESCAPECHAR) of RDTBL with (fetch (READTABLEP ESCAPECHAR) of FROM)) (replace (READTABLEP MULTESCAPECHAR) of RDTBL with (fetch (READTABLEP MULTESCAPECHAR) of FROM)) (replace (READTABLEP PACKAGECHAR) of RDTBL with (fetch (READTABLEP PACKAGECHAR) of FROM)) (replace (READTABLEP DISPATCHMACRODEFS) of RDTBL with (COPY (fetch (READTABLEP DISPATCHMACRODEFS) of FROM))) (* ;; "Placeholder. If DISPATCHMACRODEFS ends up containing a CHARTABLE or a hash table, will have to do a REHASH or \COPYSYNTAX as well") [LET ((RDEFS (fetch (READTABLEP READMACRODEFS) of RDTBL)) (FDEFS (fetch (READTABLEP READMACRODEFS) of FROM))) (COND (RDEFS (CLRHASH RDEFS))) (AND FDEFS (REHASH FDEFS (OR RDEFS (replace (READTABLEP READMACRODEFS) of RDTBL with (HASHARRAY (HARRAYSIZE FDEFS) 7] (\COPYSYNTAX (fetch READSA of FROM) (fetch READSA of RDTBL)) RDTBL]) (SETBRK [LAMBDA (LST FLG RDTBL) (* rmk%: "13-AUG-81 00:01") (* ;  "This is a very ugly def which needs to be cleaned up cause a lot of people call SETBRK") (COND [(EQ LST T) [MAPC (GETSYNTAX 'BREAK RDTBL) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL] (MAPC (GETSYNTAX 'BREAK (COND ((EQ RDTBL T) 'ORIG) (T T))) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'BREAK RDTBL] (T (SELECTQ FLG (NIL (* ; "reset") [MAPC (GETSYNTAX 'BREAK RDTBL) (FUNCTION (LAMBDA (X) (OR (MEMB X LST) (SETSYNTAX X 'OTHER RDTBL] [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'BREAK RDTBL]) (0 (* ; "clear out lst") [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL]) (1 (* ; "add chars") [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'BREAK RDTBL]) NIL]) (SETREADTABLE [LAMBDA (RDTBL FLG) (* bvm%: " 4-May-86 16:32") (PROG1 *READTABLE* (SETQ *READTABLE* (\GTREADTABLE RDTBL]) (SETSEPR [LAMBDA (LST FLG RDTBL) (* rmk%: " 8-JUN-80 07:16") (* ;  "This one also needs to be cleaned up") (COND [(EQ LST T) [MAPC (GETSYNTAX 'SEPR RDTBL) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL] (MAPC (GETSYNTAX 'SEPR (COND ((EQ RDTBL T) 'ORIG) (T T))) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'SEPR RDTBL] (T (SELECTQ FLG (NIL (* ; "reset") [MAPC (GETSYNTAX 'SEPR RDTBL) (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL] [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'SEPR RDTBL]) (0 (* ; "clear out lst") [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'OTHER RDTBL]) (1 (* ; "add chars") [MAPC LST (FUNCTION (LAMBDA (X) (SETSYNTAX X 'SEPR RDTBL]) NIL]) (\GETREADSYNTAX [LAMBDA (C TBL) (* bvm%: "30-Jun-86 17:49") (LET ((B (\SYNCODE (fetch READSA of TBL) C))) (* ;; "This will turn into a SELECTQ that keys off syntax code numbers and produces class tokens. The default clause at the end: if it's not a built-in class, must be a macro") (* ;; "Sample code:") (* (SELECTQ B (0 (QUOTE OTHER))  (140Q (QUOTE SEPRCHAR))  (160Q (QUOTE BREAKCHAR))  (161Q (QUOTE STRINGDELIM))  (162Q (QUOTE LEFTPAREN))  (163Q (QUOTE RIGHTPAREN))  (164Q (QUOTE LEFTBRACKET))  (165Q (QUOTE RIGHTBRACKET))  (106Q (QUOTE ESCAPE))  (107Q (QUOTE MULTIPLE-ESCAPE))  (105Q (QUOTE PACKAGEDELIM)) )) (\COMPUTED.FORM `(SELECTQ B (\,@ [for PAIR in READCLASSTOKENS collect (LIST (EVAL (CADR PAIR)) (KWOTE (CAR PAIR]) (LET ((E (\GETREADMACRODEF C TBL)) KEY) `(,(fetch MACROTYPE of E) ,(fetch (CONTEXTS KEY) of (fetch MACROCONTEXT of B)) ,@(AND (NEQ (SETQ KEY (fetch (WAKEUPS KEY) of (fetch WAKEUP of B))) 'NONIMMEDIATE) (LIST KEY)) ,@(AND (NEQ (SETQ KEY (fetch (ESCAPES KEY) of (fetch ESCAPE of B))) 'ESCQUOTE) (LIST KEY)) ,(fetch MACROFN of E]) (\GTREADTABLE [LAMBDA (X FLG) (* bvm%: " 5-May-86 11:05") (SELECTQ X ((NIL T) (\DTEST *READTABLE* 'READTABLEP)) (\GTREADTABLE1 X FLG]) (\GTREADTABLE1 [LAMBDA (X FLG) (* bvm%: "27-Jul-86 15:37") (COND ((type? READTABLEP X) X) ((AND FLG (GETHASH X \READTABLEHASH))) (T (LISPERROR "ILLEGAL READTABLE" X]) (\ORIGREADTABLE [LAMBDA NIL (* ; "Edited 16-Apr-87 17:45 by bvm:") (* ;; "Creates a copy of the 'original' read-table.") (PROG [(TBL (create READTABLEP READMACROFLG _ T ESCAPEFLG _ T NUMBERBASE _ 12Q USESILPACKAGE _ T ESCAPECHAR _ (CHARCODE %%) PACKAGECHAR _ (PROGN (* ;; "Need to have a character for package delimiter in all read tables, but for old read tables want one that is unlikely to have appeared in a symbol in an old source file. Also would like it to be a 7-bit char, so we don't needlessly force MAKEFILE to produce binary files.") (CHARCODE "^^")) HASHMACROCHAR _ (CHARCODE "|"] (* ;; "Actually, '|' is not defined in ORIG table, but rather later. But the radix printer and others want it, and this is better than nothing") (SETSEPR (CHARCODE (SPACE TENEXEOL CR ^L LF TAB)) 1 TBL) (\SETREADSYNTAX (CHARCODE %]) 'RIGHTBRACKET TBL) (\SETREADSYNTAX (CHARCODE %[) 'LEFTBRACKET TBL) (\SETREADSYNTAX (CHARCODE %)) 'RIGHTPAREN TBL) (\SETREADSYNTAX (CHARCODE %() 'LEFTPAREN TBL) (\SETREADSYNTAX (CHARCODE %%) 'ESCAPE TBL) (\SETREADSYNTAX (CHARCODE %") 'STRINGDELIM TBL) (\SETREADSYNTAX 247Q 'PACKAGEDELIM TBL) (* ; "Old choice for package delim char: the NS section symbol. Keep for compatibility with Lyric Beta files") (\SETREADSYNTAX (CHARCODE "^^") 'PACKAGEDELIM TBL) (RETURN TBL]) (\READCLASSTOCODE [LAMBDA (CLASS) (* bvm%: " 9-Jul-85 00:43") (* ;;; "This turns into a SELECTQ that goes from CLASS token to numeric code") (\COMPUTED.FORM `(SELECTQ CLASS (\,@ READCLASSTOKENS) (SEPR (* ; "Synonym for SEPRCHAR") SEPRCHAR.RC) NIL]) (\SETMACROSYNTAX [LAMBDA (C CLASS TBL) (* rmk%: " 3-Jan-84 13:20") (OR (AND (FMEMB (CAR CLASS) '(MACRO SPLICE INFIX)) (CDR CLASS)) (\ILLEGAL.ARG CLASS)) (PROG (CONTEXT WAKEUP ESCAPE (LST CLASS) (A (fetch READMACRODEFS of TBL))) LP (COND ([CDR (SETQ LST (LISTP (CDR LST] (OR [AND (NULL CONTEXT) (SETQ CONTEXT (fetch (CONTEXTS VAL) of (CAR LST] [AND (NULL WAKEUP) (SETQ WAKEUP (fetch (WAKEUPS VAL) of (CAR LST] [AND (NULL ESCAPE) (SETQ ESCAPE (fetch (ESCAPES VAL) of (CAR LST] (\ILLEGAL.ARG CLASS)) (GO LP))) (OR (LISTP LST) (\ILLEGAL.ARG CLASS)) [COND (A (* ;; "This hack guarantees that the hasharray will not overflow and cause an error in the uninterruptable PUTHASH below. If it didn't already have a value for C, then the macro bits are not set in C's syntax code, so the T value is harmless.") (OR (GETHASH C A) (PUTHASH C T A))) (T (replace READMACRODEFS of TBL with (SETQ A (HASHARRAY 7 7] (UNINTERRUPTABLY (PUTHASH C (create READMACRODEF MACROTYPE _ (CAR CLASS) MACROFN _ (CAR LST)) A) (\SETSYNCODE (fetch READSA of TBL) C (LOGOR (OR CONTEXT ALWAYS.RMC) (OR ESCAPE ESC.RME) (OR WAKEUP NONIMMEDIATE.RMW))))]) (\SETREADSYNTAX [LAMBDA (C CLASS TBL) (* bvm%: " 8-Mar-86 16:37") (PROG ((OLDSYNTAX (\SYNCODE (fetch (READTABLEP READSA) of TBL) C)) TEM) [COND ((EQ CLASS 'BREAK) (COND ((fetch BREAK of OLDSYNTAX) (RETURN)) (T (SETQ CLASS 'BREAKCHAR] (* ;  "If already a BREAK character but also something else, like LPAR, leave it alone") (COND ((LISTP CLASS) (\SETMACROSYNTAX C CLASS TBL)) ((SETQ TEM (\READCLASSTOCODE CLASS)) (UNINTERRUPTABLY [COND ((fetch MACROP of OLDSYNTAX) (* ; "No longer a macro") (REMHASH C (fetch READMACRODEFS of TBL] (\SETSYNCODE (fetch READSA of TBL) C TEM))) (T (\ILLEGAL.ARG CLASS]) (\READTABLEP.DEFPRINT [LAMBDA (RDTBL STREAM) (* bvm%: "13-Oct-86 17:32") (* ;; "Print read table as, for example, #") (LET ((NAME (fetch (READTABLEP READTBLNAME) of RDTBL))) [.SPACECHECK. STREAM (IPLUS (CONSTANT (NCHARS "")) (PROGN (* ; "Longest address is `177,177777'") 12Q) (COND (NAME (NCHARS NAME)) (T 0] (\OUTCHAR STREAM (fetch (READTABLEP HASHMACROCHAR) of *READTABLE*)) (\SOUT ")) T]) ) (PUTPROPS READTABLEPROP ARGNAMES (RDTBL PROP NEWVALUE)) (DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ READCLASSTOKENS ((OTHER 0) (SEPRCHAR (LOGOR ESCAPEBIT STOPATOMBIT 0)) (BREAKCHAR (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 0)) (STRINGDELIM (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 1)) (LEFTPAREN (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 2)) (RIGHTPAREN (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 3)) (LEFTBRACKET (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 4)) (RIGHTBRACKET (LOGOR ESCAPEBIT STOPATOMBIT BREAKBIT 5)) (ESCAPE (LOGOR ESCAPEBIT INNERESCAPEBIT 6)) (MULTIPLE-ESCAPE (LOGOR ESCAPEBIT INNERESCAPEBIT 7)) (PACKAGEDELIM (LOGOR ESCAPEBIT INNERESCAPEBIT 1)))) (RPAQ READCLASSES [MAPCAR READCLASSTOKENS (FUNCTION (LAMBDA (PAIR) (LIST (PACK* (CAR PAIR) ".RC") (CADR PAIR]) (DECLARE%: EVAL@COMPILE (PUTPROPS \COMPUTED.FORM MACRO [X (CONS 'PROGN (MAPCAR X (FUNCTION EVAL]) ) (DECLARE%: EVAL@COMPILE (ACCESSFNS CONTEXTS ((KEY (SELECTC DATUM (ALWAYS.RMC 'ALWAYS) (FIRST.RMC 'FIRST) (ALONE.RMC 'ALONE) NIL)) (VAL (SELECTQ DATUM (ALWAYS ALWAYS.RMC) (FIRST FIRST.RMC) (ALONE ALONE.RMC) NIL)))) (ACCESSFNS ESCAPES ((KEY (SELECTC DATUM (ESC.RME 'ESCQUOTE) (NOESC.RME 'NOESCQUOTE) NIL)) (VAL (SELECTQ DATUM ((ESCQUOTE ESC) ESC.RME) ((NOESCQUOTE NOESC) NOESC.RME) NIL)))) (ACCESSFNS WAKEUPS ((KEY (SELECTC DATUM (IMMEDIATE.RMW 'IMMEDIATE) (NONIMMEDIATE.RMW 'NONIMMEDIATE) NIL)) (VAL (SELECTQ DATUM ((IMMEDIATE IMMED WAKEUP) IMMEDIATE.RMW) ((NONIMMEDIATE NONIMMED NOWAKEUP) NONIMMEDIATE.RMW) NIL)))) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (PUTPROPS \GETREADMACRODEF MACRO ((C TBL) (GETHASH C (fetch READMACRODEFS of TBL)))) (PUTPROPS \GTREADTABLE MACRO [ARGS (COND [(LITATOM (CAR ARGS)) (SUBPAIR '(X . FLG) ARGS '(SELECTQ X ((NIL T) (\DTEST *READTABLE* 'READTABLEP)) (\GTREADTABLE1 X . FLG] (T 'IGNOREMACRO]) (PUTPROPS \GTREADTABLE1 DMACRO [ARGS (COND [(NULL (CDR ARGS)) (LIST '\DTEST (CAR ARGS) ''READTABLEP] (T 'IGNOREMACRO]) ) (DECLARE%: EVAL@COMPILE (RPAQQ MACROBIT 10Q) (RPAQQ BREAKBIT 20Q) (RPAQQ STOPATOMBIT 40Q) (RPAQQ ESCAPEBIT 100Q) (RPAQQ INNERESCAPEBIT 4) (CONSTANTS MACROBIT BREAKBIT STOPATOMBIT ESCAPEBIT INNERESCAPEBIT) ) (RPAQQ READCODEMASKS ((CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1)) (WAKEUPMASK (LOGOR MACROBIT 2)))) (DECLARE%: EVAL@COMPILE (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)))) (DECLARE%: EVAL@COMPILE (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)))) (DECLARE%: EVAL@COMPILE (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)))) (DECLARE%: EVAL@COMPILE (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))) (DECLARE%: EVAL@COMPILE (RPAQ ESC.RME ESCAPEBIT) (RPAQQ NOESC.RME 0) (CONSTANTS (ESC.RME ESCAPEBIT) (NOESC.RME 0)) ) (DECLARE%: EVAL@COMPILE (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)) ) (/DECLAREDATATYPE 'READTABLEP '(POINTER POINTER FLAG FLAG FLAG (BITS 5) FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER BYTE BYTE BYTE BYTE POINTER) '((READTABLEP 0 POINTER) (READTABLEP 2 POINTER) (READTABLEP 2 (FLAGBITS . 0)) (READTABLEP 2 (FLAGBITS . 20Q)) (READTABLEP 2 (FLAGBITS . 40Q)) (READTABLEP 4 (BITS . 4)) (READTABLEP 2 (FLAGBITS . 60Q)) (READTABLEP 0 (FLAGBITS . 0)) (READTABLEP 0 (FLAGBITS . 20Q)) (READTABLEP 0 (FLAGBITS . 40Q)) (READTABLEP 0 (FLAGBITS . 60Q)) (READTABLEP 4 (FLAGBITS . 120Q)) (READTABLEP 4 (FLAGBITS . 140Q)) (READTABLEP 4 (FLAGBITS . 160Q)) (READTABLEP 6 POINTER) (READTABLEP 5 (BITS . 7)) (READTABLEP 5 (BITS . 207Q)) (READTABLEP 4 (BITS . 207Q)) (READTABLEP 10Q (BITS . 7)) (READTABLEP 12Q POINTER)) '14Q) (* "END EXPORTED DEFINITIONS") (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \ORIGREADTABLE \READTABLEHASH \ORIGTERMTABLE) ) ) (/DECLAREDATATYPE 'READTABLEP '(POINTER POINTER FLAG FLAG FLAG (BITS 5) FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER BYTE BYTE BYTE BYTE POINTER) '((READTABLEP 0 POINTER) (READTABLEP 2 POINTER) (READTABLEP 2 (FLAGBITS . 0)) (READTABLEP 2 (FLAGBITS . 20Q)) (READTABLEP 2 (FLAGBITS . 40Q)) (READTABLEP 4 (BITS . 4)) (READTABLEP 2 (FLAGBITS . 60Q)) (READTABLEP 0 (FLAGBITS . 0)) (READTABLEP 0 (FLAGBITS . 20Q)) (READTABLEP 0 (FLAGBITS . 40Q)) (READTABLEP 0 (FLAGBITS . 60Q)) (READTABLEP 4 (FLAGBITS . 120Q)) (READTABLEP 4 (FLAGBITS . 140Q)) (READTABLEP 4 (FLAGBITS . 160Q)) (READTABLEP 6 POINTER) (READTABLEP 5 (BITS . 7)) (READTABLEP 5 (BITS . 207Q)) (READTABLEP 4 (BITS . 207Q)) (READTABLEP 10Q (BITS . 7)) (READTABLEP 12Q POINTER)) '14Q) (RPAQ? \READTABLEHASH ) (DEFINEQ (\ATBLSET [LAMBDA NIL (* ; "Edited 20-Apr-2018 17:34 by rmk:") (* ; "Edited 3-Dec-86 18:07 by Pavel") (DECLARE (GLOBALVARS \ORIGREADTABLE \ORIGTERMTABLE)) (COND ((NULL (BOUNDP '\PRIMREADTABLE)) (initrecord CHARTABLE) (* ;; "Read tables") (* ;; "RMK: If reloading, don't smash an existing hash table") [OR (HARRAYP \READTABLEHASH) (SETQ \READTABLEHASH (HASHARRAY 24Q NIL (FUNCTION STRING-EQUAL-HASHBITS) (FUNCTION STRING-EQUAL] (LET (TRDTBL NEW-IL-RDTBL) (PROGN (* ; "The ORIG read table") (SETQ \ORIGREADTABLE (\ORIGREADTABLE)) (READTABLEPROP \ORIGREADTABLE 'NAME 'ORIG)) (PROGN (* ;  "The old Interlisp T read table. May not have a use for this any more") (SETQ TRDTBL (COPYREADTABLE \ORIGREADTABLE)) (SETSYNTAX (CHARCODE "|") '(MACRO READVBAR) TRDTBL) (SETSYNTAX (CHARCODE "`") '(MACRO FIRST READBQUOTE) TRDTBL) (SETSYNTAX (CHARCODE ",") '(MACRO FIRST READBQUOTECOMMA) TRDTBL) (SETSYNTAX (CHARCODE "'") '(MACRO FIRST READQUOTE) TRDTBL) (READTABLEPROP TRDTBL 'NAME "OLD-INTERLISP-T") (PROGN (* ; "Temporary") (SETTOPVAL '%#CURRENTRDTBL# TRDTBL))) (PROGN (* ; "The old FILERDTBL") (SETQ FILERDTBL (COPYREADTABLE \ORIGREADTABLE)) (SETSYNTAX (CHARCODE "|") TRDTBL FILERDTBL) (READTABLEPROP FILERDTBL 'NAME "OLD-INTERLISP-FILE") (SETQ *OLD-INTERLISP-READ-ENVIRONMENT* (create READER-ENVIRONMENT REREADTABLE _ FILERDTBL REBASE _ 12Q)) (* ;  "need this to read files in the loadup") ) (PROGN (SETQ NEW-IL-RDTBL (COPYREADTABLE TRDTBL)) (* ;  "The new Interlisp read table is more common lispy") (READTABLEPROP NEW-IL-RDTBL 'MULTIPLE-ESCAPECHAR (CHARCODE "|")) (READTABLEPROP NEW-IL-RDTBL 'HASHMACROCHAR (CHARCODE "#")) (SET-DEFAULT-HASHMACRO-SETTINGS NEW-IL-RDTBL) (READTABLEPROP NEW-IL-RDTBL 'COMMONNUMSYNTAX T) (READTABLEPROP NEW-IL-RDTBL 'USESILPACKAGE NIL) (READTABLEPROP NEW-IL-RDTBL 'NAME "INTERLISP") (for I from 1 to 32Q do (SETSYNTAX I 'SEPRCHAR FILERDTBL) (* ; "Make font switch chars seprs") (SETSYNTAX I 'SEPRCHAR NEW-IL-RDTBL)) (SETQ *READTABLE* NEW-IL-RDTBL)) (* ;; "Make ^Y like #. in the old T readtable and the new INTERLISP one.") (SETSYNTAX (CHARCODE ^Y) '[MACRO ALWAYS (LAMBDA (FILE RDTBL) (EVAL (READ FILE RDTBL] TRDTBL) (SETSYNTAX (CHARCODE ^Y) TRDTBL NEW-IL-RDTBL) (DEFPRINT 'READTABLEP '\READTABLEP.DEFPRINT)) (* ;; "Terminal tables") (SETQ \ORIGTERMTABLE (\ORIGTERMTABLE)) (SETQ \PRIMTERMTABLE (COPYTERMTABLE \ORIGTERMTABLE)) (SETQ \PRIMTERMSA (fetch TERMSA of \PRIMTERMTABLE)) (PUTD '\ATBLSET) (PUTD '\ORIGTERMTABLE) NIL]) ) (/DECLAREDATATYPE 'READER-ENVIRONMENT '(POINTER POINTER POINTER POINTER) '((READER-ENVIRONMENT 0 POINTER) (READER-ENVIRONMENT 2 POINTER) (READER-ENVIRONMENT 4 POINTER) (READER-ENVIRONMENT 6 POINTER)) '10Q) (* ; "Definition is on CMLREAD, need it here to initialize *OLD-INTERLISP-READ-ENVIRONMENT*") (DEFINEQ (MAKE-READER-ENVIRONMENT [LAMBDA (PACKAGE READTABLE BASE) (* ; "Edited 18-Dec-86 18:28 by bvm:") (create READER-ENVIRONMENT REPACKAGE _ (COND (PACKAGE (\DTEST PACKAGE 'PACKAGE)) (T *PACKAGE*)) REREADTABLE _ (COND (READTABLE (\DTEST READTABLE 'READTABLEP)) (T *READTABLE*)) REBASE _ (COND (BASE (\CHECKRADIX BASE)) (T *PRINT-BASE*]) (EQUAL-READER-ENVIRONMENT [LAMBDA (ENV1 ENV2) (* bvm%: "31-Jul-86 12:54") (AND (EQ (fetch (READER-ENVIRONMENT REREADTABLE) of ENV1) (fetch (READER-ENVIRONMENT REREADTABLE) of ENV2)) (EQ (fetch (READER-ENVIRONMENT REPACKAGE) of ENV1) (fetch (READER-ENVIRONMENT REPACKAGE) of ENV2)) (EQ (fetch (READER-ENVIRONMENT REBASE) of ENV1) (fetch (READER-ENVIRONMENT REBASE) of ENV2]) (SET-READER-ENVIRONMENT [LAMBDA (ENV) (* bvm%: "28-Aug-86 17:44") (* ;;; "Sets the reader environment variables from ENV. Should usually only be called inside a WITH-READER-ENVIRONMENT.") [SETQ *PACKAGE* (ffetch REPACKAGE of (\DTEST ENV 'READER-ENVIRONMENT] (SETQ *READTABLE* (ffetch REREADTABLE of ENV)) (SETQ *READ-BASE* (SETQ *PRINT-BASE* (ffetch REBASE of ENV))) ENV]) ) (RPAQ? *LISP-PACKAGE* ) (RPAQ? *INTERLISP-PACKAGE* ) (RPAQ? *KEYWORD-PACKAGE* ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\ATBLSET) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA READTABLEPROP) ) (PUTPROPS ATBL COPYRIGHT ("Venue & Xerox Corporation" 3676Q 3677Q 3700Q 3701Q 3702Q 3703Q 3706Q 3711Q 3742Q 3745Q)) (DECLARE%: DONTCOPY (FILEMAP (NIL (44114Q 67345Q (GETSYNTAX 44126Q . 55055Q) (SETSYNTAX 55057Q . 57144Q) (SYNTAXP 57146Q . 62552Q) (\COPYSYNTAX 62554Q . 63637Q) (\GETCHARCODE 63641Q . 64305Q) (\SETFATSYNCODE 64307Q . 66462Q) (\MAPCHARTABLE 66464Q . 67343Q)) (67406Q 124174Q (CONTROL 67420Q . 70020Q) (COPYTERMTABLE 70022Q . 70464Q) (DELETECONTROL 70466Q . 75306Q) (GETDELETECONTROL 75310Q . 77216Q) (ECHOCHAR 77220Q . 102116Q) (ECHOCONTROL 102120Q . 103040Q) (ECHOMODE 103042Q . 103434Q) (GETECHOMODE 103436Q . 103706Q) (GETCONTROL 103710Q . 104162Q) (GETTERMTABLE 104164Q . 104267Q) (RAISE 104271Q . 105113Q) ( GETRAISE 105115Q . 105363Q) (RESETTERMTABLE 105365Q . 107465Q) (SETTERMTABLE 107467Q . 110156Q) ( TERMTABLEP 110160Q . 110425Q) (\GETTERMSYNTAX 110427Q . 111036Q) (\GTTERMTABLE 111040Q . 111564Q) ( \ORIGTERMTABLE 111566Q . 120427Q) (\SETTERMSYNTAX 120431Q . 121630Q) (\TERMCLASSTOCODE 121632Q . 122513Q) (\TERMCODETOCLASS 122515Q . 123324Q) (\LITCHECK 123326Q . 124172Q)) (131165Q 210145Q ( COPYREADTABLE 131177Q . 131511Q) (FIND-READTABLE 131513Q . 131742Q) (IN-READTABLE 131744Q . 132210Q) ( ESCAPE 132212Q . 132613Q) (GETBRK 132615Q . 133033Q) (GETREADTABLE 133035Q . 133246Q) (GETSEPR 133250Q . 133466Q) (READMACROS 133470Q . 134103Q) (READTABLEP 134105Q . 134354Q) (READTABLEPROP 134356Q . 146554Q) (RESETREADTABLE 146556Q . 157076Q) (SETBRK 157100Q . 162204Q) (SETREADTABLE 162206Q . 162473Q ) (SETSEPR 162475Q . 165475Q) (\GETREADSYNTAX 165477Q . 172657Q) (\GTREADTABLE 172661Q . 173226Q) ( \GTREADTABLE1 173230Q . 173634Q) (\ORIGREADTABLE 173636Q . 177455Q) (\READCLASSTOCODE 177457Q . 200366Q) (\SETMACROSYNTAX 200370Q . 204004Q) (\SETREADSYNTAX 204006Q . 206071Q) (\READTABLEP.DEFPRINT 206073Q . 210143Q)) (241661Q 252517Q (\ATBLSET 241673Q . 252515Q)) (253256Q 256351Q ( MAKE-READER-ENVIRONMENT 253270Q . 254356Q) (EQUAL-READER-ENVIRONMENT 254360Q . 255407Q) ( SET-READER-ENVIRONMENT 255411Q . 256347Q))))) STOP \ No newline at end of file diff --git a/sources/ATBL.LCOM b/sources/ATBL.LCOM index e3c6e8598b40a8437a940f158ff7ba2c12c64004..5281c39ec7ceb77cb4143e4ccf3fc4bfb462cdd9 100644 GIT binary patch delta 606 zcmex4nd#IdrU_wThDN$>sY$v<21bSoMn+bqrdFmFN(vfE$@#ejnK`K`3i){oN($93 z!QQnt8Tq-Xb~%YfMU{4$Ihn-;cDbo3IjNO)#rdU0$*IM5jv-Dyde)Yj3cM3{Dc2`w zB<7{37OPq*1i1#gh6K4fx`a47`M4@%<|*(h`GU1780(oTxRvJQC`ZhpaNzL9JMH0W9yy z2~wQH&IO{PM40w_O}=NPY`cHMUIq;lQ$q!3pCAv%U=IZo6BC6PXa9i6;7Gp^#|Q-z zV8jQxLZl206+jHfpdiOc1rr04$#&M73dZI@d1%}P0F_%JbB!%6HqW;X_TyFH1tlR( KO6-ARLd{t#Bssok~nIKn_9M05tJdpu}Xv!TXu^; z2=NsNR>i=?&VUp#QtzGl6o`S9jk7Bv_TF%J&;NP*-J?7EQ2LXW-XEkHeW%Noy>J>$ z0)GtQ49dW~X*r#@4|<6oC;E#~6pUuN8G55YpZep#e=YNh9!!$R3u9kT!sFQU6CJw^ zli#j#F#ob~oAF;oadJG~2F80nnjQKH9EF6BJ;1gDIb?Hx&*6Y=cbz3P z2T|<5oP@_ofl0#CQ~J75(G*#eg$vE8vREliE2~%##B{iF7qyHw=}z6CXsU$kS17Wq zYx#bYVnqq8p1Xsc9jHKa-|BNrch_Xtbf|KVERev?v!M+NY?4v6T--2?O%CX@OQc%; zq&}Yfo@c$wdAVm)ao`h7#E)5TajFjK`>T(?HR^? Date: Sat, 13 Feb 2021 09:01:21 -0800 Subject: [PATCH 11/37] files remade for init --- library/EXPORTS.ALL | 2 +- sources/ACODE.LCOM | Bin 19294 -> 19308 bytes sources/FASLOAD.LCOM | Bin 22348 -> 34132 bytes sources/FILEPKG | 2 +- sources/FILEPKG.LCOM | Bin 103352 -> 102592 bytes 5 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 sources/FASLOAD.LCOM diff --git a/library/EXPORTS.ALL b/library/EXPORTS.ALL index 18697a89..fcedfd7b 100644 --- a/library/EXPORTS.ALL +++ b/library/EXPORTS.ALL @@ -1 +1 @@ -(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 +(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP") (LISPXPRIN1 "EXPORTS GATHERED FROM {DSK}larry>ilisp>medley>sources> ON 12-Feb-2021 19:12:25" T) (LISPXTERPRI T) (PUTPROP (QUOTE FILESETS) (QUOTE IMPORTDATE) (IDATE "12-Feb-2021 18:10:20")) (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| 32766) (* \; "Was 37776Q pre 16-meg intiial") (|\\MaxMDSPage| 524285) (|\\DefaultSecondMDSPage| 65532) (|\\MDSIncrement| 512) (|\\PagesPerMDSUnit| 2) (* \; "(FOLDLO \\MDSIncrement WORDSPERPAGE)") (* |;;| "arrays") (\\ARRAYSPACE (46 0)) ( |\\FirstArraySegment| 46) (|\\FirstArrayPage| 11776) (\\ARRAYSPACE2 (64 0)) ( |\\DefaultSecondArrayPage| 32768) (* \; "Was 40000Q before 16meg initial") (* |;;| "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| 32766) (RPAQQ |\\MaxMDSPage| 524285) (RPAQQ |\\DefaultSecondMDSPage| 65532) (RPAQQ |\\MDSIncrement| 512) (RPAQQ |\\PagesPerMDSUnit| 2) (RPAQQ |\\FirstArraySegment| 46) (RPAQQ |\\FirstArrayPage| 11776) (RPAQQ |\\DefaultSecondArrayPage| 32768) (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| 32766) (|\\MaxMDSPage| 524285) (|\\DefaultSecondMDSPage| 65532) (|\\MDSIncrement| 512 ) (|\\PagesPerMDSUnit| 2) (|\\FirstArraySegment| 46) (|\\FirstArrayPage| 11776) ( |\\DefaultSecondArrayPage| 32768) (|\\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 ( LIST (QUOTE OPCODES) (QUOTE GCONST) 0 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 "12-Feb-2021 17:35:19")) (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 "12-Feb-2021 16:52:07")) (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 "12-Feb-2021 16:52:07")) (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 "12-Feb-2021 16:52:07")) (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 "12-Feb-2021 16:52:07")) (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-Feb-2021 17:06:41")) (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/sources/ACODE.LCOM b/sources/ACODE.LCOM index 6ed361ebd6fcbf96a5948bb11cae31cdbb3580ec..032d6daf94eb452ac9e4e7a346a5bd52a22b6aaa 100644 GIT binary patch delta 1403 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 QQ#V0kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;12 285044 changes to%: (FNS MAKEFILE1 COMPILE-FILE?) previous date%: "10-Aug-2020 21:24:58" {DSK}kaplan>Local>medley3.5>lispcore>sources>FILEPKG.;11) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018, 2020 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file") (VARS [ADDTOFILEKEYLST `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] (@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG [,(CHARACTER (CHARCODE EOL] RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST (] (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only "] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST )))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 27-Oct-2020 15:40 by rmk:") (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "RMK: Call COMPILE-FILE? with FILE instead of (ROOTFILENAME FILE)") (PROG ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? FILE)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (FILE) (* ; "Edited 27-Oct-2020 15:39 by rmk:") (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;; "RMK: Argument is FILE instead of ROOTFILENAME, maybe more information") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET (ROOTFILENAME FILE) 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 10-Aug-2020 21:18 by rmk:") (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (* ;; "RMK: Eliminated literal CR's in the key list.") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") `([Y ,(CONCAT "es" (CHARACTER (CHARCODE EOL] [N ,(CONCAT "o" (CHARACTER (CHARCODE EOL] (%] ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (* ; "Nowhere") (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (* ;; "SELCHARQ to avoid literal CR") (SELCHARQ (CHCON1 (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T))) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (* ; "Nowhere") (SETQ FILE)) (SPACE (* ; "No action") (RETURN)) ((LF =) (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file" ) (RPAQ ADDTOFILEKEYLST `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] (@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG [,(CHARACTER (CHARCODE EOL] RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST ()))) (RPAQQ LASTFILE NIL) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 8-Aug-2020 17:32 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only ")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (22882 24587 (SEARCHPRETTYTYPELST 22892 . 23871) (PRETTYDEFMACROS 23873 . 24331) ( FILEPKGCOMPROPS 24333 . 24585)) (25389 59512 (CLEANUP 25399 . 26787) (COMPILEFILES 26789 . 27065) ( COMPILEFILES0 27067 . 27787) (CONTINUEDIT 27789 . 29209) (MAKEFILE 29211 . 40853) (FILECHANGES 40855 . 43190) (FILEPKG.MERGECHANGES 43192 . 44015) (FILEPKG.CHANGEDFNS 44017 . 44329) (MAKEFILE1 44331 . 48558) (COMPILE-FILE? 48560 . 50117) (MAKEFILES 50119 . 51812) (ADDFILE 51814 . 54335) (ADDFILE0 54337 . 58473) (LISTFILES 58475 . 59510)) (60200 95440 (FILEPKGCHANGES 60210 . 61560) (GETFILEPKGTYPE 61562 . 64635) (MARKASCHANGED 64637 . 66274) (FILECOMS 66276 . 66660) (WHEREIS 66662 . 68082) ( SMASHFILECOMS 68084 . 68319) (FILEFNSLST 68321 . 68483) (FILECOMSLST 68485 . 68969) (UPDATEFILES 68971 . 74271) (INFILECOMS? 74273 . 76176) (INFILECOMTAIL 76178 . 77318) (INFILECOMS 77320 . 77481) ( INFILECOM 77483 . 87692) (INFILECOMSVALS 87694 . 88021) (INFILECOMSVAL 88023 . 89025) (INFILECOMSPROP 89027 . 89856) (IFCPROPS 89858 . 91119) (IFCEXPRTYPE 91121 . 91632) (IFCPROPSCAN 91634 . 92687) ( IFCDECLARE 92689 . 94000) (INFILEPAIRS 94002 . 94334) (INFILECOMSMACRO 94336 . 95438)) (95475 126251 ( FILES? 95485 . 97678) (FILES?1 97680 . 98330) (FILES?PRINTLST 98332 . 99114) (ADDTOFILES? 99116 . 109718) (ADDTOFILE 109720 . 110636) (WHATIS 110638 . 112614) (ADDTOCOMS 112616 . 114260) (ADDTOCOM 114262 . 120809) (ADDTOCOM1 120811 . 121982) (ADDNEWCOM 121984 . 123034) (MAKENEWCOM 123036 . 124879) (DEFAULTMAKENEWCOM 124881 . 126249)) (126321 129138 (MERGEINSERT 126331 . 128674) (MERGEINSERT1 128676 . 129136)) (130657 141569 (DELFROMFILES 130667 . 131517) (DELFROMCOMS 131519 . 133198) (DELFROMCOM 133200 . 139068) (DELFROMCOM1 139070 . 139867) (REMOVEITEM 139869 . 140743) (MOVETOFILE 140745 . 141567)) (141783 144152 (SAVEPUT 141793 . 144150)) (144277 152601 (UNMARKASCHANGED 144287 . 145995) ( PREEDITFN 145997 . 148508) (POSTEDITPROPS 148510 . 151011) (POSTEDITALISTS 151013 . 152599)) (152750 173304 (ALISTS.GETDEF 152760 . 153139) (ALISTS.WHENCHANGED 153141 . 153785) (CLEARCLISPARRAY 153787 . 154961) (EXPRESSIONS.WHENCHANGED 154963 . 155337) (MAKEALISTCOMS 155339 . 156412) (MAKEFILESCOMS 156414 . 157851) (MAKELISPXMACROSCOMS 157853 . 159871) (MAKEPROPSCOMS 159873 . 160571) ( MAKEUSERMACROSCOMS 160573 . 162373) (PROPS.WHENCHANGED 162375 . 162996) (FILEGETDEF.LISPXMACROS 162998 . 164440) (FILEGETDEF.ALISTS 164442 . 165061) (FILEGETDEF.RECORDS 165063 . 165994) (FILEGETDEF.PROPS 165996 . 166788) (FILEGETDEF.MACROS 166790 . 167850) (FILEGETDEF.VARS 167852 . 168268) (FILEGETDEF.FNS 168270 . 169634) (FILEPKGCOMS.PUTDEF 169636 . 172076) (FILES.PUTDEF 172078 . 173035) (VARS.PUTDEF 173037 . 173180) (FILES.WHENCHANGED 173182 . 173302)) (175326 182759 (RENAME 175336 . 176737) ( CHANGECALLERS 176739 . 182757)) (182760 230708 (SHOWDEF 182770 . 183563) (COPYDEF 183565 . 186039) ( GETDEF 186041 . 188317) (GETDEFCOM 188319 . 189285) (GETDEFCOM0 189287 . 190633) (GETDEFCURRENT 190635 . 197055) (GETDEFERR 197057 . 198358) (GETDEFFROMFILE 198360 . 202640) (GETDEFSAVED 202642 . 203746) (PUTDEF 203748 . 204451) (EDITDEF 204453 . 205430) (DEFAULT.EDITDEF 205432 . 208268) (EDITDEF.FILES 208270 . 208471) (LOADDEF 208473 . 208649) (DWIMDEF 208651 . 209505) (DELDEF 209507 . 212521) ( DELFROMLIST 212523 . 213027) (HASDEF 213029 . 219351) (GETFILEDEF 219353 . 219875) (SAVEDEF 219877 . 221536) (UNSAVEDEF 221538 . 222434) (COMPAREDEFS 222436 . 225738) (COMPARE 225740 . 226444) (TYPESOF 226446 . 230706)) (230775 235818 (FIXEDITDATE 230785 . 234288) (EDITDATE? 234290 . 235816)) (236237 244823 (FILEPKGCOM 236247 . 241180) (FILEPKGTYPE 241182 . 244821)) (256860 271412 (FINDCALLERS 256870 . 257385) (EDITCALLERS 257387 . 265045) (EDITFROMFILE 265047 . 270727) (FINDATS 270729 . 271001) ( LOOKIN 271003 . 271410)) (271413 273140 (SEPRCASE 271423 . 273138)) (273657 279199 (IMPORTFILE 273667 . 274641) (IMPORTEVAL 274643 . 275523) (IMPORTFILESCAN 275525 . 275946) (CHECKIMPORTS 275948 . 277284 ) (GATHEREXPORTS 277286 . 278609) (\DUMPEXPORTS 278611 . 279197)) (279537 281745 (CLEARFILEPKG 279547 . 281743))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "12-Feb-2021 17:16:04" {DSK}larry>ilisp>medley>sources>FILEPKG.;16 282953 changes to%: (VARS FILEPKGCOMS) (FNS ADDTOFILEKEYLST) previous date%: "27-Oct-2020 15:40:32" {DSK}larry>ilisp>medley>sources>FILEPKG.;15) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 2018, 2020, 2021 by Venue & Xerox Corporation. The following program was created in 1982 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT FILEPKGCOMS) (RPAQQ FILEPKGCOMS [(COMS (* ;  "standard records for accessing file package type/command parts. Exported for PRETTY") (VARS FILEPKGTYPEPROPS) (EXPORT (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS * FILEPKGRECORDS))) (FNS SEARCHPRETTYTYPELST PRETTYDEFMACROS FILEPKGCOMPROPS) (INITRECORDS * FILEPKGRECORDS)) [DECLARE%: EVAL@COMPILE DOCOPY (* ;; "Proclaim SPECIAL those variables that are used freely in a lot of code.") (P (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS] (INITVARS (MSDATABASELST)) [COMS (* ;; "making, adding, listing, compiling files") (FNS CLEANUP COMPILEFILES COMPILEFILES0 CONTINUEDIT MAKEFILE FILECHANGES FILEPKG.MERGECHANGES FILEPKG.CHANGEDFNS MAKEFILE1 COMPILE-FILE? MAKEFILES ADDFILE ADDFILE0 LISTFILES) (INITVARS (*DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (FILELST) (LOADEDFILELST) (NOTLISTEDFILES) (NOTCOMPILEDFILES) (MAKEFILEFORMS) (NILCOMS)) (ADDVARS (MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C))) (INITVARS (MAKEFILEREMAKEFLG T) (CLEANUPOPTIONS '(RC] (COMS (* ;; "scanning file coms") (FNS FILEPKGCHANGES GETFILEPKGTYPE MARKASCHANGED FILECOMS WHEREIS SMASHFILECOMS FILEFNSLST FILECOMSLST UPDATEFILES INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVALS INFILECOMSVAL INFILECOMSPROP IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE INFILEPAIRS INFILECOMSMACRO)) (COMS (* ;; "adding to a file") (FNS FILES? FILES?1 FILES?PRINTLST ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM MAKENEWCOM DEFAULTMAKENEWCOM) (INITVARS (DEFAULTCOMHASFILEFLG)) (ADDVARS (MARKASCHANGEDFNS)) (FNS MERGEINSERT MERGEINSERT1) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file") (FNS ADDTOFILEKEYLST) (INITVARS (ADDTOFILEKEYLST (ADDTOFILEKEYLST)) (LASTFILE))) (COMS (* ;; "deleting an item from a file") (FNS DELFROMFILES DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM MOVETOFILE) (P (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T)) (ADDVARS (SYSPROPS PROPTYPE VARTYPE))) [COMS (* ;  "functions for doing things and marking them changed and auxiliary functions") (FNS SAVEPUT) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT] (FNS UNMARKASCHANGED PREEDITFN POSTEDITPROPS POSTEDITALISTS) (ADDVARS (LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT] (COMS (* ;  "sub-functions for file package commands & types") (FNS ALISTS.GETDEF ALISTS.WHENCHANGED CLEARCLISPARRAY EXPRESSIONS.WHENCHANGED MAKEALISTCOMS MAKEFILESCOMS MAKELISPXMACROSCOMS MAKEPROPSCOMS MAKEUSERMACROSCOMS PROPS.WHENCHANGED FILEGETDEF.LISPXMACROS FILEGETDEF.ALISTS FILEGETDEF.RECORDS FILEGETDEF.PROPS FILEGETDEF.MACROS FILEGETDEF.VARS FILEGETDEF.FNS FILEPKGCOMS.PUTDEF FILES.PUTDEF VARS.PUTDEF FILES.WHENCHANGED) (ADDVARS (MACROPROPS MACRO BYTEMACRO DMACRO) (SYSPROPS PROPTYPE)) (PROP PROPTYPE I.S.OPR SUBR LIST CODE FILEDATES FILE FILEMAP EXPR VALUE COPYRIGHT FILETYPE) (PROP VARTYPE BAKTRACELST BREAKMACROS COMPILETYPELST EDITMACROS ERRORTYPELST FONTDEFS LISPXHISTORYMACROS LISPXMACROS PRETTYDEFMACROS PRETTYEQUIVLST PRETTYPRINTMACROS PRETTYPRINTYPEMACROS USERMACROS)) (COMS (* ;  "Define the commands below AFTER the various properties have been established.") (USERMACROS M)) (COMS (* ; "GETDEF methods") (FNS RENAME CHANGECALLERS) (FNS SHOWDEF COPYDEF GETDEF GETDEFCOM GETDEFCOM0 GETDEFCURRENT GETDEFERR GETDEFFROMFILE GETDEFSAVED PUTDEF EDITDEF DEFAULT.EDITDEF EDITDEF.FILES LOADDEF DWIMDEF DELDEF DELFROMLIST HASDEF GETFILEDEF SAVEDEF UNSAVEDEF COMPAREDEFS COMPARE TYPESOF) (INITVARS (WHEREIS.HASH))) (* ; "Must come after PUTDEF") (FNS FIXEDITDATE EDITDATE?) (* ;  "Edit date support for all kinds of definers (from PARC 6/10/92)") [VARS (EDITDATE-ARGLIST-DEFINERS '(FUNCTIONS TYPES)) (EDITDATE-NAME-DEFINERS '(STRUCTURES VARIABLES] (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) (COMS (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started.") (FNS FILEPKGCOM FILEPKGTYPE) (PROP ARGNAMES FILEPKGCOM) (ADDVARS (FILEPKGCOMSPLST FILEPKGCOMS) (FILEPKGTYPES FILEPKGCOMS)) (FILEPKGCOMS FILEPKGCOMS) (FILEPKGCOMS ALISTS DEFS EDITMACROS EXPRESSIONS FIELDS FILEPKGTYPES FILES FILEVARS FNS INITRECORDS INITVARS LISPXCOMS LISPXMACROS MACROS PRETTYDEFMACROS PROPS RECORDS OLDRECORDS SYSRECORDS USERMACROS VARS * CONSTANTS)) (ADDVARS (SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS))) (INITVARS (SAVEDDEFS)) (COMS (* ; "EDITCALLERS") (FNS FINDCALLERS EDITCALLERS EDITFROMFILE FINDATS LOOKIN) (FNS SEPRCASE) [INITVARS (DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL] (INITVARS (SEPRCASEARRAYS) (CLISPCASEARRAYS)) (P (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE")) (BLOCKS (EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM))) (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS)) (COMS (* ; "EXPORT") (FNS IMPORTFILE IMPORTEVAL IMPORTFILESCAN CHECKIMPORTS GATHEREXPORTS \DUMPEXPORTS) (FILEPKGCOMS EXPORT) [INITVARS (BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS"] (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM)) (COMS (* ; "for GAINSPACE") (FNS CLEARFILEPKG) [ADDVARS (GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only "] (GLOBALVARS SMASHPROPSLST1)) (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) (BLOCKS (DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (ADDFILE ADDFILE ADDFILE0) (FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (NLAML) (LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES]) (* ; "standard records for accessing file package type/command parts. Exported for PRETTY") (RPAQQ FILEPKGTYPEPROPS (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF CANFILEDEF FILEGETDEF)) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE DONTCOPY (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (DECLARE%: EVAL@COMPILE (ACCESSFNS FILEPKGCOM [[ADD (GETPROP DATUM 'ADDTOPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'ADDTOPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'ADDTOPRETTYCOM] [DELETE (GETPROP DATUM 'DELFROMPRETTYCOM) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'DELFROMPRETTYCOM NEWVALUE)) (T (/REMPROP DATUM 'DELFROMPRETTYCOM] [PRETTYTYPE (GETPROP DATUM 'PRETTYTYPE) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'PRETTYTYPE NEWVALUE)) (T (/REMPROP DATUM 'PRETTYTYPE] [CONTENTS (GETPROP DATUM 'FILEPKGCONTENTS) (UNDOABLE (COND (NEWVALUE (/PUTPROP DATUM 'FILEPKGCONTENTS NEWVALUE)) (T (/REMPROP DATUM 'FILEPKGCONTENTS] (MACRO [CDR (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS] (STANDARD [COND [NEWVALUE (PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] UNDOABLE (COND [NEWVALUE (/PUTASSOC DATUM NEWVALUE (OR (LISTP (GETTOPVAL 'PRETTYDEFMACROS)) (/SETTOPVAL 'PRETTYDEFMACROS (LIST (LIST DATUM] (T (/SETTOPVAL 'PRETTYDEFMACROS (REMOVE (FASSOC DATUM (GETTOPVAL 'PRETTYDEFMACROS)) (GETTOPVAL 'PRETTYDEFMACROS] (* Not an atom record cause want  REMPROP on NILs.) (* NOTE%: PRETTCOM on PRETTY has  open-coded access to the MACRO  property.) (INIT (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS))) (ATOMRECORD FILEPKGTYPE (NEWCOM WHENFILED WHENUNFILED GETDEF NULLDEF DELDEF PUTDEF WHENCHANGED HASDEF EDITDEF FILEGETDEF CANFILEDEF) (ACCESSFNS FILEPKGTYPE [(CHANGEDLST (CAR (SEARCHPRETTYTYPELST DATUM)) (CAR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) ) (CHANGED (GETTOPVAL (CAR (SEARCHPRETTYTYPELST DATUM))) (STANDARD (SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE) ) NEWVALUE) UNDOABLE (/SETTOPVAL (CAR ( SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (DESCRIPTION (CAR (CDDR (SEARCHPRETTYTYPELST DATUM))) (CAR (RPLACA (CDDR (SEARCHPRETTYTYPELST DATUM NEWVALUE)) NEWVALUE))) (ALLFIELDS NIL (/SETTOPVAL 'PRETTYTYPELST (REMOVE (SEARCHPRETTYTYPELST DATUM) (GETTOPVAL 'PRETTYTYPELST] (* NOTE%: PRETTYCOM on PRETTY has  open-coded access to GETDEF property) (INIT [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST )))) (ATOMRECORD FILE (FILECHANGES FILEDATES FILEMAP) [ACCESSFNS FILE ((FILEPROP (GETPROP DATUM 'FILE) (STANDARD (PUTPROP DATUM 'FILE NEWVALUE) UNDOABLE (/PUTPROP DATUM 'FILE NEWVALUE]) (RECORD FILEDATEPAIR (FILEDATE . DATEFILENAME)) (RECORD FILEPROP ((COMSNAME . LOADTYPE) . TOBEDUMPED)) ) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (SEARCHPRETTYTYPELST [LAMBDA (TYPE FLG) (* rmk%: " 3-JAN-82 22:55") (* ;  "access functions used by the records") (AND (LITATOM TYPE) (OR (find X in PRETTYTYPELST suchthat (EQ (CADR X) TYPE)) (COND (FLG [/SETTOPVAL 'PRETTYTYPELST (CONS (SETQ FLG (LIST (PACK* 'CHANGED TYPE 'LST) TYPE NIL)) (GETTOPVAL 'PRETTYTYPELST] (OR (LISTP (GETTOPVAL (CAR FLG))) (/SETTOPVAL (CAR FLG) NIL)) FLG]) (PRETTYDEFMACROS [NLAMBDA ARGS (* lmm " 5-SEP-78 16:16") (* ;  "included so that old files will continue to load") (for X in ARGS collect (FILEPKGCOM (CAR X) 'MACRO (CDR X]) (FILEPKGCOMPROPS [NLAMBDA PROPS (MAPC PROPS (FUNCTION (LAMBDA (Y) (OR (MEMB Y SYSPROPS) (SETQ SYSPROPS (CONS Y SYSPROPS))) (PUT Y 'PROPTYPE 'FILEPKGCOMS]) ) (RPAQQ FILEPKGRECORDS (FILEPKGCOM FILEPKGTYPE FILE FILEDATEPAIR FILEPROP)) (FILEPKGCOMPROPS ADDTOPRETTYCOM DELFROMPRETTYCOM PRETTYTYPE FILEPKGCONTENTS) [PROGN (SETQ SYSPROPS (UNION FILEPKGTYPEPROPS SYSPROPS)) (MAPC FILEPKGTYPEPROPS (FUNCTION (LAMBDA (X) (PUT X 'PROPTYPE 'FILEPKGCOMS] (ADDTOVAR PRETTYTYPELST ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL PRETTYDEFMACROS PRETTYTYPELST FILEPKGTYPES PRETTYPRINTMACROS *DEFAULT-CLEANUP-COMPILER* MARKASCHANGEDFNS PRETTYFLG)) (CL:PROCLAIM '(GLOBAL FILELST SYSFILES LOADEDFILELST NOTLISTEDFILES NOTCOMPILEDFILES MAKEFILEFORMS CLEANUPOPTIONS)) ) (RPAQ? MSDATABASELST ) (* ;; "making, adding, listing, compiling files") (DEFINEQ (CLEANUP [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (PROG (TEM1 TEM2 OPTIONS) (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (SETQ OPTIONS (CAR FILES)) (SETQ FILES (CDR FILES))) (T (SETQ OPTIONS CLEANUPOPTIONS))) (RETURN (APPEND (MAKEFILES OPTIONS FILES) (COND ((NOT (MEMB 'LIST OPTIONS)) NIL) ((NULL FILES) (LISTFILES)) ((SETQ TEM1 (INTERSECTION FILES NOTLISTEDFILES)) (* ;  "Intersection check because LISTFILES applied to NIL means list all of NOTLISTEDFILES.") (APPLY 'LISTFILES TEM1))) (COND [(NULL (SETQ TEM1 (MEMB 'RC OPTIONS] ((NULL FILES) (COMPILEFILES0 (SETQ TEM2 NOTCOMPILEDFILES) (CDR TEM1)) TEM2) ((SETQ TEM2 (INTERSECTION FILES NOTCOMPILEDFILES)) (COMPILEFILES0 TEM2 (CDR TEM1)) TEM2]) (COMPILEFILES [NLAMBDA FILES (* lmm "14-Aug-84 19:17") (COND ([LISTP (CAR (SETQ FILES (NLAMBDA.ARGS FILES] (COMPILEFILES0 (CDR FILES) (CAR FILES))) (T (COMPILEFILES0 FILES]) (COMPILEFILES0 [LAMBDA (FILES OPTIONS) (* rmk%: "19-FEB-83 21:59") (for X OPTS (RCFLG _ T) on (OR FILES NOTCOMPILEDFILES) first (SETQ OPTS (SELECTQ (CAR (LISTP OPTIONS)) (C (SETQ RCFLG NIL) (CDR OPTIONS)) (RC (CDR OPTIONS)) OPTIONS)) do (MAKEFILE1 (OR (MISSPELLED? (CAR X) 70 FILELST NIL X) (CAR X)) RCFLG OPTS X]) (CONTINUEDIT [LAMBDA (FILE) (* bvm%: "30-Aug-86 15:09") (PROG (STREAM FL TEM FC ENV) (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (SETQ FILE (FULLNAME STREAM)) (SETFILEPTR STREAM 0) (CL:MULTIPLE-VALUE-SETQ (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN))) (COND ([NOT (fetch FILEPROP of (SETQ FL (ROOTFILENAME FILE] (LOADFROM FILE) (* ;  "also calls addfile to notice the file.") )) (/replace FILECHANGES of FL with (FILECHANGES FC)) [/replace FILEDATES of FL with (LIST (create FILEDATEPAIR FILEDATE _ (CADR FC) DATEFILENAME _ FILE) (create FILEDATEPAIR FILEDATE _ [CAR (SETQ TEM (CDR (MEMB 'date%: FC] DATEFILENAME _ (CADR TEM] (RETURN FILE]) (MAKEFILE [LAMBDA (FILE OPTIONS REPRINTFNS SOURCEFILE) (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "OPTIONS: FAST means dump with PRETTYFLG set to NIL; LIST means list the FILE; RC means RECOMPILE, C means COMPILEL; --- for C AND RC assume ST unless next option is F.") (PROG ((PRETTYFLG (AND [NOT (MEMB 'FAST (SETQ OPTIONS (MKLIST OPTIONS] PRETTYFLG)) (*PRINT-BASE* (if (EQ *PRINT-BASE* 8) then 8 else (* ; "make sure radix is either 8 or 10, because all others don't read in like they print. Maybe obsolete now with makefile environments") 10)) FILETYPE ROOTNAME FILEPROP CHANGES FILEDATES (Z (ADDFILE FILE))) (DECLARE (CL:SPECIAL PRETTYFLG)) (SETQ FILE (CAR Z)) (* ;  "Necessary because FILE might have been misspelled.") (SETQ ROOTNAME (CADR Z)) (* ; "result of (ROOTFILENAME FILE), or if FILE is corrected, result of applying ROOTFILENAME to correct value.") (SETQ FILEPROP (CDDR Z)) (UPDATEFILES) (* ; "Want updating done after file is added to filelst, so any functions that are being dumped are marked as having been dumped.") (SETQ CHANGES (fetch TOBEDUMPED of FILEPROP)) (SETQ FILEDATES (LISTP (fetch FILEDATES of ROOTNAME))) (SETQ FILETYPE (GETPROP ROOTNAME 'FILETYPE)) LP0 (if (AND (NULL (fetch LOADTYPE of FILEPROP)) (NULL FILEDATES)) then (* ;  "File has never been loaded and never dumped i.e. user just set up COMS in core") elseif [OR (EQMEMB 'NEW OPTIONS) (AND (NULL MAKEFILEREMAKEFLG) (NOT (MEMB 'REMAKE OPTIONS] then (COND ((AND (fetch LOADTYPE of FILEPROP) (NEQ T (fetch LOADTYPE of FILEPROP))) (LISPXPRIN2 FILE T T) (LISPXPRIN1 (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP "the file was loaded for compilation purposes only") ((compiled Compiled COMPILED) " -- only the compiled file has been loaded ") ((loadfns LOADFNS) " -- only some of its symbolics have been loaded ") (SHOULDNT)) T) (COND ((NEQ (ASKUSER DWIMWAIT 'Y "Go ahead and MAKEFILE anyway? ") 'Y) (* ;  "E.g. user loads a .com file and then resets the COMS or defines the functons by hand.") (GO OUT))) (/replace LOADTYPE of FILEPROP with NIL))) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) elseif SOURCEFILE then (* ; "source file given") elseif [AND FILEDATES (OR [AND (SETQ SOURCEFILE (FINDFILE ROOTNAME T)) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] (AND [NOT (STRING-EQUAL SOURCEFILE (SETQ SOURCEFILE (fetch DATEFILENAME of (CAR FILEDATES ] (INFILEP SOURCEFILE) (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CAR FILEDATES] then (/replace DATEFILENAME of (CAR FILEDATES) with SOURCEFILE) (OR REPRINTFNS (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES))) elseif [AND (CDR FILEDATES) [SETQ SOURCEFILE (INFILEP (fetch DATEFILENAME of (CADR FILEDATES] (EQUAL (FILEDATE SOURCEFILE) (fetch FILEDATE of (CADR FILEDATES] then (* ;; "prevous version file is gone, drop back to original daddy file and dump everything that has been changed.") (SETQ CHANGES (FILEPKG.MERGECHANGES (fetch TOBEDUMPED of FILEPROP) (fetch FILECHANGES of ROOTNAME))) (SETQ REPRINTFNS (FILEPKG.CHANGEDFNS CHANGES)) else (LISPXPRIN1 '"can't find either the previous version or the original version of " T) (LISPXPRIN2 FILE T T) (LISPXPRIN1 '", so it will have to be written anew " T) (SETQ SOURCEFILE NIL) (SETQ REPRINTFNS NIL) (push OPTIONS 'NEW) (SETQ CHANGES (fetch FILECHANGES of ROOTNAME)) (GO LP0)) (COND ((AND SOURCEFILE (SETQ Z (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "only loaded via LOADCOMP. Need to do LOADFROM") (LIST 'N SOURCEFILE "was loaded with LOADCOMP" '- "LOADFROM it to obtain VARS/COMS")) (Compiled (AND (INFILECOMS? 'DONTCOPY 'DECLARE%: (fetch COMSNAME of FILEPROP)) (LIST 'Y "only compiled version of" ROOTNAME "was loaded; LOADVARS the (DECLARE .. DONTCOPY ) expressions" ))) ((compiled loadfns) (LIST 'N "Only some functions from" SOURCEFILE "loaded via LOADFNS. Load all other expressions from it" )) NIL))) (SELECTQ [ASKUSER DWIMWAIT (CAR Z) (CDR Z) '((Y "es ") (N "o ") (A "bort MAKEFILE "] (Y (SELECTQ (fetch LOADTYPE of FILEPROP) (LOADCOMP (* ;  "file was never actually loaded, just loadcomped. thus no filecoms") (LOADFROM SOURCEFILE)) (Compiled (* ;; "This is going to be a remake. If it was originally loaded as a compiled file, must first do a LOADFROM in order to get the properties set up by declare: etc.") (LOADVARS 'DONTCOPY SOURCEFILE) (/replace LOADTYPE of FILEPROP with 'COMPILED) (* ; "So wont have to be done again.") (* ;; "These are the only DECLARE:'s that are not also on the compiled file. Note that a DECLARE: DONTEVAL@LOAD will be found and evaluated, but the corresponding expressions won't be evaluated from within the DECLARE: Not worthwhile to bother setting up a complicated edit pattern to screen these out, especially if you consider expressions like (DECLARE: -- DONTEVAL@LOAD -- DOEVAL@LOAD --)") ) ((loadfns compiled) (* ;; "This is going to be a remake, but the original call to LOADFNS didnt specify all the VARS, so some expressions may not have been loaded.") (LOADVARS T SOURCEFILE)) NIL)) (A (GO OUT)) NIL))) (RESETLST [COND ((MEMB 'NOCLISP OPTIONS) (RESETSAVE PRETTYTRANFLG T)) ((MEMB 'CLISP% OPTIONS) (RESETSAVE PRETTYTRANFLG 'BOTH] (RESETSAVE %#UNDOSAVES) [COND ((OR (MEMB 'CLISPIFY OPTIONS) (MEMB 'CLISP OPTIONS)) (RESETSAVE CLISPIFYPRETTYFLG T)) ((OR (EQ FILETYPE 'CLISP) (MEMB 'CLISP (LISTP FILETYPE))) (RESETSAVE CLISPIFYPRETTYFLG 'CHANGES] (for X in MAKEFILEFORMS do (ERSETQ (EVAL X))) (SETQ FILE (PRETTYDEF NIL FILE (fetch COMSNAME of FILEPROP) REPRINTFNS SOURCEFILE CHANGES))) (SETQ LASTFILE ROOTNAME) (/replace TOBEDUMPED of FILEPROP with NIL) (COND ((NOT (EQMEMB 'DON'TLIST FILETYPE)) (pushnew NOTLISTEDFILES ROOTNAME))) (COND ((NOT (EQMEMB 'DON'TCOMPILE FILETYPE)) (pushnew NOTCOMPILEDFILES ROOTNAME))) [for TAIL OPT on OPTIONS do (SETQ OPT (CAR TAIL)) (SELECTQ OPT (RC (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE T (CDR TAIL)))) (C (AND (MEMB ROOTNAME NOTCOMPILEDFILES) (MAKEFILE1 FILE NIL (CDR TAIL)))) (LIST (AND (MEMB ROOTNAME NOTLISTEDFILES) (APPLY 'LISTFILES (LIST FILE)))) (COND ((MEMB OPT MAKEFILEOPTIONS)) ((FIXSPELL OPT NIL MAKEFILEOPTIONS NIL OPTIONS) (GO $$LP)) (T (ERROR "Unrecognized MAKEFILE option" OPT] (RETURN FILE) OUT (RETURN (LIST FILE "-- MAKEFILE not performed."]) (FILECHANGES [LAMBDA (FILE TYPE) (* bvm%: "30-Aug-86 15:08") (* ;; "If FILE is a list, it is assumed to be a file-created expressions; otherwise, the filecreated expression is read from FILE. If TYPE, returns the list of changed items of that type from the changes expression. If TYPE=NIL, returns the whole list of typed change-lists") (PROG ([FCEXPR (OR (LISTP FILE) (AND FILE (RESETLST (LET (OLDPTR STREAM) [if (SETQ STREAM (OPENP FILE 'INPUT)) then (SETQ OLDPTR (GETFILEPTR STREAM)) (SETFILEPTR STREAM 0) else (RESETSAVE NIL (LIST 'CLOSEF (SETQ STREAM (OPENSTREAM FILE 'INPUT] (CL:MULTIPLE-VALUE-BIND (ENV FC) (\PARSE-FILE-HEADER STREAM 'RETURN) (if OLDPTR then (SETFILEPTR STREAM OLDPTR)) FC)))] FNS CHANGES) (SETQ CHANGES (LDIFF (SETQ CHANGES (CDR (MEMB 'to%: FCEXPR))) (MEMB 'previous CHANGES))) [if (AND TYPE (NEQ TYPE 'FNS)) then (RETURN (CDR (ASSOC TYPE CHANGES] (SETQ FNS (SUBSET CHANGES (FUNCTION LITATOM))) (* ;  "Old style changes expression listed FNS by name and other things by type") (RETURN (if TYPE then (* ; "TYPE=FNS cause of test above.") (NCONC FNS (CDR (ASSOC 'FNS CHANGES))) elseif FNS then (CONS (CONS 'FNS FNS) (SUBSET CHANGES (FUNCTION LISTP))) else CHANGES]) (FILEPKG.MERGECHANGES [LAMBDA (C1 C2) (* rmk%: "24-MAY-82 23:09") (* ;; "Merges 2 changes lists into a single one. Treat LITATOM's as FNS, to accomodate old-style format on files.") (for E2 TEMP (VAL _ (for E1 in C1 when (CDR (LISTP E1)) collect (APPEND E1))) in C2 do [COND ((SETQ TEMP (ASSOC (CAR E2) VAL)) (NCONC TEMP (for X in (CDR E2) unless (MEMBER X (CDR TEMP)) collect X))) (T (SETQ VAL (NCONC1 VAL (APPEND E2] finally (RETURN VAL]) (FILEPKG.CHANGEDFNS [LAMBDA (CHANGES) (* rmk%: "20-MAY-82 22:00") (* ;; "Returns list of function names from a file-changes list. Interprets old format (functions are atoms) and new format (with explicit type headers)") (CDR (ASSOC 'FNS CHANGES]) (MAKEFILE1 [LAMBDA (FILE RECOMPFLG OPTIONS OTHERFILES) (* ; "Edited 27-Oct-2020 15:40 by rmk:") (* ; "Edited 29-Aug-89 11:46 by bvm") (* ;; "RMK: Call COMPILE-FILE? with FILE instead of (ROOTFILENAME FILE)") (PROG ((ROOTNAME (ROOTFILENAME FILE)) (COMPILER (COMPILE-FILE? FILE)) GROUP) (COND ((AND (OR (EQ COMPILER 'BCOMPL) (EQ COMPILER 'TCOMPL)) (NOT (FILEFNSLST ROOTNAME))) (* ;  "No FNS on this file, and we're told to use Interlisp compiler, so nothing to do.") (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE ROOTNAME NOTCOMPILEDFILES)) (RETURN NIL))) (COND ([find X in (SETQ GROUP (GETPROP ROOTNAME 'FILEGROUP)) suchthat (AND (NEQ X ROOTNAME) (OR (fetch TOBEDUMPED of (fetch FILEPROP of X)) (MEMB X OTHERFILES] (* ;; "The file in question must be recompiled with other files, and one of the remaining files still needs to be dumped, or else one of the other file is further down the list of files being compiled. Wait.") (RETURN))) (LISPXPRIN1 '" compiling " T) (LISPXPRINT (OR GROUP FILE) T T) (LISPXPRINT (LET [[REDEFINE? (OR (EQ (CAR OPTIONS) 'ST) (EQ (CAR OPTIONS) 'STF] (FORGET-EXPRS? (EQ (CAR OPTIONS) 'STF] (SELECTQ COMPILER ((FAKE-COMPILE-FILE) (* ;  "The old CommonLispy interface to the ByteCompiler.") (FAKE-COMPILE-FILE FILE :REDEFINE REDEFINE? :SAVE-EXPRS (AND REDEFINE? (NOT FORGET-EXPRS?)))) ((CL:COMPILE-FILE) (* ; "The new, improved (?) compiler") (CL:COMPILE-FILE FILE :LOAD (COND ((AND REDEFINE? (NOT FORGET-EXPRS? )) :SAVE) (REDEFINE? T) (T NIL)))) ((TCOMPL BCOMPL) (* ; "The old ByteCompiler") [IF (MEMB (CAR OPTIONS) '(ST F S STF)) THEN (LISPXUNREAD (LIST (CAR OPTIONS] [IF GROUP THEN (* ;;  "File contained in FILEGROUP. Therefore must be blockcompiled.") (IF RECOMPFLG THEN (BRECOMPILE GROUP) ELSE (BCOMPL GROUP)) ELSEIF (EQ COMPILER 'TCOMPL) THEN (IF RECOMPFLG THEN (RECOMPILE FILE) ELSE (TCOMPL (LIST FILE))) ELSE (IF RECOMPFLG THEN (BRECOMPILE FILE) ELSE (BCOMPL (LIST FILE]) (SHOULDNT "Non-existent compiler returned from COMPILE-FILE?..."))) T T]) (COMPILE-FILE? [LAMBDA (FILE) (* ; "Edited 27-Oct-2020 15:39 by rmk:") (* ; "Edited 19-Jan-87 21:12 by Pavel") (* ;; "RMK: Argument is FILE instead of ROOTFILENAME, maybe more information") (* ;;; "Which compiler should CLEANUP use?") (LET ((TYPE (GET (ROOTFILENAME FILE) 'FILETYPE)) (UNKNOWN NIL)) (FOR X INSIDE TYPE DO (SELECTQ X ((TCOMPL :TCOMPL) (RETURN 'TCOMPL)) ((BCOMPL :BCOMPL) (RETURN 'BCOMPL)) ((:FAKE-COMPILE-FILE CL:COMPILE-FILE COMPILE-FILE) (RETURN 'FAKE-COMPILE-FILE)) ((:COMPILE-FILE :XCL-COMPILE-FILE) (RETURN 'CL:COMPILE-FILE)) ((CLISP) NIL) (SETQ UNKNOWN T)) FINALLY (IF UNKNOWN THEN (CL:FORMAT T "~2%%**Warning: unknown FILETYPE value ~S~2%%" TYPE )) (RETURN *DEFAULT-CLEANUP-COMPILER*]) (MAKEFILES [LAMBDA (OPTIONS FILES) (* rmk%: "23-FEB-83 21:20") (RESETVARS (%#UNDOSAVES) (* ;  "Willing to save arbitrary amounts of undo info") (UPDATEFILES) [COND ((NULL FILES) (for TYPE FLG in FILEPKGTYPES when [FILES?1 TYPE (COND ((NULL FLG) (* ; "Gets printed the first time") ' "****NOTE: the following are not contained on any file: ") (T '" "] do (SETQ FLG T) finally (AND FLG (ADDTOFILES?] (SETQ OPTIONS (MKLIST OPTIONS)) (RETURN (for FILE inside (OR FILES FILELST) when [fetch TOBEDUMPED of (LISTP (fetch FILEPROP of (ROOTFILENAME FILE] collect (LISPXPRIN2 FILE T T) (LISPXPRIN1 '|...| T) (PROG1 (MAKEFILE FILE OPTIONS) (LISPXTERPRI T]) (ADDFILE [LAMBDA (FILE LOADTYPE PRLST FCLST) (* bvm%: "29-Aug-86 12:22") (* ;; "PRLST is the FILEPKGCHANGES prior to this file operation, FCLST is a list of file-created arguments, a singleton for a symbolic file, and a list whose car represents the compiled file and whose cdr represent symbolic files compiled into it, for compiled files.") (PROG ((ROOTNAME (ROOTFILENAME FILE)) FLST VAL) [COND ((NOT FCLST) (SETQ VAL (ADDFILE0 ROOTNAME LOADTYPE FILE))) [(NULL (CDR FCLST)) (* ; "A simple symbolic file") (SETQ FCLST (CAR FCLST)) (SETQ VAL (ADDFILE0 (COND ((LITATOM (CADR FCLST)) (ROOTFILENAME (CADR FCLST))) (T ROOTNAME)) LOADTYPE FILE (CAR FCLST] (T (* ;; "A compiled file, skip the first expression representing the compiled file itself, look at the cdr representing the symbolic files.") (SELECTQ LOADTYPE ((T LOADFNS) (SETQ LOADTYPE 'Compiled)) (loadfns (SETQ LOADTYPE 'compiled)) (LOADCOMP (* ;  "loadcomp on compiled file. Don't notice since we don't know what its state is") NIL) (SHOULDNT)) (for X in (CDR FCLST) when (LITATOM (CADR X)) do (push FLST (CADR X)) (OR (EQ LOADTYPE 'LOADCOMP) (ADDFILE0 (ROOTFILENAME (CADR X)) LOADTYPE (CADR X) (CAR X] (UPDATEFILES PRLST (OR FLST (LIST FILE))) [AND LOADTYPE (for TYPE CHANGED in FILEPKGTYPES when (AND (LITATOM TYPE) (SETQ CHANGED (fetch CHANGED of TYPE))) do (/replace CHANGED of TYPE with (INTERSECTION (CDR (ASSOC TYPE PRLST)) CHANGED] (AND ADDSPELLFLG (ADDSPELL ROOTNAME USERWORDS)) (RETURN VAL]) (ADDFILE0 [LAMBDA (ROOTNAME LOADTYPE FULLNAME DAT) (* lmm "28-Nov-84 16:47") (PROG (COMS X FILEPROP FLG TEM) TOP (SETQ COMS (FILECOMS ROOTNAME)) [COND ((SETQ FILEPROP (fetch FILEPROP of ROOTNAME)) (COND ([AND LOADTYPE (FMEMB LOADTYPE (CDR (FMEMB (fetch LOADTYPE of FILEPROP) '(LOADCOMP loadfns compiled Compiled LOADFNS COMPILED NIL T] (/replace LOADTYPE of FILEPROP with LOADTYPE) (* ;; "This call to ADDFILE reflects a 'higher' degree of loading, so upgrade property. 'loadfns' means just some information from file, if go to do makefile, must do loadfrom, 'compiled' is like 'loadfns' but for compiled files e.g. user does LOADFNS on compiled file. 'Compiled' means all but DECLARE: expressions are in. e.g. user does LOAD of a compiled file. COMPILED means everything is in, e.g. user does LOADDFROM a compiled file. LOADFNS means everything in, e.g. user des LOADFROM symbolic file. COMPILED and LOADFNS are equivalent in that means dont have to do any more loading when go to do a makefile but makefile NEW isnt permitted. NIL is a makefile when coms were set up in core. T is full load of symbolic file. The check on TYPE=NIL is bcause dont want to upgrade as result of call from makefile, i.e. no new information there.") (* ;; "LOADCOMP means file was loadcomp'ed. note that the actual structure is a tree, not a list, and the above is only an approximation. if you do a loadcomp, and then load the compiled file, the state will be left with latter, but then loadcomp? will loadcomp again because compiled files might not contain all the declare: EVAL@COMPILE expressions, e.g. macros, records etc. however, in most cases, loadcomp is used independently of other loading, e.g. for compilation purposes only, so this will at least permit loadcomp? to work.") (GO OUT)) (T (GO OUT1] (COND [(OR LOADTYPE (LISTP (GETTOPVAL COMS))) (SETQ FILEPROP (/replace FILEPROP of ROOTNAME with (create FILEPROP COMSNAME _ COMS LOADTYPE _ LOADTYPE] (FLG (GO ERROR)) ((AND DWIMFLG (EQ ROOTNAME FULLNAME) (SETQ ROOTNAME (MISSPELLED? ROOTNAME 70 FILELST T))) (* ;; "The EQ check is so as not to try correcting if the user has specified a version number or directory, as it is too messy trying to take them out, and then put them back in on the corrected root name.") (SETQ FULLNAME ROOTNAME) (SETQ FLG T) (* ;  "so wont try to spelling correct again if file isnt there") (GO TOP)) (T (GO ERROR))) OUT [AND LOADTYPE DAT (/replace FILEDATES of ROOTNAME with (LIST (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ FULLNAME] (AND (EQ LOADTYPE T) (/replace TOBEDUMPED of FILEPROP with NIL)) OUT1 [COND ([AND (LISTP (GETTOPVAL COMS)) (NOT (FMEMB ROOTNAME (GETTOPVAL 'FILELST] (* ;  "coms wuld not be set up on a loadccomp.") (/SETTOPVAL 'FILELST (CONS ROOTNAME (GETTOPVAL 'FILELST] (RETURN (COND ((NULL LOADTYPE) (* ; "call from makefile.") (CONS FULLNAME (CONS ROOTNAME FILEPROP))) (T FILEPROP))) ERROR (ERROR FULLNAME "not file name." T]) (LISTFILES [NLAMBDA FILES (* rmk%: " 3-Dec-84 08:58") (DECLARE (GLOBALVARS NOTLISTEDFILES)) (* ; "LISTFILES1 is machinedependent") (for FILE FULLNAME OPTIONS in (COND (FILES (SETQ FILES (NLAMBDA.ARGS FILES))) (T NOTLISTEDFILES)) when (COND ((LISTP FILE) (SETQ OPTIONS (APPEND FILE OPTIONS)) NIL) ((SETQ FULLNAME (FINDFILE FILE)) FULLNAME) (T (printout T FILE " not found." T) NIL)) collect [COND ((LISTFILES1 FULLNAME OPTIONS) (SETQ NOTLISTEDFILES (REMOVE (NAMEFIELD FULLNAME T) NOTLISTEDFILES] FULLNAME]) ) (RPAQ? *DEFAULT-CLEANUP-COMPILER* 'CL:COMPILE-FILE) (RPAQ? FILELST ) (RPAQ? LOADEDFILELST ) (RPAQ? NOTLISTEDFILES ) (RPAQ? NOTCOMPILEDFILES ) (RPAQ? MAKEFILEFORMS ) (RPAQ? NILCOMS ) (ADDTOVAR MAKEFILEOPTIONS RC C LIST FAST CLISP CLISPIFY NIL REMAKE NEW NOCLISP CLISP% F ST STF (REC . RC) (BREC . RC) (TC . C) (BC . C) (TCOMPL . C) (BCOMPL . C)) (RPAQ? MAKEFILEREMAKEFLG T) (RPAQ? CLEANUPOPTIONS '(RC)) (* ;; "scanning file coms") (DEFINEQ (FILEPKGCHANGES [LAMBDA N (* Pavel " 7-Oct-86 19:22") (COND [(EQ N 0) (PROG (TEM) (RETURN (for X in FILEPKGTYPES when (AND (LITATOM X) (SETQ TEM (FILEPKGCHANGES X))) collect (CONS X TEM] [(EQ (ARG N 1) T) (for X in FILEPKGTYPES when (LITATOM X) collect (CONS X (FILEPKGCHANGES X] [(EQ N 1) (COND [(LISTP (ARG N 1)) (for X in (ARG N 1) when (FMEMB (CAR X) FILEPKGTYPES) do (/replace CHANGED of (CAR X) with (CDR X] (T (for Y on (fetch CHANGED of (ARG N 1)) when [AND (CAR Y) (NOT (for Z in (CDR Y) thereis (CL:EQUAL (CAR Y) Z] collect (CAR Y] (T (/replace CHANGED of (ARG N 1) with (ARG N 2]) (GETFILEPKGTYPE [LAMBDA (TYPE ONLY NOERROR NAME) (* lmm "20-Nov-86 23:10") (* ;; "Coerce TYPE to a well defined definition type (FILEPKG type) or a command. ONLY is an indicator of which is acceptable; if NIL, either one is acceptable, if COMS, only commands are acceptable, and if TYPES, only types should be returned. If none is found, will signal an error if NOERROR is NIL, otherwise return NIL. ") (COND [(LISTP TYPE) (* ;; " given a list of types, coerce them all or return NIL") (for X in TYPE collect (OR (GETFILEPKGTYPE X ONLY NOERROR NAME) (RETURN] ((EQ TYPE '?) (* ;; "odd case, may be obsolete: if given IL:?, return all known types of NAME. Maybe used by EDITDEF(NAME ?)?? ") (AND NAME (TYPESOF NAME))) [(AND (NEQ ONLY 'COMS) (OR (SELECTQ TYPE (NIL 'FNS) (T 'VARS) NIL) (for X in FILEPKGTYPES do (if (EQ TYPE X) then (* ;; "type matched exactly") (RETURN TYPE) elseif (AND (LISTP X) (EQ TYPE (CAR X))) then (RETURN (CDR X] [(AND (NEQ ONLY 'TYPE) (LITATOM TYPE) (PROG1 (CAR (FMEMB TYPE FILEPKGCOMSPLST)) (* ; "Prefer an exact match quickly") ] [(AND (NEQ ONLY 'COMS) (LITATOM TYPE) (for X in FILEPKGTYPES bind NAME do (SETQ NAME (if (NLISTP X) then X else (CAR X))) (* ;; "see if spelled the same or 1 char shorter; assume all FILEPKGTYPE names end with S. This handles package conversions and also pluralization") (AND (<= 0 (- (NCHARS NAME) (NCHARS TYPE)) 1) (STRPOS TYPE NAME) (RETURN (if (EQ X NAME) then X else (CDR X] [(FIXSPELL TYPE NIL (SELECTQ ONLY (TYPE FILEPKGTYPES) (COMS FILEPKGCOMSPLST) (UNION FILEPKGTYPES FILEPKGCOMSPLST] ((NOT NOERROR) (ERROR (SELECTQ ONLY (TYPE "unrecognized manager definition type") (COMS "unrecognized manager command") "unrecognized manager definition-type/command") TYPE]) (MARKASCHANGED [LAMBDA (NAME TYPE REASON) (* ; "Edited 25-May-88 15:37 by drc:") (COND (FILEPKGFLG (SETQ REASON (SELECTQ REASON ((CLISP LOAD CHANGED DEFINED DELETED) REASON) (NIL 'CHANGED) (T 'DEFINED) (ERROR "bad REASON in MARKASCHANGED" REASON))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (for FN inside (fetch WHENCHANGED of TYPE) do (APPLY* FN NAME TYPE REASON)) (for FN in MARKASCHANGEDFNS do (APPLY* FN NAME TYPE REASON)) [COND ((EQ REASON 'DELETED) (for L on (fetch CHANGED of TYPE) when (EQUAL (CAR L) NAME) do (/RPLACA L NIL)) (* ;  "unmark as changed and remove from files") (DELFROMFILES NAME TYPE)) (T (LET ((LST (push (fetch CHANGED of TYPE) NAME))) (AND LISPXHIST (UNDOSAVE (LIST '/RPLACA LST) LISPXHIST)) (* ;  "UNDO by smashing with NIL; makes calls to MARKASCHANGED independent") ] NAME]) (FILECOMS [LAMBDA (FILE X) (* rmk%: "19-FEB-83 13:55") (COND ((AND (NULL FILE) (NULL X)) 'NILCOMS) [(AND (OR (NULL X) (EQ X 'COMS)) (fetch COMSNAME of (LISTP (fetch FILEPROP of FILE] (T (PACK* (NAMEFIELD FILE) (OR X 'COMS]) (WHEREIS [LAMBDA (NAME TYPE FILES FN) (* ; "Edited 12-Jul-88 17:14 by MASINTER") (* ;; "T as a NAME has a special meaning to INFILECOMS? so don't pass through.") (CL:UNLESS (EQ NAME T) (LET [(IN-FILES (UNION [SUBSET (OR (LISTP FILES) FILELST) (FUNCTION (LAMBDA (FILE) (INFILECOMS? NAME TYPE (FILECOMS FILE] (AND (EQ FILES T) (CL:FBOUNDP 'XCL::HASH-FILE-WHERE-IS) (LET ((FILES NIL)) (for TY inside TYPE do (for FILE-NAME in (XCL::HASH-FILE-WHERE-IS NAME (GETFILEPKGTYPE TYPE)) do (CL:PUSHNEW (MKATOM (U-CASE FILE-NAME)) FILES))) (REVERSE FILES] (CL:IF FN [MAPC IN-FILES (FUNCTION (LAMBDA (FILE) (APPLY* FN NAME FILE] IN-FILES)))]) (SMASHFILECOMS [LAMBDA (FILE) (* rmk%: "19-FEB-83 22:15") (for X in (FILECOMSLST FILE 'FILEVARS) when (LITATOM X) do (SETTOPVAL X 'NOBIND)) FILE]) (FILEFNSLST [LAMBDA (FILE) (* ; "Edited 14-Jun-90 19:30 by jds") (FILECOMSLST FILE '(FUNCTIONS FNS]) (FILECOMSLST [LAMBDA (FILE TYPE FLG) (* JonL "24-Jul-84 19:48") (* ;  "TYPE is coerced in the innards of INFILECOMS?") (COND ((EQ FLG 'UPDATE) (CDR (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG))) (T (INFILECOMS? NIL TYPE (FILECOMS FILE) FLG]) (UPDATEFILES [LAMBDA (PRLST FLST) (* rmk%: "19-FEB-83 14:27") (* ;; "PRLST may be the value of FILEPKGCHANGES before some operation (e.g. LOAD, LOADFNS) involving the files in FLST began.") (for TYPE CHANGED in FILEPKGTYPES when (SETQ CHANGED (fetch CHANGED of TYPE)) do (COND ((NULL (SETQ CHANGED (FILEPKGCHANGES TYPE))) (* ;  "FILEPKGCHANGES eliminates duplicates") (/replace CHANGED of TYPE with NIL)) (T (for FILE FOUND FILEPROP COMS LST TYPEDPROP PCHANGES (PREVITEMS _ (CDR (ASSOC TYPE PRLST))) in FILELST first (SETQ LST (INFILECOMS? CHANGED TYPE 'NILCOMS 'UPDATE)) (* ;; "First check NIL=Nowhere. LST:1 contains variables whose values are on the file literally. These are `found' but not marked. LST::1 contains all other items.") (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND)) do (SETQ PCHANGES (COND ((FMEMB (fetch DATEFILENAME of (CAR (fetch FILEDATES of FILE))) FLST) (* ;; "PREVITEMS are changed items that were previously on the changed list, before PRLST was computed as this LOAD/LOADFNS began. Thus, by this intersection we only worry about items that were previously changed; any items that were only changed during this operation are ignored.") (INTERSECTION CHANGED PREVITEMS)) (T CHANGED))) [COND ([AND PCHANGES [SETQ COMS (fetch COMSNAME of (SETQ FILEPROP (LISTP (fetch FILEPROP of FILE] (SETQ LST (INFILECOMS? PCHANGES TYPE COMS 'UPDATE] (* ;; "LST:1 is a list of the times that literally appear on this file, LST::1 is a list of those whose literal values are not in the coms") [COND ((CDR LST) (* ; "CDR items must be distributed") [COND ((NULL (fetch TOBEDUMPED of FILEPROP)) (* ;; "Only finagle global lists the first time an item is added to PROP, when PROP::1 goes from NIL to non-NIL") [/SETTOPVAL 'NOTLISTEDFILES (REMOVE FILE (GETTOPVAL 'NOTLISTEDFILES] (/SETTOPVAL 'NOTCOMPILEDFILES (REMOVE FILE (GETTOPVAL ' NOTCOMPILEDFILES ] (* ;  "Get the (possibly new) TYPE item list to smash") [COND [(SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of FILEPROP] (T (/NCONC1 FILEPROP (SETQ TYPEDPROP (CONS TYPE] (* ;  "Now distribute items to the file property") (for Y in (CDR LST) unless (MEMBER Y (CDR TYPEDPROP) ) do (/NCONC1 TYPEDPROP Y] (SETQ FOUND (NCONC (CAR LST) (CDR LST) FOUND] finally (/replace CHANGED of TYPE with (LDIFFERENCE CHANGED FOUND]) (INFILECOMS? [LAMBDA (NAME TYPE COMS ONFILETYPE) (* ; "Edited 12-Jul-88 17:42 by MASINTER") (* ;; "Returns T if NAME is 'CONTAINED' in COMS. If NAME is NIL, then value is a list of all of the functions contained in COMS. If NAME=T, value is T if there are any elements of type TYPE, otherwise NIL (this feature is used for deciding whether or not (and how) to compile files.) Called by FILEFNSLST (which is used by BRECOMPILE) and by NEWFILE1. while elements are the subset of NAME which are on the file in other case") (* ;; "if ONFILETYPE is UPDATE, then NAME is a list of elements, and INFILECOMS? returns the dotted pair of (literals . elements) where literals are those which are `literally' on the file (e.g. (VARS (X 3))) --- if ONEFILETYPE is EDIT, then NAME is interpreted as for ONFILETYPE=NIL, but only those elements which are not on the file literally and which are not subparts of other types are returned") (* ;; "if ONFILETYPE is TYPESOF, type can be a list of types, and returns a list of types suitable for EDITDEF ") (PROG (VAL LITERALS ORIGFLG) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (SELECTQ ONFILETYPE (EDIT (SELECTQ TYPE (FILEVARS (RETURN)) NIL)) NIL) [COND ((LITATOM COMS) (SELECTQ TYPE ((VARS FILEVARS) (* ;  "the COMS of a file are also on it") (INFILECOMSVAL COMS)) NIL) (SETQ COMS (EVALV COMS] (INFILECOMS COMS) (SETQ VAL (DREVERSE VAL)) (RETURN (COND ((EQ ONFILETYPE 'UPDATE) (CONS LITERALS VAL)) (T VAL]) (INFILECOMTAIL [LAMBDA (COM FLG) (* ; "Edited 2-Aug-88 02:15 by masinter") [SETQ COM (COND ((EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (LISTP (EVALV (CADDR COM] (T [RESETVARS (DWIMLOADFNSFLG) (NLSETQ (SETQ COM (EVAL (CADDR COM] COM))) (T (CDR COM] (if (NOT FLG) then (for X in COM do [if (AND (LISTP X) (EQ (CAR X) COMMENTFLG)) then (RETURN (SUBSET COM (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG] finally (RETURN COM)) else COM]) (INFILECOMS [LAMBDA (COMS) (* rmk%: "19-FEB-83 22:17") (for X in COMS do (INFILECOM X]) (INFILECOM [LAMBDA (COM) (* ; "Edited 2-Aug-88 02:27 by masinter") (COND [(NLISTP COM) (COND ((EQ TYPE 'VARS) (INFILECOMSVAL COM] ((EQ (CAR COM) COMMENTFLG) (* ;; "must be special case'd first so that (* * values) doesn't make it look like `values' is a variable") (* ;  "don't know why I should bother, but someone might want to know all of the comments on a file???") (COND ((EQ TYPE COMMENTFLG) (INFILECOMSVAL COM T))) NIL) (T (PROG ((COMNAME (CAR COM)) (TAIL (CDR COM)) CFN TEM) (COND [[COND ((SETQ CFN (fetch (FILEPKGCOM CONTENTS) of COMNAME)) (SETQ TEM (APPLY* CFN COM (COND ((AND (NULL ONFILETYPE) (NOT (CL:SYMBOLP NAME))) (* ;  "call from WHEREIS of a name which is not a symbol") (LIST NAME)) (T NAME)) TYPE ONFILETYPE))) ((SETQ CFN (fetch (FILEPKGCOM PRETTYTYPE) of COMNAME)) (* ; "for compatability") (SETQ TEM (APPLY* CFN COM TYPE NAME] (COND [(NLISTP TEM) (COND ((EQ TEM T) (COND ((OR (EQ NAME T) (NULL ONFILETYPE)) (RETFROM 'INFILECOMS? T] (T (INFILECOMSVALS TEM] ((LISTP TAIL) (* ;; "this SELECTQ handles the `exceptional cases' for the built in types. There is an explicit RETURN in the SELECTQ clause if the default is handled") (SELECTQ COMNAME ((PROP IFPROP) (SETQ TAIL (CDR TAIL))) NIL) [COND ((EQ (CAR TAIL) '*) (COND ((LITATOM (CADR TAIL)) (SELECTQ TYPE ((VARS FILEVARS) (INFILECOMSVAL (CADR TAIL))) NIL)) ((AND (LISTP (CADR TAIL)) (EQ ONFILETYPE 'UPDATE) (EQ TYPE 'VARS) (EQ (CAADR TAIL) 'PROGN) (FMEMB (CAR (LAST (CADR TAIL))) NAME)) (SETQ VAL (CONS (CADR TAIL) VAL] (SELECTQ COMNAME ((COMS EXPORT) (INFILECOMS (INFILECOMTAIL COM T))) (CL:EVAL-WHEN (INFILECOMS (INFILECOMTAIL (CDR COM) T))) (DECLARE%: (* ; "skip over DECLARE: tags") [RETURN (AND (NOT (FMEMB 'COMPILERVARS COM)) (IFCDECLARE (INFILECOMTAIL COM) (EQ TYPE 'DECLARE%:]) (ORIGINAL (* ; "dont expand macros") (PROG ((ORIGFLG T)) (INFILECOMS (INFILECOMTAIL COM T)))) ((PROP IFPROP) (* ;  "this currently does not handle `pseudo-types' of PROPNAMES") (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL (CDR COM) T) (CADR COM))) (MACROS (INFILECOMSMACRO (INFILECOMTAIL (CDR COM)) (CADR COM))) NIL)) (PROPS (RETURN (IFCPROPS COM))) (MACROS (RETURN (SELECTQ TYPE (PROPS (IFCPROPSCAN (INFILECOMTAIL COM T) MACROPROPS)) (MACROS (INFILECOMSVALS (INFILECOMTAIL COM T))) NIL))) (ALISTS (* ;  "sigh. This should probably also `coerce' when asking for LISPXMACROS, etc.") (RETURN (SELECTQ TYPE (ALISTS (INFILEPAIRS (INFILECOMTAIL COM))) NIL))) (P [RETURN (SELECTQ TYPE ((EXPRESSIONS P) (INFILECOMSVALS (INFILECOMTAIL COM T) T)) (COND ((NULL ONFILETYPE) (* ; "for WHEREIS and FILECOMSLST") (SELECTQ TYPE (I.S.OPRS (IFCEXPRTYPE COM 'I.S.OPR)) (TEMPLATES (IFCEXPRTYPE COM 'SETTEMPLATE)) NIL]) ((ADDVARS APPENDVARS) (SELECTQ TYPE (VARS [RETURN (AND (NULL ONFILETYPE) (for X in (INFILECOMTAIL COM T) do (INFILECOMSVAL (CAR X) T]) (ALISTS [RETURN (for X in (INFILECOMTAIL COM T) when (EQMEMB 'ALIST (GETPROP (CAR X) 'VARTYPE)) do (for Z in (CDR X) do (INFILECOMSVAL (LIST (CAR X) (CAR Z)) T]) (OR (EQ TYPE COMNAME) (RETURN)))) ((VARS INITVARS FILEVARS UGLYVARS HORRIBLEVARS CONSTANTS ARRAY) [RETURN (COND ((EQ TYPE 'EXPRESSIONS) (for X in (INFILECOMTAIL COM T) when (AND (LISTP X) (NEQ (CAR X) COMMENTFLG)) do (INFILECOMSVAL (CONS 'SETQ X) T))) ((OR (EQ TYPE 'VARS) (EQ TYPE COMNAME))(* ;  "either want all VARS, or else want all FILEVARS and this is a FILEVARS command") (for X in (INFILECOMTAIL COM T) do (COND ((LISTP X) (AND (CAR X) (NEQ (CAR X) COMMENTFLG) (INFILECOMSVAL (CAR X) T))) (X (INFILECOMSVAL X (EQ COMNAME 'INITVARS]) (DEFS [RETURN (for X in (INFILECOMTAIL COM T) when (EQ TYPE (CAR X)) do (INFILECOMSVALS (CDR X]) (FILES (RETURN)) NIL) (* ;; "Exceptional cases now handled. If TYPE matches (CAR COM) then scan the tail as usual. Else expand the com's MACRO, if it has one, unless there was a CONTENTS function") (COND ((EQ COMNAME TYPE) (INFILECOMSVALS (INFILECOMTAIL COM T))) [(AND (LISTP TYPE) (FMEMB COMNAME TYPE)) (LET ((TYPE COMNAME)) (INFILECOMSVALS (INFILECOMTAIL COM T] ((AND (OR (NULL CFN) (AND (EQ CFN T) (NULL ONFILETYPE))) (NULL ORIGFLG) (SETQ TEM (fetch (FILEPKGCOM MACRO) of COMNAME))) (INFILECOMS (SUBPAIR (CAR TEM) (INFILECOMTAIL COM T) (CDR TEM]) (INFILECOMSVALS [LAMBDA (X FLG) (* ; "Edited 2-Aug-88 02:21 by masinter") (for Y in X when (NOT (AND (LISTP Y) (EQ (CAR Y) COMMENTFLG))) do (INFILECOMSVAL Y FLG]) (INFILECOMSVAL [LAMBDA (X FLG) (* ; "Edited 12-Jul-88 17:56 by MASINTER") (COND [(EQ ONFILETYPE 'UPDATE) (AND (OR (NULL NAME) (MEMBER X NAME)) (COND (FLG (SETQ LITERALS (CONS X LITERALS))) (T (SETQ VAL (CONS X VAL] ((AND (EQ ONFILETYPE 'EDIT) FLG) (* ;  "literals should not be edited as they are on the fileCOMS") NIL) ((EQ ONFILETYPE 'TYPESOF) (AND (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X))) (CL:PUSHNEW TYPE VAL))) ([OR (EQ NAME T) (COND ((LITATOM NAME) (EQ NAME X)) (T (EQUAL NAME X] (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS X VAL]) (INFILECOMSPROP [LAMBDA (AT PROP) (* lmm "25-SEP-81 17:15") (COND [(EQ ONFILETYPE 'UPDATE) (AND [OR (NULL NAME) (find X in NAME suchthat (AND (EQ (CAR X) AT) (EQ (CADR X) PROP] (SETQ VAL (CONS (LIST AT PROP) VAL] ((OR (EQ NAME T) (AND (EQ (CAR NAME) AT) (EQ (CADR NAME) PROP))) (RETFROM (FUNCTION INFILECOMS?) T)) ((NULL NAME) (SETQ VAL (CONS (LIST AT PROP) VAL]) (IFCPROPS [LAMBDA (COM) (* bvm%: " 2-Dec-83 14:24") (* ;;; "Examine a PROPS com for objects of specified TYPE") (SELECTQ TYPE (PROPS (* ;  "the PROPS command can actually take (PROPNAME at1 at2 ...)") (INFILEPAIRS (INFILECOMTAIL COM))) (PROP (* ;  "return the atoms which have any properties at all") (for PAIR in (INFILECOMTAIL COM) do (for ATNAME inside (CAR PAIR) do (INFILECOMSVAL ATNAME )))) (MACROS (* ; "only MACRO properties") (for PAIR in (INFILECOMTAIL COM) do (INFILECOMSMACRO (CAR PAIR) (CDR PAIR)))) NIL]) (IFCEXPRTYPE [LAMBDA (COM FN) (* ; "Edited 6-Apr-87 20:20 by Pavel") (* ;;; "Recognizes expressions in COM (a P com) that are calls to function FN") (for SUBCOM in (INFILECOMTAIL COM) when (AND (EQ (CAR SUBCOM) FN) (EQ (CAR (LISTP (CADR SUBCOM))) 'QUOTE)) do (INFILECOMSVAL (CADR (CADR SUBCOM)) T]) (IFCPROPSCAN [LAMBDA (ATOMS PROPNAMES) (* ; "Edited 2-Aug-88 02:20 by masinter") (* ;;; "Recognizes members of ATOMS as being names (atom prop) of type PROPS for any prop in PROPNAMES") (for AT in ATOMS WHEN (LITATOM AT) unless [COND [(EQ ONFILETYPE 'UPDATE) (COND (NAME (NOT (ASSOC AT NAME] ((LISTP NAME) (NEQ AT (CAR NAME] do (COND ((EQ PROPNAMES 'ALL) (for PROP in (GETPROPLIST AT) by (CDDR PROP) when (NOT (FMEMB PROP SYSPROPS)) collect (INFILECOMSPROP AT PROP))) (T (for PROP inside PROPNAMES do (INFILECOMSPROP AT PROP]) (IFCDECLARE [LAMBDA (TAIL WANTDECLARE) (* ; "Edited 8-Jun-90 18:11 by teruuchi") (PROG ((TAIL TAIL)) LP (COND ((LISTP TAIL) [SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) [AND WANTDECLARE (INFILECOMSVAL (LIST (CAR TAIL) (CADR TAIL] (SETQ TAIL (CDR TAIL))) (DONTEVAL@LOAD [COND ((OR (\STKSCAN 'DOFILESLOAD) (\STKSCAN 'LOAD)) (* ; "Edited by TT (8-June-90 : for AR#9376) In loading, discard the following contents in DECLARE tag %"DONTEVAL@LOAD%"") (RETURN)) (WANTDECLARE (INFILECOMSVAL (CAR TAIL]) (COMPILERVARS (RETURN)) (COND [(FMEMB (CAR TAIL) DECLARETAGSLST) (COND (WANTDECLARE (INFILECOMSVAL (CAR TAIL] (T (INFILECOM (CAR TAIL] (SETQ TAIL (CDR TAIL)) (GO LP]) (INFILEPAIRS [LAMBDA (LST) (* lmm " 4-DEC-78 09:51") (for LL in LST do (for X inside (CAR LL) do (for Y inside (CDR LL) do (INFILECOMSVAL (LIST X Y]) (INFILECOMSMACRO [LAMBDA (ATS PROPS) (* lmm "28-SEP-78 18:35") (* ;; "this function is used, given a PROP or PROPS command, to tell which MACROS are contained in it. --- Normally (e.g. for WHEREIS and FILECOMSLST) it wants to return if the command contains any of the MACROPROPS for the given atom. However, for UPDATE, it only wants a `hit' if the command contains ALL of the macro properties") (for AT inside ATS do (AND [OR (NEQ ONFILETYPE 'UPDATE) (EVERY (PROPNAMES AT) (FUNCTION (LAMBDA (X) (OR (NOT (FMEMB X MACROPROPS)) (EQMEMB X PROPS] [SOME MACROPROPS (FUNCTION (LAMBDA (PROP) (EQMEMB PROP PROPS] (INFILECOMSVAL AT]) ) (* ;; "adding to a file") (DEFINEQ (FILES? [LAMBDA NIL (* bvm%: "27-Oct-86 18:14") (* ;;; "Display each file needing dumping, etc. For files needing dumping, display details of why.") (UPDATEFILES) (LET (FILES CHANGES PRINTED) (for FILE in FILELST when [SETQ CHANGES (fetch TOBEDUMPED of (LISTP (fetch FILEPROP of FILE] do (if (NOT PRINTED) then (LISPXPRIN1 "To be dumped: " T) (SETQ PRINTED T)) (LISPXPRIN2 FILE T) (LISPXPRIN1 " ...changes to " T) [for CH in CHANGES bind TB do (COND ((LISTP CH) [COND (TB (LISPXTAB TB NIL T)) (T (SETQ TB (POSITION T] (LISPXPRIN2 (CAR CH) T) (FILES?PRINTLST (CDR CH))) (T (* ; "old style") (LISPXPRIN2 CH T) (LISPXSPACES 1 T] (LISPXTERPRI T)) (for TYPE FLG in FILEPKGTYPES when (FILES?1 TYPE (AND PRINTED " plus ")) do (SETQ FLG T) finally (if FLG then (OR PRINTED (LISPXPRIN1 "...to be dumped. " T)) (ADDTOFILES?))) (if (SETQ FILES NOTCOMPILEDFILES) then (FILES?PRINTLST FILES "To be compiled: ") (LISPXTERPRI T)) (if (SETQ FILES NOTLISTEDFILES) then (FILES?PRINTLST FILES "To be listed: ") (LISPXTERPRI T)) (CL:VALUES]) (FILES?1 [LAMBDA (TYPE FIRST) (* bvm%: "27-Oct-86 18:17") (* ;; "If there are changed objects of TYPE, then print them out, preceded by FIRST (if given) plus a descriptive string, and return T.") (LET (STR LST) (COND ([AND (LITATOM TYPE) (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (fetch CHANGED of TYPE] (AND FIRST (LISPXPRIN1 FIRST T)) (LISPXPRIN1 '"the " T) (LISPXPRIN1 STR T) (FILES?PRINTLST LST) (LISPXTERPRI T) T]) (FILES?PRINTLST [LAMBDA (LST STR) (* bvm%: "27-Oct-86 18:15") (* ;; "Print elements of LST separated by commas and indenting new lines a bunch. If MAPRINT had a left margin arg, this would be simpler.") (MAPRINT LST T (OR STR ": ") NIL ", " [FUNCTION (LAMBDA (STR) (COND ((> (+ (POSITION T) (NCHARS STR T T) 3) (LINELENGTH NIL T)) (LISPXTERPRI T) (LISPXPRIN1 " " T))) (LISPXPRIN2 STR T T] T]) (ADDTOFILES? [LAMBDA (NOASKSTR) (* ; "Edited 10-Aug-2020 21:18 by rmk:") (* ; "Edited 21-Aug-91 10:13 by jds") (* ;; "ask user about all of the things that need to be dumped, and distribute them to the files that he says") (* ;; "RMK: Eliminated literal CR's in the key list.") (ERSETQ (PROG [BUFS (VARSCHANGES (fetch (FILEPKGTYPE CHANGED) of 'VARS] (* ;; "Save VARS list at the beginning, so that changes that might occur from adding things to files (e.g. changing NILCOMS) will not be processed differently depending on the order of elements in FILEPKGTYPES") [COND (NOASKSTR (PRIN1 NOASKSTR T)) (T (DOBE) (SETQ BUFS (READP T)) (SELECTQ (ASKUSER DWIMWAIT 'N '("want to say where the above go") `([Y ,(CONCAT "es" (CHARACTER (CHARCODE EOL] [N ,(CONCAT "o" (CHARACTER (CHARCODE EOL] (%] ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING "] - nowhere, all items will be marked as dummy " NOECHOFLG T)) T) (N (RETURN)) (%] (* ; "Nowhere") (for TYPE in FILEPKGTYPES do (for NAME in (fetch (FILEPKGTYPE CHANGED) of TYPE) do (ADDTOFILE NAME TYPE NIL))) (RETURN)) NIL) (* ;  "if there was type-ahead BEFORE the askuser, then don't allow it now") (COND (BUFS (SETQ BUFS (COND ((READP T) (LINBUF) (SYSBUF) (SETQ BUFS (CLBUFS NIL T READBUF] [for TYPE STR LST in FILEPKGTYPES when [AND (SETQ STR (fetch DESCRIPTION of TYPE)) (LISTP (SETQ LST (COND ((EQ TYPE 'VARS) VARSCHANGES) (T (fetch (FILEPKGTYPE CHANGED) of TYPE] do (printout T "(" STR ")" T) (for NAME TEM FILE in LST when NAME do (PROG NIL LP (PRIN2 NAME T) (SPACES 2 T) (* ;; "if user typed ahead before entering addtofiles?? then dont allow typeahead here, because it will justgobble his earlier typeahead.") (* ;; "SELCHARQ to avoid literal CR") (SELCHARQ (CHCON1 (SETQ TEM (ASKUSER NIL NIL NIL ADDTOFILEKEYLST T))) (%[ (ERSETQ (PROGN (SHOWDEF NAME TYPE T) (* ;; "the DOBE is so that if the user control-E's after the printout is done but before it appears on the screen that the control-E will merely clear output buffer") (DOBE))) (GO LP)) (%] (* ; "Nowhere") (SETQ FILE)) (SPACE (* ; "No action") (RETURN)) ((LF =) (PRINT (OR (SETQ FILE LASTFILE) 'Nowhere) T)) (SETQ FILE TEM)) (OR (ERSETQ (PROG (TEM COMSNAME PLACE LISTNAME NEAR) (SETQ PLACE (WHATIS FILE NIL TYPE)) [COND ((LITATOM PLACE) (* ; "file name") (SETQ FILE PLACE) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "This isn't factored to the end, cause ADDTOLISTNAME might have to deal with a set of old elements on the listname.") ) ((EQ (CAR PLACE) 'Near%:) (SETQ NEAR (CADR PLACE)) (COND ([SOME FILELST (FUNCTION (LAMBDA (FL) (ADDTOCOMS (FILECOMS (SETQ FILE FL)) NAME TYPE NEAR LISTNAME] (PRINT (LIST 'on FILE) T T)) (T (PRINT (LIST (CADR PLACE) 'not 'found) T T) (ERROR!))) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE))) ([OR [UNDONLSETQ (PROGN (SAVESET (SETQ LISTNAME (CAR PLACE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT) (OR (SETQ FILE (CAR (WHEREIS NAME TYPE FILELST))) (ERROR!] (SOME FILELST (FUNCTION (LAMBDA (X) (ADDTOCOMS (FILECOMS (SETQ FILE X)) NAME TYPE NEAR LISTNAME] (PRIN1 " value is filed on " T) (PRINT FILE T T) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (* ;; "Only have to notice the single new item here, unlike the case in ADDNEWCOM below, cause other items on the list already belong and were previously noticed") ) (T (PRIN1 " put list " T) (PRIN2 (CAR PLACE) T T) (SETQ FILE (WHATIS (ASKUSER NIL NIL " on file: " '(("" "" EXPLAINSTRING "a file name" KEYLST ())) T) 'FILE)) (SAVESET (CAR PLACE) (MERGEINSERT NAME (LISTP (GETTOPVAL (CAR PLACE))) T) T 'NOPRINT) (* ;; "Add new item before new command, so that user's new command function can inspect (CAR PLACE) and see all the items involved.") (ADDNEWCOM (FILECOMS FILE) NAME TYPE (CAR PLACE) FILE) (for F in (fetch WHENFILED of TYPE) do (for I in (GETTOPVAL (CAR PLACE)) do (APPLY* F I TYPE FILE] (AND FILE (ADDFILE FILE)) (SETQ LASTFILE PLACE))) (GO LP] (AND BUFS (BKBUFS BUFS)) (UPDATEFILES]) (ADDTOFILE [LAMBDA (NAME TYPE FILE NEAR LISTNAME) (* lmm "21-Nov-84 11:43") (* ; "adds NAME to the file FILE") (PROG (TEM COMSNAME) [SETQ TYPE (OR (GETFILEPKGTYPE TYPE NIL T) (COND ((FMEMB TYPE FILELST) (GETFILEPKGTYPE (swap TYPE FILE))) (T (GETFILEPKGTYPE TYPE] (SETQ FILE (WHATIS FILE 'FILE)) (OR (ADDTOCOMS (SETQ COMSNAME (FILECOMS FILE)) NAME TYPE NEAR LISTNAME) (ADDNEWCOM COMSNAME NAME TYPE NIL FILE)) (for F in (fetch WHENFILED of TYPE) do (APPLY* F NAME TYPE FILE)) (AND FILE (NOT (FMEMB FILE FILELST)) (ADDFILE FILE)) (RETURN FILE]) (WHATIS [LAMBDA (USERINPUT ONLY) (* lmm "28-Nov-84 16:49") (* ;; "decides whether USERINPUT is a file or a list name --- if ONLY is nil, means either a listname or a filename is accepatble; if ONLY is LIST then only a listname is acceptable and if ONLY is FILE then only a file name is acceptable") (PROG (TEM UCASE) (RETURN (COND ((NULL USERINPUT) (* ; "nowhere") NIL) [(LISTP USERINPUT) (COND (ONLY (ERROR!)) (T (SELECTQ (CAR USERINPUT) ((@ Near%:) (CONS 'Near%: (CDR USERINPUT))) (WHATIS (CAR USERINPUT) 'LIST] ([AND (NEQ ONLY 'LIST) (OR (FMEMB (SETQ TEM (SETQ UCASE (U-CASE USERINPUT))) FILELST) (LISTP (GETTOPVAL (FILECOMS UCASE))) (SETQ TEM (FIXSPELL UCASE NIL FILELST T] TEM) ((AND (NEQ ONLY 'FILE) (LISTP (GETTOPVAL USERINPUT))) (LIST USERINPUT)) ((AND (NEQ ONLY 'LIST) (EQ (ASKUSER NIL NIL (LIST "create new file" UCASE) NIL T) 'Y)) UCASE) ((AND (NEQ ONLY 'FILE) (EQ (ASKUSER NIL NIL (LIST "create new list" USERINPUT) NIL T) 'Y)) (LIST USERINPUT)) (T (* ; "none of above") (ERROR!]) (ADDTOCOMS [LAMBDA (COMS NAME TYPE NEAR LISTNAME) (* rmk%: "10-JUN-82 22:53") (* ;; "try to insert NAME of type TYPE command list COMS (either a coms name, or a just a list of coms); return NIL if unsuccessful. If LISTNAME is given, then only insert by adding to LISTNAME. If NEAR is given, only insert near it") (COND ((NULL COMS) NIL) [(LITATOM COMS) (* ;  "given a name of a command; rebind COMSNAME to current variable and try to add to its value") (OR [PROG ((COMSNAME COMS)) (RETURN (ADDTOCOMS (LISTP (GETTOPVAL COMSNAME)) NAME TYPE NEAR (AND (NEQ COMS LISTNAME) LISTNAME] (AND (EQ COMS LISTNAME) (ADDNEWCOM COMS NAME TYPE] (T (SETQ TYPE (GETFILEPKGTYPE TYPE)) (for TAIL on COMS do (COND [(LISTP (CAR TAIL)) (COND ((ADDTOCOM (CAR TAIL) NAME TYPE NEAR LISTNAME) (RETURN T] (T (SELECTQ (CAR TAIL) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ TAIL (CDR TAIL))) NIL]) (ADDTOCOM [LAMBDA (COM NAME TYPE NEAR LISTNAME) (* ; "Edited 2-May-87 19:04 by Pavel") (* ;  "tries to insert NAME into the prettycom COM; returns NIL if unsuccessful") (PROG (TEM) (COND ([AND NEAR (NOT (INFILECOMS? NEAR TYPE (LIST COM] (RETURN))) [COND ((SETQ TEM (fetch ADD of (CAR COM))) (RETURN (COND ((OR (NULL LISTNAME) (INFILECOMS? LISTNAME 'FILEVARS (LIST COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE NEAR)) (MARKASCHANGED COMSNAME 'VARS)) TEM] (RETURN (SELECTQ (CAR COM) (FNS (AND (EQ TYPE 'FNS) (ADDTOCOM1 COM NAME NEAR LISTNAME))) ((VARS INITVARS) (COND ((OR (EQ (CAR COM) 'VARS) NEAR LISTNAME) (* ;  "Don't stick on INITVARS unless NEAR or LISTNAME says we should.") (SELECTQ TYPE (EXPRESSIONS (COND ((EQ (CAR NAME) 'SETQ) (ADDTOCOM1 COM (CDR NAME) NEAR LISTNAME)))) (VARS (ADDTOCOM1 COM NAME NEAR LISTNAME)) NIL)))) (COMS (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME)) (DECLARE%: (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE NEAR LISTNAME))) (CL:EVAL-WHEN (AND (OR LISTNAME NEAR) (ADDTOCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE NEAR LISTNAME))) ((PROP IFPROP) (SELECTQ TYPE (PROPS (COND ((EQ (CADR COM) (CADR NAME)) (ADDTOCOM1 (CDR COM) (CAR NAME) NEAR LISTNAME)) ((AND (EQ (CAR NAME) (CADDR COM)) (NULL (CDDDR COM))) [/RPLACA (CDR COM) (UNION (MKLIST (CDR NAME)) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T))) (MACROS (COND ([AND (for PROP inside (CADR COM) always (EQMEMB PROP MACROPROPS)) (for PROP in MACROPROPS always (OR (EQMEMB PROP (CADR COM)) (NOT (GETPROP NAME PROP] (* ;; "every property in the command is a macro prop and, either this is an IFPROP or else the MACROS are changed") (ADDTOCOM1 (CDR COM) NAME NEAR LISTNAME)))) NIL)) ((PROPS ALISTS) (AND (EQ TYPE (CAR COM)) (ADDTOCOM1 COM (/NCONC1 (OR [ASSOC (CAR NAME) (COND [(EQ (CADR COM) '*) (COND [(LITATOM (CADDR COM)) (AND (OR (NULL LISTNAME) (EQ (CADDR COM) LISTNAME)) (GETTOPVAL (CADDR COM] (T (RETURN] (T (CDR COM] (LIST (CAR NAME))) (CADR NAME)) NEAR LISTNAME))) (P (COND ((AND (EQ TYPE 'EXPRESSIONS) (NEQ (CAR NAME) 'SETQ)) (ADDTOCOM1 COM NAME NEAR LISTNAME)))) (AND (EQ (CAR COM) TYPE) (ADDTOCOM1 COM NAME NEAR LISTNAME]) (ADDTOCOM1 [LAMBDA (COM NAME NEAR LISTNAME) (* rmk%: " 3-JAN-82 22:53") (COND [(EQ (CADR COM) '*) (* ; "add to list name") (AND [COND (LISTNAME (EQ (CADDR COM) LISTNAME)) (T (LITATOM (CADDR COM] (SAVESET (CADDR COM) [PROGN [SETQ COM (LISTP (GETTOPVAL (CADDR COM] (COND ((AND NEAR (SETQ NEAR (MEMBER NEAR COM))) (/RPLACD NEAR (CONS NAME (CDR NEAR))) COM) (T (MERGEINSERT NAME COM T] T 'NOPRINT] ((NULL LISTNAME) (* ; "add to standard com") [AND (NOT (MEMBER NAME (CDR COM))) (COND [(SETQ NEAR (MEMBER NEAR COM)) (/RPLACD NEAR (CONS NAME (CDR NEAR] (T (/RPLACD COM (MERGEINSERT NAME (CDR COM] (MARKASCHANGED COMSNAME 'VARS) T]) (ADDNEWCOM [LAMBDA (COMSNAME NAME TYPE LISTNAME FILE) (* rmk%: " 3-JAN-82 22:53") (* ;; "Adds to COMSNAME a new command that will dump NAME as a TYPE on FILE. --- if LISTNAME is given, then use it as the listname") (PROG (NEWCOM OLDCOM TAIL) (SETQ NEWCOM (MAKENEWCOM NAME TYPE LISTNAME FILE)) [COND ((NLISTP (SETQ TAIL (GETTOPVAL COMSNAME))) (RETURN (SAVESET COMSNAME (LIST NEWCOM) T 'NOPRINT] LP [COND ((OR (NLISTP (SETQ OLDCOM (CAR TAIL))) (SELECTQ (CAR OLDCOM) ((LOCALVARS SPECVARS BLOCKS) T) (DECLARE%: (FMEMB 'COMPILERVARS (CDR OLDCOM))) NIL)) (/ATTACH NEWCOM TAIL)) ((LISTP (CDR TAIL)) (SETQ TAIL (CDR TAIL)) (GO LP)) (T (/RPLACD TAIL (LIST NEWCOM] (MARKASCHANGED COMSNAME 'VARS]) (MAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* ; "Edited 8-Apr-87 14:55 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE)) (PROG (TEM) (* ;; "the user function MUST (a) check if FILE = T and not do anything destructive (since this is only for showdef) and (b) if LISTNAME is given, then use it rather than generating a different listname") (AND (LISTP NAME) (SETQ NAME (COPY NAME))) (RETURN (OR (AND (SETQ TEM (fetch NEWCOM of TYPE)) (APPLY* TEM NAME TYPE LISTNAME FILE)) (SELECTQ TYPE (PROPS [AND (NULL LISTNAME) (CONS 'PROP (CONS (COND ((AND (LISTP (CDR NAME)) (NULL (CDDR NAME))) (CADR NAME)) (T (CDR NAME))) (OR (LISTP (CAR NAME)) (LIST (CAR NAME]) (EXPRESSIONS [COND ((EQ (CAR NAME) 'SETQ) (MAKENEWCOM (CDR NAME) 'VARS LISTNAME FILE)) (T (CONS 'P (COND (LISTNAME (LIST '* LISTNAME)) (T (LIST NAME]) NIL) (DEFAULTMAKENEWCOM NAME TYPE LISTNAME FILE]) (DEFAULTMAKENEWCOM [LAMBDA (NAME TYPE LISTNAME FILE) (* lmm "20-OCT-82 22:48") (COND ((NOT (OR (FMEMB TYPE FILEPKGCOMSPLST) (fetch MACRO of TYPE) (fetch GETDEF of TYPE))) (ERROR "no defined way to dump or obtain the definition of " (OR (fetch DESCRIPTION of TYPE) TYPE) T)) ((NULL DEFAULTCOMHASFILEFLG) (* ; "disable FOOFNS FOOVARS junk") (LIST TYPE NAME)) ((EQ FILE T) (* ;  "FILE=T only when called from SHOWDEF") (LIST TYPE NAME)) ([OR LISTNAME (AND FILE (SAVESET (SETQ LISTNAME (FILECOMS FILE TYPE)) (MERGEINSERT NAME (LISTP (GETTOPVAL LISTNAME)) T) T 'NOPRINT] (* ; "The check (AND FILE --) is so that it will not bother with making listnames just for deleting items") (LIST TYPE '* LISTNAME)) (T (LIST TYPE NAME]) ) (RPAQ? DEFAULTCOMHASFILEFLG ) (ADDTOVAR MARKASCHANGEDFNS ) (DEFINEQ (MERGEINSERT [LAMBDA (NEW LST ONEFLG) (* lmm "30-Jun-86 18:11") (* ;; "searches LST to find the most reasonable place to insert NEW. Does nothing if ONEFLG is T and NEW is already a member of LST") (COND ((AND ONEFLG (MEMBER NEW LST)) LST) ((LISTP NEW) (/NCONC1 LST NEW)) (T (PROG ((N 0) LST1 PLACE TEM) (SETQ LST1 LST) LP (* ;; "finds the function with the longest leading common substring. The idea is that if the list is only paatially sorted, want to insert the new thing in among those function that look like they are related.") (COND ((NULL LST1) (GO OUT)) ((OR (LISTP (CAR LST1)) (SETQ TEM (STRPOS (CAR LST1) NEW 1 NIL T T))) (* ;; "this takes precedence over even a longer string so that for example in the list (ADDTOFILES? ADDTOFILE), ADDTOFILE1 will be inserted aater ADDTOFILE") (SETQ PLACE LST1) (GO OUT)) ((IGREATERP (SETQ TEM (MERGEINSERT1 (CAR LST1) NEW)) N) (SETQ N TEM) (SETQ PLACE LST1))) (SETQ LST1 (CDR LST1)) (GO LP) OUT (SETQ TEM (CAR PLACE)) (OR [SOME (OR PLACE LST) (FUNCTION (LAMBDA (X LST) (COND ([OR (ALPHORDER NEW X) (AND PLACE (NOT (ALPHORDER TEM X] (* ;; "for example, if the FNS list is something like (... FOO FOO1 ...) where the ... may or may not be in order, e.g. (ZAP FOO FOO1 BLAH), then want to insert FOO2 after FOO1, i.e. before BLAH, even though FOO2 wold not come before BLAH in a sorted list.") (/ATTACH NEW LST)) (T (SETQ TEM X) NIL] (SETQ LST (/NCONC1 LST NEW))) (RETURN LST]) (MERGEINSERT1 [LAMBDA (X Y) (* rmk%: "24-MAY-82 00:05") (* ;; "value is the number of leading characters of X and Y that agree.") (PROG ((N 1) C1 C2) LP [COND ((OR (NULL (SETQ C1 (NTHCHARCODE X N))) (NULL (SETQ C2 (NTHCHARCODE Y N))) (NEQ C1 C2)) (RETURN (SUB1 N] (SETQ N (ADD1 N)) (GO LP]) ) (* ;; "RMK: Changed INITVARS to VARS, so = addition is a synonym for untypable LF, and also suppress appearance of raw CR and LF in the file" ) (DEFINEQ (ADDTOFILEKEYLST [LAMBDA NIL (* ; "Edited 12-Feb-2021 17:15 by larry") `(("[" "" EXPLAINSTRING "[ -- prettyprint the item to terminal and then ask again" NOECHOFLG T) (= "" EXPLAINSTRING "= - same as previous response" NOECHOFLG T) (,(CHARACTER (CHARCODE LF)) "" EXPLAINSTRING "{line-feed} - same as previous response" NOECHOFLG T) (" " ,(CONCATCODES (LIST (CHARCODE SPACE) (CHARCODE EOL))) EXPLAINSTRING "{space} - no action" NOECHOFLG T) ("]" ,(CONCAT "Nowhere" (CHARACTER (CHARCODE EOL))) EXPLAINSTRING ,(CONCAT "] - nowhere, item is marked as a dummy" (CHARACTER (CHARCODE EOL))) NOECHOFLG T) ["(" "List: (" EXPLAINSTRING "(list name)" NOECHOFLG T KEYLST (( "" CONFIRMFG [%) %] ,(CHARACTER (CHARCODE SPACE)) ,(CHARACTER (CHARCODE EOL] RETURN (CDR ANSWER] (@ "Near: " EXPLAINSTRING "@ other-item -- put the item near the other item" NOECHOFLG T KEYLST (( "" CONFIRMFLG [,(CHARACTER (CHARCODE EOL] RETURN ANSWER))) [,(CHARACTER (CHARCODE CR)) "" RETURN ,(CHARACTER (CHARCODE SPACE] ("" "File name: " EXPLAINSTRING "a file name" KEYLST (]) ) (RPAQ? ADDTOFILEKEYLST (ADDTOFILEKEYLST)) (RPAQ? LASTFILE ) (* ;; "deleting an item from a file") (DEFINEQ (DELFROMFILES [LAMBDA (NAME TYPE FILES) (* rmk%: " 6-MAR-82 13:16") (* ;; "Eliminates NAME as an item of type TYPE in COMS.") (PROG (COMS) (SETQ TYPE (GETFILEPKGTYPE TYPE)) (RETURN (for FILE inside (OR FILES FILELST) when (PROG1 (DELFROMCOMS (SETQ COMS (FILECOMS FILE)) NAME TYPE) (COND ((INFILECOMS? NAME TYPE COMS) (printout T "(could not delete " NAME " from " FILE ")" T)))) collect (for FN in (fetch WHENUNFILED of TYPE) do (APPLY* FN NAME TYPE FILE)) FILE]) (DELFROMCOMS [LAMBDA (COMS NAME TYPE) (* bvm%: " 1-Oct-86 22:02") (* ;; "delete NAME of type TYPE from the coms COMS (either the name of some coms or a list). Returns T if it does anything") (* ;; "If COMS is not a symbol, caller is required to bind COMSNAME to the symbol whose value we are deleting from, for benefit of marking it changed.") (COND [(LITATOM COMS) (LET ((COMSNAME COMS)) (DECLARE (SPECVARS COMS)) (AND (LISTP (SETQ COMS (GETTOPVAL COMSNAME))) (DELFROMCOMS COMS NAME TYPE] (T (PROG (DONE) (SETQ TYPE (GETFILEPKGTYPE TYPE)) LP (COND ((NLISTP COMS) (RETURN DONE))) [COND ((LISTP (CAR COMS)) (SELECTQ (DELFROMCOM (CAR COMS) NAME TYPE) (ALL (/RPLNODE2 COMS (CDR COMS)) (SETQQ DONE ALL) (GO LP)) (NIL) (SETQ DONE T))) (T (SELECTQ (CAR COMS) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (SETQ COMS (CDR COMS))) (COND ((AND (EQ TYPE 'VARS) (EQ NAME (CAR COMS))) (/RPLNODE2 COMS (CDR COMS)) (SETQ DONE T) (GO LP] (SETQ COMS (CDR COMS)) (GO LP]) (DELFROMCOM [LAMBDA (COM NAME TYPE) (* ; "Edited 2-May-87 19:02 by Pavel") (* ; "Tries to delete NAME from COM") (PROG (TEM VAR NEW) (COND ((SETQ TEM (fetch DELETE of (CAR COM))) (AND (SETQ TEM (APPLY* TEM COM NAME TYPE)) (MARKASCHANGED COMSNAME 'VARS)) (RETURN TEM))) (RETURN (SELECTQ (CAR COM) ((DECLARE%: COMS) (DELFROMCOMS (COND [(EQ (CADR COM) '*) (COND ((LITATOM (CADDR COM)) (CADDR COM)) (T (RETURN] (T (CDR COM))) NAME TYPE)) ((CL:EVAL-WHEN) (DELFROMCOMS (COND [(EQ (CL:THIRD COM) '*) (COND ((LITATOM (CL:FOURTH COM)) (CL:FOURTH COM)) (T (RETURN] (T (CDDR COM))) NAME TYPE)) ((ALISTS PROPS) (AND (EQ TYPE (CAR COM)) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ VAR (CADDR COM))) (SETQ TEM (ASSOC (CAR NAME) (GETTOPVAL VAR))) (NEQ (CDR TEM) (SETQ TEM (REMOVEITEM (CADR NAME) (CDR TEM] (SAVESET VAR TEM T 'NOPRINT) T))) ([AND [CDR (SETQ TEM (ASSOC (CAR NAME) (CDR COM] (NEQ (CDR TEM) (SETQ NEW (REMOVEITEM (CADR NAME) (CDR TEM] (/RPLACD TEM NEW) (MARKASCHANGED COMSNAME 'VARS) T)))) (BLOCKS (* ;; "Remove function name from blocks declarations. This isn't entirely correctly, since in removing the name from the block variables, it will hit homonyms in globalvars, specvars, etc.") [AND (EQ TYPE 'FNS) (for BLOCK in (INFILECOMTAIL COM T) do (AND (MEMB NAME BLOCK) (/DREMOVE NAME BLOCK)) (for X in BLOCK when (AND (LISTP X) (MEMB NAME (CDR X))) do (/RPLACD X (REMOVE NAME (CDR X]) ((PROP IFPROP) [SELECTQ TYPE (PROPS (RETURN (COND ((EQ (CADR COM) (CADR NAME)) (DELFROMCOM1 (CDR COM) (CAR NAME))) ((AND (EQMEMB (CADR NAME) (CADR COM)) [NULL (CDR (SETQ TEM (PRETTYCOM1 (CDR COM] (EQ (CAR TEM) (CAR NAME))) [/RPLACA (CDR COM) (REMOVE (CADR NAME) (MKLIST (CADR COM] (MARKASCHANGED COMSNAME 'VARS) T)))) (COND ([for PROP inside (CADR COM) always (EQ TYPE (GETPROP PROP 'PROPTYPE] (DELFROMCOM1 (CDR COM) NAME]) ((RECORDS INITRECORDS SYSRECORDS) (AND (EQ TYPE 'RECORDS) (DELFROMCOM1 COM NAME))) (P (AND (EQ TYPE 'EXPRESSIONS) (DELFROMCOM1 COM NAME))) ((VARS INITVARS) (AND (EQ TYPE 'VARS) (DELFROMCOM1 COM NAME T))) (AND (EQ TYPE (CAR COM)) (DELFROMCOM1 COM NAME]) (DELFROMCOM1 [LAMBDA (COM NAME FLG) (* rmk%: "10-JUN-82 22:44") (* ;;  "FLG is passed on to REMOVEITEM, determines whether lists whose CAR is NAME will be removed") (LET (TEM VAL) (COND ((EQ (CADR COM) '*) (COND ([AND (LITATOM (SETQ TEM (CADDR COM))) (NEQ (SETQ VAL (GETTOPVAL TEM)) (SETQ VAL (REMOVEITEM NAME VAL FLG] (SAVESET TEM VAL T 'NOPRINT) T))) ((NEQ (CDR COM) (SETQ TEM (REMOVEITEM NAME (CDR COM) FLG))) (/RPLACD COM TEM) (MARKASCHANGED COMSNAME 'VARS) T]) (REMOVEITEM [LAMBDA (X LST FLG) (* ; "Edited 25-May-88 17:52 by drc:") (* lmm "10-FEB-78 17:29") (* ;;  "returns a subset of LST with X deleted; if FLG is set, also remove elements whose CAR is X") (COND [[OR (MEMBER X LST) (AND FLG (SOME LST (FUNCTION (LAMBDA (Y) (EQUAL (CAR (LISTP Y)) X] (SUBSET LST (FUNCTION (LAMBDA (Y) (AND (NOT (EQUAL Y X)) (OR (NOT FLG) (NLISTP Y) (NOT (EQUAL (CAR Y) X] (T LST]) (MOVETOFILE [LAMBDA (TOFILE NAME TYPE FROMFILE) (* rmk%: "18-OCT-79 19:51") (* ; "To move items between files") (SETQ TYPE (GETFILEPKGTYPE TYPE)) [COND ((OR (EQ TYPE 'FNS) FROMFILE) (* ;  "FNS definition can reside on file if LOADFNS was done. This guarantees that it is loaded.") (PUTDEF NAME TYPE (GETDEF NAME TYPE FROMFILE '(NOCOPY NODWIM] (AND (EQ TYPE 'FNS) (MARKASCHANGED NAME TYPE)) (* ;  "FNS won't get dumped unless they are `changed'") (DELFROMFILES NAME TYPE FROMFILE) (ADDTOFILE NAME TYPE TOFILE]) ) (MOVD? 'DELFROMFILES 'DELFROMFILE NIL T) (MOVD? 'MOVETOFILE 'MOVEITEM NIL T) (ADDTOVAR SYSPROPS PROPTYPE VARTYPE) (* ; "functions for doing things and marking them changed and auxiliary functions") (DEFINEQ (SAVEPUT [LAMBDA (ATM PROP VAL) (* lmm " 7-May-84 16:56") (* ;; "analogous to SAVESET but also marks changed property lists; LISPXFNS are marked to change PUT and PUTPROP to SAVEPUT") [COND ((NOT (LITATOM ATM)) (ERRORX (LIST 14 ATM] (PROG ((X (GETPROPLIST ATM)) X0 TEM OLDFLG) LOOP (COND ((NLISTP X) (COND ((AND (NULL X) X0) (* ;  "typical case. property list ran out on an even parity position. e.g. (A B C D)") (SETQ TEM (LIST PROP VAL)) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) (FRPLACD (CDR X0) TEM) (GO RET))) (* ;; "property list was initially NIL or a non-list, or else it ended in a non-list following an even parity position, e.g. (A B . C) fall through and add new property at beginning") ) ((NLISTP (CDR X)) (* ;; "property list runs out on an odd parity, or ends in an odd list following an odd parity, e.g. (A B C) or (A B C . D) fall through and add at beginning.") ) [(EQ (CAR X) PROP) (SETQ OLDFLG (NEQ (EQUALN (CADR X) VAL 400) T)) (* ; "i.e. it probably changed") (/RPLACA (CDR X) VAL) (COND ((NOT OLDFLG) (GO RET1)) (T (OR (EQ DFNFLG T) (LISPXPRINT (LIST 'new PROP 'property 'for ATM) T T)) (GO RET] (T (SETQ X (CDDR (SETQ X0 X))) (GO LOOP))) [SETQ TEM (CONS PROP (CONS VAL (GETPROPLIST ATM] (SETPROPLIST ATM TEM) (AND LISPXHIST (UNDOSAVE (LIST '/PUT-1 ATM TEM) LISPXHIST)) RET (MARKASCHANGED (LIST ATM PROP) 'PROPS (NOT OLDFLG)) RET1 (AND ADDSPELLFLG (ADDSPELL ATM 0)) (RETURN VAL]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (OR (CHANGENAME 'PUTPROPS 'PUTPROP 'SAVEPUT) (CHANGENAME 'PUTPROPS '/PUT 'SAVEPUT)) ) (DEFINEQ (UNMARKASCHANGED [LAMBDA (NAME TYPE) (* JonL "24-Jul-84 19:59") (* ;; "says to remove NAME from TYPE's changedlst, and also to remove it from any FILE properties. Value is name if anything is done") (PROG (ANYFLG) (bind TAIL [CHANGED _ (fetch CHANGED of (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE] while (SETQ TAIL (MEMBER NAME CHANGED)) do (/RPLACA TAIL) (SETQ ANYFLG T)) [for F TAIL PROP TYPEDPROP in FILELST when [SETQ TAIL (MEMBER NAME (CDR (SETQ TYPEDPROP (ASSOC TYPE (fetch TOBEDUMPED of (SETQ PROP (fetch FILEPROP of F] do (SETQ ANYFLG T) (COND ((SETQ TAIL (REMOVE (CAR TAIL) (CDR TYPEDPROP))) (/RPLACD TYPEDPROP TAIL)) (T (/replace TOBEDUMPED of PROP with (REMOVE TYPEDPROP (fetch TOBEDUMPED of PROP] (RETURN (AND ANYFLG NAME]) (PREEDITFN [LAMBDA (ATM TYPE EDITCHANGES) (* rmk%: "18-FEB-82 21:49") (* ;  "EDITL is advised to call this before editing something") (AND FILEPKGFLG (SELECTQ TYPE (PROPLST [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (GETPROPLIST ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (* ;; "note that if CLISPARRAY is disabled that ALL properties of an edited prop list will get marked as changed if any destructive edit is made") [RESETSAVE NIL (LIST (FUNCTION POSTEDITPROPS) EDITCHANGES (APPEND (GETPROPLIST ATM]) (VARS [COND ((EQMEMB 'ALIST (GETPROP ATM 'VARTYPE)) [AND (OR CLISPARRAY (PROGN (CLISPTRAN (CONS) (CONS)) CLISPARRAY)) (for X in (EVALV ATM) do (OR (NLISTP X) (GETHASH X CLISPARRAY) (PUTHASH X (CONS (CAR X) (CDR X)) CLISPARRAY] (RESETSAVE NIL (LIST (FUNCTION POSTEDITALISTS) EDITCHANGES (for X in (EVALV ATM) collect (CAR X]) NIL]) (POSTEDITPROPS [LAMBDA (EDITCHANGES OLDPROPS) (* rmk%: "18-FEB-82 21:50") (* ; "was RESETSAVE'd from PREEDITFN") (PROG (OV FOUNDCHANGE) (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for NEWPROP on (GETPROPLIST (CAR EDITCHANGES)) by (CDDR NEWPROP) when (for OLDPROP on OLDPROPS by (CDDR OLDPROP) do (COND ((EQ (CAR OLDPROP) (CAR NEWPROP)) (* ; "Found the property") [AND (EQ (CADR OLDPROP) (CADR NEWPROP)) (COND ((NLISTP (CADR OLDPROP)) (* ; "value is same") (RETURN)) ((AND CLISPARRAY (SETQ OV (GETHASH (CADR NEWPROP) CLISPARRAY)) (EQ (CAADR NEWPROP) (CAR OV)) (EQ (CDADR NEWPROP) (CDR OV))) (PUTHASH (CADR NEWPROP) NIL CLISPARRAY) (* ;  "value has been edited (CLISPARRAY translation went away)") (RETURN] (RETURN T))) finally (* ; "didn't find the property") (RETURN T)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWPROP)) 'PROPS NIL) (SETQ FOUNDCHANGE T)) (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) (POSTEDITALISTS [LAMBDA (EDITCHANGES OLDTOKENS) (* rmk%: " 4-JAN-82 10:14") (PROG [OV FOUNDCHANGE (NEWENTRIES (GETTOPVAL (CAR EDITCHANGES] (* ;  "called after an ALIST has been edited") (OR FILEPKGFLG (RETURN)) (COND ((CADR EDITCHANGES) (for X in OLDTOKENS when (NOT (FASSOC X NEWENTRIES)) do (MARKASCHANGED (LIST (CAR EDITCHANGES) X) 'ALISTS NIL) (SETQ FOUNDCHANGE T)) [for NEWENTRY in NEWENTRIES do (COND ([AND (LISTP NEWENTRY) (NOT (AND CLISPARRAY (SETQ OV (GETHASH NEWENTRY CLISPARRAY)) (EQ (CAR NEWENTRY) (CAR OV)) (EQ (CDR NEWENTRY) (CDR OV] (PUTHASH NEWENTRY NIL CLISPARRAY) (MARKASCHANGED (LIST (CAR EDITCHANGES) (CAR NEWENTRY)) 'ALISTS NIL) (SETQ FOUNDCHANGE T] (AND FOUNDCHANGE (RPLACA (CDR EDITCHANGES) NIL]) ) (ADDTOVAR LISPXFNS (PUT . SAVEPUT) (PUTPROP . SAVEPUT)) (* ; "sub-functions for file package commands & types") (DEFINEQ (ALISTS.GETDEF [LAMBDA (NAME TYPE OPTIONS) (* Pavel " 7-Oct-86 17:24") (AND (LISTP NAME) (CL:SYMBOLP (CAR NAME)) (LET [(ASSOCIATION (ASSOC (CADR NAME) (GETTOPVAL (CAR NAME] (AND ASSOCIATION (LIST 'ADDTOVAR (CAR NAME) ASSOCIATION]) (ALISTS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm "16-OCT-78 20:02") (* ;  "called by MARKASCHANGED when an ALIST entry has changed") (PROG [(VARTYPE (GETPROP (CAR NAME) 'VARTYPE] (AND (LISTP VARTYPE) (EQ (CAR VARTYPE) 'ALIST) (RETFROM 'MARKASCHANGED (MARKASCHANGED (CADR NAME) (CADR VARTYPE) NEWFLG]) (CLEARCLISPARRAY [LAMBDA (NAME TYPE REASON) (DECLARE (SPECVARS NAME TYPE REASON)) (* lmm "14-Aug-84 15:03") (AND CLISPARRAY (MAPHASH CLISPARRAY (COND [(EQ TYPE 'I.S.OPRS) (FUNCTION (LAMBDA (TRAN FORM) (AND (MEMB NAME FORM) (PUTHASH FORM NIL CLISPARRAY] (T (* ; "MACRO changed") (FUNCTION (LAMBDA (TRAN FORM) (COND ((OR (EQ NAME (CAR FORM)) (EQ (CAR (GETPROP (CAR FORM) 'CLISPWORD)) 'CHANGETRAN)) (PUTHASH FORM NIL CLISPARRAY]) (EXPRESSIONS.WHENCHANGED [LAMBDA (EXPR) (* ; "Edited 6-Apr-87 20:21 by Pavel") (SELECTQ (CAR EXPR) ((SETQ SETQQ) (UNMARKASCHANGED (CADR EXPR) 'VARS)) ((PROGN PROG) (for X in (CDR EXPR) do (EXPRESSIONS.WHENCHANGED X))) NIL]) (MAKEALISTCOMS [NLAMBDA X (* rmk%: "14-OCT-83 13:34") (* ;; "make command to dump prettydefmacros") (LIST (CONS 'ADDVARS (for PR in X join (for ALISTNAME inside (CAR PR) collect (CONS ALISTNAME (for ATNAME inside (CDR PR) bind ENTRY when (SETQ ENTRY (OR (SASSOC ATNAME (GETTOPVAL ALISTNAME)) (PROGN (LISPXPRINT (LIST 'no ATNAME 'entry 'on ALISTNAME) T T) NIL))) collect ENTRY]) (MAKEFILESCOMS [NLAMBDA FILES (* JonL "12-FEB-83 19:02") (* ;; "This scans the command just to warn the user about any errors. Must match up with the big SELECTQ in FILESLOAD NIL") [for FILE in FILES do (OR (LITATOM FILE) (while (LISTP FILE) do (SELECTQ (CAR (OR (LISTP FILE) (RETURN))) ((LOADCOMP LOADFROM)) (FROM (pop FILE) (if (OR (EQ (CAR FILE) 'VALUEOF) (if (AND (EQ (CAR FILE) 'VALUE) (EQ (CADR FILE) 'OF)) then (pop FILE))) then (pop FILE))) ((COMPILED LOAD EXTENSION EXT SOURCE SYMBOLIC IMPORT NOERROR)) (OR (FMEMB (CAR FILE) LOADOPTIONS) (PRINT (CONS (CAR FILE) '(-- unrecognized FILES option)) T))) (pop FILE] (CONS 'FILESLOAD FILES]) (MAKELISPXMACROSCOMS [NLAMBDA X (* lmm " 5-SEP-78 23:15") (PROG (TEM TEM2) (RETURN (CONS [CONS 'ALISTS (SETQ TEM (NCONC (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXHISTORYMACROS ] (LIST (CONS 'LISPXHISTORYMACROS TEM))) (AND [SETQ TEM (SUBSET X (FUNCTION (LAMBDA (Z) (FASSOC Z LISPXMACROS ] (LIST (CONS 'LISPXMACROS TEM] (SETQ TEM2 (NCONC [AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z LISPXCOMS] (LIST (LIST 'ADDVARS (CONS 'LISPXCOMS TEM2] (AND [SETQ TEM2 (SUBSET X (FUNCTION (LAMBDA (Z) (FMEMB Z HISTORYCOMS] (LIST (LIST 'ADDVARS (CONS 'HISTORYCOMS TEM2]) (MAKEPROPSCOMS [NLAMBDA X (* lmm "26-FEB-78 17:10") (* ;; "make command to dump PROPS") (for PAIR in X collect (CONS 'PROP (CONS (COND ((AND (LISTP (CDR PAIR)) (NULL (CDDR PAIR))) (CADR PAIR)) (T (CDR PAIR))) (OR (LISTP (CAR PAIR)) (LIST (CAR PAIR]) (MAKEUSERMACROSCOMS [NLAMBDA X (* rmk%: " 3-JAN-82 23:20") (PROG (TEM) [COND [X (for Y in X do (OR (FASSOC Y USERMACROS) (FASSOC Y EDITMACROS) (LISPXPRINT (CONS Y '(-- no entry on USERMACROS)) T T] (T (SETQ X (INTERSECTION (SETQ X (MAPCAR USERMACROS 'CAR)) X] (RETURN (LIST (CONS 'ADDVARS (NCONC (for VAR in '(USERMACROS EDITMACROS) when (SETQ TEM (for Y in (GETTOPVAL VAR) when (FMEMB (CAR Y) X) collect Y)) collect (CONS VAR TEM)) (for LST in '(EDITCOMSA EDITCOMSL COMPACTHISTORYCOMS DONTSAVEHISTORYCOMS) when [SETQ TEM (SUBSET (GETTOPVAL LST) (FUNCTION (LAMBDA (Y) (OR (FMEMB Y X) (AND (LISTP Y) (FMEMB (CAR Y) X] collect (CONS LST TEM]) (PROPS.WHENCHANGED [LAMBDA (NAME TYPE NEWFLG) (* lmm " 7-SEP-78 22:08") (PROG [(PROPTYPE (GETPROP (CADR NAME) 'PROPTYPE] (COND [PROPTYPE (RETFROM 'MARKASCHANGED (COND ((NEQ PROPTYPE 'IGNORE) (MARKASCHANGED (CAR NAME) PROPTYPE NEWFLG] (T (SELECTQ (CADR NAME) (CLISPWORD (CLEARCLISPARRAY (CAR NAME))) NIL]) (FILEGETDEF.LISPXMACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:12") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (MEMB SECOND '(LISPXMACROS LISPXCOMS)) T] when (SELECTQ (CADR X) (LISPXMACROS (* ;  "Rebuild the expressions cause there might be other elements in the ADDTOVAR") (AND (SETQ X (ASSOC NAME (CDDR X))) (SETQ X (LIST 'ADDTOVAR 'LISPXMACROS X)))) (LISPXCOMS [COND ((MEMB NAME (CDDR X)) (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS NAME))) ((SETQ X (ASSOC NAME (CDDR X))) (* ; "For synonym pairs") (SETQ X (LIST 'ADDTOVAR 'LISPXCOMS X]) NIL) collect X]) (FILEGETDEF.ALISTS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'ADDTOVAR) (EQ SECOND (CAR NAME] when (SETQ X (ASSOC (CADR NAME) (CDDR X))) collect X finally (RETURN (COND ($$VAL (CONS 'ADDTOVAR (CONS (CAR NAME) $$VAL]) (FILEGETDEF.RECORDS [LAMBDA (NAME TYPE SOURCE OPTIONS NOTFOUND) (* lmm "26-Jun-86 15:56") (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (MEMB FIRST CLISPRECORDTYPES) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (if (EQ (CAAR VAL) 'NOT-FOUND%:) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL]) (FILEGETDEF.PROPS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:13") (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (EQ FIRST 'PUTPROPS) (EQ SECOND (CAR NAME] join (for TAIL on (CDDR X) by (CDDR TAIL) when (EQ (CAR TAIL) (CADR NAME)) join (LIST (CAR TAIL) (CADR TAIL))) finally (RETURN (COND ($$VAL (CONS 'PUTPROPS (CONS (CAR NAME) $$VAL]) (FILEGETDEF.MACROS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "28-May-86 09:51") (MKPROGN (for X in [LOADFNS NIL SOURCE 'GETDEF '(LAMBDA (FIRST SECOND) (AND (FMEMB FIRST '(PUTPROPS DEFMACRO)) (EQ SECOND NAME] join (if (EQ (CAR X) 'DEFMACRO) then (LIST X) else (for TAIL on (CDDR X) by (CDDR TAIL) when (FMEMB (CAR TAIL) MACROPROPS) collect (LIST 'PUTPROPS (CADR X) (CAR TAIL) (CADR TAIL]) (FILEGETDEF.VARS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm " 4-Jul-85 15:14") (for X in (LOADFNS NIL SOURCE 'GETDEF NAME) do (SELECTQ (CAR X) ((RPAQQ SETQQ) (RETURN (CADDR X))) ((RPAQ SETQ RPAQ?) (RETURN (EVAL (CADDR X)))) NIL) finally (RETURN 'NOBIND]) (FILEGETDEF.FNS [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: "29-Aug-86 22:30") (LET (MAP ENV) (COND [(AND (EQMEMB 'FAST OPTIONS) (PROGN (CL:MULTIPLE-VALUE-SETQ (ENV MAP) (GET-ENVIRONMENT-AND-FILEMAP SOURCE)) MAP)) (for PAIR MAPLOC in (CDR MAP) when [SETQ MAPLOC (CADR (ASSOC NAME (CDDR PAIR] do [OR (OPENP SOURCE) (RESETSAVE NIL (LIST 'CLOSEF? (SETQ SOURCE (OPENSTREAM SOURCE 'INPUT 'OLD] (SETFILEPTR SOURCE MAPLOC) (RETURN (WITH-READER-ENVIRONMENT ENV [COND ((EQMEMB 'ARGLIST OPTIONS) (RATOM SOURCE) (READ SOURCE) (RATOM SOURCE) (LIST (READ SOURCE) (READ SOURCE))) (T (CADR (READ SOURCE])] (T (CADR (FASSOC NAME (LOADEFS NAME SOURCE]) (FILEPKGCOMS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 11:29") (PROG (COM TYP) [SELECTQ (CAR (LISTP DEFINITION)) (COM (SETQ COM (CDR DEFINITION))) (TYPE (SETQ TYP (CDR DEFINITION))) (PROGN (SETQ COM (CDR (ASSOC 'COM DEFINITION))) (SETQ TYP (CDR (ASSOC 'TYPE DEFINITION] (* ;; "Check properties first, so that we don't smash some and then get an error in a later call to FILEPKGCOM/TYPE") (for I in COM by (CDDR I) do (SELECTQ I ((ADD DELETE MACRO CONTENTS CONTAIN COM)) (ERROR I "not file package command property" ))) (* ;  "COM merely adds to spelling list, for builtins") [FILEPKGCOM NAME 'CONTENTS (OR (LISTGET COM 'CONTENTS) (LISTGET COM 'CONTAIN] (* ; "Until CONTAIN is de-documented.") (for PROP in '(ADD DELETE MACRO COM) do (FILEPKGCOM NAME PROP (LISTGET COM PROP))) [for I in TYP by (CDDR I) do (OR (FMEMB I FILEPKGTYPEPROPS) (SELECTQ I ((DESCRIPTION TYPE)) (ERROR I "not file package type/command property" ] (* ;  "TYPE merely adds to spelling list, for builtins") (for PROP in (UNION '(DESCRIPTION TYPE) FILEPKGTYPEPROPS) do (FILEPKGTYPE NAME PROP (LISTGET TYP PROP]) (FILES.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "15-Jul-85 17:13") (PROGN (PUTDEF (FILECOMS NAME) 'VARS (CAR DEFINITION) REASON) (* ; "DEFINE THE COMS") (ADDFILE NAME) (* ;  "MAKE SURE IT IS A FILE PACKAGE ENTITY") [/replace TOBEDUMPED of (fetch FILEPROP of NAME) (FILEPKG.MERGECHANGES (CADR DEFINITION) (fetch TOBEDUMPED of (fetch FILEPROP of NAME] (OR (fetch FILEDATES of NAME) (/replace FILEDATES of NAME with (CADDR DEFINITION]) (VARS.PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* lmm "29-Jul-85 20:59") (/SETTOPVAL NAME DEFINITION T]) (FILES.WHENCHANGED [LAMBDA (NAME TYPE REASON) (MARKASCHANGED (FILECOMS NAME) 'VARS REASON]) ) (ADDTOVAR MACROPROPS MACRO BYTEMACRO DMACRO) (ADDTOVAR SYSPROPS PROPTYPE) (PUTPROPS I.S.OPR PROPTYPE I.S.OPRS) (PUTPROPS SUBR PROPTYPE IGNORE) (PUTPROPS LIST PROPTYPE IGNORE) (PUTPROPS CODE PROPTYPE IGNORE) (PUTPROPS FILEDATES PROPTYPE IGNORE) (PUTPROPS FILE PROPTYPE IGNORE) (PUTPROPS FILEMAP PROPTYPE IGNORE) (PUTPROPS EXPR PROPTYPE FNS) (PUTPROPS VALUE PROPTYPE VARS) (PUTPROPS COPYRIGHT PROPTYPE FILES) (PUTPROPS FILETYPE PROPTYPE FILES) (PUTPROPS BAKTRACELST VARTYPE ALIST) (PUTPROPS BREAKMACROS VARTYPE ALIST) (PUTPROPS COMPILETYPELST VARTYPE ALIST) (PUTPROPS EDITMACROS VARTYPE (ALIST USERMACROS)) (PUTPROPS ERRORTYPELST VARTYPE ALIST) (PUTPROPS FONTDEFS VARTYPE ALIST) (PUTPROPS LISPXHISTORYMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS LISPXMACROS VARTYPE (ALIST LISPXMACROS)) (PUTPROPS PRETTYDEFMACROS VARTYPE (ALIST FILEPKGCOMS)) (PUTPROPS PRETTYEQUIVLST VARTYPE ALIST) (PUTPROPS PRETTYPRINTMACROS VARTYPE ALIST) (PUTPROPS PRETTYPRINTYPEMACROS VARTYPE ALIST) (PUTPROPS USERMACROS VARTYPE (ALIST USERMACROS)) (* ; "Define the commands below AFTER the various properties have been established.") (ADDTOVAR USERMACROS (M NIL (MAKE FILE FILE)) (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITMACROS (M (X . Y) (E (MARKASCHANGED (COND ((LISTP 'X) (CAR 'X)) (T 'X)) 'USERMACROS) T) (ORIGINAL (M X . Y)))) (ADDTOVAR EDITCOMSA M) (ADDTOVAR EDITCOMSL M) (* ; "GETDEF methods") (DEFINEQ (RENAME [LAMBDA (OLD NEW TYPES FILES METHOD) (* JonL "24-Jul-84 20:01") (PROG ((TYPES (GETFILEPKGTYPE TYPES 'TYPE NIL OLD))) (* ;; "special kludge: change the callers BEFORE if we are changing a field; this is so the CHANGECALLERS won't get an UNABLE TO DWIMIFY message") [for TYPE inside TYPES when (NEQ TYPE 'FIELDS) do (COPYDEF OLD NEW TYPE NIL (COND ((EQ TYPE 'VARS) 'NOERROR] (CHANGECALLERS OLD NEW TYPES FILES METHOD) [for TYPE inside TYPES do (COND ((AND (EQ TYPE 'FIELDS) (HASDEF OLD 'FIELDS)) (* ;; "The HASDEF test is because the rename might already have been done in EDITFROMFILE in the CHANGECALLERS, if it found a record with the field on a file. Otherwise, COPYDEF essentially will just do the necessary substitution in the existing record declarations, given that definitions for FIELDS are mutually exclusive.") (COPYDEF OLD NEW 'FIELDS)) (T (DELDEF OLD TYPE] (RETURN NEW]) (CHANGECALLERS [LAMBDA (OLD NEW AS-TYPES FILES METHOD) (* ; "Edited 6-Dec-86 01:25 by lmm") (PROG ((AS-TYPES (GETFILEPKGTYPE AS-TYPES)) REL TEM EDITCOMS FNS) (OR METHOD (SETQ METHOD DEFAULTRENAMEMETHOD)) [SETQ EDITCOMS (LIST (COND [(OR (EQMEMB 'CAREFUL METHOD) (PROGN (SETQ TEM (TYPESOF OLD NIL AS-TYPES)) (printout T "Warning --" OLD " is also defined as " TEM T))) (* ;; "This creates a `command' that searches like EXAM, but interrogates the user about whether to do the Rename. Y means do it, No means skip, anything else goes into TTY.") (SUBPAIR '(OLD NEW) (LIST OLD NEW) '(BIND (LPQ (F OLD N) (MARK %#1) (ORR (1 !0 P) NIL) (MARK %#2) (COMS (SELECTQ (ASKUSER NIL NIL " Replace ? " '((Y "Yes ") (N "No ") (% "") (% "") (% "") (& "")) NIL NIL '(NOECHOFLG T)) (Y '(R1 OLD NEW)) (N NIL) 'TTY%:)) (MARK %#3) (IF (EQ (%## (\ %#3)) (%## (\ %#2))) ((\ %#1)) NIL] (T (LIST 'R OLD NEW] (SELECTQ (COND ((AND (EQMEMB 'MASTERSCOPE METHOD) MSDATABASELST (for TYPE inside AS-TYPES do [COND ((SETQ TEM (SELECTQ TYPE ((FNS FUNCTIONS SPECIAL-FORMS OPTIMIZERS) 'CALL) (MACROS '(CALL DIRECTLY)) ((VARS VARIABLES) '(USE OR BIND)) ((RECORDS FIELDS I.S.OPRS) (LIST 'USE 'AS TYPE)) (RETURN NIL))) (COND (REL (SETQ REL (LIST TEM 'OR REL))) (T (SETQ REL TEM] FINALLY (RETURN REL))) (* ;; "can only use masterscope if (a) we say to, (b) something's been analyzed, and (c) the types the function is are known") 'MASTERSCOPE) ((EQMEMB 'EDITCALLERS METHOD) 'EDITCALLERS) (T 'SEARCH)) (MASTERSCOPE (MAPC [SETQ FNS (NCONC [COND ((NULL FILES) (UPDATEFILES) (FILEPKGCHANGES 'FNS] (for FILE inside (OR FILES FILELST) join (FILEFNSLST FILE] (FUNCTION UPDATEFN)) (SETQ FNS (INTERSECTION (GETRELATION OLD (SETQ REL (PARSERELATION REL)) T) FNS))) (EDITCALLERS (SETQ FILES (for X inside (OR FILES FILELST) when (SETQ TEM (EDITCALLERS OLD X T)) collect (PROGN (SETQ FNS (NCONC FNS (CDR TEM))) X)))) (SEARCH (SETQ FNS (for X inside (OR FILES FILELST) join (FILEFNSLST X)))) (ERROR "UNRECOGNIZED RENAME METHOD" METHOD)) (AND (EQMEMB 'FNS AS-TYPES) (FMEMB OLD FNS) (SETQ FNS (REMOVE OLD FNS))) (EDITFROMFILE FNS FILES OLD EDITCOMS) [for TYPE inside AS-TYPES do (for FILE in (WHEREIS OLD TYPE FILES) do (AND (ADDTOFILE NEW TYPE FILE) (DELFROMFILES OLD TYPE FILE) (printout T OLD " changed to " NEW " on " FILE))) (COND ((SETQ TEM (WHEREIS OLD TYPE FILES)) (printout T "Couldn't change " OLD " to " NEW " as " TYPE " on " TEM] (COND (REL (UPDATECHANGED) (COND ((AND (SETQ TEM (GETRELATION OLD REL T)) (WHEREIS TEM 'FNS FILES)) (printout T "Couldn't find where " OLD " is referenced in " TEM T]) ) (DEFINEQ (SHOWDEF [LAMBDA (NAME TYPE FILE) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ;  "prettyprint NAME as it would be dumped as a TYPE") (RESETLST (PROG (ORIGFLG FNSLST FL PRETTYCOMSLST NEWFILEMAP) (DECLARE (SPECVARS . T)) [AND FILE (NEQ FILE (OUTPUT)) (if (SETQ FL (OPENP FILE 'OUTPUT)) then (RESETSAVE (OUTPUT FL)) else (OUTFILE FILE) (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (OUTPUT] (PRETTYCOM (MAKENEWCOM NAME TYPE))))]) (COPYDEF [LAMBDA (OLD NEW TYPE SOURCE OPTIONS) (* lmm "14-Aug-84 18:38") (* ; "like MOVD, but takes a type.") (PROG (TEM DEF) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) [SETQ DEF (GETDEF OLD TYPE SOURCE (COND ((EQ OPTIONS 'NOCOPY) NIL) (T (REMOVE 'NOCOPY (MKLIST OPTIONS] (* ;  "The default is for GETDEF to return a COPY. Make sure that NOCOPY isn't in options though.") (SELECTQ TYPE (VARS) (FILES [for X in (CAR DEF) do (* ;  "change all the listnames which are of form filenameTYPE") (SELECTQ (CAR X) ((PROP IFPROP) (SETQ X (CDR X))) NIL) (COND ((EQ (CADR X) '*) (SETQ X (CDDR X)) (COND ((AND (LITATOM (CAR X)) (SETQ TEM (STRPOS OLD (CAR X) 1 NIL T T))) (SAVESET (SETQ TEM (PACK* NEW (SUBATOM (CAR X) TEM -1))) (COPY (GETTOPVAL (CAR X))) T) (FRPLACA X TEM]) ((PROPS ALISTS) (OR (EQ (CAR NEW) (CAR OLD)) (DSUBST (CAR NEW) (CAR OLD) DEF)) (OR (EQ (CADR NEW) (CADR OLD)) (DSUBST (CADR NEW) (CADR OLD) DEF))) (DSUBST NEW OLD DEF)) (PUTDEF NEW TYPE DEF) (RETURN NEW]) (GETDEF [LAMBDA (NAME TYPE SOURCE OPTIONS) (* lmm "13-Jul-85 04:10") (* ;; "returns the definition of NAME as a TYPE from SOURCE; cause ERROR if not found unless OPTIONS is NOERROR --- usually returns a copy unless OPTIONS is NOCOPY in which case it tries not to return a copy --- FLG=NOCOPY is currently only used from SAVEDEF where SOURCE is always 0 --- If options is or contains a string, returns that string instead of causing error if no def found. The caller can figure out what happened, even for types for which NIL/NOBIND might have defs.") (PROG (DEF TEM (NOCOPY (EQMEMB 'NOCOPY OPTIONS))) (DECLARE (SPECVARS NOCOPY)) (SELECTQ OPTIONS (0 (SETQQ OPTIONS (NOERROR NODWIM)) (SETQ NOCOPY T)) (1 (SETQQ OPTIONS (NOERROR NODWIM FAST ARGLIST)) (SETQ NOCOPY T)) (T (SETQQ OPTIONS SPELL)) NIL) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (SELECTQ SOURCE (0 (SETQQ SOURCE CURRENT)) (T (SETQQ SOURCE SAVED)) (NIL (SETQQ SOURCE ?)) NIL) [SELECTQ SOURCE (CURRENT (SETQ DEF (GETDEFCURRENT NAME TYPE OPTIONS))) (? [LET [(NOERROR (CONS 'NOERROR (MKLIST OPTIONS] (OR (NEQ (SETQ DEF (GETDEFCURRENT NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (NEQ (SETQ DEF (GETDEFSAVED NAME TYPE NOERROR)) (fetch NULLDEF of TYPE)) (SETQ DEF (GETDEFFROMFILE NAME TYPE 'FILE OPTIONS]) (SAVED (SETQ DEF (GETDEFSAVED NAME TYPE OPTIONS))) (COND ((AND (LISTP SOURCE) (EQ (CAR SOURCE) '=)) (SETQ DEF (CDR SOURCE))) (T (SETQ DEF (GETDEFFROMFILE NAME TYPE SOURCE OPTIONS)) (SETQ NOCOPY T] (OR NOCOPY (SETQ DEF (COPY DEF))) (COND ((AND (EQ TYPE 'FNS) (NOT (EQMEMB 'NODWIM OPTIONS))) (DWIMDEF DEF NAME SOURCE))) (RETURN DEF]) (GETDEFCOM [LAMBDA (X) (* lmm " 4-Jul-85 13:31") (* ;; "In the case where GETDEF doesn't know how to get the definition of something, it resorts to asking the file package to print it out to a file and then reading the file back in. Actually, though, that is a two stage process where the `command' to print out the datum is first macro expanded and then executed. --- In some cases, you can tell what would be printed without printing it by looking at the prettydef-macro expansion. That is what GETDEFCOM does: it takes a list of prettydef commands and returns what Would be printed by those commands (or NIL if it is `too hard' to figure out.) --- A few of the commands are special-cased inside GETDEFCOM0 because they occur frequently or are simple.") (* ; "a RETFROM point") (for Y in X join (GETDEFCOM0 Y]) (GETDEFCOM0 [LAMBDA (COM) (* wt%: " 7-FEB-79 23:28") (PROG (TEM) (RETURN (COND ((SETQ TEM (fetch MACRO of (CAR COM))) (* COND ((fetch CONTENTS of  (CAR COM)) (* ;  "if it has a CONTENTS function, generally means it is not safe to evaluate")  (RETFROM (QUOTE GETDEFCOM)))) (for Y in (SUBPAIR (CAR TEM) (PRETTYCOM1 COM) (CDR TEM)) join (GETDEFCOM0 Y))) (T (SELECTQ (CAR COM) (COMS (for X in (PRETTYCOM1 COM) join (GETDEFCOM0 X))) (ADDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'ADDTOVAR Y))) (APPENDVARS (for Y in (PRETTYCOM1 COM) collect (CONS 'APPENDTOVAR Y))) (P (APPEND (PRETTYCOM1 COM))) (RETFROM 'GETDEFCOM]) (GETDEFCURRENT [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 2-May-87 19:00 by Pavel") (* ;  "Gets the current definition--source=0") (LET (DEF) (COND ((AND (SETQ DEF (fetch GETDEF of TYPE)) (NEQ DEF T)) (* ;; "We assign T to types whose GETDEF is normally handled in the SELECTQ below but whose MACRO is to be defaulted to the PUTDEF/GETDEF in PRETTYCOM.") (OR (NEQ (SETQ DEF (APPLY* DEF NAME TYPE OPTIONS)) (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF) (T (OR (NEQ [SETQ DEF (SELECTQ TYPE (FNS (AND (LITATOM NAME) (EXPRP (SETQ DEF (VIRGINFN NAME))) DEF)) (VARS (if (LITATOM NAME) then (GETTOPVAL NAME) else 'NOBIND)) ((FIELDS RECORDS) (if (LITATOM NAME) then [SETQ DEF (SELECTQ TYPE (RECORDS (RECLOOK NAME)) (MKPROGN (FIELDLOOK NAME] (if (EQMEMB 'EDIT OPTIONS) then (COPY DEF) else DEF))) (FILES (* ;  "what is the `definition' of a file? -- I guess the COMS which say what it contains") [if (LITATOM NAME) then (if (SETQ DEF (GETFILEDEF NAME)) then (UPDATEFILES) (LIST (LISTP (GETTOPVAL (FILECOMS DEF))) (fetch TOBEDUMPED of (fetch FILEPROP of DEF)) (LISTP (fetch FILEDATES of DEF]) (TEMPLATES (if (AND (LITATOM NAME) (SETQ DEF (GETTEMPLATE NAME))) then (LIST 'SETTEMPLATE (KWOTE NAME) (KWOTE DEF)))) (MACROS [if [AND (LITATOM NAME) (SETQ DEF (for X on (GETPROPLIST NAME) by (CDDR X) when (FMEMB (CAR X) MACROPROPS) join (LIST (CAR X) (CADR X] then `(PUTPROPS ,NAME ,@DEF]) (EXPRESSIONS (LISTP NAME)) (PROPS [AND (LISTP NAME) (AND (SETQ DEF (SOME (GETPROPLIST (CAR NAME)) [FUNCTION (LAMBDA (X) (EQ X (CADR NAME] (FUNCTION CDDR))) (LIST 'PUTPROPS (CAR NAME) (CADR NAME) (CADR DEF]) (FILEPKGCOMS [AND (LITATOM NAME) (PROG ((COM (FILEPKGCOM NAME)) (TYP (FILEPKGTYPE NAME))) (RETURN (COND ((AND COM TYP) (LIST (CONS 'COM COM) (CONS 'TYPE TYP))) (COM (LIST (CONS 'COM COM))) (TYP (LIST (CONS 'TYPE TYP]) (FILEVARS (COND ((AND (LITATOM NAME) (LISTP (SETQ DEF (GETTOPVAL NAME))) (WHEREIS NAME 'FILEVARS)) DEF) (T 'NOBIND))) (LET ((COMS (LIST (MAKENEWCOM NAME TYPE))) FILE) [COND ((NOT (SETQ DEF (GETDEFCOM COMS))) (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* (RESETLST (RESETSAVE PRETTYFLG) (RESETSAVE FONTCHANGEFLG) [RESETSAVE (OUTPUT (SETQ FILE (OPENSTREAM '{NODIRCORE} 'BOTH] (PRETTYDEFCOMS COMS) (SETFILEPTR FILE 0) [SETQ DEF (for X in (READFILE FILE) join (SELECTQ (CAR X) ((*) NIL) (DECLARE%: (for Y on (CDR X) unless (SELECTQ (CAR Y) ((COPYWHEN EVAL@LOADWHEN EVAL@COMPILEWHEN) (RETURN (LIST Y))) (FMEMB (CAR Y) DECLARETAGSLST)) collect (CAR Y))) (CL:EVAL-WHEN (CDDR X)) (PROGN (CDR X)) (LIST X] (SETQ NOCOPY T)))] (MKPROGN DEF] (fetch NULLDEF of TYPE)) (GETDEFERR NAME TYPE OPTIONS)) DEF]) (GETDEFERR [LAMBDA (NAME TYPE OPTIONS MSG) (* lmm "13-Jul-85 04:11") (DECLARE (USEDFREE NODEF)) (* ;  "Message non-null if looking for saved or filed definition.") (PROG (TEM) (RETURN (COND ((EQMEMB 'NOERROR OPTIONS) (* ;  "We want to do the string search in the HASDEF case") (RETURN (fetch NULLDEF of TYPE))) [(AND (NULL MSG) (EQMEMB 'SPELL OPTIONS) (SETQ TEM (HASDEF NAME TYPE NIL (OR (LISTGET1 (LISTP OPTIONS) 'SPELL) T))) (NEQ TEM NAME)) (RETFROM 'GETDEF (GETDEF TEM TYPE '? (CONS 'NOERROR (MKLIST OPTIONS] (T (for O inside OPTIONS when (STRINGP O) do (RETFROM 'GETDEF O) finally (ERROR NAME (CONS TYPE '(definition not found)) T]) (GETDEFFROMFILE [LAMBDA (NAME TYPE SOURCE OPTIONS) (* bvm%: " 1-Oct-86 22:10") (* ;; "Tries to get definition from source file. If successful, returns the definition. Otherwise returns the NULLDEF of the type if OPTIONS contains NOERROR.") (DECLARE (SPECVARS NAME)) (bind (NOTFOUND _ "not found") DEF SOURCE TEM2 for FILE inside (COND ((EQ SOURCE 'FILE) (WHEREIS NAME TYPE T)) (T SOURCE)) when (AND (SETQ SOURCE (FINDFILE FILE T)) (NEQ [SETQ DEF (COND ((SETQ TEM2 (fetch FILEGETDEF of TYPE)) (APPLY* TEM2 NAME TYPE SOURCE OPTIONS NOTFOUND)) (T (SELECTQ TYPE (FNS (FILEGETDEF.FNS NAME TYPE SOURCE OPTIONS NOTFOUND)) ((VARS FILEVARS) (FILEGETDEF.VARS NAME TYPE SOURCE OPTIONS NOTFOUND)) (MACROS (FILEGETDEF.MACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (PROPS (FILEGETDEF.PROPS NAME TYPE SOURCE OPTIONS NOTFOUND)) (RECORDS (FILEGETDEF.RECORDS NAME TYPE SOURCE OPTIONS NOTFOUND)) (ALISTS (FILEGETDEF.ALISTS NAME TYPE SOURCE OPTIONS NOTFOUND)) (LISPXMACROS (FILEGETDEF.LISPXMACROS NAME TYPE SOURCE OPTIONS NOTFOUND)) (COND [(SETQ DEF (GET TYPE 'DEFINERS)) (LET [(VAL (LOADFNS NIL SOURCE 'GETDEF `(LAMBDA (FIRST SECOND) (AND (MEMB FIRST ',DEF) (OR (EQ SECOND NAME) (AND (MEMB SECOND '(%( %[)) (PROGN (RATOM) (RATOM) (RATOM) (EQ NAME (RATOM] (* ; "ick! Should use real closure") (if (EQ (CAAR VAL) 'NOT-FOUND) then NOTFOUND elseif (CDR VAL) then (CONS 'PROGN VAL) else (CAR VAL] (T (RESETLST (RESETSAVE (RESETUNDO)) [LET (LOAD-VERBOSE-STREAM) (DECLARE (SPECVARS LOAD-VERBOSE-STREAM)) (* ;  "just in case we get a PRETTYCOMPRINT in here") (LOADFNS NIL SOURCE 'PROP (COND ((LITATOM NAME) (* ;  "If an atom, only bother with expressions that contain it") (CONS (LIST '& '|..| NAME))) (T T] (GETDEFCURRENT NAME TYPE (CONS 'NOERROR (MKLIST OPTIONS))))] NOTFOUND)) do (AND (EQ SOURCE 'FILE) (OR (FMEMB FILE FILELST) (CL:FORMAT T "(from ~A)~%%" SOURCE))) (* ;  "Copying and dwimifying are done in GETDEF") (RETURN DEF) finally (RETURN (GETDEFERR NAME TYPE OPTIONS (APPEND '(no definition on) (MKLIST SOURCE]) (GETDEFSAVED [LAMBDA (NAME TYPE OPTIONS) (* ; "Edited 11-Aug-87 18:14 by cutting") (* ;  "Gets the `saved' definition--source=T") (SELECTQ TYPE (FNS (OR (GETPROP NAME 'EXPR) (GETDEFERR NAME TYPE OPTIONS "no saved definition for"))) (VARS (* ;  "The value of a variable is never substituted into and never COPIED") (for X on (GETPROPLIST NAME) by (CDDR X) when (EQ (CAR X) 'VALUE) do (RETURN (CADR X)) finally (RETURN (GETDEFERR NAME TYPE OPTIONS "no saved value for ")))) (OR (CDR (SASSOC NAME (FASSOC TYPE SAVEDDEFS))) (GETDEFERR NAME TYPE OPTIONS "no saved definition for "]) (PUTDEF [LAMBDA (NAME TYPE DEFINITION REASON) (* ; "Edited 8-Apr-87 12:52 by Pavel") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (LET ((PUTDEF.METHOD (fetch PUTDEF of TYPE))) (COND (PUTDEF.METHOD (APPLY* PUTDEF.METHOD NAME TYPE DEFINITION REASON)) (T (SELECTQ TYPE (FNS (FNS.PUTDEF NAME TYPE DEFINITION REASON)) (VARS (VARS.PUTDEF NAME TYPE DEFINITION REASON)) (FILES (FILES.PUTDEF NAME TYPE DEFINITION REASON)) (FILEPKGCOMS (FILEPKGCOMS.PUTDEF NAME TYPE DEFINITION REASON)) (EVAL DEFINITION)) NAME]) (EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (DECLARE (LOCALVARS . T) (SPECVARS SOURCE)) (* ; "Edited 27-Jul-87 11:04 by cutting") (* ;; "lets you edit anything. Given name and type, call editor on the definition (loading it in from SOURCE if necessary). If you change it, then the definition gets unsaved. OPTIONS is passed through from ED to the editor.") (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (COND ((AND (fetch EDITDEF of TYPE) (APPLY* (fetch EDITDEF of TYPE) NAME TYPE SOURCE EDITCOMS OPTIONS))) ((AND (EQ TYPE 'FNS) (NULL SOURCE)) (* ;  "special hack for EDITDEF of FNS because of ability to EDITLOADFNS") (EDITDEF.FNS NAME EDITCOMS OPTIONS)) (T (DEFAULT.EDITDEF NAME TYPE SOURCE EDITCOMS OPTIONS))) NAME]) (DEFAULT.EDITDEF [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 11-Jun-92 16:26 by cat") (PROG [(DEF (COND [SOURCE (GETDEF NAME TYPE SOURCE '(EDIT NOCOPY] [(GETDEF NAME TYPE 'CURRENT '(EDIT NOCOPY NOERROR] [(GETDEF NAME TYPE 'SAVED '(EDIT NOCOPY NOERROR] (T (LET ((FILES (WHEREIS NAME TYPE T))) (CL:IF (NULL FILES) (CL:FORMAT T "~S has no ~A definition.~%%" NAME TYPE) [LET [(FILE (PROGN (CL:FORMAT T "~S is contained on~{ ~S~}.~%%" NAME FILES) (CL:IF (CL:ENDP (CDR FILES)) (CL:IF (CL:Y-OR-N-P "Shall I load this file PROP? ") (CAR FILES)) (ASKUSER NIL NIL "indicate which file to load PROP: " (MAKEKEYLST FILES) T))] (CL:WHEN FILE (LOAD FILE 'PROP) (GETDEF NAME TYPE '? '(EDIT NOCOPY)))])] (* ;; "the EDIT option says to return a COPY if editing this structure isn't enough, and some installation is necessary.") (DECLARE (SPECVARS RETRY)) (* ;; "what is RETRY ???") (SETQ RETRY) (CL:WHEN DEF (EDITE DEF EDITCOMS NAME TYPE [FUNCTION (LAMBDA (NAME DEF TYPE EXITFLG) (* ;  "this function is called when there were changes made") (FIXEDITDATE DEF) (* ; "fix the edit date first - jtm") (PUTDEF NAME TYPE DEF) (MARKASCHANGED NAME TYPE 'CHANGED) (* ;; "woz 1/25/91 MARKASCHANGED must be called after PUTDEF, so sedit's markaschangedfn will see the new definition. doc for PUTDEF says it calls MARKASCHANGED, but it doesn't always, so do it here. this sometimes results in MARKASCHANGED getting called twice.") ] OPTIONS))]) (EDITDEF.FILES [LAMBDA (NAME TYPE SOURCE EDITCOMS OPTIONS) (* ; "Edited 18-Mar-87 16:07 by woz") (EDITDEF (FILECOMS NAME) 'VARS SOURCE EDITCOMS OPTIONS]) (LOADDEF [LAMBDA (NAME TYPE SOURCE) (* lmm "13-SEP-78 01:34") (PUTDEF NAME TYPE (GETDEF NAME TYPE SOURCE '(NODWIM NOCOPY]) (DWIMDEF [LAMBDA (DEF FN SOURCE) (* lmm " 6-Jun-86 17:23") (AND [OR (EQ DWIMIFYCOMPFLG T) (EQ CLISPIFYPRETTYFLG T) (EQ (CAR (CADDR DEF)) 'CLISP%:) (SELECTQ SOURCE ((CURRENT SAVED FILE ?) NIL) (AND (LITATOM SOURCE) (EQMEMB 'CLISP (GETPROP SOURCE 'FILETYPE] (LET ((NOSPELLFLG T) (DWIMESSGAG T) FILEPKGFLG LISPXHIST) (DECLARE (CL:SPECIAL NOSPELLFLG DWIMESSGAG FILEPKGFLG LISPXHIST)) (DWIMIFY0 DEF (COND ((OR (LISTP FN) (NULL FN)) '?) (T FN)) NIL DEF]) (DELDEF [LAMBDA (NAME TYPE) (* ; "Edited 5-Dec-86 06:20 by lmm") (PROG (TEM) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) LP [COND ((SETQ TEM (fetch DELDEF of TYPE)) (APPLY* TEM NAME TYPE)) (T (SELECTQ TYPE (FNS (* ;  "special because GETDEF of a FNS is only its EXPR definition, and DELDEF should only remove such") (AND (EXPRP NAME) (/PUTD NAME)) (REMPROP NAME 'EXPR) [AND MSDATABASELST (MASTERSCOPE (LIST 'ERASE (KWOTE NAME]) (VARS (/SETTOPVAL NAME 'NOBIND)) (FILES [for LST in '(FILELST NOTCOMPILEDFILES NOTLISTEDFILES) do (/SETTOPVAL LST (REMOVE NAME (GETTOPVAL LST] (/replace FILEPROP of NAME with NIL) (/replace FILECHANGES of NAME with NIL) (/replace FILEDATES of NAME with NIL) (FLUSHFILEMAPS NAME)) (FILEPKGCOMS (DELFROMLIST 'FILEPKGCOMSPLST NAME) (DELFROMLIST 'FILEPKGTYPES NAME) (for FIELD on (FILEPKGCOM NAME) by (CDDR FIELD) do (FILEPKGCOM NAME (CAR FIELD) NIL)) (for FIELD on (FILEPKGTYPE NAME) by (CDDR FIELD) do (FILEPKGTYPE NAME (CAR FIELD) NIL)) (/replace ALLFIELDS of NAME with NIL)) (ALISTS [AND (LISTP NAME) (DELFROMLIST (CAR NAME) (FASSOC (CADR NAME) (GETTOPVAL (CAR NAME]) (MACROS (for P in MACROPROPS do (/REMPROP NAME P))) (PROPS (AND (LISTP NAME) (/REMPROP (CAR NAME) (CADR NAME)))) (LISPXMACROS (DELFROMLIST 'LISPXMACROS (FASSOC NAME LISPXMACROS)) (DELFROMLIST 'LISPXHISTORYMACROS (FASSOC NAME LISPXHISTORYMACROS )) (DELFROMLIST 'LISPXCOMS NAME) (DELFROMLIST 'HISTORYCOMS NAME)) (PRIN1 (LIST "Note: deleting" TYPE "not implemented yet") T] (MARKASCHANGED NAME TYPE 'DELETED) (RETURN NAME]) (DELFROMLIST [LAMBDA (VAR VAL) (* rmk%: " 3-JAN-82 23:22") (AND (FMEMB VAL (GETTOPVAL VAR)) (/SETTOPVAL VAR (SUBSET (GETTOPVAL VAR) (FUNCTION (LAMBDA (X) (AND (NEQ X VAL) (OR (NLISTP X) (NEQ (CDR X) VAL]) (HASDEF [LAMBDA (NAME TYPE SOURCE SPELLFLG) (* ; "Edited 31-Aug-87 18:02 by drc:") (* ;; "is NAME the name of something of type TYPE? NIL SOURCE means 0, not ?") (DECLARE (SPECVARS TYPE)) (COND [[OR (LISTP TYPE) (LISTP (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE](* ; "ignore SPELLFLG") (for TY in TYPE do (AND (SETQ $$VAL (HASDEF NAME TY SOURCE)) (RETURN $$VAL] (T (PROG [(NODEF (fetch NULLDEF of TYPE)) (OPTS '(NODWIM NOCOPY NOERROR HASDEF] (COND ((NULL SOURCE) (SETQQ SOURCE CURRENT))) (RETURN (SELECTQ SOURCE ((CURRENT 0) [COND ([OR (MEMBER NAME (fetch CHANGED of TYPE)) (LET ((TM (fetch HASDEF of TYPE))) (COND (TM (APPLY* TM NAME TYPE SOURCE)) [(NOT (LITATOM NAME)) (SELECTQ TYPE (PROPS (AND (LISTP NAME) (GETPROP (CAR NAME) (CADR NAME)))) ((FILES TEMPLATES MACROS LISPXMACROS VARS I.S.OPRS FNS FIELDS USERMACROS FILEVARS FILEPKGCOMS) NIL) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (T (* ;; "symbol definitions") (SELECTQ TYPE (FILES (LET ((SYMBOL (CL:FIND-SYMBOL (CONCAT NAME "COMS") "INTERLISP"))) (AND SYMBOL (BOUNDP SYMBOL)))) (TEMPLATES (GETTEMPLATE NAME)) (MACROS (GETLIS NAME MACROPROPS)) (LISPXMACROS (OR (FASSOC NAME LISPXMACROS) (FASSOC NAME LISPXHISTORYMACROS))) (VARS (AND (NOT (CL:KEYWORDP NAME)) (NEQ (GETTOPVAL NAME) 'NOBIND))) (RECORDS (RECLOOK NAME)) (I.S.OPRS [PROG [(TEM (GETPROP NAME 'CLISPWORD] (RETURN (AND TEM (EQ (CAR TEM) 'FORWORD) (GETPROP (CDR TEM) 'I.S.OPR]) (FNS (AND (OR (AND (GETD NAME) (EXPRP (GETD NAME))) (GET NAME 'EXPR)) (NOT (HASDEF NAME 'FUNCTIONS SOURCE)))) (FIELDS (RECORDFIELD? NAME)) (USERMACROS (FASSOC NAME USERMACROS)) (FILEVARS) ((PROPS ALISTS DEFS EXPRESSIONS) NIL) (FILEPKGCOMS (OR (FMEMB NAME FILEPKGCOMSPLST) (FMEMB NAME FILEPKGTYPES))) (NEQ NODEF (GETDEF NAME TYPE 'CURRENT OPTS] (OR NAME T)) (SPELLFLG (CL:WHEN (CL:SYMBOLP NAME) (FIXSPELL NAME NIL (SELECTQ TYPE (FILES FILELST) (FILEPKGCOMS (UNION FILEPKGCOMSPLST FILEPKGTYPES)) (FIELDS (for X in USERRECLST join (APPEND (RECORDFIELDNAMES X)))) (RECORDS (for X in USERRECLST when (LITATOM (CADR X)) collect (CADR X))) (LISPXMACROS LISPXCOMS) (I.S.OPRS I.S.OPRLST) (USERMACROS (MAPCAR USERMACROS (FUNCTION CAR))) USERWORDS) NIL (LISTP SPELLFLG) [FUNCTION (LAMBDA (X) (HASDEF X TYPE 'CURRENT] NIL T))]) (? (OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED SPELLFLG)) (WHEREIS NAME TYPE T))) ((SAVED T) (NEQ NODEF (GETDEF NAME TYPE 'SAVED OPTS))) (NEQ NODEF (GETDEF NAME TYPE SOURCE OPTS]) (GETFILEDEF [LAMBDA (FILENAME) (* lmm " 4-Jul-85 13:25") (* ;;  "returns the official file name from a file name if NAME is FOO, look for FOO.LSP on FILELST") (COND ((FMEMB FILENAME FILELST) FILENAME) (T (for FILE in FILELST when (STRPOS FILENAME FILE 1 NIL T) do (COND ((EQ (FILENAMEFIELD FILE 'NAME) FILENAME) (RETURN FILE]) (SAVEDEF [LAMBDA (NAME TYPE DEFINITION) (* JonL "24-Jul-84 20:11") (COND [(AND (LISTP NAME) (NULL TYPE)) (MAPCAR NAME (FUNCTION (LAMBDA (I) (SAVEDEF I 'FNS] (T [SELECTQ (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (FNS (AND (OR DEFINITION (SETQ DEFINITION (GETD NAME))) (/PUT NAME [SETQ TYPE (COND ((SUBRP DEFINITION) 'SUBR) ((EXPRP DEFINITION) 'EXPR) ((CCODEP DEFINITION) 'CODE) (T 'LIST] DEFINITION))) (VARS (AND (NEQ (OR DEFINITION (SETQ DEFINITION (GETTOPVAL NAME))) 'NOBIND) (EQ DEFINITION (GETTOPVAL NAME)) (/PUT NAME (SETQ TYPE 'VALUE) DEFINITION))) (AND [OR DEFINITION (SETQ DEFINITION (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR NODWIM] (/PUTASSOC NAME DEFINITION (OR (CDR (FASSOC TYPE SAVEDDEFS)) (CAR (SETQ SAVEDDEFS (CONS (LIST TYPE (CONS NAME)) SAVEDDEFS] TYPE]) (UNSAVEDEF [LAMBDA (NAME TYPE DEF) (* lmm " 6-Jun-86 17:24") (SELECTQ TYPE ((NIL EXPR CODE SUBR LIST) (COND [(LISTP NAME) (* ; "for compatibility") (MAPCAR NAME (FUNCTION (LAMBDA (X) (UNSAVED1 X TYPE] (T (UNSAVED1 NAME TYPE)))) (PROG NIL [OR DEF (SETQ DEF (GETDEF NAME (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) 'SAVED 0)) (RETURN (CONS TYPE '(not found] (COND ((NEQ DFNFLG T) (SAVEDEF NAME TYPE) (LET ((DFNFLG T)) (PUTDEF NAME TYPE DEF))) (T (PUTDEF NAME TYPE DEF))) (RETURN TYPE]) (COMPAREDEFS [LAMBDA (NAME TYPE SOURCES) (* lmm " 4-Jul-85 14:37") (COND ((AND (LISTP TYPE) (GETFILEPKGTYPE SOURCES NIL T)) (swap TYPE SOURCES))) (SETQ TYPE (GETFILEPKGTYPE TYPE 'TYPE)) (PROG [DEF DEFS (SRCS (OR SOURCES (WHEREIS NAME TYPE T] [COND ((NULL SOURCES) (AND [OR (MEMBER NAME (FILEPKGCHANGES TYPE)) (SOME SRCS (FUNCTION (LAMBDA (FILE) (MEMBER NAME (CDR (ASSOC TYPE (fetch TOBEDUMPED of (fetch FILEPROP of FILE] (push SRCS 'CURRENT] (SETQ SRCS (for SRC in SRCS when (COND ((NEQ [SETQ DEF (GETDEF NAME TYPE SRC '(NOERROR NOCOPY] (fetch NULLDEF of TYPE)) (OR [SOME DEFS (FUNCTION (LAMBDA (DP) (COMPARELST DEF (CDR DP] (push DEFS (CONS SRC DEF))) T) (T (PRINTOUT T "No " SRC " definition found for " NAME T) NIL)) collect SRC)) (RETURN (COND ((NULL SRCS) '(no definitions found)) ((NULL (CDR SRCS)) '(only one definition found)) ((CDR DEFS) [for S1 on (DREVERSE DEFS) do (for S2 on (CDR S1) do (PRIN2 NAME T T) (AND (CAAR S1) (PRIN1 " from " T) (PRIN2 (CAAR S1) T T)) (PRIN1 " and " T) (PRIN2 NAME T T) (COND ((CAAR S2) (PRIN1 " from " T) (PRIN2 (CAAR S2) T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS (CDAR S1) (CDAR S2] 'DIFFERENT) (T 'SAME]) (COMPARE [LAMBDA (NAME1 NAME2 TYPE SOURCE1 SOURCE2) (* lmm " 5-SEP-78 13:37") (PROG [[DEF1 (GETDEF NAME1 TYPE SOURCE1 '(NOERROR NOCOPY] (DEF2 (GETDEF NAME2 TYPE SOURCE2 '(NOERROR NOCOPY] (COND ((COMPARELST DEF1 DEF2) (RETURN))) (PRIN2 NAME1 T T) (COND (SOURCE1 (PRIN1 " from " T) (PRIN2 SOURCE1 T T))) (PRIN1 " and " T) (PRIN2 NAME2 T T) (COND (SOURCE2 (PRIN1 " from " T) (PRIN2 SOURCE2 T T))) (PRIN1 " differ:" T) (TERPRI T) (COMPARELISTS DEF1 DEF2) (RETURN T]) (TYPESOF [LAMBDA (NAME POSSIBLETYPES IMPOSSIBLETYPES SOURCE FILTER) (* ; "Edited 2-Aug-88 02:08 by masinter") (* ;; "return list of all known types which NAME names") (LET (FOUND SHADOWED) (if (FMEMB SOURCE '(? NIL)) then (CL:FLET [(RSHADOW NIL (for X in FOUND do (for Y in (CDR (FASSOC X SHADOW-TYPES)) do (if (FMEMB Y FOUND) then (* ; "shadower found before shadowed") (SETQ FOUND (REMOVE Y FOUND] (LET (NOTFOUND NEWTYPES) (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when [AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (NOT (find X in FOUND suchthat (FMEMB TYPE (CDR (FASSOC X SHADOW-TYPES] do (if [OR (HASDEF NAME TYPE 'CURRENT) (AND (LITATOM NAME) (HASDEF NAME TYPE 'SAVED] then (push FOUND TYPE) else (push NOTFOUND TYPE))) (RSHADOW) [for FILE in FILELST while NOTFOUND when [NEQ T (fetch LOADTYPE of (GETPROP FILE 'FILE] do (if (SETQ NEWTYPES (INFILECOMS? NAME NOTFOUND (FILECOMS FILE) 'TYPESOF)) then [bind X for TYPE in NEWTYPES when (FMEMB TYPE NOTFOUND) do (push FOUND TYPE) (if (SETQ X (FASSOC TYPE SHADOW-TYPES)) then (SETQ NOTFOUND (LDIFFERENCE NOTFOUND X)) else (SETQ NOTFOUND (REMOVE TYPE NOTFOUND] (SETQ NOTFOUND (LDIFFERENCE NOTFOUND NEWTYPES] (if (AND NOTFOUND (GETD 'XCL::HASH-FILE-TYPES-OF)) then (SETQ NEWTYPES (XCL::HASH-FILE-TYPES-OF NAME NOTFOUND)) (SETQ FOUND (UNION NEWTYPES FOUND))) (RSHADOW) FOUND)) else (for TYPE inside (OR POSSIBLETYPES FILEPKGTYPES) when (AND (LITATOM TYPE) (NOT (EQMEMB TYPE IMPOSSIBLETYPES)) (OR (NULL FILTER) (CL:FUNCALL FILTER TYPE)) (HASDEF NAME TYPE SOURCE)) do (push FOUND TYPE))) FOUND]) ) (RPAQ? WHEREIS.HASH ) (* ; "Must come after PUTDEF") (DEFINEQ (FIXEDITDATE [LAMBDA (EXPR) (* ; "Edited 17-Jul-89 11:13 by jtm:") (* NOBIND "18-JUL-78 21:11") (* Inserts or replaces previous edit  date) (AND INITIALS (LISTP EXPR) (LISTP (CDR EXPR)) (PROG (E) (COND ((FMEMB (CAR EXPR) LAMBDASPLST) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR))) [(FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-ARGLIST-DEFINERS) (* ;; "insert the edit date after the argument list") (SETQ E (CDDR EXPR)) (while (NOT (CL:LISTP (CAR E))) do (SETQ E (CDR E)) finally (SETQ E (CDR E] ((FMEMB (GETPROP (CAR EXPR) ':DEFINER-FOR) EDITDATE-NAME-DEFINERS) (* ;; "insert the edit date after the name") (SETQ E (CDDR EXPR))) (T (RETURN))) RETRY [COND ((NLISTP E) (RETURN)) ((LISTP (CAR E)) (SELECTQ (CAAR E) ((CLISP%: DECLARE) (SETQ E (CDR E)) (GO RETRY)) (BREAK1 (COND ((EQ (CAR (CADAR E)) 'PROGN) (SETQ E (CDR (CADAR E))) (GO RETRY)))) (ADV-PROG (* No easy way to mark cleanly the  date of an advised function) (RETURN)) (COND ((AND (EQ (CAAR E) COMMENTFLG) (EQ (CADAR E) 'DECLARATIONS%:)) (SETQ E (CDR E)) (GO RETRY] (COND ([for TAIL on E while (AND (LISTP (CAR TAIL)) (EQ (CAAR TAIL) COMMENTFLG)) do (COND ((AND (LISTP (CDR TAIL)) (EDITDATE? (CAR TAIL))) (/RPLACA TAIL (EDITDATE (CAR TAIL) INITIALS)) (RETURN T] (* scans the comments for a  timestamp for this user.) NIL) (T (* attach the new timestamp at the  beginning of the comments.) (/ATTACH (EDITDATE NIL INITIALS) E))) (RETURN EXPR]) (EDITDATE? [LAMBDA (COMMENT) (* ; "Edited 11-Jun-92 16:44 by cat") (* ; "Edited 13-Jul-89 09:30 by jtm:") (* lmm "21-Mar-85 08:45") (* Tests to see if a given common is in fact an edit date --  this has to be general enough to recognize the most comment comment forms while  specific enough to not recognize things that are not edit dates) (DECLARE (LOCALVARS . T)) (* jtm%: changed test so that it  creates one timestamp per user.) (COND [(LISTP COMMENT) (COND ((EQ (CAR COMMENT) COMMENTFLG) [COND (NIL (NULL NORMALCOMMENTSFLG) (SETQ COMMENT (GETCOMMENT COMMENT] (COND ([OR (NOT (LISTP (CDR COMMENT))) (NOT (LISTP (CDDR COMMENT] NIL) [(EQ (CADR COMMENT) ';) (* ; "CL style comment") (STRPOS INITIALS (CADDR COMMENT) (IMINUS (NCHARS INITIALS] (T (* ; "IL style comment") (EQ (CADR COMMENT) INITIALS] ((STRINGP COMMENT]) ) (* ; "Edit date support for all kinds of definers (from PARC 6/10/92)") (RPAQQ EDITDATE-ARGLIST-DEFINERS (FUNCTIONS TYPES)) (RPAQQ EDITDATE-NAME-DEFINERS (STRUCTURES VARIABLES)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS EDITDATE-ARGLIST-DEFINERS EDITDATE-NAME-DEFINERS) ) (* ;; "how to dump FILEPKGCOMS. The SPLST must be initialized to contain FILEPKGCOMS in order to get started." ) (DEFINEQ (FILEPKGCOM [LAMBDA N (* JonL "10-Jul-84 19:38") (PROG (TEM (COM (ARG N 1))) (RETURN (COND [(EQ N 1) (OR (for FIELD in '(MACRO CONTENTS DELETE ADD) when (SETQ TEM (FILEPKGCOM COM FIELD)) join (LIST FIELD TEM)) (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (LIST 'COM T)) (AND [SETQ TEM (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (LIST 'COM TEM] ((EQ N 2) (SELECTQ (ARG N 2) (ADD (fetch ADD of COM)) (DELETE (fetch DELETE of COM)) (MACRO (fetch MACRO of COM)) ((CONTENTS CONTAIN) [OR (fetch (FILEPKGCOM CONTENTS) of COM) (COND ((SETQ COM (fetch (FILEPKGCOM PRETTYTYPE) of COM)) (COND ((EQ COM 'NILL) COM) [(EQ (CAR COM) 'LAMBDA) (CONS (CAR COM) (CONS [CONS (CAADR COM) (CONS (OR (CADDR (CADR COM)) 'NAME) (CONS (CADR (CADR COM)) (CDDDR (CADR COM] (SUBST 'INFILECOMTAIL 'PRETTYCOM1 (CDDR COM] (T (LIST 'LAMBDA '(COM TYPE NAME) (CONS COM '(COM TYPE NAME]) (COM [OR (AND (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) T) (CDR (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST]) (ERROR (ARG N 2) "not file package command property"))) (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'COM) (SELECTQ TEM (NIL) (T [OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST]) (COND ([SETQ TEM2 (ASSOC COM (GETTOPVAL 'FILEPKGCOMSPLST] (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGCOMSPLST (CONS (CONS COM TEM) (GETTOPVAL 'FILEPKGCOMSPLST] (T [AND TEM (OR (FMEMB COM (GETTOPVAL 'FILEPKGCOMSPLST)) (/SETTOPVAL 'FILEPKGCOMSPLST (CONS COM (GETTOPVAL 'FILEPKGCOMSPLST] (SELECTQ (ARG N I) (ADD (/replace (FILEPKGCOM ADD) of COM with TEM)) (DELETE (/replace (FILEPKGCOM DELETE) of COM with TEM)) (MACRO (/replace (FILEPKGCOM MACRO) of COM with TEM)) ((CONTENTS CONTAIN) (/replace (FILEPKGCOM CONTENTS) of COM with TEM)) (ERROR (ARG N I) "not file package command property"] (MARKASCHANGED COM 'FILEPKGCOMS]) (FILEPKGTYPE [LAMBDA N (* lmm " 5-Jul-85 09:07") (PROG ((TYPE (ARG N 1)) TEM) (RETURN (COND [(EQ N 1) (OR (for FIELD in (UNION '(DESCRIPTION) FILEPKGTYPEPROPS) when (SETQ TEM (FILEPKGTYPE TYPE FIELD)) join (LIST FIELD TEM)) (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) (LIST 'TYPE T)) (AND [SETQ TEM (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES] (LIST 'TYPE TEM] [(EQ N 2) (if (FMEMB (ARG N 2) FILEPKGTYPEPROPS) then (GETPROP TYPE (ARG N 2)) else (SELECTQ (ARG N 2) (DESCRIPTION (fetch DESCRIPTION of TYPE)) (TYPE [OR (AND (FMEMB TYPE (GETTOPVAL 'FILEPKGTYPES)) T) (CDR (ASSOC TYPE (GETTOPVAL 'FILEPKGTYPES]) (ERROR (ARG N 2) "not file package type property"] (T [for I TEM2 from 2 to N by 2 do (SETQ TEM (ARG N (ADD1 I))) (COND [(EQ (ARG N I) 'TYPE) (SELECTQ TEM (NIL) (T (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES)))) (COND ((SETQ TEM2 (ASSOC TYPE FILEPKGTYPES)) (/RPLACD TEM2 TEM)) (T (/SETTOPVAL 'FILEPKGTYPES (CONS (CONS TYPE TEM) FILEPKGTYPES] (T [AND TEM (OR (FMEMB TYPE FILEPKGTYPES) (/SETTOPVAL 'FILEPKGTYPES (CONS TYPE FILEPKGTYPES ] (if (FMEMB (ARG N I) FILEPKGTYPEPROPS) then (if TEM then (/PUTPROP TYPE (ARG N I) TEM) else (/REMPROP TYPE (ARG N I))) else (SELECTQ (ARG N I) (DESCRIPTION (/replace DESCRIPTION of TYPE with TEM)) (ERROR (ARG N I) "not file package command/type property" ] (MARKASCHANGED TYPE 'FILEPKGCOMS]) ) (PUTPROPS FILEPKGCOM ARGNAMES (COMMANDNAME (KEYWORDS%: MACRO ADD DELETE CONTENTS))) (ADDTOVAR FILEPKGCOMSPLST FILEPKGCOMS) (ADDTOVAR FILEPKGTYPES FILEPKGCOMS) (PUTDEF (QUOTE FILEPKGCOMS) (QUOTE FILEPKGCOMS) '([COM CONTENTS (LAMBDA (COM NAME TYPE) (* Revert to NILL when no longer coercing PRETTYDEFMACROS to FILEPKGCOMS) (AND (EQ TYPE 'FILEPKGCOMS) (INFILECOMTAIL COM] (TYPE DESCRIPTION "file package commands/types" GETDEF T PUTDEF FILEPKGCOMS.PUTDEF))) (PUTDEF (QUOTE ALISTS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEALISTCOMS . X] (TYPE DESCRIPTION "alist entries" GETDEF ALISTS.GETDEF WHENCHANGED (ALISTS.WHENCHANGED)))) (PUTDEF (QUOTE DEFS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (COMS . X]) (PUTDEF (QUOTE EDITMACROS) (QUOTE FILEPKGCOMS) '((TYPE TYPE USERMACROS))) (PUTDEF (QUOTE EXPRESSIONS) (QUOTE FILEPKGCOMS) '((TYPE DESCRIPTION "expressions" WHENCHANGED ( EXPRESSIONS.WHENCHANGED ) EDITDEF NILL))) (PUTDEF (QUOTE FIELDS) (QUOTE FILEPKGCOMS) '((TYPE EDITDEF NILL))) (PUTDEF (QUOTE FILEPKGTYPES) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS) (TYPE TYPE FILEPKGCOMS))) (PUTDEF (QUOTE FILES) (QUOTE FILEPKGCOMS) '([COM MACRO [X (P * (CONS (MAKEFILESCOMS . X] CONTENTS (LAMBDA (COM NAME TYPE) (AND (EQ TYPE 'FILES) (SUBSET (INFILECOMTAIL COM) (FUNCTION LITATOM] (TYPE PUTDEF FILES.PUTDEF WHENCHANGED (FILES.WHENCHANGED) EDITDEF EDITDEF.FILES))) (PUTDEF (QUOTE FILEVARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (VARS . X))) (TYPE NULLDEF NOBIND EDITDEF NILL))) (PUTDEF (QUOTE FNS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (FN) (AND (GETPROP FN 'FUNCTIONS) (CL:WARN "~A has a FUNCTIONS definition" FN] (ORIGINAL (FNS . X))) CONTENTS NILL) (TYPE DESCRIPTION "functions" PUTDEF FNS.PUTDEF CANFILEDEF T))) (PUTDEF (QUOTE INITRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (P * (RECORDALLOCATIONS . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE INITVARS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE LISPXCOMS) (QUOTE FILEPKGCOMS) '((TYPE TYPE LISPXMACROS))) (PUTDEF (QUOTE LISPXMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKELISPXMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "LISPX commands"))) (PUTDEF (QUOTE MACROS) (QUOTE FILEPKGCOMS) '((COM MACRO [X (DECLARE%: EVAL@COMPILE (P * (MAPCAR 'X (FUNCTION (LAMBDA (Y) (LET [[FNDEF (GETDEF Y 'FUNCTIONS 'CURRENT '(NOCOPY NOERROR] (MACDEF (GETDEF Y 'MACROS 'CURRENT '(NOCOPY NOERROR] (COND ((AND FNDEF (EQ (CAR FNDEF) 'DEFMACRO)) (CL:WARN "Need to change MACROS to FUNCTIONS for writing out Common Lisp macro ~S." FNDEF) (LIST 'PROGN FNDEF MACDEF)) (T (OR MACDEF (CL:CERROR "Go ahead and finish writing out the file." "No MACROS definition for ~A." Y) (GETDEF Y 'MACROS 'CURRENT] CONTENTS NILL) (TYPE DESCRIPTION "Interlisp macros" GETDEF MACROS.GETDEF WHENCHANGED (CLEARCLISPARRAY)))) (PUTDEF (QUOTE PRETTYDEFMACROS) (QUOTE FILEPKGCOMS) '((COM COM FILEPKGCOMS))) (PUTDEF (QUOTE PROPS) (QUOTE FILEPKGCOMS) '([COM MACRO (X (COMS * (MAKEPROPSCOMS . X] (TYPE DESCRIPTION "property lists" WHENCHANGED ( PROPS.WHENCHANGED )))) (PUTDEF (QUOTE RECORDS) (QUOTE FILEPKGCOMS) '[[COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (RECORD) (AND (GETPROP RECORD 'STRUCTURES) (CL:WARN "~A has a STRUCTURES definition" RECORD] (E (RECORDECLARATIONS . X)) (INITRECORDS . X)) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (EQ TYPE 'FIELDS) (NULL ONFILETYPE) (MAPCONC (INFILECOMTAIL COM) (FUNCTION (LAMBDA (X) (APPEND ( RECORDFIELDNAMES X] (TYPE DESCRIPTION "records" DELDEF (LAMBDA (X) (/SETTOPVAL 'USERRECLST (REMOVE (RECLOOK X) USERRECLST]) (PUTDEF (QUOTE OLDRECORDS) (QUOTE FILEPKGCOMS) '((COM COM T))) (PUTDEF (QUOTE SYSRECORDS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (SAVEONSYSRECLST . X))) CONTENTS (LAMBDA (COM NAME TYPE ONFILETYPE) (AND (NULL ONFILETYPE) (EQ TYPE 'RECORDS) (INFILECOMTAIL COM]) (PUTDEF (QUOTE USERMACROS) (QUOTE FILEPKGCOMS) '((COM MACRO (X (COMS * (MAKEUSERMACROSCOMS . X))) CONTENTS NILL) (TYPE DESCRIPTION "edit macros"))) (PUTDEF (QUOTE VARS) (QUOTE FILEPKGCOMS) '((COM MACRO (X [E (MAPC 'X (FUNCTION (LAMBDA (VAR) (AND (GETPROP VAR 'VARIABLES) (CL:WARN "~A also has a VARIABLES definition" VAR] (ORIGINAL (VARS . X))) CONTENTS NILL) (TYPE DESCRIPTION "variables" NULLDEF NOBIND PUTDEF VARS.PUTDEF))) (PUTDEF (QUOTE *) (QUOTE FILEPKGCOMS) '((COM CONTENTS NILL))) (PUTDEF (QUOTE CONSTANTS) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (DECLARE%: EVAL@COMPILE (VARS . X) (P (CONSTANTS . X]) (ADDTOVAR SHADOW-TYPES (FUNCTIONS FNS) (VARIABLES VARS CONSTANTS)) (RPAQ? SAVEDDEFS ) (* ; "EDITCALLERS") (DEFINEQ (FINDCALLERS [LAMBDA (ATOMS FILES) (* lmm "30-SEP-78 01:36") (PROG ((X (EDITCALLERS ATOMS FILES T))) (RETURN (NCONC (DREVERSE (CDR X)) (AND (CAR X) (LIST (CONS (COND ((CDR X) '"plus other places on") (T 'on)) (CAR X]) (EDITCALLERS [LAMBDA (ATOMS FILES COMS) (* ; "Edited 8-Aug-2020 17:32 by rmk:") (* bvm%: " 3-Nov-86 17:30") (LET (FFILEPOSPATTERNS FNS OTHERSFILES EDITPATTERN) [SETQ EDITPATTERN (EDITFPAT (CONS '*ANY* (SETQ ATOMS (MKLIST ATOMS] [for FILE in (COND ((NULL FILES) FILELST) ((EQ FILES T) (UNION SYSFILES FILELST)) ((LISTP FILES) FILES) (T (LIST FILES))) do (RESETLST [PROG (PATTERNS CA RDTBL MAP NOMAPFLG FULL FILESTREAM PRINTFLG ENV DUMMY TOP I) (OR (SETQ FULL (FINDFILE FILE)) (RETURN (LISPXPRINT (CONS FILE '(not found)) T T))) [RESETSAVE NIL (LIST (FUNCTION CLOSEF?) (SETQ FILESTREAM (OPENSTREAM FULL 'INPUT] (CL:FORMAT T "~A: " (SETQ FULL (FULLNAME FILESTREAM))) (CL:MULTIPLE-VALUE-SETQ (ENV MAP TOP) (OR (GET-ENVIRONMENT-AND-FILEMAP FULL) (\PARSE-FILE-HEADER FILESTREAM))) (* ;; "Get reader environment of file. The call to GET-ENVIRONMENT-AND-FILEMAP with the filename will get cached info if it exists. Otherwise, read the top of the file") (SETQ RDTBL (AND ENV (fetch (READER-ENVIRONMENT REREADTABLE) of ENV))) (SETQ CA (SEPRCASE DWIMIFYCOMPFLG RDTBL)) [OR (SETQ PATTERNS (CDR (ASSOC RDTBL FFILEPOSPATTERNS))) (push FFILEPOSPATTERNS (CONS RDTBL (SETQ PATTERNS (for ATOM in ATOMS collect (CONCAT (COND ((EQ (CHCON1 ATOM) (CHARCODE ESCAPE)) (SETQ ATOM (SUBSTRING ATOM 2 -1)) "") (T " ")) [COND ((SETQ I (STRPOS ' ATOM)) (SUBSTRING ATOM 1 (SUB1 I))) ((STRINGP ATOM)) (T (LET ((*PACKAGE* (CL:SYMBOL-PACKAGE ATOM))) (* ;  "Keep MKSTRING from putting a prefix on") (MKSTRING ATOM T RDTBL] (COND (I "") (T " "] (for PATTERN in PATTERNS do (SETFILEPTR FILESTREAM (SETQ I (OR TOP 0))) (while (SETQ I (FFILEPOS PATTERN FILESTREAM I NIL NIL T CA)) do (COND ((NULL PRINTFLG) (* ;  "cause the printing of the filename to be saved on history list") (SETQ PRINTFLG T) (LISPXPRIN2 FULL T T T) (* ;; "print with NODOFLG=T means just to record the printing; the idea is that only those files in which something is found will be remembered on the history list") (LISPXPRIN1 ": " T NIL T))) [OR [AND (NEQ MAP T) (for X in (CDR (OR MAP [PROGN (SETFILEPTR FILESTREAM 0) (SETQ MAP (OR (GETFILEMAP FILESTREAM) (LOADFILEMAP FILESTREAM] (PROGN (* ; "file has no filemap") (SETQ MAP (SETQ NOMAPFLG T)) (LISPXPRIN1 " no filemap!" T) NIL))) thereis (AND (ILESSP (CAR X) I) (IGREATERP (CADR X) I) (for Z in (CDDR X) thereis (COND ((AND (ILESSP (CADR Z) I) (IGREATERP (CDDR Z) I)) [COND ((NOT (FMEMB (CAR Z) FNS)) (SETQ FNS (CONS (LISPXPRIN2 (CAR Z) T T) FNS] (SETQ I (CDDR Z)) T] (PROGN (LISPXPRIN2 I T T) (OR (FMEMB FILE OTHERSFILES) (SETQ OTHERSFILES (CONS FILE OTHERSFILES] (LISPXSPACES 1 T))) (COND (PRINTFLG (LISPXTERPRI T)) (T (TERPRI T))) (COND ((NEQ COMS T) (COND ((OR FNS OTHERSFILES) (EDITFROMFILE (OR NOMAPFLG (DREVERSE FNS)) FULL EDITPATTERN COMS (NULL OTHERSFILES)) (SETQ OTHERSFILES) (SETQ FNS])] (COND ((EQ COMS T) (CONS OTHERSFILES FNS]) (EDITFROMFILE [LAMBDA (FNS FILES EDITPATTERN EDITCOMS ONLYTYPES) (* rmk%: "14-Mar-85 21:51") (RESETVARS [(EDITLOADFNSFLG (COND ((EQ EDITLOADFNSFLG T) '(T . NO)) (T EDITLOADFNSFLG] (PROG NIL [OR EDITCOMS (SETQ EDITCOMS (LIST (LIST 'EXAM EDITPATTERN] (AND (SETQ FILES (for FILE inside (OR FILES FILELST) when (OR (AND EDITLOADFNSFLG (FMEMB (ROOTFILENAME FILE) FILELST)) (COND ((EQ 'Y (ASKUSER DWIMWAIT 'Y (LIST "load from" FILE) NIL T)) (LOADFROM FILE FNS 'ALLPROP) T))) collect FILE)) (for TYPE in [COND ((LISTP ONLYTYPES)) (ONLYTYPES '(FNS)) (T (* ;; "Move FNS to the front. This means that all the fns will be dwimified and edited before anything else (like a rename of fields) is done.") (CONS 'FNS (REMOVE 'FNS FILEPKGTYPES] when (AND (LITATOM TYPE) (NEQ (fetch EDITDEF of TYPE) 'NILL)) do (PROG (SEEN) (for FILE inside FILES do (for NAME in [COND ((AND (EQ TYPE 'FNS) (NEQ FNS T)) (* ;  "for this type, we are given the list of items") (PROG1 FNS (SETQ FNS NIL))) (T (* ;  "only want the values of `TYPE' which are not part of some other type") (FILECOMSLST FILE TYPE 'EDIT] unless (MEMBER NAME SEEN) do (ERSETQ (PROG [(DEF (OR (GETDEF NAME TYPE 'CURRENT '(NOCOPY NOERROR)) (GETDEF NAME TYPE 'SAVED '(NOCOPY NOERROR] (* ;; "If definition has been loaded, it may have been editted. Work on that explicitly instead of bringing in a file definition to smash the users previous changes. Perhaps we should query the user about this, but until the interaction is worked out, it is better to avoid trashing his in core edits, given that he can always get the file definition from permanent storage with LOADFNS. --- We might also be more discriminating about this: if the user specified a root file name, then he means the definition from the definition group, not the physical file. But ... rmk") (COND ((OR (AND (EQ TYPE 'FNS) (NEQ FNS T)) (AND (LISTP DEF) (LOOKIN DEF EDITPATTERN))) (COND ((NULL SEEN) (LISPXPRIN1 "editing the " T) (LISPXPRIN1 (OR (fetch DESCRIPTION of TYPE) TYPE) T) (LISPXSPACES 1 T))) (SETQ SEEN (CONS NAME SEEN)) (LISPXPRIN2 NAME T T) (LISPXPRIN1 ": " T) (COND ((NOT (ERSETQ (EDITDEF NAME TYPE (OR (AND DEF (CONS '= DEF)) FILE) EDITCOMS))) (LISPXPRIN1 "failed" T))) (LISPXTERPRI T]) (FINDATS [LAMBDA (X L) (* lmm "11-FEB-78 16:03") (COND ((NLISTP X) (FMEMB X L)) (T (OR (FINDATS (CAR X) L) (FINDATS (CDR X) L]) (LOOKIN [LAMBDA (X PAT) (* lmm "11-MAR-78 14:20") (COND ([AND (EQ (CAR PAT) '*ANY*) (EVERY (CDR PAT) (FUNCTION (LAMBDA (X) (AND (LITATOM X) (NOT (STRPOS ' X] (FINDATS X (CDR PAT))) (T (EDITFINDP X PAT T]) ) (DEFINEQ (SEPRCASE [LAMBDA (CLFLG RDTBL) (* bvm%: "24-Oct-86 18:16") (* ;; "make a case array for FFILEPOS in which all of the seprs, breaks, and (possibly) clisp chars are all equivalent. Based on FILERDTBL, but others are close with respect to breaks and seprs") (OR RDTBL (SETQ RDTBL FILERDTBL)) (OR [ARRAYP (CDR (ASSOC RDTBL (COND (CLFLG CLISPCASEARRAYS) (T SEPRCASEARRAYS] (LET ((CA (CASEARRAY))) [if (READTABLEPROP RDTBL 'CASEINSENSITIVE) then (* ; "map upper into lower case") (for I from (CHARCODE A) to (CHARCODE Z) do (SETCASEARRAY CA I (+ I (- (CHARCODE a) (CHARCODE A] (for X in (NCONC (AND CLFLG (for Y in CLISPCHARS collect (CHCON1 Y))) (GETSEPR RDTBL) (GETBRK RDTBL)) do (SETCASEARRAY CA X 0)) (if *PACKAGE* then (* ;  "symbols qualified with package prefix will otherwise be unfindable") (SETCASEARRAY CA (READTABLEPROP RDTBL 'PACKAGECHAR) 0)) (SETQ CA (CONS RDTBL CA)) (COND (CLFLG (push CLISPCASEARRAYS CA)) (T (push SEPRCASEARRAYS CA))) (CDR CA]) ) (RPAQ? DEFAULTRENAMEMETHOD '(EDITCALLERS CAREFUL)) (RPAQ? SEPRCASEARRAYS ) (RPAQ? CLISPCASEARRAYS ) (MOVD? 'INFILEP 'FINDFILE) (* ; "or else from SPELLFILE") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: EDITFROMFILE EDITFROMFILE LOOKIN (GLOBALVARS EDITLOADFNSFLG) (NOLINKFNS LOADFROM)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SYSFILES CLISPCASEARRAYS SEPRCASEARRAYS CLISPCHARS) ) (* ; "EXPORT") (DEFINEQ (IMPORTFILE [LAMBDA (FILE RETURNFLG) (* lmm " 6-Jun-86 17:43") (RESETLST [RESETSAVE NIL (LIST 'CLOSEF (SETQ FILE (OPENSTREAM FILE 'INPUT] (RESETSAVE (INPUT FILE)) (* ;  "Reset INPUT in case some form on the file's action is to read the next expression") (NCONC [COND ((EQ RETURNFLG T) (* ;  "Just creating EXPORTS.ALL, don't side-effect the world") (IMPORTFILESCAN FILE RETURNFLG)) (T (LET (FILEPKGFLG DFNFLG) (IMPORTFILESCAN FILE RETURNFLG] (IMPORTEVAL [LIST 'PUTPROP (KWOTE (ROOTFILENAME FILE)) ''IMPORTDATE (LIST 'IDATE (GETFILEINFO FILE 'CREATIONDATE] RETURNFLG)))]) (IMPORTEVAL [LAMBDA (FORM RETURNFLG) (* ; "Edited 2-May-87 18:57 by Pavel") (* ;; "Ignore DONTEVAL@LOAD'S --- If RETURNFLG is on, return list of forms") (AND (LISTP FORM) (SELECTQ (CAR FORM) (DECLARE%: (FOR Z IN (CDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (CL:EVAL-WHEN (FOR Z IN (CDDR FORM) JOIN (IMPORTEVAL Z RETURNFLG))) (/DECLAREDATATYPE (* ;  "Ignore datatype initializations -- we only need the record declaration itself") NIL) (PROGN (* ; "default: eval and/or return it") (AND (NEQ RETURNFLG T) (EVAL FORM)) (AND RETURNFLG (LIST FORM]) (IMPORTFILESCAN [LAMBDA (FILE RETURNFLG) (* bvm%: "24-Oct-86 19:31") (WITH-READER-ENVIRONMENT (GET-ENVIRONMENT-AND-FILEMAP FILE) (while (FFILEPOS BEGINEXPORTDEFSTRING FILE NIL NIL NIL T) bind DEF join (until (EQUAL (SETQ DEF (READ FILE)) ENDEXPORTDEFFORM) join (IMPORTEVAL DEF RETURNFLG))))]) (CHECKIMPORTS [LAMBDA (FILES NOASKFLG) (* rmk%: "19-FEB-83 16:31") (* ;  "Loads exported definitions from new versions of FILES.") (COND ((AND (SETQ FILES (for FILE inside FILES bind FULLFILENAME DATE when [AND (SETQ FULLFILENAME (FINDFILE FILE T)) (OR [NOT (SETQ DATE (GETPROP (ROOTFILENAME FILE) 'IMPORTDATE] (NOT (IEQP DATE (GETFILEINFO FULLFILENAME 'ICREATIONDATE] collect (LIST FILE FULLFILENAME))) (OR NOASKFLG (SELECTQ (ASKUSER 5 'Y (LIST "load new exports from " (MAPCAR FILES (FUNCTION CAR))) '((Y "es ") (N "o ")) T) (N NIL) T))) (for FILE in FILES do (IMPORTFILE (CADR FILE]) (GATHEREXPORTS [LAMBDA (FROMFILES TOFILE FLG) (* bvm%: "14-Oct-86 23:12") (* ;  "Copies all exported definitions from FROMFILES to TOFILE.") (RESETLST [RESETSAVE NIL (LIST (FUNCTION CLOSE-AND-MAYBE-DELETE) (SETQ TOFILE (OPENSTREAM TOFILE 'OUTPUT] (RESETSAVE (OUTPUT TOFILE)) (LET ((ENV *DEFAULT-MAKEFILE-ENVIRONMENT*)) (SETQ ENV (if ENV then (\DO-DEFINE-FILE-INFO NIL ENV) else *OLD-INTERLISP-READ-ENVIRONMENT*)) (WITH-READER-ENVIRONMENT ENV (PRINT-READER-ENVIRONMENT ENV) (printout NIL "(LISPXPRIN1 %"EXPORTS GATHERED FROM " (DIRECTORYNAME T) " ON " (DATE) "%" T)" T "(LISPXTERPRI T)" T) (for F inside FROMFILES do (MAPC (IMPORTFILE F (OR FLG T)) (FUNCTION PRINT)) (TERPRI)) (PRINT 'STOP) (TERPRI) (FULLNAME TOFILE))))]) (\DUMPEXPORTS [NLAMBDA COMS (* bvm%: "24-Oct-86 19:42") (* ;;; "Dumps an EXPORT form. IMPORTFILE looks for a string announcing imports, but we must print it in a way that lets the file be loaded ok.") (PRIN1 "(") (PRIN2 '*) (PRIN1 (SUBSTRING BEGINEXPORTDEFSTRING 2)) (* ;  "BEGINEXPORTDEFSTRING starts with a * for benefit of IMPORTFILE") (for TAIL on COMS do (PRETTYCOM (CAR TAIL))) (TERPRI) (PRINT ENDEXPORTDEFFORM) (TERPRI]) ) (PUTDEF (QUOTE EXPORT) (QUOTE FILEPKGCOMS) '[(COM MACRO (X (E (\DUMPEXPORTS . X]) (RPAQ? BEGINEXPORTDEFSTRING "* %"FOLLOWING DEFINITIONS EXPORTED%")") (RPAQ? ENDEXPORTDEFFORM '(* "END EXPORTED DEFINITIONS")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS BEGINEXPORTDEFSTRING ENDEXPORTDEFFORM) ) (* ; "for GAINSPACE") (DEFINEQ (CLEARFILEPKG [LAMBDA (FLG) (* bvm%: "29-Aug-86 13:02") (PROG NIL (COND ((SELECTQ FLG ((E T) T) (Y (TERPRI T) (PRIN1 "you can delete just the filemaps - " T) (PROG1 [ASKUSER NIL NIL "are you sure you want to delete EVERYTHING ? " '((Y "es - everything" RETURN T) (N "o - just the filemaps" RETURN NIL) (E "verything" RETURN T) (F "ilemaps only" RETURN NIL] (TERPRI T))) NIL) (UPDATEFILES) [SETQ FILELST (SUBSET FILELST (FUNCTION (LAMBDA (FILE) (COND ((fetch TOBEDUMPED of (fetch FILEPROP of FILE)) (PRINT FILE T T) (PRIN1 " has changes, not wiped." T) (TERPRI T) T) (T (replace FILEPROP of FILE with NIL) (replace FILECHANGES of FILE with NIL) (SMASHFILECOMS FILE) (NCONC1 SYSFILES FILE) NIL] (SETQ LOADEDFILELST))) (SELECTQ FLG ((NIL T)) (CLRHASH *FILEMAP-HASH*]) ) (ADDTOVAR GAINSPACEFORMS (FILELST "erase filepkg information" (CLEARFILEPKG RESPONSE) ((Y "es") (N "o") (E . "verything") (F "ilemaps only ")))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SMASHPROPSLST1) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS %#UNDOSAVES ADDTOFILEKEYLST CLEANUPOPTIONS CLISPIFYPRETTYFLG COMPILE.EXT DECLARETAGSLST DEFAULTRENAMEMETHOD FILEPKGCOMSPLST FILERDTBL HISTORYCOMS HISTSTR0 I.S.OPRLST LISPXCOMS LISPXHISTORY LISPXHISTORYMACROS LISPXMACROS MACROPROPS MAKEFILEOPTIONS MAKEFILEREMAKEFLG MSDATABASELST PRETTYHEADER PRETTYTRANFLG SAVEDDEFS SYSPROPS USERMACROS USERRECLST USERWORDS FILEPKGTYPEPROPS) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: DELFROMCOMS DELFROMCOMS DELFROMCOM DELFROMCOM1 REMOVEITEM (NOLINKFNS . T) (SPECVARS COMSNAME)) (BLOCK%: ADDTOFILEBLOCK ADDTOFILES? ADDTOFILE WHATIS ADDTOCOMS ADDTOCOM ADDTOCOM1 ADDNEWCOM (NOLINKFNS . T) (SPECVARS COMSNAME) (ENTRIES ADDTOFILE ADDTOCOMS ADDTOFILES? ADDTOCOM1)) (BLOCK%: INFILECOMS? INFILECOMS? INFILECOMTAIL INFILECOMS INFILECOM INFILECOMSVAL INFILECOMSVALS INFILEPAIRS INFILECOMSMACRO IFCPROPS IFCEXPRTYPE IFCPROPSCAN IFCDECLARE (LOCALFREEVARS NAME LITERALS VAL TYPE ONFILETYPE ORIGFLG) INFILECOMSPROP) (BLOCK%: NIL MAKEFILE (LOCALVARS . T) (SPECVARS FILE OPTIONS REPRINTFNS SOURCEFILE FILETYPE FILEDATES CHANGES)) (BLOCK%: ADDFILE ADDFILE ADDFILE0) (BLOCK%: FILEPKGCHANGES FILEPKGCHANGES (NOLINKFNS . T)) (BLOCK%: NIL ALISTS.WHENCHANGED CHANGECALLERS CLEANUP CLEARCLISPARRAY COMPARE COMPAREDEFS COMPILEFILES COMPILEFILES0 CONTINUEDIT COPYDEF DEFAULTMAKENEWCOM DELFROMFILES EDITDEF EXPRESSIONS.WHENCHANGED FILECOMS FILECOMSLST FILEFNSLST FILEPKGCOM FILEPKGCOMPROPS FILEPKGTYPE FILES? FILES?1 GETFILEPKGTYPE HASDEF INFILECOMTAIL LOADDEF MAKEALISTCOMS MAKEFILE1 MAKEFILES MAKEFILESCOMS MAKELISPXMACROSCOMS MAKENEWCOM MAKEPROPSCOMS MAKEUSERMACROSCOMS MARKASCHANGED MOVETOFILE POSTEDITPROPS PREEDITFN PRETTYDEFMACROS PROPS.WHENCHANGED PUTDEF RENAME SAVEDEF SAVEPUT SEARCHPRETTYTYPELST SHOWDEF SMASHFILECOMS TYPESOF UNMARKASCHANGED UNSAVEDEF UPDATEFILES (GLOBALVARS %#UNDOSAVES SYSFILES MARKASCHANGEDSTATS COMPILE.EXT EDITMACROS EDITLOADFNSFLG LOADOPTIONS) (LOCALVARS . T)) (BLOCK%: DELDEF DELDEF DELFROMLIST (NOLINKFNS . T)) (BLOCK%: GETDEF GETDEF DWIMDEF GETDEFCOM GETDEFCOM0 GETDEFERR GETDEFCURRENT GETDEFFROMFILE GETDEFSAVED (RETFNS GETDEFCOM) (NOLINKFNS . T) (GLOBALVARS NOT-FOUNDTAG)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA \DUMPEXPORTS MAKEUSERMACROSCOMS MAKEPROPSCOMS MAKELISPXMACROSCOMS MAKEFILESCOMS MAKEALISTCOMS LISTFILES COMPILEFILES CLEANUP FILEPKGCOMPROPS PRETTYDEFMACROS) (ADDTOVAR NLAML ) (ADDTOVAR LAMA FILEPKGTYPE FILEPKGCOM FILEPKGCHANGES) ) (PUTPROPS FILEPKG COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 2018 2020 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (20677 22382 (SEARCHPRETTYTYPELST 20687 . 21666) (PRETTYDEFMACROS 21668 . 22126) ( FILEPKGCOMPROPS 22128 . 22380)) (23184 57307 (CLEANUP 23194 . 24582) (COMPILEFILES 24584 . 24860) ( COMPILEFILES0 24862 . 25582) (CONTINUEDIT 25584 . 27004) (MAKEFILE 27006 . 38648) (FILECHANGES 38650 . 40985) (FILEPKG.MERGECHANGES 40987 . 41810) (FILEPKG.CHANGEDFNS 41812 . 42124) (MAKEFILE1 42126 . 46353) (COMPILE-FILE? 46355 . 47912) (MAKEFILES 47914 . 49607) (ADDFILE 49609 . 52130) (ADDFILE0 52132 . 56268) (LISTFILES 56270 . 57305)) (57995 93235 (FILEPKGCHANGES 58005 . 59355) (GETFILEPKGTYPE 59357 . 62430) (MARKASCHANGED 62432 . 64069) (FILECOMS 64071 . 64455) (WHEREIS 64457 . 65877) ( SMASHFILECOMS 65879 . 66114) (FILEFNSLST 66116 . 66278) (FILECOMSLST 66280 . 66764) (UPDATEFILES 66766 . 72066) (INFILECOMS? 72068 . 73971) (INFILECOMTAIL 73973 . 75113) (INFILECOMS 75115 . 75276) ( INFILECOM 75278 . 85487) (INFILECOMSVALS 85489 . 85816) (INFILECOMSVAL 85818 . 86820) (INFILECOMSPROP 86822 . 87651) (IFCPROPS 87653 . 88914) (IFCEXPRTYPE 88916 . 89427) (IFCPROPSCAN 89429 . 90482) ( IFCDECLARE 90484 . 91795) (INFILEPAIRS 91797 . 92129) (INFILECOMSMACRO 92131 . 93233)) (93270 124046 ( FILES? 93280 . 95473) (FILES?1 95475 . 96125) (FILES?PRINTLST 96127 . 96909) (ADDTOFILES? 96911 . 107513) (ADDTOFILE 107515 . 108431) (WHATIS 108433 . 110409) (ADDTOCOMS 110411 . 112055) (ADDTOCOM 112057 . 118604) (ADDTOCOM1 118606 . 119777) (ADDNEWCOM 119779 . 120829) (MAKENEWCOM 120831 . 122674) (DEFAULTMAKENEWCOM 122676 . 124044)) (124116 126933 (MERGEINSERT 124126 . 126469) (MERGEINSERT1 126471 . 126931)) (127087 128444 (ADDTOFILEKEYLST 127097 . 128442)) (128561 139473 (DELFROMFILES 128571 . 129421) (DELFROMCOMS 129423 . 131102) (DELFROMCOM 131104 . 136972) (DELFROMCOM1 136974 . 137771) ( REMOVEITEM 137773 . 138647) (MOVETOFILE 138649 . 139471)) (139687 142056 (SAVEPUT 139697 . 142054)) ( 142181 150505 (UNMARKASCHANGED 142191 . 143899) (PREEDITFN 143901 . 146412) (POSTEDITPROPS 146414 . 148915) (POSTEDITALISTS 148917 . 150503)) (150654 171208 (ALISTS.GETDEF 150664 . 151043) ( ALISTS.WHENCHANGED 151045 . 151689) (CLEARCLISPARRAY 151691 . 152865) (EXPRESSIONS.WHENCHANGED 152867 . 153241) (MAKEALISTCOMS 153243 . 154316) (MAKEFILESCOMS 154318 . 155755) (MAKELISPXMACROSCOMS 155757 . 157775) (MAKEPROPSCOMS 157777 . 158475) (MAKEUSERMACROSCOMS 158477 . 160277) (PROPS.WHENCHANGED 160279 . 160900) (FILEGETDEF.LISPXMACROS 160902 . 162344) (FILEGETDEF.ALISTS 162346 . 162965) ( FILEGETDEF.RECORDS 162967 . 163898) (FILEGETDEF.PROPS 163900 . 164692) (FILEGETDEF.MACROS 164694 . 165754) (FILEGETDEF.VARS 165756 . 166172) (FILEGETDEF.FNS 166174 . 167538) (FILEPKGCOMS.PUTDEF 167540 . 169980) (FILES.PUTDEF 169982 . 170939) (VARS.PUTDEF 170941 . 171084) (FILES.WHENCHANGED 171086 . 171206)) (173230 180663 (RENAME 173240 . 174641) (CHANGECALLERS 174643 . 180661)) (180664 228612 ( SHOWDEF 180674 . 181467) (COPYDEF 181469 . 183943) (GETDEF 183945 . 186221) (GETDEFCOM 186223 . 187189 ) (GETDEFCOM0 187191 . 188537) (GETDEFCURRENT 188539 . 194959) (GETDEFERR 194961 . 196262) ( GETDEFFROMFILE 196264 . 200544) (GETDEFSAVED 200546 . 201650) (PUTDEF 201652 . 202355) (EDITDEF 202357 . 203334) (DEFAULT.EDITDEF 203336 . 206172) (EDITDEF.FILES 206174 . 206375) (LOADDEF 206377 . 206553) (DWIMDEF 206555 . 207409) (DELDEF 207411 . 210425) (DELFROMLIST 210427 . 210931) (HASDEF 210933 . 217255) (GETFILEDEF 217257 . 217779) (SAVEDEF 217781 . 219440) (UNSAVEDEF 219442 . 220338) ( COMPAREDEFS 220340 . 223642) (COMPARE 223644 . 224348) (TYPESOF 224350 . 228610)) (228679 233722 ( FIXEDITDATE 228689 . 232192) (EDITDATE? 232194 . 233720)) (234141 242727 (FILEPKGCOM 234151 . 239084) (FILEPKGTYPE 239086 . 242725)) (254764 269316 (FINDCALLERS 254774 . 255289) (EDITCALLERS 255291 . 262949) (EDITFROMFILE 262951 . 268631) (FINDATS 268633 . 268905) (LOOKIN 268907 . 269314)) (269317 271044 (SEPRCASE 269327 . 271042)) (271561 277103 (IMPORTFILE 271571 . 272545) (IMPORTEVAL 272547 . 273427) (IMPORTFILESCAN 273429 . 273850) (CHECKIMPORTS 273852 . 275188) (GATHEREXPORTS 275190 . 276513 ) (\DUMPEXPORTS 276515 . 277101)) (277441 279649 (CLEARFILEPKG 277451 . 279647))))) STOP \ No newline at end of file diff --git a/sources/FILEPKG.LCOM b/sources/FILEPKG.LCOM index c3d5a0d857fdc175b963d9a9542121d1889deabe..9d08805a73ac970c2f88e38c72535ab1ff02a2fe 100644 GIT binary patch delta 1565 zcmb7F&yU+w5bi5dC4N{cNI*!p)$l|r8+KQIFSZkVON!+<+bCIQYdfJW+C$j2nn+H( zO0tV8gmU0sQ3c6oPW=apmLvZH{|6FBE{HPrnylCDrH+*M=9`&szIpN+|MvXa@4sC8 zY40K9Tdm;REiQ8gtY$FHkTnV-J&Y#D<1jdaXbKd*Z+e{{?u?>I&-rUu>s7Gs znXYO1whO$bwM^_JHMz;w#DP z8o0LKcOBqLO5AF@d#&y+@Tv?qfO8eHx1KW{oStpn>!og42m8T(*K9kU@3x&?U`t(x zuYjp4R1R>Fp&|iOP-D+YNin3VA}2%UjFWLC$H|yd;H*_I1E?6Paur08QlKro<1igg z0t4@y{UE+`O5R;{VB0n`co9q>ZY;=0pQsvYILD~~Dyl!AprHEr`JAu~UPEoz55odUr}<-#A@x%101H=n=c{xIt6Kg4U6JxDGVtsv>nXoVhC$CwEPHV(M1i3 zo;<19lAb+z^oU-JUi<@0OuYI>c=O;_7z&el*~w(LxBdD)@AEwG`+oiSdiLF$*_VYL zzZBAH-4Gw)Bf!OlSVV|MF%Vp9HQIIC+JIIQFffnOM*hjwRmbW$sr%KoU2Ue6R;_BM z8rFtw?L@=zlwEh)wN}SUIj!wZ&2mzioFW(V*>IBMS&DHbB(^)WP=ppr2oX+*@)%xy zINf8chwY9N6rdpHWiN>XNh=g-5b~a`L!DA64C(+a1etBy24jbo=>i}9Lq8l2W7w#6 zDQO0eAMjBjz9{fZm}Q8EDCx3j%4xs@@x4j)l++Q$0>dZbkys3BTh->K0GP~bT`JcsR`mq_bcc%X>fbOQ;QW*v2 zZGA`D1g=0gDtCL(YJ$~gRDmBlS0RMxV9fH^!}Z!YO=JVWt1$KlpFS>D0QbRfTwB_ z856n`U1(Mt7K>pl5tzJuOYy{#InO0YQ!_cekjVlGvONf{@0&Bl*`X=agG0R^sbqB7 zT-8--Xj%tRH7c?`Fpn%#qpWI2pglOicNtpUE%%ELUG6dCbf>eW792hSBNqE4e%Iem znc5%8Bk1{|%VbFXu=yIfKu6)856vUSeeOeZ=RI2#(J;L&_n-*9Na$QGKr#vLUKs`H zhwsZM>Ha9Ai!_D`jlVkRtlOv{A7c7XE9mna2Vy#HY97c)`0=U??u6r28QqTfKVKC; cOMixXQ7n~Uv@oFNl>TD}B`%z#hxCE@1wU{aCjbBd From e2239ae6a5c4cbc3a727d024ae1850858ce0c4eb Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Sat, 13 Feb 2021 14:45:47 -0800 Subject: [PATCH 12/37] make init files --- .gitignore | 4 ++++ scripts/loadup-init.sh | 16 ++++++++++++++++ sources/LOADUP-INIT.LISP | 10 ++++++++++ 3 files changed, 30 insertions(+) create mode 100755 scripts/loadup-init.sh create mode 100644 sources/LOADUP-INIT.LISP diff --git a/.gitignore b/.gitignore index c43f9967..f0b27cf7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +# loadup interim steps + +tmp/* +loadups/init* #compiled code -- leave in for now diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh new file mode 100755 index 00000000..a7cae529 --- /dev/null +++ b/scripts/loadup-init.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +export MEDLEYDIR=`pwd` + +if [ ! -f run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +export LOADUPDIR="$MEDLEYDIR" +mkdir -p "$MEDLEYDIR/tmp" + +./run-medley -greet "$MEDLEYDIR"/sources/LOADUP-INIT.LISP -full + +ls -l tmp loadups/init* + diff --git a/sources/LOADUP-INIT.LISP b/sources/LOADUP-INIT.LISP new file mode 100644 index 00000000..3f4ce49f --- /dev/null +++ b/sources/LOADUP-INIT.LISP @@ -0,0 +1,10 @@ +(* "make init files") + +(CNDIR (MEDLEYDIR "tmp")) + +(LOAD (MEDLEYDIR "sources" "MAKEINITGREET.LCOM")) +(PROGN (DRIBBLE "makeinit.dribble") + (BKSYSBUF " ") + (MAKEINITGREET) + (DRIBBLE) + (LOGOUT T)) From 9143c29cca34248b2c2cd6379ff98dbc6962f77d Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Sun, 14 Feb 2021 00:08:37 -0800 Subject: [PATCH 13/37] Push to get new loadups for making an init, loadup a lisp and then a full --- run-medley | 4 +-- scripts/loadup-full.sh | 4 +-- scripts/loadup-lisp-from-init.sh | 46 ++++++++++++++++++++++++++ sources/LOADUP-FULL | 2 +- sources/LOADUP-FULL.LCOM | Bin 5728 -> 4908 bytes sources/LOADUP-GREET | 1 + sources/LOADUP-LISP | 2 +- sources/LOADUP-LISP.LCOM | Bin 5623 -> 4222 bytes sources/LOADUP.LISP | 54 ++++++++++++++++++++++++++++++- sources/MAIKOINIT | 7 ++++ sources/XREM.CM | 8 +++++ 11 files changed, 120 insertions(+), 8 deletions(-) create mode 100755 scripts/loadup-lisp-from-init.sh create mode 100644 sources/LOADUP-GREET create mode 100755 sources/MAIKOINIT create mode 100644 sources/XREM.CM diff --git a/run-medley b/run-medley index 41475634..861eee9b 100755 --- a/run-medley +++ b/run-medley @@ -80,10 +80,10 @@ while [ "$#" -ne 0 ]; do shift ;; "-full") - export LDESRCESYSOUT="$MEDLEYDIR/loadups/xfull35.sysout" + export LDESRCESYSOUT="$MEDLEYDIR/loadups/full.sysout" ;; "-lisp") - export LDESRCESYSOUT="$MEDLEYDIR/loadups/xlisp.sysout" + export LDESRCESYSOUT="$MEDLEYDIR/loadups/lisp.sysout" ;; "-*") passthrough_args="$passthrough_args $1 $2" diff --git a/scripts/loadup-full.sh b/scripts/loadup-full.sh index c17c4016..882266ed 100755 --- a/scripts/loadup-full.sh +++ b/scripts/loadup-full.sh @@ -7,8 +7,6 @@ if [ ! -f run-medley ] ; then exit 1 ; fi -export LOADUPDIR=$MEDLEYDIR - -./run-medley -greet $MEDLEYDIR/sources/LOADUP-FULL.LCOM $MEDLEYDIR/loadups/xlisp.sysout +./run-medley -greet $MEDLEYDIR/sources/LOADUP-FULL.LCOM $MEDLEYDIR/loadups/lisp.sysout diff --git a/scripts/loadup-lisp-from-init.sh b/scripts/loadup-lisp-from-init.sh new file mode 100755 index 00000000..f83b06d1 --- /dev/null +++ b/scripts/loadup-lisp-from-init.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +export MEDLEYDIR=`pwd` + +if [ ! -f run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +export LOADUPDIR="$MEDLEYDIR" +mkdir -p "$MEDLEYDIR/tmp" +echo ------ starting with --- +ls -l tmp loadups/init* +echo ---------- +rm -f ~/rem.cm ~/lisp.virtualmem + +cp sources/XREM.CM ~/rem.cm + +prog=../maiko/linux.x86_64/ldeinit +if [ ! -x $prog ] ; then + echo $prog not found + prog=../maiko/darwin.aarch64/ldeinit +fi + +$prog -sc 1000x900 -g 1000x900 loadups/init.dlinit +echo init run + +cp ~/lisp.virtualmem tmp/init-mid.sysout +echo '"' > ~/rem.cm + +echo '(PROGN(LOAD(QUOTE {DSK}'$MEDLEYDIR'/sources/LOADUP.LISP))(HARDRESET))' >> ~/rem.cm +echo 'SHH(PROGN (IL:ENDLOADUP) (IL:SPECVARS . T) (IL:MAKESYS (QUOTE {DSK}'$MEDLEYDIR'/loadups/lisp.sysout)))' >> ~/rem.cm +echo '(IL:LOGOUT)' >> ~/rem.cm + +echo '"' >> ~/rem.cm + +echo -----rem.cm +cat ~/rem.cm +echo ----- +./run-medley -greet $MEDLEYDIR/sources/LOADUP-GREET tmp/init-mid.sysout +rm ~/rem.cm + +echo ----- created: ------- +ls -l loadups/lisp.sysout +echo ---------------------- + diff --git a/sources/LOADUP-FULL b/sources/LOADUP-FULL index df325f60..71566db0 100644 --- a/sources/LOADUP-FULL +++ b/sources/LOADUP-FULL @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED " 6-Feb-2021 15:41:34" {DSK}larry>ilisp>medley>sources>LOADUP-FULL.;3 7916 changes to%: (VARS LOADUP-FULLCOMS) previous date%: " 6-Feb-2021 13:46:58" {DSK}larry>ilisp>medley>sources>LOADUP-FULL.;2) (PRETTYCOMPRINT LOADUP-FULLCOMS) (RPAQQ LOADUP-FULLCOMS ((COMMANDS "cd" "pwd" "ls") (FNS LOADFULLFONTS MAKEFULLSYSOUT FIXMETA) (P (FIXMETA)) (VARS (WRITEFULLSYSOUTFLAG T)) (GLOBALVARS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (P (MAKEFULLSYSOUT))) (PROP FILETYPE))) (DEFCOMMAND "cd" (DIR) (/CNDIR DIR)) (DEFCOMMAND "pwd" NIL (DIRECTORYNAME T)) (DEFCOMMAND "ls" (FIRST . REST) (DODIR (CONS FIRST REST))) (DEFINEQ (LOADFULLFONTS [LAMBDA (ROOTDIRECTORY) (* ;  "Edited 11-Aug-2020 17:53 by rmk:") (* ;; " Don't do Interpress. Do character set 0 and the symbol character sets 41Q, 42Q, 356Q, 357Q and extended and accented Latin 43Q and 361Q") (PRINTOUT T "Loading FULL fonts..." T) (SETQ DISPLAYFONTDIRECTORIES (LIST (PACK* ROOTDIRECTORY "/fonts/displayfonts") (PACK* ROOTDIRECTORY "/fonts/altofonts"))) (* (SETQ INTERPRESSFONTDIRECTORIES  (CONS (PACK* ROOTDIRECTORY  "/fonts/ipfonts")))) (SETQ DISPLAYFONTEXTENSIONS '(DISPLAYFONT STRIKE)) (SETQ POSTSCRIPTFONTDIRECTORIES (CONS (PACK* ROOTDIRECTORY "/fonts/postscriptfonts"))) (SETQ *POSTSCRIPT-FILE-TYPE* 'TEXT) (RESETVARS ((MISSINGDISPLAYFONTCOERCIONS NIL) (MISSINGCHARSETDISPLAYFONTCOERCIONS NIL)) (* ;  "Don't let the font loader substitute just because a server went catatonic on us") (for FAMILY in '(CLASSIC MODERN TERMINAL) do (PRINTOUT T " Loading " FAMILY " ") [for SIZE in '(8 10 12) do (PRINTOUT T SIZE " ") (for FACE in '(MRR BRR MIR) do (* ;; "No need for Interpress") (* (NLSETQ (FONTCREATE FAMILY SIZE  FACE NIL (QUOTE INTERPRESS) NIL 0))) (for CSET in '(0 33 34 35 238 239 241) do (NLSETQ (FONTCREATE FAMILY SIZE FACE NIL 'DISPLAY NIL CSET] (PRINTOUT T T)) (PRINTOUT T " Loading postscript fonts" T) (for F in (FILDIR (CONCAT (CAR POSTSCRIPTFONTDIRECTORIES) ">c0>*.*")) do (PSCFONT.READFONT F)) (PRINTOUT T "FULL fonts loaded" T]) (MAKEFULLSYSOUT [LAMBDA NIL (* ; "Edited 5-Dec-2020 20:07 by larry") (* ;  "Edited 14-May-2018 15:01 by kaplan") (* ;  "Edited 28-Sep-2020 12:35 by rmk:") (* ; "Edited 17-Apr-2018 08:41 by ") (* ;  "Edited 21-Apr-2018 07:27 by rmk:") (* ; "Edited 23-Feb-94 15:04 by bvm") (CLRPROMPT) (CNDIR (UNIX-GETENV "LOADUPDIR")) (LET ((ROOTDIRECTORY (MEDLEYDIR))) (SETQ MAKESYSFILENAME (CONCAT (MEDLEYDIR "loadups") "xfull35.sysout")) (DRIBBLE (PACKFILENAME 'EXTENSION 'DRIBBLE 'BODY MAKESYSFILENAME)) (* ;; "BKSYSBUF stops page holding ") (PRINTOUT T T "Full loadup started at " (DATE) " while connected to " (DIRECTORYNAME T) T T) (BKSYSBUF " ") (SETQ DEFAULTFILETYPE 'BINARY) (* ;  "These prevent bits from being lost due to lack of knowledge") (DREMOVE (ASSOC NIL DEFAULTFILETYPELIST) DEFAULTFILETYPELIST) (* (SETQ *UPPER-CASE-FILE-NAMES* NIL)) (SETQ MAKESYSNAME :MEDLEY3.5) (push DEFAULTFILETYPELIST '(TXT . TEXT) '(TEXT . TEXT) '(TEX . TEXT) '(HTML . TEXT) '(HTM . TEXT)) (MEDLEY-INIT-VARS) (SETQ LOADUPDIRECTORIES DIRECTORIES) (LOADUP '(POSTSCRIPTSTREAM)) (* ; " to get PSCFONT.READFONT") (LOADFULLFONTS (MEDLEYDIR)) (LISTPUT IDLE.PROFILE 'TIMEOUT 0) (SETQQ *DEFAULT-CLEANUP-COMPILER* BCOMPL) (LOADUP '(CHAT TEDIT HRULE TEDITCHAT READNUMBER EDITBITMAP FILEBROWSER THINFILES GRAPHER SPY WHERE-IS COPYFILES MSANALYZE MSPARSE MASTERSCOPE UNIXPRINT UNICODE ISO8859IO HELPSYS DINFO CLIPBOARD MACINTERFACE)) (FILESLOAD (SYSLOAD) PRETTYFILEINDEX WHO-LINE) (SETQ *WHO-LINE-ANCHOR* '(:CENTER :TOP)) (* ;; "Turn off who-line until after the user has greeted") (CL:WHEN (WINDOWP *WHO-LINE*) (CLOSEW *WHO-LINE*)) [SETQ POSTGREETFORMS (APPEND POSTGREETFORMS '((INSTALL-WHO-LINE-OPTIONS] (FILESLOAD (SYSLOAD) UNIXCOMM UNIXCHAT UNIXTELNET) (FILESLOAD (SYSLOAD) SETDEFAULTPRINTER) (FILESLOAD (SYSLOAD) LOADPATCHES) (\DAYTIME0 \LASTUSERACTION) (LISTPUT IDLE.PROFILE 'TIMEOUT 20) (for TYPE in FILEPKTYPES do (FILEPKGCHANGES TYPE NIL)) (SETTOPVAL 'INITIALS NIL) (PROMPTPRINT "About to end loadup") (PRINTOUT T "About to end loadup" T) (* ;; "From SYNCLISPFILES") (ENDLOADUP) (COND ((WINDOWP LOGOW) (CLOSEW LOGOW))) (DREMOVE (ASSOC 'LOGOW AFTERMAKESYSFORMS) AFTERMAKESYSFORMS) (push AFTERMAKESYSFORMS '(CLRPROMPT) '(MEDLEY-INIT-VARS)) (* ;; "Set up for making the sysout, if we made it this far.") (CL:WHEN WRITEFULLSYSOUTFLAG (PRINTOUT T "Creating FULL sysout on " MAKESYSFILENAME T) (BKSYSBUF (CONCAT "(IL:MAKESYS %"" MAKESYSFILENAME "%" %"Medley " (MEDLEYVERSION) " Full Sysout%")"))) (DRIBBLE]) (FIXMETA [LAMBDA NIL (* ;  "Edited 25-Jun-2017 17:12 by rmk:") (KEYACTION 'BLANK-TOP '(METADOWN . METAUP) \CURRENTKEYACTION) (KEYACTION 'BLANK-TOP '(METADOWN . METAUP]) ) (FIXMETA) (RPAQQ WRITEFULLSYSOUTFLAG T) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS) ) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (MAKEFULLSYSOUT) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (853 7655 (LOADFULLFONTS 863 . 3367) (MAKEFULLSYSOUT 3369 . 7344) (FIXMETA 7346 . 7653)) ))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "13-Feb-2021 23:47:35" {DSK}larry>ilisp>medley>sources>LOADUP-FULL.;6 6188 changes to%: (FNS MAKEFULLSYSOUT) (VARS LOADUP-FULLCOMS) previous date%: "13-Feb-2021 22:54:15" {DSK}larry>ilisp>medley>sources>LOADUP-FULL.;4) (PRETTYCOMPRINT LOADUP-FULLCOMS) (RPAQQ LOADUP-FULLCOMS ((COMMANDS "cd" "pwd" "ls") (FNS LOADFULLFONTS MAKEFULLSYSOUT FIXMETA) (P (FIXMETA)) (GLOBALVARS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (P (MAKEFULLSYSOUT T))) (PROP FILETYPE))) (DEFCOMMAND "cd" (DIR) (/CNDIR DIR)) (DEFCOMMAND "pwd" NIL (DIRECTORYNAME T)) (DEFCOMMAND "ls" (FIRST . REST) (DODIR (CONS FIRST REST))) (DEFINEQ (LOADFULLFONTS [LAMBDA NIL (* ; "Edited 13-Feb-2021 22:51 by larry") (* ;; " Don't do Interpress. Do character set 0 and the symbol character sets 41Q, 42Q, 356Q, 357Q and extended and accented Latin 43Q and 361Q") (PRINTOUT T "Loading FULL fonts..." T) (SETQ DISPLAYFONTEXTENSIONS '(DISPLAYFONT STRIKE)) (SETQ *POSTSCRIPT-FILE-TYPE* 'TEXT) (RESETVARS ((MISSINGDISPLAYFONTCOERCIONS NIL) (MISSINGCHARSETDISPLAYFONTCOERCIONS NIL)) (* ;  "Don't let the font loader substitute just because a server went catatonic on us") (for FAMILY in '(CLASSIC MODERN TERMINAL) do (PRINTOUT T " Loading " FAMILY " ") [for SIZE in '(8 10 12) do (PRINTOUT T SIZE " ") (for FACE in '(MRR BRR MIR) do (for CSET in '(0 33 34 35 238 239 241) do (NLSETQ (FONTCREATE FAMILY SIZE FACE NIL 'DISPLAY NIL CSET] (PRINTOUT T T)) (PRINTOUT T " Loading postscript fonts" T) (for F in (FILDIR (CONCAT (CAR POSTSCRIPTFONTDIRECTORIES) ">c0>*.*")) do (PSCFONT.READFONT F)) (PRINTOUT T "FULL fonts loaded" T]) (MAKEFULLSYSOUT [LAMBDA (DOIT) (* ; "Edited 13-Feb-2021 23:47 by larry") (* ; "Edited 14-May-2018 15:01 by kaplan") (* ; "Edited 28-Sep-2020 12:35 by rmk:") (* ; "Edited 17-Apr-2018 08:41 by ") (* ; "Edited 21-Apr-2018 07:27 by rmk:") (* ; "Edited 23-Feb-94 15:04 by bvm") (CLRPROMPT) (LET NIL (SETQ MAKESYSFILENAME (CONCAT (MEDLEYDIR "loadups") "full.sysout")) (SETQ MAKESYSNAME (CONCAT "Medley from Interlisp.org of " (DATE))) (DRIBBLE (PACKFILENAME 'EXTENSION "dribble" 'BODY MAKESYSFILENAME)) (* ;; "BKSYSBUF stops page holding ") (PRINTOUT T T "Full loadup started at " (DATE) " while connected to " (DIRECTORYNAME T) T T) (BKSYSBUF " ") (SETQ DEFAULTFILETYPE 'BINARY) (* ;  "These prevent bits from being lost due to lack of knowledge") (DREMOVE (ASSOC NIL DEFAULTFILETYPELIST) DEFAULTFILETYPELIST) (push DEFAULTFILETYPELIST '(TXT . TEXT) '(TEXT . TEXT) '(TEX . TEXT) '(HTML . TEXT) '(HTM . TEXT)) (MEDLEY-INIT-VARS) (SETQ LOADUPDIRECTORIES DIRECTORIES) (LOADUP '(POSTSCRIPTSTREAM)) (* ; " to get PSCFONT.READFONT") (LOADFULLFONTS) (LISTPUT IDLE.PROFILE 'TIMEOUT 0) (SETQQ *DEFAULT-CLEANUP-COMPILER* BCOMPL) (LOADUP '(CHAT PRESS INTERPRESS TEDIT HRULE TEDITCHAT READNUMBER EDITBITMAP FILEBROWSER THINFILES GRAPHER SPY WHERE-IS COPYFILES MSANALYZE MSPARSE MASTERSCOPE UNIXPRINT UNICODE ISO8859IO HELPSYS DINFO CLIPBOARD MACINTERFACE PRETTYFILEINDEX WHO-LINE UNIXCOMM UNIXCHAT)) (SETQ *WHO-LINE-ANCHOR* '(:CENTER :TOP)) (* ;; "Turn off who-line until after the user has greeted") (CL:WHEN (WINDOWP *WHO-LINE*) (CLOSEW *WHO-LINE*)) [SETQ POSTGREETFORMS (APPEND POSTGREETFORMS '((INSTALL-WHO-LINE-OPTIONS] (LISTPUT IDLE.PROFILE 'TIMEOUT 20) (SETTOPVAL 'INITIALS NIL) (ENDLOADUP) (COND ((WINDOWP LOGOW) (CLOSEW LOGOW))) (DREMOVE (ASSOC 'LOGOW AFTERMAKESYSFORMS) AFTERMAKESYSFORMS) (push AFTERMAKESYSFORMS '(CLRPROMPT) '(MEDLEY-INIT-VARS)) (* ;; "Set up for making the sysout, if we made it this far.") (CL:WHEN DOIT (PRINTOUT T "Creating FULL sysout on " MAKESYSFILENAME T) (BKSYSBUF (CONCAT "(IL:MAKESYS %"" MAKESYSFILENAME "%" %"Medley " " Full Sysout%")"))) (DRIBBLE]) (FIXMETA [LAMBDA NIL (* ;  "Edited 25-Jun-2017 17:12 by rmk:") (KEYACTION 'BLANK-TOP '(METADOWN . METAUP) \CURRENTKEYACTION) (KEYACTION 'BLANK-TOP '(METADOWN . METAUP]) ) (FIXMETA) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS) ) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (MAKEFULLSYSOUT T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (857 5960 (LOADFULLFONTS 867 . 2455) (MAKEFULLSYSOUT 2457 . 5649) (FIXMETA 5651 . 5958)) ))) STOP \ No newline at end of file diff --git a/sources/LOADUP-FULL.LCOM b/sources/LOADUP-FULL.LCOM index 4a1a70ad1cd78623f48fdca49ee382d3f03afead..49510ab1da133aa06668f6e710249d4448de4fa5 100644 GIT binary patch delta 2096 zcmZ`)OOG2x5Vn_uJT``eJWzrnN~2w3Td{F>&%^csWo-9kTRX4JjCW%xfOc(XW8|#E z?&gq_58M&a2+o{=Q}P3rKfqrAegop1P~9He*+kfqySuvjtE#Ua{`>ZCpZ(xnA*|vI zcPq3;2~gJ5t)@Yr?>JMl1ln77)N1NfgQNcB@sshb0gU#cp!t*C(f$D5RIOI48Vq)h zhJ*isC>4s1aCtl8cEUUFD4`E5Z=`PCD4AfAdL8PU3bX!lWWSsU*FS zmrIb_%CF>dlN^3V=jHG5=$u@Xq`$H!_x)4pt25SDRs&+uY(_lhN!Q;Neg`Za9(Y@> zh!Zdy;0AU_I_Ly`65F*}jR3JA;ZYa~AT_|nC&+}UzXN2@^v~04E4npXNc!sR%@tn#(yPa1(ZiNq!^fu8yKbrk3zDZCqTo;aC~fg#@ww(-(L?CA+` z6k3XrZrBkKZzn+{xCE}l$#VnBnO~K*%Wc0KR@#9VqR|NRlYfyrpUaKm973P zQR@DNl6)*xRoYYv)heugIcy#aDz4PhMt2f!b8}id%QSY`d_CHX%3R{U{_3WF~ z1y=u~^z~|ankc=Q<+C%T@s*|4BXy$?x(e*4*>bGlqHB@5R~YIiLLW}uc~Mt~to*_g zWq7Qv!tBWu{kb50QsBqR(8XL)XPDYZv|5-aof^>E#KgC{m@-;}cHp<|1X!a!uSC`$ zvr+_BXY-w*BLw$?Ee=e_S8fpVZD5RnEc9SI1V*hXaK9s~yep3suo03V+_GI@gn%rk zu$usFnDD?3L)4`}>-rpwT1zl$u&g+61ewdHR6p58K*_AH&?2o(4e&TtWv?Q9kyN(q zCzBg-me#%`35|T7(d+aoMBTtTfwUEFBzK(2(srm3P*H zNQ*9LM<+tNy}9T%v^^(21Hi~K30j#&f!49B+AhuqEO^=AOh+zMOEF@C3{u!`46KI! z3y)86?g7O)RNmeQDz5N(8K_x5d1T9D#rE49L4-=^PfK={i*(l%mV_dP2`%Bb@z1A3E91<6mTFfD>k4A8)NIvzv(>~Qk*Xk9C5D6N6EuEDzI4F}`l zGgQ&hXRRpQW`=-w8ZgTOt$i@uIU4Qnft;0as8C?Ck8c=G#^T!^UK%sdMYk|;$l9u!NF*EcRWNk2+ZkxcrbYkV*hA(FdiK~sZI{|VDb<& zglT~G5R*}z(Wn8Q$CI7G($SIJ=%6p$!hhU0=oA0| literal 5728 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 diff --git a/sources/LOADUP-GREET b/sources/LOADUP-GREET new file mode 100644 index 00000000..6a452c18 --- /dev/null +++ b/sources/LOADUP-GREET @@ -0,0 +1 @@ +() diff --git a/sources/LOADUP-LISP b/sources/LOADUP-LISP index ec4070c7..45d29593 100644 --- a/sources/LOADUP-LISP +++ b/sources/LOADUP-LISP @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP") (FILECREATED " 6-Feb-2021 15:41:31" |{DSK}larry>ilisp>medley>sources>LOADUP-LISP.;2| 7240 |changes| |to:| (VARS LOADUP-LISPCOMS) |previous| |date:| " 5-Feb-2021 13:59:18" |{DSK}larry>ilisp>medley>sources>LOADUP-LISP.;1| ) (PRETTYCOMPRINT LOADUP-LISPCOMS) (RPAQQ LOADUP-LISPCOMS ((FNS ENDLOADUP LOADUP-LISP MEDLEY-INIT-VARS MEDLEYDIR MEDLEYVERSION) (FILES SYNCLISPFILES) (VARS MEDLEY-INIT-VARS) (GLOBALVARS XCL::*WHERE-IS-CASH-FILES* LISPMAKESYSDATE MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST) (FUNCTIONS WITHOUT.PAGEHOLD) (DECLARE\: DONTEVAL@LOAD DOCOPY (P (LOADUP-LISP))))) (DEFINEQ (ENDLOADUP (LAMBDA NIL (* \; "Edited 5-Feb-2021 12:50 by lmm") (* \;  "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) (AND 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)))))) (LOADUP-LISP (LAMBDA NIL (* \; "Edited 5-Feb-2021 13:59 by lmm") (DRIBBLE (MEDLEYDIR "loadups" "xlisp.dribble" T)) (* |;;| " Use SYNCLISPFILES to make XLISP from LISP") (WITHOUT.PAGEHOLD (MEDLEY-INIT-VARS) (SETQ LISPMAKESYSDATE MAKESYSDATE) (SETQ MAKESYSFILENAME (MEDLEYDIR "loadups" "xlisp.sysout" T)) (SYNCLISPFILES) (ENDLOADUP) (CLRPROMPT) (BKSYSBUF (CONCAT "(IL:MAKESYS \"" MAKESYSFILENAME "\" \"Medley Lisp Sysout\")")) (DRIBBLE)))) (MEDLEY-INIT-VARS (LAMBDA (CLEAR) (* \; "Edited 17-Jan-2021 14:29 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) (NLSETQ (XCL::ADD-WHERE-IS-DATABASE (MEDLEYDIR "loadups" "WHEREIS.HASH")))) NIL))) (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))))) (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))))) ) (FILESLOAD SYNCLISPFILES) (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*))) (DECLARE\: DOEVAL@COMPILE DONTCOPY (GLOBALVARS XCL::*WHERE-IS-CASH-FILES* LISPMAKESYSDATE MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST) ) (DEFMACRO WITHOUT.PAGEHOLD (WINDOW &BODY FORMS) `(RESETLST (LET* ((TTYWINDOW ,WINDOW) (ORIGINAL.PAGEFULLFN (WINDOWPROP TTYWINDOW 'PAGEFULLFN)) (NEW.PAGEFULLFN (FUNCTION NILL))) (RESETSAVE (WINDOWPROP TTYWINDOW 'PAGEFULLFN NEW.PAGEFULLFN) (LIST (FUNCTION (LAMBDA (TTYWINDOW NEW.PAGEFULLFN ORIGINAL.PAGEFULLFN) (COND ((EQ (WINDOWPROP TTYWINDOW 'PAGEFULLFN) NEW.PAGEFULLFN) (WINDOWPROP TTYWINDOW 'PAGEFULLFN ORIGINAL.PAGEFULLFN))))) TTYWINDOW NEW.PAGEFULLFN ORIGINAL.PAGEFULLFN))) ,@FORMS)) (DECLARE\: DONTEVAL@LOAD DOCOPY (LOADUP-LISP) ) (DECLARE\: DONTCOPY (FILEMAP (NIL (764 5304 (ENDLOADUP 774 . 1693) (LOADUP-LISP 1695 . 2304) (MEDLEY-INIT-VARS 2306 . 3451 ) (MEDLEYDIR 3453 . 4756) (MEDLEYVERSION 4758 . 5302))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP") (FILECREATED "13-Feb-2021 22:31:02" |{DSK}larry>ilisp>medley>sources>LOADUP-LISP.;6| 5987 |changes| |to:| (FNS ENDLOADUP) |previous| |date:| "13-Feb-2021 20:05:39" |{DSK}larry>ilisp>medley>sources>LOADUP-LISP.;4| ) (PRETTYCOMPRINT LOADUP-LISPCOMS) (RPAQQ LOADUP-LISPCOMS ((FNS ENDLOADUP MEDLEY-INIT-VARS MEDLEYDIR) (INITVARS (FILING.ENUMERATION.DEPTH T)) (VARS MEDLEY-INIT-VARS) (GLOBALVARS XCL::*WHERE-IS-CASH-FILES* LISPMAKESYSDATE MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST) (FUNCTIONS WITHOUT.PAGEHOLD))) (DEFINEQ (ENDLOADUP (LAMBDA NIL (* \; "Edited 13-Feb-2021 19:26 by lmm") (* \; "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) (AND 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)))) (|for| TYPE |in| FILEPKGTYPES |do| (FILEPKGCHANGES TYPE NIL)) (CLRPROMPT))) (MEDLEY-INIT-VARS (LAMBDA (CLEAR) (* \; "Edited 17-Jan-2021 14:29 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) (NLSETQ (XCL::ADD-WHERE-IS-DATABASE (MEDLEYDIR "loadups" "WHEREIS.HASH")))) NIL))) (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))))) ) (RPAQ? FILING.ENUMERATION.DEPTH T) (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*))) (DECLARE\: DOEVAL@COMPILE DONTCOPY (GLOBALVARS XCL::*WHERE-IS-CASH-FILES* LISPMAKESYSDATE MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST) ) (DEFMACRO WITHOUT.PAGEHOLD (WINDOW &BODY FORMS) `(RESETLST (LET* ((TTYWINDOW ,WINDOW) (ORIGINAL.PAGEFULLFN (WINDOWPROP TTYWINDOW 'PAGEFULLFN)) (NEW.PAGEFULLFN (FUNCTION NILL))) (RESETSAVE (WINDOWPROP TTYWINDOW 'PAGEFULLFN NEW.PAGEFULLFN) (LIST (FUNCTION (LAMBDA (TTYWINDOW NEW.PAGEFULLFN ORIGINAL.PAGEFULLFN) (COND ((EQ (WINDOWPROP TTYWINDOW 'PAGEFULLFN) NEW.PAGEFULLFN) (WINDOWPROP TTYWINDOW 'PAGEFULLFN ORIGINAL.PAGEFULLFN))))) TTYWINDOW NEW.PAGEFULLFN ORIGINAL.PAGEFULLFN))) ,@FORMS)) (DECLARE\: DONTCOPY (FILEMAP (NIL (783 4092 (ENDLOADUP 793 . 1638) (MEDLEY-INIT-VARS 1640 . 2785) (MEDLEYDIR 2787 . 4090)) ))) STOP \ No newline at end of file diff --git a/sources/LOADUP-LISP.LCOM b/sources/LOADUP-LISP.LCOM index 132c1da65794bdd2831864303669a017a0264e78..84c1050b9282ede4ed1af146cbbfe19c98b28781 100644 GIT binary patch delta 533 zcmZut%}(1u5RT1Xi)1B0Rh0tLDC)thD%4&lG4=tpiZ_lGXS1;v1nLP$RMJDzAIfR( zTnl^V9greUJOi&l`wEM~_P+$F&_2RR%`D6{dwaMTCeIoIBJ&ya8#8D=wzX(ORT z(BO&ke_IQyo>uSGCDgnP7YuoLv_JYZ_%1;nk9`Sdlcn%rj6i<*HaHoMf8-1O{o_Hl z@-(ki^Bqt9(%j9eM8*Rb{9wZ{IXEEpI0X(EcC&6l0!^qwo|Cu397_=tK2K}P*YV8k zlDMp>vA!DJ_O%6Vs(mzH$ZAQSy1ILjPo;usTMjhhgeTn&7vMSfT8$QAAx*)pK}v<_ z@*NU`YpDzUgXXCleM|j*`Fe6bcRH)qiY>KRdW#U45sSnQNz&}}D2`aTPT6*cCPYMC zwjNL}S_TNDE{nZ|4r$YLFU_Mf(xG6euf-KrDY@@Z_W6X9-d3LFSrHJENeRzPvnV$H E0hZN@3;+NC delta 1887 zcmZWq&2QsW5YNX_ZL9qEh`#_Kl>>sqO8ghx(4IN;1UJOI=d|voK0M8g$Mf-<-#q^Z|33U? zWe#ek*8XmZDwF`JY89fDE9alDyhFnxNYE(hCr|OEq5!FD3cjT0zt0!L!SU(g(cmD2 z@MsW%)ZX9g?>~d`Vij6v{XY25hR0{80Ob7g?FNt}1EpFSk#GI$cS_tx{?)hLjy3uhr`HAzUy zTD75(`uP`XntYp?dxOF@xS)Vngw#eh6@8kahe8qETm*w1Gf{zU$~y*0#RUv zjSU^2dEAJ&QUz`#szN8x@NF?aS#eyft+yHYrlu`)Y@VZp(E`>C77#5uSv}^CJL5=R zw;`GmA(|G`Z5&I>@!I|Zv;g7bp*@Bu#zyS|8qvKQV0Kf*6ys3WjGcFIx;q znZokA-}RR}Eg)2dreint0AWYb;%JZBE>|fq+lWzxh6;YyZgM_ye)~{Yq0J17bq&*l zDxDl*{q_iAq+R%u@HoUg4C0sCymB?ZygO!#yj7WiV_fl9|}`d!Hp_nMsnT>!uSF20y#HHq7f&jBKqB4HT^&kjdw4! zBBaX5uv^3s1NUb>h)E{2gaa==oJu1PDix7Sq>uLj$_?oC+M5_YfO18E=8kV3vG{;{ zcTJsYGIYL?jmc;n$Ho;Ndryyccl-MiR3iD#{Ka#0%9nN8;Treg~{a2Sx<?hkoS+9A$4qzHJugP ze1t!NxM$#*vea(X?Nup)YxoBwF+GcKkG;wR!m{*|4JPI4QC{KT?EALrhU{?64M zkn;v>TDr%28W@fpFuc>3cplW6j@t#<1v$y<7WotZu6*J4O0tX9d-Sz8U-8f5sPg{< DjB2{e diff --git a/sources/LOADUP.LISP b/sources/LOADUP.LISP index cb9f28c1..5f2c4783 100644 --- a/sources/LOADUP.LISP +++ b/sources/LOADUP.LISP @@ -1 +1,53 @@ -(SETQQ COMPILE.EXT LCOM) (SETQ SYSFILES (UNION BOOTLOADEDFILES SYSFILES)) (SETQ BOOTLOADEDFILES) (* "following files are really loaded earlier, this call to LOADUP just cleans up") (LOADUP (QUOTE (ACODE MACHINEINDEPENDENT POSTLOADUP))) (* "establish all package exports early") (LOADUP (QUOTE (LISP-PACKAGE FASL-PACKAGE D-ASSEM-PACKAGE COMPILER-PACKAGE))) (* "turn on FTP so that loadup will be faster") (LOADUP (QUOTE (BSP DPUPFTP))) (* "load FASL loader here, so we can load DFASLs earlier in loadup") (LOADUP (QUOTE (ERROR-RUNTIME CMLARITH CONDITION-HIERARCHY CMLHASH D-ASSEM FASLOAD))) (* "These are needed by any FASL files") (LOADUP (QUOTE (DEFFER-RUNTIME CMLPRINT CLSTREAMS CMLSTRING CMLSYMBOL CMLTYPES CMLSEQCOMMON CMLSEQMAPPERS CMLPATHNAME CMLFILESYS))) (* * * "FASL files may be loaded after this point" * * *) (LOADUP (QUOTE (CMLDEFFER ERROR-RUNTIME-AFTER-FASL WRAPPERS))) (* "early runtime support for Common Lisp and (temporarily) debugger") (LOADUP (QUOTE (STACKFNS CMLMVS MACROS MACROAUX UNWINDMACROS))) (LOADUP (QUOTE (COMMON XCLC-RUNTIME CMLTYPES CL-ERROR))) (LOADUP (QUOTE (AFONT EDIT WEDIT PRETTY DSPRINTDEF NEWPRINTDEF FONTPROFILE SPELLFILE PRINTFN LOADFNS DMISC DIRECTORY SPELLFILE FILEPKG RESOURCE))) (* "The Byte Compiler (DLAP, BYTECOMPILER, COMPILER) used to be here. Moved after XCL Compiler so that one byte compiler init will work. JDS 10/11/89") (LOADUP (QUOTE (HIST UNDO SPELL DWIM WTFIX CLISP DWIMIFY CLISPIFY RECORD))) (LOADUP (QUOTE (GAINSPACE COROUTINE ARGLIST ASKUSER SYSPRETTY COMMON COMPARE))) (DWIM (QUOTE C)) (* "Kernel Common Lisp files") (LOADUP (QUOTE (CMLSTEP CMLDOC CMLPARSE CMLSETF CMLPRED CMLREAD WALKER CMLSEQFINDER CMLSEQMODIFY CMLSORT DEFSTRUCT CMLMISCIO CMLCOMPILE CMLDESTRUCT CL-ERROR CMLFORMAT CMLENVIRONMENT CMLLOAD CMLFLOAT CMLTIME CMLRAND CMLMODULES))) (LOADUP (QUOTE (PROFILE CMLEXEC EXEC-COMMANDS DEBUGGER IL-ERROR-STUFF DEBUGEDIT))) (LOADUP (QUOTE (ADDARITH))) (LOADUP (QUOTE (CMLPATHNAME HPRINT AARITH ADISPLAY HLDISPLAY MENU WINDOWOBJ WINDOWSCROLL WINDOW WINDOWICON LOGOW PAINTW ATTACHEDWINDOW XXGEOM XXFILL DEXEC INSPECT DESCRIBE CMLARRAYINSPECTOR EDITINTERFACE TTYIN))) (LOADUP (QUOTE (BREAK-AND-TRACE))) (LOADUP (QUOTE (FASDUMP XCL-COMPILER ADVISE))) (* "the bytecompiler and Interlisp compiler interface functions") (LOADUP (QUOTE (DLAP BYTECOMPILER COMPILE))) (LOADUP (QUOTE (DISKDLION DOVEINPUTOUTPUT DOVEDISK DOVEDISPLAY DOVEMISC DOVEETHER DOVEFLOPPY LOCALFILE DSKDISPLAY 10MBDRIVER MAIKOETHER LLNS TRSERVER SPP COURIER NSPRINT CLEARINGHOUSE NSFILING HARDCOPY INTERPRESS FLOPPY IDLER ICONW FREEMENU SEDIT))) (LOADUP (QUOTE (DSK UFS UFSCALLC MAIKOBITBLT))) (LOADUP (QUOTE (TIME))) (LOADUP (QUOTE (XCL-EXTRAS))) (* "CMLPACKAGE pushes onto INSPECTMACROS") (LOADUP (QUOTE (CMLPACKAGE))) (* "Puts ARGNAME properties on CL and XCL functions that IL:SMARTARGLIST can't hack. Keep this last so everything will be defined when it runs") (LOADUP (QUOTE (CMLSMARTARGS))) (LOADUP (QUOTE (IMPLICIT-KEY-HASH CLOSURE-CACHE))) (* "Already enabled, but this time fixes tables that weren't defined in the init") (PACKAGE-ENABLE) STOP \ No newline at end of file +(SETQQ COMPILE.EXT LCOM) +(SETQ SYSFILES (UNION BOOTLOADEDFILES SYSFILES)) +(SETQ BOOTLOADEDFILES) +(* ;; "following files are really loaded earlier, this call to LOADUP just cleans up") +(LOADUP (QUOTE (ACODE MACHINEINDEPENDENT POSTLOADUP))) +(* ;; "establish all package exports early") +(LOADUP (QUOTE (LISP-PACKAGE FASL-PACKAGE D-ASSEM-PACKAGE COMPILER-PACKAGE))) +(* ;; "load FASL loader here, so we can load DFASLs earlier in loadup") +(LOADUP (QUOTE (ERROR-RUNTIME CMLARITH CONDITION-HIERARCHY CMLHASH D-ASSEM FASLOAD))) +(* ;; "These are needed by any FASL files") +(LOADUP (QUOTE (DEFFER-RUNTIME CMLPRINT CLSTREAMS CMLSTRING CMLSYMBOL CMLTYPES CMLSEQCOMMON CMLSEQMAPPERS CMLPATHNAME CMLFILESYS))) +(* ;;; "* 'FASL files may be loaded after this point' * * *") +(LOADUP (QUOTE (CMLDEFFER ERROR-RUNTIME-AFTER-FASL WRAPPERS))) +(* ;; "early runtime support for Common Lisp and (temporarily) debugger") +(LOADUP (QUOTE (STACKFNS CMLMVS MACROS MACROAUX UNWINDMACROS))) +(LOADUP (QUOTE (COMMON XCLC-RUNTIME CMLTYPES CL-ERROR))) +(LOADUP (QUOTE (AFONT EDIT WEDIT PRETTY DSPRINTDEF NEWPRINTDEF FONTPROFILE SPELLFILE PRINTFN LOADFNS +DMISC DIRECTORY SPELLFILE FILEPKG RESOURCE))) +(* ;; "needed for makesys") +(LOADUP (QUOTE (MOD44IO))) +(* ;; +"The Byte Compiler (DLAP, BYTECOMPILER, COMPILER) used to be here. Moved after XCL Compiler so that one byte compiler init will work. JDS 10/11/89" +) +(LOADUP (QUOTE (HIST UNDO SPELL DWIM WTFIX CLISP DWIMIFY CLISPIFY RECORD))) +(LOADUP (QUOTE (GAINSPACE COROUTINE ARGLIST ASKUSER SYSPRETTY COMMON COMPARE))) +(DWIM (QUOTE C)) +(* ;; "Kernel Common Lisp files") +(LOADUP (QUOTE (CMLSTEP CMLDOC CMLPARSE CMLSETF CMLPRED CMLREAD WALKER CMLSEQFINDER CMLSEQMODIFY CMLSORT DEFSTRUCT CMLMISCIO CMLCOMPILE CMLDESTRUCT CL-ERROR CMLFORMAT CMLENVIRONMENT CMLLOAD CMLFLOAT CMLTIME CMLRAND CMLMODULES))) +(LOADUP (QUOTE (PROFILE CMLEXEC EXEC-COMMANDS DEBUGGER IL-ERROR-STUFF DEBUGEDIT))) +(LOADUP (QUOTE (ADDARITH))) +(LOADUP (QUOTE (CMLPATHNAME HPRINT AARITH ADISPLAY HLDISPLAY MENU WINDOWOBJ WINDOWSCROLL WINDOW WINDOWICON PAINTW ATTACHEDWINDOW XXGEOM XXFILL DEXEC INSPECT DESCRIBE CMLARRAYINSPECTOR EDITINTERFACE TTYIN))) +(LOADUP (QUOTE (BREAK-AND-TRACE))) +(LOADUP (QUOTE (FASDUMP XCL-COMPILER ADVISE))) +(* ;; "the bytecompiler and Interlisp compiler interface functions") +(LOADUP (QUOTE (DLAP BYTECOMPILER COMPILE))) +(LOADUP (QUOTE (HARDCOPY LOGOW IDLER ICONW FREEMENU SEDIT))) +(CLOSEW (LOGOW)) (MOVD 'NILL 'LOGOW) +(LOADUP (QUOTE (DSK UFS UFSCALLC MAIKOBITBLT))) +(LOADUP (QUOTE (TIME))) +(LOADUP (QUOTE (XCL-EXTRAS))) +(* "CMLPACKAGE pushes onto INSPECTMACROS") +(LOADUP (QUOTE (CMLPACKAGE))) +(* ;; +"Puts ARGNAME properties on CL and XCL functions that IL:SMARTARGLIST can't hack. Keep this last so everything will be defined when it runs" +) +(LOADUP (QUOTE (CMLSMARTARGS))) +(LOADUP (QUOTE (IMPLICIT-KEY-HASH CLOSURE-CACHE))) +(* ;; "Already enabled, but this time fixes tables that weren't defined in the init") + (PACKAGE-ENABLE) + (* ;; "Additional stuff that should be folded into original definitions") + (LOADUP (QUOTE (LOADUP-LISP))) + STOP + diff --git a/sources/MAIKOINIT b/sources/MAIKOINIT new file mode 100755 index 00000000..a57ccc94 --- /dev/null +++ b/sources/MAIKOINIT @@ -0,0 +1,7 @@ + +(RPAQQ SI::*CLOSURE-CACHE-ENABLED* NIL) + +(QUOTE (\\TEDIT.BLTCHAR \\MAIKO.PUNTBLTCHAR SI::*CLOSURE-CACHE* XCL::*DELETED-IMPLICIT-HASH-SLOT* )) + +(PUTPROPS MAIKOINIT COPYRIGHT ("Venue" 1990)) +STOP diff --git a/sources/XREM.CM b/sources/XREM.CM new file mode 100644 index 00000000..19245020 --- /dev/null +++ b/sources/XREM.CM @@ -0,0 +1,8 @@ +" +(SETQ SI::*CLOSURE-CACHE-ENABLED* NIL) +(QUOTE (\\TEDIT.BLTCHAR \\MAIKO.PUNTBLTCHAR SI::*CLOSURE-CACHE* XCL::*DELETED-IMPLICIT-HASH-SLOT* )) +(MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) +(MOVD? (QUOTE NILL) (QUOTE CURSORP)) +(MOVD? (QUOTE NILL) (QUOTE CHANGEBACKGROUNDBORDER)) +(LOGOUT) +" From 63481a174e3428123d71d0157e3bf44ec16aa9f7 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Sun, 14 Feb 2021 00:09:51 -0800 Subject: [PATCH 14/37] Change default lock toggle to match --- sources/LLKEY | 4 ++-- sources/LLKEY.LCOM | Bin 65915 -> 64351 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/LLKEY b/sources/LLKEY index 2347367f..037707a5 100644 --- a/sources/LLKEY +++ b/sources/LLKEY @@ -1,4 +1,4 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "12-Feb-2021 19:16:08" {DSK}larry>ilisp>medley>sources>LLKEY.;7 201254 changes to%: (RESOURCES \KEYBOARDWAITBOX) (VARS LLKEYCOMS ALLUP \CTRLMASK \METABIT DLMOUSEBITS DLMOUSESTATES TRANSITIONFLAGS ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF \NKEYS NRINGINDEXWORDS) (RECORDS KEYACTION RING SHIFTSTATE) (MACROS \GETREALSYSBUF .NOTELASTUSERACTION \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF \PUTSYSBUF \PEEKSYSBUF \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) previous date%: "19-May-2018 13:32:12" {DSK}larry>ilisp>medley>sources>LLKEY.;6) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1992, 1999, 1920, 2000, 2018, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT LLKEYCOMS) (RPAQQ LLKEYCOMS [(COMS (* ; "Access to keyboard") (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF \PUTSYSBUF \PEEKSYSBUF) (INITVARS (\LONGSYSBUF)) (INITVARS (\\KEYBOARDWAITBOX.GLOBALRESOURCE)) (DECLARE%: DONTCOPY (RESOURCES \KEYBOARDWAITBOX)) (DECLARE%: DONTCOPY (CONSTANTS (\SYSBUFSIZE 200)) (MACROS \GETREALSYSBUF))) [DECLARE%: DOCOPY DONTEVAL@LOAD (COMS (* ;  "Here because it must be done in init before PROC loaded") (P (MOVD? 'NILL 'CARET] (COMS (* ; "Key handler") (FNS \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) (INITVARS (\MOUSECHORDTICKS) (\MOUSECHORDMILLISECONDS 50)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\KEYBOARDINIT))) [DECLARE%: DONTCOPY (MACROS .NOTELASTUSERACTION) (CONSTANTS ALLUP \CTRLMASK \METABIT) (CONSTANTS * DLMOUSEBITS) (CONSTANTS * DLMOUSESTATES) (CONSTANTS * TRANSITIONFLAGS) (MACROS \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) (EXPORT (RECORDS KEYACTION) (CONSTANTS \NKEYS)) (RECORDS RING) (COMS (* ;  "can get rid of shiftstate after clients have been fixed") (RECORDS SHIFTSTATE) (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP)) (CONSTANTS NRINGINDEXWORDS) (CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] (DECLARE%: EVAL@COMPILE (VARS \KEYNAMES)) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun.") (VARS \ORIGKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DORADOKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS \MAIKOKEYACTIONS \MAIKOKEYACTIONST4 \MAIKO-JLE-KEYACTIONS \TOSHIBA-KEYACTIONS) (VARS (KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL)) (INITVARS (\KEYBOARD.META 256) (\MODIFIED.KEYACTIONS)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) )) (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (COMS (* ; "Key interpretation") (FNS KEYACTION KEYACTIONTABLE KEYBOARDTYPE RESETKEYACTION \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS \KEYACTION1 KEYDOWNP KEYNUMBERP \KEYNAMETONUMBER MODIFY.KEYACTIONS METASHIFT SHIFTDOWNP) (* ;  "To support office style 1108 & 1186 keyboards") (FNS SETUP.OFFICE.KEYBOARD) (OPTIMIZERS) (MACROS \TEMPCOPYTIMER) (* ;  "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (EXPORT (OPTIMIZERS KEYDOWNP))) (EXPORT (MACROS XKEYDOWNP KEYDOWNP1 \NEWKEYDOWNP))) (COMS (* ; "A raw keyboard device/stream") (FNS \INIT.KEYBOARD.STREAM) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\INIT.KEYBOARD.STREAM))) (EXPORT (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM))) (COMS (* ; "Hook for a periodic interrupt") (FNS \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \PERIODIC.INTERRUPTFRAME) (INITVARS (\KEYBUFFERING) (\PERIODIC.INTERRUPT) (\TIMER.INTERRUPT.PENDING) (\PERIODIC.INTERRUPT.FREQUENCY 77))) (LOCALVARS . T) [COMS (* ;  "cursor and mouse related functions.") (FNS \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN) (FNS CURSOR.INIT \CURSORDESTINATION \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN CURSORPROP GETCURSORPROP PUTCURSORPROP \CURSORBITSPERPIXEL \CURSORIMAGEPROPNAME \CURSORMASKPROPNAME) (FNS CURSORCREATE CURSOR \CURSOR-VALID-P \CURSORUP \CURSORPOSITION \CURSORDOWN ADJUSTCURSORPOSITION CURSORPOSITION CURSORSCREEN CURSOREXIT FLIPCURSOR FLIPCURSORBAR LASTMOUSEX LASTMOUSEY CREATEPOSITION POSITIONP CURSORHOTSPOT) (PROPS (CURSORPROP ARGNAMES)) (INITVARS (\CURSORHOTSPOTX 0) (\CURSORHOTSPOTY 0) (\CURRENTCURSOR NIL) (\SOFTCURSORWIDTH NIL) (\SOFTCURSORHEIGHT NIL) (\SOFTCURSORP NIL) (\SOFTCURSORUPP NIL) (\SOFTCURSORUPBM NIL) (\SOFTCURSORDOWNBM NIL) (\SOFTCURSORBBT1 NIL) (\SOFTCURSORBBT2 NIL) (\SOFTCURSORBBT3 NIL) (\SOFTCURSORBBT4 NIL) (\SOFTCURSORBBT5 NIL) (\SOFTCURSORBBT6 NIL) (\CURSORSCREEN NIL) (\CURSORDESTINATION NIL) (\CURSORDESTHEIGHT 808) (\CURSORDESTWIDTH 1024) (\CURSORDESTRASTERWIDTH 64) (\CURSORDESTLINE 0) (\CURSORDESTLINEBASE NIL)) (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) (FNS GETMOUSESTATE \EVENTKEYS) [EXPORT (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD] (DECLARE%: DONTCOPY (EXPORT (MACROS \SETMOUSEXY)) (MACROS \XMOUSECOORD \YMOUSECOORD)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION)) (VARS (\SFPosition (CREATEPOSITION] [COMS (DECLARE%: DONTCOPY (RECORDS KEYBOARDEVENT) (CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] (COMS (FNS MACHINETYPE SETMAINTPANEL) (* ; "DLion beeper") (FNS BEEPON BEEPOFF)) (EXPORT (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)) (FNS WITHOUT-INTERRUPTS) (COMS (* ;  "Compile locked fns together for locality") (BLOCKS (NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN))) [DECLARE%: DONTCOPY (ADDVARS [INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND ] (RDCOMS (FNS \SETIOPOINTERS] (PROP FILETYPE LLKEY) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML WITHOUT-INTERRUPTS ) (LAMA CURSORPROP METASHIFT MOUSECHORDWAIT]) (* ; "Access to keyboard") (DEFINEQ (BKSYSCHARCODE [LAMBDA (CHAR) (* rrb "30-Dec-83 11:56") (OR (\PUTSYSBUF CHAR) (PROGN (SETQ \LONGSYSBUF (NCONC \LONGSYSBUF (bind C while (SETQ C (\GETREALSYSBUF)) collect C))) (\PUTSYSBUF CHAR]) (\CLEARSYSBUF [LAMBDA (ALLFLG) (* mpl "27-Jun-85 20:04") (DECLARE (GLOBALVARS \PROCESSES)) (COND ((OR ALLFLG (TTY.PROCESSP)) (SETQ \LONGSYSBUF) (replace (RING READ) of \SYSBUFFER with 0))) (COND (ALLFLG (for PROC in \PROCESSES do (replace PROCTYPEAHEAD of PROC with NIL))) ((THIS.PROCESS) (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL]) (\GETKEY [LAMBDA NIL (* lmm "18-Apr-85 00:07") (DECLARE (GLOBALVARS \KEYBOARDWAIT1 \KEYBOARDWAIT2)) (COND [(AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS))) (pop (fetch PROCTYPEAHEAD of (THIS.PROCESS] (T (WAIT.FOR.TTY) (OR (\GETSYSBUF) (GLOBALRESOURCE (\KEYBOARDWAITBOX) (* Busy-wait loop that gets next  character) (\CLOCK0 \KEYBOARDWAITBOX) (bind C do (COND ((SETQ C (\GETSYSBUF)) (\BOXIPLUS (LOCF (fetch KEYBOARDWAITTIME of \MISCSTATS)) (CLOCKDIFFERENCE \KEYBOARDWAITBOX)) (RETURN C))) (\TTYBACKGROUND) (\WAIT.FOR.TTY]) (\NSYSBUFCHARS [LAMBDA NIL (* JonL " 7-May-84 01:50") (* Tells how many characters can be  \GETSYSBUFed. Used by \SAVESYSBUF.) (IPLUS (LENGTH \LONGSYSBUF) (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ 0 R) 0) ((IGREATERP W R) (IDIFFERENCE W R)) (T (IDIFFERENCE W (IDIFFERENCE R \SYSBUFSIZE]) (\SAVESYSBUF [LAMBDA NIL (* JonL " 7-May-84 01:50") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (PROG (TA (BUF \SAVEDSYSBUFFER) (NC (\NSYSBUFCHARS)) (J 0)) [COND ((TTY.PROCESSP) [COND ([AND (THIS.PROCESS) (SETQ TA (fetch PROCTYPEAHEAD of (THIS.PROCESS] (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL) (add NC (LENGTH TA)) [COND ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for CH in TA do (RPLCHARCODE BUF (add J 1) CH))) ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for I from (ADD1 J) to NC do (* Test on J means that we'll ignore extra chars typed since we got the length.  Test on \GETSYSBUF so we don't get screwed if buffer gets cleared while during  this loop) (RPLCHARCODE BUF I (OR (\GETSYSBUF) (PROGN (SETQ NC (SUB1 I)) (RETURN] (RETURN (AND (NOT (EQ 0 NC)) (SUBSTRING BUF 1 NC]) (\SYSBUFP [LAMBDA NIL (* JonL " 7-May-84 01:52") (OR [AND (TTY.PROCESSP) (OR \LONGSYSBUF (NOT (EQ 0 (fetch (RING READ) of \SYSBUFFER] (AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS]) (\GETSYSBUF [LAMBDA NIL (* lmm " 9-JUL-83 00:56") (OR (AND \LONGSYSBUF (pop \LONGSYSBUF)) (\GETREALSYSBUF]) (\PUTSYSBUF [LAMBDA (CHAR) (* rmk%: "27-Nov-84 17:51") (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ R W) (* Full) NIL) (T (\PUTBASEFAT \SYSBUFFER W CHAR) (AND (EQ 0 R) (replace (RING READ) of \SYSBUFFER with W)) (* Return random non-NIL value to  indicate success for BKSYSBUF) [replace (RING WRITE) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST W) \SYSBUFFER.FIRST) (T (ADD1 W] T]) (\PEEKSYSBUF [LAMBDA (STREAM) (* bvm%: " 8-Feb-85 17:50") (PROG (R) WAIT (until (\SYSBUFP) do (BLOCK)) (RETURN (if (TTY.PROCESSP) then (if \LONGSYSBUF then (CAR \LONGSYSBUF) elseif (NEQ (SETQ R (fetch (RING READ) of \SYSBUFFER)) 0) then (* Here's the vanilla case) (\GETBASEFAT \SYSBUFFER R) else (* Foo an interrupt could have  sneaked in here and gobbled down the  remaining characters) (GO WAIT)) elseif (THIS.PROCESS) then (CAR (fetch PROCTYPEAHEAD of (THIS.PROCESS))) else (SHOULDNT]) ) (RPAQ? \LONGSYSBUF ) (RPAQ? \\KEYBOARDWAITBOX.GLOBALRESOURCE ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE [PUTDEF '\KEYBOARDWAITBOX 'RESOURCES '(NEW (CREATECELL \FIXP] ) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (RPAQQ \SYSBUFSIZE 200) (CONSTANTS (\SYSBUFSIZE 200)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \GETREALSYSBUF MACRO [NIL (PROG ((R (fetch (RING READ) of \SYSBUFFER))) (RETURN (AND (NOT (EQ 0 R)) (PROG1 (\GETBASEFAT \SYSBUFFER R) (AND [EQ (fetch (RING WRITE) of \SYSBUFFER) (replace (RING READ) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST R) \SYSBUFFER.FIRST) (T (ADD1 R] (replace (RING READ) of \SYSBUFFER with 0)))]) ) ) (DECLARE%: DOCOPY DONTEVAL@LOAD (* ; "Here because it must be done in init before PROC loaded") (MOVD? 'NILL 'CARET) ) (* ; "Key handler") (DEFINEQ (\KEYBOARDINIT [LAMBDA NIL (* ; "Edited 19-Nov-87 16:46 by Snow") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (* ;  "Sets up keyboard decoding tables.") (SETQ \CURRENTKEYACTION (SETQ \DEFAULTKEYACTION (KEYACTIONTABLE))) (* ;  "added \commandkeyaction 11-19-87 WAS") (SETQ \COMMANDKEYACTION (KEYACTIONTABLE)) (SETQ \INTERRUPTSTATE (\ALLOCLOCKED 2)) (PROGN (SETQ \SYSBUFFER (\ALLOCBLOCK (FOLDHI (ADD1 \SYSBUFFER.LAST) WORDSPERCELL))) (replace (RING READ) of \SYSBUFFER with 0) (replace (RING WRITE) of \SYSBUFFER with \SYSBUFFER.FIRST)) (SETQ \SAVEDSYSBUFFER (ALLOCSTRING \SYSBUFSIZE NIL NIL T)) (SETQ \LASTUSERACTION (LOCF (fetch LASTUSERACTION of \MISCSTATS))) (PROGN (SETQ \KEYBOARDEVENTQUEUE (\ALLOCLOCKED (FOLDHI (PLUS \KEYBOARDEVENT.LAST \KEYBOARDEVENT.SIZE) WORDSPERCELL))) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with \KEYBOARDEVENT.FIRST)) (SETQ \LASTKEYSTATE (create KEYBOARDEVENT)) (SETQ \SHIFTSTATE (create SHIFTSTATE)) (SETQ \MOUSETIMERTEMP (SETUPTIMER 0 NIL 'TICKS)) (MOUSECHORDWAIT \MOUSECHORDMILLISECONDS) (\KEYBOARDON]) (\KEYBOARDEVENTFN [LAMBDA (FDEV EVENT EXTRA) (* ; "Edited 11-Oct-90 09:49 by jds") (DECLARE (GLOBALVARS \KEYBOARD.BEFORETYPE \DORADOKEYACTIONS \DLIONKEYACTIONS \MAIKO.BEFOREKEYTYPE)) (SELECTQ EVENT ((BEFORELOGOUT BEFOREMAKESYS BEFORESYSOUT BEFORESAVEVM) (SETQ \KEYBOARD.BEFORETYPE \MACHINETYPE) (SETQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (SETQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) ((AFTERLOGOUT AFTERMAKESYS AFTERSYSOUT AFTERSAVEVM) (* ;  "Restarting a world. If we changed machines, fix up the key actions to match the new machine.") (* ; "(COND ((NEQ \\MACHINETYPE \\KEYBOARD.BEFORETYPE) ; Changed machines. Change Keyactions. (|for| X |in| (\\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) |do| (KEYACTION (CAR X) (CDR X) \\COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \\DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT))))") [COND ((OR (NEQ \MACHINETYPE \KEYBOARD.BEFORETYPE) (NEQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) (* ;  "Changed machines. Change Keyactions.") [COND ((NEQ (MACHINETYPE) 'MAIKO) (* ;; "Non-SUN, so just change machine-specific key actions:") (for X in (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION))) (T (* ;;  "On a SUN: Some keyactions contradict %"normal%" ones, so reset them all.") (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION] (MOUSECHORDWAIT (MOUSECHORDWAIT))) ((EQ (MACHINETYPE) 'MAIKO) (* ;; "Same machine type. SO only worry if we're on SUNs, where the keyboard type can differ between machines.") (COND ((NEQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT]) NIL]) (\ALLOCLOCKED [LAMBDA (NCELLS) (* lmm "20-Apr-85 13:08") (* allocate a block of NCELLS cells  and lock it) (PROG [(BLOCK (\ALLOCBLOCK NCELLS NIL (IMIN NCELLS CELLSPERPAGE] (\LOCKCELL BLOCK (FOLDHI (IPLUS (fetch (POINTER WORDINPAGE) of BLOCK) (UNFOLD NCELLS WORDSPERCELL)) WORDSPERPAGE)) (RETURN BLOCK]) (\SETIOPOINTERS [LAMBDA NIL (* ;  "Edited 28-Apr-88 01:10 by MASINTER") (SELECTC (SETTOPVAL '\MACHINETYPE (fetch MachineType of \InterfacePage)) ((LIST \DOLPHIN \DORADO) (SETTOPVAL '\EM.MOUSEX (EMADDRESS MOUSEX.EM)) (SETTOPVAL '\EM.MOUSEY (EMADDRESS MOUSEY.EM)) (SETTOPVAL '\EM.CURSORX (EMADDRESS CURSORX.EM)) (SETTOPVAL '\EM.CURSORY (EMADDRESS CURSORY.EM)) (SETTOPVAL '\EM.REALUTILIN (EMADDRESS UTILIN.EM)) (SETTOPVAL '\EM.KBDAD0 (EMADDRESS KBDAD0.EM)) (SETTOPVAL '\EM.KBDAD1 (EMADDRESS KBDAD1.EM)) (SETTOPVAL '\EM.KBDAD2 (EMADDRESS KBDAD2.EM)) (SETTOPVAL '\EM.KBDAD3 (EMADDRESS KBDAD3.EM)) (SETTOPVAL '\EM.KBDAD4 (LOCF (fetch FAKEKBDAD4 of \InterfacePage))) (\PUTBASE \EM.KBDAD4 0 ALLUP) (SETTOPVAL '\EM.KBDAD5 (LOCF (fetch FAKEKBDAD5 OF \InterfacePage))) (\PUTBASE \EM.KBDAD5 0 ALLUP) (SETTOPVAL '\EM.DISPINTERRUPT (EMADDRESS DISPINTERRUPT.EM)) (SETTOPVAL '\EM.CURSORBITMAP (EMADDRESS CURSORBITMAP.EM)) (SETTOPVAL '\EM.DISPLAYHEAD (EMADDRESS DCB.EM)) (SETTOPVAL 'SCREENWIDTH (UNFOLD (fetch ScreenWidth of \InterfacePage) BITSPERWORD))) ((LIST \DANDELION \MAIKO) (SETTOPVAL '\EM.MOUSEX (fetch DLMOUSEXPTR of \IOPAGE)) (SETTOPVAL '\EM.MOUSEY (fetch DLMOUSEYPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN (fetch DLUTILINPTR of \IOPAGE)) (* ;; "Where the hardware bits live, vs. where the Lisp software sees them after reinterpretation by keyhandler") ) (SETTOPVAL '\EM.KBDAD0 (fetch DLKBDAD0PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD1 (fetch DLKBDAD1PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD2 (fetch DLKBDAD2PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD3 (fetch DLKBDAD3PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD4 (fetch DLKBDAD4PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD5 (fetch DLKBDAD5PTR of \IOPAGE)) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORBITMAP (fetch DLCURSORBITMAPPTR of \IOPAGE)) (SETTOPVAL '\EM.DISPLAYHEAD NIL) (SETTOPVAL 'SCREENWIDTH (SELECTC \MACHINETYPE (\MAIKO (SUBRCALL DSP-SCREENWIDTH)) 1024))) (\DAYBREAK (PROG ((KBDBASE (\DoveMisc.GetKBDBase))) (SETTOPVAL '\EM.KBDAD0 (\ADDBASE KBDBASE 1)) (SETTOPVAL '\EM.KBDAD1 (\ADDBASE KBDBASE 2)) (SETTOPVAL '\EM.KBDAD2 (\ADDBASE KBDBASE 3)) (SETTOPVAL '\EM.KBDAD3 (\ADDBASE KBDBASE 4)) (SETTOPVAL '\EM.KBDAD4 (\ADDBASE KBDBASE 5)) (SETTOPVAL '\EM.KBDAD5 (\ADDBASE KBDBASE 6)) (SETTOPVAL '\EM.MOUSEX (\DoveMisc.GetMouseXBase)) (SETTOPVAL '\EM.MOUSEY (\DoveMisc.GetMouseYBase)) (SETTOPVAL '\EM.CURSORBITMAP (\DoveDisplay.GetCursorBitmapBase)) (* These three set this way to  prevent address faults) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN KBDBASE) (* Where the hardware bits live, vs. where the Lisp software sees them after  reinterpretation by keyhandler) ) (SETTOPVAL 'SCREENWIDTH (\DoveDisplay.ScreenWidth)))) (RAID)) (SETTOPVAL '\EM.UTILIN (LOCF (fetch (IFPAGE FAKEMOUSEBITS) of \InterfacePage]) (\KEYBOARDOFF [LAMBDA NIL (* ;  "Edited 20-Apr-88 10:28 by MASINTER") (\PUTBASE \EM.DISPINTERRUPT 0 (LOGAND (LOGXOR 65535 \LispKeyMask) (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE NIL]) (\KEYBOARDON [LAMBDA (NOCHECK) (* ;  "Edited 24-Apr-88 00:03 by MASINTER") (\SETIOPOINTERS) (\PUTBASE \EM.DISPINTERRUPT 0 (LOGOR \LispKeyMask (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE T]) (\KEYHANDLER [LAMBDA NIL (* lmm "30-MAR-83 20:40") (\KEYHANDLER1]) (\KEYHANDLER1 [LAMBDA NIL (* ; "Edited 30-Mar-88 10:40 by Snow") (PROG ((OLD0 ALLUP) (OLD1 ALLUP) (OLD2 ALLUP) (OLD3 ALLUP) (OLD4 ALLUP) (OLD5 ALLUP) (OLDU ALLUP) (OLDFAKEU ALLUP) (LOOPCNT 10) (PERIODCNT 60) (MOUSESTATE \DLMOUSE.UP) (MOUSETIMER (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) (MOUSETEMP (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) CURSORX CURSORY YHOT) (SETQ \KEYBUFFERING NIL) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) LP (\CONTEXTSWITCH \KbdFXP) [COND (\PERIODIC.INTERRUPT (* eventually can be replaced with  general timer mechanism) (COND ((IGREATERP PERIODCNT 0) (* Continue counting down to zero) (SETQ PERIODCNT (SUB1 PERIODCNT))) ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \PERIODIC.INTERRUPTFRAME)) (* When we've counted down, then keep trying to cause the interrupt, and reset  the counter when it finally happens) (SETQ PERIODCNT (SUB1 (OR \PERIODIC.INTERRUPT.FREQUENCY 1] [COND ((OR (NEQ (\GETBASE \EM.MOUSEX 0) CURSORX) (NEQ (\GETBASE \EM.MOUSEY 0) CURSORY)) (\TRACKCURSOR (SETQ CURSORX (\GETBASE \EM.MOUSEX 0)) (SETQ CURSORY (\GETBASE \EM.MOUSEY 0] [COND ((OR [COND ((OR (NEQ OLDU (\GETBASE \EM.REALUTILIN 0)) (COND ((AND (EQ MOUSESTATE \DLMOUSE.WAITING) (IGREATERP (\BOXIDIFFERENCE (\RCLK MOUSETEMP) MOUSETIMER) 0)) (* Timer expired on seeing both left  and right down, so set state to  normal) (SETQ MOUSESTATE \DLMOUSE.NORMAL) T))) (SETQ MOUSESTATE (\DOMOUSECHORDING (SETQ OLDU (\GETBASE \EM.REALUTILIN 0)) MOUSESTATE)) (NEQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (NEQ OLD0 (\GETBASE \EM.KBDAD0 0)) (NEQ OLD1 (\GETBASE \EM.KBDAD1 0)) (NEQ OLD2 (\GETBASE \EM.KBDAD2 0)) (NEQ OLD3 (\GETBASE \EM.KBDAD3 0)) (NEQ OLD4 (\GETBASE \EM.KBDAD4 0)) (NEQ OLD5 (\GETBASE \EM.KBDAD5 0))) (COND ((EQ 0 (LOGAND (\GETBASE \EM.KBDAD2 0) 2114)) (* Ctrl-shift-DEL panic interrupt --  switch to TeleRaid immediately) (swap (fetch (IFPAGE TELERAIDFXP) of \InterfacePage) (fetch (IFPAGE KbdFXP) of \InterfacePage)) (\KEYBOARDOFF) (SETQ OLD2 (\GETBASE \EM.KBDAD2 0)) (GO LP))) [PROG ((W (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE)) (R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) WPTR) (COND ((EQ R W) (* eventqueue full!) (RETURN))) (SETQ WPTR (\ADDBASE \KEYBOARDEVENTQUEUE W)) (\RCLK (LOCF (fetch TIME of WPTR))) [with KEYBOARDEVENT WPTR (PROGN (SETQ W0 (SETQ OLD0 (\GETBASE \EM.KBDAD0 0))) (SETQ W1 (SETQ OLD1 (\GETBASE \EM.KBDAD1 0))) (SETQ W2 (SETQ OLD2 (\GETBASE \EM.KBDAD2 0))) (SETQ W3 (SETQ OLD3 (\GETBASE \EM.KBDAD3 0))) (SETQ W4 (SETQ OLD4 (\GETBASE \EM.KBDAD4 0))) (SETQ W5 (SETQ OLD5 (\GETBASE \EM.KBDAD5 0))) (SETQ WU (SETQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (COND ((EQ R 0) (* Queue was empty) (replace (RING READ) of \KEYBOARDEVENTQUEUE with W))) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ W \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS W \KEYBOARDEVENT.SIZE] (OR \KEYBUFFERING (SETQ \KEYBUFFERING T] [COND [\KEYBUFFERING (COND ((EQ \KEYBUFFERING T) (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \DOBUFFEREDTRANSITIONS)) (SETQ \KEYBUFFERING 'STARTED) (* don't call until  \DOBUFFEREDTRANSITIONS is done) ] (T (COND (\PENDINGINTERRUPT (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \INTERRUPTFRAME)) (SETQ \PENDINGINTERRUPT] [COND ((AND (NEQ \MACHINETYPE \MAIKO) (ILEQ (SETQ LOOPCNT (SUB1 LOOPCNT)) 0)) (* Only do this once in a while) (SETQ LOOPCNT (COND ((\UPDATETIMERS) (* Timer was updated, so do it next time around, too, in case we just came back  from RAID or other bcpl code) 1) (T 20] (COND ([AND NIL \TIMER.INTERRUPT.PENDING (IGREATERP (\BOXIDIFFERENCE (\RCLK (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) 0) (COND ((EQ \TIMER.INTERRUPT.PENDING '\MOUSECHANGE) (SETQ OLDU NIL) T) (T (\CAUSEINTERRUPT \KbdFXP (FUNCTION \TIMER.INTERRUPTFRAME] (SETQ \TIMER.INTERRUPT.PENDING))) (GO LP]) (\RESETKEYBOARD [LAMBDA NIL (* ; "Edited 30-Mar-88 10:07 by Snow") (\SETIOPOINTERS) (* Called with lisp keyboard  disabled whenever Lisp is resumed  from bcpl logout or copysys.) (SETQ \KEYBUFFERING NIL) (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK) (EQ \MACHINETYPE \MAIKO)) (* Initialize fake mouse bits to all  up) (\PUTBASE \EM.UTILIN 0 ALLUP))) (with KEYBOARDEVENT \LASTKEYSTATE (SETQ W0 (\GETBASE \EM.KBDAD0 0)) (SETQ W1 (\GETBASE \EM.KBDAD1 0)) (SETQ W2 (\GETBASE \EM.KBDAD2 0)) (SETQ W3 (\GETBASE \EM.KBDAD3 0)) (SETQ W4 (\GETBASE \EM.KBDAD4 0)) (SETQ W5 (\GETBASE \EM.KBDAD5 0)) (SETQ WU (\GETBASE \EM.REALUTILIN 0)) (SETQ LOCK (XKEYDOWNP 'LOCK)) (SETQ 1SHIFT NIL) (SETQ 2SHIFT NIL) (SETQ CTRL NIL) (SETQ META NIL) (SETQ FONT NIL) (SETQ USERMODE1 NIL) (SETQ USERMODE2 NIL) (SETQ USERMODE3 NIL) (SETQ MOUSESTATE \DLMOUSE.UP)) (SETQ \TIMER.INTERRUPT.PENDING) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING READ) of \SYSBUFFER with 0) (SETQ \LONGSYSBUF) (\DAYTIME0 \LASTUSERACTION) (\KEYBOARDON]) (\DOMOUSECHORDING [LAMBDA (REALUTILIN STATE) (* bvm%: " 9-Oct-85 11:24") (* Handles mouse transitions on a DLion.  REALUTILIN is the actual util word from the processor.  STATE is our internal state. Sets contents of \EM.UTILIN to reflect the virtual  mouse state, which may contain a middle mouse button even where there is only a  two-button mouse. Returns new state) (PROG (LRSTATE) [COND ((OR (NULL \MOUSECHORDTICKS) (EQ (SETQ LRSTATE (LOGXOR (LOGAND REALUTILIN \MOUSE.ALLBITS) \MOUSE.ALLBITS)) 0)) (* Not interpreting chording, or both LEFT and RIGHT are up --  real state and virtual state the same) (SETQ STATE \DLMOUSE.UP)) (T (* Either L or R or both are down,  so have to decide about Middle) (SELECTC STATE ((LIST \DLMOUSE.UP \DLMOUSE.WAITING) (SETQ REALUTILIN (LOGOR REALUTILIN \MOUSE.LRBIT)) (* Turn off the L and/or R bits) (COND ((EQ LRSTATE \MOUSE.LRBIT) (* Both L and R down at once,  interpret as MIDDLE without waiting) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) REALUTILIN)) (SETQ STATE \DLMOUSE.MIDDLE)) ((NEQ STATE \DLMOUSE.WAITING) (* Only one of L and R down. Set timer, and ignore the down bit for now) (\BOXIPLUS (\RCLK (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) \MOUSECHORDTICKS) (SETQ STATE \DLMOUSE.WAITING)))) (\DLMOUSE.MIDDLE (* State is middle and at least one of L and R is still down, so consider it to  be still only middle) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LRBIT))) (SELECTC LRSTATE (\MOUSE.LEFTBIT (* Right came up. Henceforth treat  right transparently) (SETQ STATE \DLMOUSE.MIDDLE&RIGHT)) (\MOUSE.RIGHTBIT (* Left came up. Henceforth treat  left transparently) (SETQ STATE \DLMOUSE.MIDDLE&LEFT)) NIL)) (\DLMOUSE.MIDDLE&RIGHT (* Only ignore LEFT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LEFTBIT)))) (\DLMOUSE.MIDDLE&LEFT (* Only ignore RIGHT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.RIGHTBIT)))) (PROGN (* Remaining state is \DLMOUSE.NORMAL which means treat mouse normally, and the  only interesting transition is back to \DLMOUSE.UP) ] (\PUTBASE \EM.UTILIN 0 REALUTILIN) (RETURN STATE]) (\DOTRANSITIONS [LAMBDA (KEYBASE OLD NEW) (* ; "Edited 1-Feb-92 11:59 by jds") (* ;; "OLD and NEW are keyboard state words that are known to have changed. KEYBASE is the number in hardware order of the key corresponding to the first bit in these words. This function figures out the indices of transitioning keys and calls the decoder.") (for I (BITMASK _ (LLSH 1 15)) from 0 to 15 do [OR (EQ 0 (LOGAND BITMASK (LOGXOR OLD NEW))) (\DECODETRANSITION (IPLUS I KEYBASE) (EQ 0 (LOGAND NEW BITMASK] (SETQ BITMASK (LRSH BITMASK 1))) T]) (\DECODETRANSITION [LAMBDA (KEYNUMBER DOWNFLG) (* ; "Edited 19-Nov-87 16:29 by Snow") (* ;; "KEYNUMBER is the key number in the hardware keyboard layout, DOWNFLG is T if the key just went down. PENDINGINTERRUPT, bound in \KEYHANDLER, is set to the decoded character if it is an interrupt.") (.NOTELASTUSERACTION) (PROG ((TI (\TRANSINDEX KEYNUMBER DOWNFLG)) (KEYSTATE \LASTKEYSTATE) ASCIICODE SHIFTED) (SELECTC (TRANSITIONFLAGS \CURRENTKEYACTION TI) (IGNORE.TF (RETURN)) (LOCKSHIFT.TF (* ;  "Take shift action if either Shift or Caps Lock is down") (IF (fetch (KEYBOARDEVENT SHIFTORLOCK) of KEYSTATE) THEN (SETQ SHIFTED T))) (NOLOCKSHIFT.TF (* ;  "Take shift action only when Shift is down") (IF (fetch (KEYBOARDEVENT SHIFT) of KEYSTATE) THEN (SETQ SHIFTED T))) (EVENT.TF (RETURN)) (1SHIFTUP.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with NIL) (RETURN)) (1SHIFTDOWN.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with T) (RETURN)) (2SHIFTUP.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with NIL) (RETURN)) (2SHIFTDOWN.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with T) (RETURN)) (LOCKUP.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with NIL) (RETURN)) (LOCKDOWN.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with T) (RETURN)) (LOCKTOGGLE.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT LOCK) of KEYSTATE))) (RETURN)) (CTRLUP.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with NIL) (RETURN)) (CTRLDOWN.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with T) (RETURN)) (METAUP.TF (replace (KEYBOARDEVENT META) of KEYSTATE with NIL) (RETURN)) (METADOWN.TF (replace (KEYBOARDEVENT META) of KEYSTATE with T) (RETURN)) (FONTUP.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with NIL) (RETURN)) (FONTDOWN.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with T) (RETURN)) (FONTTOGGLE.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT FONT) of KEYSTATE))) (RETURN)) (USERMODE1UP.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with NIL) (RETURN)) (USERMODE1DOWN.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with T) (RETURN)) (USERMODE1TOGGLE.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE1) of KEYSTATE))) (RETURN)) (USERMODE2UP.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with NIL) (RETURN)) (USERMODE2DOWN.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with T) (RETURN)) (USERMODE2TOGGLE.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE2) of KEYSTATE))) (RETURN)) (USERMODE3UP.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with NIL) (RETURN)) (USERMODE3DOWN.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with T) (RETURN)) (USERMODE3TOGGLE.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE3) of KEYSTATE))) (RETURN)) (SHOULDNT)) (* ;;  "Only the LOCKSHIFT and NOLOCKSHIFT cases make it to here, having set SHIFTED if appropriate.") [SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \CURRENTKEYACTION TI)) (T (TRANSITIONCODE \CURRENTKEYACTION TI] [COND ((OR (fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) [IF (IGREATERP ASCIICODE 127) THEN (* ;; "Non-ascii interpretation--what is cntrl/meta supposed to mean? Try using the original interpretation. This way we can type ^E or Meta-D even if Russian keyboard is set, but doesn't mess up simple ascii remappings, such as bs->del.") (SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \COMMANDKEYACTION TI)) (T (TRANSITIONCODE \COMMANDKEYACTION TI] [COND ((fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (SETQ ASCIICODE (LOGAND ASCIICODE \CTRLMASK] (COND ((AND (OR (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) (ILESSP ASCIICODE \KEYBOARD.META)) (SETQ ASCIICODE (LOGOR ASCIICODE \KEYBOARD.META] (COND ((ASSOC ASCIICODE (fetch INTERRUPTLIST of \CURRENTKEYACTION)) (SETQ PENDINGINTERRUPT T) (replace WAITINGINTERRUPT of \INTERRUPTSTATE with T) (replace INTCHARCODE of \INTERRUPTSTATE with ASCIICODE)) (T (\PUTSYSBUF ASCIICODE]) (MOUSECHORDWAIT [LAMBDA MSECS (* MPL "21-Jun-85 16:31") (DECLARE (GLOBALVARS \RCLKMILLISECOND)) (PROG1 (AND \MOUSECHORDTICKS \MOUSECHORDMILLISECONDS) [COND ((IGREATERP MSECS 0) (SETQ \MOUSECHORDTICKS (AND (ARG MSECS 1) (IMIN MAX.SMALLP (ITIMES (SETQ \MOUSECHORDMILLISECONDS (OR (SMALLP (ARG MSECS 1)) 50)) \RCLKMILLISECOND])]) (\TRACKCURSOR [LAMBDA (CURSORX CURSORY) (* ; "Edited 30-Mar-88 11:11 by Snow") (DECLARE (GLOBALVARS \CURSORDESTHEIGHT \CURSORDESTWIDTH)) (.NOTELASTUSERACTION) [COND ((OR [COND ((IGEQ CURSORX (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX)) (* Large cursor values are either out of bounds to the right or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORX 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORX 65535)) \CURSORHOTSPOTX) 0) (* Cursor pos + hotspot is still off to the left  (the IPLUS is an optimization of (\XMOUSECOORD))%, so clip to effective zero) (SETQ CURSORX (COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTX) BITSPERWORD] (T (SETQ CURSORX (SUB1 (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX] (IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT HARDCURSORHEIGHT))) (* repeat test so that both X and Y will get clipped each cycle.  This keeps the cursor from moving off the screen.) [COND ((IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY)) (* Large cursor values are either out of bounds to the bottom or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORY 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORY 65535)) \CURSORHOTSPOTY) 0) (* Cursor pos + hotspot is still off to the top, so clip to effective zero) (SETQ CURSORY (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTY) BITSPERWORD] (T (SETQ CURSORY (SUB1 (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY] (* If need to clip mouse, do so here. \SETMOUSEXY MACRO takes dlion  complexities into account.) (COND ((NEQ \MACHINETYPE \MAIKO) (\SETMOUSEXY CURSORX CURSORY] (COND (\SOFTCURSORUPP (\SOFTCURSORPOSITION CURSORX CURSORY))) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Have to kick DAYBREAK IOP to  track the cursor. *) (\DoveDisplay.SetCursorPosition CURSORX CURSORY))) (\PUTBASE \EM.CURSORX 0 CURSORX) (\PUTBASE \EM.CURSORY 0 CURSORY]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \SUN.TYPE3KEYBOARD 0) (RPAQQ \SUN.TYPE4KEYBOARD 1) (RPAQQ \SUN.JLEKEYBOARD 2) (RPAQQ \TOSHIBA.JIS 7) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) ) (RPAQ? \MOUSECHORDTICKS ) (RPAQ? \MOUSECHORDMILLISECONDS 50) (DECLARE%: DONTEVAL@LOAD DOCOPY (\KEYBOARDINIT) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS .NOTELASTUSERACTION MACRO (NIL (\BLT \LASTUSERACTION (LOCF (fetch SECONDSTMP of \MISCSTATS)) WORDSPERCELL))) ) (DECLARE%: EVAL@COMPILE (RPAQQ ALLUP 65535) (RPAQQ \CTRLMASK 159) (RPAQQ \METABIT 128) (CONSTANTS ALLUP \CTRLMASK \METABIT) ) (RPAQQ DLMOUSEBITS ((\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6))) (DECLARE%: EVAL@COMPILE (RPAQQ \MOUSE.LEFTBIT 4) (RPAQQ \MOUSE.RIGHTBIT 2) (RPAQQ \MOUSE.MIDDLEBIT 1) (RPAQQ \MOUSE.ALLBITS 7) (RPAQQ \MOUSE.LRBIT 6) (CONSTANTS (\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6)) ) (RPAQQ DLMOUSESTATES ((\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5))) (DECLARE%: EVAL@COMPILE (RPAQQ \DLMOUSE.UP 0) (RPAQQ \DLMOUSE.WAITING 1) (RPAQQ \DLMOUSE.NORMAL 2) (RPAQQ \DLMOUSE.MIDDLE 3) (RPAQQ \DLMOUSE.MIDDLE&LEFT 4) (RPAQQ \DLMOUSE.MIDDLE&RIGHT 5) (CONSTANTS (\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5)) ) (RPAQQ TRANSITIONFLAGS (ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF)) (DECLARE%: EVAL@COMPILE (RPAQQ ALTGRDOWN.TF 27) (RPAQQ ALTGRUP.TF 28) (RPAQQ ALTGRTOGGLE.TF 29) (RPAQQ CTRLDOWN.TF 5) (RPAQQ CTRLUP.TF 4) (RPAQQ DEADKEY.TF 30) (RPAQQ IGNORE.TF 0) (RPAQQ EVENT.TF 1) (RPAQQ LOCKDOWN.TF 8) (RPAQQ LOCKSHIFT.TF 2) (RPAQQ LOCKTOGGLE.TF 14) (RPAQQ LOCKUP.TF 7) (RPAQQ NOLOCKSHIFT.TF 3) (RPAQQ 1SHIFTDOWN.TF 6) (RPAQQ 1SHIFTUP.TF 9) (RPAQQ 2SHIFTDOWN.TF 11) (RPAQQ 2SHIFTUP.TF 10) (RPAQQ METADOWN.TF 13) (RPAQQ METAUP.TF 12) (RPAQQ FONTDOWN.TF 24) (RPAQQ FONTUP.TF 25) (RPAQQ FONTTOGGLE.TF 26) (RPAQQ USERMODE1UP.TF 15) (RPAQQ USERMODE1DOWN.TF 16) (RPAQQ USERMODE1TOGGLE.TF 17) (RPAQQ USERMODE2UP.TF 18) (RPAQQ USERMODE2DOWN.TF 19) (RPAQQ USERMODE2TOGGLE.TF 20) (RPAQQ USERMODE3UP.TF 21) (RPAQQ USERMODE3DOWN.TF 22) (RPAQQ USERMODE3TOGGLE.TF 23) (CONSTANTS ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \TRANSINDEX MACRO ((KEYNUMBER DOWNFLG) (COND (DOWNFLG (IPLUS \NKEYS KEYNUMBER)) (T KEYNUMBER)))) (PUTPROPS ARMEDCODE MACRO ((TABLE CHAR) (\GETBASEBIT (fetch (KEYACTION ARMED) TABLE) CHAR))) (PUTPROPS TRANSITIONALTGRCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION ALTGRAPHCODES) of TABLE) CHAR))) (PUTPROPS TRANSITIONSHIFTCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION SHIFTCODES) TABLE) CHAR))) (PUTPROPS TRANSITIONCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION CODES) TABLE) CHAR))) (PUTPROPS TRANSITIONFLAGS MACRO ((TABLE CHAR) (\GETBASEBYTE (fetch (KEYACTION FLAGS) TABLE) CHAR))) (PUTPROPS TRANSITIONDEADLIST MACRO ((TABLE CHAR SHIFTED) (\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1)))) (PUTPROPS CHECKFORDEADKEY MACRO [(KEYCODE TABLE CHAR SHIFTED) (LET ((CODE KEYCODE)) (COND [(IEQP CODE 65535) `(DEADKEY ,(\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1] (T CODE]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \NKEYS 112) (CONSTANTS \NKEYS) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (BLOCKRECORD RING ((READ WORD) (WRITE WORD))) ) (* ; "can get rid of shiftstate after clients have been fixed") (DECLARE%: EVAL@COMPILE (ACCESSFNS SHIFTSTATE [[DUMMYSHIFT (NOT (EQ 0 (LOGAND (\GETBASEBYTE DATUM 0) (LOGOR 1 2] [DUMMY1SHIFT [NOT (EQ 0 (LOGAND 1 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 1 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 1] [DUMMY2SHIFT [NOT (EQ 0 (LOGAND 2 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 2 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 2] [DUMMYLOCK [NOT (EQ 0 (LOGAND 4 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 4 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 4] [DUMMYSHIFTORLOCK (NOT (EQ 0 (\GETBASEBYTE DATUM 0))) (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (HELP " Can't turn on SHIFTORLOCK" )) (T 0] [DUMMYCTRL (NOT (EQ 0 (\GETBASEBYTE DATUM 1))) (\PUTBASEBYTE DATUM 1 (COND (NEWVALUE 1) (T 0] [DUMMYMETA (NOT (EQ 0 (\GETBASEBYTE DATUM 2))) (\PUTBASEBYTE DATUM 2 (COND (NEWVALUE 1) (T 0] [DUMMYFONT (NEQ 0 (LOGAND (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 3] [DUMMYUSERMODE1 (NEQ 0 (LOGAND (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 0] [DUMMYUSERMODE2 (NEQ 0 (LOGAND (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 1] [DUMMYUSERMODE3 (NEQ 0 (LOGAND (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 2] [DUMMYALTGRAPH (NEQ 0 (LOGAND (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 4] (DUMMYDEADKEYPENDING (NEQ 0 (LOGAND (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 5] (CREATE (\ALLOCBLOCK (FOLDHI 3 BYTESPERCELL)))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP) ) (DECLARE%: EVAL@COMPILE (RPAQQ NRINGINDEXWORDS 2) (CONSTANTS NRINGINDEXWORDS) ) (DECLARE%: EVAL@COMPILE (RPAQ \SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (RPAQ \SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE))) [CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] ) ) (DECLARE%: EVAL@COMPILE (RPAQQ \KEYNAMES ((5 %% FIVE) (4 $ FOUR) (6 ~ SIX) (e E) (7 & SEVEN) (d D) (u U) (v V) (0 %) ZERO) (k K) (- %) (p P) (/ ?) (\ %| FONT LOOKS) (LF SAME) (BS <-) (3 %# THREE) (2 @ TWO) (w W) (q Q) (s S) (a A) (9 %( NINE) (i I) (x X) (o O) (l L) (%, <) (%' %") (%] }) (BLANK-MIDDLE OPEN DBK-HELP) (BLANK-TOP KEYBOARD DBK-META) (1 ! ONE) (ESC ESCAPE ->) (TAB =>) (f F) (CTRL PROP'S EDIT) (c C) (j J) (b B) (z Z) (LSHIFT) (%. >) (; %:) (CR <-%|) (_ ^) (DEL DELETE) (SKIP NEXT) (r R) (t T) (g G) (y Y) (h H) (8 * EIGHT) (n N) (m M) (LOCK) (SPACE) (%[ {) (= +) (RSHIFT) (BLANK-BOTTOM STOP) (MOVE) (UNDO) (UTIL0 SUN-KEYPAD=) (UTIL1 SUN-KEYPAD/) (UTIL2 SUPER/SUB) (UTIL3 CASE) (UTIL4 STRIKEOUT) (UTIL5 KEYPAD2) (UTIL6 KEYPAD3 PGDN) (UTIL7 SUN-LF) (PAD1 LEFTKEY CAPSLOCK KEYPAD+) (PAD2 LEFTMIDDLEKEY NUMLOCK KEYPAD-) (PAD3 MIDDLEKEY SCROLLLOCK KEYPAD*) (PAD4 RIGHTMIDDLEKEY BREAK KEYPAD/ SUN-PAUSE) (PAD5 RIGHTKEY DOIT PRTSC) (LEFT RED MOUSERED) (RIGHT BLUE MOUSEBLUE) (MIDDLE YELLOW MOUSEYELLOW) (MARGINS) (K41 KEYPAD7 HOME) (K42 KEYPAD8) (K43 KEYPAD9 PGUP) (K44 KEYPAD4) (K45 KEYPAD5) (K46 SUN-LEFT-SPACE) (K47 KEYPAD6) (K48 RIGHT-COMMAND SUN-RIGHT-SPACE) (COPY) (FIND) (AGAIN) (HELP) (DEF'N EXPAND) (K4E KEYPAD1 END) (ALWAYS-ON-1) (ALWAYS-ON-2) (CENTER) (K52 KEYPAD0 INS) (BOLD) (ITALICS) (UNDERLINE) (SUPERSCRIPT) (SUBSCRIPT) (LARGER SMALLER) (K59 KEYPAD%| KEYPAD.) (K5A KEYPAD\ KEYPAD, SUN-F10) (K5B SUN-F11) (K5C SUN-F12) (DEFAULTS SUN-PROP) (K5E SUN-PRTSC) (K5F SUN-OPEN))) ) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun." ) (RPAQQ \ORIGKEYACTIONS ((0 (53 "%%" NOLOCKSHIFT)) (1 (52 "$" NOLOCKSHIFT)) (2 (54 "~" NOLOCKSHIFT)) (3 ("e" "E" LOCKSHIFT)) (4 (55 "&" NOLOCKSHIFT)) (5 ("d" "D" LOCKSHIFT)) (6 ("u" "U" LOCKSHIFT)) (7 ("v" "V" LOCKSHIFT)) (8 (48 ")" NOLOCKSHIFT)) (9 ("k" "K" LOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (11 ("p" "P" LOCKSHIFT)) (12 ("/" "?" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (15 (8 8 NOLOCKSHIFT)) (16 (51 "#" NOLOCKSHIFT)) (17 (50 "@" NOLOCKSHIFT)) (18 ("w" "W" LOCKSHIFT)) (19 ("q" "Q" LOCKSHIFT)) (20 ("s" "S" LOCKSHIFT)) (21 ("a" "A" LOCKSHIFT)) (22 (57 "(" NOLOCKSHIFT)) (23 ("i" "I" LOCKSHIFT)) (24 ("x" "X" LOCKSHIFT)) (25 ("o" "O" LOCKSHIFT)) (26 ("l" "L" LOCKSHIFT)) (27 ("," "<" NOLOCKSHIFT)) (28 ("'" "%"" NOLOCKSHIFT)) (29 ("]" "}" NOLOCKSHIFT)) (30 (194 194 NOLOCKSHIFT)) (31 (193 193 NOLOCKSHIFT)) (32 (49 "!" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (34 (9 9 NOLOCKSHIFT)) (35 ("f" "F" LOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (37 ("c" "C" LOCKSHIFT)) (38 ("j" "J" LOCKSHIFT)) (39 ("b" "B" LOCKSHIFT)) (40 ("z" "Z" LOCKSHIFT)) (41 1SHIFTDOWN . 1SHIFTUP) (42 ("." ">" NOLOCKSHIFT)) (43 (";" ":" NOLOCKSHIFT)) (44 (13 13 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)) (46 (127 535 NOLOCKSHIFT)) (47 ("(" "[" NOLOCKSHIFT)) (48 ("r" "R" LOCKSHIFT)) (49 ("t" "T" LOCKSHIFT)) (50 ("g" "G" LOCKSHIFT)) (51 ("y" "Y" LOCKSHIFT)) (52 ("h" "H" LOCKSHIFT)) (53 (56 "*" NOLOCKSHIFT)) (54 ("n" "N" LOCKSHIFT)) (55 ("m" "M" LOCKSHIFT)) (56 LOCKDOWN . LOCKUP) (57 (32 32 NOLOCKSHIFT)) (58 ("[" "{" NOLOCKSHIFT)) (59 ("=" "+" NOLOCKSHIFT)) (60 2SHIFTDOWN . 2SHIFTUP) (61 (195 195 NOLOCKSHIFT)) (63 (")" "]" NOLOCKSHIFT)) (77 EVENT . EVENT) (78 EVENT . EVENT) (79 EVENT . EVENT) (102 LOCKDOWN) (103 LOCKUP))) (RPAQQ \DLIONKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 ("\" "|" NOLOCKSHIFT)) (45 (96 "~" NOLOCKSHIFT)) (OPEN METADOWN . METAUP) (PROP'S CTRLDOWN . CTRLUP) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPERSCRIPT ("2,113" "2,153" NOLOCKSHIFT)) (SUBSCRIPT ("2,114" "2,154" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (DEFAULTS ("2,115" "2,155" NOLOCKSHIFT)) (93 (27 "2,64" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (31 ("2,5" "2,45" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (80 ("2,13" "2,53" NOLOCKSHIFT)) (FONT ("2,112" "2,152" NOLOCKSHIFT)))) (RPAQQ \DLIONOSDKEYACTIONS ((56 LOCKTOGGLE))) (RPAQQ \DORADOKEYACTIONS ((2 (54 "~" NOLOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)))) (RPAQQ \DOVEKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (56 CTRLDOWN . CTRLUP) (65 (27 27 NOLOCKSHIFT)) (71 (39 34 NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (108 (96 126 NOLOCKSHIFT)) (DBK-META METADOWN . METAUP) (DBK-HELP ("2,1" "2,41" NOLOCKSHIFT)) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (EDIT ("2,5" "2,45" NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (CASE ("2,104" "2,144" NOLOCKSHIFT)) (STRIKEOUT ("2,105" "2,145" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPER/SUB ("2,107" "2,147" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (MARGINS ("2,111" "2,151" NOLOCKSHIFT)) (LOOKS ("2,112" "2,152" NOLOCKSHIFT)) (CAPSLOCK LOCKTOGGLE) (NUMLOCK ("2,11" "-" NOLOCKSHIFT)) (SCROLLLOCK ("2,12" 180 NOLOCKSHIFT)) (BREAK (2 184 NOLOCKSHIFT)) (DOIT ("2,13" "2,53" NOLOCKSHIFT)) (KEYPAD7 ("2,14" 55 NOLOCKSHIFT)) (KEYPAD8 (173 56 NOLOCKSHIFT)) (KEYPAD9 ("2,15" 57 NOLOCKSHIFT)) (KEYPAD4 (172 52 NOLOCKSHIFT)) (KEYPAD5 ("2,16" 53 NOLOCKSHIFT)) (KEYPAD6 (174 54 NOLOCKSHIFT)) (KEYPAD1 ("2,17" 49 NOLOCKSHIFT)) (KEYPAD2 (175 50 NOLOCKSHIFT)) (KEYPAD3 ("2,20" 51 NOLOCKSHIFT)) (KEYPAD0 ("2,21" 48 NOLOCKSHIFT)) (KEYPAD%| ("|" 46 NOLOCKSHIFT)) (KEYPAD\ ("\" 44 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)))) (RPAQQ \DOVEOSDKEYACTIONS ((56 LOCKDOWN . LOCKUP) (36 CTRLDOWN . CTRLUP) (CAPSLOCK ("2,5" "2,45" NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONS ((61 (5 7 NOLOCKSHIFT)) (91 (520 552 NOLOCKSHIFT)) (92 (513 545 NOLOCKSHIFT)) (30 (513 545 NOLOCKSHIFT)) (63 (516 548 NOLOCKSHIFT)) (93 (532 564 NOLOCKSHIFT)) (62) (111 (329 263 NOLOCKSHIFT)) (89) (90 (515 547 NOLOCKSHIFT)) (73 (521 521 NOLOCKSHIFT)) (74 (522 522 NOLOCKSHIFT)) (75 (2 2 NOLOCKSHIFT)) (81 (524 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 (525 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 (526 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 (527 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 (528 51 NOLOCKSHIFT)) (98 (529 48 NOLOCKSHIFT)) (76 (523 555 NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 (577 609 NOLOCKSHIFT)) (99 (578 610 NOLOCKSHIFT)) (100 (579 611 NOLOCKSHIFT)) (67 (580 612 NOLOCKSHIFT)) (68 (581 613 NOLOCKSHIFT)) (101 (582 614 NOLOCKSHIFT)) (66 (583 615 NOLOCKSHIFT)) (104 (584 616 NOLOCKSHIFT)) (80 (585 617 NOLOCKSHIFT)) (13 (23 21 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (2 (54 94 NOLOCKSHIFT)) (10 (45 95 NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 (96 126 NOLOCKSHIFT)) (31 METADOWN . METAUP) (14 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 (530 562 NOLOCKSHIFT)) (105 (92 124 NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONST4 ((61 ("^E" "^G" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (30 ("2,1" "2,41" NOLOCKSHIFT)) (109 ("2,25" "2,65" NOLOCKSHIFT)) (63 ("2,4" "2,44" NOLOCKSHIFT)) (14 METADOWN . METAUP) (93 ("2,24" "2,64" NOLOCKSHIFT)) (62) (111 ("1,111" "1,79" NOLOCKSHIFT)) (89) (90 ("2,3" "2,43" NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 ("2,17" 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (98 ("2,21" 48 NOLOCKSHIFT)) (76 ("2,13" "2,13" NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 ("2,101" "2,141" NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (100 ("2,103" "2,143" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (68 ("2,105" "2,145" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (33 ("ESC" "ESC" NOLOCKSHIFT)) (64 IGNORE . IGNORE) (65 (27 27 NOLOCKSHIFT)) (95 IGNORE . IGNORE) (96 IGNORE . IGNORE) (102 IGNORE . IGNORE) (2 ("6" "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 ("`" "~" NOLOCKSHIFT)) (31 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (86 IGNORE . IGNORE) (88 IGNORE . IGNORE) (105 ("\" "|" NOLOCKSHIFT)))) (RPAQQ \MAIKO-JLE-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("\" "_" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (14 METADOWN . METAUP) (15 (8 8 NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (30 ("]" "}" NOLOCKSHIFT)) (31 METADOWN . METAUP) (33 ("ESC" "ESC" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (43 (";" "+" NOLOCKSHIFT)) (45 ("^" "~" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (56 LOCKTOGGLE . IGNORE) (58 ("@" "`" NOLOCKSHIFT)) (59 ("-" "=" NOLOCKSHIFT)) (61 ("^E" "^G" NOLOCKSHIFT)) (62) (63 ("2,4" "2,44" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (71 (10 10 NOLOCKSHIFT)) (72 (766 766 NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (86 (765 765 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (88 (770 771 NOLOCKSHIFT)) (90 ("2,3" "2,43" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (96 IGNORE . IGNORE) (98 ("2,21" 48 NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (102 IGNORE . IGNORE) (103 (767 768 NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (105 ("\" "|" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (109 (769 769 NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (111 ("1,111" "1,79" NOLOCKSHIFT)))) (RPAQQ \TOSHIBA-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("-" "=" NOLOCKSHIFT)) (59 ("^" "~" NOLOCKSHIFT)) (45 ("\" "|" NOLOCKSHIFT)) (58 ("@" "`" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (105 ("]" "}" NOLOCKSHIFT)) (43 (";" "+" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (15 (23 95 NOLOCKSHIFT)) (13 (8 8 NOLOCKSHIFT)) (86 METADOWN . METAUP) (73 (530 562 NOLOCKSHIFT)) (88 ("2,24" "2,64" NOLOCKSHIFT)) (98 IGNORE . IGNORE) (75 ("2,11" "2,11" NOLOCKSHIFT)) (110 ("2,12" "2,12" NOLOCKSHIFT)) (74 ("^B" "^B" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (173 56 NOLOCKSHIFT)) (95 ("2,15" 57 NOLOCKSHIFT)) (81 (172 52 NOLOCKSHIFT)) (82 ("2,16" 53 NOLOCKSHIFT)) (83 (174 54 NOLOCKSHIFT)) (84 ("2,17" 49 NOLOCKSHIFT)) (85 (175 50 NOLOCKSHIFT)) (87 ("2,20" 51 NOLOCKSHIFT)) (94 ("2,21" 48 NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 LOCKTOGGLE))) (RPAQQ KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL) (RPAQ? \KEYBOARD.META 256) (RPAQ? \MODIFIED.KEYACTIONS ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS) ) (* ; "Key interpretation") (DEFINEQ (KEYACTION [LAMBDA (KEYNAME ACTIONS TABLE) (* ; "Edited 19-Nov-87 16:19 by Snow") (LET ((NUMB (OR (SMALLP KEYNAME) (\KEYNAMETONUMBER KEYNAME))) (TABLE (OR TABLE \CURRENTKEYACTION))) (OR (TYPE? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (* ;  "Make sure he supplied a valid TABLE argument.") (CONS (\KEYACTION1 (\TRANSINDEX NUMB T) (AND ACTIONS (OR (CAR ACTIONS) 'IGNORE)) TABLE) (\KEYACTION1 (\TRANSINDEX NUMB NIL) (AND ACTIONS (OR (CDR ACTIONS) 'IGNORE)) TABLE]) (KEYACTIONTABLE [LAMBDA (OLD) (* ; "Edited 23-Mar-92 12:44 by jds") (* ;; "Create a fresh key action table (or copy OLD so it can be modified without danger). Returns a fresh keyaction table.") (COND (OLD (* ;; "He supplied an existing table; create a copy of it:") (OR (type? KEYACTION OLD) (\ILLEGAL.ARG OLD)) (* ;  "Make sure the argument IS a key action table.") (create KEYACTION copying OLD)) (T (* ;; "Create a completely fresh table, filled in from \ORIGKEYACTIONS, and the machine-specific exceptions:") (PROG1 (SETQ OLD (create KEYACTION)) (for X in (APPEND (COPY \ORIGKEYACTIONS) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) OLD)))]) (KEYBOARDTYPE [LAMBDA NIL (* ; "Edited 6-Nov-95 15:35 by ") (* ; "Edited 17-Feb-95 14:36 by rmk:") (* ;  "Edited 16-Jun-92 11:03 by kaplan") (* ;; "Returns a symbol identifying the currently connected keyboard type. For now, infers it from the machine type, defaults to NIL (= unknown).") (LET ((MT (MACHINETYPE))) (SELECTQ MT (MAIKO (OR [CADR (SASSOC (L-CASE (UNIX-GETENV "LDEKBDTYPE")) '(("type3" SUN3) ("type4" SUN4) ("type5" SUN5] (MKATOM (U-CASE (UNIX-GETENV "LDEKBDTYPE"))) (AND (STREQUAL "dos" (UNIX-GETPARM "ARCH")) 'FULL-IBMPC))) ((DORADO DANDELION DOVE) MT) NIL]) (RESETKEYACTION [LAMBDA (TABLE FROM RESETINTERRUPTS) (* ; "Edited 19-Nov-87 16:55 by Snow") (* ;; "Resets the actions of key transitions in the keyaction table TABLE, copying in the actions from FROM. If RESETINTERRUPTS is true, also copies the interrupt-character settings from FROM.") (DECLARE (GLOBALVARS \DEFAULTKEYACTION)) (* ;; "do some type checking first.") (OR (type? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (OR FROM (SETQ FROM \DEFAULTKEYACTION)) (OR (type? KEYACTION FROM) (\ILLEGAL.ARG TABLE)) (* ;; "do the resetting.") (\BLT (fetch (KEYACTION FLAGS) of TABLE) (fetch (KEYACTION FLAGS) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION FLAGS) of TABLE)) 1)) (\BLT (fetch (KEYACTION CODES) of TABLE) (fetch (KEYACTION CODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION CODES) of TABLE)) 1)) (\BLT (fetch (KEYACTION SHIFTCODES) of TABLE) (fetch (KEYACTION SHIFTCODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION SHIFTCODES) of TABLE)) 1)) [if RESETINTERRUPTS then (\BLT (fetch (KEYACTION ARMED) of TABLE) (fetch (KEYACTION ARMED) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION ARMED) of TABLE)) 1)) (replace (KEYACTION INTERRUPTLIST) of TABLE with (COPY (fetch (KEYACTION INTERRUPTLIST) of FROM] TABLE]) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS [LAMBDA NIL (* ; "Edited 18-Sep-90 22:36 by jds") (* ;;  "Return a list of machine-specific keyactions appropriate to the machine you're running on.") (* ;; "Also take account (on Maiko implementations) of whether we're running under X or not -- the CAPS-LOCK key works differently.") (SELECTC \MACHINETYPE (\DORADO \DORADOKEYACTIONS) (\DANDELION \DLIONKEYACTIONS) (\MAIKO (LET [(CAPS-LOCK-ACTIONS (COND ((EQUAL (UNIX-GETPARM "DISPLAY") "X") '((56 LOCKDOWN . LOCKUP) (72 LOCKDOWN . LOCKUP] (* ;; "If we're running under X windows, CAPS-LOCK-ACTIONS, appended to the normal keyactions, will reset the keyboard appropriately.") (COND ((EQUAL \SUN.TYPE3KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONS CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.TYPE4KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (APPEND \MAIKOKEYACTIONST4 CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.JLEKEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) \MAIKO-JLE-KEYACTIONS) ((EQUAL \TOSHIBA.JIS (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (* ; "Toshiba JIS") (APPEND \MAIKOKEYACTIONST4 \TOSHIBA-KEYACTIONS)) (T (* ; "default is type3") \MAIKOKEYACTIONS)))) (\DAYBREAK (* ;  "Moving to a daybreak. Need to distinguish among the various kinds of keyboard.") (* ;; "For now, we only distinguish between the office keyboards (1 = US, 2 = Euro, 3 = Japanese, 4 = ADM-3), and some yet-to-be-determined Lisp-keyboard number") (COND ((ILEQ (\DoveMisc.ReadKeyboardType) 4) (* ;  "It's an office keyboard. Set it up right!") (APPEND \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (T (* ;  "Lisp keyboard. Leave the Dove keyactions as they were.") \DOVEKEYACTIONS))) NIL]) (\KEYACTION1 [LAMBDA (TI ACTION TABLE) (* ; "Edited 4-Mar-92 13:59 by jds") (PROG1 (SELECTC (TRANSITIONFLAGS TABLE TI) (IGNORE.TF 'IGNORE) ((LIST LOCKSHIFT.TF NOLOCKSHIFT.TF) [LET (CODE) (LIST (CHECKFORDEADKEY (TRANSITIONCODE TABLE TI) TABLE TI NIL) (CHECKFORDEADKEY (TRANSITIONSHIFTCODE TABLE TI) TABLE TI T) (TRANSITIONALTGRCODE TABLE TI) (COND ((EQ LOCKSHIFT.TF (TRANSITIONFLAGS TABLE TI)) 'LOCKSHIFT) (T 'NOLOCKSHIFT]) (EVENT.TF 'EVENT) (CTRLDOWN.TF 'CTRLDOWN) (CTRLUP.TF 'CTRLUP) (DEADKEY.TF (LIST 'DEADKEY (TRANSITIONDEADLIST TABLE TI) (TRANSITIONDEADLIST TABLE TI T))) (1SHIFTDOWN.TF '1SHIFTDOWN) (1SHIFTUP.TF '1SHIFTUP) (2SHIFTDOWN.TF '2SHIFTDOWN) (2SHIFTUP.TF '2SHIFTUP) (LOCKDOWN.TF 'LOCKDOWN) (LOCKUP.TF 'LOCKUP) (LOCKTOGGLE.TF 'LOCKTOGGLE) (METADOWN.TF 'METADOWN) (METAUP.TF 'METAUP) (FONTUP.TF 'FONTUP) (FONTDOWN.TF 'FONTDOWN) (FONTTOGGLE.TF 'FONTTOGGLE) (USERMODE1UP.TF 'USERMODE1UP) (USERMODE1DOWN.TF 'USERMODE1DOWN) (USERMODE1TOGGLE.TF 'USERMODE1TOGGLE) (USERMODE2UP.TF 'USERMODE2UP) (USERMODE2DOWN.TF 'USERMODE2DOWN) (USERMODE2TOGGLE.TF 'USERMODE2TOGGLE) (USERMODE3UP.TF 'USERMODE3UP) (USERMODE3DOWN.TF 'USERMODE3DOWN) (USERMODE3TOGGLE.TF 'USERMODE3TOGGLE) (ALTGRUP.TF 'ALTGRUP) (ALTGRDOWN.TF 'ALTGRDOWN) (ALTGRTOGGLE.TF 'ALTGRTOGGLE) (SHOULDNT)) [SELECTQ ACTION ((NIL NOCHANGE)) (IGNORE (change (TRANSITIONFLAGS TABLE TI) IGNORE.TF)) (EVENT (change (TRANSITIONFLAGS TABLE TI) EVENT.TF)) (CTRLUP (change (TRANSITIONFLAGS TABLE TI) CTRLUP.TF)) (CTRLDOWN (change (TRANSITIONFLAGS TABLE TI) CTRLDOWN.TF)) (1SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 1SHIFTUP.TF)) (1SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 1SHIFTDOWN.TF)) (2SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 2SHIFTUP.TF)) (2SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 2SHIFTDOWN.TF)) (LOCKUP (change (TRANSITIONFLAGS TABLE TI) LOCKUP.TF)) (LOCKDOWN (change (TRANSITIONFLAGS TABLE TI) LOCKDOWN.TF)) (LOCKTOGGLE (change (TRANSITIONFLAGS TABLE TI) LOCKTOGGLE.TF)) (METAUP (change (TRANSITIONFLAGS TABLE TI) METAUP.TF)) (METADOWN (change (TRANSITIONFLAGS TABLE TI) METADOWN.TF)) (FONTUP (change (TRANSITIONFLAGS TABLE TI) FONTUP.TF)) (FONTDOWN (change (TRANSITIONFLAGS TABLE TI) FONTDOWN.TF)) (FONTTOGGLE (change (TRANSITIONFLAGS TABLE TI) FONTTOGGLE.TF)) (USERMODE1UP (change (TRANSITIONFLAGS TABLE TI) USERMODE1UP.TF)) (USERMODE1DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE1DOWN.TF)) (USERMODE1TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE1TOGGLE.TF)) (USERMODE2UP (change (TRANSITIONFLAGS TABLE TI) USERMODE2UP.TF)) (USERMODE2DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE2DOWN.TF)) (USERMODE2TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE2TOGGLE.TF)) (USERMODE3UP (change (TRANSITIONFLAGS TABLE TI) USERMODE3UP.TF)) (USERMODE3DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE3DOWN.TF)) (USERMODE3TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE3TOGGLE.TF)) (ALTGRUP (change (TRANSITIONFLAGS TABLE TI) ALTGRUP.TF)) (ALTGRDOWN (change (TRANSITIONFLAGS TABLE TI) ALTGRDOWN.TF)) (ALTGRTOGGLE (change (TRANSITIONFLAGS TABLE TI) ALTGRTOGGLE.TF)) (PROG (CODE SHIFTCODE ALTGRCODE ACT DEAD SHIFTDEAD) (COND ([AND [OR (AND (AND (LISTP (CAR (LISTP ACTION))) (EQ (CAAR (LISTP ACTION)) 'DEADKEY)) [SETQ DEAD (for PAIR in (CADAR (LISTP ACTION)) collect (* ;;  "Make sure we'll take string charcode specs in the deadkey list.") (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ CODE 65535)) [\CHARCODEP (SETQ CODE (\GETCHARCODE (CAR (LISTP ACTION] (SETQ CODE (APPLY* (FUNCTION CHARCODE) (CAR (LISTP ACTION] [OR (AND (AND (LISTP (CADR (LISTP ACTION))) (EQ (CAADR (LISTP ACTION)) 'DEADKEY)) [SETQ SHIFTDEAD (for PAIR in (CADADR (LISTP ACTION)) collect (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ SHIFTCODE 65535) (SETQ ACT (CDR ACTION))) [\CHARCODEP (SETQ SHIFTCODE (\GETCHARCODE (CAR (SETQ ACT (LISTP (CDR ACTION] (SETQ SHIFTCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) (AND [OR [\CHARCODEP (SETQ ALTGRCODE (\GETCHARCODE (CAR ACT] (SETQ ALTGRCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) NIL] (change (TRANSITIONCODE TABLE TI) CODE) (change (TRANSITIONSHIFTCODE TABLE TI) SHIFTCODE) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH TI 1) DEAD) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (IPLUS \NKEYS \NKEYS TI) 1) SHIFTDEAD) (AND ALTGRCODE (change (TRANSITIONALTGRCODE TABLE TI) ALTGRCODE))) (T (\ILLEGAL.ARG ACTION])]) (KEYDOWNP [LAMBDA (KEYNAME) (* lmm "18-Apr-85 02:09") (* T if the indicated key is  instantaneously down.) (\NEWKEYDOWNP (\KEYNAMETONUMBER KEYNAME]) (KEYNUMBERP [LAMBDA (X) (* ; "Edited 16-Jan-96 13:16 by rmk") (AND (SMALLP X) (IGEQ X 0) (ILESSP X \NKEYS) X]) (\KEYNAMETONUMBER [LAMBDA (KEYNAME) (* rmk%: " 2-SEP-83 10:29") (DECLARE (GLOBALVARS \KEYNAMES)) (* The fast case is when KEYNAME is  lower-case) (for X N in \KEYNAMES as I from 0 when (EQMEMB KEYNAME X) do (RETURN I) finally (RETURN (OR (AND (NEQ KEYNAME (SETQ N (L-CASE KEYNAME))) (for Y in \KEYNAMES as I from 0 when (EQMEMB N Y) do (RETURN I))) (\ILLEGAL.ARG KEYNAME]) (MODIFY.KEYACTIONS [LAMBDA (KeyActions SaveCurrent?) (* ; "Edited 2-Feb-89 15:38 by GADENER") (PROG1 [if SaveCurrent? then (SETQ \MODIFIED.KEYACTIONS (for ITEM in KeyActions collect (CONS (CAR ITEM) (KEYACTION (CAR ITEM] [for action in KeyActions do (for table in '(\CURRENTKEYACTION \COMMANDKEYACTION) do (KEYACTION (CAR action) (CDR action) (EVAL table])]) (METASHIFT [LAMBDA FLG (* ; "Edited 19-Nov-87 16:59 by Snow") (* ;; "Sets interpretation of swat key to first arg, where T means meta-shift, NIL means original setting. Returns previous setting") (PROG ((METASTATUS '(METADOWN . METAUP)) OLDSETTING) [SETQ OLDSETTING (KEYACTION 'BLANK-BOTTOM (AND (IGREATERP FLG 0) (COND ((EQ (ARG FLG 1) T) METASTATUS) (T (OR (ARG FLG 1) (CDR (ASSOC 'BLANK-BOTTOM \ORIGKEYACTIONS] (RETURN (COND ((EQUAL OLDSETTING METASTATUS) T) (T OLDSETTING]) (SHIFTDOWNP [LAMBDA (SHIFT) (* lmm "18-Apr-85 01:07") (* Tells whether a given shift is  down) (SELECTQ SHIFT (LOCK (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (META (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE))) (1SHIFT (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE)) (2SHIFT (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE)) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE))) (CTRL (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (FONT (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (USERMODE1 (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (USERMODE2 (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (USERMODE3 (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (\ILLEGAL.ARG SHIFT]) ) (* ; "To support office style 1108 & 1186 keyboards") (DEFINEQ (SETUP.OFFICE.KEYBOARD [LAMBDA NIL (* jds " 8-Oct-85 16:27") (SELECTQ (MACHINETYPE) (DANDELION (MODIFY.KEYACTIONS \DLIONOSDKEYACTIONS)) (DOVE (MODIFY.KEYACTIONS \DOVEOSDKEYACTIONS)) NIL]) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \TEMPCOPYTIMER MACRO ((X) (PROGN (\BLT \MOUSETIMERTEMP (LOCF X) WORDSPERCELL) \MOUSETIMERTEMP))) ) (* ; "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED") (DEFOPTIMIZER KEYDOWNP (KEYNAME) `(\NEWKEYDOWNP (\KEYNAMETONUMBER ,KEYNAME))) (* "END EXPORTED DEFINITIONS") ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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)))) ) (* "END EXPORTED DEFINITIONS") (* ; "A raw keyboard device/stream") (DEFINEQ (\INIT.KEYBOARD.STREAM [LAMBDA NIL (* ; "Edited 4-Sep-87 10:25 by jds") (* ;; "Initialize the %"Keyboard%" device: Set up the FDEV and the prototype keyboard stream in their respective global variables.") (DECLARE (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM)) [\DEFINEDEVICE 'KEYBOARD (SETQ \KEYBOARD.DEVICE (create FDEV DEVICENAME _ 'KEYBOARD CLOSEFILE _ (FUNCTION NILL) EVENTFN _ (FUNCTION \KEYBOARDEVENTFN) BIN _ (FUNCTION \GETKEY) PEEKBIN _ (FUNCTION \PEEKSYSBUF) READP _ (FUNCTION \SYSBUFP) EOFP _ (FUNCTION NILL) GETFILENAME _ (FUNCTION (LAMBDA (X MODE) (if (EQ MODE 'INPUT) then \KEYBOARD.STREAM] (SETQ \KEYBOARD.STREAM (create STREAM USERCLOSEABLE _ NIL USERVISIBLE _ NIL FULLFILENAME _ '{KEYBOARD} DEVICE _ \KEYBOARD.DEVICE ACCESS _ 'INPUT]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\INIT.KEYBOARD.STREAM) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM) ) (* "END EXPORTED DEFINITIONS") (* ; "Hook for a periodic interrupt") (DEFINEQ (\DOBUFFEREDTRANSITIONS [LAMBDA (\INTERRUPTABLE) (DECLARE (SPECVARS \INTERRUPTABLE)) (* ; "Edited 1-Feb-92 11:59 by jds") (SETQ \KEYBUFFERING 'INPROGRESS) (LET ((PENDINGINTERRUPT)) (DECLARE (SPECVARS PENDINGINTERRUPT)) (* ; "Used by \DECODETRANSITION") [bind R RPTR until (EQ 0 (SETQ R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) ) do (SETQ RPTR (\ADDBASE \KEYBOARDEVENTQUEUE R)) (* ; "get pointer to this event") (* ;  "handle simple keyboard words by calling \DOTRANSITIONS for each word") [COND ((NEQ (fetch (KEYBOARDEVENT W0) of RPTR) (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE )) (\DOTRANSITIONS 0 (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W0) of RPTR)) (replace (KEYBOARDEVENT W0) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W0) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W1) of RPTR) (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE )) (\DOTRANSITIONS 16 (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W1) of RPTR)) (replace (KEYBOARDEVENT W1) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W1) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W2) of RPTR) (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE )) (\DOTRANSITIONS 32 (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W2) of RPTR)) (replace (KEYBOARDEVENT W2) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W2) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W3) of RPTR) (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE )) (\DOTRANSITIONS 48 (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W3) of RPTR)) (replace (KEYBOARDEVENT W3) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W3) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W4) of RPTR) (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE )) (\DOTRANSITIONS 80 (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W4) of RPTR)) (replace (KEYBOARDEVENT W4) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W4) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W5) of RPTR) (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE )) (\DOTRANSITIONS 96 (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W5) of RPTR)) (replace (KEYBOARDEVENT W5) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W5) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT WU) of RPTR) (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE )) (\DOTRANSITIONS 64 (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT WU) of RPTR)) (replace (KEYBOARDEVENT WU) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT WU) of RPTR] (* ;;; "now remove event from queue") (COND ((EQ [replace (RING READ) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ R \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS \KEYBOARDEVENT.SIZE R] (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE )) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0] (PROGN (* ; "update dummy shift state") (replace DUMMY1SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 1SHIFT ) of \LASTKEYSTATE )) (replace DUMMY2SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 2SHIFT ) of \LASTKEYSTATE )) (replace DUMMYLOCK of \SHIFTSTATE with (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (replace DUMMYCTRL of \SHIFTSTATE with (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (replace DUMMYMETA of \SHIFTSTATE with (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (replace DUMMYFONT of \SHIFTSTATE with (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (replace DUMMYUSERMODE1 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (replace DUMMYUSERMODE2 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (replace DUMMYUSERMODE3 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (replace DUMMYALTGRAPH of \SHIFTSTATE with (fetch (KEYBOARDEVENT ALTGRAPH) of \LASTKEYSTATE)) (replace DUMMYDEADKEYPENDING of \SHIFTSTATE with (fetch ( KEYBOARDEVENT DEADKEYPENDING ) of \LASTKEYSTATE) )) (* ;; "Note: there is a window between the test of READ above and the setting of \KEYBUFFERING below where a keyboard transition can be ignored until the next transition causes \KEYBUFFERING to be set again") (COND ((NOT (OR PENDINGINTERRUPT \PENDINGINTERRUPT)) (* ;  "No interrupt noticed this time or on any previous invocation") (SETQ \KEYBUFFERING NIL)) ((NOT (\GETBASEPTR (\STKSCAN '\INTERRUPTABLE) 0)) (* ;  "We're not interruptable, so try again later") (SETQ \PENDINGINTERRUPT T) (SETQ \KEYBUFFERING NIL)) (T (SETQ \PENDINGINTERRUPT NIL) (SETQ \KEYBUFFERING NIL) (LET ((\INTERRUPTABLE T)) (INTERRUPTED]) (\TIMER.INTERRUPTFRAME [LAMBDA NIL (* lmm "22-Apr-85 09:47") (* place holder for periodic  interrupts) (if NIL then (APPLY* \PERIODIC.INTERRUPT) (if \PERIODIC.INTERRUPT then (SETUPTIMER (QUOTIENT (TIMES \PERIODIC.INTERRUPT.FREQUENCY \RCLKSECOND) 77) (LOCF (fetch DLMOUSETIMER of \MISCSTATS)) 'TICKS) (SETQ \TIMER.INTERRUPT.PENDING T]) (\PERIODIC.INTERRUPTFRAME [LAMBDA NIL (DECLARE (GLOBALVARS \PERIODIC.INTERRUPT)) (* lmm "16-Jul-85 16:22") (LET ((FN \PERIODIC.INTERRUPT)) (AND FN (SPREADAPPLY* FN]) ) (RPAQ? \KEYBUFFERING ) (RPAQ? \PERIODIC.INTERRUPT ) (RPAQ? \TIMER.INTERRUPT.PENDING ) (RPAQ? \PERIODIC.INTERRUPT.FREQUENCY 77) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (* ; "cursor and mouse related functions.") (DEFINEQ (\HARDCURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 2-Jan-2000 18:10 by kaplan") (* ;  "version of \CURSORUP that knows about the possibility of the cursor being on the color screen.") (PROG (IMAGE) (SETQ \SOFTCURSORP NIL) (SETQ \CURRENTCURSOR NEWCURSOR) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION))) (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR] (BITBLT IMAGE 0 0 CursorBitMap 0 (IDIFFERENCE HARDCURSORHEIGHT (fetch (BITMAP BITMAPHEIGHT ) of IMAGE)) HARDCURSORWIDTH HARDCURSORHEIGHT (COND (INVERTFLG 'INVERT) (T 'INPUT)) 'REPLACE) (SELECTC \MACHINETYPE (\DAYBREAK (\DoveDisplay.SetCursorShape CursorBitMap)) (\MAIKO (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR))) NIL]) (\HARDCURSORPOSITION [LAMBDA (XPOS YPOS) (* kbr%: "13-Jun-85 21:24") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS)) NIL]) (\HARDCURSORDOWN [LAMBDA NIL (* kbr%: "23-Apr-85 18:26") (\CLEARBM (CURSORBITMAP]) ) (DEFINEQ (CURSOR.INIT [LAMBDA NIL (* kbr%: "23-Jan-86 17:34") (PROG (DESTBPL) (* Assorted globals for doing the  color cursor. *) (SETQ \CURSORDESTINATION ScreenBitMap) (SETQ \SOFTCURSORUPBM NIL) (SETQ \SOFTCURSORDOWNBM NIL) (SETQ \CURSORDESTLINE 0) (SETQ \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of ScreenBitMap)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of ScreenBitMap)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of ScreenBitMap)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of ScreenBitMap)) (* Initialize PILOTBBTs.  *) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (* These PILOTBBTs are the mixing areas for forming the color cursor image.  *) (* Does SCREEN to DOWNBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT1 (create PILOTBBT PBTSOURCEBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT1) (* Does DOWNBM to UPBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT2 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT2) (* Does MASK to UPBM via INPUT,  ERASE. *) (SETQ \SOFTCURSORBBT3 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 1 PBTOPERATION _ 1)) (\LOCKCELL \SOFTCURSORBBT3) (* Does IMAGE to UPBM via INPUT,  PAINT. *) (SETQ \SOFTCURSORBBT4 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 2)) (\LOCKCELL \SOFTCURSORBBT4) (* Does UPBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT5 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT5) (* Does DOWNBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT6 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT6) (* Lock things down.  *) ]) (\CURSORDESTINATION [LAMBDA (DESTINATION) (* kbr%: " 2-Sep-85 20:13") (* Change DESTINATION of  \CURRENTCURSOR, assuming it is down.  *) (PROG (DESTBPL) (COND ((NOT (EQ DESTINATION \CURSORDESTINATION)) (UNINTERRUPTABLY [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CURSOR CUIMAGE) of \CURRENTCURSOR )) (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION))) (\CURSORBITSPERPIXEL \CURRENTCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION] (\SETMOUSEXY 0 0) (\PUTBASE \EM.CURSORX 0 0) (\PUTBASE \EM.CURSORY 0 0) (SETQ \CURSORDESTLINE 0) (SETQ.NOREF \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of DESTINATION)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of DESTINATION)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of DESTINATION)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of DESTINATION )) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT1 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT5 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT6 with DESTBPL) (SETQ \CURSORDESTINATION DESTINATION))]) (\SOFTCURSORUP [LAMBDA (NEWCURSOR) (* kbr%: " 2-Sep-85 20:15") (* Put soft NEWCURSOR up, assuming soft cursor is down.  *) (PROG (IMAGE MASK WIDTH BWIDTH HEIGHT CURSORBITSPERPIXEL CURSORBPL UPBMBASE DOWNBMBASE) (* Get cursor IMAGE & MASK.  *) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) (SETQ MASK (fetch (CURSOR CUMASK) of NEWCURSOR)) (SETQ WIDTH (fetch (BITMAP BITMAPWIDTH) of IMAGE)) (SETQ HEIGHT (fetch (BITMAP BITMAPHEIGHT) of IMAGE)) (SETQ CURSORBITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE)) (* Create new UPBM & DOWNBM caches  if necessary. *) (COND ((NOT (AND (type? BITMAP \SOFTCURSORUPBM) (EQ (fetch (BITMAP BITMAPWIDTH) of \SOFTCURSORUPBM) WIDTH) (EQ (fetch (BITMAP BITMAPHEIGHT) of \SOFTCURSORUPBM) HEIGHT) (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of \SOFTCURSORUPBM) CURSORBITSPERPIXEL))) (SETQ \SOFTCURSORWIDTH WIDTH) (SETQ \SOFTCURSORHEIGHT HEIGHT) (SETQ \SOFTCURSORUPBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ \SOFTCURSORDOWNBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ UPBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM)) (\TEMPLOCKPAGES UPBMBASE 1) (SETQ DOWNBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM)) (\TEMPLOCKPAGES DOWNBMBASE 1) (SETQ CURSORBPL (UNFOLD (fetch (BITMAP BITMAPRASTERWIDTH) of IMAGE) BITSPERWORD)) (SETQ BWIDTH (ITIMES (fetch (BITMAP BITMAPWIDTH) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE))) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT1 with CURSORBPL) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT2 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT2 with DOWNBMBASE) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT2 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT2 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT3 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT3 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT3 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT4 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT4 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT4 with HEIGHT) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT5 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT6 with CURSORBPL))) (* Change PILOTBBTs.  *) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT3 with (fetch (BITMAP BITMAPBASE ) of MASK)) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT4 with (fetch (BITMAP BITMAPBASE ) of IMAGE)) (* Put up new \CURRENTCURSOR.  *) (SETQ \CURRENTCURSOR NEWCURSOR) (\TEMPLOCKPAGES \CURRENTCURSOR 1) (SETQ \SOFTCURSORP T) (\SOFTCURSORUPCURRENT]) (\SOFTCURSORUPCURRENT [LAMBDA NIL (* kbr%: "18-Aug-85 15:09") (* Put soft \CURRENTCURSOR up, assuming soft cursor is down.  *) (PROG (DISPINTERRUPT X Y XBASE YBASE WIDTH HEIGHT BITSPERPIXEL MINUSDESTRASTERWIDTH DEST DESTBIT SOURCEOFFSET UPBMSOURCE DOWNBMSOURCE SOURCEBIT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP T) (* Roughly, we want to  (BITBLT CURSOR XBASE YBASE SCREEN X  Y WIDTH HEIGHT) *) (SETQ X (SIGNED (\GETBASE \EM.MOUSEX 0) BITSPERWORD)) (SETQ Y (SIGNED (\GETBASE \EM.MOUSEY 0) BITSPERWORD)) (SETQ XBASE 0) (SETQ YBASE 0) (SETQ WIDTH \SOFTCURSORWIDTH) (SETQ HEIGHT \SOFTCURSORHEIGHT) (* Clip off screen parts of cursor.  *) [COND ((IGREATERP 0 X) (* Some of cursor is to left of  screen. *) (SETQ XBASE (IMINUS X)) (SETQ WIDTH (IDIFFERENCE WIDTH XBASE)) (SETQ X 0)) ((IGREATERP (IPLUS X WIDTH) \CURSORDESTWIDTH) (* Some of cursor is to right of  screen. *) (SETQ WIDTH (IDIFFERENCE \CURSORDESTWIDTH X] (COND ((ILESSP WIDTH 0) (GO EXIT))) [COND ((IGREATERP 0 Y) (* Some of cursor is to above of  screen. *) (SETQ YBASE (IMINUS Y)) (SETQ HEIGHT (IDIFFERENCE HEIGHT YBASE)) (SETQ Y 0)) ((IGREATERP (IPLUS Y HEIGHT) \CURSORDESTHEIGHT) (* Some of cursor is to below of  screen. *) (SETQ HEIGHT (IDIFFERENCE \CURSORDESTHEIGHT Y] (COND ((ILESSP HEIGHT 0) (GO EXIT))) (* These loops reset \CURSORDESTLINEBASE while avoiding large number  arithmetic. *) [COND [(IGREATERP \CURSORDESTLINE Y) (SETQ MINUSDESTRASTERWIDTH (IMINUS \CURSORDESTRASTERWIDTH)) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (SUB1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE MINUSDESTRASTERWIDTH] ((ILESSP \CURSORDESTLINE Y) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (ADD1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE \CURSORDESTRASTERWIDTH] (* Reset PILOTBBTs.  *) (SETQ BITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of \CURRENTCURSOR)) (SETQ X (ITIMES BITSPERPIXEL X)) (SETQ XBASE (ITIMES BITSPERPIXEL XBASE)) (SETQ WIDTH (ITIMES BITSPERPIXEL WIDTH)) (SETQ DEST \CURSORDESTLINEBASE) (SETQ DESTBIT X) (SETQ SOURCEOFFSET (ITIMES YBASE (fetch (BITMAP BITMAPRASTERWIDTH) of \SOFTCURSORUPBM ))) (SETQ UPBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM) SOURCEOFFSET)) (SETQ DOWNBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM) SOURCEOFFSET)) (SETQ SOURCEBIT XBASE) (* TBW%: Most of these fields only need to be set if we are clipping this  time or the previous time we put the cursor up.  *) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT1 with DOWNBMSOURCE) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT1 with SOURCEBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT1 with DEST) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT1 with DESTBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT1 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT1 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT5 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT5 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT5 with UPBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT5 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT5 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT5 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT6 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT6 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT6 with DOWNBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT6 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT6 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT6 with HEIGHT) (* Save background behind cursor.  *) (\PILOTBITBLT \SOFTCURSORBBT1 0) (* Compute cursor appearance.  UPBM = (OR IMAGE (AND DOWNBM  (NOT MASK))) *) (\PILOTBITBLT \SOFTCURSORBBT2 0) (\PILOTBITBLT \SOFTCURSORBBT3 0) (\PILOTBITBLT \SOFTCURSORBBT4 0) (* Put color cursor up.  *) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT5 0) EXIT (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORPOSITION [LAMBDA (X Y) (* kbr%: "18-Aug-85 14:50") (* Move soft cursor.  *) (PROG (DISPINTERRUPT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) [COND ((OR (NOT (EQ (\GETBASE \EM.CURSORX 0) X)) (NOT (EQ (\GETBASE \EM.CURSORY 0) Y))) (COND (\SOFTCURSORUPP (\SOFTCURSORDOWN) (\SOFTCURSORUPCURRENT] (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORDOWN [LAMBDA NIL (* kbr%: " 6-Jul-85 00:09") (* Take COLOR cursor down.  *) (PROG (DISPINTERRUPT) (* \SOFTCURSORUPP must be set to NIL  before BITBLTing. *) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP NIL) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT6 0) (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (CURSORPROP [LAMBDA X (* kbr%: "11-Jan-86 20:03") (COND ((IGREATERP X 2) (PUTCURSORPROP (ARG X 1) (ARG X 2) (ARG X 3))) ((EQ X 2) (GETCURSORPROP (ARG X 1) (ARG X 2))) (T (\ILLEGAL.ARG NIL]) (GETCURSORPROP [LAMBDA (CURSOR PROP) (* kbr%: "26-Apr-85 11:18") (LISTGET (fetch (CURSOR CUDATA) of CURSOR) PROP]) (PUTCURSORPROP [LAMBDA (CURSOR PROP VALUE) (* kbr%: "26-Apr-85 11:18") (PROG (OLDDATA OLDVALUE) (SETQ OLDDATA (fetch (CURSOR CUDATA) of CURSOR)) [COND [OLDDATA (SETQ OLDVALUE (LISTGET OLDDATA PROP)) (COND (VALUE (LISTPUT OLDDATA PROP VALUE)) (OLDVALUE (COND [(EQ (CAR OLDDATA) PROP) (replace (CURSOR CUDATA) of CURSOR with (CDDR (fetch (CURSOR CUDATA) of CURSOR] (T (FOR TAIL ON (CDR OLDDATA) BY (CDDR TAIL) WHEN (EQ (CADR TAIL) PROP) DO (FRPLACD TAIL (CDDDR TAIL)) (RETURN] (VALUE (replace (CURSOR CUDATA) of CURSOR with (LIST PROP VALUE] (RETURN OLDVALUE]) (\CURSORBITSPERPIXEL [LAMBDA (CURSOR NEWBITSPERPIXEL) (* kbr%: "12-May-85 17:15") (* Swap in NEWBITSPERPIXEL IMAGE and MASK, creating them if necessary.  *) (PROG (OLDBITSPERPIXEL OLDIMAGE OLDMASK WHITE BLACK NEWIMAGE NEWMASK) (SETQ OLDBITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of CURSOR)) (COND ((EQ OLDBITSPERPIXEL NEWBITSPERPIXEL) (RETURN))) (* Save OLDIMAGE and OLDMASK.  *) (SETQ OLDIMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (SETQ OLDMASK (fetch (CURSOR CUMASK) of CURSOR)) (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME OLDBITSPERPIXEL) OLDIMAGE) (CURSORPROP CURSOR (\CURSORMASKPROPNAME OLDBITSPERPIXEL) OLDMASK) (* Unsave NEWIMAGE and NEWMASK if possible, otherwise create them.  *) [COND [(SETQ NEWIMAGE (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME NEWBITSPERPIXEL))) (* Use cached NEWIMAGE & NEWMASK.  *) (SETQ NEWMASK (CURSORPROP CURSOR (\CURSORMASKPROPNAME NEWBITSPERPIXEL] (T (* Create NEWIMAGE & NEWMASK.  *) (SETQ WHITE (MASK.1'S 0 NEWBITSPERPIXEL)) (SETQ BLACK 0) (SETQ NEWIMAGE (COLORIZEBITMAP (CURSORPROP CURSOR 'IMAGE1) BLACK WHITE NEWBITSPERPIXEL)) (SETQ NEWMASK (COLORIZEBITMAP (CURSORPROP CURSOR 'MASK1) BLACK WHITE NEWBITSPERPIXEL] (replace (CURSOR CUIMAGE) of CURSOR with NEWIMAGE) (replace (CURSOR CUMASK) of CURSOR with NEWMASK]) (\CURSORIMAGEPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'IMAGE1) (4 'IMAGE4) (8 'IMAGE8) (SHOULDNT]) (\CURSORMASKPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'MASK1) (4 'MASK4) (8 'MASK8) (SHOULDNT]) ) (DEFINEQ (CURSORCREATE [LAMBDA (IMAGE MASK HOTSPOTX HOTSPOTY DATA) (* ; "Edited 10-Jul-92 16:32 by cat") (* ; "Edited 31-Jul-87 10:01 by jds") (* ;; "creates a cursor from a bitmap. HOTSPOTX and HOTSPOTY specify the hotspot.") (* ;; "INVARIANTS: the hot spot X and Y must be in the range 0..(width - 1) and 0..(height - 1), respectively.") (PROG (CURSOR) (COND ((OR (FIXP MASK) (POSITIONP MASK)) (* ;; "If Mask is a fixp then we presume this is the old arg list (bitmap x y). the cursor filepkgtype has been changed to write the new arg list. The other is provided for (dubious) compatibility") (SETQ HOTSPOTY HOTSPOTX) (SETQ HOTSPOTX MASK) (SETQ MASK NIL))) (* ;; "Make sure that the image and mask bitmaps are no larger than the hardware cursor, i.e. 16x16 bits [AR 8916 7/31/87]:") (COND ((OR (IGREATERP (BITMAPWIDTH IMAGE) 16) (IGREATERP (BITMAPHEIGHT IMAGE) 16)) (* ; "IMAGE is too big.") (\ILLEGAL.ARG IMAGE)) ((NOT MASK) (* ; "No mask, so it's OK") ) ((OR (IGREATERP (BITMAPWIDTH MASK) 16) (IGREATERP (BITMAPHEIGHT MASK) 16)) (* ; "MASK is too big.") (\ILLEGAL.ARG MASK))) [COND ((POSITIONP HOTSPOTX) (* ;;  "The hot spot can be specified as a position in one arg, rather than X and Y in two:") (SETQ HOTSPOTY (fetch (POSITION YCOORD) of HOTSPOTX)) (SETQ HOTSPOTX (fetch (POSITION XCOORD) of HOTSPOTX] (SETQ CURSOR (create CURSOR CUIMAGE _ IMAGE CUMASK _ (OR MASK IMAGE) CUHOTSPOTX _ (IMAX 0 (IMIN (SUB1 (BITMAPWIDTH IMAGE)) (OR (FIXP HOTSPOTX) 0))) CUHOTSPOTY _ [IMAX 0 (IMIN (SUB1 (BITMAPHEIGHT IMAGE)) (OR (FIXP HOTSPOTY) (SUB1 (BITMAPHEIGHT IMAGE] CUDATA _ DATA)) (RETURN CURSOR]) (CURSOR [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 24-Mar-87 18:30 by jds") (* ;; "Installs NEWCURSOR as the cursor and returns the old cursor state. If INVERTFLG is non-NIL, the cursor image is inverted during installation. If NEWCURSOR is NIL, just returns the current cursor state.") (DECLARE (GLOBALVARS DEFAULTCURSOR \SOFTCURSORP)) (PROG (OLDCURSOR) (SETQ OLDCURSOR \CURRENTCURSOR) (COND ((EQ NEWCURSOR T) (* ;  "If NEWCURSOR is T, use the system default cursor.") (SETQ NEWCURSOR DEFAULTCURSOR))) (COND [(\CURSOR-VALID-P NEWCURSOR \SOFTCURSORP) (* ;  "Only install the cursor if it's a real, valid one.") (\CURSORDOWN) (\CURSORUP NEWCURSOR INVERTFLG) (* ;  "set after adjustment to avoid confusion about hotspot during adjustment.") (SETQ \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (SETQ \CURSORHOTSPOTY (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR] (NEWCURSOR (* ; "NEWCURSOR = NIL means just return the old one, so only error if one got specified that wasn't valid.") (\ILLEGAL.ARG NEWCURSOR))) (RETURN OLDCURSOR]) (\CURSOR-VALID-P [LAMBDA (CURSOR SOFT?) (* ; "Edited 25-Mar-87 09:41 by jds") (* ;; "It returns T if CURSOR is a valid cursor. Validity depends on whether it's meant to be displayed using the cursor hardware or the cursor software.") (* ;; "This is really wed to the D-machine display architecture. ") (AND (CURSORP CURSOR) (COND (SOFT? T) (T (LET ((IMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (HOTSPOT-X (fetch (CURSOR CUHOTSPOTX) of CURSOR)) (HOTSPOT-Y (fetch (CURSOR CUHOTSPOTY) of CURSOR))) (* ;; "The bitmap must be <= 16x16, and the hot spot must be within the cursor if we're using hardware cursor.") (AND (>= 16 (BITMAPWIDTH IMAGE)) (>= 16 (BITMAPHEIGHT IMAGE)) (<= 0 HOTSPOT-X) (< HOTSPOT-X 16) (<= 0 HOTSPOT-Y) (< HOTSPOT-Y 16]) (\CURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* kbr%: "18-Aug-85 14:38") (UNINTERRUPTABLY (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (COND ((AND (EQ (fetch (CURSOR CUIMAGE) of NEWCURSOR) (fetch (CURSOR CUMASK) of NEWCURSOR)) (ILEQ (fetch (BITMAP BITMAPWIDTH) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORWIDTH) (ILEQ (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORHEIGHT) (EQ \CURSORDESTINATION ScreenBitMap)) (\HARDCURSORUP NEWCURSOR INVERTFLG)) (T (\SOFTCURSORUP NEWCURSOR))) (ADJUSTCURSORPOSITION (IDIFFERENCE \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (IDIFFERENCE (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR)) \CURSORHOTSPOTY)))]) (\CURSORPOSITION [LAMBDA (XPOS YPOS) (* ; "Edited 19-Mar-98 14:41 by jds") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND (NIL (* ;; "Removed 2000/1/3 JDS so mousr cursors work.") (ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND (NIL (ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (COND (\SOFTCURSORP (\SOFTCURSORPOSITION XPOS YPOS))) [PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Need to notify DAYBREAK IOP to  move cursor. *) (\DoveDisplay.SetCursorPosition XPOS YPOS] NIL]) (\CURSORDOWN [LAMBDA NIL (* kbr%: "12-Jun-85 17:21") (UNINTERRUPTABLY (COND (\SOFTCURSORP (\SOFTCURSORDOWN)) (T (\HARDCURSORDOWN))))]) (ADJUSTCURSORPOSITION [LAMBDA (DELTAX DELTAY) (* kbr%: " 6-Jan-86 11:55") (COND [(POSITIONP DELTAX) (\CURSORPOSITION (IPLUS (fetch (POSITION XCOORD) of DELTAX) (\XMOUSECOORD)) (IPLUS (fetch (POSITION YCOORD) of DELTAX) (\YMOUSECOORD] (T (\CURSORPOSITION (IPLUS (OR DELTAX 0) (\XMOUSECOORD)) (IPLUS (OR DELTAY 0) (\YMOUSECOORD]) (CURSORPOSITION [LAMBDA (NEWPOSITION DISPLAYSTREAM OLDPOSITION) (* kbr%: "13-Feb-86 15:53") (PROG (DD) (SETQ DD (\GETDISPLAYDATA DISPLAYSTREAM)) (OR (type? POSITION OLDPOSITION) (SETQ OLDPOSITION (create POSITION))) (freplace (POSITION XCOORD) of OLDPOSITION with (\DSPUNTRANSFORMX (\XMOUSECOORD ) DD)) (freplace (POSITION YCOORD) of OLDPOSITION with (\DSPUNTRANSFORMY (\YMOUSECOORD ) DD)) (COND ((type? POSITION NEWPOSITION) (\CURSORPOSITION (\DSPTRANSFORMX (fetch (POSITION XCOORD) of NEWPOSITION) DD) (\DSPTRANSFORMY (fetch (POSITION YCOORD) of NEWPOSITION) DD))) ((type? SCREENPOSITION NEWPOSITION) (CURSORSCREEN (fetch (SCREENPOSITION SCREEN) of NEWPOSITION) (fetch (SCREENPOSITION XCOORD) of NEWPOSITION) (fetch (SCREENPOSITION YCOORD) of NEWPOSITION))) (NEWPOSITION (\ILLEGAL.ARG NEWPOSITION))) (RETURN OLDPOSITION]) (CURSORSCREEN [LAMBDA (SCREEN XCOORD YCOORD) (* gbn%: "25-Jan-86 16:53") (* * sets up SCREEN to be the current screen, XCOORD %, YCOORD is initial pos  of cursor on SCREEN) (COND ((NULL XCOORD) (SETQ XCOORD 0))) (COND ((NULL YCOORD) (SETQ YCOORD 0))) (PROG (DESTINATION) (SETQ DESTINATION (fetch (SCREEN SCDESTINATION) of SCREEN)) (\CURSORDOWN) (SETQ \CURSORSCREEN SCREEN) (\CURSORDESTINATION DESTINATION) (\CURSORUP \CURRENTCURSOR) (\CURSORPOSITION XCOORD YCOORD]) (CURSOREXIT [LAMBDA NIL (* gbn%: "25-Jan-86 16:52") (* * called when cursor moves off the screen edge) (DECLARE (GLOBALVARS LASTSCREEN LASTMOUSEX LASTMOUSEY)) (PROG (SCREEN XCOORD YCOORD SCREEN2 XCOORD2 YCOORD2) (SETQ SCREEN LASTSCREEN) (SETQ XCOORD LASTMOUSEX) (SETQ YCOORD LASTMOUSEY) (SETQ SCREEN2 (COND ((EQ SCREEN \MAINSCREEN) \COLORSCREEN) (T \MAINSCREEN))) (* generalize for more than two  screens (or alternate physical  arrangement of screens.)) (COND ((EQ XCOORD 0) (SETQ XCOORD2 (IDIFFERENCE (fetch (SCREEN SCWIDTH) of SCREEN2) 2))) ((EQ XCOORD (SUB1 (fetch (SCREEN SCWIDTH) of SCREEN))) (SETQ XCOORD2 1)) (T (RETURN))) [SETQ YCOORD2 (IQUOTIENT (ITIMES YCOORD (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN2)) ) (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN] (CURSORSCREEN SCREEN2 XCOORD2 YCOORD2]) (FLIPCURSOR +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "13-Feb-2021 23:24:49" {DSK}larry>ilisp>medley>sources>LLKEY.;2 206612 changes to%: (FNS \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) previous date%: "12-Feb-2021 19:16:08" {DSK}larry>ilisp>medley>sources>LLKEY.;1) (* ; " Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1992, 1999, 1920, 2000, 2018, 2021 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT LLKEYCOMS) (RPAQQ LLKEYCOMS [(COMS (* ; "Access to keyboard") (FNS BKSYSCHARCODE \CLEARSYSBUF \GETKEY \NSYSBUFCHARS \SAVESYSBUF \SYSBUFP \GETSYSBUF \PUTSYSBUF \PEEKSYSBUF) (INITVARS (\LONGSYSBUF)) (INITVARS (\\KEYBOARDWAITBOX.GLOBALRESOURCE)) (DECLARE%: DONTCOPY (RESOURCES \KEYBOARDWAITBOX)) (DECLARE%: DONTCOPY (CONSTANTS (\SYSBUFSIZE 200)) (MACROS \GETREALSYSBUF))) [DECLARE%: DOCOPY DONTEVAL@LOAD (COMS (* ;  "Here because it must be done in init before PROC loaded") (P (MOVD? 'NILL 'CARET] (COMS (* ; "Key handler") (FNS \KEYBOARDINIT \KEYBOARDEVENTFN \ALLOCLOCKED \SETIOPOINTERS \KEYBOARDOFF \KEYBOARDON \KEYHANDLER \KEYHANDLER1 \RESETKEYBOARD \DOMOUSECHORDING \DOTRANSITIONS \DECODETRANSITION MOUSECHORDWAIT \TRACKCURSOR) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) (INITVARS (\MOUSECHORDTICKS) (\MOUSECHORDMILLISECONDS 50)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\KEYBOARDINIT))) [DECLARE%: DONTCOPY (MACROS .NOTELASTUSERACTION) (CONSTANTS ALLUP \CTRLMASK \METABIT) (CONSTANTS * DLMOUSEBITS) (CONSTANTS * DLMOUSESTATES) (CONSTANTS * TRANSITIONFLAGS) (MACROS \TRANSINDEX ARMEDCODE TRANSITIONALTGRCODE TRANSITIONSHIFTCODE TRANSITIONCODE TRANSITIONFLAGS TRANSITIONDEADLIST CHECKFORDEADKEY) (EXPORT (RECORDS KEYACTION) (CONSTANTS \NKEYS)) (RECORDS RING) (COMS (* ;  "can get rid of shiftstate after clients have been fixed") (RECORDS SHIFTSTATE) (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP)) (CONSTANTS NRINGINDEXWORDS) (CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] (DECLARE%: EVAL@COMPILE (VARS \KEYNAMES)) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun.") (VARS \ORIGKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DORADOKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS \MAIKOKEYACTIONS \MAIKOKEYACTIONST4 \MAIKO-JLE-KEYACTIONS \TOSHIBA-KEYACTIONS) (VARS (KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL)) (INITVARS (\KEYBOARD.META 256) (\MODIFIED.KEYACTIONS)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) )) (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS)) (COMS (* ; "Key interpretation") (FNS KEYACTION KEYACTIONTABLE KEYBOARDTYPE RESETKEYACTION \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS \KEYACTION1 KEYDOWNP KEYNUMBERP \KEYNAMETONUMBER MODIFY.KEYACTIONS METASHIFT SHIFTDOWNP) (* ;  "To support office style 1108 & 1186 keyboards") (FNS SETUP.OFFICE.KEYBOARD) (OPTIMIZERS) (MACROS \TEMPCOPYTIMER) (* ;  "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (EXPORT (OPTIMIZERS KEYDOWNP))) (EXPORT (MACROS XKEYDOWNP KEYDOWNP1 \NEWKEYDOWNP))) (COMS (* ; "A raw keyboard device/stream") (FNS \INIT.KEYBOARD.STREAM) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\INIT.KEYBOARD.STREAM))) (EXPORT (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM))) (COMS (* ; "Hook for a periodic interrupt") (FNS \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \PERIODIC.INTERRUPTFRAME) (INITVARS (\KEYBUFFERING) (\PERIODIC.INTERRUPT) (\TIMER.INTERRUPT.PENDING) (\PERIODIC.INTERRUPT.FREQUENCY 77))) (LOCALVARS . T) [COMS (* ;  "cursor and mouse related functions.") (FNS \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN) (FNS CURSOR.INIT \CURSORDESTINATION \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN CURSORPROP GETCURSORPROP PUTCURSORPROP \CURSORBITSPERPIXEL \CURSORIMAGEPROPNAME \CURSORMASKPROPNAME) (FNS CURSORCREATE CURSOR \CURSOR-VALID-P \CURSORUP \CURSORPOSITION \CURSORDOWN ADJUSTCURSORPOSITION CURSORPOSITION CURSORSCREEN CURSOREXIT FLIPCURSOR FLIPCURSORBAR LASTMOUSEX LASTMOUSEY CREATEPOSITION POSITIONP CURSORHOTSPOT) (PROPS (CURSORPROP ARGNAMES)) (INITVARS (\CURSORHOTSPOTX 0) (\CURSORHOTSPOTY 0) (\CURRENTCURSOR NIL) (\SOFTCURSORWIDTH NIL) (\SOFTCURSORHEIGHT NIL) (\SOFTCURSORP NIL) (\SOFTCURSORUPP NIL) (\SOFTCURSORUPBM NIL) (\SOFTCURSORDOWNBM NIL) (\SOFTCURSORBBT1 NIL) (\SOFTCURSORBBT2 NIL) (\SOFTCURSORBBT3 NIL) (\SOFTCURSORBBT4 NIL) (\SOFTCURSORBBT5 NIL) (\SOFTCURSORBBT6 NIL) (\CURSORSCREEN NIL) (\CURSORDESTINATION NIL) (\CURSORDESTHEIGHT 808) (\CURSORDESTWIDTH 1024) (\CURSORDESTRASTERWIDTH 64) (\CURSORDESTLINE 0) (\CURSORDESTLINEBASE NIL)) (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) (FNS GETMOUSESTATE \EVENTKEYS) [EXPORT (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) (DECLARE%: EVAL@COMPILE (ADDVARS (GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD] (DECLARE%: DONTCOPY (EXPORT (MACROS \SETMOUSEXY)) (MACROS \XMOUSECOORD \YMOUSECOORD)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION)) (VARS (\SFPosition (CREATEPOSITION] [COMS (DECLARE%: DONTCOPY (RECORDS KEYBOARDEVENT) (CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] (COMS (FNS MACHINETYPE SETMAINTPANEL) (* ; "DLion beeper") (FNS BEEPON BEEPOFF)) (EXPORT (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)) (FNS WITHOUT-INTERRUPTS) (COMS (* ;  "Compile locked fns together for locality") (BLOCKS (NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN))) [DECLARE%: DONTCOPY (ADDVARS [INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND ] (RDCOMS (FNS \SETIOPOINTERS] (PROP FILETYPE LLKEY) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML WITHOUT-INTERRUPTS ) (LAMA CURSORPROP METASHIFT MOUSECHORDWAIT]) (* ; "Access to keyboard") (DEFINEQ (BKSYSCHARCODE [LAMBDA (CHAR) (* rrb "30-Dec-83 11:56") (OR (\PUTSYSBUF CHAR) (PROGN (SETQ \LONGSYSBUF (NCONC \LONGSYSBUF (bind C while (SETQ C (\GETREALSYSBUF)) collect C))) (\PUTSYSBUF CHAR]) (\CLEARSYSBUF [LAMBDA (ALLFLG) (* mpl "27-Jun-85 20:04") (DECLARE (GLOBALVARS \PROCESSES)) (COND ((OR ALLFLG (TTY.PROCESSP)) (SETQ \LONGSYSBUF) (replace (RING READ) of \SYSBUFFER with 0))) (COND (ALLFLG (for PROC in \PROCESSES do (replace PROCTYPEAHEAD of PROC with NIL))) ((THIS.PROCESS) (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL]) (\GETKEY [LAMBDA NIL (* lmm "18-Apr-85 00:07") (DECLARE (GLOBALVARS \KEYBOARDWAIT1 \KEYBOARDWAIT2)) (COND [(AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS))) (pop (fetch PROCTYPEAHEAD of (THIS.PROCESS] (T (WAIT.FOR.TTY) (OR (\GETSYSBUF) (GLOBALRESOURCE (\KEYBOARDWAITBOX) (* Busy-wait loop that gets next  character) (\CLOCK0 \KEYBOARDWAITBOX) (bind C do (COND ((SETQ C (\GETSYSBUF)) (\BOXIPLUS (LOCF (fetch KEYBOARDWAITTIME of \MISCSTATS)) (CLOCKDIFFERENCE \KEYBOARDWAITBOX)) (RETURN C))) (\TTYBACKGROUND) (\WAIT.FOR.TTY]) (\NSYSBUFCHARS [LAMBDA NIL (* JonL " 7-May-84 01:50") (* Tells how many characters can be  \GETSYSBUFed. Used by \SAVESYSBUF.) (IPLUS (LENGTH \LONGSYSBUF) (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ 0 R) 0) ((IGREATERP W R) (IDIFFERENCE W R)) (T (IDIFFERENCE W (IDIFFERENCE R \SYSBUFSIZE]) (\SAVESYSBUF [LAMBDA NIL (* JonL " 7-May-84 01:50") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (PROG (TA (BUF \SAVEDSYSBUFFER) (NC (\NSYSBUFCHARS)) (J 0)) [COND ((TTY.PROCESSP) [COND ([AND (THIS.PROCESS) (SETQ TA (fetch PROCTYPEAHEAD of (THIS.PROCESS] (replace PROCTYPEAHEAD of (THIS.PROCESS) with NIL) (add NC (LENGTH TA)) [COND ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for CH in TA do (RPLCHARCODE BUF (add J 1) CH))) ((IGREATERP NC (NCHARS BUF)) (SETQ BUF (ALLOCSTRING NC] (for I from (ADD1 J) to NC do (* Test on J means that we'll ignore extra chars typed since we got the length.  Test on \GETSYSBUF so we don't get screwed if buffer gets cleared while during  this loop) (RPLCHARCODE BUF I (OR (\GETSYSBUF) (PROGN (SETQ NC (SUB1 I)) (RETURN] (RETURN (AND (NOT (EQ 0 NC)) (SUBSTRING BUF 1 NC]) (\SYSBUFP [LAMBDA NIL (* JonL " 7-May-84 01:52") (OR [AND (TTY.PROCESSP) (OR \LONGSYSBUF (NOT (EQ 0 (fetch (RING READ) of \SYSBUFFER] (AND (THIS.PROCESS) (fetch PROCTYPEAHEAD of (THIS.PROCESS]) (\GETSYSBUF [LAMBDA NIL (* lmm " 9-JUL-83 00:56") (OR (AND \LONGSYSBUF (pop \LONGSYSBUF)) (\GETREALSYSBUF]) (\PUTSYSBUF [LAMBDA (CHAR) (* rmk%: "27-Nov-84 17:51") (PROG ((R (fetch (RING READ) of \SYSBUFFER)) (W (fetch (RING WRITE) of \SYSBUFFER))) (RETURN (COND ((EQ R W) (* Full) NIL) (T (\PUTBASEFAT \SYSBUFFER W CHAR) (AND (EQ 0 R) (replace (RING READ) of \SYSBUFFER with W)) (* Return random non-NIL value to  indicate success for BKSYSBUF) [replace (RING WRITE) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST W) \SYSBUFFER.FIRST) (T (ADD1 W] T]) (\PEEKSYSBUF [LAMBDA (STREAM) (* bvm%: " 8-Feb-85 17:50") (PROG (R) WAIT (until (\SYSBUFP) do (BLOCK)) (RETURN (if (TTY.PROCESSP) then (if \LONGSYSBUF then (CAR \LONGSYSBUF) elseif (NEQ (SETQ R (fetch (RING READ) of \SYSBUFFER)) 0) then (* Here's the vanilla case) (\GETBASEFAT \SYSBUFFER R) else (* Foo an interrupt could have  sneaked in here and gobbled down the  remaining characters) (GO WAIT)) elseif (THIS.PROCESS) then (CAR (fetch PROCTYPEAHEAD of (THIS.PROCESS))) else (SHOULDNT]) ) (RPAQ? \LONGSYSBUF ) (RPAQ? \\KEYBOARDWAITBOX.GLOBALRESOURCE ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE [PUTDEF '\KEYBOARDWAITBOX 'RESOURCES '(NEW (CREATECELL \FIXP] ) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (RPAQQ \SYSBUFSIZE 200) (CONSTANTS (\SYSBUFSIZE 200)) ) (DECLARE%: EVAL@COMPILE [PUTPROPS \GETREALSYSBUF MACRO (NIL (PROG ((R (fetch (RING READ) of \SYSBUFFER))) (RETURN (AND (NOT (EQ 0 R)) (PROG1 (\GETBASEFAT \SYSBUFFER R) (AND [EQ (fetch (RING WRITE) of \SYSBUFFER) (replace (RING READ) of \SYSBUFFER with (COND ((EQ \SYSBUFFER.LAST R) \SYSBUFFER.FIRST) (T (ADD1 R] (replace (RING READ) of \SYSBUFFER with 0)))] ) ) (DECLARE%: DOCOPY DONTEVAL@LOAD (* ; "Here because it must be done in init before PROC loaded") (MOVD? 'NILL 'CARET) ) (* ; "Key handler") (DEFINEQ (\KEYBOARDINIT [LAMBDA NIL (* ; "Edited 19-Nov-87 16:46 by Snow") (DECLARE (GLOBALVARS \SAVEDSYSBUFFER)) (* ;  "Sets up keyboard decoding tables.") (SETQ \CURRENTKEYACTION (SETQ \DEFAULTKEYACTION (KEYACTIONTABLE))) (* ;  "added \commandkeyaction 11-19-87 WAS") (SETQ \COMMANDKEYACTION (KEYACTIONTABLE)) (SETQ \INTERRUPTSTATE (\ALLOCLOCKED 2)) (PROGN (SETQ \SYSBUFFER (\ALLOCBLOCK (FOLDHI (ADD1 \SYSBUFFER.LAST) WORDSPERCELL))) (replace (RING READ) of \SYSBUFFER with 0) (replace (RING WRITE) of \SYSBUFFER with \SYSBUFFER.FIRST)) (SETQ \SAVEDSYSBUFFER (ALLOCSTRING \SYSBUFSIZE NIL NIL T)) (SETQ \LASTUSERACTION (LOCF (fetch LASTUSERACTION of \MISCSTATS))) (PROGN (SETQ \KEYBOARDEVENTQUEUE (\ALLOCLOCKED (FOLDHI (PLUS \KEYBOARDEVENT.LAST \KEYBOARDEVENT.SIZE) WORDSPERCELL))) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with \KEYBOARDEVENT.FIRST)) (SETQ \LASTKEYSTATE (create KEYBOARDEVENT)) (SETQ \SHIFTSTATE (create SHIFTSTATE)) (SETQ \MOUSETIMERTEMP (SETUPTIMER 0 NIL 'TICKS)) (MOUSECHORDWAIT \MOUSECHORDMILLISECONDS) (\KEYBOARDON]) (\KEYBOARDEVENTFN [LAMBDA (FDEV EVENT EXTRA) (* ; "Edited 11-Oct-90 09:49 by jds") (DECLARE (GLOBALVARS \KEYBOARD.BEFORETYPE \DORADOKEYACTIONS \DLIONKEYACTIONS \MAIKO.BEFOREKEYTYPE)) (SELECTQ EVENT ((BEFORELOGOUT BEFOREMAKESYS BEFORESYSOUT BEFORESAVEVM) (SETQ \KEYBOARD.BEFORETYPE \MACHINETYPE) (SETQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (FETCH (IFPAGE DEVCONFIG) OF \InterfacePage ))) (SETQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) ((AFTERLOGOUT AFTERMAKESYS AFTERSYSOUT AFTERSAVEVM) (* ;  "Restarting a world. If we changed machines, fix up the key actions to match the new machine.") (* ; "(COND ((NEQ \\MACHINETYPE \\KEYBOARD.BEFORETYPE) ; Changed machines. Change Keyactions. (|for| X |in| (\\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) |do| (KEYACTION (CAR X) (CDR X) \\COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \\DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT))))") [COND ((OR (NEQ \MACHINETYPE \KEYBOARD.BEFORETYPE) (NEQ \MAIKO.XBEFORE? (SELECTQ (MACHINETYPE) (MAIKO (EQUAL "X" (UNIX-GETPARM "DISPLAY"))) NIL))) (* ;  "Changed machines. Change Keyactions.") [COND ((NEQ (MACHINETYPE) 'MAIKO) (* ;; "Non-SUN, so just change machine-specific key actions:") (for X in (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION))) (T (* ;;  "On a SUN: Some keyactions contradict %"normal%" ones, so reset them all.") (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION] (MOUSECHORDWAIT (MOUSECHORDWAIT))) ((EQ (MACHINETYPE) 'MAIKO) (* ;; "Same machine type. SO only worry if we're on SUNs, where the keyboard type can differ between machines.") (COND ((NEQ \MAIKO.BEFOREKEYTYPE (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage ))) (for X in (APPEND \ORIGKEYACTIONS (  \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS )) do (KEYACTION (CAR X) (CDR X) \COMMANDKEYACTION) (KEYACTION (CAR X) (CDR X) \DEFAULTKEYACTION)) (MOUSECHORDWAIT (MOUSECHORDWAIT]) NIL]) (\ALLOCLOCKED [LAMBDA (NCELLS) (* lmm "20-Apr-85 13:08") (* allocate a block of NCELLS cells  and lock it) (PROG [(BLOCK (\ALLOCBLOCK NCELLS NIL (IMIN NCELLS CELLSPERPAGE] (\LOCKCELL BLOCK (FOLDHI (IPLUS (fetch (POINTER WORDINPAGE) of BLOCK) (UNFOLD NCELLS WORDSPERCELL)) WORDSPERPAGE)) (RETURN BLOCK]) (\SETIOPOINTERS [LAMBDA NIL (* ;  "Edited 28-Apr-88 01:10 by MASINTER") (SELECTC (SETTOPVAL '\MACHINETYPE (fetch MachineType of \InterfacePage)) ((LIST \DOLPHIN \DORADO) (SETTOPVAL '\EM.MOUSEX (EMADDRESS MOUSEX.EM)) (SETTOPVAL '\EM.MOUSEY (EMADDRESS MOUSEY.EM)) (SETTOPVAL '\EM.CURSORX (EMADDRESS CURSORX.EM)) (SETTOPVAL '\EM.CURSORY (EMADDRESS CURSORY.EM)) (SETTOPVAL '\EM.REALUTILIN (EMADDRESS UTILIN.EM)) (SETTOPVAL '\EM.KBDAD0 (EMADDRESS KBDAD0.EM)) (SETTOPVAL '\EM.KBDAD1 (EMADDRESS KBDAD1.EM)) (SETTOPVAL '\EM.KBDAD2 (EMADDRESS KBDAD2.EM)) (SETTOPVAL '\EM.KBDAD3 (EMADDRESS KBDAD3.EM)) (SETTOPVAL '\EM.KBDAD4 (LOCF (fetch FAKEKBDAD4 of \InterfacePage))) (\PUTBASE \EM.KBDAD4 0 ALLUP) (SETTOPVAL '\EM.KBDAD5 (LOCF (fetch FAKEKBDAD5 OF \InterfacePage))) (\PUTBASE \EM.KBDAD5 0 ALLUP) (SETTOPVAL '\EM.DISPINTERRUPT (EMADDRESS DISPINTERRUPT.EM)) (SETTOPVAL '\EM.CURSORBITMAP (EMADDRESS CURSORBITMAP.EM)) (SETTOPVAL '\EM.DISPLAYHEAD (EMADDRESS DCB.EM)) (SETTOPVAL 'SCREENWIDTH (UNFOLD (fetch ScreenWidth of \InterfacePage) BITSPERWORD))) ((LIST \DANDELION \MAIKO) (SETTOPVAL '\EM.MOUSEX (fetch DLMOUSEXPTR of \IOPAGE)) (SETTOPVAL '\EM.MOUSEY (fetch DLMOUSEYPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN (fetch DLUTILINPTR of \IOPAGE)) (* ;; "Where the hardware bits live, vs. where the Lisp software sees them after reinterpretation by keyhandler") ) (SETTOPVAL '\EM.KBDAD0 (fetch DLKBDAD0PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD1 (fetch DLKBDAD1PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD2 (fetch DLKBDAD2PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD3 (fetch DLKBDAD3PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD4 (fetch DLKBDAD4PTR of \IOPAGE)) (SETTOPVAL '\EM.KBDAD5 (fetch DLKBDAD5PTR of \IOPAGE)) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORBITMAP (fetch DLCURSORBITMAPPTR of \IOPAGE)) (SETTOPVAL '\EM.DISPLAYHEAD NIL) (SETTOPVAL 'SCREENWIDTH (SELECTC \MACHINETYPE (\MAIKO (SUBRCALL DSP-SCREENWIDTH)) 1024))) (\DAYBREAK (PROG ((KBDBASE (\DoveMisc.GetKBDBase))) (SETTOPVAL '\EM.KBDAD0 (\ADDBASE KBDBASE 1)) (SETTOPVAL '\EM.KBDAD1 (\ADDBASE KBDBASE 2)) (SETTOPVAL '\EM.KBDAD2 (\ADDBASE KBDBASE 3)) (SETTOPVAL '\EM.KBDAD3 (\ADDBASE KBDBASE 4)) (SETTOPVAL '\EM.KBDAD4 (\ADDBASE KBDBASE 5)) (SETTOPVAL '\EM.KBDAD5 (\ADDBASE KBDBASE 6)) (SETTOPVAL '\EM.MOUSEX (\DoveMisc.GetMouseXBase)) (SETTOPVAL '\EM.MOUSEY (\DoveMisc.GetMouseYBase)) (SETTOPVAL '\EM.CURSORBITMAP (\DoveDisplay.GetCursorBitmapBase)) (* These three set this way to  prevent address faults) (SETTOPVAL '\EM.DISPINTERRUPT (fetch DLDISPINTERRUPTPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORX (fetch DLCURSORXPTR of \IOPAGE)) (SETTOPVAL '\EM.CURSORY (fetch DLCURSORYPTR of \IOPAGE)) (PROGN (SETTOPVAL '\EM.REALUTILIN KBDBASE) (* Where the hardware bits live, vs. where the Lisp software sees them after  reinterpretation by keyhandler) ) (SETTOPVAL 'SCREENWIDTH (\DoveDisplay.ScreenWidth)))) (RAID)) (SETTOPVAL '\EM.UTILIN (LOCF (fetch (IFPAGE FAKEMOUSEBITS) of \InterfacePage]) (\KEYBOARDOFF [LAMBDA NIL (* ;  "Edited 20-Apr-88 10:28 by MASINTER") (\PUTBASE \EM.DISPINTERRUPT 0 (LOGAND (LOGXOR 65535 \LispKeyMask) (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE NIL]) (\KEYBOARDON [LAMBDA (NOCHECK) (* ;  "Edited 24-Apr-88 00:03 by MASINTER") (\SETIOPOINTERS) (\PUTBASE \EM.DISPINTERRUPT 0 (LOGOR \LispKeyMask (\GETBASE \EM.DISPINTERRUPT 0))) (COND ((EQ \MACHINETYPE \MAIKO) (SUBRCALL KEYBOARDSTATE T]) (\KEYHANDLER [LAMBDA NIL (* lmm "30-MAR-83 20:40") (\KEYHANDLER1]) (\KEYHANDLER1 [LAMBDA NIL (* ; "Edited 30-Mar-88 10:40 by Snow") (PROG ((OLD0 ALLUP) (OLD1 ALLUP) (OLD2 ALLUP) (OLD3 ALLUP) (OLD4 ALLUP) (OLD5 ALLUP) (OLDU ALLUP) (OLDFAKEU ALLUP) (LOOPCNT 10) (PERIODCNT 60) (MOUSESTATE \DLMOUSE.UP) (MOUSETIMER (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) (MOUSETEMP (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) CURSORX CURSORY YHOT) (SETQ \KEYBUFFERING NIL) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) LP (\CONTEXTSWITCH \KbdFXP) [COND (\PERIODIC.INTERRUPT (* eventually can be replaced with  general timer mechanism) (COND ((IGREATERP PERIODCNT 0) (* Continue counting down to zero) (SETQ PERIODCNT (SUB1 PERIODCNT))) ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \PERIODIC.INTERRUPTFRAME)) (* When we've counted down, then keep trying to cause the interrupt, and reset  the counter when it finally happens) (SETQ PERIODCNT (SUB1 (OR \PERIODIC.INTERRUPT.FREQUENCY 1] [COND ((OR (NEQ (\GETBASE \EM.MOUSEX 0) CURSORX) (NEQ (\GETBASE \EM.MOUSEY 0) CURSORY)) (\TRACKCURSOR (SETQ CURSORX (\GETBASE \EM.MOUSEX 0)) (SETQ CURSORY (\GETBASE \EM.MOUSEY 0] [COND ((OR [COND ((OR (NEQ OLDU (\GETBASE \EM.REALUTILIN 0)) (COND ((AND (EQ MOUSESTATE \DLMOUSE.WAITING) (IGREATERP (\BOXIDIFFERENCE (\RCLK MOUSETEMP) MOUSETIMER) 0)) (* Timer expired on seeing both left  and right down, so set state to  normal) (SETQ MOUSESTATE \DLMOUSE.NORMAL) T))) (SETQ MOUSESTATE (\DOMOUSECHORDING (SETQ OLDU (\GETBASE \EM.REALUTILIN 0)) MOUSESTATE)) (NEQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (NEQ OLD0 (\GETBASE \EM.KBDAD0 0)) (NEQ OLD1 (\GETBASE \EM.KBDAD1 0)) (NEQ OLD2 (\GETBASE \EM.KBDAD2 0)) (NEQ OLD3 (\GETBASE \EM.KBDAD3 0)) (NEQ OLD4 (\GETBASE \EM.KBDAD4 0)) (NEQ OLD5 (\GETBASE \EM.KBDAD5 0))) (COND ((EQ 0 (LOGAND (\GETBASE \EM.KBDAD2 0) 2114)) (* Ctrl-shift-DEL panic interrupt --  switch to TeleRaid immediately) (swap (fetch (IFPAGE TELERAIDFXP) of \InterfacePage) (fetch (IFPAGE KbdFXP) of \InterfacePage)) (\KEYBOARDOFF) (SETQ OLD2 (\GETBASE \EM.KBDAD2 0)) (GO LP))) [PROG ((W (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE)) (R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) WPTR) (COND ((EQ R W) (* eventqueue full!) (RETURN))) (SETQ WPTR (\ADDBASE \KEYBOARDEVENTQUEUE W)) (\RCLK (LOCF (fetch TIME of WPTR))) [with KEYBOARDEVENT WPTR (PROGN (SETQ W0 (SETQ OLD0 (\GETBASE \EM.KBDAD0 0))) (SETQ W1 (SETQ OLD1 (\GETBASE \EM.KBDAD1 0))) (SETQ W2 (SETQ OLD2 (\GETBASE \EM.KBDAD2 0))) (SETQ W3 (SETQ OLD3 (\GETBASE \EM.KBDAD3 0))) (SETQ W4 (SETQ OLD4 (\GETBASE \EM.KBDAD4 0))) (SETQ W5 (SETQ OLD5 (\GETBASE \EM.KBDAD5 0))) (SETQ WU (SETQ OLDFAKEU (\GETBASE \EM.UTILIN 0] (COND ((EQ R 0) (* Queue was empty) (replace (RING READ) of \KEYBOARDEVENTQUEUE with W))) (replace (RING WRITE) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ W \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS W \KEYBOARDEVENT.SIZE] (OR \KEYBUFFERING (SETQ \KEYBUFFERING T] [COND [\KEYBUFFERING (COND ((EQ \KEYBUFFERING T) (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \DOBUFFEREDTRANSITIONS)) (SETQ \KEYBUFFERING 'STARTED) (* don't call until  \DOBUFFEREDTRANSITIONS is done) ] (T (COND (\PENDINGINTERRUPT (COND ((\CAUSEINTERRUPT \KbdFXP (FUNCTION \INTERRUPTFRAME)) (SETQ \PENDINGINTERRUPT] [COND ((AND (NEQ \MACHINETYPE \MAIKO) (ILEQ (SETQ LOOPCNT (SUB1 LOOPCNT)) 0)) (* Only do this once in a while) (SETQ LOOPCNT (COND ((\UPDATETIMERS) (* Timer was updated, so do it next time around, too, in case we just came back  from RAID or other bcpl code) 1) (T 20] (COND ([AND NIL \TIMER.INTERRUPT.PENDING (IGREATERP (\BOXIDIFFERENCE (\RCLK (LOCF (fetch DLMOUSETEMP of \MISCSTATS))) (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) 0) (COND ((EQ \TIMER.INTERRUPT.PENDING '\MOUSECHANGE) (SETQ OLDU NIL) T) (T (\CAUSEINTERRUPT \KbdFXP (FUNCTION \TIMER.INTERRUPTFRAME] (SETQ \TIMER.INTERRUPT.PENDING))) (GO LP]) (\RESETKEYBOARD [LAMBDA NIL (* ; "Edited 30-Mar-88 10:07 by Snow") (\SETIOPOINTERS) (* Called with lisp keyboard  disabled whenever Lisp is resumed  from bcpl logout or copysys.) (SETQ \KEYBUFFERING NIL) (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK) (EQ \MACHINETYPE \MAIKO)) (* Initialize fake mouse bits to all  up) (\PUTBASE \EM.UTILIN 0 ALLUP))) (with KEYBOARDEVENT \LASTKEYSTATE (SETQ W0 (\GETBASE \EM.KBDAD0 0)) (SETQ W1 (\GETBASE \EM.KBDAD1 0)) (SETQ W2 (\GETBASE \EM.KBDAD2 0)) (SETQ W3 (\GETBASE \EM.KBDAD3 0)) (SETQ W4 (\GETBASE \EM.KBDAD4 0)) (SETQ W5 (\GETBASE \EM.KBDAD5 0)) (SETQ WU (\GETBASE \EM.REALUTILIN 0)) (SETQ LOCK (XKEYDOWNP 'LOCK)) (SETQ 1SHIFT NIL) (SETQ 2SHIFT NIL) (SETQ CTRL NIL) (SETQ META NIL) (SETQ FONT NIL) (SETQ USERMODE1 NIL) (SETQ USERMODE2 NIL) (SETQ USERMODE3 NIL) (SETQ MOUSESTATE \DLMOUSE.UP)) (SETQ \TIMER.INTERRUPT.PENDING) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0) (replace (RING READ) of \SYSBUFFER with 0) (SETQ \LONGSYSBUF) (\DAYTIME0 \LASTUSERACTION) (\KEYBOARDON]) (\DOMOUSECHORDING [LAMBDA (REALUTILIN STATE) (* bvm%: " 9-Oct-85 11:24") (* Handles mouse transitions on a DLion.  REALUTILIN is the actual util word from the processor.  STATE is our internal state. Sets contents of \EM.UTILIN to reflect the virtual  mouse state, which may contain a middle mouse button even where there is only a  two-button mouse. Returns new state) (PROG (LRSTATE) [COND ((OR (NULL \MOUSECHORDTICKS) (EQ (SETQ LRSTATE (LOGXOR (LOGAND REALUTILIN \MOUSE.ALLBITS) \MOUSE.ALLBITS)) 0)) (* Not interpreting chording, or both LEFT and RIGHT are up --  real state and virtual state the same) (SETQ STATE \DLMOUSE.UP)) (T (* Either L or R or both are down,  so have to decide about Middle) (SELECTC STATE ((LIST \DLMOUSE.UP \DLMOUSE.WAITING) (SETQ REALUTILIN (LOGOR REALUTILIN \MOUSE.LRBIT)) (* Turn off the L and/or R bits) (COND ((EQ LRSTATE \MOUSE.LRBIT) (* Both L and R down at once,  interpret as MIDDLE without waiting) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) REALUTILIN)) (SETQ STATE \DLMOUSE.MIDDLE)) ((NEQ STATE \DLMOUSE.WAITING) (* Only one of L and R down. Set timer, and ignore the down bit for now) (\BOXIPLUS (\RCLK (LOCF (fetch DLMOUSETIMER of \MISCSTATS))) \MOUSECHORDTICKS) (SETQ STATE \DLMOUSE.WAITING)))) (\DLMOUSE.MIDDLE (* State is middle and at least one of L and R is still down, so consider it to  be still only middle) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LRBIT))) (SELECTC LRSTATE (\MOUSE.LEFTBIT (* Right came up. Henceforth treat  right transparently) (SETQ STATE \DLMOUSE.MIDDLE&RIGHT)) (\MOUSE.RIGHTBIT (* Left came up. Henceforth treat  left transparently) (SETQ STATE \DLMOUSE.MIDDLE&LEFT)) NIL)) (\DLMOUSE.MIDDLE&RIGHT (* Only ignore LEFT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.LEFTBIT)))) (\DLMOUSE.MIDDLE&LEFT (* Only ignore RIGHT) (SETQ REALUTILIN (LOGAND (LOGXOR ALLUP \MOUSE.MIDDLEBIT) (LOGOR REALUTILIN \MOUSE.RIGHTBIT)))) (PROGN (* Remaining state is \DLMOUSE.NORMAL which means treat mouse normally, and the  only interesting transition is back to \DLMOUSE.UP) ] (\PUTBASE \EM.UTILIN 0 REALUTILIN) (RETURN STATE]) (\DOTRANSITIONS [LAMBDA (KEYBASE OLD NEW) (* ; "Edited 1-Feb-92 11:59 by jds") (* ;; "OLD and NEW are keyboard state words that are known to have changed. KEYBASE is the number in hardware order of the key corresponding to the first bit in these words. This function figures out the indices of transitioning keys and calls the decoder.") (for I (BITMASK _ (LLSH 1 15)) from 0 to 15 do [OR (EQ 0 (LOGAND BITMASK (LOGXOR OLD NEW))) (\DECODETRANSITION (IPLUS I KEYBASE) (EQ 0 (LOGAND NEW BITMASK] (SETQ BITMASK (LRSH BITMASK 1))) T]) (\DECODETRANSITION [LAMBDA (KEYNUMBER DOWNFLG) (* ; "Edited 19-Nov-87 16:29 by Snow") (* ;; "KEYNUMBER is the key number in the hardware keyboard layout, DOWNFLG is T if the key just went down. PENDINGINTERRUPT, bound in \KEYHANDLER, is set to the decoded character if it is an interrupt.") (.NOTELASTUSERACTION) (PROG ((TI (\TRANSINDEX KEYNUMBER DOWNFLG)) (KEYSTATE \LASTKEYSTATE) ASCIICODE SHIFTED) (SELECTC (TRANSITIONFLAGS \CURRENTKEYACTION TI) (IGNORE.TF (RETURN)) (LOCKSHIFT.TF (* ;  "Take shift action if either Shift or Caps Lock is down") (IF (fetch (KEYBOARDEVENT SHIFTORLOCK) of KEYSTATE) THEN (SETQ SHIFTED T))) (NOLOCKSHIFT.TF (* ;  "Take shift action only when Shift is down") (IF (fetch (KEYBOARDEVENT SHIFT) of KEYSTATE) THEN (SETQ SHIFTED T))) (EVENT.TF (RETURN)) (1SHIFTUP.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with NIL) (RETURN)) (1SHIFTDOWN.TF (replace (KEYBOARDEVENT 1SHIFT) of KEYSTATE with T) (RETURN)) (2SHIFTUP.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with NIL) (RETURN)) (2SHIFTDOWN.TF (replace (KEYBOARDEVENT 2SHIFT) of KEYSTATE with T) (RETURN)) (LOCKUP.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with NIL) (RETURN)) (LOCKDOWN.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with T) (RETURN)) (LOCKTOGGLE.TF (replace (KEYBOARDEVENT LOCK) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT LOCK) of KEYSTATE))) (RETURN)) (CTRLUP.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with NIL) (RETURN)) (CTRLDOWN.TF (replace (KEYBOARDEVENT CTRL) of KEYSTATE with T) (RETURN)) (METAUP.TF (replace (KEYBOARDEVENT META) of KEYSTATE with NIL) (RETURN)) (METADOWN.TF (replace (KEYBOARDEVENT META) of KEYSTATE with T) (RETURN)) (FONTUP.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with NIL) (RETURN)) (FONTDOWN.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with T) (RETURN)) (FONTTOGGLE.TF (replace (KEYBOARDEVENT FONT) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT FONT) of KEYSTATE))) (RETURN)) (USERMODE1UP.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with NIL) (RETURN)) (USERMODE1DOWN.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with T) (RETURN)) (USERMODE1TOGGLE.TF (replace (KEYBOARDEVENT USERMODE1) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE1) of KEYSTATE))) (RETURN)) (USERMODE2UP.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with NIL) (RETURN)) (USERMODE2DOWN.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with T) (RETURN)) (USERMODE2TOGGLE.TF (replace (KEYBOARDEVENT USERMODE2) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE2) of KEYSTATE))) (RETURN)) (USERMODE3UP.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with NIL) (RETURN)) (USERMODE3DOWN.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with T) (RETURN)) (USERMODE3TOGGLE.TF (replace (KEYBOARDEVENT USERMODE3) of KEYSTATE with (NOT (fetch (KEYBOARDEVENT USERMODE3) of KEYSTATE))) (RETURN)) (SHOULDNT)) (* ;;  "Only the LOCKSHIFT and NOLOCKSHIFT cases make it to here, having set SHIFTED if appropriate.") [SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \CURRENTKEYACTION TI)) (T (TRANSITIONCODE \CURRENTKEYACTION TI] [COND ((OR (fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) [IF (IGREATERP ASCIICODE 127) THEN (* ;; "Non-ascii interpretation--what is cntrl/meta supposed to mean? Try using the original interpretation. This way we can type ^E or Meta-D even if Russian keyboard is set, but doesn't mess up simple ascii remappings, such as bs->del.") (SETQ ASCIICODE (COND (SHIFTED (TRANSITIONSHIFTCODE \COMMANDKEYACTION TI)) (T (TRANSITIONCODE \COMMANDKEYACTION TI] [COND ((fetch (KEYBOARDEVENT CTRL) of KEYSTATE) (SETQ ASCIICODE (LOGAND ASCIICODE \CTRLMASK] (COND ((AND (OR (fetch (KEYBOARDEVENT META) of KEYSTATE) (fetch (KEYBOARDEVENT FONT) of KEYSTATE)) (ILESSP ASCIICODE \KEYBOARD.META)) (SETQ ASCIICODE (LOGOR ASCIICODE \KEYBOARD.META] (COND ((ASSOC ASCIICODE (fetch INTERRUPTLIST of \CURRENTKEYACTION)) (SETQ PENDINGINTERRUPT T) (replace WAITINGINTERRUPT of \INTERRUPTSTATE with T) (replace INTCHARCODE of \INTERRUPTSTATE with ASCIICODE)) (T (\PUTSYSBUF ASCIICODE]) (MOUSECHORDWAIT [LAMBDA MSECS (* MPL "21-Jun-85 16:31") (DECLARE (GLOBALVARS \RCLKMILLISECOND)) (PROG1 (AND \MOUSECHORDTICKS \MOUSECHORDMILLISECONDS) [COND ((IGREATERP MSECS 0) (SETQ \MOUSECHORDTICKS (AND (ARG MSECS 1) (IMIN MAX.SMALLP (ITIMES (SETQ \MOUSECHORDMILLISECONDS (OR (SMALLP (ARG MSECS 1)) 50)) \RCLKMILLISECOND])]) (\TRACKCURSOR [LAMBDA (CURSORX CURSORY) (* ; "Edited 30-Mar-88 11:11 by Snow") (DECLARE (GLOBALVARS \CURSORDESTHEIGHT \CURSORDESTWIDTH)) (.NOTELASTUSERACTION) [COND ((OR [COND ((IGEQ CURSORX (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX)) (* Large cursor values are either out of bounds to the right or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORX 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORX 65535)) \CURSORHOTSPOTX) 0) (* Cursor pos + hotspot is still off to the left  (the IPLUS is an optimization of (\XMOUSECOORD))%, so clip to effective zero) (SETQ CURSORX (COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTX) BITSPERWORD] (T (SETQ CURSORX (SUB1 (IDIFFERENCE \CURSORDESTWIDTH \CURSORHOTSPOTX] (IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT HARDCURSORHEIGHT))) (* repeat test so that both X and Y will get clipped each cycle.  This keeps the cursor from moving off the screen.) [COND ((IGEQ CURSORY (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY)) (* Large cursor values are either out of bounds to the bottom or are negative  values (16-bit bcpl signed numbers)) (COND [(IGREATERP CURSORY 32767) (* Cursor value is negative) (COND ((ILESSP (IPLUS (SUB1 (IDIFFERENCE CURSORY 65535)) \CURSORHOTSPOTY) 0) (* Cursor pos + hotspot is still off to the top, so clip to effective zero) (SETQ CURSORY (COND ((OR (EQ \MACHINETYPE \DANDELION) (EQ \MACHINETYPE \DAYBREAK)) (* Temporary workaround) 0) (T (UNSIGNED (IMINUS \CURSORHOTSPOTY) BITSPERWORD] (T (SETQ CURSORY (SUB1 (IDIFFERENCE \CURSORDESTHEIGHT \CURSORHOTSPOTY] (* If need to clip mouse, do so here. \SETMOUSEXY MACRO takes dlion  complexities into account.) (COND ((NEQ \MACHINETYPE \MAIKO) (\SETMOUSEXY CURSORX CURSORY] (COND (\SOFTCURSORUPP (\SOFTCURSORPOSITION CURSORX CURSORY))) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Have to kick DAYBREAK IOP to  track the cursor. *) (\DoveDisplay.SetCursorPosition CURSORX CURSORY))) (\PUTBASE \EM.CURSORX 0 CURSORX) (\PUTBASE \EM.CURSORY 0 CURSORY]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \SUN.TYPE3KEYBOARD 0) (RPAQQ \SUN.TYPE4KEYBOARD 1) (RPAQQ \SUN.JLEKEYBOARD 2) (RPAQQ \TOSHIBA.JIS 7) (CONSTANTS (\SUN.TYPE3KEYBOARD 0) (\SUN.TYPE4KEYBOARD 1) (\SUN.JLEKEYBOARD 2) (\TOSHIBA.JIS 7)) ) (RPAQ? \MOUSECHORDTICKS ) (RPAQ? \MOUSECHORDMILLISECONDS 50) (DECLARE%: DONTEVAL@LOAD DOCOPY (\KEYBOARDINIT) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS .NOTELASTUSERACTION MACRO (NIL (\BLT \LASTUSERACTION (LOCF (fetch SECONDSTMP of \MISCSTATS)) WORDSPERCELL))) ) (DECLARE%: EVAL@COMPILE (RPAQQ ALLUP 65535) (RPAQQ \CTRLMASK 159) (RPAQQ \METABIT 128) (CONSTANTS ALLUP \CTRLMASK \METABIT) ) (RPAQQ DLMOUSEBITS ((\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6))) (DECLARE%: EVAL@COMPILE (RPAQQ \MOUSE.LEFTBIT 4) (RPAQQ \MOUSE.RIGHTBIT 2) (RPAQQ \MOUSE.MIDDLEBIT 1) (RPAQQ \MOUSE.ALLBITS 7) (RPAQQ \MOUSE.LRBIT 6) (CONSTANTS (\MOUSE.LEFTBIT 4) (\MOUSE.RIGHTBIT 2) (\MOUSE.MIDDLEBIT 1) (\MOUSE.ALLBITS 7) (\MOUSE.LRBIT 6)) ) (RPAQQ DLMOUSESTATES ((\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5))) (DECLARE%: EVAL@COMPILE (RPAQQ \DLMOUSE.UP 0) (RPAQQ \DLMOUSE.WAITING 1) (RPAQQ \DLMOUSE.NORMAL 2) (RPAQQ \DLMOUSE.MIDDLE 3) (RPAQQ \DLMOUSE.MIDDLE&LEFT 4) (RPAQQ \DLMOUSE.MIDDLE&RIGHT 5) (CONSTANTS (\DLMOUSE.UP 0) (\DLMOUSE.WAITING 1) (\DLMOUSE.NORMAL 2) (\DLMOUSE.MIDDLE 3) (\DLMOUSE.MIDDLE&LEFT 4) (\DLMOUSE.MIDDLE&RIGHT 5)) ) (RPAQQ TRANSITIONFLAGS (ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF)) (DECLARE%: EVAL@COMPILE (RPAQQ ALTGRDOWN.TF 27) (RPAQQ ALTGRUP.TF 28) (RPAQQ ALTGRTOGGLE.TF 29) (RPAQQ CTRLDOWN.TF 5) (RPAQQ CTRLUP.TF 4) (RPAQQ DEADKEY.TF 30) (RPAQQ IGNORE.TF 0) (RPAQQ EVENT.TF 1) (RPAQQ LOCKDOWN.TF 8) (RPAQQ LOCKSHIFT.TF 2) (RPAQQ LOCKTOGGLE.TF 14) (RPAQQ LOCKUP.TF 7) (RPAQQ NOLOCKSHIFT.TF 3) (RPAQQ 1SHIFTDOWN.TF 6) (RPAQQ 1SHIFTUP.TF 9) (RPAQQ 2SHIFTDOWN.TF 11) (RPAQQ 2SHIFTUP.TF 10) (RPAQQ METADOWN.TF 13) (RPAQQ METAUP.TF 12) (RPAQQ FONTDOWN.TF 24) (RPAQQ FONTUP.TF 25) (RPAQQ FONTTOGGLE.TF 26) (RPAQQ USERMODE1UP.TF 15) (RPAQQ USERMODE1DOWN.TF 16) (RPAQQ USERMODE1TOGGLE.TF 17) (RPAQQ USERMODE2UP.TF 18) (RPAQQ USERMODE2DOWN.TF 19) (RPAQQ USERMODE2TOGGLE.TF 20) (RPAQQ USERMODE3UP.TF 21) (RPAQQ USERMODE3DOWN.TF 22) (RPAQQ USERMODE3TOGGLE.TF 23) (CONSTANTS ALTGRDOWN.TF ALTGRUP.TF ALTGRTOGGLE.TF CTRLDOWN.TF CTRLUP.TF DEADKEY.TF IGNORE.TF EVENT.TF LOCKDOWN.TF LOCKSHIFT.TF LOCKTOGGLE.TF LOCKUP.TF NOLOCKSHIFT.TF 1SHIFTDOWN.TF 1SHIFTUP.TF 2SHIFTDOWN.TF 2SHIFTUP.TF METADOWN.TF METAUP.TF FONTDOWN.TF FONTUP.TF FONTTOGGLE.TF USERMODE1UP.TF USERMODE1DOWN.TF USERMODE1TOGGLE.TF USERMODE2UP.TF USERMODE2DOWN.TF USERMODE2TOGGLE.TF USERMODE3UP.TF USERMODE3DOWN.TF USERMODE3TOGGLE.TF) ) (DECLARE%: EVAL@COMPILE [PUTPROPS \TRANSINDEX MACRO ((KEYNUMBER DOWNFLG) (COND (DOWNFLG (IPLUS \NKEYS KEYNUMBER)) (T KEYNUMBER] (PUTPROPS ARMEDCODE MACRO ((TABLE CHAR) (\GETBASEBIT (fetch (KEYACTION ARMED) TABLE) CHAR))) (PUTPROPS TRANSITIONALTGRCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION ALTGRAPHCODES) of TABLE) CHAR))) (PUTPROPS TRANSITIONSHIFTCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION SHIFTCODES) TABLE) CHAR))) (PUTPROPS TRANSITIONCODE MACRO ((TABLE CHAR) (\GETBASE (fetch (KEYACTION CODES) TABLE) CHAR))) (PUTPROPS TRANSITIONFLAGS MACRO ((TABLE CHAR) (\GETBASEBYTE (fetch (KEYACTION FLAGS) TABLE) CHAR))) [PUTPROPS TRANSITIONDEADLIST MACRO ((TABLE CHAR SHIFTED) (\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1] [PUTPROPS CHECKFORDEADKEY MACRO ((KEYCODE TABLE CHAR SHIFTED) (LET ((CODE KEYCODE)) (COND [(IEQP CODE 65535) `(DEADKEY ,(\GETBASEPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (COND (SHIFTED (IPLUS CHAR \NKEYS \NKEYS)) (T CHAR)) 1] (T CODE] ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (DECLARE%: EVAL@COMPILE (RPAQQ \NKEYS 112) (CONSTANTS \NKEYS) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (BLOCKRECORD RING ((READ WORD) (WRITE WORD))) ) (* ; "can get rid of shiftstate after clients have been fixed") (DECLARE%: EVAL@COMPILE (ACCESSFNS SHIFTSTATE [[DUMMYSHIFT (NOT (EQ 0 (LOGAND (\GETBASEBYTE DATUM 0) (LOGOR 1 2] [DUMMY1SHIFT [NOT (EQ 0 (LOGAND 1 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 1 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 1] [DUMMY2SHIFT [NOT (EQ 0 (LOGAND 2 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 2 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 2] [DUMMYLOCK [NOT (EQ 0 (LOGAND 4 (\GETBASEBYTE DATUM 0] (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (LOGOR 4 (\GETBASEBYTE DATUM 0)) ) (T (LOGAND (\GETBASEBYTE DATUM 0) (LOGXOR \CHARMASK 4] [DUMMYSHIFTORLOCK (NOT (EQ 0 (\GETBASEBYTE DATUM 0))) (\PUTBASEBYTE DATUM 0 (COND (NEWVALUE (HELP " Can't turn on SHIFTORLOCK" )) (T 0] [DUMMYCTRL (NOT (EQ 0 (\GETBASEBYTE DATUM 1))) (\PUTBASEBYTE DATUM 1 (COND (NEWVALUE 1) (T 0] [DUMMYMETA (NOT (EQ 0 (\GETBASEBYTE DATUM 2))) (\PUTBASEBYTE DATUM 2 (COND (NEWVALUE 1) (T 0] [DUMMYFONT (NEQ 0 (LOGAND (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 3) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 3] [DUMMYUSERMODE1 (NEQ 0 (LOGAND (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 0) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 0] [DUMMYUSERMODE2 (NEQ 0 (LOGAND (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 1) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 1] [DUMMYUSERMODE3 (NEQ 0 (LOGAND (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 2) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 2] [DUMMYALTGRAPH (NEQ 0 (LOGAND (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 4) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 4] (DUMMYDEADKEYPENDING (NEQ 0 (LOGAND (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (\PUTBASEBYTE DATUM 3 (COND (NEWVALUE (LOGOR (LLSH 1 5) (\GETBASEBYTE DATUM 3))) (T (LOGAND (\GETBASEBYTE DATUM 3) (LOGXOR \CHARMASK (LLSH 1 5] (CREATE (\ALLOCBLOCK (FOLDHI 3 BYTESPERCELL)))) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SHIFTSTATE \MOUSETIMERTEMP) ) (DECLARE%: EVAL@COMPILE (RPAQQ NRINGINDEXWORDS 2) (CONSTANTS NRINGINDEXWORDS) ) (DECLARE%: EVAL@COMPILE (RPAQ \SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (RPAQ \SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE))) [CONSTANTS (\SYSBUFFER.FIRST (UNFOLD NRINGINDEXWORDS BYTESPERWORD)) (\SYSBUFFER.LAST (IPLUS \SYSBUFFER.FIRST (SUB1 \SYSBUFSIZE] ) ) (DECLARE%: EVAL@COMPILE (RPAQQ \KEYNAMES ((5 %% FIVE) (4 $ FOUR) (6 ~ SIX) (e E) (7 & SEVEN) (d D) (u U) (v V) (0 %) ZERO) (k K) (- %) (p P) (/ ?) (\ %| FONT LOOKS) (LF SAME) (BS <-) (3 %# THREE) (2 @ TWO) (w W) (q Q) (s S) (a A) (9 %( NINE) (i I) (x X) (o O) (l L) (%, <) (%' %") (%] }) (BLANK-MIDDLE OPEN DBK-HELP) (BLANK-TOP KEYBOARD DBK-META) (1 ! ONE) (ESC ESCAPE ->) (TAB =>) (f F) (CTRL PROP'S EDIT) (c C) (j J) (b B) (z Z) (LSHIFT) (%. >) (; %:) (CR <-%|) (_ ^) (DEL DELETE) (SKIP NEXT) (r R) (t T) (g G) (y Y) (h H) (8 * EIGHT) (n N) (m M) (LOCK) (SPACE) (%[ {) (= +) (RSHIFT) (BLANK-BOTTOM STOP) (MOVE) (UNDO) (UTIL0 SUN-KEYPAD=) (UTIL1 SUN-KEYPAD/) (UTIL2 SUPER/SUB) (UTIL3 CASE) (UTIL4 STRIKEOUT) (UTIL5 KEYPAD2) (UTIL6 KEYPAD3 PGDN) (UTIL7 SUN-LF) (PAD1 LEFTKEY CAPSLOCK KEYPAD+) (PAD2 LEFTMIDDLEKEY NUMLOCK KEYPAD-) (PAD3 MIDDLEKEY SCROLLLOCK KEYPAD*) (PAD4 RIGHTMIDDLEKEY BREAK KEYPAD/ SUN-PAUSE) (PAD5 RIGHTKEY DOIT PRTSC) (LEFT RED MOUSERED) (RIGHT BLUE MOUSEBLUE) (MIDDLE YELLOW MOUSEYELLOW) (MARGINS) (K41 KEYPAD7 HOME) (K42 KEYPAD8) (K43 KEYPAD9 PGUP) (K44 KEYPAD4) (K45 KEYPAD5) (K46 SUN-LEFT-SPACE) (K47 KEYPAD6) (K48 RIGHT-COMMAND SUN-RIGHT-SPACE) (COPY) (FIND) (AGAIN) (HELP) (DEF'N EXPAND) (K4E KEYPAD1 END) (ALWAYS-ON-1) (ALWAYS-ON-2) (CENTER) (K52 KEYPAD0 INS) (BOLD) (ITALICS) (UNDERLINE) (SUPERSCRIPT) (SUBSCRIPT) (LARGER SMALLER) (K59 KEYPAD%| KEYPAD.) (K5A KEYPAD\ KEYPAD, SUN-F10) (K5B SUN-F11) (K5C SUN-F12) (DEFAULTS SUN-PROP) (K5E SUN-PRTSC) (K5F SUN-OPEN))) ) (* ;; "\maikokeyactions does not contain keyactions of the form %"2,50%" because it breaks the loadup process on the sun." ) (RPAQQ \ORIGKEYACTIONS ((0 (53 "%%" NOLOCKSHIFT)) (1 (52 "$" NOLOCKSHIFT)) (2 (54 "~" NOLOCKSHIFT)) (3 ("e" "E" LOCKSHIFT)) (4 (55 "&" NOLOCKSHIFT)) (5 ("d" "D" LOCKSHIFT)) (6 ("u" "U" LOCKSHIFT)) (7 ("v" "V" LOCKSHIFT)) (8 (48 ")" NOLOCKSHIFT)) (9 ("k" "K" LOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (11 ("p" "P" LOCKSHIFT)) (12 ("/" "?" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (15 (8 8 NOLOCKSHIFT)) (16 (51 "#" NOLOCKSHIFT)) (17 (50 "@" NOLOCKSHIFT)) (18 ("w" "W" LOCKSHIFT)) (19 ("q" "Q" LOCKSHIFT)) (20 ("s" "S" LOCKSHIFT)) (21 ("a" "A" LOCKSHIFT)) (22 (57 "(" NOLOCKSHIFT)) (23 ("i" "I" LOCKSHIFT)) (24 ("x" "X" LOCKSHIFT)) (25 ("o" "O" LOCKSHIFT)) (26 ("l" "L" LOCKSHIFT)) (27 ("," "<" NOLOCKSHIFT)) (28 ("'" "%"" NOLOCKSHIFT)) (29 ("]" "}" NOLOCKSHIFT)) (30 (194 194 NOLOCKSHIFT)) (31 (193 193 NOLOCKSHIFT)) (32 (49 "!" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (34 (9 9 NOLOCKSHIFT)) (35 ("f" "F" LOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (37 ("c" "C" LOCKSHIFT)) (38 ("j" "J" LOCKSHIFT)) (39 ("b" "B" LOCKSHIFT)) (40 ("z" "Z" LOCKSHIFT)) (41 1SHIFTDOWN . 1SHIFTUP) (42 ("." ">" NOLOCKSHIFT)) (43 (";" ":" NOLOCKSHIFT)) (44 (13 13 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)) (46 (127 535 NOLOCKSHIFT)) (47 ("(" "[" NOLOCKSHIFT)) (48 ("r" "R" LOCKSHIFT)) (49 ("t" "T" LOCKSHIFT)) (50 ("g" "G" LOCKSHIFT)) (51 ("y" "Y" LOCKSHIFT)) (52 ("h" "H" LOCKSHIFT)) (53 (56 "*" NOLOCKSHIFT)) (54 ("n" "N" LOCKSHIFT)) (55 ("m" "M" LOCKSHIFT)) (56 LOCKDOWN . LOCKUP) (57 (32 32 NOLOCKSHIFT)) (58 ("[" "{" NOLOCKSHIFT)) (59 ("=" "+" NOLOCKSHIFT)) (60 2SHIFTDOWN . 2SHIFTUP) (61 (195 195 NOLOCKSHIFT)) (63 (")" "]" NOLOCKSHIFT)) (77 EVENT . EVENT) (78 EVENT . EVENT) (79 EVENT . EVENT) (102 LOCKDOWN) (103 LOCKUP))) (RPAQQ \DLIONKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 ("\" "|" NOLOCKSHIFT)) (45 (96 "~" NOLOCKSHIFT)) (OPEN METADOWN . METAUP) (PROP'S CTRLDOWN . CTRLUP) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPERSCRIPT ("2,113" "2,153" NOLOCKSHIFT)) (SUBSCRIPT ("2,114" "2,154" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (DEFAULTS ("2,115" "2,155" NOLOCKSHIFT)) (93 (27 "2,64" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (31 ("2,5" "2,45" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (80 ("2,13" "2,53" NOLOCKSHIFT)) (FONT ("2,112" "2,152" NOLOCKSHIFT)))) (RPAQQ \DLIONOSDKEYACTIONS ((56 LOCKTOGGLE))) (RPAQQ \DORADOKEYACTIONS ((2 (54 "~" NOLOCKSHIFT)) (10 ("-" "-" NOLOCKSHIFT)) (13 ("\" "|" NOLOCKSHIFT)) (14 (10 96 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (45 ("_" "^" NOLOCKSHIFT)))) (RPAQQ \DOVEKEYACTIONS ((2 (54 "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (56 CTRLDOWN . CTRLUP) (65 (27 27 NOLOCKSHIFT)) (71 (39 34 NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (108 (96 126 NOLOCKSHIFT)) (DBK-META METADOWN . METAUP) (DBK-HELP ("2,1" "2,41" NOLOCKSHIFT)) (SAME METADOWN . METAUP) (FIND ("2,3" "2,43" NOLOCKSHIFT)) (UNDO ("2,4" "2,44" NOLOCKSHIFT)) (STOP (5 7 NOLOCKSHIFT)) (EDIT ("2,5" "2,45" NOLOCKSHIFT)) (MOVE) (COPY) (AGAIN ("2,10" "2,50" NOLOCKSHIFT)) (CENTER ("2,101" "2,141" NOLOCKSHIFT)) (BOLD ("2,102" "2,142" NOLOCKSHIFT)) (ITALICS ("2,103" "2,143" NOLOCKSHIFT)) (CASE ("2,104" "2,144" NOLOCKSHIFT)) (STRIKEOUT ("2,105" "2,145" NOLOCKSHIFT)) (UNDERLINE ("2,106" "2,146" NOLOCKSHIFT)) (SUPER/SUB ("2,107" "2,147" NOLOCKSHIFT)) (LARGER ("2,110" "2,150" NOLOCKSHIFT)) (MARGINS ("2,111" "2,151" NOLOCKSHIFT)) (LOOKS ("2,112" "2,152" NOLOCKSHIFT)) (CAPSLOCK LOCKTOGGLE) (NUMLOCK ("2,11" "-" NOLOCKSHIFT)) (SCROLLLOCK ("2,12" 180 NOLOCKSHIFT)) (BREAK (2 184 NOLOCKSHIFT)) (DOIT ("2,13" "2,53" NOLOCKSHIFT)) (KEYPAD7 ("2,14" 55 NOLOCKSHIFT)) (KEYPAD8 (173 56 NOLOCKSHIFT)) (KEYPAD9 ("2,15" 57 NOLOCKSHIFT)) (KEYPAD4 (172 52 NOLOCKSHIFT)) (KEYPAD5 ("2,16" 53 NOLOCKSHIFT)) (KEYPAD6 (174 54 NOLOCKSHIFT)) (KEYPAD1 ("2,17" 49 NOLOCKSHIFT)) (KEYPAD2 (175 50 NOLOCKSHIFT)) (KEYPAD3 ("2,20" 51 NOLOCKSHIFT)) (KEYPAD0 ("2,21" 48 NOLOCKSHIFT)) (KEYPAD%| ("|" 46 NOLOCKSHIFT)) (KEYPAD\ ("\" 44 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)))) (RPAQQ \DOVEOSDKEYACTIONS ((56 LOCKDOWN . LOCKUP) (36 CTRLDOWN . CTRLUP) (CAPSLOCK ("2,5" "2,45" NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONS ((61 (5 7 NOLOCKSHIFT)) (91 (520 552 NOLOCKSHIFT)) (92 (513 545 NOLOCKSHIFT)) (30 (513 545 NOLOCKSHIFT)) (63 (516 548 NOLOCKSHIFT)) (93 (532 564 NOLOCKSHIFT)) (62) (111 (329 263 NOLOCKSHIFT)) (89) (90 (515 547 NOLOCKSHIFT)) (73 (521 521 NOLOCKSHIFT)) (74 (522 522 NOLOCKSHIFT)) (75 (2 2 NOLOCKSHIFT)) (81 (524 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 (525 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 (526 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 (527 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 (528 51 NOLOCKSHIFT)) (98 (529 48 NOLOCKSHIFT)) (76 (523 555 NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 (577 609 NOLOCKSHIFT)) (99 (578 610 NOLOCKSHIFT)) (100 (579 611 NOLOCKSHIFT)) (67 (580 612 NOLOCKSHIFT)) (68 (581 613 NOLOCKSHIFT)) (101 (582 614 NOLOCKSHIFT)) (66 (583 615 NOLOCKSHIFT)) (104 (584 616 NOLOCKSHIFT)) (80 (585 617 NOLOCKSHIFT)) (13 (23 21 NOLOCKSHIFT)) (33 (27 27 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (2 (54 94 NOLOCKSHIFT)) (10 (45 95 NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 (96 126 NOLOCKSHIFT)) (31 METADOWN . METAUP) (14 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 (530 562 NOLOCKSHIFT)) (105 (92 124 NOLOCKSHIFT)))) (RPAQQ \MAIKOKEYACTIONST4 ((61 ("^E" "^G" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (30 ("2,1" "2,41" NOLOCKSHIFT)) (109 ("2,25" "2,65" NOLOCKSHIFT)) (63 ("2,4" "2,44" NOLOCKSHIFT)) (14 METADOWN . METAUP) (93 ("2,24" "2,64" NOLOCKSHIFT)) (62) (111 ("1,111" "1,79" NOLOCKSHIFT)) (89) (90 ("2,3" "2,43" NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (94 ("2,17" 49 NOLOCKSHIFT)) (69 (175 50 NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (98 ("2,21" 48 NOLOCKSHIFT)) (76 ("2,13" "2,13" NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (72 LOCKTOGGLE) (97 ("2,101" "2,141" NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (100 ("2,103" "2,143" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (68 ("2,105" "2,145" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (33 ("ESC" "ESC" NOLOCKSHIFT)) (64 IGNORE . IGNORE) (65 (27 27 NOLOCKSHIFT)) (95 IGNORE . IGNORE) (96 IGNORE . IGNORE) (102 IGNORE . IGNORE) (2 ("6" "^" NOLOCKSHIFT)) (10 ("-" "_" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (56 LOCKTOGGLE . IGNORE) (45 ("`" "~" NOLOCKSHIFT)) (31 METADOWN . METAUP) (71 (10 10 NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (86 IGNORE . IGNORE) (88 IGNORE . IGNORE) (105 ("\" "|" NOLOCKSHIFT)))) (RPAQQ \MAIKO-JLE-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("\" "_" NOLOCKSHIFT)) (13 ("^W" "^U" NOLOCKSHIFT)) (14 METADOWN . METAUP) (15 (8 8 NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (30 ("]" "}" NOLOCKSHIFT)) (31 METADOWN . METAUP) (33 ("ESC" "ESC" NOLOCKSHIFT)) (36 CTRLDOWN . CTRLUP) (43 (";" "+" NOLOCKSHIFT)) (45 ("^" "~" NOLOCKSHIFT)) (47 ("2,22" "2,62" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (56 LOCKTOGGLE . IGNORE) (58 ("@" "`" NOLOCKSHIFT)) (59 ("-" "=" NOLOCKSHIFT)) (61 ("^E" "^G" NOLOCKSHIFT)) (62) (63 ("2,4" "2,44" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (27 27 NOLOCKSHIFT)) (66 ("2,107" "2,147" NOLOCKSHIFT)) (67 ("2,104" "2,144" NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 ("2,20" 51 NOLOCKSHIFT)) (71 (10 10 NOLOCKSHIFT)) (72 (766 766 NOLOCKSHIFT)) (73 ("2,11" "2,11" NOLOCKSHIFT)) (74 ("2,12" "2,12" NOLOCKSHIFT)) (75 ("^B" "^B" NOLOCKSHIFT)) (80 ("2,111" "2,151" NOLOCKSHIFT)) (81 ("2,14" 55 NOLOCKSHIFT)) (82 (173 56 NOLOCKSHIFT)) (83 ("2,15" 57 NOLOCKSHIFT)) (84 (172 52 NOLOCKSHIFT)) (85 ("2,16" 53 NOLOCKSHIFT)) (86 (765 765 NOLOCKSHIFT)) (87 (174 54 NOLOCKSHIFT)) (88 (770 771 NOLOCKSHIFT)) (90 ("2,3" "2,43" NOLOCKSHIFT)) (91 ("2,10" "2,50" NOLOCKSHIFT)) (92 ("2,1" "2,41" NOLOCKSHIFT)) (93 ("2,24" "2,64" NOLOCKSHIFT)) (96 IGNORE . IGNORE) (98 ("2,21" 48 NOLOCKSHIFT)) (99 ("2,102" "2,142" NOLOCKSHIFT)) (101 ("2,106" "2,146" NOLOCKSHIFT)) (102 IGNORE . IGNORE) (103 (767 768 NOLOCKSHIFT)) (104 ("2,110" "2,150" NOLOCKSHIFT)) (105 ("\" "|" NOLOCKSHIFT)) (106 ("2,113" "2,153" NOLOCKSHIFT)) (107 ("2,114" "2,154" NOLOCKSHIFT)) (108 ("2,115" "2,155" NOLOCKSHIFT)) (109 (769 769 NOLOCKSHIFT)) (110 ("2,53" "2,53" NOLOCKSHIFT)) (111 ("1,111" "1,79" NOLOCKSHIFT)))) (RPAQQ \TOSHIBA-KEYACTIONS ((2 ("6" "&" NOLOCKSHIFT)) (4 ("7" "'" NOLOCKSHIFT)) (17 ("2" "%"" NOLOCKSHIFT)) (53 ("8" "(" NOLOCKSHIFT)) (22 ("9" ")" NOLOCKSHIFT)) (8 ("0" "0" NOLOCKSHIFT)) (10 ("-" "=" NOLOCKSHIFT)) (59 ("^" "~" NOLOCKSHIFT)) (45 ("\" "|" NOLOCKSHIFT)) (58 ("@" "`" NOLOCKSHIFT)) (29 ("[" "{" NOLOCKSHIFT)) (105 ("]" "}" NOLOCKSHIFT)) (43 (";" "+" NOLOCKSHIFT)) (28 (":" "*" NOLOCKSHIFT)) (15 (23 95 NOLOCKSHIFT)) (13 (8 8 NOLOCKSHIFT)) (86 METADOWN . METAUP) (73 (530 562 NOLOCKSHIFT)) (88 ("2,24" "2,64" NOLOCKSHIFT)) (98 IGNORE . IGNORE) (75 ("2,11" "2,11" NOLOCKSHIFT)) (110 ("2,12" "2,12" NOLOCKSHIFT)) (74 ("^B" "^B" NOLOCKSHIFT)) (64 ("2,14" 55 NOLOCKSHIFT)) (65 (173 56 NOLOCKSHIFT)) (95 ("2,15" 57 NOLOCKSHIFT)) (81 (172 52 NOLOCKSHIFT)) (82 ("2,16" 53 NOLOCKSHIFT)) (83 (174 54 NOLOCKSHIFT)) (84 ("2,17" 49 NOLOCKSHIFT)) (85 (175 50 NOLOCKSHIFT)) (87 ("2,20" 51 NOLOCKSHIFT)) (94 ("2,21" 48 NOLOCKSHIFT)) (69 ("2,13" "2,53" NOLOCKSHIFT)) (70 LOCKTOGGLE))) (RPAQQ KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS NIL) (RPAQ? \KEYBOARD.META 256) (RPAQ? \MODIFIED.KEYACTIONS ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS \RCLKSECOND \LASTUSERACTION \LASTKEYSTATE) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \SYSBUFFER \LONGSYSBUF \INTERRUPTSTATE \MODIFIED.KEYACTIONS \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING \CURRENTKEYACTION \COMMANDKEYACTION \DEFAULTKEYACTION \TIMER.INTERRUPT.PENDING \ORIGKEYACTIONS \KEYBOARD.META \MOUSECHORDMILLISECONDS \DORADOKEYACTIONS \DLIONKEYACTIONS \DLIONOSDKEYACTIONS \DOVEKEYACTIONS \DOVEOSDKEYACTIONS) ) (* ; "Key interpretation") (DEFINEQ (KEYACTION [LAMBDA (KEYNAME ACTIONS TABLE) (* ; "Edited 19-Nov-87 16:19 by Snow") (LET ((NUMB (OR (SMALLP KEYNAME) (\KEYNAMETONUMBER KEYNAME))) (TABLE (OR TABLE \CURRENTKEYACTION))) (OR (TYPE? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (* ;  "Make sure he supplied a valid TABLE argument.") (CONS (\KEYACTION1 (\TRANSINDEX NUMB T) (AND ACTIONS (OR (CAR ACTIONS) 'IGNORE)) TABLE) (\KEYACTION1 (\TRANSINDEX NUMB NIL) (AND ACTIONS (OR (CDR ACTIONS) 'IGNORE)) TABLE]) (KEYACTIONTABLE [LAMBDA (OLD) (* ; "Edited 23-Mar-92 12:44 by jds") (* ;; "Create a fresh key action table (or copy OLD so it can be modified without danger). Returns a fresh keyaction table.") (COND (OLD (* ;; "He supplied an existing table; create a copy of it:") (OR (type? KEYACTION OLD) (\ILLEGAL.ARG OLD)) (* ;  "Make sure the argument IS a key action table.") (create KEYACTION copying OLD)) (T (* ;; "Create a completely fresh table, filled in from \ORIGKEYACTIONS, and the machine-specific exceptions:") (PROG1 (SETQ OLD (create KEYACTION)) (for X in (APPEND (COPY \ORIGKEYACTIONS) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS) KEYBOARD.APPLICATION-SPECIFIC-KEYACTIONS) do (KEYACTION (CAR X) (CDR X) OLD)))]) (KEYBOARDTYPE [LAMBDA NIL (* ; "Edited 6-Nov-95 15:35 by ") (* ; "Edited 17-Feb-95 14:36 by rmk:") (* ;  "Edited 16-Jun-92 11:03 by kaplan") (* ;; "Returns a symbol identifying the currently connected keyboard type. For now, infers it from the machine type, defaults to NIL (= unknown).") (LET ((MT (MACHINETYPE))) (SELECTQ MT (MAIKO (OR [CADR (SASSOC (L-CASE (UNIX-GETENV "LDEKBDTYPE")) '(("type3" SUN3) ("type4" SUN4) ("type5" SUN5] (MKATOM (U-CASE (UNIX-GETENV "LDEKBDTYPE"))) (AND (STREQUAL "dos" (UNIX-GETPARM "ARCH")) 'FULL-IBMPC))) ((DORADO DANDELION DOVE) MT) NIL]) (RESETKEYACTION [LAMBDA (TABLE FROM RESETINTERRUPTS) (* ; "Edited 19-Nov-87 16:55 by Snow") (* ;; "Resets the actions of key transitions in the keyaction table TABLE, copying in the actions from FROM. If RESETINTERRUPTS is true, also copies the interrupt-character settings from FROM.") (DECLARE (GLOBALVARS \DEFAULTKEYACTION)) (* ;; "do some type checking first.") (OR (type? KEYACTION TABLE) (\ILLEGAL.ARG TABLE)) (OR FROM (SETQ FROM \DEFAULTKEYACTION)) (OR (type? KEYACTION FROM) (\ILLEGAL.ARG TABLE)) (* ;; "do the resetting.") (\BLT (fetch (KEYACTION FLAGS) of TABLE) (fetch (KEYACTION FLAGS) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION FLAGS) of TABLE)) 1)) (\BLT (fetch (KEYACTION CODES) of TABLE) (fetch (KEYACTION CODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION CODES) of TABLE)) 1)) (\BLT (fetch (KEYACTION SHIFTCODES) of TABLE) (fetch (KEYACTION SHIFTCODES) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION SHIFTCODES) of TABLE)) 1)) [if RESETINTERRUPTS then (\BLT (fetch (KEYACTION ARMED) of TABLE) (fetch (KEYACTION ARMED) of FROM) (LLSH (\#BLOCKDATACELLS (fetch (KEYACTION ARMED) of TABLE)) 1)) (replace (KEYACTION INTERRUPTLIST) of TABLE with (COPY (fetch (KEYACTION INTERRUPTLIST) of FROM] TABLE]) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS [LAMBDA NIL (* ; "Edited 18-Sep-90 22:36 by jds") (* ;;  "Return a list of machine-specific keyactions appropriate to the machine you're running on.") (* ;; "Also take account (on Maiko implementations) of whether we're running under X or not -- the CAPS-LOCK key works differently.") (LET [(CAPS-LOCK-ACTIONS (COND ((EQUAL (UNIX-GETPARM "DISPLAY") "X") '((56 LOCKTOGGLE . IGNORE) (72 LOCKDOWN . LOCKUP] (* ;; "seems like X defaults to not handling lock these days, so I changed the defaulet handling of LOCK 56 -- LMM 2/13/2021") (* ;; "If we're running under X windows, CAPS-LOCK-ACTIONS, appended to the normal keyactions, will reset the keyboard appropriately.") (COND ((EQUAL \SUN.TYPE3KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage) )) (APPEND \MAIKOKEYACTIONS CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.TYPE4KEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage) )) (APPEND \MAIKOKEYACTIONST4 CAPS-LOCK-ACTIONS)) ((EQUAL \SUN.JLEKEYBOARD (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) \MAIKO-JLE-KEYACTIONS) ((EQUAL \TOSHIBA.JIS (LOGAND 7 (fetch (IFPAGE DEVCONFIG) of \InterfacePage))) (* ; "Toshiba JIS") (APPEND \MAIKOKEYACTIONST4 \TOSHIBA-KEYACTIONS)) (T (* ; "default is type3") \MAIKOKEYACTIONS]) (\KEYACTION1 [LAMBDA (TI ACTION TABLE) (* ; "Edited 4-Mar-92 13:59 by jds") (PROG1 (SELECTC (TRANSITIONFLAGS TABLE TI) (IGNORE.TF 'IGNORE) ((LIST LOCKSHIFT.TF NOLOCKSHIFT.TF) [LET (CODE) (LIST (CHECKFORDEADKEY (TRANSITIONCODE TABLE TI) TABLE TI NIL) (CHECKFORDEADKEY (TRANSITIONSHIFTCODE TABLE TI) TABLE TI T) (TRANSITIONALTGRCODE TABLE TI) (COND ((EQ LOCKSHIFT.TF (TRANSITIONFLAGS TABLE TI)) 'LOCKSHIFT) (T 'NOLOCKSHIFT]) (EVENT.TF 'EVENT) (CTRLDOWN.TF 'CTRLDOWN) (CTRLUP.TF 'CTRLUP) (DEADKEY.TF (LIST 'DEADKEY (TRANSITIONDEADLIST TABLE TI) (TRANSITIONDEADLIST TABLE TI T))) (1SHIFTDOWN.TF '1SHIFTDOWN) (1SHIFTUP.TF '1SHIFTUP) (2SHIFTDOWN.TF '2SHIFTDOWN) (2SHIFTUP.TF '2SHIFTUP) (LOCKDOWN.TF 'LOCKDOWN) (LOCKUP.TF 'LOCKUP) (LOCKTOGGLE.TF 'LOCKTOGGLE) (METADOWN.TF 'METADOWN) (METAUP.TF 'METAUP) (FONTUP.TF 'FONTUP) (FONTDOWN.TF 'FONTDOWN) (FONTTOGGLE.TF 'FONTTOGGLE) (USERMODE1UP.TF 'USERMODE1UP) (USERMODE1DOWN.TF 'USERMODE1DOWN) (USERMODE1TOGGLE.TF 'USERMODE1TOGGLE) (USERMODE2UP.TF 'USERMODE2UP) (USERMODE2DOWN.TF 'USERMODE2DOWN) (USERMODE2TOGGLE.TF 'USERMODE2TOGGLE) (USERMODE3UP.TF 'USERMODE3UP) (USERMODE3DOWN.TF 'USERMODE3DOWN) (USERMODE3TOGGLE.TF 'USERMODE3TOGGLE) (ALTGRUP.TF 'ALTGRUP) (ALTGRDOWN.TF 'ALTGRDOWN) (ALTGRTOGGLE.TF 'ALTGRTOGGLE) (SHOULDNT)) [SELECTQ ACTION ((NIL NOCHANGE)) (IGNORE (change (TRANSITIONFLAGS TABLE TI) IGNORE.TF)) (EVENT (change (TRANSITIONFLAGS TABLE TI) EVENT.TF)) (CTRLUP (change (TRANSITIONFLAGS TABLE TI) CTRLUP.TF)) (CTRLDOWN (change (TRANSITIONFLAGS TABLE TI) CTRLDOWN.TF)) (1SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 1SHIFTUP.TF)) (1SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 1SHIFTDOWN.TF)) (2SHIFTUP (change (TRANSITIONFLAGS TABLE TI) 2SHIFTUP.TF)) (2SHIFTDOWN (change (TRANSITIONFLAGS TABLE TI) 2SHIFTDOWN.TF)) (LOCKUP (change (TRANSITIONFLAGS TABLE TI) LOCKUP.TF)) (LOCKDOWN (change (TRANSITIONFLAGS TABLE TI) LOCKDOWN.TF)) (LOCKTOGGLE (change (TRANSITIONFLAGS TABLE TI) LOCKTOGGLE.TF)) (METAUP (change (TRANSITIONFLAGS TABLE TI) METAUP.TF)) (METADOWN (change (TRANSITIONFLAGS TABLE TI) METADOWN.TF)) (FONTUP (change (TRANSITIONFLAGS TABLE TI) FONTUP.TF)) (FONTDOWN (change (TRANSITIONFLAGS TABLE TI) FONTDOWN.TF)) (FONTTOGGLE (change (TRANSITIONFLAGS TABLE TI) FONTTOGGLE.TF)) (USERMODE1UP (change (TRANSITIONFLAGS TABLE TI) USERMODE1UP.TF)) (USERMODE1DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE1DOWN.TF)) (USERMODE1TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE1TOGGLE.TF)) (USERMODE2UP (change (TRANSITIONFLAGS TABLE TI) USERMODE2UP.TF)) (USERMODE2DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE2DOWN.TF)) (USERMODE2TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE2TOGGLE.TF)) (USERMODE3UP (change (TRANSITIONFLAGS TABLE TI) USERMODE3UP.TF)) (USERMODE3DOWN (change (TRANSITIONFLAGS TABLE TI) USERMODE3DOWN.TF)) (USERMODE3TOGGLE (change (TRANSITIONFLAGS TABLE TI) USERMODE3TOGGLE.TF)) (ALTGRUP (change (TRANSITIONFLAGS TABLE TI) ALTGRUP.TF)) (ALTGRDOWN (change (TRANSITIONFLAGS TABLE TI) ALTGRDOWN.TF)) (ALTGRTOGGLE (change (TRANSITIONFLAGS TABLE TI) ALTGRTOGGLE.TF)) (PROG (CODE SHIFTCODE ALTGRCODE ACT DEAD SHIFTDEAD) (COND ([AND [OR (AND (AND (LISTP (CAR (LISTP ACTION))) (EQ (CAAR (LISTP ACTION)) 'DEADKEY)) [SETQ DEAD (for PAIR in (CADAR (LISTP ACTION)) collect (* ;;  "Make sure we'll take string charcode specs in the deadkey list.") (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ CODE 65535)) [\CHARCODEP (SETQ CODE (\GETCHARCODE (CAR (LISTP ACTION] (SETQ CODE (APPLY* (FUNCTION CHARCODE) (CAR (LISTP ACTION] [OR (AND (AND (LISTP (CADR (LISTP ACTION))) (EQ (CAADR (LISTP ACTION)) 'DEADKEY)) [SETQ SHIFTDEAD (for PAIR in (CADADR (LISTP ACTION)) collect (CONS (OR (AND (\CHARCODEP (CAR PAIR)) (CAR PAIR)) (APPLY* (FUNCTION CHARCODE) (CAR PAIR))) (OR (AND (\CHARCODEP (CDR PAIR)) (CDR PAIR)) (APPLY* (FUNCTION CHARCODE) (CDR PAIR] (SETQ SHIFTCODE 65535) (SETQ ACT (CDR ACTION))) [\CHARCODEP (SETQ SHIFTCODE (\GETCHARCODE (CAR (SETQ ACT (LISTP (CDR ACTION] (SETQ SHIFTCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) (AND [OR [\CHARCODEP (SETQ ALTGRCODE (\GETCHARCODE (CAR ACT] (SETQ ALTGRCODE (APPLY* (FUNCTION CHARCODE) (CAR ACT] (OR (NULL (SETQ ACT (CDR ACT))) (LISTP ACT)) (SELECTQ (CAR ACT) ((LOCKSHIFT T) (change (TRANSITIONFLAGS TABLE TI) LOCKSHIFT.TF)) ((NOLOCKSHIFT NIL) (change (TRANSITIONFLAGS TABLE TI) NOLOCKSHIFT.TF)) NIL] (change (TRANSITIONCODE TABLE TI) CODE) (change (TRANSITIONSHIFTCODE TABLE TI) SHIFTCODE) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH TI 1) DEAD) (\RPLPTR (fetch (KEYACTION DEADKEYLIST) of TABLE) (LLSH (IPLUS \NKEYS \NKEYS TI) 1) SHIFTDEAD) (AND ALTGRCODE (change (TRANSITIONALTGRCODE TABLE TI) ALTGRCODE))) (T (\ILLEGAL.ARG ACTION])]) (KEYDOWNP [LAMBDA (KEYNAME) (* lmm "18-Apr-85 02:09") (* T if the indicated key is  instantaneously down.) (\NEWKEYDOWNP (\KEYNAMETONUMBER KEYNAME]) (KEYNUMBERP [LAMBDA (X) (* ; "Edited 16-Jan-96 13:16 by rmk") (AND (SMALLP X) (IGEQ X 0) (ILESSP X \NKEYS) X]) (\KEYNAMETONUMBER [LAMBDA (KEYNAME) (* rmk%: " 2-SEP-83 10:29") (DECLARE (GLOBALVARS \KEYNAMES)) (* The fast case is when KEYNAME is  lower-case) (for X N in \KEYNAMES as I from 0 when (EQMEMB KEYNAME X) do (RETURN I) finally (RETURN (OR (AND (NEQ KEYNAME (SETQ N (L-CASE KEYNAME))) (for Y in \KEYNAMES as I from 0 when (EQMEMB N Y) do (RETURN I))) (\ILLEGAL.ARG KEYNAME]) (MODIFY.KEYACTIONS [LAMBDA (KeyActions SaveCurrent?) (* ; "Edited 2-Feb-89 15:38 by GADENER") (PROG1 [if SaveCurrent? then (SETQ \MODIFIED.KEYACTIONS (for ITEM in KeyActions collect (CONS (CAR ITEM) (KEYACTION (CAR ITEM] [for action in KeyActions do (for table in '(\CURRENTKEYACTION \COMMANDKEYACTION) do (KEYACTION (CAR action) (CDR action) (EVAL table])]) (METASHIFT [LAMBDA FLG (* ; "Edited 19-Nov-87 16:59 by Snow") (* ;; "Sets interpretation of swat key to first arg, where T means meta-shift, NIL means original setting. Returns previous setting") (PROG ((METASTATUS '(METADOWN . METAUP)) OLDSETTING) [SETQ OLDSETTING (KEYACTION 'BLANK-BOTTOM (AND (IGREATERP FLG 0) (COND ((EQ (ARG FLG 1) T) METASTATUS) (T (OR (ARG FLG 1) (CDR (ASSOC 'BLANK-BOTTOM \ORIGKEYACTIONS] (RETURN (COND ((EQUAL OLDSETTING METASTATUS) T) (T OLDSETTING]) (SHIFTDOWNP [LAMBDA (SHIFT) (* lmm "18-Apr-85 01:07") (* Tells whether a given shift is  down) (SELECTQ SHIFT (LOCK (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (META (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE))) (1SHIFT (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE)) (2SHIFT (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE)) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT 1SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT 2SHIFT) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE))) (CTRL (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (FONT (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (USERMODE1 (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (USERMODE2 (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (USERMODE3 (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (\ILLEGAL.ARG SHIFT]) ) (* ; "To support office style 1108 & 1186 keyboards") (DEFINEQ (SETUP.OFFICE.KEYBOARD [LAMBDA NIL (* jds " 8-Oct-85 16:27") (SELECTQ (MACHINETYPE) (DANDELION (MODIFY.KEYACTIONS \DLIONOSDKEYACTIONS)) (DOVE (MODIFY.KEYACTIONS \DOVEOSDKEYACTIONS)) NIL]) ) (DECLARE%: EVAL@COMPILE (PUTPROPS \TEMPCOPYTIMER MACRO ((X) (PROGN (\BLT \MOUSETIMERTEMP (LOCF X) WORDSPERCELL) \MOUSETIMERTEMP))) ) (* ; "Don't copy this optimizer since it expands out to \getbasebit, but do exportit.") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED") (DEFOPTIMIZER KEYDOWNP (KEYNAME) `(\NEWKEYDOWNP (\KEYNAMETONUMBER ,KEYNAME))) (* "END EXPORTED DEFINITIONS") ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE [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] ) (* "END EXPORTED DEFINITIONS") (* ; "A raw keyboard device/stream") (DEFINEQ (\INIT.KEYBOARD.STREAM [LAMBDA NIL (* ; "Edited 4-Sep-87 10:25 by jds") (* ;; "Initialize the %"Keyboard%" device: Set up the FDEV and the prototype keyboard stream in their respective global variables.") (DECLARE (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM)) [\DEFINEDEVICE 'KEYBOARD (SETQ \KEYBOARD.DEVICE (create FDEV DEVICENAME _ 'KEYBOARD CLOSEFILE _ (FUNCTION NILL) EVENTFN _ (FUNCTION \KEYBOARDEVENTFN) BIN _ (FUNCTION \GETKEY) PEEKBIN _ (FUNCTION \PEEKSYSBUF) READP _ (FUNCTION \SYSBUFP) EOFP _ (FUNCTION NILL) GETFILENAME _ (FUNCTION (LAMBDA (X MODE) (if (EQ MODE 'INPUT) then \KEYBOARD.STREAM] (SETQ \KEYBOARD.STREAM (create STREAM USERCLOSEABLE _ NIL USERVISIBLE _ NIL FULLFILENAME _ '{KEYBOARD} DEVICE _ \KEYBOARD.DEVICE ACCESS _ 'INPUT]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (\INIT.KEYBOARD.STREAM) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \KEYBOARD.DEVICE \KEYBOARD.STREAM) ) (* "END EXPORTED DEFINITIONS") (* ; "Hook for a periodic interrupt") (DEFINEQ (\DOBUFFEREDTRANSITIONS [LAMBDA (\INTERRUPTABLE) (DECLARE (SPECVARS \INTERRUPTABLE)) (* ; "Edited 1-Feb-92 11:59 by jds") (SETQ \KEYBUFFERING 'INPROGRESS) (LET ((PENDINGINTERRUPT)) (DECLARE (SPECVARS PENDINGINTERRUPT)) (* ; "Used by \DECODETRANSITION") [bind R RPTR until (EQ 0 (SETQ R (fetch (RING READ) of \KEYBOARDEVENTQUEUE)) ) do (SETQ RPTR (\ADDBASE \KEYBOARDEVENTQUEUE R)) (* ; "get pointer to this event") (* ;  "handle simple keyboard words by calling \DOTRANSITIONS for each word") [COND ((NEQ (fetch (KEYBOARDEVENT W0) of RPTR) (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE )) (\DOTRANSITIONS 0 (fetch (KEYBOARDEVENT W0) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W0) of RPTR)) (replace (KEYBOARDEVENT W0) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W0) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W1) of RPTR) (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE )) (\DOTRANSITIONS 16 (fetch (KEYBOARDEVENT W1) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W1) of RPTR)) (replace (KEYBOARDEVENT W1) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W1) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W2) of RPTR) (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE )) (\DOTRANSITIONS 32 (fetch (KEYBOARDEVENT W2) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W2) of RPTR)) (replace (KEYBOARDEVENT W2) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W2) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W3) of RPTR) (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE )) (\DOTRANSITIONS 48 (fetch (KEYBOARDEVENT W3) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W3) of RPTR)) (replace (KEYBOARDEVENT W3) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W3) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W4) of RPTR) (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE )) (\DOTRANSITIONS 80 (fetch (KEYBOARDEVENT W4) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W4) of RPTR)) (replace (KEYBOARDEVENT W4) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W4) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT W5) of RPTR) (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE )) (\DOTRANSITIONS 96 (fetch (KEYBOARDEVENT W5) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT W5) of RPTR)) (replace (KEYBOARDEVENT W5) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT W5) of RPTR] [COND ((NEQ (fetch (KEYBOARDEVENT WU) of RPTR) (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE )) (\DOTRANSITIONS 64 (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) (fetch (KEYBOARDEVENT WU) of RPTR)) (replace (KEYBOARDEVENT WU) of \LASTKEYSTATE with (fetch (KEYBOARDEVENT WU) of RPTR] (* ;;; "now remove event from queue") (COND ((EQ [replace (RING READ) of \KEYBOARDEVENTQUEUE with (COND ((IGEQ R \KEYBOARDEVENT.LAST) \KEYBOARDEVENT.FIRST) (T (IPLUS \KEYBOARDEVENT.SIZE R] (fetch (RING WRITE) of \KEYBOARDEVENTQUEUE )) (replace (RING READ) of \KEYBOARDEVENTQUEUE with 0] (PROGN (* ; "update dummy shift state") (replace DUMMY1SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 1SHIFT ) of \LASTKEYSTATE )) (replace DUMMY2SHIFT of \SHIFTSTATE with (fetch (KEYBOARDEVENT 2SHIFT ) of \LASTKEYSTATE )) (replace DUMMYLOCK of \SHIFTSTATE with (fetch (KEYBOARDEVENT LOCK) of \LASTKEYSTATE)) (replace DUMMYCTRL of \SHIFTSTATE with (fetch (KEYBOARDEVENT CTRL) of \LASTKEYSTATE)) (replace DUMMYMETA of \SHIFTSTATE with (fetch (KEYBOARDEVENT META) of \LASTKEYSTATE)) (replace DUMMYFONT of \SHIFTSTATE with (fetch (KEYBOARDEVENT FONT) of \LASTKEYSTATE)) (replace DUMMYUSERMODE1 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE1) of \LASTKEYSTATE)) (replace DUMMYUSERMODE2 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE2) of \LASTKEYSTATE)) (replace DUMMYUSERMODE3 of \SHIFTSTATE with (fetch (KEYBOARDEVENT USERMODE3) of \LASTKEYSTATE)) (replace DUMMYALTGRAPH of \SHIFTSTATE with (fetch (KEYBOARDEVENT ALTGRAPH) of \LASTKEYSTATE)) (replace DUMMYDEADKEYPENDING of \SHIFTSTATE with (fetch ( KEYBOARDEVENT DEADKEYPENDING ) of \LASTKEYSTATE) )) (* ;; "Note: there is a window between the test of READ above and the setting of \KEYBUFFERING below where a keyboard transition can be ignored until the next transition causes \KEYBUFFERING to be set again") (COND ((NOT (OR PENDINGINTERRUPT \PENDINGINTERRUPT)) (* ;  "No interrupt noticed this time or on any previous invocation") (SETQ \KEYBUFFERING NIL)) ((NOT (\GETBASEPTR (\STKSCAN '\INTERRUPTABLE) 0)) (* ;  "We're not interruptable, so try again later") (SETQ \PENDINGINTERRUPT T) (SETQ \KEYBUFFERING NIL)) (T (SETQ \PENDINGINTERRUPT NIL) (SETQ \KEYBUFFERING NIL) (LET ((\INTERRUPTABLE T)) (INTERRUPTED]) (\TIMER.INTERRUPTFRAME [LAMBDA NIL (* lmm "22-Apr-85 09:47") (* place holder for periodic  interrupts) (if NIL then (APPLY* \PERIODIC.INTERRUPT) (if \PERIODIC.INTERRUPT then (SETUPTIMER (QUOTIENT (TIMES \PERIODIC.INTERRUPT.FREQUENCY \RCLKSECOND) 77) (LOCF (fetch DLMOUSETIMER of \MISCSTATS)) 'TICKS) (SETQ \TIMER.INTERRUPT.PENDING T]) (\PERIODIC.INTERRUPTFRAME [LAMBDA NIL (DECLARE (GLOBALVARS \PERIODIC.INTERRUPT)) (* lmm "16-Jul-85 16:22") (LET ((FN \PERIODIC.INTERRUPT)) (AND FN (SPREADAPPLY* FN]) ) (RPAQ? \KEYBUFFERING ) (RPAQ? \PERIODIC.INTERRUPT ) (RPAQ? \TIMER.INTERRUPT.PENDING ) (RPAQ? \PERIODIC.INTERRUPT.FREQUENCY 77) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (* ; "cursor and mouse related functions.") (DEFINEQ (\HARDCURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 2-Jan-2000 18:10 by kaplan") (* ;  "version of \CURSORUP that knows about the possibility of the cursor being on the color screen.") (PROG (IMAGE) (SETQ \SOFTCURSORP NIL) (SETQ \CURRENTCURSOR NEWCURSOR) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION))) (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR] (BITBLT IMAGE 0 0 CursorBitMap 0 (IDIFFERENCE HARDCURSORHEIGHT (fetch (BITMAP BITMAPHEIGHT ) of IMAGE)) HARDCURSORWIDTH HARDCURSORHEIGHT (COND (INVERTFLG 'INVERT) (T 'INPUT)) 'REPLACE) (SELECTC \MACHINETYPE (\DAYBREAK (\DoveDisplay.SetCursorShape CursorBitMap)) (\MAIKO (SUBRCALL DSPCURSOR (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR))) NIL]) (\HARDCURSORPOSITION [LAMBDA (XPOS YPOS) (* kbr%: "13-Jun-85 21:24") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND ((ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS)) NIL]) (\HARDCURSORDOWN [LAMBDA NIL (* kbr%: "23-Apr-85 18:26") (\CLEARBM (CURSORBITMAP]) ) (DEFINEQ (CURSOR.INIT [LAMBDA NIL (* kbr%: "23-Jan-86 17:34") (PROG (DESTBPL) (* Assorted globals for doing the  color cursor. *) (SETQ \CURSORDESTINATION ScreenBitMap) (SETQ \SOFTCURSORUPBM NIL) (SETQ \SOFTCURSORDOWNBM NIL) (SETQ \CURSORDESTLINE 0) (SETQ \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of ScreenBitMap)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of ScreenBitMap)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of ScreenBitMap)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of ScreenBitMap)) (* Initialize PILOTBBTs.  *) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (* These PILOTBBTs are the mixing areas for forming the color cursor image.  *) (* Does SCREEN to DOWNBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT1 (create PILOTBBT PBTSOURCEBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT1) (* Does DOWNBM to UPBM via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT2 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT2) (* Does MASK to UPBM via INPUT,  ERASE. *) (SETQ \SOFTCURSORBBT3 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 1 PBTOPERATION _ 1)) (\LOCKCELL \SOFTCURSORBBT3) (* Does IMAGE to UPBM via INPUT,  PAINT. *) (SETQ \SOFTCURSORBBT4 (create PILOTBBT PBTDESTBIT _ 0 PBTSOURCEBIT _ 0 PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 2)) (\LOCKCELL \SOFTCURSORBBT4) (* Does UPBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT5 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT5) (* Does DOWNBM to SCREEN via INPUT,  REPLACE. *) (SETQ \SOFTCURSORBBT6 (create PILOTBBT PBTDESTBPL _ DESTBPL PBTDISJOINT _ T PBTSOURCETYPE _ 0 PBTOPERATION _ 0)) (\LOCKCELL \SOFTCURSORBBT6) (* Lock things down.  *) ]) (\CURSORDESTINATION [LAMBDA (DESTINATION) (* kbr%: " 2-Sep-85 20:13") (* Change DESTINATION of  \CURRENTCURSOR, assuming it is down.  *) (PROG (DESTBPL) (COND ((NOT (EQ DESTINATION \CURSORDESTINATION)) (UNINTERRUPTABLY [COND ((NOT (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of (fetch (CURSOR CUIMAGE) of \CURRENTCURSOR )) (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION))) (\CURSORBITSPERPIXEL \CURRENTCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of DESTINATION] (\SETMOUSEXY 0 0) (\PUTBASE \EM.CURSORX 0 0) (\PUTBASE \EM.CURSORY 0 0) (SETQ \CURSORDESTLINE 0) (SETQ.NOREF \CURSORDESTLINEBASE (fetch (BITMAP BITMAPBASE) of DESTINATION)) (SETQ \CURSORDESTWIDTH (fetch (BITMAP BITMAPWIDTH) of DESTINATION)) (SETQ \CURSORDESTHEIGHT (fetch (BITMAP BITMAPHEIGHT) of DESTINATION)) (SETQ \CURSORDESTRASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of DESTINATION )) (SETQ DESTBPL (UNFOLD \CURSORDESTRASTERWIDTH BITSPERWORD)) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT1 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT5 with DESTBPL) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT6 with DESTBPL) (SETQ \CURSORDESTINATION DESTINATION))]) (\SOFTCURSORUP [LAMBDA (NEWCURSOR) (* kbr%: " 2-Sep-85 20:15") (* Put soft NEWCURSOR up, assuming soft cursor is down.  *) (PROG (IMAGE MASK WIDTH BWIDTH HEIGHT CURSORBITSPERPIXEL CURSORBPL UPBMBASE DOWNBMBASE) (* Get cursor IMAGE & MASK.  *) (SETQ IMAGE (fetch (CURSOR CUIMAGE) of NEWCURSOR)) (SETQ MASK (fetch (CURSOR CUMASK) of NEWCURSOR)) (SETQ WIDTH (fetch (BITMAP BITMAPWIDTH) of IMAGE)) (SETQ HEIGHT (fetch (BITMAP BITMAPHEIGHT) of IMAGE)) (SETQ CURSORBITSPERPIXEL (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE)) (* Create new UPBM & DOWNBM caches  if necessary. *) (COND ((NOT (AND (type? BITMAP \SOFTCURSORUPBM) (EQ (fetch (BITMAP BITMAPWIDTH) of \SOFTCURSORUPBM) WIDTH) (EQ (fetch (BITMAP BITMAPHEIGHT) of \SOFTCURSORUPBM) HEIGHT) (EQ (fetch (BITMAP BITMAPBITSPERPIXEL) of \SOFTCURSORUPBM) CURSORBITSPERPIXEL))) (SETQ \SOFTCURSORWIDTH WIDTH) (SETQ \SOFTCURSORHEIGHT HEIGHT) (SETQ \SOFTCURSORUPBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ \SOFTCURSORDOWNBM (BITMAPCREATE WIDTH HEIGHT CURSORBITSPERPIXEL)) (SETQ UPBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM)) (\TEMPLOCKPAGES UPBMBASE 1) (SETQ DOWNBMBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM)) (\TEMPLOCKPAGES DOWNBMBASE 1) (SETQ CURSORBPL (UNFOLD (fetch (BITMAP BITMAPRASTERWIDTH) of IMAGE) BITSPERWORD)) (SETQ BWIDTH (ITIMES (fetch (BITMAP BITMAPWIDTH) of IMAGE) (fetch (BITMAP BITMAPBITSPERPIXEL) of IMAGE))) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT1 with CURSORBPL) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT2 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT2 with DOWNBMBASE) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT2 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT2 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT2 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT3 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT3 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT3 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT3 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT4 with UPBMBASE) (replace (PILOTBBT PBTDESTBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT4 with CURSORBPL) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT4 with BWIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT4 with HEIGHT) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT5 with CURSORBPL) (replace (PILOTBBT PBTSOURCEBPL) of \SOFTCURSORBBT6 with CURSORBPL))) (* Change PILOTBBTs.  *) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT3 with (fetch (BITMAP BITMAPBASE ) of MASK)) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT4 with (fetch (BITMAP BITMAPBASE ) of IMAGE)) (* Put up new \CURRENTCURSOR.  *) (SETQ \CURRENTCURSOR NEWCURSOR) (\TEMPLOCKPAGES \CURRENTCURSOR 1) (SETQ \SOFTCURSORP T) (\SOFTCURSORUPCURRENT]) (\SOFTCURSORUPCURRENT [LAMBDA NIL (* kbr%: "18-Aug-85 15:09") (* Put soft \CURRENTCURSOR up, assuming soft cursor is down.  *) (PROG (DISPINTERRUPT X Y XBASE YBASE WIDTH HEIGHT BITSPERPIXEL MINUSDESTRASTERWIDTH DEST DESTBIT SOURCEOFFSET UPBMSOURCE DOWNBMSOURCE SOURCEBIT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP T) (* Roughly, we want to  (BITBLT CURSOR XBASE YBASE SCREEN X  Y WIDTH HEIGHT) *) (SETQ X (SIGNED (\GETBASE \EM.MOUSEX 0) BITSPERWORD)) (SETQ Y (SIGNED (\GETBASE \EM.MOUSEY 0) BITSPERWORD)) (SETQ XBASE 0) (SETQ YBASE 0) (SETQ WIDTH \SOFTCURSORWIDTH) (SETQ HEIGHT \SOFTCURSORHEIGHT) (* Clip off screen parts of cursor.  *) [COND ((IGREATERP 0 X) (* Some of cursor is to left of  screen. *) (SETQ XBASE (IMINUS X)) (SETQ WIDTH (IDIFFERENCE WIDTH XBASE)) (SETQ X 0)) ((IGREATERP (IPLUS X WIDTH) \CURSORDESTWIDTH) (* Some of cursor is to right of  screen. *) (SETQ WIDTH (IDIFFERENCE \CURSORDESTWIDTH X] (COND ((ILESSP WIDTH 0) (GO EXIT))) [COND ((IGREATERP 0 Y) (* Some of cursor is to above of  screen. *) (SETQ YBASE (IMINUS Y)) (SETQ HEIGHT (IDIFFERENCE HEIGHT YBASE)) (SETQ Y 0)) ((IGREATERP (IPLUS Y HEIGHT) \CURSORDESTHEIGHT) (* Some of cursor is to below of  screen. *) (SETQ HEIGHT (IDIFFERENCE \CURSORDESTHEIGHT Y] (COND ((ILESSP HEIGHT 0) (GO EXIT))) (* These loops reset \CURSORDESTLINEBASE while avoiding large number  arithmetic. *) [COND [(IGREATERP \CURSORDESTLINE Y) (SETQ MINUSDESTRASTERWIDTH (IMINUS \CURSORDESTRASTERWIDTH)) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (SUB1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE MINUSDESTRASTERWIDTH] ((ILESSP \CURSORDESTLINE Y) (until (EQ \CURSORDESTLINE Y) do (SETQ \CURSORDESTLINE (ADD1 \CURSORDESTLINE)) (SETQ.NOREF \CURSORDESTLINEBASE (\ADDBASE \CURSORDESTLINEBASE \CURSORDESTRASTERWIDTH] (* Reset PILOTBBTs.  *) (SETQ BITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of \CURRENTCURSOR)) (SETQ X (ITIMES BITSPERPIXEL X)) (SETQ XBASE (ITIMES BITSPERPIXEL XBASE)) (SETQ WIDTH (ITIMES BITSPERPIXEL WIDTH)) (SETQ DEST \CURSORDESTLINEBASE) (SETQ DESTBIT X) (SETQ SOURCEOFFSET (ITIMES YBASE (fetch (BITMAP BITMAPRASTERWIDTH) of \SOFTCURSORUPBM ))) (SETQ UPBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORUPBM) SOURCEOFFSET)) (SETQ DOWNBMSOURCE (\ADDBASE (fetch (BITMAP BITMAPBASE) of \SOFTCURSORDOWNBM) SOURCEOFFSET)) (SETQ SOURCEBIT XBASE) (* TBW%: Most of these fields only need to be set if we are clipping this  time or the previous time we put the cursor up.  *) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT1 with DOWNBMSOURCE) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT1 with SOURCEBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT1 with DEST) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT1 with DESTBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT1 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT1 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT5 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT5 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT5 with UPBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT5 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT5 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT5 with HEIGHT) (replace (PILOTBBT PBTDEST) of \SOFTCURSORBBT6 with DEST) (replace (PILOTBBT PBTDESTBIT) of \SOFTCURSORBBT6 with DESTBIT) (replace (PILOTBBT PBTSOURCE) of \SOFTCURSORBBT6 with DOWNBMSOURCE) (replace (PILOTBBT PBTSOURCEBIT) of \SOFTCURSORBBT6 with SOURCEBIT) (replace (PILOTBBT PBTWIDTH) of \SOFTCURSORBBT6 with WIDTH) (replace (PILOTBBT PBTHEIGHT) of \SOFTCURSORBBT6 with HEIGHT) (* Save background behind cursor.  *) (\PILOTBITBLT \SOFTCURSORBBT1 0) (* Compute cursor appearance.  UPBM = (OR IMAGE (AND DOWNBM  (NOT MASK))) *) (\PILOTBITBLT \SOFTCURSORBBT2 0) (\PILOTBITBLT \SOFTCURSORBBT3 0) (\PILOTBITBLT \SOFTCURSORBBT4 0) (* Put color cursor up.  *) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT5 0) EXIT (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORPOSITION [LAMBDA (X Y) (* kbr%: "18-Aug-85 14:50") (* Move soft cursor.  *) (PROG (DISPINTERRUPT) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) [COND ((OR (NOT (EQ (\GETBASE \EM.CURSORX 0) X)) (NOT (EQ (\GETBASE \EM.CURSORY 0) Y))) (COND (\SOFTCURSORUPP (\SOFTCURSORDOWN) (\SOFTCURSORUPCURRENT] (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (\SOFTCURSORDOWN [LAMBDA NIL (* kbr%: " 6-Jul-85 00:09") (* Take COLOR cursor down.  *) (PROG (DISPINTERRUPT) (* \SOFTCURSORUPP must be set to NIL  before BITBLTing. *) (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0)) (\PUTBASE \EM.DISPINTERRUPT 0 0) (SETQ \SOFTCURSORUPP NIL) (\SOFTCURSORPILOTBITBLT \SOFTCURSORBBT6 0) (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT]) (CURSORPROP [LAMBDA X (* kbr%: "11-Jan-86 20:03") (COND ((IGREATERP X 2) (PUTCURSORPROP (ARG X 1) (ARG X 2) (ARG X 3))) ((EQ X 2) (GETCURSORPROP (ARG X 1) (ARG X 2))) (T (\ILLEGAL.ARG NIL]) (GETCURSORPROP [LAMBDA (CURSOR PROP) (* kbr%: "26-Apr-85 11:18") (LISTGET (fetch (CURSOR CUDATA) of CURSOR) PROP]) (PUTCURSORPROP [LAMBDA (CURSOR PROP VALUE) (* kbr%: "26-Apr-85 11:18") (PROG (OLDDATA OLDVALUE) (SETQ OLDDATA (fetch (CURSOR CUDATA) of CURSOR)) [COND [OLDDATA (SETQ OLDVALUE (LISTGET OLDDATA PROP)) (COND (VALUE (LISTPUT OLDDATA PROP VALUE)) (OLDVALUE (COND [(EQ (CAR OLDDATA) PROP) (replace (CURSOR CUDATA) of CURSOR with (CDDR (fetch (CURSOR CUDATA) of CURSOR] (T (FOR TAIL ON (CDR OLDDATA) BY (CDDR TAIL) WHEN (EQ (CADR TAIL) PROP) DO (FRPLACD TAIL (CDDDR TAIL)) (RETURN] (VALUE (replace (CURSOR CUDATA) of CURSOR with (LIST PROP VALUE] (RETURN OLDVALUE]) (\CURSORBITSPERPIXEL [LAMBDA (CURSOR NEWBITSPERPIXEL) (* kbr%: "12-May-85 17:15") (* Swap in NEWBITSPERPIXEL IMAGE and MASK, creating them if necessary.  *) (PROG (OLDBITSPERPIXEL OLDIMAGE OLDMASK WHITE BLACK NEWIMAGE NEWMASK) (SETQ OLDBITSPERPIXEL (fetch (CURSOR CUBITSPERPIXEL) of CURSOR)) (COND ((EQ OLDBITSPERPIXEL NEWBITSPERPIXEL) (RETURN))) (* Save OLDIMAGE and OLDMASK.  *) (SETQ OLDIMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (SETQ OLDMASK (fetch (CURSOR CUMASK) of CURSOR)) (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME OLDBITSPERPIXEL) OLDIMAGE) (CURSORPROP CURSOR (\CURSORMASKPROPNAME OLDBITSPERPIXEL) OLDMASK) (* Unsave NEWIMAGE and NEWMASK if possible, otherwise create them.  *) [COND [(SETQ NEWIMAGE (CURSORPROP CURSOR (\CURSORIMAGEPROPNAME NEWBITSPERPIXEL))) (* Use cached NEWIMAGE & NEWMASK.  *) (SETQ NEWMASK (CURSORPROP CURSOR (\CURSORMASKPROPNAME NEWBITSPERPIXEL] (T (* Create NEWIMAGE & NEWMASK.  *) (SETQ WHITE (MASK.1'S 0 NEWBITSPERPIXEL)) (SETQ BLACK 0) (SETQ NEWIMAGE (COLORIZEBITMAP (CURSORPROP CURSOR 'IMAGE1) BLACK WHITE NEWBITSPERPIXEL)) (SETQ NEWMASK (COLORIZEBITMAP (CURSORPROP CURSOR 'MASK1) BLACK WHITE NEWBITSPERPIXEL] (replace (CURSOR CUIMAGE) of CURSOR with NEWIMAGE) (replace (CURSOR CUMASK) of CURSOR with NEWMASK]) (\CURSORIMAGEPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'IMAGE1) (4 'IMAGE4) (8 'IMAGE8) (SHOULDNT]) (\CURSORMASKPROPNAME [LAMBDA (BITSPERPIXEL) (* kbr%: "26-Apr-85 11:18") (SELECTQ BITSPERPIXEL (1 'MASK1) (4 'MASK4) (8 'MASK8) (SHOULDNT]) ) (DEFINEQ (CURSORCREATE [LAMBDA (IMAGE MASK HOTSPOTX HOTSPOTY DATA) (* ; "Edited 10-Jul-92 16:32 by cat") (* ; "Edited 31-Jul-87 10:01 by jds") (* ;; "creates a cursor from a bitmap. HOTSPOTX and HOTSPOTY specify the hotspot.") (* ;; "INVARIANTS: the hot spot X and Y must be in the range 0..(width - 1) and 0..(height - 1), respectively.") (PROG (CURSOR) (COND ((OR (FIXP MASK) (POSITIONP MASK)) (* ;; "If Mask is a fixp then we presume this is the old arg list (bitmap x y). the cursor filepkgtype has been changed to write the new arg list. The other is provided for (dubious) compatibility") (SETQ HOTSPOTY HOTSPOTX) (SETQ HOTSPOTX MASK) (SETQ MASK NIL))) (* ;; "Make sure that the image and mask bitmaps are no larger than the hardware cursor, i.e. 16x16 bits [AR 8916 7/31/87]:") (COND ((OR (IGREATERP (BITMAPWIDTH IMAGE) 16) (IGREATERP (BITMAPHEIGHT IMAGE) 16)) (* ; "IMAGE is too big.") (\ILLEGAL.ARG IMAGE)) ((NOT MASK) (* ; "No mask, so it's OK") ) ((OR (IGREATERP (BITMAPWIDTH MASK) 16) (IGREATERP (BITMAPHEIGHT MASK) 16)) (* ; "MASK is too big.") (\ILLEGAL.ARG MASK))) [COND ((POSITIONP HOTSPOTX) (* ;;  "The hot spot can be specified as a position in one arg, rather than X and Y in two:") (SETQ HOTSPOTY (fetch (POSITION YCOORD) of HOTSPOTX)) (SETQ HOTSPOTX (fetch (POSITION XCOORD) of HOTSPOTX] (SETQ CURSOR (create CURSOR CUIMAGE _ IMAGE CUMASK _ (OR MASK IMAGE) CUHOTSPOTX _ (IMAX 0 (IMIN (SUB1 (BITMAPWIDTH IMAGE)) (OR (FIXP HOTSPOTX) 0))) CUHOTSPOTY _ [IMAX 0 (IMIN (SUB1 (BITMAPHEIGHT IMAGE)) (OR (FIXP HOTSPOTY) (SUB1 (BITMAPHEIGHT IMAGE] CUDATA _ DATA)) (RETURN CURSOR]) (CURSOR [LAMBDA (NEWCURSOR INVERTFLG) (* ; "Edited 24-Mar-87 18:30 by jds") (* ;; "Installs NEWCURSOR as the cursor and returns the old cursor state. If INVERTFLG is non-NIL, the cursor image is inverted during installation. If NEWCURSOR is NIL, just returns the current cursor state.") (DECLARE (GLOBALVARS DEFAULTCURSOR \SOFTCURSORP)) (PROG (OLDCURSOR) (SETQ OLDCURSOR \CURRENTCURSOR) (COND ((EQ NEWCURSOR T) (* ;  "If NEWCURSOR is T, use the system default cursor.") (SETQ NEWCURSOR DEFAULTCURSOR))) (COND [(\CURSOR-VALID-P NEWCURSOR \SOFTCURSORP) (* ;  "Only install the cursor if it's a real, valid one.") (\CURSORDOWN) (\CURSORUP NEWCURSOR INVERTFLG) (* ;  "set after adjustment to avoid confusion about hotspot during adjustment.") (SETQ \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (SETQ \CURSORHOTSPOTY (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR] (NEWCURSOR (* ; "NEWCURSOR = NIL means just return the old one, so only error if one got specified that wasn't valid.") (\ILLEGAL.ARG NEWCURSOR))) (RETURN OLDCURSOR]) (\CURSOR-VALID-P [LAMBDA (CURSOR SOFT?) (* ; "Edited 25-Mar-87 09:41 by jds") (* ;; "It returns T if CURSOR is a valid cursor. Validity depends on whether it's meant to be displayed using the cursor hardware or the cursor software.") (* ;; "This is really wed to the D-machine display architecture. ") (AND (CURSORP CURSOR) (COND (SOFT? T) (T (LET ((IMAGE (fetch (CURSOR CUIMAGE) of CURSOR)) (HOTSPOT-X (fetch (CURSOR CUHOTSPOTX) of CURSOR)) (HOTSPOT-Y (fetch (CURSOR CUHOTSPOTY) of CURSOR))) (* ;; "The bitmap must be <= 16x16, and the hot spot must be within the cursor if we're using hardware cursor.") (AND (>= 16 (BITMAPWIDTH IMAGE)) (>= 16 (BITMAPHEIGHT IMAGE)) (<= 0 HOTSPOT-X) (< HOTSPOT-X 16) (<= 0 HOTSPOT-Y) (< HOTSPOT-Y 16]) (\CURSORUP [LAMBDA (NEWCURSOR INVERTFLG) (* kbr%: "18-Aug-85 14:38") (UNINTERRUPTABLY (\CURSORBITSPERPIXEL NEWCURSOR (fetch (BITMAP BITMAPBITSPERPIXEL) of \CURSORDESTINATION )) (COND ((AND (EQ (fetch (CURSOR CUIMAGE) of NEWCURSOR) (fetch (CURSOR CUMASK) of NEWCURSOR)) (ILEQ (fetch (BITMAP BITMAPWIDTH) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORWIDTH) (ILEQ (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR)) HARDCURSORHEIGHT) (EQ \CURSORDESTINATION ScreenBitMap)) (\HARDCURSORUP NEWCURSOR INVERTFLG)) (T (\SOFTCURSORUP NEWCURSOR))) (ADJUSTCURSORPOSITION (IDIFFERENCE \CURSORHOTSPOTX (fetch (CURSOR CUHOTSPOTX) of NEWCURSOR)) (IDIFFERENCE (IDIFFERENCE (SUB1 (fetch (BITMAP BITMAPHEIGHT) of (fetch (CURSOR CUIMAGE) of NEWCURSOR))) (fetch (CURSOR CUHOTSPOTY) of NEWCURSOR)) \CURSORHOTSPOTY)))]) (\CURSORPOSITION [LAMBDA (XPOS YPOS) (* ; "Edited 19-Mar-98 14:41 by jds") (* sets cursor position, adjusts for hotspot and tty region limits.  XPOS and YPOS are the screen coordinates of the hotspot location.) (DECLARE (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURSORDESTWIDTH \CURSORDESTHEIGHT)) (* YPOS is reflected around CURSORYMAX because the screen has  (0,0) as the upper left corner. *) (SETQ YPOS (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) YPOS)) (* Clip coordinates *) (SETQ XPOS (UNSIGNED (IDIFFERENCE (COND (NIL (* ;; "Removed 2000/1/3 JDS so mousr cursors work.") (ILESSP XPOS 0) 0) ((IGEQ XPOS \CURSORDESTWIDTH) (SUB1 \CURSORDESTWIDTH)) (T XPOS)) \CURSORHOTSPOTX) BITSPERWORD)) (SETQ YPOS (UNSIGNED (IDIFFERENCE (COND (NIL (ILESSP YPOS 0) 0) ((IGEQ YPOS \CURSORDESTHEIGHT) (SUB1 \CURSORDESTHEIGHT)) (T YPOS)) \CURSORHOTSPOTY) BITSPERWORD)) [COND ((EQ \MACHINETYPE \DANDELION) (* Temporary workaround) (COND ((IGREATERP YPOS 32767) (SETQ YPOS 0))) (COND ((IGREATERP XPOS 32767) (SETQ XPOS 0] (\SETMOUSEXY XPOS YPOS) (COND (\SOFTCURSORP (\SOFTCURSORPOSITION XPOS YPOS))) [PROGN (* change the cursor position too so that GETMOUSESTATE will get the correct  values if it is called before the next 60 cycle interrupt.) (\PUTBASE \EM.CURSORX 0 XPOS) (\PUTBASE \EM.CURSORY 0 YPOS) (COND ((EQ \MACHINETYPE \DAYBREAK) (* Need to notify DAYBREAK IOP to  move cursor. *) (\DoveDisplay.SetCursorPosition XPOS YPOS] NIL]) (\CURSORDOWN [LAMBDA NIL (* kbr%: "12-Jun-85 17:21") (UNINTERRUPTABLY (COND (\SOFTCURSORP (\SOFTCURSORDOWN)) (T (\HARDCURSORDOWN))))]) (ADJUSTCURSORPOSITION [LAMBDA (DELTAX DELTAY) (* kbr%: " 6-Jan-86 11:55") (COND [(POSITIONP DELTAX) (\CURSORPOSITION (IPLUS (fetch (POSITION XCOORD) of DELTAX) (\XMOUSECOORD)) (IPLUS (fetch (POSITION YCOORD) of DELTAX) (\YMOUSECOORD] (T (\CURSORPOSITION (IPLUS (OR DELTAX 0) (\XMOUSECOORD)) (IPLUS (OR DELTAY 0) (\YMOUSECOORD]) (CURSORPOSITION [LAMBDA (NEWPOSITION DISPLAYSTREAM OLDPOSITION) (* kbr%: "13-Feb-86 15:53") (PROG (DD) (SETQ DD (\GETDISPLAYDATA DISPLAYSTREAM)) (OR (type? POSITION OLDPOSITION) (SETQ OLDPOSITION (create POSITION))) (freplace (POSITION XCOORD) of OLDPOSITION with (\DSPUNTRANSFORMX (\XMOUSECOORD ) DD)) (freplace (POSITION YCOORD) of OLDPOSITION with (\DSPUNTRANSFORMY (\YMOUSECOORD ) DD)) (COND ((type? POSITION NEWPOSITION) (\CURSORPOSITION (\DSPTRANSFORMX (fetch (POSITION XCOORD) of NEWPOSITION) DD) (\DSPTRANSFORMY (fetch (POSITION YCOORD) of NEWPOSITION) DD))) ((type? SCREENPOSITION NEWPOSITION) (CURSORSCREEN (fetch (SCREENPOSITION SCREEN) of NEWPOSITION) (fetch (SCREENPOSITION XCOORD) of NEWPOSITION) (fetch (SCREENPOSITION YCOORD) of NEWPOSITION))) (NEWPOSITION (\ILLEGAL.ARG NEWPOSITION))) (RETURN OLDPOSITION]) (CURSORSCREEN [LAMBDA (SCREEN XCOORD YCOORD) (* gbn%: "25-Jan-86 16:53") (* * sets up SCREEN to be the current screen, XCOORD %, YCOORD is initial pos  of cursor on SCREEN) (COND ((NULL XCOORD) (SETQ XCOORD 0))) (COND ((NULL YCOORD) (SETQ YCOORD 0))) (PROG (DESTINATION) (SETQ DESTINATION (fetch (SCREEN SCDESTINATION) of SCREEN)) (\CURSORDOWN) (SETQ \CURSORSCREEN SCREEN) (\CURSORDESTINATION DESTINATION) (\CURSORUP \CURRENTCURSOR) (\CURSORPOSITION XCOORD YCOORD]) (CURSOREXIT [LAMBDA NIL (* gbn%: "25-Jan-86 16:52") (* * called when cursor moves off the screen edge) (DECLARE (GLOBALVARS LASTSCREEN LASTMOUSEX LASTMOUSEY)) (PROG (SCREEN XCOORD YCOORD SCREEN2 XCOORD2 YCOORD2) (SETQ SCREEN LASTSCREEN) (SETQ XCOORD LASTMOUSEX) (SETQ YCOORD LASTMOUSEY) (SETQ SCREEN2 (COND ((EQ SCREEN \MAINSCREEN) \COLORSCREEN) (T \MAINSCREEN))) (* generalize for more than two  screens (or alternate physical  arrangement of screens.)) (COND ((EQ XCOORD 0) (SETQ XCOORD2 (IDIFFERENCE (fetch (SCREEN SCWIDTH) of SCREEN2) 2))) ((EQ XCOORD (SUB1 (fetch (SCREEN SCWIDTH) of SCREEN))) (SETQ XCOORD2 1)) (T (RETURN))) [SETQ YCOORD2 (IQUOTIENT (ITIMES YCOORD (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN2)) ) (SUB1 (fetch (SCREEN SCHEIGHT) of SCREEN] (CURSORSCREEN SCREEN2 XCOORD2 YCOORD2]) (FLIPCURSOR [LAMBDA NIL (* ; "Edited 24-Apr-88 00:04 by MASINTER") (PROG (ADDR) (COND @@ -32,4 +32,4 @@ (fetch (CURSOR CUHOTSPOTY) of \CURRENTCURSOR )))) - NIL]) (LASTMOUSEX [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse x position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMX LASTMOUSEX (\GETDISPLAYDATA DS]) (LASTMOUSEY [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse y position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMY LASTMOUSEY (\GETDISPLAYDATA DS]) (CREATEPOSITION [LAMBDA (XCOORD YCOORD) (* rmk%: " 6-Aug-84 13:43") (create POSITION XCOORD _ (OR XCOORD 0) YCOORD _ (OR YCOORD 0]) (POSITIONP [LAMBDA (X) (* rrb "25-AUG-82 11:04") (* is X a position? For now just a cons check but should be made a datatype.) (AND (LISTP X) (NUMBERP (CAR X)) (NUMBERP (CDR X)) X]) (CURSORHOTSPOT [LAMBDA (NEWPOSITION) (* gbn%: "26-Jan-86 15:36") (* returns the current cursor hot spot and sets the hot spot to NEWPOSITON if  one is given.) (PROG1 (create POSITION XCOORD _ \CURSORHOTSPOTX YCOORD _ \CURSORHOTSPOTY) (COND ((POSITIONP NEWPOSITION) (SETQ \CURSORHOTSPOTX (fetch (POSITION YCOORD) of NEWPOSITION)) (SETQ \CURSORHOTSPOTY (fetch (POSITION YCOORD) of NEWPOSITION]) ) (PUTPROPS CURSORPROP ARGNAMES (NIL (CURSOR PROP {NEWVALUE}) . U)) (RPAQ? \CURSORHOTSPOTX 0) (RPAQ? \CURSORHOTSPOTY 0) (RPAQ? \CURRENTCURSOR NIL) (RPAQ? \SOFTCURSORWIDTH NIL) (RPAQ? \SOFTCURSORHEIGHT NIL) (RPAQ? \SOFTCURSORP NIL) (RPAQ? \SOFTCURSORUPP NIL) (RPAQ? \SOFTCURSORUPBM NIL) (RPAQ? \SOFTCURSORDOWNBM NIL) (RPAQ? \SOFTCURSORBBT1 NIL) (RPAQ? \SOFTCURSORBBT2 NIL) (RPAQ? \SOFTCURSORBBT3 NIL) (RPAQ? \SOFTCURSORBBT4 NIL) (RPAQ? \SOFTCURSORBBT5 NIL) (RPAQ? \SOFTCURSORBBT6 NIL) (RPAQ? \CURSORSCREEN NIL) (RPAQ? \CURSORDESTINATION NIL) (RPAQ? \CURSORDESTHEIGHT 808) (RPAQ? \CURSORDESTWIDTH 1024) (RPAQ? \CURSORDESTRASTERWIDTH 64) (RPAQ? \CURSORDESTLINE 0) (RPAQ? \CURSORDESTLINEBASE NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) ) (DEFINEQ (GETMOUSESTATE [LAMBDA NIL (* kbr%: " 6-Jul-85 14:16") (* Reads the current state of the  mouse and keyboard) (SETQ LASTMOUSEX (\XMOUSECOORD)) (SETQ LASTMOUSEY (\YMOUSECOORD)) (SETQ LASTMOUSEBUTTONS (LOGXOR (LOGAND (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) \MOUSE.ALLBITS) \MOUSE.ALLBITS)) (SETQ LASTKEYBOARD (\EVENTKEYS)) (SETQ LASTSCREEN \CURSORSCREEN) NIL]) (\EVENTKEYS [LAMBDA NIL (* rmk%: " 4-JUN-81 22:58") (* Returns the state of the various keys that are represented in mouse events) (LOGOR (COND ((KEYDOWNP 'LOCK) 128) (T 0)) (COND ((KEYDOWNP 'LSHIFT) 64) (T 0)) (COND ((KEYDOWNP 'CTRL) 32) (T 0)) (COND ((KEYDOWNP 'RSHIFT) 8) (T 0)) (COND ((KEYDOWNP 'BLANK-TOP) 4) (T 0)) (COND ((KEYDOWNP 'BLANK-MIDDLE) 2) (T 0)) (COND ((KEYDOWNP 'BLANK-BOTTOM) 1) (T 0]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (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]) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE (PUTPROPS \XMOUSECOORD MACRO (NIL (IPLUS \CURSORHOTSPOTX (SIGNED (\GETBASE \EM.CURSORX 0) BITSPERWORD)))) (PUTPROPS \YMOUSECOORD MACRO [NIL (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) (IPLUS \CURSORHOTSPOTY (SIGNED (\GETBASE \EM.CURSORY 0) BITSPERWORD]) ) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION) (RPAQ \SFPosition (CREATEPOSITION)) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (BLOCKRECORD KEYBOARDEVENT ((W0 WORD) (W1 WORD) (W2 WORD) (W3 WORD) (WU WORD) (W4 WORD) (W5 WORD) (TIME FIXP) (MOUSESTATE BITS 3) (1SHIFT FLAG) (2SHIFT FLAG) (LOCK FLAG) (CTRL FLAG) (META FLAG) (FONT FLAG) (USERMODE1 FLAG) (USERMODE2 FLAG) (USERMODE3 FLAG) (ALTGRAPH FLAG) (DEADKEYPENDING FLAG) (* ; "T if the last key was a dead (accent) key, and we should generate an accented character if possible.") (NIL BITS 2) (MOUSEX WORD) (MOUSEY WORD) (DEADKEY-ALIST XPOINTER) (* ;  "The ALIST describing accents possible from teh last dead key.") ) (CREATE (\ALLOCBLOCK (FOLDHI \KEYBOARDEVENT.SIZE WORDSPERCELL))) W0 _ ALLUP W1 _ ALLUP W2 _ ALLUP W3 _ ALLUP W4 _ ALLUP W5 _ ALLUP WU _ ALLUP MOUSESTATE _ \DLMOUSE.UP [ACCESSFNS KEYBOARDEVENT ((SIZE (INDEXF (fetch MOUSEY of DATUM))) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) DATUM) (fetch (KEYBOARDEVENT 2SHIFT) DATUM))) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT SHIFT) DATUM) (fetch (KEYBOARDEVENT LOCK) DATUM] LOCK _ (XKEYDOWNP 'LOCK) TIME _ 0 DEADKEYPENDING _ NIL) ) (DECLARE%: EVAL@COMPILE (RPAQ \KEYBOARDEVENT.FIRST NRINGINDEXWORDS) (RPAQQ \KEYBOARDEVENT.SIZE 14) (RPAQ \KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383))) [CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] ) ) (DEFINEQ (MACHINETYPE [LAMBDA NIL (* ; "Edited 30-Mar-88 10:27 by Snow") (SELECTC (fetch MachineType of \InterfacePage) (\DORADO 'DORADO) (\DANDELION 'DANDELION) (\DAYBREAK (* This is \DAYBREAK internally) 'DOVE) (\MAIKO 'MAIKO) NIL]) (SETMAINTPANEL [LAMBDA (N) (* mpl "21-Jul-85 18:15") (SELECTC \MACHINETYPE (\DANDELION (replace DLMAINTPANEL of \IOPAGE with N)) (\DOLPHIN ((OPCODES MISC1 3) (\DTEST N 'SMALLP))) (\DAYBREAK ((OPCODES DOVEMISC 2) (\DTEST N 'SMALLP))) NIL]) ) (* ; "DLion beeper") (DEFINEQ (BEEPON [LAMBDA (FREQ) (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPFREQ of \IOPAGE with (IQUOTIENT 1843200 (IMAX FREQ 29))) (replace DLBEEPCMD of \IOPAGE with 32768)) (\DAYBREAK (\DoveMisc.BeepOn FREQ)) (\MAIKO (SUBRCALL KEYBOARDBEEP T FREQ)) (PROGN NIL)) NIL]) (BEEPOFF [LAMBDA NIL (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPCMD of \IOPAGE with 32769)) (\DAYBREAK (\DoveMisc.BeepOff)) (\MAIKO (SUBRCALL KEYBOARDBEEP NIL NIL)) (PROGN NIL)) NIL]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (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) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (WITHOUT-INTERRUPTS [NLAMBDA (FORM) (* lmm "18-Apr-85 02:53") (PROG (VAL) (\KEYBOARDOFF) (SETQ VAL (DISPLAYDOWN FORM)) (\KEYBOARDON) (RETURN VAL]) ) (* ; "Compile locked fns together for locality") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN) ) (DECLARE%: DONTCOPY (ADDTOVAR INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND)))) (ADDTOVAR RDCOMS (FNS \SETIOPOINTERS)) ) (PUTPROPS LLKEY FILETYPE :BCOMPL) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML WITHOUT-INTERRUPTS) (ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT) ) (PUTPROPS LLKEY COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1989 1990 1992 1999 1920 2000 2018 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (16213 23529 (BKSYSCHARCODE 16223 . 16572) (\CLEARSYSBUF 16574 . 17132) (\GETKEY 17134 . 18309) (\NSYSBUFCHARS 18311 . 19053) (\SAVESYSBUF 19055 . 20664) (\SYSBUFP 20666 . 20970) ( \GETSYSBUF 20972 . 21152) (\PUTSYSBUF 21154 . 22367) (\PEEKSYSBUF 22369 . 23527)) (24826 61660 ( \KEYBOARDINIT 24836 . 26556) (\KEYBOARDEVENTFN 26558 . 31258) (\ALLOCLOCKED 31260 . 31850) ( \SETIOPOINTERS 31852 . 36388) (\KEYBOARDOFF 36390 . 36804) (\KEYBOARDON 36806 . 37185) (\KEYHANDLER 37187 . 37318) (\KEYHANDLER1 37320 . 44766) (\RESETKEYBOARD 44768 . 46416) (\DOMOUSECHORDING 46418 . 50238) (\DOTRANSITIONS 50240 . 50917) (\DECODETRANSITION 50919 . 57608) (MOUSECHORDWAIT 57610 . 58274) (\TRACKCURSOR 58276 . 61658)) (95402 118761 (KEYACTION 95412 . 96256) (KEYACTIONTABLE 96258 . 97440) (KEYBOARDTYPE 97442 . 98544) (RESETKEYACTION 98546 . 100305) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 100307 . 103714) (\KEYACTION1 103716 . 114337) (KEYDOWNP 114339 . 114674) (KEYNUMBERP 114676 . 114874) (\KEYNAMETONUMBER 114876 . 115570) (MODIFY.KEYACTIONS 115572 . 116433) (METASHIFT 116435 . 117379) ( SHIFTDOWNP 117381 . 118759)) (118824 119120 (SETUP.OFFICE.KEYBOARD 118834 . 119118)) (121823 123535 ( \INIT.KEYBOARD.STREAM 121833 . 123533)) (123800 140177 (\DOBUFFEREDTRANSITIONS 123810 . 139240) ( \TIMER.INTERRUPTFRAME 139242 . 139967) (\PERIODIC.INTERRUPTFRAME 139969 . 140175)) (140431 144508 ( \HARDCURSORUP 140441 . 142323) (\HARDCURSORPOSITION 142325 . 144361) (\HARDCURSORDOWN 144363 . 144506) ) (144509 168569 (CURSOR.INIT 144519 . 148219) (\CURSORDESTINATION 148221 . 150539) (\SOFTCURSORUP 150541 . 155795) (\SOFTCURSORUPCURRENT 155797 . 162833) (\SOFTCURSORPOSITION 162835 . 163600) ( \SOFTCURSORDOWN 163602 . 164310) (CURSORPROP 164312 . 164654) (GETCURSORPROP 164656 . 164844) ( PUTCURSORPROP 164846 . 166001) (\CURSORBITSPERPIXEL 166003 . 168119) (\CURSORIMAGEPROPNAME 168121 . 168345) (\CURSORMASKPROPNAME 168347 . 168567)) (168570 186520 (CURSORCREATE 168580 . 171255) (CURSOR 171257 . 173069) (\CURSOR-VALID-P 173071 . 174158) (\CURSORUP 174160 . 175875) (\CURSORPOSITION 175877 . 178405) (\CURSORDOWN 178407 . 178640) (ADJUSTCURSORPOSITION 178642 . 179220) (CURSORPOSITION 179222 . 180764) (CURSORSCREEN 180766 . 181422) (CURSOREXIT 181424 . 182815) (FLIPCURSOR 182817 . 183943) ( FLIPCURSORBAR 183945 . 184925) (LASTMOUSEX 184927 . 185181) (LASTMOUSEY 185183 . 185437) ( CREATEPOSITION 185439 . 185645) (POSITIONP 185647 . 185931) (CURSORHOTSPOT 185933 . 186518)) (187758 189306 (GETMOUSESTATE 187768 . 188427) (\EVENTKEYS 188429 . 189304)) (195733 196529 (MACHINETYPE 195743 . 196143) (SETMAINTPANEL 196145 . 196527)) (196559 197698 (BEEPON 196569 . 197222) (BEEPOFF 197224 . 197696)) (198149 198412 (WITHOUT-INTERRUPTS 198159 . 198410))))) STOP \ No newline at end of file + NIL]) (LASTMOUSEX [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse x position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMX LASTMOUSEX (\GETDISPLAYDATA DS]) (LASTMOUSEY [LAMBDA (DS) (* rmk%: "30-AUG-83 13:07") (* returns the mouse y position in the coordinates of the DisplayStream DS) (\DSPUNTRANSFORMY LASTMOUSEY (\GETDISPLAYDATA DS]) (CREATEPOSITION [LAMBDA (XCOORD YCOORD) (* rmk%: " 6-Aug-84 13:43") (create POSITION XCOORD _ (OR XCOORD 0) YCOORD _ (OR YCOORD 0]) (POSITIONP [LAMBDA (X) (* rrb "25-AUG-82 11:04") (* is X a position? For now just a cons check but should be made a datatype.) (AND (LISTP X) (NUMBERP (CAR X)) (NUMBERP (CDR X)) X]) (CURSORHOTSPOT [LAMBDA (NEWPOSITION) (* gbn%: "26-Jan-86 15:36") (* returns the current cursor hot spot and sets the hot spot to NEWPOSITON if  one is given.) (PROG1 (create POSITION XCOORD _ \CURSORHOTSPOTX YCOORD _ \CURSORHOTSPOTY) (COND ((POSITIONP NEWPOSITION) (SETQ \CURSORHOTSPOTX (fetch (POSITION YCOORD) of NEWPOSITION)) (SETQ \CURSORHOTSPOTY (fetch (POSITION YCOORD) of NEWPOSITION]) ) (PUTPROPS CURSORPROP ARGNAMES (NIL (CURSOR PROP {NEWVALUE}) . U)) (RPAQ? \CURSORHOTSPOTX 0) (RPAQ? \CURSORHOTSPOTY 0) (RPAQ? \CURRENTCURSOR NIL) (RPAQ? \SOFTCURSORWIDTH NIL) (RPAQ? \SOFTCURSORHEIGHT NIL) (RPAQ? \SOFTCURSORP NIL) (RPAQ? \SOFTCURSORUPP NIL) (RPAQ? \SOFTCURSORUPBM NIL) (RPAQ? \SOFTCURSORDOWNBM NIL) (RPAQ? \SOFTCURSORBBT1 NIL) (RPAQ? \SOFTCURSORBBT2 NIL) (RPAQ? \SOFTCURSORBBT3 NIL) (RPAQ? \SOFTCURSORBBT4 NIL) (RPAQ? \SOFTCURSORBBT5 NIL) (RPAQ? \SOFTCURSORBBT6 NIL) (RPAQ? \CURSORSCREEN NIL) (RPAQ? \CURSORDESTINATION NIL) (RPAQ? \CURSORDESTHEIGHT 808) (RPAQ? \CURSORDESTWIDTH 1024) (RPAQ? \CURSORDESTRASTERWIDTH 64) (RPAQ? \CURSORDESTLINE 0) (RPAQ? \CURSORDESTLINEBASE NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE) ) (DEFINEQ (GETMOUSESTATE [LAMBDA NIL (* kbr%: " 6-Jul-85 14:16") (* Reads the current state of the  mouse and keyboard) (SETQ LASTMOUSEX (\XMOUSECOORD)) (SETQ LASTMOUSEY (\YMOUSECOORD)) (SETQ LASTMOUSEBUTTONS (LOGXOR (LOGAND (fetch (KEYBOARDEVENT WU) of \LASTKEYSTATE) \MOUSE.ALLBITS) \MOUSE.ALLBITS)) (SETQ LASTKEYBOARD (\EVENTKEYS)) (SETQ LASTSCREEN \CURSORSCREEN) NIL]) (\EVENTKEYS [LAMBDA NIL (* rmk%: " 4-JUN-81 22:58") (* Returns the state of the various keys that are represented in mouse events) (LOGOR (COND ((KEYDOWNP 'LOCK) 128) (T 0)) (COND ((KEYDOWNP 'LSHIFT) 64) (T 0)) (COND ((KEYDOWNP 'CTRL) 32) (T 0)) (COND ((KEYDOWNP 'RSHIFT) 8) (T 0)) (COND ((KEYDOWNP 'BLANK-TOP) 4) (T 0)) (COND ((KEYDOWNP 'BLANK-MIDDLE) 2) (T 0)) (COND ((KEYDOWNP 'BLANK-BOTTOM) 1) (T 0]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE (RPAQQ HARDCURSORHEIGHT 16) (RPAQQ HARDCURSORWIDTH 16) (CONSTANTS (HARDCURSORHEIGHT 16) (HARDCURSORWIDTH 16)) ) (DECLARE%: EVAL@COMPILE (ADDTOVAR GLOBALVARS LASTMOUSEX LASTMOUSEY LASTSCREEN LASTMOUSEBUTTONS LASTMOUSETIME LASTKEYBOARD) ) (* "END EXPORTED DEFINITIONS") (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE [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] ) (* "END EXPORTED DEFINITIONS") (DECLARE%: EVAL@COMPILE [PUTPROPS \XMOUSECOORD MACRO (NIL (IPLUS \CURSORHOTSPOTX (SIGNED (\GETBASE \EM.CURSORX 0) BITSPERWORD] [PUTPROPS \YMOUSECOORD MACRO (NIL (IDIFFERENCE (SUB1 \CURSORDESTHEIGHT) (IPLUS \CURSORHOTSPOTY (SIGNED (\GETBASE \EM.CURSORY 0) BITSPERWORD] ) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (MOVD 'CURSOR 'SETCURSOR) (MOVD '\CURSORPOSITION '\SETCURSORPOSITION) (RPAQ \SFPosition (CREATEPOSITION)) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (BLOCKRECORD KEYBOARDEVENT ((W0 WORD) (W1 WORD) (W2 WORD) (W3 WORD) (WU WORD) (W4 WORD) (W5 WORD) (TIME FIXP) (MOUSESTATE BITS 3) (1SHIFT FLAG) (2SHIFT FLAG) (LOCK FLAG) (CTRL FLAG) (META FLAG) (FONT FLAG) (USERMODE1 FLAG) (USERMODE2 FLAG) (USERMODE3 FLAG) (ALTGRAPH FLAG) (DEADKEYPENDING FLAG) (* ; "T if the last key was a dead (accent) key, and we should generate an accented character if possible.") (NIL BITS 2) (MOUSEX WORD) (MOUSEY WORD) (DEADKEY-ALIST XPOINTER) (* ;  "The ALIST describing accents possible from teh last dead key.") ) (CREATE (\ALLOCBLOCK (FOLDHI \KEYBOARDEVENT.SIZE WORDSPERCELL))) W0 _ ALLUP W1 _ ALLUP W2 _ ALLUP W3 _ ALLUP W4 _ ALLUP W5 _ ALLUP WU _ ALLUP MOUSESTATE _ \DLMOUSE.UP [ACCESSFNS KEYBOARDEVENT ((SIZE (INDEXF (fetch MOUSEY of DATUM))) (SHIFT (OR (fetch (KEYBOARDEVENT 1SHIFT) DATUM) (fetch (KEYBOARDEVENT 2SHIFT) DATUM))) (SHIFTORLOCK (OR (fetch (KEYBOARDEVENT SHIFT) DATUM) (fetch (KEYBOARDEVENT LOCK) DATUM] LOCK _ (XKEYDOWNP 'LOCK) TIME _ 0 DEADKEYPENDING _ NIL) ) (DECLARE%: EVAL@COMPILE (RPAQ \KEYBOARDEVENT.FIRST NRINGINDEXWORDS) (RPAQQ \KEYBOARDEVENT.SIZE 14) (RPAQ \KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383))) [CONSTANTS (\KEYBOARDEVENT.FIRST NRINGINDEXWORDS) \KEYBOARDEVENT.SIZE (\KEYBOARDEVENT.LAST (PLUS \KEYBOARDEVENT.FIRST (TIMES \KEYBOARDEVENT.SIZE 383] ) ) (DEFINEQ (MACHINETYPE [LAMBDA NIL (* ; "Edited 30-Mar-88 10:27 by Snow") (SELECTC (fetch MachineType of \InterfacePage) (\DORADO 'DORADO) (\DANDELION 'DANDELION) (\DAYBREAK (* This is \DAYBREAK internally) 'DOVE) (\MAIKO 'MAIKO) NIL]) (SETMAINTPANEL [LAMBDA (N) (* mpl "21-Jul-85 18:15") (SELECTC \MACHINETYPE (\DANDELION (replace DLMAINTPANEL of \IOPAGE with N)) (\DOLPHIN ((OPCODES MISC1 3) (\DTEST N 'SMALLP))) (\DAYBREAK ((OPCODES DOVEMISC 2) (\DTEST N 'SMALLP))) NIL]) ) (* ; "DLion beeper") (DEFINEQ (BEEPON [LAMBDA (FREQ) (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPFREQ of \IOPAGE with (IQUOTIENT 1843200 (IMAX FREQ 29))) (replace DLBEEPCMD of \IOPAGE with 32768)) (\DAYBREAK (\DoveMisc.BeepOn FREQ)) (\MAIKO (SUBRCALL KEYBOARDBEEP T FREQ)) (PROGN NIL)) NIL]) (BEEPOFF [LAMBDA NIL (* ; "Edited 10-May-88 18:17 by MASINTER") (SELECTC \MACHINETYPE (\DANDELION (while (IGEQ (fetch DLBEEPCMD of \IOPAGE) 32768) do (BLOCK)) (replace DLBEEPCMD of \IOPAGE with 32769)) (\DAYBREAK (\DoveMisc.BeepOff)) (\MAIKO (SUBRCALL KEYBOARDBEEP NIL NIL)) (PROGN NIL)) NIL]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY (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) ) (* "END EXPORTED DEFINITIONS") (DEFINEQ (WITHOUT-INTERRUPTS [NLAMBDA (FORM) (* lmm "18-Apr-85 02:53") (PROG (VAL) (\KEYBOARDOFF) (SETQ VAL (DISPLAYDOWN FORM)) (\KEYBOARDON) (RETURN VAL]) ) (* ; "Compile locked fns together for locality") (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: NIL FLIPCURSORBAR \KEYHANDLER \KEYHANDLER1 \TRACKCURSOR \PERIODIC.INTERRUPTFRAME \TIMER.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \DOTRANSITIONS \DECODETRANSITION \EVENTKEYS \HARDCURSORUP \DOMOUSECHORDING \KEYBOARDOFF \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN) ) (DECLARE%: DONTCOPY (ADDTOVAR INEWCOMS (ALLOCAL (ADDVARS (LOCKEDFNS FLIPCURSORBAR \SETIOPOINTERS \KEYHANDLER \KEYHANDLER1 \CONTEXTAPPLY \LOCKPAGES \DECODETRANSITION \SMASHLINK \INCUSECOUNT LLSH \MAKEFREEBLOCK \DECUSECOUNT \MAKENUMBER \ADDBASE \PERIODIC.INTERRUPTFRAME \DOBUFFEREDTRANSITIONS \TIMER.INTERRUPTFRAME \CAUSEINTERRUPT \DOMOUSECHORDING \KEYBOARDOFF \TRACKCURSOR \HARDCURSORUP \HARDCURSORPOSITION \HARDCURSORDOWN \SOFTCURSORUP \SOFTCURSORUPCURRENT \SOFTCURSORPOSITION \SOFTCURSORDOWN \SOFTCURSORPILOTBITBLT) (LOCKEDVARS \InterfacePage \CURSORHOTSPOTX \CURSORHOTSPOTY \CURRENTCURSOR \SOFTCURSORWIDTH \SOFTCURSORHEIGHT \SOFTCURSORP \SOFTCURSORUPP \SOFTCURSORUPBM \SOFTCURSORDOWNBM \SOFTCURSORBBT1 \SOFTCURSORBBT2 \SOFTCURSORBBT3 \SOFTCURSORBBT4 \SOFTCURSORBBT5 \SOFTCURSORBBT6 \CURSORDESTINATION \CURSORDESTHEIGHT \CURSORDESTWIDTH \CURSORDESTRASTERWIDTH \CURSORDESTLINE \CURSORDESTLINEBASE \PENDINGINTERRUPT \PERIODIC.INTERRUPT \PERIODIC.INTERRUPT.FREQUENCY \LASTUSERACTION \MOUSECHORDTICKS \KEYBOARDEVENTQUEUE \KEYBUFFERING SCREENWIDTH SCREENHEIGHT \TIMER.INTERRUPT.PENDING \EM.MOUSEX \EM.MOUSEY \EM.CURSORX \EM.CURSORY \EM.UTILIN \EM.REALUTILIN \EM.KBDAD0 \EM.KBDAD1 \EM.KBDAD2 \EM.KBDAD3 \EM.DISPINTERRUPT \EM.CURSORBITMAP \EM.KBDAD4 \EM.KBDAD5 \MISCSTATS \RCLKSECOND)))) (ADDTOVAR RDCOMS (FNS \SETIOPOINTERS)) ) (PUTPROPS LLKEY FILETYPE :BCOMPL) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML WITHOUT-INTERRUPTS) (ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT) ) (PUTPROPS LLKEY COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1989 1990 1992 1999 1920 2000 2018 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (14777 22093 (BKSYSCHARCODE 14787 . 15136) (\CLEARSYSBUF 15138 . 15696) (\GETKEY 15698 . 16873) (\NSYSBUFCHARS 16875 . 17617) (\SAVESYSBUF 17619 . 19228) (\SYSBUFP 19230 . 19534) ( \GETSYSBUF 19536 . 19716) (\PUTSYSBUF 19718 . 20931) (\PEEKSYSBUF 20933 . 22091)) (23351 60185 ( \KEYBOARDINIT 23361 . 25081) (\KEYBOARDEVENTFN 25083 . 29783) (\ALLOCLOCKED 29785 . 30375) ( \SETIOPOINTERS 30377 . 34913) (\KEYBOARDOFF 34915 . 35329) (\KEYBOARDON 35331 . 35710) (\KEYHANDLER 35712 . 35843) (\KEYHANDLER1 35845 . 43291) (\RESETKEYBOARD 43293 . 44941) (\DOMOUSECHORDING 44943 . 48763) (\DOTRANSITIONS 48765 . 49442) (\DECODETRANSITION 49444 . 56133) (MOUSECHORDWAIT 56135 . 56799) (\TRACKCURSOR 56801 . 60183)) (102601 124455 (KEYACTION 102611 . 103455) (KEYACTIONTABLE 103457 . 104639) (KEYBOARDTYPE 104641 . 105743) (RESETKEYACTION 105745 . 107504) ( \KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 107506 . 109408) (\KEYACTION1 109410 . 120031) (KEYDOWNP 120033 . 120368) (KEYNUMBERP 120370 . 120568) (\KEYNAMETONUMBER 120570 . 121264) (MODIFY.KEYACTIONS 121266 . 122127) (METASHIFT 122129 . 123073) (SHIFTDOWNP 123075 . 124453)) (124518 124814 ( SETUP.OFFICE.KEYBOARD 124528 . 124812)) (127754 129466 (\INIT.KEYBOARD.STREAM 127764 . 129464)) ( 129731 146108 (\DOBUFFEREDTRANSITIONS 129741 . 145171) (\TIMER.INTERRUPTFRAME 145173 . 145898) ( \PERIODIC.INTERRUPTFRAME 145900 . 146106)) (146362 150439 (\HARDCURSORUP 146372 . 148254) ( \HARDCURSORPOSITION 148256 . 150292) (\HARDCURSORDOWN 150294 . 150437)) (150440 174500 (CURSOR.INIT 150450 . 154150) (\CURSORDESTINATION 154152 . 156470) (\SOFTCURSORUP 156472 . 161726) ( \SOFTCURSORUPCURRENT 161728 . 168764) (\SOFTCURSORPOSITION 168766 . 169531) (\SOFTCURSORDOWN 169533 . 170241) (CURSORPROP 170243 . 170585) (GETCURSORPROP 170587 . 170775) (PUTCURSORPROP 170777 . 171932) ( \CURSORBITSPERPIXEL 171934 . 174050) (\CURSORIMAGEPROPNAME 174052 . 174276) (\CURSORMASKPROPNAME 174278 . 174498)) (174501 192451 (CURSORCREATE 174511 . 177186) (CURSOR 177188 . 179000) ( \CURSOR-VALID-P 179002 . 180089) (\CURSORUP 180091 . 181806) (\CURSORPOSITION 181808 . 184336) ( \CURSORDOWN 184338 . 184571) (ADJUSTCURSORPOSITION 184573 . 185151) (CURSORPOSITION 185153 . 186695) ( CURSORSCREEN 186697 . 187353) (CURSOREXIT 187355 . 188746) (FLIPCURSOR 188748 . 189874) (FLIPCURSORBAR 189876 . 190856) (LASTMOUSEX 190858 . 191112) (LASTMOUSEY 191114 . 191368) (CREATEPOSITION 191370 . 191576) (POSITIONP 191578 . 191862) (CURSORHOTSPOT 191864 . 192449)) (193685 195233 (GETMOUSESTATE 193695 . 194354) (\EVENTKEYS 194356 . 195231)) (201094 201890 (MACHINETYPE 201104 . 201504) ( SETMAINTPANEL 201506 . 201888)) (201920 203059 (BEEPON 201930 . 202583) (BEEPOFF 202585 . 203057)) ( 203510 203773 (WITHOUT-INTERRUPTS 203520 . 203771))))) STOP \ No newline at end of file diff --git a/sources/LLKEY.LCOM b/sources/LLKEY.LCOM index 7f7c86870954f115261402af2422e2378ab2e855..4a7efdcf247855e4c2b10073630a0b6d13706528 100644 GIT binary patch delta 439 zcmey}#B%=|^Mr6=V_mn@BwZr|BSQrvV=E&QD-+9!S@woTnhLy1hRBizR)$7aCWcB1 zNkys2`MCv|IjJcM$r*`x>8Zu4Rtl3JZdQxU%meE3%TLP8OHn}9tf!}^q>z$W0@Q)c zP$MNxUJW--A6MrfSH}=n7c@msXHBkQ(w8w(FfuSRGcxH**lbqZ@PBMSq=y=4GC}z@&!8I!a^a&Gp{7IC@nEL zH6SrPRl(c{UBuK7UBuV`O@sqzl!B3wg2rUV_fnH>^Tas}O%#+OloU)h$L7gR1^^tF Bd3yi= delta 1311 zcmZWoOKTHR6mGOi6~}gARRr}IEln3GnaMlgV$9r0hs@jwGdF!eK+|Sy17lOtRtN|I z@dqdu@dxzbQm~>+SMCIVKtXY-BGio=H=dhm9&NJ--~H})&UfbAbH4pO{qO1U^Ev)K zH2%WB8%s}t6ozb6U28^_SS$u|CKr=)aU~3kO>e33XszyhHCS4yt}c7)6FL5V>&|F} zx(n{TvYww&9Tz12V=Kj9?R>ro^;OJfc{Sf_L3}z1`lj!L+gfjIZUChC#n9#3kc#Tw zB6=w@$f;a1nUj;@DJh~GCdoTQWklm&Ls$9zQ1o&dl$fj}6J2}QXiVfJ{$%@l8zQs9 z+cb-0A#YnQsHRyiK_$-|(^B0cR4l^OdjU3Zp=6r=yj~ETK$rrkyW#g9LVG z483>JPcE*4eAGT7lRE*28QKsW1Er)4-a&8*u0$8Qt^xrW4{1Qx4n-NoWnJ6j{^PjJuozbb7=?`1C`Tkb+f>bFH zQVixDhdjzZ?Lc=c-30bYb`da%^GX1d013t zK#P0d3ruJGI1z_3HRjvV0%0Z9v2ai2bPDs@v!vHy7xy?BaJDNpAn2u_G3{}wqCmx1 z-SC Date: Sun, 14 Feb 2021 00:42:47 -0800 Subject: [PATCH 15/37] loadups to go with new files --- library/EXPORTS.ALL | 2 +- loadups/WHEREIS.HASH | Bin 2773299 -> 2760339 bytes loadups/full.sysout | Bin 0 -> 10059776 bytes loadups/lisp.sysout | Bin 0 -> 8241152 bytes 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 loadups/full.sysout create mode 100644 loadups/lisp.sysout diff --git a/library/EXPORTS.ALL b/library/EXPORTS.ALL index fcedfd7b..9fd11fac 100644 --- a/library/EXPORTS.ALL +++ b/library/EXPORTS.ALL @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP") (LISPXPRIN1 "EXPORTS GATHERED FROM {DSK}larry>ilisp>medley>sources> ON 12-Feb-2021 19:12:25" T) (LISPXTERPRI T) (PUTPROP (QUOTE FILESETS) (QUOTE IMPORTDATE) (IDATE "12-Feb-2021 18:10:20")) (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| 32766) (* \; "Was 37776Q pre 16-meg intiial") (|\\MaxMDSPage| 524285) (|\\DefaultSecondMDSPage| 65532) (|\\MDSIncrement| 512) (|\\PagesPerMDSUnit| 2) (* \; "(FOLDLO \\MDSIncrement WORDSPERPAGE)") (* |;;| "arrays") (\\ARRAYSPACE (46 0)) ( |\\FirstArraySegment| 46) (|\\FirstArrayPage| 11776) (\\ARRAYSPACE2 (64 0)) ( |\\DefaultSecondArrayPage| 32768) (* \; "Was 40000Q before 16meg initial") (* |;;| "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| 32766) (RPAQQ |\\MaxMDSPage| 524285) (RPAQQ |\\DefaultSecondMDSPage| 65532) (RPAQQ |\\MDSIncrement| 512) (RPAQQ |\\PagesPerMDSUnit| 2) (RPAQQ |\\FirstArraySegment| 46) (RPAQQ |\\FirstArrayPage| 11776) (RPAQQ |\\DefaultSecondArrayPage| 32768) (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| 32766) (|\\MaxMDSPage| 524285) (|\\DefaultSecondMDSPage| 65532) (|\\MDSIncrement| 512 ) (|\\PagesPerMDSUnit| 2) (|\\FirstArraySegment| 46) (|\\FirstArrayPage| 11776) ( |\\DefaultSecondArrayPage| 32768) (|\\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 ( LIST (QUOTE OPCODES) (QUOTE GCONST) 0 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 "12-Feb-2021 17:35:19")) (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 "12-Feb-2021 16:52:07")) (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 "12-Feb-2021 16:52:07")) (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 "12-Feb-2021 16:52:07")) (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 "12-Feb-2021 16:52:07")) (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-Feb-2021 17:06:41")) (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 +(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP") (LISPXPRIN1 "EXPORTS GATHERED FROM {DSK}larry>ilisp>medley>sources> ON 14-Feb-2021 00:15:53" T) (LISPXTERPRI T) (PUTPROP (QUOTE FILESETS) (QUOTE IMPORTDATE) (IDATE " 7-Feb-2021 20:03:00")) (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| 32766) (* \; "Was 37776Q pre 16-meg intiial") (|\\MaxMDSPage| 524285) (|\\DefaultSecondMDSPage| 65532) (|\\MDSIncrement| 512) (|\\PagesPerMDSUnit| 2) (* \; "(FOLDLO \\MDSIncrement WORDSPERPAGE)") (* |;;| "arrays") (\\ARRAYSPACE (46 0)) ( |\\FirstArraySegment| 46) (|\\FirstArrayPage| 11776) (\\ARRAYSPACE2 (64 0)) ( |\\DefaultSecondArrayPage| 32768) (* \; "Was 40000Q before 16meg initial") (* |;;| "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| 32766) (RPAQQ |\\MaxMDSPage| 524285) (RPAQQ |\\DefaultSecondMDSPage| 65532) (RPAQQ |\\MDSIncrement| 512) (RPAQQ |\\PagesPerMDSUnit| 2) (RPAQQ |\\FirstArraySegment| 46) (RPAQQ |\\FirstArrayPage| 11776) (RPAQQ |\\DefaultSecondArrayPage| 32768) (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| 32766) (|\\MaxMDSPage| 524285) (|\\DefaultSecondMDSPage| 65532) (|\\MDSIncrement| 512 ) (|\\PagesPerMDSUnit| 2) (|\\FirstArraySegment| 46) (|\\FirstArrayPage| 11776) ( |\\DefaultSecondArrayPage| 32768) (|\\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 ( LIST (QUOTE OPCODES) (QUOTE GCONST) 0 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 " 7-Feb-2021 11:52:02")) (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 "12-Feb-2021 22:55:58")) (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 " 9-Feb-2021 11:39:44")) (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 "13-Feb-2021 23:24:49")) (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 "10-Feb-2021 22:44:43")) (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-Feb-2021 17:06:41")) (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/loadups/WHEREIS.HASH b/loadups/WHEREIS.HASH index ff8d8d387af37bc56a41e7e9208740d21b7caa02..f69841ab30649600fe70ea837db6de34004747a2 100644 GIT binary patch delta 363283 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 z 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 z zou%*j|HKA4^S6Va0=z{rbpFx?Vg6f&<3Ka!1;ONyWa615OHN3tkrZF6){Bx1FuD#j zV9L+12R3*9f4=K+0Pn!s1>9NMUyyq>1g|6S)AXo-GmHxN$5iN5D>0#ZQvCD!g#P%H z4Bd+_N=={-KZ|-=92#|WvmOI_4DLF#hbA}38HzunOI06?+N{>8IwLKe5*!Xe(shAf zu-9{XmNOz+x7}zAzNW2v3>`LjK-z$w1D}-PP{*9f%6OF4fG&L~DtIN=s!=08v3fP# zSdbLV#jcCV&dSMk%KiUS{by0IR{2kb056Z2XF;^AQFLHzQq80qwc=|gCq`ATnN+P- td{V81=i4TyO=i=qOftI1_agKF<`LKh^ScDg@GN|jjhE!NR*a;V=Skq!dD<7&K4i59axnowGuk_q9 zT@P&$v-He={M{n5p6ef>@MB3j%;_1D6`rs!hT${B70FPeY+Ezd_l%X|ZjEt++1)EE z-H2Rj>ABD3jatjn#~SJ7OS~Z~!N_BASPUGHS@_FRO61=WgDa6?vT*)#tyxHUOdF_1&82Qxkyl=d7V$ujYZN#8s3I#(r;^cG z&png8aNpMLwv*QKD@|TDPt#?d4ukdv!+Ws-9iPYGlQR*b<2fSqj5mQ2s*FiWluFQN zp>;gGdmxzL2&?~6lrwEzBwjWNLaooPg2Gq5qZlW2F1BWzBRY?%{}9nuTg`LzF6Eba zSU1+mZ9PyYw28?p6dMmjW1Np5&%R2LQc2&p_@I+-H2&91=O{VrKXZUcKgXFUwEngV z+qkX%TzWBb)Ju9qm1$UOtsOnZVKni>6q2%vL zk30mSctoEvB>wz)Xj`J}q`g$Gdq-;KwZu4<*WkT2UkHwS`QWIhKk8U(=G9v6G!u%k zaiR(zMhk2lV^@fH{(iR{v10!=lJ{5Fl{^^wba}dC@0D1e>V-gZn#-2HvFu-`?KhLiRr?`Trgg1A9-r!8hLngS8va~fQ68qP zYT|#m-$#&93Sd9#9D4N3CD^d(Umx7h%SmcbrS+ypY_BiLTTAOmPaH4l>ByS(U;kDV zR^IZ$P@h=rI!2AE--V& zX6>PN75E?NL)79w-!X1LSFqS}*ucG-2E%4Vu;_#cqEj5b6?oWTcC-XXWH&nk_FHxFP;V2(|&NmudY#53P zURiOm7{R3WaHc5y`5X;u1;jzUQXn5y)sI!y=p8pC4ldn&aBZSLa#}N&_1lti}HB~ERf<@g37$c|Ukh{VCZIC7XuTUkdHNGkoOj2BW7yO{`(?_4xy z{P4reW`3v^6a%B#UrO8hyfA(aBn<-N&^}JCD*<`rWfZCDP6$rKx#4?1vby7@yKxa| znLL=-|JbCJaCT@BjUQp6n=3d-C@oL0?x*lhE;jUrR{^Tjt2gu?JH#6m%ZB6oAU&=x z3dF7u6X&MNuRQ6~hJ$*pB9_&AiSl1=dO};C>csI+VD8fKxuod(I|=pSaZNmEA?Mc>IYGLKgXZ((M53>#4<)JbLu1WJ1N}0a)4G#G^>GX0|0^Jm(vM?be#! zTFaGBt_a95V~;i%#oMW&fEoMJe2}nP2olfFq0-PeY>U@o(N0ne#XA!g*E3@0WiluA zN(&9I{DQjZXOk2-+DxdxY@5(XhSC+46F6UVx+b^fbms-uw`zQ18qDZs!jp@X?L;hz zU&+%XUQa3#mHUp4M&3*+=I|gv#ce&6nARc^JD-Z~k7J(QKMEUc7Ye&-nJ*NmZv8qC z0~FD4_l-lIE>cfs2|XmT^lu`k#;0GR7s#F8#4$=RB+(@O?;b4Ti-!7P*}-u1Y!Ct0 zsw9{^QS&K+dHGsuksL|oX?F#|!zsujA#(gQ^Yz3aA3t=+ufeI6LIrnzkV^zl-zi>? zq*S6ox3c5`@$eci192uzNFER4aKDZMzfHt0=X;KB-kvU_F7ejC8tE#}uw^zSN^w&n zx04T7D^;#|67N0r`McQ?Wz}Iu4HcqWiF_0K60`DGrOI8+A(I7;8pApXTf^V=2R!&+ z7Cb&LsKx`63JbBRvN;Q1Sxgx%?_N%|5|m0?KfE*#cGAuUtBi{~@zxeuvRj|`v! zd%CO8c^fxw27R#{(YUoB8!H2JsPnj{CVbk`f1tu^R!JOb;N z3C{7#udOdPa5uuZ6K81hE*XZ zeMeg}hDTWHvw`2^NF!SQ;i`F+@y1rxQU^pn6y)x&BvJ7DK(g_>i6|v>oDRA7tB{c( zEa`)F!b^AH>u&MEu#@3cr1wRe%otjn$W{M$B>IdOyslf^E`TiMmOvugV?Q_abcsQ- zFBM!1dX#O*y#YhM`bWahtCXmCd_U5_L3PPiIV!;aTL%PU#U&5UUQ6;sAr?HYno;zD z{C!XHESci365M|NHyh^KgvRqkiI=F3wPS?kXg!(g=dnYBIWb{ynP?w!A8AKC3hFA2 zjp}u)ZN`fX(U@ud{4nLP5At6n4x}iEm*ZzM1?-^1uQ1^}ufE}h9v?-aqmw9ZZ4vH1 z8C?#y^W+3mKdkA2^0)L@r3=Q;*E&v&mZuG|QUk}#A)>XYtwrf5(P6i6rg}<=>_4U% z!npGw|GxgXGMhT&4JX|(B8M73+WDdIw=k?aDfPjMEtQREIE#`I{_VdKpX#5^b$Tox$A-|6xpV6s0{jbO)Iv>Ia9E>6{ znBI^GJ)wy_jrNIXXvML5gr8LBk@8++j-a1CGY?3wug9hyL~#f5I!Vl8J~eaddpvGn zKwNbV^W(Z1^xAUQ-0^9TFNzi?)6n2*h<&Cf$fe#mdhQzQsc|Yp>fGUk4$)7{IAKi; z($@3*=#2^g3rC+Nff&IiQ?kRDc0w_8&mck#7$&6X)Cy8Uo@ZmW-g`X z!8(^`8}$6&O}k5h=GM1C+Tblm1fMykF?CJ&*j))tV<@#Zb^Mvg>>-g5{;k}Dmx;-HXqbu_H z1as5^73t*Hm&E#_b*L;}Cl1xtdSIe0G|ej!H0-?lqZKS5`%3SZ(Ot$Qk+D^e)S^a zh20WtN$c+pWnJO@@nSl%X}at%uasogQU?c`vInCkQ!WSeXhJPq{5~Ac@uEjR@Im-L zi?5M>@I33{eerOOinBLC!Mt(~Q>qZ7X8MOCx;gbNdpilE#M7*>W*BqlKEF(^EyL|o zLEqk!5Y6jEC3S6K!jBbPh>Uf5B~q(vU87#-=Q$D+j+KLLQy_fvdEz89SHFJxqNUOw z+IuEUv73%BHS`$UPqc>T`E8vXs%<%QOa$_l5NtTy*#}`G$YJ5B(vry-@#j;^h}I<< z38CcSbDNT3y<-bNViz5J?+ZgY>6L~HovL^5NIY&GiDnCfx$vs{exx$byTxH_8)*VB z-|K$_Wx`9CaP}J2I4OkWV8%LkczxI5WuzLJMS~D^UCnSCR0Cb8&usKi5^&4FQ)GDa zr4rTZC`F$-o=pHme<2y!p%vl09eX|HegEAJZir3s#x*~8v^0gFz!zb74=oh-G=`19 z9FXUmPbukn&mDIxUMwHA4|Wy8HONl~O`#k(@>PdYy#?YPx*#rCy8CHzc5$R@t%!FdBfaY8nRec z<)FrmZ5xQF((Z`152&+{u!nzF2+`!>KS!vMJ|Ya>I|U2(Rr1D~*Crks_&kTQ0f_p2@YNFpZ89 zi;ks=){3J-#?KUm^EB&y$>`_#O}g=Hvc(gAL4u40e1r!-U>2E+E;qdKagvb1ZmxC((KFH0e)$VZIZL^P2^4TW3fMNtQ*O1*v#i4(0MjA#R!) z31x)3`krMt0_C1Wcy%`Abd9=sQzK9G>}8VjJANv^5cyjK%1sMTW4jbbTH(mR|JSq^ zT;lKQX2j=Nt%$nYgG7(Rk_oI=ucFDZ^Iv!&1gEqgS~!Pj(R-jtncrkX;MIf4pX+^jBf8vWW4 z5%BF3j(7e(xbl>=qLe=$E$A$Lbz<1T^ECewhe9f0r8>Ou#Hv!l!tpeH?*${q(})+( zsJxA%NQ#G>$=ZeOqPBXM3`JU6Ecz#tkS_m9>?=RO9p`F!VxdM?1jB|Iv8-7X$BW#} z1EHT6fYZk#kz7(pC6B9eMUB?eiE+mUXb@*hYvZhqFI7-j0-nreJMpSZwso_9M@(4p zm5)u0Eo+4+p}rA{O>2b~@_hA^thzO_E|z+dHR^;^6K%h z{XYWmyrtyg7TBLN2d)ivN9!v=7-SZ`O4M~S-dE;QJ^R{(VK-Wx;uR@}_enefsP0e624MYW`iRYo&rE(Yo>Bwv+u35c*I~h$kddOYrShn7 zEQtzRr=otef3`X2H&aX!?rOP0u(g>NcCAeooo(h~;Y6iZh?5eI`OgDm4=XXrJ_8^H zvY%7ONlpr}HKN%zr}s|WiH^U<`h#`Ve2}(5boED9$fd0MW>1VgE$sua_y*W*x*cuK zmPEUz-a^NC)P1|_#-AY|`4^A?UU$9Lk;=q_R2P zQT53t_dLgzu9b<8xpt`#xkc3d-gGSz6*>g79Y`P75p`A{(7~KrP>q*a z?~{CpT%#DZtK%@L$B+)fuJiO9Hsy)N+cJEch|comA2ziK!O|-Kk;$W!Kt^GnF=%fbW7gh}+*eq}Z=J2Y6O=6z$yOC7!OxV*ewJ30|wzY#)i%4{`bO#&IA);*{T z=y8yb_>9eb){DA*92$Z=x#WCGcuj4b|DO-M$5T6>nkmg`Z3H^j6{^MS=>EeE&l^%$ zjRJhAY>Z!I&Ve(TWSC-08nN(qG)lFJ#;6Wje7i;R>>1>P4xxOQ9;fzsDC(Zpj_)Ng zXjjDA>+y#8(#2g`4mN8~6Kx778u9ro*_Z=W;&5aR>Bl%*S`Qa(a#{mV+}KZp3tr8w z$31Z{LWS#jY@{n+ZT) ze@ex3aY(rDjxT$C@%gp^w}MD>zMWN}By;#VERPRBj~9OE&b+{TpX8#&<8LR*tRO;* z3Kin<9Jct_!?@7xRgyVUb_hnTLjjB}I>o==qtU;UWHJ@=cc|f%$Xz^xCC?Hix;+u( z`WzjK*n-sb7UAAFP+qvr$3|rh@nl7GU!AaOJ`OT926KuCwwaQ5TMxZP2wKwYCWC!ZMf zpD13x(tuKIuH(bhC^R{(#K~WtsMAGM^~(`|Bw96v^l=+bk!^Nh<^SHP(fId;(97<3 z{MfvE%|hCkHhYP8*;D(nNy_Z-+f5pWC(oOvL}aoXoGMYfg7S*`b=auHxCU}htR~wR z=78X_tX7I>E?JCB>qd}q+Z9MQC4U7nR{g5QunixBOStISyuDY+nQzqiHPH=2hETG5 zYlJ@peaYHbSKyy`#emT%O-<%wd68l(5}qpI_N!=cvMu{P8d-ogM=|*A60Vl z5FhB5@SNEMj(abzg}<*4D8aeZF)p3YaPG z%49Xh-_&B2e;Ajy_$6%qCeD{^#8|ec+yT=q0@uDSe&{(tTFp=TU6AA@#|$IxPawiB zOBG!v&)?uT*};H^Q( zTULkZheeAy4i33(8Izr~okn{S*E8%pthU{eTlCB42yN4Ekw~je1hsS$jO3{1wKL$* z1tP+l7`EipTJF@G?nDY#)|ysAU-JF*IK2FykhOgA^jvi!*_m9Og;*5wC$%l<8OIAk z+F-7(hRUUDy5WD*O;Xsf>qPR(W>0vYr`nI7s==q7qATDDdwaMct{9cEu_NJ2f55%X zfY4d7DD;C=tf5+HJ}n^(pNFsY7uDqN9CY1$;aXTY4}IpE`I3hDqowp?&I|q!0_G@G(TEm5YVHj`wmVZ-RY+aH6wzmv z%J9I>XHiIZB3ZB1K;93h9b`kVD(Kt_E1ZF zJ_TY!git;n7oek>x2j70^k(}o-eYDYe8+iVV_TBlt(An=Gp8rX^|BRF9EAk+*+Ng^ z5vn{7&_C)Kg{4j8dX(cN9}t-f6kcQV4a`JRC*m;u*e9(ntsaF+}wSK|e6zVMP{wEjS0@tZR zlYR(la)gns1)EV$PDmb~XCo=j^k9K6X&s5z>tdpj@9b+11BOY;Wj*HM%_d0_PXrjy zaE)+PILe)Qi68AZMc}kmu8Z4kgO9jq+iTf4ew<#e+W&nE!QBr+jXA34!-e+n_o?@z zuqn`lH_ToJ)r&<+J`)edvQ}>R=Bh%|PeNIExWe{!nKPfwX*PZ@x%k|a5=ub@YaeHqlb1a%doijb7^^c=j-@C9mv`gU;x`re5|(f`yq zb&K0Lon__|H?$cle6`0B5eO;jix2Jn@t_R}-JErT5}s^VRQzGNF!3@3KRwZ66xHQw z32FC~(@K^CgzYNnZ4Sil?($x#MMslVul8e!R#Z!1mwh7y ze{WO51I?RwV%j6_cIeE5PLZ75TO<_r%oVE7sTZ!Kq%@I6Lvmza0Eu& z=0_6@>cxu$k6Le(_U;%~W(YpKv7Za%Wms*c7diX4uzQK)-wAs*#)n!M>qBy#en38# z_Wq`ZIpkEk;?K?KeA5dh(y5ddal(XHihH4Dh_piJQtq`RX{yl6WHI92NOL(Q8=O(% zOwLH;pQykPHW~eNoI55TQR4bma=ITi_QON7uojJT1fX&mqSocdl4orBGQtm6GDwA6 zY!jT$SBB~mP{1E|enw;VQn?A>R9NmAi-C48xQ6{yjHW8pvGhigsXLA2Jo`0JNH0TS z!I6kS)D9Nn%@KFbcG$0IwjtKq>!K1n*{MK}R%Tr67KMO&L_pI5D$Hx6=sh_;4*R|e zAs@dl6fgTm;Nn3iNk_t-)rf=T3vtnMJ_v?RLZ-IO<2c-_Eo(#yT%Y`%=)+qzZfa#D#l4%v z{#C3Y)?-weN+HyGLvBg=U4jCoO(xZ~ZG_NQk74KW>I((sl^EDj;4T#yg}qG#Vg9=$ z8WnAcK#hESde~UGUwuL8O`iqP9d@y}&6mnU+`SRlrA^OpNu~Mpb31%d1pxkrL zOB*&ds?~&b%rPxaUr^$J)m%ku*;AG}h=$n~o{rp#!^a#dtf@q%iKDFDD;x!;QQ8~! zEvEO!d1BiEKMYBXmP+M6%i3q_sM-6OW@H*RRMn#0MNbs@=!T9HW6`a792%Z77LzhI zYwUxRsg!Y9c`9^5RiUR%lSMDaGsOQiqbIm-8$Cw7CqcMiORMCfjR;v!{llOtf}T?e4cFN*b%1_1@Wbx@#Unh|b8*;3&ZA4pbsFIcdELbXfyQY)f@v3PsMy-rR z*K?$#!))dPPWt4+aa5-Qr2?`3k2AeRzLCy5WvVbLw-=JPQ!yQ!*jW81b+Gf_@j3Yf zmw&oQMJooM*J3~ezARv{cvh1eO8s#iT-Z4Z4pSDpV^2dlanlQlw&z+KiP3g%y6YPS zHo6I6sy);X$?iF@d9bia9Oo?%-OY<7JZ#QE7rgS1BfpXDsrjoQttF^3SD5iGUm#v> zleT>~+M6>JieBWZUbY_%oLn#hb4C*n%3Kk4?dD3kOZ(DaULRhkz;a|OTdd)`QO%|M z_Z4<_!cTgB)>hbBp6Ai;DC7;X3oASCmFEJn@^v?N476%$#k9=#Qia^xL``_EdL1+< z7ihrf32abymb7=lND}M8%jM4YnWO*=PZ89wHdq)Ij!S)<&_ z^as53dsBtnOqomgwpWcoxqp2zEXbWFk-+s#6pp6;v6b`3a1zqRQ%UKbdYN!@qvYu& z#NROC`75D>9Lth{R9H!NjDv&osBk1+&_ZR?jBwRPxiS}v!{|v$IA5fJMrMjT!hgF; z;rz$Pnpiv7rB7FB;ml?AcB%Ku*S(Htg-^FgoNSsLK}A z+%qND)3SV;H@XfpK=Ti|$txa*;%XhcH1Na>I;RNb=I`^qlH`T|CMiAGfNHJV=!HQK zjQA2R%q36XFkFquo}zx2?E8QRG+?d(hq(_!QN6RY`kk-iSbr?CvN`sZawI(6!jHm+ z?)CFUctQYXFYxBmYz>%&T`ojy=VT=YX`-;_nP4EtQ247{jCojtcOhsuEePRzg+buq z1K1Yrjpcb~WmF8f!;a$Yr*r2ol_XqE?fbmEtn#tq=7lDnJqv!@&v2CSRib$*x$+fR z(6(SLo(>|xZNTOiTi9nwi?4RW@<;Nn>2p2gN6Pchs+5u)urXnpsF|8QFs*PRr(puH+Z~Vek}ErN`BM z@LxgF^AdL{tpi)h6QXrIY}h@L?$_T`l`C?aB z>fBx){hJ4&ca>P?At!OaSw?iVAA5Enb8R1oskY3aPTJJPEn~2mY2635#x=6I8|wIo zR@d>Pb~&;QH3&lTu+EG9P@=2ocX(L&c*%dZ)NCj0S@0AiJ`R&xP@Xo0olVaUekY@{ zze>+-Cu-4v?N@Z3t3=vv`H*qFPY~V}5h}zpjGrd;87WzawoZ0K=)5?Lf{^)oG?SB+ zrghFBJXjcnf`{dXc5hd%;X3`Rg7QZ4jLp(KxfZjP7N5AJBr-qoIysYhy3k_8kEhrD zQNlX7p;qg^P&7NOdlX(r@@_(Bap|i?+@f$is>G~7n4I*fh5jbr-H&3J@$-O;9%x7LZbFhkyw)Qn@`;8`sSh4d7bSepJjRgXl+ zWGb;dV=jk!?5wu~0$+KeRHkskcz9qFqV4toIW0%A1+FNY2KkS8phUwnatY%ZOP7^r z;9;Mp{%va44Hptu^+q%XJ)x!^EEtZO-}us$q4M1E2HgB8Jd7wdGhn~wVF6*x9Rke8=>Yc%2E?--2z?297qCcIrm!olM**j+dr zw%9k&##|M%R6P8DJ4IUl&S7a~vIJ9x_~Uage^}-b6Ic`(tb$vJ6TjJsE(iE-^@njL z$=Oxg;61Kd)xjYY-R`0^!QuVfc5A3sEcrVQrPPXsV*%2(b$#G_Oa6?EX zs=Sj*-e4ZTxss4Y{*G+NgL8Hdz{wn*m}vIkJ(J~V3t_pm%Oare9FBhW5nSH3WIj2H z4V~GB-viVM-`2@{y7>3raK0Lg-0U!3(EcDS&d_1|NENCT6AaBaIsm`Rs&FXPfbZ=H zZ=N}73uZKxD?xk9AC+f?pZ63>I`yYOdX)7VmDUQ;PJKrGz}css2zY3Mb!as9CQ<{R zE>)rXIl{BNr^76h2g3Fr8PVpV8JcWcV6`{hQHHgIL;6K&LL%a-{diUR13@_NK^&J7 zu%AbRJ<&HrI#7@_qlpi$b_zj{g>oBq;zbxvvqLOp>}z6Xk*v~l*C8`Pw zl3tS~5S&}W$4$D_(LaSuerqq}xqg6<-JNV}kprCV zTO)3$g~jP)-+R_$i#sap_LIi#K1Zn?+7y9vP)ik3b)JZJcY`OJJdUnMWpsTR3IAkw z^ja?`bb(c7RJWhyE8b4%6|c*-s=`ky*II5^&L0Z)$2#vgOpK=9@Cci5n$ktOzbU4F zm0)zKZdWFTsES%hk6TOxMm1*p_8vRs0f%;Ra_Qq?k*x&d`8$WR{mA22rm@35mHBQ9U3|$+{^+q%i+?AO zRQa=kngdQ=2|@8*6u#r8bg0qA+EqF!YZ+3DoicY9+SKfUI~4yTCTbWWHi_v<5ZWQGNb-EC~N@vjN_vpUCc+eMZ*CVS`x*s)Dl$Z zaW}3>Djbz(l_-~oH)dx0Lz>9X!}7D)AeUfHhGuRNe+xo^eDdb`v*oP{?0!2A6)(vN z8=f-`1M~V|Zhs=9l!*N#-(kCaK1*F>@xtML=vs%WRY1wkT84Qdj*aXm6laH4hU*ZT zLJHwDlSn>=t^YcpmNm0&u%)pnlwD{Q?FdBrDmFjKHhZwT^A2G!dS+V!_6o`&!+$KV zAl*K;29zBl*wspvP7){1Kht5k-VMI_sp;K3$SvaO3+45LXYEJ~tn7}^^}KUuI_}wz z7KcokCKkXhM~HQ|ovZJpb5ZEHNj5}OPNinNQwTPHx6dOIFB`+&eLXO<|kS`iL8jEs)C>&l`R}3^lt5syXo8Z$g69 zs+Hup8NaaYz7A;5PP9j6I}Dy-P3xd7y5T(8j9oX#*4?i`w!!};F}HhBLFc%QguN{D zAF7v@d=7m=ES1na+X+1NU1|EosjT&FhZu{${pJW>k25963I?4FhUz)hzr*`D95|{* z?0ezsDNj>ZwtBq~msYFD6&uO=?1>4)Sx4K-{c%j>#kl}jUQ4{N+R_c`UVQ`|%FW>u za>lmP-Q1D9gRJ5~`}V%-+2*JZ#`r^hm+BO=gz8b6O;>R!G|(M}7DSDbQ`w+lNEnit zqD@>UxAOV=OZG}tDA^AYxxG=ZJDn#S_f(0JdsJv!NOZXzZ^sG2C|pZeaUSL}ONr-N z6Mw`Qy3$d4=08=7&>PgcY(d2d*YNY}uneA>9!|-RMDfLk5S7B{-|imfc54-*0vz zF_I$LPmbJz@K<*WQF`X9!mG@$Uwh^DLgm$Rx1}~evZnkdCUG=sF zvs}FrE?y18u_DwSDFgd?;X{_<$ZtVJ9#_J)aILd8cx!z!65sjWRtEQ~>o8`6H%gtC zW}kyUCW)pjY)hzIi?VAy=J9JYbeeP@x#RuFHrXca4fS>D{+RDSFso1a^rEvap?WvqIJZ$d) zVaFS0BlUQT5dZ5nl=zw%hncA)1p!x-h~A_^@$&{8wPtqHM)cN_Ku>HeutoMEB|YVu z1ONNXxBD5LLTwrwTPR#HghX$1#W=kCCHNN^EU#dwhKyJ*1EI~8?Ka99rA1M>?G@i! zP^bcLT=Z;3yjiIbiZ#BASM6D!!>9xhueKJY2?Z zLvuhYBi}P`woC~nMh>1If<}`>UFucyLyFl4Mb>K3$i68lkZt<^6AJ9rq5fpytexpg zj6c_z4E5k=CJZg7#;(v991Rr$s-RobDA9gvMvvewc{eCA(LkiSvQ&qK?BwoL=2f)) zsz!CTNx}iM&imqE9cs#!M`XXFFH+zBaFt*~?x$3o+o}ju8g9hFY*#)^+Udh&GRiVG z)+C|5#fEDf`tA~>AJ#bpPiK-k*Ssy{==(@gb#s^?mz0_Pteq_Kzx;>Va_5g-h&=71 zCIKjOIyewN?8lgRpmR&&+l511_>D!6UX*u4hi*{k7R`=naagO-E>?Y^z@P_Tdbb!B)Xw>T2%rRnjXgBU7aP%G# zi;-qx&<7uq!&k4f7(o@=A5I1AvekS-ck<{1Pg8px9Y# zE*vXMndj~&q)DgQOuzvW%?~}?pqk+U=Ybx$Q%8m8>~QE7YesEt+ckO*)aypoA6L`| z)rR|Eo?hrL$2_IG5d+H;*1-=9c)3n4KRk`wZh2D=b|Ug#n{8nGO87=YoyFIgavD(nuH2e!X4g+AW!v=deXr=Hd7JvK)}xV2m<83(i(chs zF1ga=JflbFdw$s8h6>{uzk3t6+(jlFIFMSs)hhSWID-87l$f)V%#yYdwWgbW6P2R?{$JO6;eT37L7hKpW*a#x<<&CF>FR1e$yB zeD?^PX9gyEx({YO_r-cWb)gF{OQ-3aa@jU2o%L)}vUVi9s=_;s2x{HrjqU!@;USmp z8>I;xOT-f&{Hz{@+Jn5&WV;`R=Lkl@@6pKEL%Paq)8VcMYO*UuI1FL;nL1#}0TM@d zCl&syM}sIwTygvL6pnZPf2+2@Y0?Hkml9;xsTk6sP(l$5bD6+l37h3JkJRkqFJjZjlENr*EXi!1pgvna*invZT75V<1|gqZ87`fo%djv^8Oj-F z4Bjz>&By-ogKaL!Z7x0Geka}BuG4Q@8jP^#a8Q`8a9)#?I{QzG&78woUtl{cIm{Dr*mOe}`A|0C;n1WAtHnI-_~^9y*CZ6Z z)Ffoznn+uZT`U`>`#MY_s)p7hw^2 znK?g@3OO&K@|I2(!k)LZCq{+JWuxj&Gjy5&3(qUTmxH1qjlxzW){guYoaGZ2ua?VYX@T)M}x`7rW|6TXNfP zV&j>9wBYxl>0E;M@oidB7XO))=0PE$O-b)!P@T=F9drppkx_qBcL2LIuiidtn0~ni zX`k6Nfyp0{>~4MsRBk~Q;Jy6_p(8wF2URett0YcrTSlDv9h;;bxPUk?xt-JrS?Vm2 zTM%p~@o~HEhxapuM0D;FiqVHcFhAQub2GNBpTp27(WZxYMBTQq>t(lY7y97tLK3kl zC@YQa`3+|e*6Ax_N*@zmB1h`Y%o~T31%xRoc8t#jnPaASi2}U}Mq^SQ!3`-B`&qRx ziVrc9uSF=?ty)49j}COhutWofvm<~nUbF5s^}lz))dcSrbyJ;7LKiK?U6(4 z-(m(q3Sd9Y8;Jfj^t2w|e8`t@#1Bc-VGFx%!c}jX#)b?P@9EIfKI+of6^5cq9(Qz1 zA(79ON`%}RKo-*dR3vWa65QdayV-{Uj$$Ihg>!Kz+w~Ofe-h_ey1IB_A2>NO@&D8w z-WbaEmJMGexYzFzH^`;rR6K({C1WLOK#Soo&9El zIZlVIc}YgQj^%@`a0_!q9Z-3`TvB z{uZvhhe#bBe--^5$9w3H?P0o8S=Kieqtd8$ZP*O714_Q}LeL&j>kU_>FG;1ZoF)1o zN7|c1gbTgAAXRwQU7^RlnG>b3FIEQsQlrmiIh8|B3kvrOqx?PRN{e$zrX0Sw`9ct+ zDBJ$f{*w}$?KgBe>cIcYhY+3@HMl2hE_$tKEb8x}yk<{<<6m|vj>9hYRf<#W0$2`) zI#KL4LJHq@n6K9u^Sw?I^@>av+&sos#xJuYG7cDRaYIIMB#Mlc_U$s8=cyRI*$v$z zrBw+aRgGUQOqQdlSJ|%K z_&!0}CmlTDKSAoGwQ960N$(}sNRD^>@1S7(8Y!2R3b(Y_wnQ#Z9(AQn-j>GYscE4L z$a{RA&x}~Nfm*VpE$$`Y+*OC}1LdC3}R^W!<0Q4f8%Y|(em5*0gpmobR%wv13s3c}9|Y~?M#8E<2$lE3!|!rZcPSI=m?-$Y2_ zuz(=sXTA!D<7}_PXM|H{7gJ%@0Hke==Iw2o~hC;p>!LkD^O*b zC)RY4rXKabQ+@HCO%-zR>OoCv23_ z?E$iu$d;()*fUYIc;7Ij* z`1~>CrqnG>L^xkV5aUGUxEc~J?^+>f9GKNIDeOKwy_6kP6FsmtCz+-@>?5Dqq3-cG z={2wb-;HO?y|;z%Bm-J_;V9b=xAvtweE&E+RG-~nKWChzxt7nHgveCAFZz}Z?6eGr zxA_$Ku<9|Av*E5*Ll>G8!CS6t=9{Fsvn7qDKa_Byttk{!P8i$D1tl@-s?R;Serh#l)#Zv-b;pbGD zB1-}=lzmQ)pgq_{vqZ%PL8Rap*uk*dRRqgp?B50B89r&uJC%>l<}TV|5b7SAaOChG$YiMQDy-JJu8l=)A2 zVbv0Pj{3!fh(Y-}ay-+mZ>MNm`{eXT_rikcJmrlH2bb68MPP3EJnmJo*(e5V> z_S2BADVLMj?BC{woXlKvm{UcNiN9}Z86MdXm5CwhPZ(wED({ zs3H!u{Qu1&$xyrOJ<2u5ta2($Hn8kFX>6tV-Bp2*UqMWB5`tf~62jrYF?f_0Y^SB| z9_p0mBm_LpyRM{VsWa@W>pZMya}#E=Tgf@xNMKWvc3+#nmugB{-eItC4_EJD-%E61 zA6(V>q0ti}Q^pHvmyC;MnnVuO?uBHg4*BsD3}%;E)uik966zc#A^-G04c44A@gms1 zLb+Z2mkoT9*&d8zw$dG(w3=#LSGndfm>I8Iv3Q90W;OdoyCw^m1~hZInu^chlw*^8xF zM@#&06V}yIqfvP^*0I5{15O=|#I-iQxWWv5zpJ7XQ?mQ#mW5JzgVN=lz{PJAp5sse zHhQyzk52y3JYth)!(uRDoNx;^7K+8n%Wn9&!=D-N#%2tDMo!+Z2ukE)d;7*YIBH$&rg&VfP^_{g9yQZlT(^FJ`p50RO=G^yE!`puChNF3%*#4K| zQNAdAmrBfZjYhmVjD0UnvnY4vkM=u9dFrn-g(5s-cfWB+pR7aKJo4U~htFcSINgsI zR$|yInmP^1=Z+MA(u&LLB2dcyIai)%NvTl8!wcJg`(ZshlQz}96MTFml~ubBI{?q_ zr}-1^R1(&yVJ<Ah^Vh*R^;y%@LU{$COMzZ7Sf5P%2 z0xyrd$YwGe(CnlivrvN< zR3W+?M-}!l>Xps;T#&gzmy=r5TSw+F5BtW?zz}MKVwVv;*^Y%jq2F~AIya*{byD3U+0~uSp)bwux}}vvyk%rYNEeM4?KwnRm%7QT5a88`rDWo1~og z+DI(7xUeN84v)^#zx2X>Hm#smTuoQOWHmX0rT^+LzXcJ*u>XnVb zo3*ic!Y(@D;Kc6ISwANnwQIBeW@Qy5ub;z3B_kE&y)LTihE|>?tZqQ7)T3gFKci|X zQTuBMb{CTChRvwKRr^U2sU-HZ_yP@aE;!2#YyDf)gZZ@*F3eZv^*SIfuh2pN`UXth z6Id1<(?XzqCNH#0R0uY(TfrOa}CMzD(v-?Huh$wdt&GsVzyugg%q>c^G znzG7Iv|D{gz)SnNi`r@;_LIxL*xf_=bfvcCdEq;jW~bHFk$gXt(MfO3TpMf|^Mn*S z)JaZKj`=_P5$tl)NpwcAv*umdx2K1_B->hLvE0T!sbWIG172vJlhUuW32{$hp@4GAEdnbnkd+9zH3P zZSD26@0F-yzeT?C9U&7*Y>Rnzm~ki=2ZN-W7@R__=Jnd-B9DoGUDq>LYByuZ1q{EF=Z95-@&f1B&iQEez>r|-WFHlF zN1vU%KQU+{N4w+AT%y64Ab(8xAD{9zI?b~#+@KA9WxvYi=s0;de(QlGDC&U9RKms< z(Rel2gXPp&?k7^%zKkFwdyu93^i)teCo|D`m_961Jc`5ADNDZ#f7Wk)mkOF4d z&&cvTG3mt9l?_ADtCo!C<#Ap^de?q|JO0;On9z+14es9||LRbQXk=~HuzT!# zR~$MwjzdS=JxwgZ2gJDk}vMq*^7Prb27Db)Gr+Z^Xl*{Sc$+CA*E7c_EVT$9e->BapS&4 zfgan){QAVm&2Gh)MActKB+YThna{3pwOu&rq%9X(CK`jcdg8&q{%Et*6Nx?a?4z?J zRl)27f34VOqcYe>l-p&y4zAr#itjMZjD*!16tQL0aMD`_ehR=qM#Dd0yh)EdY@>6F zeKGh)N4BrpTQ@XMVmFR;F(Usrd3Dp9DUe?;?3`jT5qSO(6&3^tx9)qUOnG?s7xDQJ znX4mXL^?-(Y8~^$ryJ6?6pML`3gthWaJm{>ElL$i!qbjs2f1RVl91kiBkIB9=J#i( z_1UeGm!}zVvZOqY$Dg<=aAmSx>P@zL;aJ`%Bo$IZHJ=pg*s2fxOHXWa zWs({u9HR&JQ?oqb`NrnrU-9LtS0SfbW!Dzb}lAF+V`;xI!eXt2o$v2U6@_=nCXKtJxMu_+01I!Fm2wI z@{WDab*cB!9(*F#;YVe-wbw-qGYXWvIxSYP#oet`rP&=7SiPIi=jklJ+^FRd-@K4> zxC$ZXgq7s^I85)(zLry;*c9X&gw*#!A#>+-$JZHzgQqU7nu=#7p5Th7FvUDWwaTLV;O`1|(ajuaVd6okR6tIMZMMle7j4OoRfGsi>DbQ- z_PuNlIoVd$x03|xq(Jubpd4A&mW3sDxx~!mb11shYxXbd@^p<#QdRq1W*3zmc6VgW z`ZpvBy&8R4NK+dpL92bzUI$&}*T;p?+0;^a3om*T&j)`L9g1_L7Vh6gQ;)6iK-FW^ z#^UtBOZCIoK1fOm!MEY;RQxCY>4rGVu5MTJPFNM8fbhvj|Vag&5e|W6Tk@Y@5)gR9H zrGwJi&JRsl;lJ44(@|gfnX-gN-CO=GR59^njfdG64)lR4bSkbwg$;s$L)rIFhge7v z8ayI~<$Fs4zO{Q0^q06BWYAaa;)PbP0Rd;(oILw#+LNt;__r#JTOVax>gRb*l?zAHE!5;i6{uP~ zd{70FiGZlDuG`A-1(^l9x zG86;<7mW3-gi4(_#XeMO{d?Fsa2MMpUte^08S{wix1R8?bVmi3N?{kplrf`7YoSvA z$JS8>M71?%L0Ec$Wm%SGVV4e3v0G6Q6$=$Ruv@|IRiBA1>iP_9#TL6;F)*+@v0ESN zGru`^?&a+Dee+}E-jj1?=F~)|XFjlWIaArvgl#z=QqW@dW9xM4Ci^`AqotTb(P2yk z69Ikt-0pK-{9yz-!5iI`=udjVz6TEohSQdq zCWW-hRj3wJW1(RCuG~=51I{Z2+j#AA?-1)8;PD{ZiuM?&h0=pK zU$G3wQo_M&B;V;sg?z9m0&N6>Fr_(Qczaxg{B0mnotPk>#*@>R9aWnz?xG2JBsxTA z5G-mv^xw`ayg!ZxNvdSXI5*I`gh81=8uW|nec;7C-v196(`pYMmQTMD497MF!^O%Z z%Ur5>z&j6)Xe^JdiWMr$hrYH)k{i#Uc#acO*Fy7rxO`-`P(-%7-rhSUDAM?5a5Vc|l9HGD&0F1PF z!5BY|w#OKOl)?0=_E0#N@-=G6Tg2Wu&-a9%36y8a9!kTW&-A1=R0U$mYIo6v3m#<# zb~Zvq?u)$;Jewe>yO?icxV@@k$k-(Y6Z9-(4~II3fuSyO9xIf=u67!Dfj34C-taY3 zqD?R~$&okgum19U^)R$Zz$IFPzq^DXwQXq#Iz2VAVynWC13qwPIG5O|$F*>12~lLS zQoiDzhYsx0tyE6l3R)Pt_)F;OnZb*fR8E7DS{QHT2J}G@KGp|CR-Hc;V?6&3fr>v0 zL6MG*aM>&ZE#%bu`2xIUHL(@IU+_B5xbji*WQX+@h&)}CIE z2w8{ngju#|_y;2Drx$6aRO-24i7{Gp7gEd@L20&noM?;9%45*BH1(zXV=fks1Q~^Q zw>CP!is}wfy*bsx9zH82C=O^l_+!YfL3~-n-X$zxLekK2X(_7vxwxR*e$ov_cMF8E zbG@L)DL%kO7RniLDte=iMT0*(H!VDxs07bw`7R*7KH=`tSyJiix0>=V91#dhdhu0B z<|rh%>k%+cOn(-4unIBImhz4pY;D8^bbcdec+gkLnqL638u0$QJSO3ivC0)Dp^?by zvBVLWxIQ{dAW3uS3um`9@p?rn&ASR8ROy*Ao2dHu5I6Wel~}r7di%55sApq?;N`3T zPSj8H?O;wQk?-IUZm_qAV60$!@~*I%ZuQGE7+fB>!_`k5y*s-ar3!^_)gt+DDOaL< zVLw+Gb=3t{j?h6lJ9}v4L;`44EkbRKt#B2na7mBNQAf2tiERIv6B#S^dlABcZmbg= z=xYxVKd?X77=aq}C(@{tC3pZDiPoSD4vq1Gnv;a>t@-s+B08@nsOh1R&Gc|KQUh7P zoIxW-Ir)524She+AV=+`0rUhp0gV$^6>)VSP%;}%K zd(|8L)Zu}a2t4EN^u+V(j%PQc)sHLDiticp$#q4(f85j84%VfFfww1#sbTFnT~!(; zr_UF7A}T@W(viZ?I$Z@371w$NubI6VRUEH#zw%LQ+>t1Ny&H+{AtzgfB4^JSTuV1y z2r?(%<+ZS<_ug}1p0l6x-%zxn4Ve)H(P*V_4d43ml^A=zziuR$f@%1Fqk~%$E^B6G z6d(*vibmsN8GcYCPDVViutBKsE`Fl0fwQ$A#lCe>u7yJ()K$(TEa53lf#eYK#Z?Q% z^cwS(R({ZA8}9&nc@WRBGtUv4eUI`+)k7o5KjG?Wc}KhE@Y%`zg&wM*l7<8!ZJnUS zRWAKrgt(ifcfxnvd@pz#?+S-8B)!cYs%%9=KX`bYrqK2017Y5l{}TR}1+H*y1aHXH zPL#%bhX*{KW`MiD`Qa0*=-xpoZF;wGZ`)T>NcYccykJ&mE>{?hLqz2lseJ=*p}!Y( z81__>3kvrBP-Bdyh4E#I45wzYXC={W-5RRL5FYhU<(yJ9AQUvm(f1u!mh^&?R=#CN zxdg+M7}h|YDzdS-hq;ayA0dFISm%WRV zWR~)5LLa#j44R^X1S?&>Z>VN>eKQf^+2MrXMSjAfzJ`#e@?%dJ*-HzadpyBygq#yt zg5mQCt7nV-cV}NJOE3$o?pIL>pFAC4X@mcc;CeK0kl;%{jyUOAlYkJI(n#3hItM3v z!k|GOaQh``do~fTlUdqU{TKxqg1)Zd1lJy|erI`m!@1HS@Q)vfk%~)&dq`DaTUXFD zRSMN)^ktejCfoV}KJ3Uw+hBwq!mRZCSfW)M1qy98;+r1U6y<#_>MjwqP?Ycyu*n&= zW6&=N_HO2QtNcqY7@OhRBD)2f)OF^zqO!J>uXv0RE==R%PIx|@*Ee~g2VCfZI^gA@UDpVwpy}?{U2MH}3CG~J|Jbr;26LyDv=F}3(;b$#Ahzz0 z`r?_QiQAlI)P`}mIPaC`3b#TyL3KMVpGP{?Bf>MhR)eh%M;PnF>1z?-eAWn~i}76w zJ|>YlVxIx-G$X9e>cFweGCtqKS@POyLc}|aSkSZ$iGY6}dV%6Nr}$IvIF+#c48B$1 zBB7^~HOA~cjFf{7Ob3}#q6L@4?fN>@K{x)<5GjAdA?J?Evl`1G>b)CZXd^+Id!fh*cT6m zDuoFhO+CWki%Jb0LmfcfmeR$w355ZNICDODK)bmeAx3Ca(-A&R7sl8zzAB-r5Q_-w zTsg=WilR@RX(fe;qH!m@Wvwb+G+o~i4jps~+JQ#6Nf@zP$*nYcd19bZmT2f} zqmY(;glS!1VQIm!bI{e(RO{wOL{(CvIiX(gD;*be{%jj%Fooe|%0sk|=oi5Ux=sTU zBmV20;d1(zTY6iM)@*gIGq(^Gb)9jOQUYTcs^{`)N~)pqNiSHoDGVkocZI2@a45Z! z-!yf;?FKHhN!ZM7>IBjMhC+)RZz!fBoZdD$z#LIA;pQ;TPh#0NFv4OQrBExYpoflE z&76f<3wdM{eAg3jkHxTV`N58iR-)ly(DEfMQ$pf;(9KaB7gxqwK zt=`-+MouLxT}I~!u*dDvff{_h$Da4jzHD+vdYWtQ&phbKkUK)`2Qf*Irf9F@T(>lmUq7? z!H}N%SRK-9Y%nYgCam0?Pxw@o;S6J391dgCXWdgP%3HG97gBeeS~XI_fbjhrkKTRV zsVnS3wVKof_PcRiRAa4=DoQ=v!19Sx3VX-E<90CAM)6w3nWL+MjRzZwu-vn5Q1%m- z^(=k+VI=1gE%!EMOE#~>p0cKPU5HZ`1L1V|y+fq#~0(^JgnRQM$5OA#iaQZ=IBOqag&G?Bz6Vz(Cs)j2e%M z%{D3<2uy$YNF8Rt6@YdQjr+N|Iv9P5^BBt#fZA1U8VXCJ>IY9d!b~xe(wX%{2hlV5 zII;8!GttwJVZ0n?)IY0=o1I~A*fd~J#HP=B927Lji;sTuBtpgmE$?XBUg6kDZU~f^*sKt+>9#ZD)P9hU_8IU2OGCNZaSF$#|@k2FvwRRh;% z;1TFk8s$^C+n5_nqw}}uaz`qIeJ`peEQ}2UZt}WT4dy35EY0KeBhLe>)I((f1|IwA zyR*Vh_%D6j{DW`V^IjhaXEhR8j|_T$G!d-SSq({d(GU6>HGF^OBxKKW7c4^>r*<^L z$P-HFa@QA3=)%9`8#mD9(hQ?C5V547+uZf>azQK9RoD@B=Tdp>|9-T6HLew`cj+!;K|<21(ppAbDm4R|f6-Ycr4$Gp-fjKDa3A8m+6SSq()M)n06w$#1U z*LMd7LLYV9ceNzRo)llCTZaGCV3gGo{b@n zu;YiWp;RXX-r}tN%@hgUeB}$Az&Nxk@5mX9WsJ&^4?{7%plpxa)ZwWY;E)xR&VE?# zQd8OQ8{?Q#qfV(=f?=O}vg0R1*bh7z_I~dMSyegl4lU^oCtGV^vjM{+?QsT&!@_x? zDKy$2yi4-UeaQI$uuF=7{YQv$43=f7HtI4lgZx3$&d6#MKq;E#7mKIPKCeO8uUnW# zya8?o4_;;~IYS#aqfyMozmkgwL944KcwCvJ!7q#nvdNwJPD(XyM>y0HLo{CjTx|bM zNZW<>6v_aqr>GE7SKIFYgx6bpL70a1x5X=IR;-QHfml)}VSD0{rsivVmd4qVc+^JU z`SY>>IF-$pKI|2P2?uE~`k+^gFXesU=W3FFxvc`=z!(iQML&3@_j6ugd3L%gAz*_W z6i(waB72@`NxY*_o8w0i64wrq3p$p>5lt)@d`4I2Z!lP&HP}?A@%02^qduZhQQizr zUEfbCp{xgLM2BFwx~+t?&1fj`@}Us|%V|KBZC|mV%*o$4VRh=Jg0*USKUl($YJ7p4 z@5N?eQ>nO#)Bvd%F?d6gwAi`onR; zM$xWi&;+8XDxx%DrMF*B^6BR~fqYvnT}q?jbHfz|u8=cP+GV5Epn~rnGyTBylMBV1 zN8!+~2;Y@R3G?3yhdk~3IqG0s4z(k2h5?F*r<78Z)sp|`v~Zn{^3Jd*lE1XjBG-9?Yf^`Za=VSJM;XXU)QcnqYCI-Wp zb4n=-G$56}x-czN2~FH-**1E8IAn@mRrhu0RF~})1d|7G>BCBSJt7Dyc0+sABi`VC z2(M3;k%7wT+A26;fLvE2KZ*7xsi>H89T0g#|$L*Dq7n=qK`IxHEz&*mwa!i369zWqu`6;@*v53~ zRoEajzesn7(Iq&|uri%-Xd_AqYd^(|^jZ08t;!}G?tAl@nWah@FX%odr7Gpm*}Hqc zh>+6eP*+>@P(v|vreX~{7oe^1Lt1ooLjA6(nOxG2v*h*`bO^oTZ)fY^ayhEv>lNG< z9_38Jiko5%{=R}_i%|RGa%$dbH-@D z(*PM?=y|fJo>uoEXE2stJDbz$62W{_Q|6;p=n|Hu^)ek?IK@{yk7w{QF59Er#Az$Q zE|MXm%z)a2jPh@I8dk=7UusAFms~io=L|+=F#Y=w=d30E5FOwF70a>z%#~l9pS+Zp zv;D!f8PVB!wBA{Flu(+F!*snhUVpfIL-scVJQF=zQu*}R97WLwtJv+!nqXk;b9|Us zs+mVzp-IPZ=)E25#romXJdD)Y!vk8!^6e>0xGjUv&_h&4_NV}=?xk@$B`Q5gFFusw zw8NgYUqGGPF9t7>(%q{~^kS=Y7S3(WjV@7vtq0pf|6&{?Wk34DL|q`1PSe0B@z7l= zgnd6R#$}ZB{KFDX=t<(z2xIZNcI|I(R#k2M&JXcqpaC#QNn9<4(o#0sX2jW zd2dVXW!nHlYzuT0g%0VTogtjed(NlTdFf-mX%&U>W<-lO&n{*1H`&20bPV!Xv`5R? zzW+6c>+5Kt(Nv?5PWo6DMuXTFqp3=8=%XOI zv}3y!bVGUt>p!#84}&@$LsA(2!lktcJ#^$n=45L=U(GzIg>DwPDEjrswwz^u_lzWK zJv0SeRFwChy-NrVg8PBN@ak_)Y?Jg_n1e=_3%9y}e;JO0AvaA%mPdfL?}?Y*n>p_} zWxJ&Jbma56phhrZ0fqg={Kx#OJVoTe#f2k%|IVCYpEz1B!wxM9$CUZjM~*+f+b zqG{bXcBWu$-0V7fq#eEtBjp)5)kx*5&$&WvRLn`S>TU#@Jy%GvhgIS|wUm~9Z!AfR z+rMTCLt|^}Bg_TSgO!AqeHHDXl8SnKzaM9nCt@s*sDVCUu;gkKYE28#uI2u*0z81P zCAS>8PHw!jj|)7XLM5@9=b|l7-yW3oEKZ#Z@#3(9)rrHbot&q}pWsBq@=o5Uh1IFT zY zmlZs zTt`h^DIL5ajTpFuApj-V8~a}-*8D9_rtkP!MQA%*_%9Joh|44|;)p9chZ^4w9l1;J zPGNw`JLKD@A31`;N)_V~UiWeIudl}dJ=SouxHC)@-QBb2lg?3Hj#DCF!Wia}Hrj9( zjovp{_%!x9oXUv&+Z`^Zo0c-;im>3F)Of>wE+-qdrOr0%;s{mn>UPEnMrj&z$B%L( zEPN_&6l;inBB!e3MlOliyX|3Is>Tn(%eOx?fV8tYavGzP9&2dQh;4Kgah}iMlrrluuYYMVnGqPNgCo5%n-uqXa$iF#1Xaajj)KagOwEcrW=K#j)d5Mya2? zkC+zCRa|W?L)czd(_(7?wdHYlIRjkAXxgVr^Ff`A>p}_K?mI&0PtHKaQ6oK1v>}z! z%(0}}DYVLJ??NG`zhLdFcw%`tRIu~%3Y*guC5+1=1K@`akK-^odJ*#FMrSSteG!p8Q2Ck7981B zcj>KxVi=hzLyRN9()6nq0J~5fd)s>>`wLs}nCJ0n6XbQK^4`94hqOfsQv3SNbb z!Lnnbn7xnj9OMvN9Cv0GQsmeIfr@HrJ371 zGMvq8=8JPVQa;V&95Kx~465`EhkF>(JbRcOWE`YHbd1K(CTErKuC^B9$`V~~@5kp` zTeTYg!E4_Jy**&@THZ#6ly~zyp^8Nft()S!ut?|^iG>)eKpHHeG1Ubwt|LnOoiALh zHye465PG4cJ6xIT4oPuDJ)O`LYS=g<9O|xxokv~4=tQH=%3*LuJY`(F#T#be!CobC ztDxxeg(}bXsUix~AHBfYA07N~Ow|%Qlm?q3c|Ii_1#k`I2hoYrOGC!Xl z3@gN&UG^^OMi^Y3XJkJMz$J&{{M;tKDq;!l=i7r(?FAG5C5DtT?V9WliIZGhptv^; z(rBGvc;exVo|yl;x%4?^b(<0rMfhrGmIq_E${{AAGDKe}ojCeUkU}m4e#5%<`e5t-AWqbbIJK+zsxCcMh!B+N(I-w2tTU zkG*3MTu}!z^9l*Sy9El9P*B-^d-f?neMdv+}kM7Zy!fm_9jN2j5Fqhu-?Ph}2 zmPB`jwoL7{K5(vx9c;~~7SEj|N67DPe6U>6^!A@@J!r282XFz;(a%noFY@ZgY$WXX zUKKn6+1>dE{UE1%wAGt8rg1)OSIG~Y@pibuEsnoAm7L(Bcz?}0!r=XHcc_Q^qWrQ! z=+T9SmEK^yT2z&>>B}d|7I=fqpwA^a8y)WI4|Q9k`KmSip2T_fm6f)yLo(Y(<_I;G$%PqYFA@}8jmr?hu8~kX!{q(@gjpS zBo5Gl%V;GO?P0WTBNRSm0?+D^!n49rI_Nh=kN$t#dn&w2Z{}4bqxr5i7*NxX!8fZr zioQjH;m#4pu7;p&tUcx{?Gu+j^?|UZyeyV)`eNpLJfdeM3^AHNjnm_KwEomJt%p#ZnQ{S1_n6rp7Y9XT&xA`;<%O?pXfoHdFChWK-lx+=-xZ+ ziXiqXO6lNXn0$cQi)|(~tkhG5`&SWW6G{+ST0(?Pb?47tIde*dEg8ZGE=aTn@erep zNNLJ+lrtcEp54g{eiU(ly9v~>KyjsdML1aMIQpzVM2zLg&mGDKn`OUPmBe@Td*NXG z76C;q|7}{(04?|wBW_`NB(UFYfb@yNn5Y}X>S3hlt-=n^oU3nO3w?vKOQJjUUnVTi zqJB+whq4cS;Y53CL-j_*Q9LM$NpP;SB%e;y^-7^D&z`rX$5|Gk|&Bbeoe^ZWo7T^LX+A!1I@3a@tE|0 zfjUvui*w+};Y=Gs*VrpwJUiG&oTF$!G~jVjPShLPVLVH#U>{2pI6<&_8R*7ipf|c2 zHg81-*dI~ZiovhtM9T*Za$MB5a6}3T@#9uW5=2+VQ{F-^sU4$A@Wm`kn}&}1_Te39 z#}D3c3zc4MK0CvylGKOY3mwctdFAo^&>l5Y7&zwrm(hIdIY4G6jhrgm8&;gRhYMmL zVwNWbb)&4|`;!Q0g)TJ8qw66CGw>`U>n5k5%TJWBy$zGfA~n=C(n!6uDD;Kcu}tT1 zvpXDbLlSWY8adw&<73H+yf}offu^MrW3lJAGUQDu=VF4miZu3}P&;vUOTL~uU`g~< zsH3{Pj$kE$mdIz_TUa$c7EH-<<7qq zjZ!hf_p#g5uD}&q82c}0FZS}w9_nug)WLOFErdW*_*k;^iU5VJC0DP|S24ZdggH%g zIUyDQ!<(c@*^EMFaq z13a6>tL}C|P+}~aIe`YDXAB=8+wO9qwJn00-mQyp&T01ROas*X1t;+%??|}MDbEGt z`B$_MnT>Yf_AO~r{cy$?a_&<3J;jg=Qoq>uuzWixjhn=5RMl0-(cpzQBc4x*6?mYm zb$Ym)DhjdMB%p%rhzFC~b1E8p#vKmsV~3=IMrXTi?ws0$!a|9{FPA3HDAtFNvR=gp zVA*qGq=%tyFu~Oo2E@6-533!*rN3wZKR65VA6WYj)U>*UZZ)5JXkpf0dib)Lin#6` z0q=24U#lWv^H4tKQgMr_`@mvnC%9VA2#xm=>h7T!m0;sLV!lPlJ`6IBl01Jiftsej z;Q*Qw!ZVCZ8-@2Y{+(m24vU7&HbCk@l7mg-sq0eN&xZ01#_3Lk3EQXP@ZyLQTy`Zn z`qa@Cmb>wM_VLuVzbqe&3Vp{{X#Upai6flsw_0mn!qXPrdI@b zeYAr`XmZG4i494QDwBy#g@@ut{Yh-yVhC!lC3LdKhtL?!8gAR7F`AxD#~S_TWh8G? zk8l*SwDbB3hn}{Zy9tZysNfDXZ8-GfU8}H=6GM(ap*>+1UF#0t!l!G4tsdUa5$ZE{ zJ?99@F?{Nf+VxjSs$X{?1fo10V8n@FSl*lZ8@-X^XREl4A2p1ImF0Ih#OtcngD>o3 z@O+2CtCPgR_!Ex@G|Jg-5s+Cz*tOPclFiFuX`}bL!E4cXi+%vr&z>K?#&LMGXbAKz z8Ua`Sk&82b%a|aAKB{jtHTTjdE)`i3nN~qXA3jB=vue8O-eDC#ho#$C%N~|J;N4)) z7;N>V?$AGs+k*Cu6117Eg#124G8NF_shgVHx@ z;npFb>i_Yy=7|c53{*qe8Lmd1@ke~O^BL@pQdi;>>S#*v;2@3Xqv>+aFTRk|?5Tyq zl2ADX=g_5>1dZ*WMQ2Q)LZ{`KxKeulN5E}X_VaIo4Yw&Cmzhh;5|Vrl$j6~#6AesG zKe90(YG4&FSn95UrH71C!-Ve`73w)w=A#>ZQfP_o#BsviP-630B&SRLOO*P-mIP6K zQ9t8oI)?1?bOR5hl$j#s->M$~`M;F#G(8A5w&$xDRw3TGgeue}8j4IbxEwY7{!Y$7 zdNB;B2im|&&?Qiq>dm%IRnXHE2D8!20)y8-Y5r>M!xvU2JbYR*(h(kw4~A`(xZJ#4 zow_2G`K+RxD%tatc5;R+Jch3c@ii`#9D7dm;Zv4W)|ZP~xcFGkKPD)FcvUB*zlmp}p^@@F z`}zjJcPlp<-;VL}<9~-ip6L0XmC+?cDHOHfEEB8-TVIuMB3E?VPZQj{po6|EdD$%^ zBVYlZ=`#3S(g4YsH11{p6@+u**-Pj?b)+1Rlh$~`6EPlPas&zOM{ngcaIG~T?{(?? zT?vcF8?-Q*`9Tj!>s_I@7UL+TsG!MKb?#8{J7F#>lPIxo zVG=P?x^Aa@VBTYry@^Zt0-L>`(T&|B8j|#LbZ~gNAN&+O4Y7BleYmXc?`33<1ekL$ z7#d@ID+aSr_59vlKC0}Qe-72r#*!MPP`f5-BEaX6D|Ep4PbV$2q7+(HO9wu2)jc2> zQy7L~cnU>zxlml!l6vH8iLGvaVF>TGrjcSRa^~jINS`pQ3a^#JHFa^wVs;uBhvvQ z^F6^PfzLh7zPN)*&Bjir_-gr3SW&`!4^OjaUZ;JFb?qh5>wbyLyhWW-?ZLE|QXfcryGUxYl_PXsj^%@ z8jW~6;Tp2SrVYG-EKP^bgxcMIMENXIpYrwjNOZ7$HVd4iGt|H%dsoG*8b$;=K>Z1UP&SrN<0V98Fmr28MDNka+&GO(u2~p2j=>Xgw^uVa z5MH6fqM&j#9*M=mVWpD`&H`+M77|phihNRDb3x99r6bsEp|hQg%Mv{Dw(WY4{nvC& zMgNZyY(mc<&rbQn+>SpM*tbGV8N{6cqhWyTS*Eq#nqR;clmcqnKR-j?+zNv;Zy zgbKg#N?awFSC`SIg}~fAIcu{5=8Dm^Oz7$1#XmG7R_{aoxmQ!LW><8yw0~ryFJpuL z1|$gW$%mLdONtMJu{F_%Jkc8>&^qS5FR@3z1;Xj2ZHIM&9!%`LL6q+Yo;M}f5nZiH zRDurOod;X#o1|n?H;0I)`Pm2P|5c0Wsf}9E)iSHNLTfv$nV@TEUb^2XG_20uFyTAw zRv0w>%#q6;`hNF-%Pus?zketpsR>`=2$}Gs^K$tSmX{bcNVl2`=n&DTAj@-nw@{xC z%qkWFhx!wB9Gjtst^4iZzMG)TVt(+DOSB5-9iiWL>h@B5Ep&Qh5BGdIb?(25q1$!d zkb(0vgH%svh|Y3{+Tpy6eQ(^Mn;3=Fs~VpNKCa;%iu+LT+#AmPp{reUn;u$QJW49c zgw2j6YGHK+KIKxI{Wp1Pq26#cWQ<}0-=J@a&Iz0EB1&WLB{=?~5K?t?1D}c1|I@gS zmZ0c(ddB`M>l>lOY7#llFF8VgiWX>6p83NJuzU|A8;z<>7;!p#H%}qx6ve-D2zlg)Fp9JSjwrMv6 z^K^AT1@*hpcEWeIw~)v2)?%*&y+Zpf!`EZsF6{2mc;vo^fL z%i=#FFNNdUZa2+RHpwLAz9i7J@CMcQi?t-y#Qc8n0j-bzgp0KtVc1LNEIitFes|UZ zgL#Fh>2N437~IREAKoGc$a={MX1(4I{Q7f3mdd;_k8c<>HTZ9DUtcJj!s{;op%CmX z%;((a;w=>`=Y2CxMWMVAR#w=XM3Mc_Ii_T|RYxW8YTe{c%%2GE;E%&uF8kghul#sE3oxqw@ZCuoF$ctp0(i$x~#k?UHpXV^) zoIMMX+jH2!UzUeeFlbg&bO@NQqDk-z+IXa*W8`-4(a+TYPP1hbitupALBeF`@4 zy4s6x=<9fn{C~--VbD9!4t8Q3q=c_Tm=(MKx53{YIKX$E3hH;^go(xmXpy&$DyxR7 zebzAbrGxcf*zrUQb!wp1JzgiwMYCIls|$P_MYDpGa6W3iUvS4jF53w+X_nkJHUag1 zRpw00lCF<&gR!$oBu1ka#-r#U7(9Une|lLGw;`fcCQGl!Y8kvd;|cvOM`9HLX7^hj za06q?TElhm5b=32dY(6hT6Ya&v}~Op0F&@Qj=}4Faun9h2^F3Xbk;)JbWVf9L;NVQ zp4VfySHMy*Y{p;#62vB8u)&9NoY!;_9NQ=^TOQ64G+-Ud6um`sqFZeTo07udlytlM zPzfVelKjhh%lX1mC;-~+6_ioq-CPY&{}PwKmGL-%f&X0^PJ8s8!634hQTVq07#dC^ zTZb%pLh`QLLm!NL#J~X;-WS#wU=aGrw}!Wthi-+`=4rotp|BX!jlDkNNo>AmS12?a zAxGnhx*qUGJQFQrCFc6+so9UZ2Et3HQ0Q5cOROw5}Px@1$XJXzt7B1mDjZ zwk%8X>de;}S3Xg}G1;6~7aehfjSIqr0&_(xnu5|NQy(`*c|p=VzOA2Z$*Q3UYP_|s z6O8V|C+%=CPAJR%b0j);*n#0D_6C6eOcmIPM;VSOL>jxq<&xxWc&^dQK1faC9Q$e5*vx!??M zs}V`G#CuCCz_W9Yo@YhJ0qwpz!}~kb_1EJAVVu1m)YJOG>e9$Av^+eoP=_@Qc7a(HHDLZsS-Yd7DQozR6L=g83?d6;MvRc45C6RNWK~Tav?I7wXo16OR)d_YjGlY8wGv(WTHSWjGFF6(I-nE4b6=# z*%owIYYpW;dVtLzYeM0DZ+^hgH9rE%PYHq5ExCLtREZd%T3JG!b(uBl212VIE-<}-5fp^2b~-s`YxA9 z$ErzdAtE!dJH;+Z4UKOnBY}h&S$P6@ejvbOStb0s#hWe1~o;G5OHo$%jyV7%2%`l3z-?x;)+#lT=p(u3?b+BP#SmkEV@5+ zREvkHgYo26f2~mHi^z(_gQjxD%3IK*Vs#`q0Uw`k6EdOx9zF8z^R-C zr9>Sq9tnyd=O0H13+DVnh$T(Wp>;Iy9p_sH!_)j=E;^}auvx{2GUpL32hzH5VH;n{ z6-uA;h5P7uciT-qJVIvtXsrx}_PFL^(9BN}*T6^7@gYlBuM|m{ z%4lKw4Xq1~yAI?SW{ir|orKJk<)h&BJpeVCD3TgMgfiu)~Fu`#jj`3AMG@9~>V~gcs zV9YQ=+ID|9Jek*D_Gu_Aa^V7jQsOB>b3s072ggyLQmrmBw7?A8bml>)1HpnWnp-}T zFNnIJ$EY5wyrD@IqStpzJ;Csj@W;yECwipL?WciyXbaP?5fR_EmVEJ8W*nb7e{T$e zlNIpZz6qxyET%5hyg?is73T?sD+R!us(k*EI?}j0k-~`UG{5?Er6q&({t$+HEYgTE zzNyvtE*kLG5&}>5@r8=6C>hFf~hr7d=LcF2uS&abt-yS3OHMql>k-hu-lnR2U zup2>>bDoxn%4adVYd1OnJ)ZInyy?aU)O@I{6GT*Sg_y~5sm97#fTEJY(WRVNe(vU? zwo7+8k>sLMLuHjce8iihBIz{KjVndO-Qxl;|EuWKWt5}68UC71g{aPJAZC7uP+??i z8VTcXqMCOTsL|C{6Bh*T^Mb5tTufg;>o#jB6v!LQo}V3!{)rPE!3Ga7t>Nt_1CarH z_~V%!EO^RWIUO~BN%768@##6#p!KDU1^GXq`SjKn{_xF}lgLGr9rTz;f@B>!5o0jT z3spV-G77)hhvPwCXqL zp%w+ijnHvHE;hLDCNGDj&FN1F|0hE}iI&4tQ3*WeIlx2| zNzF%N1iEOF(T{ouNd#y zd(LEN5IO(c_s_Zjd6HaIoif>{QUJ6wzb{42sG?6+<-3ey5;WB7+f!d23p9 zq~A5^#2RB3VmP^Ot%)0#O!7vpk3vEw_R+f&-mHq8Dg3|S2tg$|f*YX=k3YfYj31=$ z=8c%NlS{CK%3LzBd{Yhv!n6|w16>l_X1PJRXXtY-kDm)j6=e8ujv6UCqqwz)t&4Q3 zji^M*zYir`HH?~$DtE&Ygmfg0S0w4^ssFLQANq_oCl?} zkE4i!6RjNDuy+beVj?;Se^!oXQ9bpBOe?jEQ|$~;4PBKmIJSfaVEINn=;;s$H;ef} zvHLnW<-+I8iQi3d<(J^N7WgDe%b@YPP&O}+&>V!iS z9&_HDQ!s!i>Rin&Ru^;znxp^IzW?~b+g0e|NDS^g?R7BJEgb>=*@UP>9U>rT++A1COF z;npf){0Pr~9oi3T!X1Qy5dTU2d*0U&{sZ?qCyKxZn)6@>KA- zy1ZT9Xer8IOfG6bw&zl8QJ|bSIt^lk7ag|jD<|jyDUMM2q6-v5Rk8Zb++g=lYG0U< zO^XJ*#@`%Zx8-3Ql#ra}2ZpomU3I!V!E_;}#IBj`|``w=P^zQm(Y4TqN9IW`xDxsoqq_2>8^ADE-74 zV(aazeBp6oFq-So^S1sT;EJy5|F$gKpkS6+`sIbSQ0XY2jjoH@nwfP;>-XbmJv7Tz zgI@>fOaxsejn+XP#=UEcIzZan?vT*h29Ro8S#g2KX>S=;2lM+S>nCqc%6Mm3xtuS@cC9oDwT%-^1@<@#+L-Yg@jg!9zzFq! zlHB zmkg4eLN@>8RG*a*4h?4e!uB2!Fka*mm751VvScL{QU`o+;Ys6yl~68)7hA2dP$ZJX zX=nbFH6Tx%X&0kSiv%AR*uy6`Vh#3eR8KyM?8GoBuUA@+GrFAW9|%|G1wrMz8n|uc z0<^&@zWMTb?*hmB;ORit+|k2#X2TTFG) zSzc2N=I|e|JnW=US801B1PptPkcax04C3aHZ10soEm9Z8cfa^5_*H*S*9{*C-q1Ss z))QOqMZeN@+tI>k$|8Dp0HZ80aGt7$!ni!2+?eQ`J)8U64;G@p_rp0!g85b&YV6r+ zG{rwrgw+!fFry7B1dVov&{V?mq~SD_kyV}Gufw!zUw=W)i`uKMXbj6m!9~=p3xC89N4%sT;7p_0?I4x2byOhiruf|S;N?YE z7=*eY4D7MNk1a0OaP7;*UVk5Xb6F05+@by29}3YAoZQWb?jBna$UJE`1DMF3)q8)*dtv zy%MxA%rdK+LS1HFvp_hC9{#N%ZzU&r_I!+|Cwy2(_!`v6391V2v~=bLt8)@jjEpOkOJq%g3*MkFph3(qAymGPDf5*=DS zN8p7l0`FjXqXAu&i04vb2^HUkL+9a)Pz-kO&ild6^kqsl+rF!ZzvV@~#>3a&K7#CN zHla@_M4=Zm+ZuW(he4|u^eRQ9_`Da52Aq`@@wtl|8JZU2-S@@)sp|5E1y-;)T<;c+B)+Xu-}#nL5XaBc<{hZ*6) zV?w{ri2}hdp32xz1shKaZrLhiiaPFl2IEEP8ToR4i>Fa2kbM-wHKzozXn47LjxbGD zul|xx1nm9!T6_p@#u$Yx1Cv5vU~>|8<2T7W*m5mfbn5zMT<5gTGCg@iNM2lmZ;G3U z4inh>ZSH&!*nb9&RyMxB=JWDayi`N48JvG>ZuDcKwdn3rd~!Q&RS%Vh(dtf8UtatU zfQ7|{qfqm2J9&QxEF$8N^04n?j#|)LMf%!^5$)1;bH2W*<)WXZ|I(DVjs3r`k;@16 zthBQ;-1}@-g#8wvUr~(uncxg%AMy3ei#-0DC5o{m_EzXC9lQUcCSFT&6slw&i;fbyd*0*2)TRz~_lU(KMG@f9WC^iT7#_&> ztEhrcme>@uuxgX+3tz7pz~_rST(z{vl;)xlRB463<%}HED+Jy%HBW@M*)-1VcXK@7 zXK-VHA8ftn3f+EtLwEFmD#6=6I`Bb_PzG6XJ`hxzT2i<_rv>)zEV-P)1+fS%tm5J2 zpW)mUwOj`$`Z&N|Q6<0D$N=zbL`QBcYX>`fC>B~E7Qr}~7Hv|wKdtWgvh*JCJ&#K? zbbx}93ZBS&{%fQP8V+Zd0XpsHK5k&{!;guw^26ZOQo-+BnEd=9xHGLPgYtLc1NE(YVy-JGCGo-vl&|Xsl z?>Bs1K5wKy49F$Y_y={N%7YSe#stFh8mul|S4CxecvZm@c7>sS5MJ))H#fjX3=hYk zYaJAm^|df4kILINjzo#~8*0y+EH6-DSj@_3-(d~y_wxbBjCKa!34*$ItC>lzQ0$5t z_x!{H%1(rXbyGP@n45FlNoCH(AfXbJK)*q*(p-m6L>MUqTPip50QImqD`x%bG z64w)jcl?)G2$`yEbfYnOG{Gno719*1*E`bhU#n@H>W%01j2g|Uzx5h6%^J+HpNOjG zbhU%-AGs81Ii7Hnqp~J4bWkwK8HQH(23u5YiCWCl-%8L!=3il5fitcsqqb6kdSWbJccOzgTo@{rCVLq>P z<}I(hp#(NDy*B3$p$`0bQ#}mAMQ4(ilI2ZdX=~>{ zjTa1VC!d%X59cJ>(kfC1tBQerOCz|8`uR8TerV$rd3R#-T;MBs8imB{qwO)O__az0 z!^JI5^HzdxT2$NC&hYmn!q?^P?w}sdakt{OvY?DtX11g=*^b3nAxN_&9K{)`+y?nr z>}cQ$MbK_~Z)bUxFCr}(?HF32DYt^iq{8lCSo;)bTMV(IKy|`jiE406pXH|S z{jMnql75eAlxuguOEU*fT<>DNp!j7puN3ui3wnn?`aMBsp>L>BFB;mxJ<+4z#a@)Z zdm2&7#Zj)%U~&W`r_cIZE4a2loMbdVIjMzDhYA)!@FF$@Jd(ZPlakZZL4!YB?-T)% zt?a2+J^f zdH~e7#Ewwt6ADFpf`2F83HF-7Au%%8`hVn7g1yVao9aJd>^kN%!_dYtp6JiU%7b0k zd-4f!NhD3KuOl3UVqONif)?%O|Aa~y!C*KBLS_*CP>*WorjZJ5-)X3rB|&&UvhZs{UJX;Bs zHnU@Tjp;1Lw6%u$M^$(&f^p%xX`tLMM~Jc>A68ob%^O2laktlV{7DCu= zyg5$4(1tLcBVX?oAD|6&T83cH-z(6G0i(^`O6r*DXnhhQ)XN}D(o3}!?%C! z;d{6dQqi%g1mn<|dzUM8dh9V79eKawe9qFWX-r}+>ZT6_1n~XLl16;;k;=+Jdk4E& zoCKxkCh>S>%>hDK+<80ryD^c{d5sIq81Dyv`&eDKMs5jZaxFF_!x0)La5*+&8~;6a zNC>p}8VZ{#VBCdk_KH{r;cE~Ht(H_^O6-b9YZ8N6a#ww3GEJ0 zQxB|lh92|zrXqP2pZ!miM-}r`N}Sj!|I|Y&m??U{&DTbNjlDA*M;*1|yM%oJP0HIb z(wsFYn*LX?RNqd>kkb8#BOcs1mZ(>HenT{xWdFla#Y=+I=`k)wZ>qhhL;8o>!YU^z(yEta4Q=qfk?$_Zqm1 zHa2ztMQy!RL}#DHI3(SF5k-8!u!37lQb{iD2>+MgQByZgBgV_b4X^~!O+umZRo*)3 z`Hj{tW;lpp{Gcjb<-7UeO&m+RBi_swg%1|-AYH*H{3eMiD zgNwLbZ?ez;zpoJQTscluQ__+;5nYnzP2%G5#0V9{ggQWtbtD?^_vJgko88zVM%T(K z(iMtZMIK1PGff7gD$wv$wAa8HRL_3!2qKCtwEY#nt#RLygUQhg*q4TK zIr1F0H}{~&_L|Apve+4hXPv}a94jovvoT@d;45zd3pe2m)E3T8`Y+k7w$5(ls0;Xm zzE?k#rpDSP`4L5zhuSU*g#BnbVwVF|w#N-FnOXdA%_8Aoh%q<}B}heMNVc$|nUG#SJ+|V&&U&ZdP(Jg1eir>apkovUBL_JN z&z?`bp?s1c)Ge>~(zn7HTol$osiQ5%vA^x44oc*4@D)EwzQw^ZZfEZVnd}XOe9T-~E)s@b@PmH#ZiQGJ0m`1`^D-7txe669%Em_Ckk4!n*x>qR3bD<*rox#^ z_dYg;KI--fgm7fDyl~>PJ5L%^vE+mqMoE7#;q z@fWAc8`C|YG@8(hNq(}54P6dpE3tKdxK^1*VZ~{;Gh7tb?E$@#@pN{GoP^KeUdfdR zVVu{OZON<4s`=a546Bv~qb_e+6khUj8A}wfZIua}@KSch0Q5VAN{+VR@lHPeux~jJ z-JlMhqcfNyUb-nT#s|*cqOj4Yogk~1H{7~H`EL>}`3ecdpIt_rvUOiUgS6!&>Y;rwWl5`|s@$0zIDSA^8`lq-iGpe>^Ua7{ucNe=gim z!w!uLytynW_koVUasIRk-qhaw9fmD(^qidu-ir_z#=lfE9?(~X)1Z$;PcDhj4qdXc*R>PSK*9mCoHo7gFR2wXhacHgg zoey`-(b>-D8Xj;HuOiyQ!|mR1)zbxh(RuSmn<}t4y0GGR&y*!p+!y9f>~(d=a4mRww=as!;g#q2_uN7 zr07GfS+jAsb=Z6*yum9R3>NqG!khOhXor`u*Wo>yKp!H#T|IgKbf{09HYcAE_82(M z>X+kF#<@M6;ZBaDRFd#4e835gC-V6(3v^%L+g|v{etL^*MfShaBP#f84yXAWg9$fT z6REN_hES)!yTtMS;gSkQrh{r*HW3%H%GjgoF9?IpeWk-k>I0(x}{(V;+5L(g>s#Q?=`JslI?Uc zbG1e(IxH*W2F(u^Gv>am|%*EkZnvbD{X_Lo}MtlnM&lIM8 zp||)9qw;rm=0iu344RlH{X`d)xbbnf70IPd6{#-g(8#w0M-S1r&2Q1TkA-lj7L9i7 z7tI~d>ql*?U6j%liO6jeyHZlY*Pc&#qkcL<$zWl9K2w0ISot;as_ukrSN$~Nq^XZ-e_&X+J?mN*vC|*4p~O<3*{oY z_jvxFrL*56C?Q3^p5+G_LkY!Fe$ka9;eu#oRtigd!^Sa_{%;>bU8}cT9n|SERYMbCbxy=J{Ph-o{K~qn6XSND(r|pSX0+Ld7efC&^dnL9#zO zN8BkV{gF)+FsMQ}tQl+o18P4=aBWL2Jz3z)AXi8h53$Bw3Wt+=dG94_6_8Y2KI{h` zDFJ?;a+HilN&w}>#_;|pyrtg~-;NZT*c#Zo~-{Z|(+0h9tk_G8iU13|O;7Hq2<1D8V7N@M5s%8X9JdLIhx(%hc$RB^Qd@Ho{Gc6tOrII zjQ)`syzE7^cxn&Z8ZuaRmmnG}IMfwtc<7+I9jDQ@#ktIq^2#pG$w>-Zea{^VuHv-J z!rwf0hJSwXzF=WPMysHnBbCqIpIsBS!(9DNp?xm&8rv~MAPv_gcuku@{o2Bi8r=LJ zJa?Yu1#zW9U=yBC+rrl&Dn?q(nkjAp1*mZm7bY%Fe1N~X@JuP2<`6U_m$yoWF0^Lh6EymkQe zMl+cC?7U(A{zzExgzA!xyA63EVim{nnrT`X*glv4-JrrWDm2WOnYIY8HydvgxeU&Y z0HKYjqoqt&oYsSXb62?1g9@s&h6@iC$G<11qzfNehnOsyl@!*&Ob9#~EvM?5n+Z`; z8SL4y5i#e`AzE?y5N*tb@uT*9;D#{Ku8FWes*3{_ll z<2jUP$|AhPMdYWwcmja-DBhnYRypD246T;)UJl8if^sv&Kh-~~Vd-DKh+*GOj|&8s z%0xl;*B3_l!U6o1g-mla~q--|#MF z86Qm%=2x4A$AQQw(`WubFG0Y(y*=HVrrk>{zx zk=6!f$h?|m4w{gV;7}bGSk-~3(Z6CKocyAOKwQG^Kz%y~`TkHl-9kBae8=78+M9i$ z*Z`vthy6^*zW;p zj0yi8LtbnSfKMMOF3YuQ0_r353C}H{aSy!SHO>uMeh`V`3m+a?q!yc{B~=Z8vqkbj zXB!t|#UE3zmup0mqjh=i){Y1Zg`#Hp`uX!I!3v2Y;-NPLB->TdvHJmWi@Wimt_$j3 zKHC)zo;jQ;w$}}Z>Az{}RC}U`V^nuzpvUp0r?aqCtEt+P<1Try4lW<^Ws<~F>kpxz z`z8K;2KG(;M*RKrVj``39|FJ_;{uyo<#H`-UMxp#zab=Xz8&MD`JbEA=ljoi7KB-)irzIKjj&pX7rvm;!SYx#SGUYAgRMi+Ls ztqCn~hQBR`S0u3#DR0BvoCnpt_&QCnHsNdNa zRCw6PpvFqdzfdt7GlZLh1nVvy`mKDV>)n)w=l)C4|BH=m2*Rak7YiX{Kkh0W*M`90 zaeR1HKjS2q9_R)RcX&lv1^&s5U=INJmwev@arM*-oWc@gFstnlg&MV z-Dt%zFMPpEB@Fgm$Fa9kbw0G3^fX#KKF#+J!M-#lnv$V|5)b~;m6P0S%`cm*U)hGtHwiz7B@PR#B zm2gJ%=g7ilWO~AkEyVKdoq@8WTwJiQ2L*X^KD=Y~)jBv_Vfs!6OGAwgDy(vX@TQ#L zSF|CN7B3J8?h}I`e@AM=%YQkIU3tcZKP!X5ovNX*D?iUi2pi1fC2E~u<`YgHsoQl< z@YG!k1+58wc$CAmM$hZKA!Q05(1eWfXJ;*vPSf8K`4;NW@z`TNb@PKsoV1J9;G~m@ zp2Gv{@_Mj5=Plz59J7GZ8Mb?NkjjI6{(f*{Uoh+z_fK;_;2&jsLP*JYP8ZVml@r6@ zV`&PXQ=50j@+&=eGG zf43{P&Kq<(PERb|&&x)bn(7WNGgY?Pz=&v1h<(R#G!#7z&o3;;LC_yAnM)=z%^*Vs z&C4Jdspo5yEem-QSOFsn5w4}eJe|-sU?i23bU@Id3kY+kHZ1!>lU-kf0j}&f!nRXv zeQmI-ZhcZ;(0Q`-vGHp03FqVmL^li@Mdu}|B;Jdb#d0obw$>fWR3#}nsRzg6o;;3R zSWOGz_MFy>x9a6$0b6*`<`tcVD&sv;xG?BfI1)OF8jg>VO4b}E%x2$Ziy*yg({|L_ zx%t_-q}DPP6<;Jsc|-`-Q-qkG%e`_mC9PXBt@&0n$6>wg;Z?^n_b;-2&kFE-yZ+u*jePp~`OP<_n3|N}C)sl{&T7!;LR) z(ACC5{WTj?NGw^$dsO$S==XQv3(isOo5k9oxqSdmk`y6mrNAuczoWWK$%olNkSID& zVDX%9b3C;=&+)tWD<7plBnrDv0ijitQ0y*WQhEWo7hz@P=xG-Jq{Q)-1e7q;GbqQUr{jqlGLtxp>dP z-SMq2i2#;7kfnnqILROSDGdIkb7HO1fKOWwFQlo4`Vdna)wT*PCr34_XGd|nt41i^ z$h7f;Hn6{dJ?VN^ec=S(rf6x-(wHHiemBZKi0vl zxikc|vPa2m6f<9^%)Eu`eJ=W)YBn8ilVE{h5+vxyYa&+@^8 zWxjd48pdo0fD2j;To8Or8tjT$pBz93->0pGZ#(LAHAk9Z;3bZY?t4%Z?2)jxH*4*^ zVZ-$x$XLmT4VLS@-gp^gFG;k^2DS*+djxsWB-0UhjXF&gjIdW&fi@`@l{K;?XsCiy zgDH*I^71jxhb&%2@s?EqPiEFIJmyIeBGBL(8{!+6Lwqd9lniS=jUehU%b-Xu3S?uHYaf+zltT!%-AVaAgobh?2tI zS;sgzYHH0M=8wkhsCv?;yF;8{_N_3u8$wNJ--Z*|y|2`~cBMJ-w@xxa(ZOsfWD2$K z&QWY!#N&L&%Y6*uKC%%~AAd#>DZFQubcIny`X4@=qfGdSKWa}j3vQr%8hP@(2lZ0H zziWj3=vKvWzxq8c-_lNUv?R~q;*{mptvbo76Yu0@EGoy_u0B9%)b+Ixh>o(yRS;yQ zj!g<=<$o%`)FDe44L2u_feHMFDUfritnod zHsj>wc{69&u#V4)%(I=r_(Kp%RCxAanu6@NjyYndYt(v_yd5m>+Dd2WX2(gNg-!G( zGFav)pV2t4ruxNqa)a>oVW9sj>?@UPgQH&Id0d#WJVvb!f*E;y(VWqHLYe$T3oH(U ziPkaA?Sm}?ccTw5+zVr{x}Ur{O;R~Yyp8AbXKzy?F<*OUu&yw|YNX(f2dIimL|+XD z{}5O9X-E@*OL(zE>&LsCm6sD8WMoeP%1=^3!4ztD-;ZeWs~cYYo+PX-%-SMUV2ST$ zC>lp`l07)v+f`D+5$b=}KfS2HwdaN9wB1%~;xRiv%TIoCvpGKv5ktH*@UMzf3#-QM zsytV!7r^8w)bYc^*UzPidag7ev~(Ed1!d6i-a|7-%>XnG7(JO&nUse^u~owO(rj6_ z0cw_TfnV(6dmd=|ohrFj^bK+Mk_mR<(Rs5~)WyH`cvo{KpD*SUeaG*uB}iJ!rh-)P z)Dls$oT~@&G%n)a>aZG|BpYoa7LgLY|3u_}cx|{46mc27l^hFzt7z>lFWhm-ZAUR^ zv)v2k$9uu1o0NIbYA1Ad;RQYJMu0xgP|++-0apS9o^@>_-qW~!L$Jvnno*MXRyI00 zl;B!2g%9>%;#D7-I#LVGibcU?wF;DWTvW68576IgY9B%76uq7;Cv5gTd@c22)e&6u zo(^$>`NbnZGnJW>40lkBl`QDGSe(#>TbQdC=p*v6LE0%m)wmW$=crGxTLbnseT2ew@hB zHs1S1RAypzj(PTdYilMU_1Y&(Iq6I3>Iv3@trhFpsT=Ndf)&lV0Nv7$1|BJ@X+jhP zS2lwA8R6UUZ5UKW$Ak>_ET*`N8jv_)VNco$hrmkx11A{JfQ|2_3bP+-pyF~qcVO{4 zzQYypX+A){S`h|LIE!U)#KuhY+YYS1_4W4rLrgHeyC=9`;C(f$9-(bI8k?#uJvl5Gah3El=~*cD_R*%JpaLqrVM=I#{3uv^Y6w3#`qT{+|1N}jHn7X0lSl&%LaWcP#jo~7=JRp>~ z_2%93;x8Zjj^a*ArnoiRwLm^0)uomuSZ*IK{7=Gj^om&SBf46R(hhCoTYo#K1V4?5lF{VUa_PUkSF zQzg%E=EkKyi}#|f8)V&}hO_tnEtIg^PoOzX@o`>IGTIL+6>@`-BXlq_fGh~~i*za( zAu3+5G(I;2q0>TQvt>s}s5aKf%VF^@-4Hh39J0FzLSNCm8d~m1HjNSP-nf2iNaXfr zJ0m5N?o%3d@o3ym9-FF!6-FoUD$I_8^_CJ_(2cKwuykY&A1YWW6ERm?Sg|e?ni}O{ z?E8lNa?xwNLOtw)S2$k2M;*Gel>e05a?XACj7^;lih)BT;f!_V6Eu4C_$=Bv$RJI( z<+$I`(X553ctdcey9v(L34jH=h#6Hs9AT^44DHZR<^!}9AVD9|XyUQ<^3HM=T{gv@ z!A)LAK106thKMLK*$3^I6T-#3BGFu*7n~N?;KPb>;VBhncfb{132R=H>&S*^gkcX_ z3vyt>)}*Po(kMi`i#roZjnNuaQDGg~^Icz#1C^)}$0E)eqDG^q;ZQ@g<2Js$9s)|K z;iqWzao`e;cP(mkb!jCR#y@-J&K-numxTzD$zvQ^OqSqQ0cNv1yg`%qd>Sz1Ij_&3 zjTAR(yHQAzy^TbQ1yxh3e&Dnb+)$3(oz_IOS)prihPquUjy)^XX3|IBz=%_%q2eB| zeK-|!Wh@navn$&A^!9=QwfO8o%ERpmmulwkRBWjwk+4<}uGYt=92FM4Q`c@bpN z{NF3t1k73B2f?jPG+udh;=NmF3Fm)HTdHE8eUb1L zjb1S5&`$%y(V?saTIJXO&WJW!R}Qz=L?84~LvwV?P}WWloi-335A%~_kL7bInr$^} zEv?XyV!$_NaBWY`uKvYQDn@voA3^dkB9z9>xuPzQ6lrLXH-xV7g62;-M~<$qf*Pxo z@cN+-%=F{oEX`JD-VS^XgOz!-4wpO*m+}^#)2|7;W!e|{cwg(^Q)OFQ?T(^90zA|S zc-Nkf$5Q$;d)%OXH$iS$CaaV%{12M@Sf_xPpb(h-#u@gzM?lF^PC|6$oFHf%;Q`S; zeBcSf>NS583^QtRxnIJ}<$Aj^t}yl#7X`gns^HJRVK6U0@7p(5+@R_)XAAVT&j;5; zvtm*Oohm4ywaFVa)8(whzE6A_1Wxm*oqxtCp`~~aaf3!CGlZ;86rskKZ%9jsPUQ$! zfua_{xAPXX74$%kSeCMs=$xX4BUPYW?MNX*+n>YjHJ~)OLFy0}*n*zzAI~#FauR2p z);5O^EM5E-;)DvDxX`Q9p(ICBSUoDFVIW1EhPE9(p<^8eC(nmLuWLkdUxrcZ=a~44 ztdTum@hML6ne5xqOoE#%TfP&gdmj!3|8zen>7Ea|)YQNZ8(aIVoXF{}Ft0kV6AM#V zaD#FXat%E2Nbw{6toK{$* zqMx0i2#(ndDtYh%8lI&8ozV%v8#6VY#d(3gsfVC(yCb42i^GD20)u6OcqfL%$*?M6 zWKk}0S(t9B21X3!a)^aZPBMZ+VUh>zz3f=I2x+-o3#Afh?@haa$Y)S@)S*Rr5*dh& zcOMa-U{Y)9O*@lfGj7h^vp%_rriI6*bDm*&J6y*h)OxL~U>Q*tg{YFC{v(n^^Qz_( zq|d@s-i1d+l}0HpdoGyIrAO*FIsG0x=>Z)_%jxy7&4925{m`$fPjvcRG@0-WP2Si5 z4w7z0;oaTf1@(2D9{w#wOQ(z02K&(u<~4p8CPW`__rDCgWSbnLW1i6X`E(g?qg3`f zWiYfw1wsZDCX=){`_u!Ld?frx@miotaMfYq7U^AhwvC{Kw^3!l5q&y8F30(!;M_p; zAR{mE`)VS`-NC34bBemrE|z%j#BPq%8{)=A9QtUN12$y&L7Kf)+Czn3U7>`#sH-8t zs}v)Y_U5vE*+Y(vD1X8Pi(5Fz1&WIYBvRUM(~UR`aIscJ^k%O`BMRMa5N&raqJlc_ z1s(BVuK*sGIu+w;K&!)-9 zc{JayoW~T?43?ZF5#WL@7W_UdpyGGJ-{9W<(B!l?lokCCsq=e4PrQr5AOLN{h8!Sz zDUicEZC@ujL2eV(PBw|=+F4rl1Xmc{jQ1G^)rXGNO|S)B>N42sqlZJkf?@L)PLM2o zd$oM*0cF?o0@?cj00}2xOMX_UJgF|M5undpy5P^E`rzp+wYQ*EqbzFjnh7dLH z!VNr48R}n_*Ycw(xUj(pPGO$V@RhJ=Y*%Kr%~&|d05{Q$=r3`+>o}c=>bH$I@{di- zQniHV>NoWM<}m6Pz6gU+FZ`hBGC$Cd2!!-E!kSy7>S=&m1<;_UXbh!o1RKLm@f{vS zg0cdYQFbxWKuD1wNGZ?hq3I_g-u(Z{I321KS3y_28r=SeV3(k0-v+#$tYZ6X2EaWp z9~gqhxg~g;%DFsyBmMv0kxQiJ3#p9j;`)iDyN?^%5+s*Vz^5dpPh_$@aOQapJW3;D zQ}JAp#lM%pWq43Qs++?`qKBVbXdoQYTLH>vPUtF%-d|d%PbZ5O$BtZ(5tUGlYJm|D z+dkYEF77pg<5{Xi;sY8*!>w8O?TW@6>%qsOd6(4iM?7ql+QFV%&@Ki8Yi;2qOc#Gj z4KWqD@L=D3^{k)t!53VpkBXG}Z+-d=V5<^+bpOt1pgV?yQFm9W&X6ATY*&!?UABX8 zh!J`Lm09vazP7yHCp?6sYpva8%F{OPaBE_QT|lFCisc&&_xc*3BF9)v|f&sqhCpHVFZ2TTNJ_>5yH$m?_ zcW+MC5(Ym_YkG3*F&&$-b5onat3l(X9 zjCP0b)&|ubHTv5qmM->|iyoHjqBYCjQP6r~hH$30a)tUnTt>4Pb?WG$*9^|nLMqhR zXD~L&2fQm8+235K7On!%eGQK6#9{hc|WOl(|ZDM3!_w5353`SeE5t6>;=4 zCEIb*2Je_k(~t$PG%!1g$fVJIS6FOyf+|zlUWPX2#y<3VRf&+s@+jBQ2!BKU;mQ|6 z;K$<;ELecDS;AJICgNBGs6G=S%ghT0??+7i%MjdK>jr;n;59z9OgwH8mHj=HP_gK@ zpe|VTW{wLSjEID?s4$ZkR(^7Yuw#7I+u@o4!iG~mEN+shu29yR@D$Y&lJr!?6omrD z;qIdZ!4?nLzQ7Cmh@9atc^1 zzZ8&Z;}CBzn)xo+#SE=Ni8q!n;BvK<2PZr&8a8F%*_Ud27LPJs?&d=+`=&=nzoQM zV9s^~mqj$A+&m2pFAXE1b2l&_6vRoC1kq`@1=_#}#~K-7+I=%jTWXX(Bz;V3#e+R=_xWVx;D3{kucGo{@xMA2V7h|b zwq_}bMwb&r7H#54RYARrdW}UITb6`=bF_@W;B{rHcYkyb5O>)Ro^|kptFQR1N{EC% zE2{`Q@iFmJoMHD9C5-rsm$kNVp%INv)AK@FX;!|r+0LuZpiSg?ZcOllkn?gXdo#%& z4aF)zJD%Ej(vI4A3$M#DFfHb@p3EC2IMhs#o9dJYVUS#oNIWIEaBx6qdJ)`@GJ1gK zydDmZ=gh)#xrs;7v44d1j-|#hzI)2P?K{awj0%mpwC&c{9TF~6&tzMv#gn7yJ>gC` zT0P7M8|%12T7P#KrQofay-Nve)CTzNMJ)=N$$R1HOdOu}?U!@vy~To_YV^J~o-oeS z3#vpaAZt6x@`QWnuX6<-j&|+V!%Sb{M5tC}v;%!>39meBjA1`D?x~jttQ<@mp}zG= zGPUmM3HDtm{yQH|qFZj#LF!r5ESKQSBQ%(E-v|ESo?3?iJp9Q^BDDsm=qbgo)R;H& zbqnIJ2waxu1zkTmuPwTQM(FUm(Z_CX`Jp|EC0htQ#CLKd+H;!Qbc(syC}1gH-w3V^ zhz1nlJnc*k@BJAMywI|p7H+iV=~)@(io6qc2BYscbnR)h*-K|}d{$B3S4BJCKJR1= zDhnl66BDt>3{IML(8xx+SpCQVzH3Qn+^kLHQ0Tr2M)NG6Y zT`I3|Rxs-&lcoQ1-Z)m~D^#ltyQ75EiIhJJ^FK-doklx>XFuwFQ)xG_yF%r-eUE~p z!{t5kU_5H!T8QaNC!1mUIo|6m&xdrcftfmr*+%$abpoCF+LXL~5CnrT(l1deMf7&Pn z6>jVf_o_L;)+XLi?^lEn)?8eB-=0fI&EE@MG}oohmh!o3r-Fp%Y<($~zZrQ}6_$4( zL?Prz*!i~50~*x98_O9K=T#e`uofDevc?k6KAsr~w+7Lol@;VN!WY_=i~_s^TxlB&Kc^D86!z!co^x9V$LR#O z7)u8&*U0Jc;8QQ?KPyk`Fy8&WDp+!giFmEr@gmJCzFi0akK}6)G?x8?6mSU*QN-b~Li}QZhNff60EU4pHHll}~ z!n1f~91Ya4qB9gw>WLgZ6WdWgt?b0}b+gxl8eO(@&~fzMuBC?}JvgheO4vmcZG0ZX zY2<}JTPv9?M>|j>4_%_UMYwoJn5C1TK{GjG8{#c51~r?>#ZTSZRIWo3ssbJ*BHnPE z=5;Ofytw@Uro~a#u8|(-GH^wlMKCn#76|wl>YH z9-81pl@!tQ-yra|F`KmJw!9-So;^Ib+GV5KelYq}vW2Kw z)B(kQ5EXWM;RM@277y0=q5TX# zlCO+&g&jT$IPc5z81suH&x*l>_lMRrtdik`cq@81ZizqLK=kJ=y6`Au&B7=iRWF6Z zwX-B9LdytRF_w{z3MkRxzdYF)Z;Sb$8;%a5U-vEZP*b+ye=q_MapdcL))g{w$7xSH z^c}y6uiwruSHRCYa=yIUfF#3fG->TU*12&m7H1f^EQ>HvK?_H4AuB~(WFne>CtjNy z(T8_6i__a)815Q;{OAZHZH^K~qF;-fd92i&vk?*tPofpT8+=k0aNHkmjpcP3XifNn zYy4BKBVg`Ss#bfoyy*V8fcv?KQyHty7<3qV4-h}Sh(cJ{rdTBmv~pZ}uHdYAY_bo` zDI%NZfZFaJeBt=35uA z6OFu`pXLt9;%a@~0WDj|#+xYTBGo?RjIIOU6gJ9XW`eKQFj zb3VRKxxYXMqg)hFtcrpq5n#gDU|2F%xXxo}olIq9iKDC($FH3paHFD!Mj2;kfGu%s zYff)zX@>3;+K!>HA&sg~U4pg_Pu*o$AD{+D1rx`x6^I|bCvqb;X-kc%5BD`<8AcUt}u zA=eZyAx>4{z4YDx_<{ccKA!DC6BX??sKM0KA7X|Zb2E_sxbLJ&&0J#wOFj*3MD3~V z)rbU(KI4+thzd*J2Fnq{@_5z71AbnV;?+Uhky~g=n!k1wlxst@`hJiLO!UL^Cr>^Y zN4!zO!C`#XAXTW{_6XEGOb7b%ZL z2|2v{=mrhYY30VzRP-TqYD}X1KgdR=Bu>oV z1`V$brx9bLijN#lReZiJKABB7vN_g~^KT}7T|AL@ii5d9(?@8n;lw(dLO3;WSYD}#a;Jt3`|u;r(m zJT4e!U1Wzg+N!R9d14l?#5>-0_8$6*WNr+ei+n@-^9=07ow(}r>05nkrIo^IO<>o$ z*meoF&E$P}JI`iRmgrhB-l~8PsOBlbr>`2Aev)`2s6Iz6``){R6U^%A0U-uqN7&r)^T-c6Z zj$5kTc^P4$@{w?SJKokt)d>|W4+f(fhr!w$q0Exqhep8sJLqUnR0*IM^m}rI#P7HT zY~VZ?|I&$#)|#Arfsk!u+bXC4JF3(M{ChY8IxHmNKUzHBVL7hw6h>G}>`)RNZ~MvX zY&ykhr)zg&ky&`tnZW?u=wz^>Bp+l3mf>QiO0*74Xc}9BUIyO&9b+P45t^?HE`e^S zr)a83adMxTyG>xk1Ez0|Bv4&%8HI0V2YN~o4;P_ItvV>|J}Nr}2Sa2tc8f)C`H&!| zRhA}aM!1wzc*dg*UJ17Elrzr&y!H5Oj-0-?&8G$(5U0E=dT@kwDoK3QgSPrCXt!Gl z-qA!MFXzZ5+>!Zwgk95=|GyLy46%KU;DJVW%f-vnsGrD3fj>Ch*@ELqHM9zlxWhu9 z`W@s$5(_D?zyk){rAX@Da%@ZywIEr%;h99D_uf;hS`E^|%e7R2A7~AhLBFx`G5lwk zO@)$sMtXFhip&ALRX`57Vt`sK>mQ&Usn%!)Tra_T~rHEISRCuL4t3HJnPUR?w z%OnO!x6XDz>p7(^5-F5h>j%fO__*UA;tX>fRM6|V7QQ4I;9DLUsu*pCCr;FjAJIYP zDA9(OuNm*_<(XWuYUL~H2`wFX{w(bBE&uZDDZqTJW8bUPrF~x!(@l0K#u!sK6yBy2 zQ>|LWyZ5X$!O>o$^=l>XESBGQ>ue``jhEeW9UKba6k5qTri=r-FmH)LuZClK20~=h zK=5d0g4EH@@C7vC;j&E$QQhuswgEIvfC?$~S{hJ{CKKZHROJnCog_>CSaP4FRD?%_OVR%fcuwH;A#afTndv63VK9tEcI z)#u|`9&mD_3a(TMs1DKS!;XO}K?nV8oEfsPJ$Prr77p3$`tR;fVr`eR0d0^9OGS_S zXwmQca-#bZ?t-Vlavma6O8MA{#zfsjuT&YeoWP|6O(4^Zgdp!zM01MdYm0)JUAE}1 zn>ZCpIejgM4jK~)-9Jjv_Y_ZIjjzkBMZ@GkTu@iMO02yoTQG4NQ=%sC2IVx47L%I? zRQp8OxDiX7Ic}Pokxg*$S2u`FjRc>ep75lNQK&-k$5iHrlWd4Jga&W-N3VZG8iT@7 z!y4@oO5oos3<{I_MNF&51}OD_;{ACn5i!8IZaxs7ABRPB4kkfG;V|3eaG{4_J*s38 zJSI@b@;WaQXZ$Sw1es6c(d{ty45uFjshFicdxa~(&#$Uclc$18Xk?`PI~ zJ}{|?F*n_URcv?4P~i~Tn`JQST@(b2!nJ|L7q9tK$NG#y)97EqA?FaM|9Vlx zJ6EPFp-c-#u3Ag^vb=*>UX#yJqh_R&$lg$lkZ}WVMM$9CPg3jS4J8bVFvAW%l1%^D znB!z|7nbn`{dV3Sue%(HvD<_+rGz}6>f{5-baXVo;uuvxDzvqDmx8@_>g~>imh0Qw zL_ynJn4X%!k~K;$uqxupS#uZ#NH|e+oI6o;K{Xno6*o|C>x@zn!n5IBLdaB`!yXNU zLrYvQ7P-i&rCxb2NH|3KvV_fY%rpkr=2qgj5$-;q#Z&8DeEGhmj0m75Ziv7&^A2xHSQaq zi?4AP_`q(3H8Im(=TXv`%M6zc!E9R5Eu!hE3xxw=-aI`_n!s6&(zN7sA~um8Yv$cSe%bN2#@T4#51;xGDX)d#qsn0|7_IF z*+$=|rm}5(ZA^>vT%Ne%xlCRdIhfiRf<8zu^b&kWI~cA`T=M)RFzT~I~ErGyZtemyQ+F)N-GOOuF3tBE=L-lLJ0rBTn0Vh;g| z6!3y`C4!(uSs%E}Jf~{n_jMz3Uf0kCc3mZbq`XH$V^9ipVB8Ka49<&(&@4ayy@b_9 zcZG>Yt@QFFkf< zs%;eFt!Whu2mOtZGM?~XxI1d5&*vm0M8cnTr%9S`!xR0?^{$Y#Nej*Ydclq(L^AJd z$kP-==L?NrTDTmLGU{4D-s-oVjKU`uJm<1Zq~7T5MCq!a8+BXw_ZIJkHVq@8HfoXH z+7JQj@xEZC)k=8vntGk3DN+#$%vMHT{lLX3i_l**g~3ijL1OfAK267Ol2QP1?4R7?Hhq>x!z!RtOul9r}G_`~2F_xhn&}t`Swql*6mW z@`%H0-Aii-_jf~AUC!+^sJRK<6#N@56(c+gd*@^MS}ylP9XE8pE5YOYo{&A9zq9a; zXu4$h5I3-%=Qx~XGcY%|xdkBQqp#!#H*p5Qz-N9KOx?x%v;7o8-_#o9AQx6gleowT z_-`Ma{YjZbsJ$TSB+>ER9NxIhdz7a95fywnOBqX*m?SF3-FoT`*{^X=Z-ZPc>b^Qt zXH9=5XtP#D(~1*(@TMo{zd?8_!WJIB3WML`rGmo>~B!eaOAyviU zP(*HAZNsSC|Ljj)rvMmsJq(ss%caNM@6R%n&B*uEA;KFe-9+ zUsnj}zRx36;Y%27?qY;_X!12L9FL(UI|}Bj3{h!Qh`IdE5+C^DLZ;bz%BXOA9IzKt zL&jTCV_av69rNF@wNC<#R`o>loyA@HX_quq?g~k1?Vrw{kjAsPJ4-DlvW8WV? zB=I)p70x7S&c_fRuyXHzx1e3ehEjRW~okY&vvH6O7}(+t8M z3;Xe$lTVv#fzaw9iT)>j_z-Zu8oKBUkI+*%s)h1R(a;Hdt%Wk8% zTr7gS1U43%KA>hoqdXqa%G+@=*NZCRU2rMf>eGKo`$$E??E*Y4lwh!<5o(DJ=vdg( zU<0jk*vqn=#J1N{cp)r&LKzM8ze1U9C`5>Ms>J%!U`cAu`@Yv;L~xyaED3B&kPn}q z{oHp->ryadX{3vFl#fYWuFtsn0eR+)w47f=DU1{vLK$%N~ zz3{HiaI!lIzvo&$NoARj6RntfiMNtxR3ZkLh1aibAt@vZ;tz0!ibNYe3?9s+3MI!9 zHF>l(!CG`rwYzRPB?Qk$#~o;`UxNKZ-O=8g0fztL8A;zRMG<8cVp6@5aCT#Huj>qN zcXLdzxQ#_8cO85C!f~{Vez^i+Rmz7w4UXuL3S9yB>crFT-9i=pg?Aez=(L7m zm^E4pL0{NaJ%h!wHAhdx8ooIq#Xag82(OlKVY?4EU>Ix_{bqg8L`hL|pDWayB@`Nu%N^s|Lj`nt@OEKs@K($$NcZS#_%1Z)X# zSc;*U-vK$qSg&y;b}r6ocfv+*n4HIf<9E?Pj@=6lg#0oJRhwU4UUqw{4$3Yi0;`p# z0?QVXE@ezX;E(rL)*Go0^WO^~1Uvs^>qM<3;uy7!uv*e}0&# z@=ksw9KvY_gDqV&40+gl`?r!XUGL5=4(KhRJDowZEj+gp-M%~K{@-+lcc-GbJ9vmA z$ID5yG7B!nTeAI{8+fe?g0!_nvSCHN;c*sWs#a%C(hbr6qYYSNlI_(NS-Y%EHa?@-8HF!MmfHyXpFguTs5FK0y@9sWPfLj?AnH1hJ#T6>7@Po_c(dg?25(&${Qt?GHz46kDHu(XY?7rmU4Lv;w(YHmJP{Ep51ZO)HP+yY4r-wA52(L$Ma^@Zv zNi(+ber0jX7bZ6D6B!KO{%|?!wU5GCoQ~-7?b1eHh@Sc1E?M>u+LE3_-tpY zE(*4wh3Fxhf?<*9Rj0s8B1e|tO3{!W`!B&Do5Sp#czdpNZO&RO&a**ADJmQ^Qg;oF zBZ6ihjEOeJ_rw`B`(F(ADuv~J)6#^(Gfk-r{6syj`$zcx97~XS+XEimZ$)OkL9u{hhi@_{w04>h1T`yj!gA8v5=3`Y+Oe_Dt0B75KPDgvrmQyK`W z7=DJE`T5Yf0?iG6+2svOniCtBuqK+3!v5}~91ks`Dte&P2noV|69*K%CKs;kdueeV zK5!@vCi9gpa8%Tll+st#amr_5gV4k>gP^4vh(T+i_o5^6gS~iFL-->8OcX2g5RdI7 z=zdVR=TuTPUQX_Xf~Y;_W<-r8>hnHeX^VvT!ptyX)O2_|MYwm`;o+K(1|O9 z2#pG23i8>IJ!;2G&;aETgDv90X8VP_S3lxj*_=hxBq=_7PN(Us5Y#4{_xh)@Ch)zT z%jJ&Ha2?&*`hCY27K=wR->jwz_JTX4a`#21-T%xe1FGKC8e3!nTKZyR3`P)kDT3|>QSo+F<@I@zex4{b_ana`8@ z;7>^hQ> zzbE0Q%6<~^$)hQ+xKo^*(vl6ZX$==|tiIhpt6_Bm-b5DWbB7NU-|==pe9b6GnaOd^ z;xKrMmthgOz-MnA8|t8%ixb?gse_%%XtWyQ<_35EHNk*OL;%OC5Zkf%3^I1fS%`(H z&;lR8w~x7l&381HI^)c)+O zOzSXwiXZkylx3HRON?Qn)psfF3wzEsEbP-^9oVA{4+i!66I}`~__LvNIE>lqhg;E{ zHQBd`Re5u_ihi4=H2Cy{+Rr(?wBIjmduTEa$P51E#!h-nnjF!fiIhR_aCWS#HC#5z zarpcq@30P5uPct4&<5*_LaG^}$6hImtrv+#RDFn^CWsD|?#(9}nz7Osy86h+Ve<<< ztu0%Jin=OZHdCXfPc4v9W$4eLs<=1|MdvvoeNM)|)}WHaZYo|9U{`7EVG1oq1PO!i$p<^nXp0 z1E(F-jpyER)@N~Y;)u!)kBpF#2+wNXd_ZFXI@GOvku9*cJYE|UOtbR=)p}G36^&!( zOr<*hMoWWb7g9HOjxnOfkCu0%l*@Y2AZjL#h7xq_``?15{h*4EL?_B^jz$SlJuSTJ zSU@{B>ULjTf6ghVhMlM^DM9>V9qiKEvExs@CAAnIbh=(}f^Bb!s9WM`z~P`M@OWnw z(k;U-Jvm1KWoL51asC%ou0U%(4%g16^c4a*14sq0%qD{W<{Ak{Ci_G01?rm8H{n^a z7;i;vVlb4?;_t;!Bk>|$DS9k!*GdW7;Cbo6D#4(%ng-fwP|vI9(9P7O%=b}H>#ZJl z3VALpRguy}6mI$QNtp=GOC34hd$c2pUi^+XjYYDKz!Oy^5z5mYN+w!7&YAECem^xW z?v1c$)c2W4(>#`D#d#vg$EY)QQn>%b+_$8?at4QFQ+`ddk9+tr9zg=Ka*M8O`pFl!I-rV$s%&^nPC zQ_7RdI3w5@7pDdB)hOc;JA~c!dPBl^K_6n=VG3SKV=%|&db(6{E4=LY;ycl!xhk)e zs)j#YnuHD-tb*dP=|T!sD%xEIEs`S9W+j)nEU$#*#H?T>D~C^E>`>fPp=qX^aMjI; zSMTCr!l33Tj`nhExR7bm$qdhTG3A*8mVP)UFc|KqhLj*8()Y9J`S2r`tbg+y?Xfh@ z{iz3(-BfU`3Z*G3+L@Y(YZVCwiYsgOK1ZAw{*MJ{~DWG~e^u_p-3ofbf%14dDU-Npx{JrL!W!Q(!U5VD7 z_w#|uZ;37sih6SFdo3I!U0;|9lWi@m`}OS#t>+STWj!K=Y1iE#{uJ+#z8y$hj7BHk zx0B^vsp`Ss50s>M&TbS|OYj%2cet9&?5_w{Pb%!0%zN^3UoLjm(A^DI&s;crGXMsS z<_O&z8^w6qVSg{df_%4;XP&`Zjcs~-J`SEdg z#SJ$IwA!_`*MuhRcY{%Qxbj}qdvil2lA^Jcym}7>blT6(dJRz%j`C_r^_})g-e=pU zDsZzY#RWx=RkS7lsA@2D7nLVB?&LLKSsYm%3>|Ls1q2H-t@eTjHYcM8PRZ9REY5z^ z$+d;ykRMm#Vmim!GSdwEPR4XdDO|Ym|_`ufYPB1iv8%;ak=HKK4Sr9hk?&ht z2%JT$iyJqw^ZFQP0FORi@T+|kzC~I3^;1CLX`Z`KW&BBPOTE4^0TUp^?=%X}Z%e49 z!VCV)v~c+u+JgjhYDsrEwvxE9jg7riDa~m^Zfi>jVFivVL7R;tWU-uj@8a?5bu?P} zr8XZe((v4Jq;8I@ija!ReOh})2+Y&zEjvTf$3N}Psewg$jjl%W zfROKjH}#-+;0)nLcVu2crLR&28~bS$M9qdX zxZ-SmRt*owX<=A04Kf~Oh`QE%Hh`y@c!ZUeZuOey7=UU!o|cT-#8xa=f>J^9*0J!@ zABce2f6JsWNKN51#KLr)2&3Nn5R!#AjG4~*_?v#`5Tw^}CbJGY9b?jtJZwdauIW>KrA5W71G>+vX!EGCt z^J_$7Uc$F?ymRX=_lGmBDBlHLdHH9Q=x^zmYuFbh52<*ZqJ1pPss8z_I zHtt~EY3mHDLaBacT!>{9puXQ1MPV#n>?>LRFra4;c2WW5sG(6%&{eRLWl4PM3O}4l zR@W@d`+oj7UUqV%4mLERj!`Z*vaAK@h|6bNhztsX>Zqfi7mm-OewfmWPfu8!fG&|0 zVef7}fMnbA#!H!mjpboIANxY;Mh|GXozkpnD@^7r1@L;!UED!DR*<-4%^kjMJ6%){ zKl3}o%OEEq%iE|up%zUzCZRHN-)z*Dj`f8SCy7eWRN@U-RD(F#YX+q~^j$vDaIP=Z z%@clQQN->wT;cf+VM0{(xs{KA?IS32sZs2CvkbAi?|migTu5R>jgo1Y3l|@TWRpds zec&x8di%+qaKxI>&_QDf{K~NtdfzDI{~8Tb`usx~3IXCzqxJ?EF_Q1cNZ$rLpspUW zFA!Sd9uI@K>6|B}c$FeJd$2IKG695^^~njnbnyq#2B9H@*Ywf2C`g|4-*$K2kOO>NtGi+27 z-HhzWU}-^;X|WkZ>4}YaX6*Z*ZG_mRXQ&I>9t(%Y=&kPZ4K%#`B?7vM+8iDC6U90R zD*E+MCRpS$Vd5ylz>!1pfrk}hXJa#+y+<$Pf|kASwifO$cq;WQS*1OR0x$G5TK7Hg zSQf4Q84`zwY|iFcxP3LcC6b_^HoKKEz_4dD+%HHb`gN(phkuraK@>W=wuOqKYnD|W zk#I0d-g#49xH$ZF94}d;i9Ms4a3M zu$a(etG@!T#-OiG24|x@;Pwp8beGX)qAjGx`op^`)bS(G4#Q#5>vkh_fp|{IMGi}I zJWK-{9{aBC92vC+iK`N?sbIC} za_W98A7A?9u}8DxhZ3Aa0-^U28DkWJk#l|F&?i0tdZ^|S@*duZIf{p_0;nP(EKsDD#m)H&e?pB#*+=?e~1(8t_To(HS5Q@3z+^l7UcJy5THQ=GkuZc0OQ8<5FZy4Oy=b7$Z*NVgW3RKDmRzYmn?9=o znw}v%_F>i>|3GLRL%pdsh+)0`TRWPPuw|P z@r-Ibyo`}W&V}rK0Z=F*6kHAy7C%o8gTq?|A4-<)KwUMXpc5Q8henc|e8E`NNNLfR zQV+BxY6~AXak4R9B&uNFci(e`Rp0-|)=|Jk^)!dLqw_e9<2de)IuKE@un@Zt8&I*Z zu)FK*Zq&28yTul}yBoXycIP+y<~{bFe)Icr-0j=lw>z~pJ44SVE%k@sBV1?siZ|fa z_9nG7>rpPY5DPx$=o_51*Hv_dJ~6>CZYBDn5v}Po31*lxovr&!mXVE!RqEd-%zQea zho|L~P&Ap3z*2h;pxHHpDmnwK_2Tc4o_DqrsbMb{jm{N0^;V+lyE!FShuFh#YfdeD zmBZ61?C?+9bcs0okm_XrRZhe~2NrUjwg5exFnH-r682qmLn$QU$7Y9caBZB67r2Pq z%b97c&w9%;Z0Fb8&X72oXyti<)WZ0h!O%oBS4z1>bgJ5w(}&ePGu0Q0Kg#7g>2>J5 zNePw)r23XT4}=!Djo51d<$IIP)zokYlLgitRm0$2{xJAARo=cl9<}x%gty${ zGkjp_A>!M9*4VoCI*0iygn3D55^km0!s}Bs=V~Zk*S-AM4V6;3u6dw0df^EG%{smw z?mrSE1nAfmJ*~yFq9=4I9SB>{(M8??as`}KgD^Hd9G!xT(L|(oE)(rls(t=Jrvv5$Y>fF#tM<8(MqONp0`5*x;+gQ&n1`nc_R*In85FsIGK} zj-{x=7eSnikLJ3=5z*xB>m5p;_fP{VH;B&;6bXiTCb>RA8~HAgo(YH1L(tK;)TaI= z2#-=f+5c`;TwpEU_O*p8J-s1G?FRj?vRRF`^DL_udKus=uyHkfp^2Lj+UzjFXS@kq z5`!*IL-U_(zM|#6NT?M`%(qx{3CbSU808Gjt}@RB zG5YM;T-;{W;qPYoc3N{1>@^o`7tQ|q9AowEc}uAwXBO@vv8m3jzz%#LT&P60ho69e9;jm>b zFSo$n51M6Dv$MYvx3AsLWsB86r3aUSj0Id`61Ef7lf6jjH`h18oucS64}BHoJx?4m zU9?HSYN+6ksw@hHsq?n~a(NC;{UO{YRO5qGs^jY> zYT&P0K5(}Y@%9ir34eko$!OR=bU6sD4%OHc_Ns|4^t_#~DW8*4izSc$c?KOrhK9~znr}fGm zCZL{)O;EJ?H_ay-97>A$WFdiTTF5uX$NA@V8egH$6d zJ4+lESk)ckb`m#!>n&KGw`d#5ZpTt5rH;*ct$>1NsiE{dk&rXmA5LB6%C2_R zNQlSn99y^Ch&^7nsFqu-TUlX-})sXO>#%x(suH@LzdFhL1v z==vb32}!k7_X2b@&LAT{waXz}1FstJa_pH?J_C4}jO;6nv+?5I5N`?R#e19#+}pZ9 zHW*;~+L@vkWPf>ZF8SFwu zjNLSLlBsdXv(AT26&$?l3$d>X<;QdQisDS=N_D;t8M>5oENj*gn>*}Bw=;`bZT@@L zeZcty$2QBibh4bASXy<1GmOd>%-xFoKr?#=!&2o${&7kRb#}^COuIp}_S;}JHAU0X zmRT;)X9b4oi6maA@=%VAtSLl9R(yP2zHEkeOSac}fKo)EG^A$zn zEu%`mXb9OXkEJtVXU%+HxN(LMd(yh7nZ2sy`KDaB%2xA)cc0WStCSMj9aKW>AS!lw z57$zxx{d<_plu`#A-_-Jy|K+CX~!^#ygm8?XgbRsqE-C${g=@g{$UZZ=v)ud>P5@( zdVNPz-&y^0d&zNiVmTi^*>eUJHwnCFfp!nkqtiLg`}wMQL(?TV=9ibR7FZ#78#8W? zp433Q1g_p@kMo3;82pvN#4kAaTI2-VEPAM%pNPFT+6O*i6ix{ou3CrgwDYwbn&t6$v8(z6*;%<^m$#rtEYQ1P01OiY)<3|YL8V9g!9ueK=tcKcjm4s}-En!R5ur7&KN6*W#+bIQ+R2!30$gC-iUET>39cTCwtH3%5j~DIh~MVPo~Ah;ttHU4o#- zM&WD09APUt|Jisxvf1I$Uf;{SEt+Mdp%;w|g7-#O=rEO?{OEO)+i777j#zKdjZeiq z;c#s%34Wayf-$ybM@uz?_M;InBrOud=W0NKfn|1fmye3sBLpFpng+Vs^3m^=nvb+n zrt!gC=A^XQda7s5HBU%u>s&xe&;4(j%L&;RxK?8s=09eLP=^i?gVfj6MM1cDkSbMh z(um;;JFeulve)YR`bb0)t=!vqYx=Z!{4p^$ao1jQUUqh_2Woc(E;+uytrKH$$9 zZ@i&J!)YfVwR^`u1b)^d?peNC*l@O(E@0eP(E~-L%fWDI7ar_Ba|3&EHk?}_ei^Wz z6b(yjQ#%5duj5D>jze~z*znx!j@a4aWehO%A?KKV9pw`r%@6op3&!XfZJk&2J)jtLA^7=UbUhRdL3BFuJfpB9yBYU1x{aPeBgt_ z0i>HPY#u{G5t~X=g;zKQu!W6ir|-t1GP7 z;)Q$> zu%7Ju&u|0u^CGtH{v`;i?V|D5dn=(WT5|k=c^CiZ4mBqdhX$PIqA(n9q%$bgTHt6` z=r7(5>uRm7b5zAP5aTs%wNUq2UiYD#^z65*xG|=g5(#$J3mx&8?Z|S%aQ0vRYNIjo z^0Fm-_`~sc#4e5#70|3N&y&=X zIu@Oo9>UIu{49T(a%{5FQ9t?o{Yh8eRrZWQO;4KE(JwStuE@7mDo?;$00A1PcL6=h zgz)KWpN%vcC|rW!@<3v|t;GaJv%vBzYK#Ns4Q3BMeD(i;lZp3K@tt@|cg@Qu9PH)V z#5_==t31uOJJDbvx{T|AHcmCBYN6C2nv;kfp z=b4|S$QP@YqjGG-tqFwtL)CDzr&Jk#&(H`?Y$>&j(iv2EKEvQfJs0>E><6Xu9p*0y zNJUo`7}&rRV}P5xI5xV3lOA~VPMAzMbgsen9rR7>ZR3m_*HVrN4+j(6XiLJ#Ubruk z>bP2&7=WcEW@({7eoAkmRk9=jUO0Hcg=)g`HuZyo>lXGfqBG~#lM!CVPj9&LcD0aNDO)x?nUHb<%SfL&%w^l2nTHklC1tJ8JRNoCTmfi zOptJiOChU+!K~~^`huSqI}4ur+}5I-_-lCNROvA7vF*#`?^>ykfc=GCa?7wU+wyQW za<`{`^?OS+=_=Yc7Z-!QG!@;yNfrD|3xXQB$0WgvR%k6N2Gbc{SD<+lP&@d;y|wIQI}I*; ziYE*w>3dL90sGa|r6%a1%NFvM(||V~AKJnJt6fi|@~le=sMyaPHdZ617`TJ7wfT+V z4gWI2o#jZ{BhL{@p_hXu~7Kl*b`!VlHk@j#XBFd9z!vo_JaC{#I)0F zdZe{1!nNCrD%5oMf}C4e-J?bupi>qhBLi=DOHiP1F!X)u3?3r41%8Nvyf!C{GXb!mb!Pg~8mN#FCptr#{OuBq@Wf+c*o) zYrtna@h5yi-+;8?cTF5~Ca^MWjUH(f5hw8JPz#o0zp}MlnyT}{Z0R#Bh!kV)3-|SgzIZ9i1oOebl zb7-Un^0XJrEajA`Jva;uJ}SrzA^DqKJGWkIT84uQGHqz1`$X;MMbH~B49$)2!I2#gCZ1tHz_DoJcX1illdKV=O8G)_C7&dIe8nk(pLd z0V!F$@oh6m)>qg##mkv(0KW}7P$-GZ7XPrI{o!+GRu?$f_!hQQaE7{~dzw~Dh)a6m zc)fK~U;F$HgSNA~-uY|d+}V@Q%!;D@Gz0&2d`{B) z7jJR07pXjV4^A(Zf5$Rsm{J!v?5yei>@|s@`KZY4iG^zLH!@*h?7n#ee|}h9wZ|rFN%= zdhX{)!#O3oW6+#220%_%Qo2D_;;1d&%&?zr61rNJHgkn-WjS7>KbzqzPAVCUpQweC z<2ioq`f+LM;mapHEU!1dqwN`zj;W4R{!~4@d6Ghd#Tgq-(B~-H0X7mwQo@mcO+FH_ z${73^{_iNW{|z4T7Y&2KXvo-AJjIL7=Cke3+y5nGTwf(blp;|qR@V#e3^B6mVgETZ ze%2Pg!vrxf68)mjIA3p=c#1fLr7W9C$gVe918LPrV;?vY3Ihso-EqIanqjsqo-CyK z!HBM0f^Xyaz#wmmQTX5D4thu^!i9+?j_653R`Do1kTy9T!dvnspRft7-obtW(@1K| ziJw$ns02S+sg%&=JtupE^F*%_9?tMAfeT&66%ulfnxSB576^;yX<>B-XV8}=^hFkD z=-}Y9p7(q_%E!7WJ%l>BR>;jU;R>N3HvzwNxu=HVKQvJAsU8N_Atq=thLBLxOiVU@ zgK#$K@bV|y@zxevw+Ri0oe70SGre)G&DG{+$0+#Gm-xV?VwCWz4Pk;`I!pe;MC+e6 z_uo71Gzxi|J>!DP5_XHHziG9&3TEl5J;cxz8|uN>oy(bNogPBWAuv8KwR!XwJ-9w6 z1T|bHsA{=z+iljtoLg$#rQ(feFZeE=Q?c)v=?d6^2MyU-q@&}q@Ic`@m!cWh|xlNos9?*DTi7bw$?^54x*L)DF!5pdv%BlK+(3Co`0G2Dhw z*oikyCCI!;^a{7x{H>B^grU8K5e6qSVlesl7@vkgBXM`pH<56X+L49WFnN6J&6Q%X z)n_jHPieV;Gq%pz30f^7UX$J(oi1E9wj_&pHD98&2m|c{`p>>kN;I;6F#I#6{krT0 zXCD(k*xT?F%d>MT%|4zM_Jbai=sQc7pv;Uw7@k1&G__)+U?H|W~ZkacD^@5ztu*e9_eG!AbEX7KX}6yoIyUf);{gXj=wxc z-XwAQvBCqMST`N8Q^g0DQNW73#7sZtyF$N`a*V+MH>lEyDErl$xN1^kZ&-(MnAcjT zjIh^KZBUDlzOY6J++E9QvgHy9#%R%z)WgGE2AT$O4cBt10m9w|!*A=m5%z|XX0#n| zG@H|rb?HFbVP7ao;CP%Vf6vy!pi$v0E2O^X(lw+^1avu|f^9bLes>n32DikZrB6g7YgTUG zgz7%z_M$OAdW9zxm@jw|jLrYhAC`Reg{D!Fu=Y10V(Um^|DQ3$+P3d3 zZ;c&quhJFMlh&*JoBFo13soJyUf57^IHF_sgY-2g_a^0$DH?ZhLzci!0>GLj;M zS`2t<(FWDf-_W))XJ_eIHE%VX6Pw7=9MM@TsCi;KyLVi(__lws zw0VpRjNeM?Q>tUcWiAFRt@d(i9`4n-3Ts-WE!)cVcA8_##?4vu7>+N!KXOks7EF{;#fDFpabJ z;8%QR!^(Fr<^%^@6J9E_qlqR&>VzZgU23m}oAi+H9z9R4DA8?g|}7g>q&v+vq&&Mu@mGSZ>ndV(Hjcm zgn>bUADrMZcl==UBm-=+XQAfwb&t;D{C`B`aaN{~crl25m!Q-MIisxVjkBZxdiRZP z)G5PNCTIGZQ%lNK!pE-YyEiln-i2_clIjgRCU5_{c~0pxUf_jjg*>=t&q7NJ61~2lU`QSM@P8-|!jAM0A z!n>6Sw48XMB+9ZB2BV*F%5VMd1*5vk2e$EXgqW@cC_Qh464v;dK$XZl^Kz#dc3gCZ z@MI%=I>z-XtG_iaNz@$~2ayhBX##i_C-JK&+Lo`wO9X%J3kx=jcYC~)FjC%-8aA#H z&T9xetApI3?+9<0YfoY=)y@7tdZU5XcTAxFO4w>Jz#IO{OW)b^S_yhsS<4wlS|ebf zjZJN&r=SKb18`+K?Vt&!G$JlMicUwyzM%Jx`z3E%r9ni2EA?VSkr8mNFO zwB0ZoanB!AL0AtL&{w6tx4TcOrs@9Y*_?)O;yNpq&Z?|ZS z$$k`CMFX4gK>T*T;*1WJWup+ z`I|3v6K`Hh1=0`8bpT60iU$rM=x}S5xYvHsMrUsQB%G0{iq$qlp2bnHQBOM2Ig^Qo zS~FIhDoFLS|Eq5Z_XQKf3cF!=9wP8`k(jpmjA+lspc{@k60C_Ok(|fw8ZILweR(FB zK9!s~3tblWAc7>~kQcm8J$7lI1Fj}*a;lOF*frjAAg;HI9Z@nM^BhB8N+gcyGs2gc6wfcItSaj6s3so&_jVoMt{q_!l&ni>#M^ND+cjmf=X&Fy2k+G4NS zgV%Q@*xiOC?ci&w^VK$zl78b=@F6J@sv10?M{R|WJrFN1wrRs+S}?z5!CuW~^GVS5 z;=&yV%g>rr&vz}y$72o01FNV=uoiqD8w2JO)2NSAT} zu-Be5{iqVtDJ=y@8|%1ewO!ys$1Hw>+>ht!!ga4x9BRp*cyTs=O( zphA5&j@a1 zbFQrwCtTn*6xvK&v>Uyz=-TqZkG(*dMVHuqccAovm*vl2wj}P+{30r@a-q6zY|=p! zj9PjgqmugV;f-Q-mU-?6iC6fbdvY;Ha({G@lXIB3ZeDaQmsq2)n0m+z7wT}4EG>#^%0j#a_*e(&pQGTCHGPh~s&bKs z7?!FOy}z86B!yLzRD`QQ_S;yU3m^N<;395-^{yQXZTqwFQJufjicnY(LIgbeJOo~S z;Z0!qKP3c0erHmh>BreVn_8D1;0~T*aP_mdTwx$?fHK%HL2xu$-V;3xHcW7bwBKGZ z^bgf7WDq|}?2UliZ&k3hJ>hB;+S32VF)gDfNy**^W<*bngXw1kLsRH_^w($$yHi~t zem_q;JX45D;}h)VWSb2}Sj%3tW19f(nst@Kplq`+2p$p%B|HqUImr)-4i%g)nCIOk zH1$L`G$#$jY6CvuJ%~&~Mbc{(9LXyf0k(I{%jH3O*M=dS?^&9+s2uuq;Vk?|MY6U8 zE&M*7@P{jKQ0k^U%K97ADLJgHiPia3Mu-rU&kOa>ipuJRs@f9wH=W7)LMr0Tds-m4*1!IgqXBM2<6t*{^}uAA zBQD7w1o=RN7IGc87zd_rUhZI6Oe1R9etckLJ#2T`2%Qs6Ft01epvzWI$m%Jd3RkQl z*IVz=rP{m#KCo?WKrlSFBV?4t71W!{d{9Wocx2vIyCwF1{%D-e;IuoRjG2U6oF<2Z zCj>&&ZS_Zw!D#rH8sbGwn1B~7524o$3D$O(Pj*~SDvmPqP) zPZy(91w89UOB0rmHs)VO?xgSscY6$s9Yi{Blhzd`wB@>kmCM;gq-)!n+Sb0Y7JRn( zLJIylBXi%bDKM0L+?4kY2~x zeN3%IV>33Cm_Ul|xM-om-uvV~UTy(KvFoBEwp$tJ42rL=&}})5H)Xd_`iU({7g3=}7D11EmG?R9&Tea!t(2^n4oypEe5fgXk)4HIVbb0P*A9p%C8N+j!Oh zck0l9w5N>|{OL>LGxavxu~esOz2pqe>Pslb5tG=BnEiY>`ei7nguwTFw#@P}cz?kI z7L^JYzV}#z*M3yOg;={dYx-2d;fG6PDK7CsHvAZwg0qfJ^4=#{7p<^YIqi7m3^Ts5 z<8{45v|gAICr-j^DwPh)U;Y}82+r>ahSZcG_|wfFV!Ghk@VXnc?M+ClB1ZOOubhg9 zzm2|oL-QCmn=q9eGSwGK_ad&CwU2Z2i|&LVshQiIJYbIK_Gu&@CAGULtYHmz(f8Hf zF8usM%K!PlC@3As;+DiD^}yxC$O>{L-KsBfH_JaZERRsE@MR(p`%xy`1yT)MB3N3< z{J6%prZ=XbTB+x8g#0#&m~!z+HEd9!Q}GLGc+i%{jgq4EGb_qqP|R0 zZD(Y8pxsA~Blde^A2p;cRl|zi25@zj&kV=Sae`^zDgXPwy!~HU?hLKP3#F`{)WX!r zzG-;RZoL^Ga+wZ+7HH|tk#cBF-b)Y9ad-t!Xm^SkfiM^M>gl`creg^Sxr%EIj ziFjmmJe;OYqhAn%u)H%r=4w(%+8kAerNIu-XE*zP6nDW|zX*Ypmqzvz#{PBDZkd%{ zG!)~tt!poA0%=0<;F-Y>(M2Nr?m3n%woG1GKMDD3&>6LJmM~XU53WmdM3#@i9X!cA zU|qD<-e6c%kIQw*t(<8dpdahwX>6NXZHW?{9+pi+w{$N^zMpJB-_@n~9Dpju^UHUH zSN2)oB zAY9&`??IeF%M23s!0Qel!>0@kKZjhqey9?qPNB6{rS|Pewqe!p2A%W z%kJmYSSkN}8@JIc&0!-cv7#$57Rp|uluh`5#McGBXL^9@g%gxIMs$@j6s8bG!q4vF zg{8BRBoAKV@HTuUo8Rj#mP6=dq$Rau(s%0TW2b+oH$xYOLV1i$-DMr`3wyzi!)}mW zftYmTL^+;xSv>EY0qE$X03RnVR}u)$c6XCc6(dGq_07J_iC#!FFlOlz97~qJgQZ9B zE z;M-$%xi7rz+sbB`CkCl`J(RRbvgpB4QJ#o7A&4~Q%FgoE+O2kh&DQiy7-cPLe<%dw zJqBASVUHWE`8aJf+nm9rjvTM$@A0)*Rne%M)v?zm3>o`f&f)}G(Jv+YJ=4aa9R6en zn3n!^qF`!WIgMsN^@7@!jjV_ay8h+ue}x!T&F??n9#)`oJrlH^%LyS>GWxXv|^%}vtAa~|`4Bpdk*seGyr z#QwEL8d*>{U{5c&JRE%7HSp7imt}2eAZ|L;)^lab(&JM6U>Jsq-S>hkr9Q>nVEG^# z9d26WiqhAb-UZ`|c7MZl&c`m1(4m7jG)|Xe?FD0oQ#+(`r_dURLB&zHv)4{I>?uF|2!^4GLIzHN5 zw36!Bk;3_Ueh*)GJt z4$?mBp3Wo)i=v|-dc2&ttW4kIN=Ulr2EBEBCdJZ!zv8W6zcog-Hr2Qe{trU zQ9}upa5^S|bCv<>W3=yECH!EoHD|lME`09`B1FN&FnDo{2)O_wP0niV3DKR1U+P;; zJM0q-CvtcTCv+q_J&Pe7=6qIIHCd_^4Tq7XG~kjF0CU5rCGitn-~_r+t?aJ>t7si~ z^_3IcM~nR``+cFtO|A~A<>jqst$s5<2&Nr3N*&1k-)4k-qRJi|8RLNwQPQblC42;% z$jbNd79E3;O^CSmQG$~hIG54*OkyH3Hsouoma=IMbYQkv7gy!xM za@rOVZ3V6z;6pL1=X$UT`gP(w!P2_5q&l9XJyzsdbfTtbE&=szciLQ_TA9K*ot0^X z9`zV>!uv-Ij-V$z23_Ce_CxsXP>Jx{>o>8^M;ER(g$(#n$C{HV1VOVDoDv4D*HTTP zZ{(wT4<%8&k9`o7^WaMPbUg2k-CqHwPV^xv&fA5{?`NJ+PmBlEdvqww19vF#mSjH# z2StQhcuzqA&AZ7_|D*)2lhy`-0xcg_iGf2aFXNm(2OS4Kx{;*kPiuGD?m1_Xlq=JQ*u5!LThP zF{4{?yh_iCdU9@Fg1aRPFeK0cw9qU0+!NB@_&~sEVXA2P^uq~K#!%jx3Tnf=CNwa{ zbde8`u611@JU`K#y(hROy}wNdu7}$u(S$_ZN)PvMqno42A>i#oxcUBxq&}H( zQIws@cW_RLo)o0MbP3}V04YsfTR1qdoQ&s_)$LD7#8{r~V$_q$I%2gkT4JGm3&SD% zCdZRhUtXLyF?cqb+THXpDff2uFhHX(?8Uv!5Ai+w-0SUxPY7f`qM4FEI!;Ej!cJ(e;0k|(JCn4vk|&tedIi(~geUfT-rD6=VV+?&V3j(?$R zmuO5IbJPswUIxO@09SDNs)N~&sJ=~F>Tsxq$iH5&Vbv-oBu2ta>jj;ijydVN1k`=j zf?{T3x;uE*|3 zRcVaP!(gE}AT$%rUxwfbiY*k%u&tv#J-X&fJy)Y0W~PSL7GbYQ1>8FA2cLJiL;fA% z(D!5%7+diHjFrBeOg*13dc!S+{ueuT;Pg9;$2a8$<6S$eT^`}Y+}YAVJngY_S_peTy~FevB9Ns!y7L;|55j6$09F?YYY_(!`G)Xwg(?GwCtg^#5Fy!q37hN%!=`3*XPr2f)`;^foE)fvLiR zy>fkYU+&pMeBCJ`bMya*8nFub%Jz6cJ+!phftBidmnE!B9X5<+3ktoZ&IisK)%Iwi zd_nX8Ce9mJnLoAFP*~5o^4=6`vsB-=!(3jEi{4n)mp4NbbiBjBw18y(%uL+lFGFpY z%Ek{3a)dqt`b}*YiloZ1F^yvxzhivgIVlS8FPujxr#wL7b#bx0A;oR>W~CQ+eImqK zxX*tmV2#~};U=fG3V=^aB^q8S6RrVk-c|?o(A{*Dn7O)yl2N|rp|k&^En*L>t&($yx1Y{ zpX+l4oI@**edwFp7CNZp`D&rP?+3IVWUy}|sg0T~Nkq<8V^;)XEKl>g!4PpgxP^YR z*PcJkESwzL(v6%Jb7D%I?@?KE9YCq>Q$fUghP0? z0^g%Gw8X$k47OryPYE2w{-y-5a(c_TBEB%z=5iRzx4R)RQC{&%_#GuD7<+DqM+yuE zqOEL*hT~)YU_K*0{eNzSANv&rFVS;_4Ok!s&nX^;>mc#I5w7DFNS9)iA?vakO!v6P zVTA^u%bPoAlu+V_8s>=>BBjuQwgmHV<=P6(G#Qxv++p?y`B-7p%2!9Y#oQ&**KMR5 zRk5OvpnM%7PYQG@)cu+nPQR7Ycgglhm~=i0R^B6FWUo4x<^tDBIYZaaY!Ym;^ee^( zfSX11kp7YCPl^wR7JKmk9{s*D$TS7Qw?;vbV&jBZS%=D&no7gk)l?HytKtI_^8~?i z@#5`;#ZHh>msSwgXBfVFp%JFH_Xgi#A#mnWKw+VB>0@aXGeja2{S7Pepj?9YU4_N8 zC2^TA)Z9a(OU*i*X{3CbIz-^HS-gX(`Q5>7H6clXu1n@^qR! zaRjpZi@j61LqG!>?7xm<4N|vgx01Lk<}Rl~#gaj=0L?*f&%(%EpX4J0tEk*GQg_bi z-{`|)>g2heXoGu~H=5;R@S}pT8KXO+rwPHk$!HHK#{Id9k-1hEW0It|B>8j6W91fM z4BD0HBwg$`gF|Q#_cD#E&W_RY4#H3`SbmO62rJY7L=a4O=F)W*_cFWRCCV?w<XxEQfUE?@>~?}R$Nb?z87)+wLyXZN!UQ`T$@{^w zp8H9!v>Ir*c->zIv4}3M_Dc(=J@}%JO~<{@q!}zIKEgN3~o+wfdCA;Ra;NA zXK7yVxptf^YOv#liOy$6%ZE3Xzr+iwx6T7E$U#1D`Fdy6OY{t#;^15?5gD_fD0|Z>N`BkCpoo1hJ32 zas5G*j44N4@fn>2+CnTIJr%S$!eP&Tl;VTmy6s`mc9#(OCOS`d;-YL{`Al<2aTB~v zafV4tyudR#6w<3ROX2+3l>&G_dHNDGST7JEy!6lOa7ai|vZttGl@5>lvUR@J(l8|u zG$#3so)s|TKGvBjPXI>m9^A{(t( zlguznGz;8Ao~a>+mWLLWKNl=Li3pp}*lKWH5~^0Ayvx^j(j>=%QJCkLLSRZULUEz; zZm>7b1AaC1f*A|t8fdh5KHRMYIwPv@4p+i#1=0HZioMcOv}X{s+=DLr@Z^la>=C4; zYOmsC{VDn)WzXvdkVatNC2)Jicb7)?BZQ3#;tX7)tP#3akd3wAe%1sL-cH16eJ7H5 z?ZsWt?@r7~v$o`7n>A^0CKoyOQo{%(_(T!~@+NviLlrezr3;7RtAv5mQg}KcbmCVx zI9x_9+AHgL!?nU(q*D|tS*G=(6Oxn z%-!hW_lsUIvoz`GZiub7kHbI_t%3FE*P80jXOu%ASI_BYhnCd>d*U5A-qy0~w~ z@|5oE2i22EIN0w%G;{hJ&Tfo=?RbIamydkAV+{K4+ErW$IcaR4Pw()yHbc58qp1t2 zpEvu68zKXVoeRvN_qlyD@${``807!s zWL+}S!N+oP9cSG+L%8^)ZS;a?243mtZX|v+U8thRiJ=ho)&&YQhyuf0;?5F1G2~TA zs?U7V2g=Nra}8@q;8WQLb{~=}r;io$usQ^I z{FYO|Aw-;}=JkX*WmFg}KK-V>s^h)pM8tWEjnI2F?+YuxATLLFBziElg?*yM`ne20 zXdF!9Z2NrrQ(o6X^n$?Pjx`5gY3Yjdgr+vP(xhV33*px08YR5!VuXy&=*8nGZaJLB zt^IBC>gNW!!iI5te#Oc^*-sj08!CGS18_%dGdk0|fd|mGaQ3(xFW92J8nW<=fI+c4 zp3r=fFP_y-xn&<3da;gCNR~dTRCI++O})_A%mqw$(TC41;n>7dF_DuD9)V(ZBHwVZ|Xz+BooE4g4&aaC50ITh5y-_VF0+Bb$?$^>ts} zU^qXJ2HB+BTplDmL?@u%KAUYBmfkU5PM_N~A|QUaStiVa>i{AF4eR5rt7YJizlE&I&V};Cgjx z#!suyF*}vcL%g@Ho69lGYFQN_Sduttws=BP0U8FjR3~9`KnJG%x_W~DNV!aPX~Cx* zI+HVuIlwir*5>vctAB3gDERKp$3>R*E|Hox9D|cExIZFSxX}{DGp~@ia6MJ}a2BCR zE4kEe$&fN-k10elqWeF{;vk`4%}_f?dAVyS02mgt=5y_#NtvVdf@ya`uHi} z5gzzT(7T;4_=)~yXAG8;`S)TWx}fEoID=qin!Q9zG=p5;Sh@j2h1o*kE}Rui!*d%4 zHD?j|7W_3GV`VF3xWN&0$?z9gP|tZmQgj}O>BKvei9RMSpHsjraV=q6=(>FXqz;V) zub)KI+b4)0z7{gtW&{7nBxl`L1wf}Wey}@=es7H@*;c<{h-!;#Z*R^}GsIi&$u|{X zaO5OOLmRlY!+E|E14E!+HDdN`bi;J<7GWr8xnTeuO=xSom2Pdy&+fXLB6OV6tJAwCy2HuqON7@jY=K`;Nd&Xr21KaDh-E z&W^TjjY@JoP;v-IM{*kt2G!z}Y`2crXX&x$T_N$yzwhX?QU$ZVaXdC?Pi^+i%FWB-QEMjaNP47q zbRDmUAIWSbXA13+APU4=qMno|-}eA$hI_ih4QxMLYuGDpG7P^?*0M@_o#qd^9A#{L6LN>h~_-i9uL?7xRUB@icm<(GA&* zdl5oCW4iG!jeIK@ztp@6&JbIQqxRNuKI#aC@FVaq(~!#xBjM^T6O^^%eAncm53KWN z=By^&%k9KlV>56g(kBpBJu-m(MSo~rLom1vZ6?N)XZ1Ut;B`pv+rOQyB=nX*aRuah zLJL=1h!wu!e%O!KMk#CVe{*-U@O@PQPR_D<0kj(?_9Ifel99gUd zukE)~P;o2GCU4GRrPL+wjNuYu`Hi+n7#Bx^FRiyoqs@@?J08N^SIJp*CqC_W;w$`fA8_2G9spSy!5qkD#g zgD+Z^Eq&@JwE^~v9+?$YsH0<3hz6?S_&(g(KWtJLg(_vyXLmpt1hye;H52{AgovJ_ z8czL}kycslx;YpenuiINeRfgScW>=OEg9o6eA8c{+w#q!R~Da4>b?FxQrRin`7n|0 z>IQ|k5ly7FmopHi+W7HFRlTJ?xHKhJJEo*A6^PHJaR@98BX-(8Qws}h0y{LnL6!fu zP6-gqW;5RTc|(WGTLJ3}b5VuRe+5gZr-Vk$`H&=T0D2Yq-m+kWAvpiRZ z3d-1N+7ShGT0?sw+haKc2=$;BIa_#T6GygH5>bBK0u4MYAz$NnL(_ouqB97oeETcB z?z(Nb7G%#iwpPPogCHh#H|^k4LiWtPJJ(V!=c%7lm&(gut`!JPLqefwx;GrCGa1h6`G#NX1(2aIrOs=Aa4Qux7IcP6s)&S3%!GG@*M{!U*3naOG$5 z#1rtsAR0+wxHZdc@xorpPm<=svmLYwicYUEe^R`px{EIP|sW30sI?grxN>KK1+1_-jg?AwkxMm zmFr@q;^KzY6Vbo~r+<)S$GXZ@Mu;6rb+V}<5wUkit{J69bQagAMew*;f>{?#kXVu` zt=gCVuh=M@(cls;ezO|J;~CM9Oe569YxWW}N+z6Ubko4evqmWy>FdOSck#Z zl87%?ByyaxJUa`pQA=IuRDKs2_nV`o@=qct%QHZ{y28Gj{rtfXU48cmqgm_%(U^=q zli&jSEM9@D<>do#23Akb>(-5=jc-TzgLw|M{bv}FW%+V%JTv7C*?17O$Nq<0rV7O7 zlE@!SIwhQH#HZk_5gt~bFZOW`d(~{{QHP(!2%hSZesHfTXJVnK<^A!N zuScY`o1VOMWF-Bf7a~KZewGhvFLr$Dn1;rzm0kTxU31itClDA$-}-@^>7H zBab*&*)BSaX6XzrTBj)ORjK9ha+3sk#%RFeWrl+`Zf4mt|3h-zOa?7z#QB$0mi<56 zhsagTm2EZZ9U8d^Ym~&n#YuaP3??#H5}j}z{g2iU*QeqQLj|A2+(`?8we7_hjKbpv_?2IyF=kJsq{2EFY12*$2ZOyz$3icqzH`8tbw(leXy|3RBlL3ya;lU+EX__*U**m22_(@ zH23L03LR}*7yYm|#Kfa70|v*cl2FI3=WOF5-b!N6S59<=+Sac3><#9{SrJe_kaU9a zlrJdJl~;6?V5oV8S{sDSlQEK61*x4@P7a3?^@J&5-Q>7%u)`P%5?mM)1eJdV;vG}s zj7I6C^CyZ6s<{i~y9TdEpw22724Nq4q54lV1mzVjo2SNC^MMXSNI+{Jpt|&BcsG8Y z@`rjhQSaFMyUym%lRtVw-gh3bzXc!X!}AG_qa2nmWOD+2-Q$@gBt0|a5}vdVt)S4` zZhs{T$P#zRcRLEIuar}G)^eiQd~v0~-hVoqylI$XqTuUU8YoV*)WA3l*^@klxK4*I zY?uwn&9kea(0qHi`Ff*UTW?{g}wPv*C0SQfn_)=uyoV4t~mAMYARda5ax@(ed>E z>5L$llEDl!_4!+tjFMiI`#&9nO&oU%gNVC9ka-Ww3=M%_81%f{e8xq3%`Y@qVK6*E z2Qgm>o3Gxm`qY+3ZHS}Z+M#Rv`UbdvfMaLmtccuq{1k71O9`21I#RWRFN74vKq^zH zO?%==hqn5og>lJ5m7S%HQjy&MZN@VXFgV13ogA3@}*cNV}^Nf{`NsLn3^I`W9V07kuA*I=;5Cx>) ziwA_l=oA^x2#@}RC^&X9R=C2bQ3@#KX%rr&#`4~=gahLFuS)F5ca<7;eB*g~RgljQ zdY=n}HMnD`*%|<=#I+===lLs6a@=}mNw|l9N(;S{(a1(T-lJ6dRJh?a&%2~GQt*_u zjFW8zlxI(%9Q}7*3w{Zhk&nmBb0n?90-fN3HQnApllr2%Tv%8o{oX3TuZ9YeYbjxy zn+J5A$`#O*)!tCxF*U&j70IRgYWN{;GE)Np?3W0O2g};0xf3Uds?L#KFqx;bGULv9 z!tN?gpzrSirp39_&{;_a_<+jr=*tk8`v^V5t>T1UZ4~hD4t-|P zT%}XbNP)xdf971oUYu%k7o!JyF;@y0zJ2@Y-}8o7K>6osjNa)J$*M6Euwk*h*hP>HU^TF#Gzr|7ouleMg)gQ4Vs zk|c(grUb*{%1$sw400m9XKFSfwQ_s}lv473+-oXWYMM7a3x_%%BjG=Etzh`*1_7oB zSn3@CQ$}&bc}@^)l`T0xLSVlqUI|8P9a|_jlM|7pKi$e1V|$Pp?9gI>fnRC7<=iq7 z28xcUSX#sJoUoloQ(sv6;dS|?mu>xYQ2w$TpadE;2Voi&}Io05i}%ctd=G`n}%awH4)<>Z@#D)J)p z5fxRaGMDZ zD~Kk0uf|eSqA+Sg0SscZDTJ%n(4W3=I4_mCJb=v{wE7r4PPT;z zfLm#uU3Ds`62fO<`x+`B{uohZ5ALLoedz=zb5x+kQ_Px&NIE7@=bbNHQBL94Gn8;9 zOpZwBc}AfjbM~_l4?QJ`4vSghNpv!kbTR;r1aYDWneoFoSqVjxIN_x962ttVZ=E1; zen(<{AdT|uPRIMAHt{Fo8q3#`9Xo`xDk=!|%&9T8Si}tSo)Epon=}e2DgXu z^2T{>7Er9po*xWHs8XTM&vj{FaC*0Y{fktn59Q{-3w; z`ZGLI4|-hybQZ76)EAlwIust*bDT8g=OE!l7^mLxfd}=SpxR21mU#f_i_$N$?|@zX#qYvxN*-af@v~ zXFc}3V%~7Laeyf-y=9+~u)EX7nb!j+9lRe)9d7ZC8s^uLQ@QE|5~|;Mse{rx+IIrs|8Otdu!UO~Fz=m5$Zd>l$-^KVHrdib=C|=|B4yni>`)p?wf@i%>%>XvV#(5IyTE0 zsc@^~MsyzF23u50NUSexlc@d0DSnTBoOec9v)vt34p|%h*b#wZS}fj|u-bVz7~BT8 zrCdI9gdr;S5*nA;g7am*RA%Y3E70;<%A>J%^>EPCeC9&BkR^9RuhI;>Psj(~xh>7G z2>nV%7vbU^F^Egq199{5gNiY?Hvh1=NVte77-}E7Uu3YT65|Y>~!!OA^u z;4X$H!=HYz>bozv<5WZf^MVL$m^$`I9iqjLJ|>7mi{&R5++p=uPsj+QPQ4MWN+wSy zWQAC32hy!tRhQv%MR9b6a3W~lJ^=%nuHk)PudKS7zq-LqALzSCU@XH_B`JjQ{5U~s zAyldq1LwCNJ3hKn|{xThy^I79Q>e?SZX z(*RvLW)zn{e^}QE-iX$-Sk5SvZ8nJ`jU`m*OP%R(n{7+!D_2=gmE3C_1+Q>wB7vKD zYghXH0mHz*T*^D#6nElBMHq$01{LeD*77ad2l6;@O;)n60#39ep^9il|0B_ZlPz?| z9Xtu%=971brT@&NcP`mT%eqmrXcsC)QpI=H3j1S)#;zm@Tsz+h=BUwhFjbBS zR{7kATsIzgPqUk-yL|kciBnKp=si9Fbd7zW=qVEvaiH1DhF@F~_dN=Sw7Nm)B}@hR z@w}NqN!%T`h0vk@F2K4SN5>04g%N}X{}c}etQMUl4tPurI_=BHv}(7UAOOvq3ib4c z_cp%Yq!;x;LyYF4SfuTwh8{s1M+Ps@(1Ss%Kh!Y${G4Kw@*4Qy8eBO9g2kn;Z)`C9 zsO|;|VHJrpPpA5JPGD59qum%wy~2Ftbh#$qFV;V%$<2Hh-u#E*A+T*Tz4kLk!tD8& zq#*PM&vW~$3ZBG^t+}X#fetR9+vyIjvBac1zIa3b2Ew~6kiQ=vz)Jn{1LayJbh=BN zJ|4H^Bq%IyMEX9X2HUUV+$ZJPi5AqI=g|<+<{H%@J=6PALyK#b@VulF4hm{pT&5Wg?lz&(d;`6E~OA6rKq5LNRWIF5z`j^jAs;D{qc zMMXqKMMcF%>`&}&#qJYZZ1M9{>~6*G!tU?s>4ROPW{#FUD}_Al;A~6oSlOiZkAS%I*5oqTLCm-%w)|JPJy#o{^PoWJf~K?E z(RCezc7xQQMdfGW$^ZzeOB3iO12w9CvnY5tFOui07DHscJ<$zve)`$LfOWhfE^87s z@Vu!K4h-c}sm;!;yxT13gJZJ*DQx`wvte+0Z3H;_I-yf@lFPTy>16s`qWW*>)5Q|r zMf*d!qqIzTZV_1PJesd8km6ZR{=kot6fITUqeHvL7{4k7Es(al7~%Ll>V{mVVjfYl z{GWXfw{RR(4)2x6E{}jJ5k#H+F`Q855|Uo4W4s}GKXL8h>RbUZoe#4vPlxeKnm@A^ zyW!`pX`gx}jgc)Q^aE6gj43Ia4IK1*Gfde0DGjjJ;no?MP)qcDtj7#*9|MKmY z`1}?d-x+)Tpk0PN)H+P$a6VUX(TQ<_<30v*{VBcza^?!7FN{fvgn%G>XcXuQqhAwe z2hlBPS^tc-vU7e|1s1s`rho_@a_i9ekW`85WLr2|GT;Qvoz5C9pv8%Z9p|IZT9 zp!k*sihN@?*))oa)tHOG0ketUpT^9!3dW6I7Qm7V6do!%bG8piPT845ny`iSJF9aruVcq`K znjBbOh0X{S%SFP0W%R7v7n+fuZ4sz1*94r{)(z)v^BPZjWb#877>PS@mN3eEFG!({zy3|gF!uP9V2;B1J|rzg*tx99#PUt^k^@GJsK=*KPB`sIX$zI4sz>q1LdHx#YBGgeE3)*cJ}-0 z5qs8q(<}+2EKOOD7@Pg}knT7g!$>U*O4X-!%wHq~;w;Ip63>7ijdmCzY_=~9ID%$c zc*li78_5?p`|W%|C=={|(|oSf{rz~kSB7zJfv_G!RLS7gnHs&poDrh%w#7JG*z6d? zQeT+*S8%L0-qhWBAr5dNS9Ja46!wlrkBJb%*XN#k!%{=mI;*q zP)5Sy!Q8>5{|~ebob@6Y%15D(j(SAEs>2SD@PQpv=^Bjk71AX8j$rmJlYC)9gm}j4 zD*2jZaY?*7!(j4xF$@k`ADm)H+C2Wr@zch=3SoTj$VfP}gNEG?!$$d3B}TYEJ_r&e zQcRqoh2Nj4pWz7x==oj9{dX?;pzL`eD@xxMIPfy(g(=j@YeuLc996>p=)sji#!ZY( zBE>=D3HUL#li&cBX0oU1@=J&INxQiLgsG6L4pJ;GZ%&hJH05$qtGGhEq<^rqKsPTK zwwUy7za=#6a$fe`@&-}5eJK^3uImTqhlN2>E8Mi1C5Thb|4^Y3<5+$qKP6Uq8X`fx zgalQ^PP~yWC+`tHdZzN}zTIo2;W0)*{Q>)oa57Iwf4PG33-PA+0-~*H=pd=_Ivq@w zHZ#5?i1m063CFiP5c{=j8U$AhaB*PM%zQ3f5!1@KLNKI0u$G0anv$q_oKN$DDq$oy zJ0W`{RU|e_wll~rfumP_q1s>-*gqFjZeKj=m%)A)t4rHzus9+fm*qOQqHvI`(Mo#4OhaYCxV(-=9<5VE5{c=6So7R3ICQR zN4=abutHnINeFFF8B;F<6kf$| z_O(j16te|X`XU$?_i##NQzri0pS8ck&B~+&!=`Ij} zn+4AfTTkKD_tN{8?~aoE5wNs@zBKk9jG?f-ywLDA<%uz5`D*;4Y4>&tms*NvoB0^3 zK0hJxU`F?K(QlY3sxkUyIl}3_G{Q;fZ$FrWo-3xhyTP4Kj&P_3^*N{#x0wz)S(?VL ztBV-_mwwdWD!$Ba$mpLkp7J=HBI&#JG11?|2CN-Ab?kOZ-ze<}^$6pe35tD6I@&OZ7u5N_yP;Osi$i5hsrWavB{?&%8J z%3UfX%i=vk7oFbFXkz95fh8(m*o9HFWjH0dlal|l@6{+b_7(KSNZW+WIu#B4vHvmp zW`ClOhe4}4K`_EwFlunRsJM$Q5%mhMWWvs?uwWQGK+KuYQOspa{oLUCtWbFLP|PW; z5-*G{YU)f>^erp(MntS_LorS)$Eh(idtcZ_Rkz5c?}2D*8&ggLYrgOuR@1COkt{n@ z{})}*UNnFLm%L`luQ^LEU7L8NaJ&bU{Y7-e(i!CID`=Ba0E+BG2ki&{JCy`&5Zc7t z)o$>}(HVXYM(0!)xjM35G#59L<0`5|0^)w?xup?JtWnwu5`1Ly|-284L=e^V_2Ha5t?_V?jroMG~AU# zzpX=wTWVmuudy?@k6YlK;-fLtFy zgglwVWD0}I5j9yoP+IBlDFV8>DXE=3n=ru}}8VLSp{lIvgWb5b^LY4*;cZLsH z8N<}-XO~nkcvUFeDo?ZOsmZLbx`bWm18949;?WwU{n1#mSL^NE0|rwwxZprdptI>kMLDTUl`tP~cALEXAS6~0T+cx$^d$$}8w;X6WvUmUg`&_jv6g6mmg#rs0QK3zbP zhjOFG40I%B3Cbx%GnQ%PV@R4uqbHqz&=z{*K;K$05jlJ|UhKSaH5>-a4ur0yy+DE9 za0ZTWf-$k75P;s^84Q$sBHSHp;Qt%FGC~d>Ehmg7VyylH6~!p7q$)aI;Nqd0p|u12 z#7m|N+7dTqU@)@!eLdmPSUf)NCps|TUqTuyxcq6s?(Bbuh3?SC#C(A9%@~y)9X2vJ z-rfkmK5_&r+!MXnlp3GjPmtwX)bfiyB&oLfw}HRIK618+5j_*^1?i<3(`ur-M!Lhx zZ8V@+bwvKM&nbUzH27w4Y9ZgDk4+y#6qM1)3$Er6b?qMM2S?ZI;bc=S97L7U5~9MG z$+BK?Q_l>gbaB;dP3BlTLZt1d7+hN>+r83FhCz!^Ncp(_c|HqB@{al#nAGF&LFf?BQU`JIFO#3QKB z6_V&{Mp3$)x5qS$Ry{3BrWI44_r7q;pJ?I|dMD^0U0`;?X;y}9ha=(G6(zJ^KoWkB zg%8N(7<+zH6`_8*J|WRK3F8S{!q{1&ytxnlNR~pd4dVwesQuP@D&Fo#!(v&;i=F)V zAhs7?X#5*$O2o&~H7?YlMkNB^M6D2L`GfByB;C*wQdpk&upqGO;0;eYit$^6Qn^qs zYu%jX?ULWXzMzC5oKcf!?MvRUKZ=OgYqJN2%$`z0p=~yMwe*>-5S?{^1Ql)E|#VmdDXQRyW*G?FlFZVg{^TO@Y*#1 za$HHS@C^77>ng^fzjVcF&l{R(clMp(6g5FtzdY11!zC&-U@jeKy8~tEaW13YD)W(?R zZ>hs&_eZi~V7qyLf`CsZ~4 zLl1{-tjA|tGwbGeoG!?bz4Ic@deU#a%ncs*6m8k?;!pX^aYC!X4G7gk?TAMD_6~$O zt*AS48%i`6!!Z=^l;vWikz2V2{@5Plc*}5WtYA00P@=!P&AB4x(D-{GcxSPzcEO=t z@OYnrX1FMK$}%y$C-N~?)99YgQ$aJ7OOYj&@N=3!WI7XD<#AiC!f9Gph#MkAf}$67 zA$%U8`gACvV$)>@*uT&pre)o$qDF%PMg0hFk)my8aru`w2+i#d_;M0Tc`n@vEzwoX zFROoxG5pyu3Ys`Oz)=lV%HIFn)eBn968JAC`OH1@n#*64&tJPa8MrAq)q@lW1zIy% zLWmS*`mz*R$JtCc+qj4Ld-qO37frIPX`s#z(gXT`LSy{xe?(JdUVe{tG`OC))0wc@ z1^zv$h37*=VQ(c*l3n`|(bR8aEhlqt@x$NHfolSx?PeuBy-5iAjWJkkYYDj*H;V6^ zwQ7NO!3?URCldF_Q1B@32VpVv&Z`qDINHq<4!smay|+G^{|pjHWbbBRWYg=Jq_8{; z6$8Sa_1ZuP-AbOwZ8cSbP zjmCMWj&FyAcAHB4xMVAh8OyUH!~?GNM#rODaTQsc+ryf|zdOVCcW%(GBS!Bt=nUheqpzO@+~Ej1da(qR z@VmuiMbN1oVgsJ#OGK;UHm$;7<|G5ymSV%8)5SH$@Y#-n9)CY0`krt0ERP$>jij67 zay9MBQj* z{mghcdO;U+-cnn2LIn$VFu|2bQ>c%AVE4SWCLY#|H*3|9iyp%nj5agvF*r4=EMd4G zUa>Gsz6BiH2f$d|?3;n1H&XLx)Yv=Y=1|^-H+68+&mF=}>Y-FY>Q=uD8vPt|dJ_-Vq-GzjmN;|%}qHbT{7 z)+|4*rw#*QvjNr{FIV?~mkkWOu(xQra2W5p+(-W~b-xn|CU0=UTbZdJ6u>sXMfP5N3vhPtq{eZAL&R-y*lWKyLdAPs4mTD z{2_igp<5T{R|d#xt%hy4*o>l4ZCs~;zLF)=n3jB-!j$9}1c4YJUWOON?7?_~gbqtv zm*oyC@Of-WEyP}-9@V`b2IUJ1$?>$Dz)puEV#bxr{EXqzE#a(m`v=oJKjAvFT2N5gC4|4az8V;SS6eQ$AjG|sEcDg~5web=n?<+zf)S2i z#CoK_D6`H+!YUU*xvX*DZ2rtL0g(C+>JaUNq4XI+T`ZHrmTm3&*uG!13*cpc1r8fG0MLVezgrI}FwQRYn*fN99L<(OOzk6x=byb6& zebMmcnv&JXVY{}&j8OPhYKSP3-yOe#k<^6 zxS%aN2^WXs1BybMrj)VK7qowCPaWyK&mS&E`#{0NV$|hAc1`4$eoW7*{ILci49$yyj9l&$_(DpY7nw7qN-4=7S^nR}*V>`Tc7XQJ2AsS~0$)X77CwDX;fB z=^r{lS&Mkf@;jbdQO+Ti8d7UpQ)=N=8u(f-9F}enQ+2PAEJn!#zvYDY`_6NA_mTJED;n9mBwDjL@?dc-cdDI~rI8-c(@F?7A2H#?#AZ zUud8wPG=LY-ZV9i-b>aAM6mpy`_uo~D@3DNdXZg3L^?D}VbBOCY)hCELBvsOzbMZE z&#^3_VBvfatH4k&MRX>}Mz?dD%af8PXKH!g5p0pgETQ8xYYHvwE#{#C*G1kZQu^$G zP?(7x|K@8*>&}+U1}w`|wAE4XF6{_`Uy^$Y*H21FdZ>}fHKunX7Z{CqEE&x2OyXu| zaz6gQoE~ERkVyR}bhj zI0|03wTG#f4N&=WIMgW2mN`08txHBYT1PAyX5X@whpddv{(9J!E!47S$Bobjb)gug zK*-Qce|Tb{A=p(BT6TJm06aI1?Gi(+$#K)XrZ|9E|Qm!_Qv(g8t zO>26RPQl)mVc}wAMrm<6UrQLf7DH3ao+n}|TUA~UQ%;ilV~3ZvC*ril;BY}|{dCEw zBm-}H?NElo1SQd&T+i-MPm}x`j-538`OSX(7~=^4%rHQoXsW>S;jh2|$iA$B-DA8U z)sE)I$5ISWmhatQfxbIIF7Q5D{AbTwl=p-AlXcK2BuWjT4X9OJ?ov;eNZT!gS_;g} z>ZE6LNlfKN-r(FqN7=sILjX`yRepUqb4!BMv` z>`{?GQf!@*MROgLVy0omoi}@~wN>kjw|0l(sqV1E(G^x~4+e*!L^tk3JYbqRHC5rS z54%su(PF^YGloETyGclkUFHRGw(6LcgK#_Sf^`LJrBiuoJb+6c@yDr#T<>YJ-APdI zP3g{}oLA}V4ad3>FLvxoDDwb9&z;3#(6F<3m%Wo&+M4$=&G(Ap!QGTWc!hcet4^c$ ze&PvFS_)l{z4ou<#A&5@{{UNdwKnqB4KxZ zvmllUm)*eUJh~s5Oc7$^w+I%S6|aTt&VqXiZWSV(m6?s(WM5`D!P`{Pk$2K5AA7!L zvNf$d@iD^m%3>Vyf_!0GZz?mxpQqb_V>j*vsLD(SKX|l;NM-i405IZd+U^=rtX!0M zDrmaR8k-qMg*MjpiXgGFW}CVSb;1Fha%$mv)e^S(Yr%h}cujuR7#Z_cWk*<>$K zGkr2Rey%q$ZJlv{7z3_+r{9nE67IW96L@811^3}wwJx3ClHz%V3C6ov!nq7@2p<6mq7qZWVLxx!mrJIDoB8!E|*JL8x)#=3K#rvzEQhvcX zto)AO#n>tO|Dg{IoOMkgBGsFw)u*w6P$4l2^og$UHp~xZm3DweXg$lI;Wq>SW*<$z zP^Win4}-hM>0Oq7)ZPL5Sa^hGX^XaaKrUWj*@`ox`l>gST@VISs>fKbm2#9p@ZddF zbmkU~MmfwZ!$fo5a+@I2x^apbpAL@>9m7-RN)?PCM`vV!wfh=`gf?BPf*2CW=RJT)~@3lk=iu;`b{W+9#C z(JvB1BXR`aMVP0kZPg0@(p)&|)q&m+?MNfn{G3oq_Sd$DO6CO((GO*;!3VM>KTQQtkf?nu-YNT!26VU^_&4l-ZzVhn!P*A`vn=zo zIfO24IPuC_Ed1jn11~3kR~1(R_to<;jXQ=e9E*sC>?|aB{n;lcj7;PJ`Mz0CCZ0Qp z&skyXj}Y7BJ@*9lTu0c^mKrim8hBcYv>n1oNMg419o?gJjKd@@E zV01Zg#!9q5^9_eI>CWg~$wSwrgVqbW4p*%!YmS=8>l%Xns615o>=oNa@$=%~rbrrv z@K{lX!A~NfZ&N4OF`jgQQ|A5X^uaUrC84A3Y$`2|`GPQ*euRJ$b^q%JiSPCw41%Ox zMAwxfJYi}9Dr9SQqQ4(yeBdlZ!L9*9!N_-<#6+~Tw;Y3N{-9w>P<6mt4G!TDewaqx z8@&vu8c{iNW3#$Ox|#}E#DJ0?T#R*w9`Ds~dIqZTXhJ(-2TeAf4{4-5jAD&)W0&~N z-rp^mDamD3Lw^cu@nl|xFgqH3H@bKih5@>)3&_93x|P#18LIufbBKZ_6ea5Tp5_Am zv(CL|3YBTz9Sy8Qw*z@O#7Crw-?-cKAIYoc$@0(xk(KXEs2-9UXPI5`se!r zUW%&HjijgIa~QZp36jT5=nF5{)C;|v%Fwv?fB7%$H;w&ZqoA^m1FY-1D_v5%W)WR{ z4Q^h|*(vgstYnR!8O02&S`)9k{dmE5Z6{JA_jGcC9&@SkLN&eNypk|^3`09H_?|>0 zQgWjk96U?{M-eKdbMsr)vsAAFeo%8!7!)}a$=_!mvr40{NCs~o3oP>l{3x|w%q!F1 zQw1Z;sZAB?7E^Ut(~C4 z;7CYLc88HYsE=K;3cpY{dybxti(e3vpL;NIY{ShY0V}viLEKT%@RPVE8ehR1Ug7D% z6^z53Y~v3{`ilvkH6i|n7wjBvgzzm)Z`VbrP$+Fp@r0z~&JZ(Ml*RJiTILOXN?-_< z9NKAdL&t3A41|3p24R$;Q!i(jzQRgO^GA(m3z9ie+aI=~tsH}#H33j0E&_IjifN+4 z5aKVWE8eO8G90ddQ$rZJHX~9gw25ecP_8c|cqm~VE=Hbru|Rh@@jJb=R6z}ThgIIB z6Q#vVfs`&J!GYT>StxZO!WEjYn<2^Y+@rsat-MQAIsOtjLzIV zTw!-D@qE7&&hnrJ?}jxn(AOXmFov4Z!Hz(Tbw4d_yP8i z7DAc6o+R|m!CT{&5a(b`2Cs)1EFbgVW$HUX!NeelS``UVE4;zb)S7|54CM-e9b~-b zvnt}_h)upf#eA~xgCZx6oa6%O`K_snJ@dHW35C#P@sh>4vi#0~OnWGtOMJl6lJ?*o zyKfON@fQt<8|oqq2D=Zphml(_rW;ybDvw9cL}n7q|mWy*6A&127f{#xc;sA7Q3of;U8 z_wFU2HQvn=LK@|nr{Kk}%F7`oYA%XIlQZwhR0nqcQ`{=7qnpQ!#s#FOuEN7 zE8HOyg!JR3VgrL<*oZLr zh&MzTcu0p7d3A)w&mZ8&4=HFc`#*fUPz2cj;&BG{1@_&nDRwtfCxeJV&d_C&I}9TK zj5M?je>vchmp9z{tb--%X;|NwGe+R~Yw;(7fO}LTfihW&!qWb#;G73%f}rF|lC!hX ziM0%#7I#Wte|Ci1AL$+ATOD2urhHp)&!dDdn%}>s_nW8u8E|u2dyIiNf5jiRf{J)t z`D6(pO|E1gZVM(#-sECdxxk5^qG2pgv8O~W9Y(r>y@L{_BO7H)&ebv^1tqb(`Ej?y zri2wz9ihu+BW&eSDjS* z{=oGiq;PFTzleXsvh#*NNt4icp1}pP=TGv;WExw|5qdV&gCAPejj|(Dq!%NJ)es#$ z%|AtLF7k%Bef@5sa);Ovdd51r!|&}bkT;N+XtST_^EZpTrQ=@H5V-o-gXSxzB|Es~ z#chQ{Yvw2MGQX}X48{rSZ`iztU&%71NY}d9^Q$RT(YX}CU4D=7q~U`=^x`)TaQ_C0 zg{MDxrEo8j=7KFf1k&aDuIv*Cf1aZR`${VKDy_-WY=a8P`S|zl02)EvRxxwQ87AC! zgKQsuv)i;J#ULj`=dprv-9=2~%=<27Bm?hm-ET#J2j95+0D< zMhBbiB%$3EU#K1B1D#&j!AgAu)GJMeu!33+Cv0?`;{dZUAT5KPCSTY+$Pr5W(=(ok zA1lzNdo4P$_!|y47Q=CC8uwC?bVHgp<-GlSS`Q;je^bpFUgNRLpig)+Kfn>PEcX37 zmgXxyU2uPE(&}d>+FfW)54BVKhs<<f!ja|bqz{?me@1yHThEsAE*tdN_>gpSGyTqVc6>o@ms>FFp-!7lz z^OU7`l~nH4Awm|+`DM*+M@k8ie8q?6j_isg1}c^!88qh?wLSbJ(ZsW3bb)zbB|)sL zzB%6v?2E&Vv?vHvh#@ikWsZCKg`kxOHT|F~n#<>2^Z}dQ0@ZOfsja&$)~&2?n=PCx z#iTVLlRDV>J>S>!j4vF3>m{KSC$acDq3s3@CVFLM+%IBH-)*v}&kt205QX;}6zGuU z%m@$Y@j&EDuN(p8yo46S%Gq1gdR)70@nEZ{YPl9?rYzrxF+!YP$IwB)22np-7oukN z*rS9alC~NfBgp$;6MlO$>DNK@gZ7c|;k`(-iIvS@hm9CxN5L(-jnn&Tvo)HFyZ^r!8S}G3$zd zjAe|VFo!-MWkD&2!Pim+5Dil z`H*Gvj74KI;3Co^B4;a&tX$*g-_|Wyvr7dXe=%y;n}(E&gzU;fQh0#|UxE{v))8c^LFQC1lDLG=)w?J%T~nYqqDMkMTsebquCWc7e_1XpRgV;0W6+ zba?i>|4Co?*qzxm>l6>}aMSR#*JG%@EkA|0*qTI&Q**sY>(<MSqpe*)Z`PRpbCT3ZgXwHDUAk)WLGy@<6EG(xZx?#%aEn`v-yV+r4@(t91w3z^xvju%Yn z?hFUeQb&ez-h>ZBcN+Q5&Uk-4+W=0um*O{;IBrxh_tLB$xZGOPT4~P+LT6eq#2LDk z3xLqoVv=IzzcvY0-=m;2x#^6~;6}*R#e*v4Nb+K`HgEMoJ z5%i`YsMAsq1r>}ztwUTuCpE0d02S1%l#g*j;Z6sfpwb2!`&ZFoR%P#18jlgGRL)>4 z%&g(5IdzCa+bvVN_}K^}9x`a~*a2eB7@*M#>mt~*>Cz-zX0#wHmfj(UaQO8fqW6g1 zeh}Y^#;^p2DUspv6XqF7AJJPfaG8yocGEg)7}!(Hf-LWqHNg;dgl(Yf>Xd5b52eNl zx?|77FyM31{k~w6ZO#1o(Fp3!B{61Qr;!9+xi$!KXdh3p{|eVcwwvxl{4 zoY}da6I4DyYR4$NO|lqGTNreh9R!QUQ#D==xYv7#gzihcf4sGl=!WwyH+YGrl_g&j z`!wAo$aJ)UQ2%h+A96RreFfp3Ria1R8Ux;b-`iZg#L`>-68(GSC3uiMdp5)uHn|DX zd!CQ*SlS}S(G!gPsxC@A7(A0`#cs3#-|fRgngQ`8w~Ut2yS0)LT7X z#Vc)YaToVs+YIo8bXR)+5xP9Jg!#GFyO8YJ2g#*?WxfJ)t>2rw9arwdFmB)rl2hk! zcW=|1|CVK*?(7K15`rP{KDX?$SzvB)(3aWexCTFKEO7VmoS^-KHq-?}*8UG#Q{%BN zFrzufIr&U2@Vh{@B+qq#n~#M8q}fZDA6Z=oX+N#0j`buELmAB;OeM=b3&LBck0Qi~ z6u2&Cj_GxIeOYbr8rJhKRQAmiAz(ggExpe?2I9 z=>by>cy!y%0|wAm9Ay3wP3^7{Lg_+;L2d>A9z81zURC7vgg~1Uey|I#P%udArGYmX&^GC-v{r%e|OcQ1Ml=B0#MX=5F-y$LNhBJB@4uzi>x@L{!;Bmxy5^_T# z@otZFxXP-@k`7qMT^1TNOK)A9ZGr1;{xJuSR2bUgUa<_XJp`M|Y5yz`X@l?j*60@ECl<-2$rpOr7O@7y={`Ex-Juj4os$&tMlpO!%4>RyQ zM26jHu5JlWi&*!CJu}UqH2dz>q?_3JFY?IRThHGi83RCk=X*xFXy?gMP-cx1Zn~m} z#xW7lRx+TqtkM6pBfOl}M4iosteo!AIJ*UOx+Mk3WI0zz?r_*|`$ELeGo;h-r`=tk z{VG4Wi@^?kL5x(BVCx34cNIH@fDQgiSiU`iEk*R&sd++^&ui)ici*|d?H}C9m&>9y z)Qbv-*|JC%I_R$bl$UDW2muHgSg)!;ga08=D9eAgQSO1FXWNrx~>~@NRzFUMMJ_!}1I2$Dd+!K`D zb)`QvZ9xi)3Zv=R;uYFe!<=DJQNy1)b^0F+f5c)8iVU0_9JEf|^!v38*qRTR?2nkc+b z)8fE5EAEFo>^ZMwn}`m}dwasWL!2f}tuS;ngI+~QrtSz4l)}qgD(2P=<77Dh0iM43xD9t0xg8Lp=T`deL;5^lj#C$6Wu{m%{ni8UTlsIhTT`f zg*tzfJSZ~HB3={A#GuwL8sE56*0V)zGzH8mENG#KzX2iwouJga|I+{Zv&$ht5T{K-9z;ru z0rs8@%0PP)B)#;6axo)wHF&gxAss|oC}2d8|k8@tgI3_ql}ZYI3e_q8{Pe3rLkAd%PSF4m1<&uSKMgploi z@Q))&l2)zU;i(j1VX!Ml9)JJiZHiC9SntWA;=(b5V~fI;tRqU&s$y)WpV41 zJ?}r%2OfI~=3{9L#_`!pA5rs{27Tvgpu`mqn2tAJE#YR-Kp52y7rn*#$(DaUypr`S zFbpy~3o+Hcy%#t~u#wfMJW~XNF1g4iT%98Gpn*vz#nMQ&77upGwQ+||d%~f(J);(V zXaw#!9erek9#e?l)~pVJxKaX93*(r^qj7k7LIe3vQrOnU!J>ZF-my~riI{ofJ(k|H zTQHPMB%GC;K?A;Ca!?dpfi`JOYC>|ZZ!ioG4S|FT)&o7MuXSA)ibR-)Pq5Rd+>Quj zeNpi{Yh6A`XLBQLUEmJhFu5~=)Ss92gb*lE)DxN=q(-quGI)Y}l@rd3Su()lPW9uy zexSugL(7h$KK9NX^OP*S;d5#r$u*W_*HsW5`~NnEs%h6fiv6{M%X`^O5o}VFB%;4i zAsk9;H82F7&U(h;ah!vYe{o73+zYd&p)H@Oxht1qXvD@2Fv5vu2Ubah-tea`eMJnR z@t1Q+_HYZvicZ>uK9rkbpup3OsewygiAr@X^zht9;BA;W=dO)5txG*e_&8k5@t@RU zdfaf*4XVBQOV`G_($_}7$bvK!tnT$&Xv~}9g`l+?s9(javup3%L{6>66P<(TSH9>6 z!rv}WM@EBH>U#?Oes3U6!&u&zFV@3Zaj!k}y(jX%`pd~|Gjq8hJOAi7lnY<}S`t-W zBgoB0iuRd(f!(5HO>=hBb#(?ObXIQr0X_Jcrwp>;Ht}Z32|VlExH3_2@T*{i`c?Bm z(S1bxRoWThdtK46!IO-jjzo_%=p4R5j2_CQL_xwr0~}mP66-APR6Y4j^URlJXi%_K zAhB0VS6K5I!x69Wpy|HSO%bN&}pl=EWNn^z5 zvH#u9i8bKYN`%!`A=Y_VzN(c3HTqR7Of9^6Kvd2$B}53FpzKJ2k(2=D7$Dfi=M6Qe z{7Gi0qBA9-sI-I*t(1^8k(3)pH|hv`9)+>Q8RXOZw>Bn~IA8VZ}ec=nFsI`9LunK7Xq2qgXGaHLyo8 zyIBaMXY6m*b1}53E+pUHEU{+bJKKbSV{b=4a)!OP#7O&~z}osE2=1@3hmJ)EAuM0t zk^(90KZBB&4E&pal$3t92FYp2crkSw`GWO?^&a)QR+2zBGpD`A09 zqO#Qo!eQfkdkn=84&|n*pu<)49*DQ)mmCmW%HChrPtek;VNOsUk8qoe_l8fxgfI*e zq~IzQ(C-(6$N7olmZ6LBM-L2e(#L@zLR~;IoaCAC<4YLRy7Y?jxA@gvQw5B%H8zO| zGbw=@a^kI6d3u*2Y_s>vqM2_q>4-f`g~8`Lpaa~()VYO^X$tt&$pO~k{nZ`AqR@^~ z2|gVJakDZuNM425Zv?8ahPm89J|}4JR1`cizdOCU?H$`V&;(8LvM!3fUvwMgpIMUI z>qIw?H@PY9cTwo0PRXMYq zI+pQ!7{lU+)77C!8ua(gYdj4gv;k>{Rs{ABO%K1L% zxHmb|IlO5%8CiGfGa~7K&DJco9nTRM49&4lXK58C6S)^FXg!;?MiXfnz76sLzw$`I z%LR+x8S!T`*A;%3C7Rm&ou4Qs`~Kqw^Se-`4Zb*{jff7+Qrwoi9ksABfoQC@z0fG` zOWKuOY0nLOgR+I&TwH+erqMh1(g~*YvsRFo`FFM6p)lTjZV|H7`1@htfrnwn+FtPG6%A_OC>@)bQ4zO~X>Jh|LoVZ< z@Dd7kX!gcnWlsmFf0=t#ZdKIQ8-6YzG+fT-1X+&sTYi5PdSJ@k?*fLe?r0HB-FS!= z77V<@ec-voVwKMLLd_*&{UN{qwI*LHn_>(!>lC!U!@#p`k9C5!ZUW6LaZ5c7tUy!0 z`xdTQ{=xm^)e{72drP--SpI#N+#%m;7udI2aNg!z!cp}V20u8LD>&#zO(zJeK^=W! zwn6{sDcf&H!oxd6Pkn&iW977tat9iooCIL`yInm?b4v}&;{(WT--EK|KrTXAk!<`XYn-y+vdDU-pFTE)H-q(hmxc<>4X~-nr$>wq^F~0kySzPBc*6%L_gI=!$MLcD7Z4e4s^N38Y;!jC}0Lu<1?c%P*ao&-*yLZ3x4GU%Up4d+hr?e#9(a4q>^ycYcM_=ds6N`hCmUHb2UO(|gy$1y7F%mS33y|eQ*%_t96 z2})z>jjqs`94erLE9HaWRaWXIwfa#p7cjT;f?r$dtwyamM+J9#MlH{fJeA+xM>Vvn zst3bU^i*e_Qp84!^MQBTv?&^Ji?Ws#4Zm8G_W7EQaImsa9a)2>-=ZqnZ=df%)od;u zQodVD7g7ed6)TCTq9O2c=6_||H5DPMpT(6>R&I+M2KHqIX$H}@K1LzWGJJ6<{YsF5 zHXla;Vcq^S8+45+v?z@lD{-YlWIpao5{adI&meiSd9!%_JmkNlxAB<)BGLGiLBvl& zhO>0#mnY)K_=Z-anAIiHEofH>N4&=n2Dzw8GdOJP2zSfU??-R=_;tEanDmeWxJhan z6b{F}2S6K%A}V4)+tC|BpzT~SAnP;5U=-RR`m#UD5vq@KfnRuPZ~`^Rvo~nc+S(%w zuAqB_)m}!1mu^*m(j>LROW@~pnfU~)(?RHOa$E5~?qdAPL^rqE# z-SvF~BG4OGNyJU*OZed#@uORADD3V@eJH&^^nc?lC&*nQ#$Y>ICo*{7%AS9-kLr== zoZvIzG7uGmDHg8L@G<%=jc|u1Wr&KiF`lcfTAA@69A>l7uAGO|w|=W(P9%{{L_;4m z{bj~wI&DUrm^kJ7S~~LEW!kp6)Z9M910i9D69o5lgwDs=4vofX&h!Yl_)>#5ROi+! zf?^_Z)mAoIV44+mq!QXs;$fx?6Kl|nwZN78>y9mp&YkOHEYnes>>*|@jcO`d5XrC& zZ+q)b(TIK%A%p70*XkZF{7pU2;ej#`u3vG70$T!M zeZ<-eh zS6lu`L@!PeJnyP@#2?cRgu)m}rpSe`?+fU3V{Ap@-H%$X*Em$HicYNV`!fWX@?Ho* zIQF(X1m7nfDAnE(+DW$ID>oRR{VeNI`_h)mZ1IKo!idIEDrrAuSDM&)E}%pIxIY9R zu{O=BieZpzMZx_Pzi^nWz(^=tiK$vimuy%j!>3?4b;bbx4=_NHdH-k5Fdn9liF#Nm zd9PyG7)(AW@KQ`AWbfV`G+~T8D0p^y1R>q%5(>-nJHz15)DKopaf}k@<0AgEw7S)> z{jc#%fMWfaSQ^A&B=4J&9YL3p?4u@v|F1vALK3PxVP8`T!%Pg!9czTOcyGdV zMFS(>k$|Xj4qdR{34w(vz8JMe!Dfm$irTrUE#G#dMc3{xuD-p}tlS;7liIj_F->7?O6geSIO!v?wJXXP%A7a0sWw?3A0}hy5 zG`8h)x~?Eboa#0z5Ds@1#dN`Wexx~lhay&eJVzw6w{JDzTP2 z5C)M?1W6wo9Rh2*(Equ3&SnW6W_!Vr;>7DMuSG$YA`;TS6G`|UWd1w~G;qS>G6o+N zzA(5U#xr&H1l_$b*d%F8X?Da8S!;=Xo&CZ>N6ot?IlTGYScqGm z2|tWK9KhdB3)uH*yV>2drWtQkg&3?wS0i7|seWj=9pq%)?-0B-vak;^t&PR1 zu6t2RD_KEIw5+I?a}03luBeiwIZ1OJ`>h`>p7lga399u`h;4)&WVr5qj74L_fZ~|{PbX0#+Ow=XNh`FtBE{EH;)x|*8x+g?Zzy>1f z?2b$&)76Q?WyP(JMsV>K9bpxgnnHySxFg=3HbgKF%k%uTz+!duD#D=XQ?@+Qx%^Hf zhRgSnFNs`wqQxYG2zPFW9=EVZ1S}{m%9}8j+QlRId^xaF0*U7wK4HCz3 z$$x63WCy^DE#U;2U$juBj=%{^Ps{U%qG8^UxI6$7&f3G2a@O5!RK*(4H!=j;20pQa zmW=|S^EW$~oIz;#>h0B8!ZQV-?zP&*-x2Vvj+X?h& zWR)OTfj1hgo#*ESBkV!%bx);3pbo{6G&?rWwAV zwzwR}^4vY=BxmK{Z4SCa|0WTzLJ&G!?aOJy1hemv!czUUn7!Cr<0K0|_B(k#jsCnW zBG$|M0$`@IK%RSoPzY1poxyXy8qSXlh5Q&cEFP`kW%w592m?|yC^Z*(fJ=WUY7T@e#e_-QgRKQHJYO)iRv@ zn%tlXRDN&q2T~N+|3~JGLkhKVm6O1_oUP7Z9^~}q79VZY#!k}B7^jkibK@eK8>TwA zK%-tXu&vE`hZI^)Z-nw zFiBYBN-Dx4oOL!!8-;y(h_RC2ZMsI3!_rzk;fo=?`w66l{?_@oNm|S)bGai5b(&){ z+%Pv%7apA_#c6+IlGVp`)b*!psEE-ch(c$hz0~4EBnM_<^gc@{m2D5YHvy26!{?VM z&kuqG_g3_SvFP3Z@iUTbWd{hFnPbj7f({Mc+Nc8il~)pviCcTXyfos-A7euyxTUo~ zVDHq=#*3BGG3Tt_g7W0@a({Thu{n_th>q;bC;GwaK7{`CTWr~;3vHP~ZSIpFy-G>W zJhhWWJ&h+Z^U4AyJKUxV#Q;V!bO>{UnsqS9p`?Ja^es+;1@p$ZLaiNwn$K&+l-x0Z zhCUfLAH2SkKD)XikqIlOv0n6J;3zI#i^D~fUXv``2z-)U8RlLvuy?Fr{XxjeG ziZV!_4bz;#-_r#;yk-L$9P{R@(&{<;(-OmRFo+&XgTQ`o!K-}DpYr9Vsn#HYh&LD- zj=?Xq;ciljrrp@10;$@Iu5b$%Qn!-5U^lm*;Mw8Sd{K7#E_=w7T{Y2TC_P3A30tY2 zG~Cj%023H-*JW*?Ky=&a1#vY6m#Ah4t<(N1HD=3qk}m@zaDCjBC=hwdH5fV$rv8J= zjMA3jUCje$i8H>VTS*21m8|hn{}6J*Jd*)F4Anq?G!%}txQET(z>j>=>B|BQ^{Q2n z4_rkj6K{GG(!J2L-EIsG;%KBE=B_hB+A*T0bc{1=31u8eHjKYdgC305gTTb*H#vSt zR57zR21z&kdF#kfL6|I2EiJ3E%)w_AK|yV*NE1Xn)y}fGX=&WJ4{k&O6yd z4_6-sf!ADq1gp8?X2lSYjqz7~%{ga~B%b3r$4WF?Ei*q9qA(Ki$5x?mM&k&T_YuGK zSg3)I2${p0aC(s_y0CP^lch75Xd4C*hwP!X6tRO+@dD4aKV1+c zvGW~aYHfWQ!WxaW;JVTa;#~tE*^!?8L?_x66P@7LG7a3kCl&*8!9OljV^kmP;ldtV z{-+U7H};{?IPypZ_ZEag8R_uS%g#i~NUdwcZx6i%BUF~|p0UE6;|Uu>g7mQW0u`F_ zPzVqGX!?Ch+NRm{-C9y#cR>NyrClMv4HG*_?XdFqoL5S2@8P zaxX_8rpC(u+4luUFL*QCI&ZK4bM0oz)==m!IjOsT)%d4=sDzH9drT56+p=&3oPR1P zva*defwM|G;vQ#3cjCsg`$?{|bO!4yS`W|5H3puZbjbw{KB6I>d(B_&KYzwQs-+A0 zDyJrmFhWy>3*5_%ayMR+12`@9GD`oAE$}bw1(^ls+wjAV1!Q zFD_Z`1P-8vvP!CWSPR|hD+E>_K68Wn)x06^sVl537!H&AD4}a3rl?{dGQ6NE!%&SU z)ZJ=;w-3e8x5m-&S>XYR?NEqE5k}?wb*Is2_4Kf z)Ty&wJ)!(O-d-A+B*`pkS!Z{6C<$Kn@;qt(^5l*GV!3CvFlf7kW(by-LA!FI;rjhX zO0@V){Y(vBig!x_RFK4bVn(=wa^uu&ErcnBk|me%wiC&vN@!RybO|w0wbo25 z>QsX^J3#jocli9=0e*(?O;JUa3*7x}aLMOlnb7%}FH{=i2S#b%Wx;bl+$YWmQK&n4 z>WMg5bq<+CHAB&N1%tB}gwW8x$Ea^6!Tjw%hVwkf(IhMr3Bh!U{%@#jy$WKPZjaDI zzx@1EFfOe~01UWe;O{p1OkJzciwLP(Y3sor7^#G&)tzCLdBG?i^sB^-ae^1VNqZX? zJ5kzYyxlsqCn|IW=>O=qL9n>JAN)ko)z9o%5-(SGk93S3j9dH+f@_PJG$fGZ_6BsV z*!d1M${lStqAEK;*E;;1#$j6}2e>hn?{`H%t44@8?MvgeAsX+dI!1!e9)C!*aIe;1 z$JW6*x8U2isVTC(f&V@cOS4ST8YJpAkH;N}y|!Y$E8d)0;`578p(-0UXc^=I z14}5uAy>#vR?_ZM7|Uck*YHe^yQoi3e+vfSwc$tI7_m;=u62iTQw{PXcrw}p@4-dD zU{58~YEMM-=OO+`=}ZV&bdSbo=|NG}q`idq*9*g`z^V6;I!a*ZXq-(-pbxU)2P0tB zBfJ7|l%1m#Fl~D11?$_`!|4QivDaw9y*rZxwH0>ufT)c`H>@%3@NngC2pSUwd+;=) z5AGA?ngu6ZNu*Ip_o3-iey?w~vw{D1z?DIBHOai?{(|cl*|OVjx@JF4IKbiRVQ}sU z4bz;dG_-fTDX+2#vD6w2HT5_AkFBE)h^l!G9Nf`$9LE6%cN`63U}2z$ii(AZt=QO| z_~{wgE$Z3b-QC@d9oX$>f40BbH}A3c^f!N8Z12wO?CkFBOxyd!@Si;9<$gnTMhQ-o z4a9+n)GbdzQ(LV`W@d2*3lpolZ%OT}5WGQYoJ5xSd;_n>M{u_nZgHWOjc!V{2_+=w z%Q`S^HHshhf;|LN zfV)OLB;wi0*eq{I*u_LvU8|)t_#_qz$BzMZh!l%o<`Y?p`}va64{F9q?!XzEdr}(q z{j&hI#V49w-e~MSzWPB^OX?kk+Ge!H)7eJrK2<}loPsZfEvG{mU6i;VEgvaXQo|@E z`^twbaoZpToI1snq4fS`s}cvvc&Y>ES7<(~kUIo=XrRk5;X+lBxn3}v7Ts_p(PnH@ ze>mD&33Dxe@I^G@6TO(WAjy@q;8dI)+30Jfh^GVYS7|+G^;Q*cyU*PBfHuSMmJ?NZ z(*=vlxZ@V}R68%^b0Gc-vC>w}gxAvAb^B?A?QNAX!bb~^iRi1ZIa?`>>d=LJ31oGZ z@5ipk^lH6myCIFt`9s^If@WsM^gJ5S>+hj0$QY7Lfv~=tenx8@-ek8Y)Q~WMp>d&~YuF&=y$5*MI0`}b- zS!o)1-(>yK*uMz!LyfJ4d3YxJsC*R69u|q(q7JAL%?YyTG@9t^nrh+Rb5H11n~Q2) z@A$&0k9<qEYKd z_}J{x0uOjxM82Y|D9q_V%2#DG^|?2?l3=jBzbp8E3x)-&=jv>iQZ(Q*!wH+Akb%JOtG z#TOObYCh0MLCjgIs)0sMeykn4Z3Q9DdC?qNhwhCK9!eLifUc^Io#jGe)!ly3H!e!n z4faR7iz&G3LVervHBU-3s=N;vMiZ`CSUF4KhYFKo?{mQ(s`JTQYEp&fg11WN!Ix=f zdD}7DY6S`e6q55>f1?^=&>KsU`sg)MJh7;i?g0mTM*`Y_+@Mg`kN-&QOI17+Hq4-& zZx>&mu@+?YrGd_<7zCG_QoN4`A-UB!jwA(oYuPZ6TE54`mK=S!8(xV;MpF~Vi3dZ& z#_>tV%7059loeN231_d zgg#Kij3K=I>w{5SW1SLaZ=rT(S7UePdUNX@e>2x#DAQU)b*?P;F4s3C2KgNJKDh!($H($3R`N=+)XOb;1T|#?k;tq)Th72m@W%K^XqRl&L8_=f(! zhB9uXD;!>kckYe&FzoDWTCdX4Xbpp_>p3}kSUkH5cJRE7wb8=Es^S6Qb0-iDj|9U3 zG(BMrhb@y$w(PCGsazY*i%M4|zE%A;AH@PS1i{4YnT#e7ZGBYNN_5OH`aBh9HT5v<`>Qfa(!u#-0_?i0fh)noGQ;7(jHL0 zt9CRvWxO~aW(gZ^<^36lMidwePeUO9HA|i;)Xs4zU-+R<@|v63zE6`9I$eq9Ti(zV z{mjhJyTW)p5@1ktw>#{A%()l~OF--Y*06g#;b2C%0lZAio`}Zmeu=YwmUhofC46}i z4C8fwcXz~SROYS6xuaC}KD3)sV-MBsX|;kyqY2)_!?ds;U8FbK%w--`>wLbFvol?v zxjBx|w;;qGmZIUz^+oVf-w+IiPZH`_J#WIP{Qk9x!TkD7aY;(v{#!55;Uk`6ESb$w zD7EpQ9HtAcN!fOWv&lB-DzGei&Xiz3npeNGiEkIA@KiJ*Yz=n?tKdr?rWB$x2k7OK z-)Q2bbm$}}kGw5}c70l8eo>q1@ZSrf?IA^PgeiDgHo?j?iql8JuaqeY%@0}ux>MBY z-Ymyclz;8vMo&2(IBW5IsZcllb&dGQkfy}9r0iYOICU>wX^?{RzlWB>tCRZ35_X2c ziQ}$tRy?p~306<{hlRJbu-vln0PWca4xz=QuF(XU6>04nJD1nMa`o;&oq3MCU03n$ z;iu)|OGQw*Ri9m;%K<($7Cxu3oBbvd#`&nxqcY*`##`$DuTmUuu~TV*=w$WOxRe*s zhq0Ui4%{VrOKKVf^J)s#mdtGq@oAU(LJ22M5{~^+`F_VCH3BZ|a)1PMA!H4OO7nK! zT}JqJTPc^^So+{joF7X0lP3%GQXOJ9xWh&CQ2hx##h;JOuTwtr8P7yRrJc?_9hTIA&!Rr$zIH}I;06B3x z^`SIHyT~_FEPaclKzMbZsA&EScSysBj}nwCM+1IuH^n<=qsV$n2s41`cL=ig*W6xLB@&nrp>6G+Oh86Leh!{RN(ZVp)8&GXSNQGUPTX8LAVNe%l^RF1u6!|_Q~;~=<=7L)vJ!=ak^U}WZk5QxeOfZF>}0b(X01HU z*rf;`c!m#83hD6_s~c}_UpE@p+QoRCEKh~)ygc^*a%ec%{BUGHp*dQTW{`Z0#-<7C z^7ZK)CWM{3OT>A_o(SSqUn1H=l>?#cBg*Gk8ed@H10)7ja|NN1@WF#(W^Ke)auUh#^TxqMu7`n+69yf zhC)B6!7N;YF}{%yf_AHCj;D@0-0?BP04v*eIl&RId9Fc7|Hz(C2Nuxbdl*D?IJ*TN^40@y9hV4ZKgAP#WT|h#~h%@Ie8Wr z@%Wf!XRyNF2PWp_FS+3I-WzHi*218{F0f$~A?wB|0}Q-F%kbwZBqjBV%gPL}9l93Ofl)wY8@+7#s*&S~{1S6^Df8*tN zw%;dj?DJXfU=$r|OZjUzb%9$o`HaiX;J=5Rq?vzkq7puQa{v|Ek&~dKxQCmUOvuvT zLTtBQNtvG&#w(pg_^JvGmmXy=HBo?8{jQ~j+-{6#=o4EFCq6Op4+~pWHgIenbymT@ z&RlRlJuejIXAu^ATi$)d$NmF9)4tdEfmi@*+=*Z8Fi)>*RnGw$z2VslqJbp_Q!S~V z6w&7GwRvBJaQqngjdQO$qG9@=^78AIqC~Lv4RVLfh@A>3g4Z zk-WYJp&aXv(#ykP7HXgV3DwJTu63)U2_6Oc!>Wcv@e@?;U|&MG_%R3Kc@2a1)qP;C zs51VqfeWp(Iuh}%+Qi%OeMt~B*Qh{GbScl^k{uUl#{DCoIV^tB#ZdMI zuKOKwT19)Z3l`P>*;u3g$EbTp=7u@oTfU@&Yqr8znY)<3C>CYeZ zcI+JPsd_sLo6R798)6jWj}lHgqIXaUw3S&JeXSef4&L(~&Dyu9>#{ptzEf`yH?tRwn8){m1tOJl-Se(yG6Bre=o&@|U& z=v|4f?EFJu5nit{_=Ov(7Y8_vurS?g&RB}SbAjk4O7yen3(wm6gSHD7drsja&oMmv|P?^&nqNlF+WinKMj$(wUpzO@u+vj zAP_BMe~2GxX zXV7<6c_MfzzEg+}3fJ?2qA#c;qgy#a2ud0MtRduIM@u8tPClyq{o1CsA z0${TrO@viX0vjbG~q!R&fusc=M8olv6v@(Mx zReCm!?>@TU`+M6{bBF<2Du(03buF{e<4!8N;2MY}iLG$@U9xOrp z3z{NZXYn4tFT-3h7f^jiPxkxT3#4pb{FqOr{&7@sDe-={V+9BBt*L>jIOQ&xT|wQ0 zPno_aiRAap|9k4Th$E7GI86%;(BXHjd4%G0N3?C(h1ZA8L^>#_1J~Ll#4T>=2)~pGBk{)bxxoLo!eJv5Stz~oQ(y;su&q5q%Yji5?gi)FIg!<%}aczE1xwB#|!0kVAp(XOI!D4|i^`g=A#uq58K z(Q21e=j_>Ti2>}po1p7?VQF$M&@2Fk;9>jtXttBnn9PqjJCgd?C)*1$M$_C{(45^q z6%>7_DUCb&@bu^QIKbLw#L^$XqhY{v+H?3E5nZmK{8-Cw5Ov~K0H3M3_jU08Rj5=M zguSNUB_>eGlilSAh;bz3Y#uDUS}nN2l{4UG-Oyi6RuJT@41f!L++p--S`5b*Ai>9} zm~csA-f)1*+~z~!Qss$PL%}VTsIBNuUal116&K~NRdvwUYRi78DGhw};bE}$C{e7G zo_*`eQh!ElqjqDE84BXHv7>0Qf+gDJ8Uc4x`SeP zoPRj>yNhpw#!eHiqMSDmAk5^oQzD&3mS~0=t_(JZ$gxpGLGwKFvJ=eOY7aHf5KHXY z+#Z@-6K*)Q%iD*8#fR5*r)DH0U1;XxPcF7a`}jhG-f9@un0T6<#YSnTPD-hc9!bUL zWg~GoBnU@K33XC%M^_vbfN%0G=;XsRq(MvFP{~6DP7Bzw7^!H!l38xinNL3mg)hZ; zKj+VOg5_44D}ka!FV$1s%Hhc}M}L@DkX9NNuk+$7)w)LpNZY{USp49QO2|0H!htTfQ_j+s^Sb9t|5l z#N$~#z6qRvPcZU|I}tB)`d7}rSbG=@DG)|K@be6M2eyWKwer3*FTNH~aZx(*JfqJHZ+EguzaF-YxX--UJw zrrgaXr?|m{CLHiMy3>sEiIwztG7Hnv8m6kIAD*Ty7#<393Zn)yo(vNRhjgD7^X0rmOU}bslIo~E!a#||1#Qtn zq4q?iB`W#A+gMjvg!;=@7tok@I?ERamM5hwbtkXCFHH8AH!mxc;+AYPG+=3A)h;yk z){`&4(H(Vg5}%eQp~cOTCH>(>HWAb8MA-qA z^!=0FknwxM3d`hng5}+yd-WqB9<4PocyiAmd`lk#N->pKqj|?<6$}$~P{VLQAH=H zGmZ0%#^davO-nr->%-IBeM)odC%(hA0y8XpLcwa@tr9?bb6?OVP#RzHe%m@e zuz>~?PmSPgPXqMuxeGj-6$&qva%RZ#bnWO5?k}w8mL*}FtupeYXhyu-cse5$h8Q4Do#&-*bfollKQ=)19P1;H_$clnQ2+kF0jH{Gl zHk=~0)4n@Gjdz^KtzYO0v-%76V@%VA+r!*H+|FM7g`QISqs82D=#_CMlfU%^U$mh* z-e>YLHXb&Jt)j1u*p)&ZBA~}|!Q_}ieZiGY74vFe&NKCWcsop@i(KnMf^QIBPhH}C zX8r)0|AqXV@cfhWjV1+x!Pq7MR*WZpYwC+iCQdXJ)9(}geJX54$Wle;%b}(TS_5?J zCFm*z<=M#@8A}%!O0(ykjhoPkF2TIw`n9?ADwP>9K#u4;wl` z`)CL7$Mc20XjzlNGY8H`{3A)8XkNq*)sRyU+i1`JqX1t%U!GOyhkk>RsR)E zP`|nnnzbhKvzy1$vpgm9UytA(B$zL&js^e5R1Cf^?bcomTLs5?#?qOus13E030 zGlPadYBXP-x|ayY?&uUhrVBc=Dn&!~vf2^D^sYx8#d3`E(^+x-Jha*l^fLw?>vPlW^jrjyXr9)qE1HqaU#t6d=# zA96~N5E21)&S-RUwWAPJ2s>&G(aR0_e~V4fK@=X$yIJm|gPXEpi=3e}E{+nomr_FZ zMf(4vEfuHP5(-l*Q+4$-I4`JU@zmO>%_EP8!Yvda{)Aijj*!9dKtE7V;-fG%l5a3N z6hQZMS-udP5)L_O)XR<&BEN5nAJ;m1n&<4;}Y~W@VLSk>E0x zI;z@ff@@>gtfn!7#?=H-tA4pl!7%S7P3@EML`*x9iQ#%oQNp+Ffsp8hh9vIjAr24Q z800P{7H||Tr&z<_`joG8K|wJkek+=G^xR1_^L-`7S*L&X(gpkva0E$lJuM3_*_qfq zlp-NUa0G1QVmUZX;m?9x%c5KRr)XN4L3vB+AzQWD{hbH+pdaQXpNPlZ>Lu_O`_ZL+ zporyuh^@A3YEG*U{{L+=ul_9|Ktf1Zh_74dXY_irmXzh@a* zySu>UU_LonSokqvi>xZu%@x|W6{I~ypZ|ml5mk1v09e>Tu-w_O_F(FT$_WX0ixMh` zcLn|Sxq?gN-|RXom{aX=G$uNCKM_)73*N5g8eh;`Z2axiy6u z)@>QgD$0&#bmqKjG&bEnctEU`C!XAud_i8)jaTf3G_h|s5$WpbMtCKjU`vIUpBn&b zeEF2*=?@El=x<;a(Qh%lOfQJ-L%5A;Vh+CD$!MA-coF|qO+ zyP<&% zqom~d-+|8!aC|gz5Qjo6oi1fhR|i;z1|$cfMP6%g7ImAeMWJ1er<|E5y;h>4jtb6g zaDZvI!rT|Iov>#I>g`ibWbjDgnPUx)c>M=CTp>l!C)^LJm!o6Q%Ok7YDOWnJ)|r^hz=0NX!EJX z0REpPPJGH;Q#8}e@@8*i(gS;w=VgA4I-C;RUB(gb5FQE2##FZy-#nBL>hXaz%d3_o zgw-#|2al!iC!V(FRTZatloNb-z-3LAW@a09&8iPSGfD~ZGkqbdDwlHJxysZ2+#m>Z z=0*DmnTtD6+m7M;)V}@(R$M;p!0QbOTHp!(ubp0SxIAxr=oUeOhhL>J)u=pB)n%=XV1zKa+HEITU=D@ibBv(h$J@{HrO!kocN6^}Hkyx( zLy(+0B-Mea5jtbA3Ns?Ll-j1O=mvwI~dM) z41-toIPtf|z28bJJ8Q=`m|z4NqG!-QMo#o6zEHmFi$h^|IJN2Ab~(Pa_zq2iGs9I- zn#>Ndpaht)hlnrDmJe(lXBDItQ!aa-Oe7WM)!goBQT zQHB(J0U*KtxoYV5$3wYyczLU|B#u+4YrRR4i$o)R!i1bfrqP^E!E5=Bq9LAp%{UFR zMCWS|vz4k^YNpjVc8epNFE6Osq~9~hhv`{=J}y$ekK(;n{;LdF#BPmU~$Oenf#N+96=;8%};7Jw}UNzd<|K~~c^io1QS~Nv1kTGx2 z(g$k9yOr zOv)h0$m~NzmS`^;Y0*t0bZnYI<$k%xSG?FdgnJ<)ew=wIpeWjYJ>_Y8hh(|Bn>^qJ z+T<)zB@*iG<6Lm#KtYkrTnQbH^=XVZ)h#*qzH$@|?V`+T4P~N2V8<3YIp3~_sw?Q% zYGZ8`)H+1Nx$P$BnvwmS!MK_FpVx$QkKdj&Hcbb5D`7m|$3D#Q+^(*_$I6!yt9r~u z5kr&Yi^c_aS`g;UB5JISc9$d=K2Oen(`E~^TVeZNpdjI)N6U4Sw3&nmNwy|z&|0nJI=1QL_QZfbM#B; zd|&xObx%Ji*dqdNiMD`_mu1fbbmn%V4^}B{t<5Aju>UFFXhHgdWOib=d?vB@BX9UP z*N(zR>Fqg3X(v8AeHqWwuslw$h@|VF^7VpjZ#$T|RdD60I4*c|))$_Rd%p1Qe8FXz z7$hDKfl$$ua(ZFDQg)Co*BrF#?#aoSWjkgN1XcAne2v&oLw##@HVAfh6Fj{Xbhty~ zb#NQuzOLvSx#7@o*f`PzgF+0f7y*>i1q0#X*TM;($KDyB?J;+Fl3)Ofh0{h8ymVT= zllj32^^cs4TgnNjtDE5k`LOX>YteZfz(rTL@yu=4;Q*xXkc`fy6;SN{uLt*2;rhn7n ze+g7(WY!;t!x_U|pxsr$VM*vSQFG-z+BPbb6oi)DI8qy5HVA{W!jgDKa602+?Ei(+ zV6RvY^z$18l^@bPVrg4hCdZ;|`csre6)=}HY}5nHc%!H-CH=vpHjj{D>fVFYB9qC{OA|4rM!L+zp6AUCM1WJ92L zE+9UPs$bro;nn=2314#0O?846)dS)7A1}cgYVp0%eNT9|-Ck;M{&&~6s5ww007~A) zxr=b}EG^N=sKB+;Onhql2g(=suR%z|K4Q^W#KgwleEg48==TEQEh z$1}3bK1t~0w2TWhD;5UluZ6+S7Mx!@?ImJ~8p$Pj<#axZ;XV!!h1Y;@L*-?LgygrS z3N*LFb=e~fIyB*8+l)hz@Vj^rv>!$2`&abj!WzV&)+yeI>92#~d~k9$GEQoA&T6cO3Y{Im!H2CZ8uP){Tu}ODBWLK}yE?+axxw(w!v%V8 z4~IM#s{eL>!jfxuKA2VR(15XeC-;z-^RWhJ2?Hx?px7=Nw!Wnz+OhQcP^=C|`J55N zZ#GByLqa-r#OU_7Xkcm{4&!_|{~5J||7Hab!@b?%7s4{4o_~cJSsC3sGH`6iP9KeC z2VdTJAp$?z;>qWrIlSRh^#&nIX(2>i-SIc;SBvGcgkQgMF{L!Jmp>uxaDEtF_Q0H{Lc2W=3pHWvLER#D4?`vz+ zSs_PI+7EnIiLbx@gdTZDh?~!m#^SdYB^JPbcbyOjxt7Edc52hH2)^4Y(}l(=S7TtQ z1h`>KNgWYX5MGwr(Rv@EoTudu3w07YpS@~N$6(Bjd`37YN8>@<)UlO1!(rRw%7)i zk3pLpH1*z*XxgoR7(6rmUAN!!V7P5%eUNgZXZw$Wj)!?-1ETFuXcNvF_KD(`6c!Uk z;@1Vd>rc+2vCc8dY4qzMS9pq-+1+Q-q<3iO4|~u=`TA1wv1Vl+Pzh6;=+VoS={o4l zU3S<@^$Fj1^qdiHi*tnybBNKtx=V{k<63fB`6g->c%*a2$O;-|&-V&a1*X+}pjp_s z*B;cEQ@hw6UT5C5D;!>;n~@%2y!CC+kVfudG}oQO3ryM;0*zkCXQWLG7gnVTOQ5;% zeu#-D4S3$rV)R>wS~TuINDhoaD**^*aQZ3dey!u9pjuNu=(UNDid6Uv6KD7Cmw5a= ztHv*WY{!KCp5%rGJQaXsUK1B(nI*HPujg73!HDEyfEBP&>iZZ|oAwn9>W)FuUhE zLKk%P#Gv>TZ4)eca}jwapXj>H|M zxQfm2p=AVN`9GWs1=9J@N@;4pBW@O&NT|7tn=I2d2Uxg94;>xkoDTCefPcj6pf9W3 zq4hGpY&R0+X;$#STtdO3a-Ptl1kL2;H^L$Hlz~O(L;d44CYz_S*GYPF@mg~F>Xb?7 zlQOh#9SnU%wK6GeQXL}Iqw|QPylKx5Ab!pKnXwl2&!h<0E~h>w>IkuKdCm-tMHiA`Kw>9@KznI}&Zgj%X|& z^f%~Uz1wsjIJrn%`V~}9r4M|drLr2$=8TJlIiRbxtPM0Sc2k2JNa^ywb4&2b-ZznR zhog(s;DsImBxs`~Y295FkQ;8rt{N_`tWGby~GorL`>?)P* zc0&ce_zsJK6Q1ZEx1_!o{HZyZk8R`PReV8znD8VV`j+;Gm2LQvXj9G|rtXu^>KkZ- zi9tO*b*Yxl1H3%tGj(s12-x1-6PCA=6TM|`{t)N1k8n*YP{tX?ewPnTmmwUlHt5(w zg3Pr>XdCAXFIK6fAn?i%j*rtE9#R`~kSQ?u^T2p?R*bDh%A5gk1lXw1~U^_FdpCVWD>P5Lw8gSmr?V}Zz2BKWfW1F z$8c}BZRG1mYA4}rL)Qj98?RlfghYG}WerI=-G49zBoA|4yeaw-wi4Ae-^OG!y-gv@J2a!FzZvcX<-%OyjhfFtRt|#$mW5StuYGy52iVr( z^pbaySD*5VZ$}0{r5esfxWWER3STO|`lABT!i#T|@UyFxONGdte4Vcy%W0b>%sTH| zM#`K2-7=9A-Px%;!_i~-Xr>h>jdJ7IE?RF>&T_D`omxLq%d?e4>*VQpLzMH2&{NCe zIo?)_`bxUoU1+8`n_6@si+XVitsG9WysK*G?>?|NZ)~SrMg=;>&N(FR*0bexm$>Z+ zk>aa_4gs9uADhMVA6!Zen)A>eT9?+sxl5G)(Md0;H;hE)0?Cv&qK|EDN=!_!r1Sxqx&>6tj z#S^B*6ZxOZ;N0;|xd6uS&DX_~B&h+5-Dun%6r+`PZBsS$3J-t*THc9sXow zojG-~3>U1F3O3gYfF-VclCk&@D{Y>HB}C<=tZXw?yNKfP9F9zuhr!Dk_6D>s?hHdj zT_jVi3BHG@p~wIeJVDKc?1{o%u(?W-7Ft_rgU4<;+99_k=U&?tn9A41qQJ_wa3 z^WQA)LVy=+-AiTtba#d5+33Pnv{EgVx1?{FS@``rk~6CYvsKVQbO*;GTUPXgfm%Ie z^^>zq7N_pPNiMyJBiy$T`EI_-=T$@&VWFnk9;(*zhtgXkpdcF3WRUj8Ov9avG=27| z1Dr->q>@p7P^rE*#G$tJnRO~Sk9N=WXt>@QR-`K7`Ee6Oj6-v=UpN=OCYnWHX$!np z!?N!xc=d!HM}Ih>(VT1Raa_gFdJ* zKQ%T&2=x8q>U4*wtt;g)7ohcEUm0N;#idSZ+CAG7_Ko43gr)U76$l#_MS`}5ALQ8! z4{)8|-BiKOWv-x073@GY4lG5qwyvKEh8g7fSsBYu2g1@b?r`dveC7o;m3L%XwJ=D1 zsE3WBy#lYKFvgyv?^UHfv9ct%@+}k&f9Y}=<{G>Dz3JR@YPrV+LoRfi+_+BMS^En>fc8ljR zEN*IHXSh^?OJ|A}CUCUDldax-(ZXag&=y3w;V|S_b=vU9I(&6AqKBF7h&eZS=m>gLHYzsAQHU$I+8bi=a7lurS z!u4pc{%UO{Dy=%ew^?}CfjXWNcv&W=*#$)>es zhpm`v51bBFz5ZXCH@R}3f>6)D9WX=7%&$-GdI2Y*ziIX^TK3EP;wo&W- zW}*Sf(VQSFWxm$Xtljh^Oh}HOTXhk3b!W4a)DgxmRi_B^pcT-Dr>7O z#`<=?m2p<93VTC~k>OyQg*Xz=+P+#H)HLhDXL-F+d~x{)HRBnad&DNQrj;|w0}RUJ zA?BaZwZ9S~57Bs3pHEDUrSV0J^y#jV5G%SI9ghAbdsyB5N#*1|)WY`3!hTgT?<<{$ zR8zXa&-Ems_Or5^+Mui!K1F)K;I?7l9>XWJRMyWGa$;xUZ$&pSQX13Z2q;yb7=sj+ zyp>mz8ySlYY02|rER7}#F{nyvPPju&}Dr%s^yhL+?rrQQP?MSrxR zyQMcVR-Nb>Wq^+xl%8a7S=`*#)Bi+q-dI-p`y)iSBdara7zGNBxk#gS(#arH&ORo7 z@PX5_y}+w4A2}Aj=$>F?szCZ<9_}M5`&PEn-*dU(2$^GP>yc}jj1KP$c8HbJ;moVV zD`p*~=5_RNg_Kzo7HQAsh|avW2{DeN)%oIjqJ+F0s7w6Fb1X4#kMUflX@wSE8ML_1 z`H~QTAAzazu(A<+yjdFMVBs!J^>MHxTplWHUKFox(Qa=@3hKsJ_JP^xalR5NMKGuz z#W_{cT+SQzTG@RN65_}4cRt{Blk+1fe9JXwI6E*D8WsqFUR@*LS~==}Y9JAzn9d7& zCxn2uS|Ci1rViG$v}kIlR(F0*v+4Rp+GZ4JDtH3PsMI`CszUfS&ZQZ)8J|?fn1kW_ z1-?VBe2Ms5_r2jzZyllV`w96jvUC&b>-*erNUJMc)SIuP!*&Tu9rlB-?IWShNgA8l zqN2!)5K6P)5QWbQ*TJQ5j;{m9eBr}kDtm7|oc;IgK{s9rPZl~tqai`C%1ORkW%V80 zB$P$7Jx47phUVF`XyCRukgz&V&l6GyhruXI;R)y!egk?^yBbePu8P)l6dv|a#L8c3%f_68 zv2uH@cYwF8+(Flo7*MMpc0zSUtS*RIKqVEQVC=u&UHN!nP+b_f&>60q(CbAbH9Wc- z%F=-=y3@>P%PXDMIRYAXChj)xHO+!y3QEh;2PQefDADZ1n6+xU30d<7p6F;tr&SV&jA^^s_CT!KH&cT>Ha@ z*(i%I>^~^)4lCo$Mk=?uC*cW$T)?8El_mWh+cg?%y_!K>AojB}XqWJH^RW@lG9~^k zT06fXWU~q+*n~4_@^%;KIf(7_3Z~%(IoAsgSPAB)t$6yk75(yAT`NqPsE6UGNzNdo zy&E1Mqw(Oed|By(?|(bA4ufSjCb(<4Xu?gL-jgqJQsu)hdPDgkv?ONq@r5#a4{)!= zMP!!lb}RZ{_yMJ3VJ*MNSu+dUQ<0Bi!boB#>&Mchx;ffNv+Y4(HM+P}E ztefkg8{j`7{B;oYUC()4z5eoPv2}%3k!dQ>l34;rsnoC=KHA!0b{8PtrWN@O{Bq2M)bC@3~`j z2=!_`ZF852*92ZTt@f&1;6E#CQml^eXg$0qx-gbNgW7!(JgbvWi!6xg*_bjWkK5Y#`(9qF@ zRVhBXeP|QmccuGb5T2-pSNafKHj-g=sxXPy!74IK~T z4Vj|}3graD&D#<1T70rI--ha%>C4-~@(MEj<4lB<(|J6 z+`dgnzh|Ppj`>DqjyxnVuR^T6eCUN|LZ&I4I@13*y4t#qZC8!%_M&c}y0r&XKf^k% zSCo3^#1@2tpBjciT{{(2ir^jp^oQ9zR$;%9zTi4s*f2W(ygcc}ujtBt(cGpC1#I$K%t#6e~0LnY&$~ z@ER@|V{-PYL|tbH)$h=XX4FAvI&gjCNdxR%$pl^r_~bB`M6V^6i4#;lK5Au-Fm1G)wXr-dxZTYxPc!w|aSc3*qxMPV9i7CK*h6h<<=lV3{3*JaO=XDbDW6km zI?=ayrQS4Ra}I%=-kN8lJ!Pk=hs4}(E#~@_sw_46SrlPtLgW<&}e8^7+ zxZIskw_8Q!4E8d>+zHh2Art)Ic_$i>@jr<~+r#7W4R0FBy;go9hVMnQX1fe9ESebr>kjZjC-S!zV`NPiglNZ>L; z_*^7R!wFXy=9Efn*Y$FOMFEA;OE^@CE?+59NVt0|4codDd$1gl_o)2&P#EpPL@SM= zs7ZL}8s6KVMulbW)?eOR7S^e;3hllzah0LpNiokw5b^D=6+$x#mW^Fd@Of<|xRk~B z0M-2+;p$$_bowsf%WauY=rQ`d11lMJ7oe(LA3MT{f)w_zl|o*-9mE7!+7|ca6On~A zysCuMCf+odEFd?*6=M6jf=y$Z!3lc7{<8aNHzg$fhaN9}8KGk|`Nj$OBy70DYvJQ= z2`clMPa_U>Ztu z-z~%uQW_BfwV&q;b)QhDS;DguG@uXTZ5b;*qs>jFye!Q|e6`U1g|j#KcJ_mV$L-;+ z7tNhE(}i1>f>G^saJMfXd6wxqnrezGg+>6&1mJ}~XEJg91VZSV=*I=DPPs~G)e3bt zo9Uo*YwFBLwEj4yq$5lj91d5|*xSAN)S&IB^-$l54?e4lf!{=L=zW}T4Awo4gj=H1 zv$%`GD}=b6$2euPJdqvb{Dy^X`~_RywKLk5GQg9-TsBuBZ{H~jqHwc3CXwW%HQL%yqvOV4!CMjBOIH_FMGNkva&iq7B5-mbu{2U zoi~P6{9uY4gJYWcL)Bw$FdXmMdOQn(Nz>7#z*PClv0%MFObHBx9ikbxn5bZwrR8*j9r21%H>sVi-tkqb%5vQG6<5Rf`J6AT z5WT@mML8T+!LRSG@F?3CLZ`{AQ3M5p>%PBvZZtku{1xU7)zVyx3gujh_JYJ$#Bg4k zePBkW3uLZ!fw}$p;7#ox3XM^>`so6JpO}3oa^88QHfL7fvi;E|DUo}@_FPg55Z|w6 zKBTleGl&+Yj@&iyDRMGc-Vv5&Zy$q@w4R^vU0wLIZ6Kc?5AZboRB0lIY$ti)Eb-@M zs9wB_mPq#h>Rw_-Ph$j2mD(0)iS@gcm620uZFbly<|aUp1DxBnr?PjIApca8to+}y z@))cb-~yk^G0{(Bx~}De(oQs}x8xOX?>jT&4H|vZd7OlYq2-8}U-obxpG>XajD{m~ zjMdeu<9GyE?GU?1Hkw^TTN>jJ>A~-n9V{7!UbvHKU7v?lT{(dQRwr#EJI6 z{~eSsEoJbaSb|*}RB(NgLHY{~6%;qLlRcDP<_(A3q={S%pZbYPPb{@dD|@J~4}{() z{o%+DDG`-(;Sh0yUxKYDO@%Nvf2PXfKr=A&L)Nz@ys7) zqE6GF@VYS(#f0}>&_lF)alN+}q@Z^4xVZc|idv$cisk2o_1O}WW#?j2py4mC`k`?C z9iK$2)7+p~9|w4SG6>4i18D7erzmLHQU&)Xa!ftFCLA`Jl?fg&-H$rlLq`L4up(dS zY+b1F7g1^8PY4lhTv>h1}r0Q7UIl zN+>MZNJAL(o#dv8GnLR`Jq;a8*L8>rE}o+^l}nq$;B<)ynEitmz;1Y6k$?_o7%UJS z?zrOl$j(fAxWtXCnS})G;|r>0F_msFpZnc{9JV#@0ix#T= ztvuzj^!kcnpb`(Z+5ayMo#D+OjT#jA-mY0od`MB9klbYgdrmHJ{x)TbsNvo*CA<Z9kLh+KS9WfKKnmisw2OuBH;?ueB$Y1YF3whHT$d4nCr zeX*KiES`bOi3mu0;sr_Q{ovMlH5|Huaxxx;NDyBk2!;pId=JtQv#gHR$ew)U^vlxz z5?@c2>_wyW`I7^z?BWlLwWcmoS;BYub$llf;Z01g6#7M+w!#DQviQ7vZwP`7m%O?s$QF0WBKNA@Qg17%yyIr0z^Mjc%DD)WO#?sbk$N8wcB| zQ$FUpK@GHx_b2SxMo6+p(h4t+yzveCQV^+Y+4(E5WWn_3AS^2RMY6 z1`;^LL^0vSxjkMTPV;bwC@10Ut>DmMMA9*1jPTyu6+Z4HCcdgRAvny2;)iTSyD~S} zO|sr`*?-}%WU?DHu`FC;qmG*>-X+a0&eyO~

)Vdn=#CvoG1;=I&7DH0Jd7n?a9_uT^5bw46kNMHXS9Iex39G@X=Y$@#L z75L}N*xplGt0}Gi%V+VoWNa?iI*-73()vG=ovPZ4aZFqr#!|5*bpAjY$NHp=Yo6Du z{NX`v_Wr>*7HJ*dZD6h>+u7Tw_Bm;-vr$i;v&-GS5V2;8DzRyZ!OT2K){o4QHm2_H z=yo!;kCN6p9_dBex$VGO-5|C=AiGhc{u)SvP^u&#z|lQE|Dqv zVFo$BHO^hVBn_+}M+7 z_X>F3CikPi8MbD~*w|d!ctcwJWzm@TF9LCWZ-tJl>%TAS$Ig~k|G#pg>b}s=N|+F1i|GoU6T*j7_yaL+!`jR~<(^uhAJYPA(^{E#`$M(H;_;rN$Hc z3U%J9o~54?H6EIK%lf9;zgd&9Jzd)PXDaSj@d9aMCt;+O_d-NGBd!16=R8?%sry;~ zq}@{YrJ?p8IYHISNSin}_?$%5ag8ZB|5vg9Lt)>Ob;W12Abo2?X>Ci{mth~n{X161 zkp|kmi1zEtIHB&pxR}qt+k9N+O|?H;^}nIcH*y2&eJbmS&qPl8(MzOFJS}Z3(K`Q# z|6h_tZj$8@FcMo#jQ_X~Tiby2B0EZ(^zR49wNyFU1fDnhX?gzo{{o&6*ZCy&q2>ca ztUqSqeCOeL|48mze7bMK;=X%d=4@3I17oq-ebVZGj}yON#*y2kjUI^os=6W*eGl;` zXgAGw{ooy$DeK2xlhzRH6>)#RCu4kHp|8iakr}Gq2h!TJRlQTCH5CW@YE=(?EVg(| zTCEFVNT`1$&zN&`W zZ&LM-{f^ArdrKR=M_Mx?Z9>csxc;cxkN(|#{g)&Y*Q@sGeDrq>u^nVy|75lco9<4ajbeCmJ07hewCp7!$b zamIYHo{PMXKLCY(#AX`rd*#t1rEly0Quj$r^^<*yEKewIu>)lsoiDBYmr3Z?f{e|Z zaD3b=(YsW=*($GMTisXqi}ddG=w~9fvAj-Oaj?X5shepgvP^0u`0^%#M1Uqq&= z{m)b7Vtw}{#-~+eoVZ`wXj9twP0~ix`NhTilk2<2h*WUg1@P5%C1l!Y{iVgRGLcmL_5Z6E|L4ty zd;fhT%j4@}Kk`0u6Sm?JJxP{FE2>@s=cArwk+IeNWUA*rHeJ@UXGm+Q<3`7zow)Wr zWj^+?w9yAuy@Qp#P1?xy(weJDo0u)HQ~$N+SV`s$bzJ=44ke!js{RSm#xuwZj;em* zB9$+-uETAo|8Kl8)y`7)b!;V7|8!+7Y35I?A2lBjZ@f^M8<_mhwBqIARK|hlw~k>wj{K|A7oUmGq#t=%+W7v` zw*DRKJu)`x%1%@D)bnUflyPDK_A8!)*)lfA%H!+*3xl=F%IH7EOp-*(`CE3c#p+(N3WJ~Vijo()h`ioUy9?Y>&5TB z##|m>%6hRols#7NNB;I6INc)iiLF%m{nDCupq>~n)b+%~c;mnCKbG~PimUaQjN|V~ zYdwhi(wF_Ux6CIVS61##3V{h_!gE>ZOq=fn*%HpTiy+>eS&^l*7RQ{PXg%6gc6&<*$Sydpytcsj8v96{S4HjrQE6l6qn+$m zHxXSym5cSz)94RzpS&h>;xlrV^jp74*eB!oM0tE;DHZGc{CpW(+o^n0+N9zd6VHKf z|Hd7%JgVB;<7I4JA+0e{+Q`Pzn&Nw@PXSwe-vz6GdYNdddfP~=uhIS#$MapU4Q67C zOJhVHmrmq!X=5>IEp^@E-{pzT(*1m)ipBg4Ua`$(98v9%b+@>>|Kg}4w%7vK7}omI zCKPvTCmEX=X$^J1S?ZawUX}T%;vStM*zbG-VVy{t;+Y5*1AF3gqW|v#(qP_ zWkUiVq;}&KM0HV_G&5?V-U8)L}~3=(k4EV$BC-@ zAW~ELC#8*y!FqUs^u=fNCh12XRXK4#f2@3%xatQ>SwmdMyT0;S(oa;Rjo+i<+oUyj zQuZum7f5UC@oza9M=rvC(O)suE~>82I7*fq>i)4*KgLwKIYyN$o{7_C9D7{ZPo<5k z_6c>rnY#T{Rera$*4xU)q>bI8%EdYa`$~?Jv2my>SM3we%Gkm^Dz?Z;(wg^5Yn>~t z_}eq?mXpTZU0QoxXNQmdCZ@(k{qIhr z>iQ#^(+9Gyxr(%rt)z`#CatCJN9#+KUrpr|KWnm#joYM+DjpI2oTz&xuJZ9UWIgL9 zoF`Z%6wjok_OrLzkE&2WrL`_q%H!qa!B5J=8)xYK~ zYJaM|``tfMG2MUaJWX|cQ=MP3U$!%^l{TUI=ziQq=Hsfq{`c$AU1i>0U)tDQ)&6a1 zjg6%>KbAK7ma^)6W6DMzlX?3NY2)*ieNfr!rH!fcv%pGh@p-N>;*Tr4l(fdaDjuWk z^U@|FDpvPb{1p|e^Nqi%;?0#+=O4L8#`+yUrowoibfR@--8&l79VsX`8 z9WSBoBXJLk&C=(alW{_EO(>pGb^j#B%JO&w-%Ncfees!CTKbV4q)p(O#b&J}ZA>3; zD;1wBt#O&O_8e*BpG#|AEv>bRv`Mvp>u?#1zjGqCh#F5~d&@X_mbBJ*X=Ca<5@*Xe zv6HgfDLX^i9hKch+K9R~{qJ-WugZM<5^1gXq_x#Jl~DIzLif}DvRwaPGwlske3Y^W zDtn5wWRIakh^(UOWu&#md&UCk zi_eJSV}2-ekqf1b>v2nlMnc7rx=dKRN-O^FhGL6|?|BzsofC6IBQamv__fN;Rrx!V zJxN-7X=#&dNE=trS+XEwQ{5l&+f=OjH>$YVpUHee^^2{JXDHqgRi2d9jM#G0v1Upe z6YIWLR3S`c7Cx}W?vmDgM_TJOX=86oYtNH5vA)Wmj{T@(iHxmyCML^rTYPW*B%afE zWgJyJ@fPfE5p}+n>VI=_nKxrtVXI?{jGa*ZXUX!Uy6%|bXMG^^hT<1rNyf37w23}d zPD27DKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J 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 zY%6>({Ej-zf32B=-|hLYJ$aru36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36Q}5dIAg8 zW*8+yxUhMs02QGUR5lF!XOvCIf@~-PMWGlJhZ0Z{>Vr~HKa_?tP!`HT*l!v8En~lB z?6)lTI{*zr6{rf;pdqLZ4MPpcftt|QpfS*5(BjY%&{$|mXesFH(9+N{&^TyWXgo9l zng~sTmV=guR)AK7R)SWBR)JQ9R)bcD)_~T8)`HfCCPV8$>q6^6>q8qr8$ugF8$+8w zQ=mxvZi8-z?tt!u z?t*><-3|R1x(E6RbT4!tbU*Y{XfE^s^dR&QG!J?hnh!k!JqrB{dJOtG^f>ec^d$5Y z^fdGg^epro^gQ$e^dj^U^fL4d=oRRf(5uj|px2;ZL$5=>f!=`Lgcd-*h2DaG2fYpb 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 OF3u@Gt*y!k%<8=tO5a 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 z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ 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

w{ zXmg}X?!GU!-R8(*nWt!ZZ)BeQz5T?zU;=L#)bBc=K8We;ky)8pBeQU)d;(=*`m+P~ z-kUxdx|TQbfA3%4(;SIEv^l}ECV)E%#5-0t>@m+QQ5 z@AGbV(09AdvQruP@4Tn%^4~k^c4zOcb;_a3oo|NQ-CprgfTf5A(j* ze`#O;K&dwMVT*3y*4#b$xo_;w9l&*HLF!Z5<1b{zM5pc)U>icjhJM zU3|%@$#X7DoilK1hw}LR^Wv%VzI^=AAKTaaPAeRZb;PU%XLg^~wPasU-4Xu(lm4OWNj!vt6acl`X z4V?>?h_wiz$|Vas+C$c2nb@pqi^a}Za>il{wYW0YvEYnw=fcIXueLh6LzcMehMS%< z7AlY6##+3n%j#SRFOBMsjs?~kmI|$^J=Wc`IJ_uyhG9rct}i&cY|W?ftFOz}tZ=lj zFS597O+kj#tU!h@S$KxTqpBm^wXhwLKw>J-2!)r386H$gv^rw3C?Zj{AiSiz!|FM$ z3w^g0r^Oa`T4#u}sug&wJ-Xyf%qrHbSZsX;No)^yEvi{~Mrh$;DZdNPs9w@(EeS0_ z3h)X0u7#h`I=Byag}csJxOnlI-DgyH_H-@jIJT11YT@Z; zS{+7}(toOr=J;v|JuI0<4nX^+joY$V5n5jE{Fk}ZQma2?6eB{j#!sb z-X2@HxP750qiRLCt4(`ZKuHY=kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kih@V-uw7xRo?gihn703jAo8H zYMIN&GMA5~_qkz=r5&}Yqn0^lvyNGGA>1g1h^gMvAR#2VPca|`2GItL4)F#fMhG_Y zBV-WlF)&PP(A1(!mAbo@X+)~2qD?K|?el(J*ZaD!!+oyrfAGE@4|3k;dEVEr=ef?g zf8@@M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S zAO^&M7!U(uKn#chF(3xSfEW-1Vn7Ut0Wly3#DEwO17bi7hygJm2E>3E5CdXB42S_S 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

(DJ#9U3piq0&`>vNZ!>GZlVtH6((p(MK4JI|WA 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

Tt;7hr+ydB<2}xvNIwxs7+dMj2gKgP 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

*6xzDO1caA;o>>JSJZb0Kim%Nq7Utl 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�k$3abg?GWpTGTz$NpA4gp%KVB<88c(W^ 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 -1S~1U8 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�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�+*AyEa0-3%Tg}O zxvb){mdlx3&f;=5m-Dz>$mL=#>$qIOWh0k9E?c;~gUhvCuH$k&mk)Bek;_e7wsN_Z z%k5n5Yx%URb2@1ZVutzGbTbiq?t2o(5oUJ4{- z-It@V5Ge5FyctNcp29+)z?buWAjx{iyWpMb%*$1H2^9EpjX+Y?eYpd=;AM2d>kKSk zE`3gCO}^X$D+81-*MAPtLSJsJu9~GU_j{0@7Z1@H+F2rixwmir=~)bWN{bkp*(L_`79$@MLznj`18?2X ztO3b_<@nC(_4rmfeX~4E_-?BbzBLDhufARQ8iZ*4)pmBb+;p3Glu4HpUbm4c-6wLW zlHab%2ab!J$#09Ck&A_o_~Z}XV$76%i`0GaZF!p*I!26$DIfZft9a;&0b|G{>FUH? zph(@}9I1iw$yd|Yz9=OfKOAD3O< zCN8@|jQoc0vPLmM&qv^AH`0bN0JlHH@wA9VT-K2_^xfDdF8w^s&1E~)++60n^m5r& z%?aMgq0fQv8H{o17>QYGh@|}@d)B$ZXGXFO%?;Whp`V@bac$t-XdBuN(K5L%Ta9*? zYx3V+w(9x+cX#C2|Nk-q&iwy>IW6bSDO={BJ`cz9M2pCF>-&E8Qr!1PZgXd6;=a%F zfcrk)!Fr|6a^Lrwk2>Y%;EAVlomhQk0r6?Sq!f7HKeSZj==*;DHr!_n{F~44N8V@T zXZ5KE;oH(Sk)2QXnd}X&;_SM!-uDm6`wZIp?=#sO(0;Y3uMye1#4LTE$+}78l0W#- za6C&U9)OGFf4TIV9IhWu&!Xih@w;AkXQ5n3e>Z?XyI^m#m^fzL@KHSui2MWP*+=jX z_!=Uf>`{{KK!X=YeB^`(OZ>Z1tWQ1!{+(j($r578R6lc+^2xhaEMD}6>b3Lr_1Wrd zC4IW}xmL1=vxw+8CNeud6YxelfDBaroO}m2eIB4KK%gB=nBFf$xtR!Xx`ygYy;i=^iV5a|dg;JC$=!1wXR~ zVCYqxQ`T%p`}gpTgdd6e+uKF`m(6pFvemBzy(0De1HMo9VJMszC z>BG^HsQ&}`V_^9j*!v;!KG1*0Yn*6H?LYHf78@kc~G%acp}bDRA)$nYmH8GG&mbK3*+7mG3x^LH@66xls0t^Q7zx_J-r1C(b^N@i9DDWot;1-da4P1UC z8s@okOK>mv1Z$iU%c(6Tv%9&cW>X#QO4_hhh>1D*xp%l8#o9^6I>N3(DPf8#{pSH? zrF+*e9;W?WC0e8KX||}ZydD|%a_Pez@L`4+IcZPsHc_uMaU~r}tf&3Q*y5!Ph~WP= zwB0Dz;|bRtV3l|L1+n3z^}xput$%JkXxtx96-k;(vd#7-k1jlVljaI~apgXYya{=; znj2{oay=gyUzUs;_W}P-z`tii{j~PH6ntk@kBQo7AE{1pp?ITRi^xl96M6AsWZt2? ze6iZpll#BY(R&x^Q(JkCn*X`Ai#g-%#+wbeK++k=3l;0 zmbk!16>JoU@o%orYZUL~ZHQ~7KE;xrYn4vyAnjLRDb|cGAUpCb0bST>{DH`uBl0SJ zc^kz-*qkFqeDtC2N4JITSh6k0az=hR#Ap?L7LXh^Hi@O;4JrE<-kT*|(Aoy%+hBK{ z81bFMd2fn4^EL>V^b_-_?T0J1eb^pJ_F?l)*xV~dj9({~yweU|oa}F@I7GH24Lvz; zgqOTuH&Q#3#=pggcJG2m_D0FJ!53e)mE+4!v@m?xDM9prAle;71A76QID5IrD>b_dZ}L3Dl)Jt2rL2%<}a z=&B%kW)M9)h+Y^(*9FmyL3B$Hy*7wmA4G2qqFaOL?LqYJAbM{Q-4;j}Xkz{d>9?Ow zpG_i@Ui9a27JAha?LqWmEB&&hvHQnh=a_)UkOxWbPbt_z`rd$N9eFQ+QP{!@)iOWm7Z!MgsxR1U}?D%TMp0%rJC($uaE4o}ZDcaLJpsf@KD9Pr9 zdjL=k=->SK>FV|2_ zWXz3!dB*n=uZsEJ#N8QH=(2Cs%e(&`^WBVP!dKYBjH{{^_o%+Wc=>8$-b0GDFr`Mz zTr9k*$J`#@JFxqAFlx?6#xCmDpDrmx{VL=t=2_;Wpz!$j78k^PH@{%s=#)oaE*zb* z=emMI_!R$x6hz6D@HI*GdNidVE^$wh78S-kzA&Ze>o*tu^{X_Z@hJtaLRZne2X6k& zoY-C%;Vzm{G5+{>|FG!zp5%fag*}QSTg99m>9VNC-z+-BdORQZ5N^^KfcY5k1vqpJ z`8UY7ARkBmD>5(^|2JejZx5J-63^N3AERC!V7oW!$;fbk<`=(>gXe1G1Z1E=-V0+< z#vof_16mXm7EQrd`KKCFQ>ONvnmYBusRO2_ttvIb4rG+H2doTUq0EvsO7VB0%LV9u zgrco|7A>4Nudp|6&j|zi^l_CUig63z^hMVL#vtOSAAjWK0(hM;qBOO~?rP#)G&_J7 zzx#4xeew9iS}S&UPNAy*C=r%=H-9fpk%bGn@}tDGYf=+mE_0O*ls{a_enn8EOp;1- z>6-j`T#Chw?-dK*-`*Fi{_9TRYo86?705!&qf4K~xKNDo8|a?J$V+8iU*_YzP?3=d zlI8`!qm3u!RWq&^tEXQmX}T;B^P!W08qFE(+2jmg8G;(kGwjTQommyg z{yljiv_!_GkSc#xZQ3SQZQ3aH^<@#+iKl*8=W*yfzDbK^d6QTKJ3~=tpTG5tSoJOR z_pQUG-p%;;v&Cnw^Xq(nhFJCep~wqNoyB-(SoFCDv>KQ1_-^4lj^Bej{)(xygzRL{ z^M}$|HSVZbHSTS(dYs?yrKHoR#?)Co2%m!vT8ezTX=fQuh@#&izmAb7RvQ;1k1}=Y zNT<(2zfSCPVs-2m30E9zYCuj;ct#9RDX9it{31xmsoMU z1XudSb*k6m+8h6&ej*vyWc-KvKk{+yh5t~WPC7mDAJy?G3D#{A)%R85nu!0XJ`>jj z{D*oqJ}tr=#8bV7Jc+}9riK(am@GoJO_2{GwHC; z|2U4i_8Cu5rq2se*FG;tUHeRN&_0t6`&>h#&^}XSw9ng7*FNt=UHiNTb&m7eR@8Nz zccZT3yc%`w^E%YE&uyq{p9ShV&OX$&&v&A(eWvkhpBquvKBuCteNIDN`@9!*?ek&O zwa-UTXP@7te%a@{$Y&k%Dt{f@qaI8By9FkH#c@2X^0?};jCI=;$0=4k#wXkT{D0hm zx*Bi&AC3p`X)J2&4Hx-+STTJ)_$m(dce(xg)2Uw_lNQufOzQ7S@$2kci@J(W!^Z(_ zYpAYcH57G@)#ekZbF3zj4#z6?Bwp~$E3{JdUJ7b@F1;3z^++#O5 zzR`45^U@b9{o0s2;#$EG9b{SY!Co72x)+@w zO!tl0k!~n<+vfptkTF8Ebv@eI7Irs$j(kSe(%)0Kp9?mM*sqJS&F%P(%7Enj%mcD} zT6h251TC4MlZew|>@6GI%#p?1TiS4}XcFS{v+;8ex3w1}&rOWaPtNZKHoEDvTlOoG z4~y6*#1&OIVlNoDE`JEm!K=cRR8*i;L~@%*Sqq=9sC6?(7SiYVqE>9HLd>~M6!d*? zV^V3~s&4okIXJQgZu(Q(r4xTdJtzNmaKhu_ij)oT*?TPibBWR&@!D^0yP!x_NvAzy zYs`e$D+ahVi^_4{*H?-jw-kuvrGIG2xGlb}$L_VguDP(P8`$WM&)NxrB zaWUx^lx@O2&-a^qcMoKrUmfV$zntWhl7Bn9@RiuD$z>b!6+>Oe-SpcfEjsAAqdPv|d#A{J9FIwe;h=F6&x8&5Y~ndS z5YN8_p5gNq)oyB{)5S{VBd(zjJ@S6ZY5RM#Cbnk(vpx*asF;w9q>H(#!c}f zlT*5Zjc)j?`czLFI4pFP{Eud)H1z&#s>n(=eC`G|R3E(D##wu0iuSK_Ox?gnw|!=p zE%3kT=A_9@mh@%-z1frNCr)f7L5X~GpZ6l9BH>Si%3kT=A_9@mh@%-z1frNCr)f7L5X~Gp zZ6l9BH>Si%3kN%(L?DN`VYoyP| zqVf4WV`J^HMPDvI`s$IteB+0&KL7GLM*2MaoN;Wvcl3?R{(Rk|&%SuhKA&f7WV9di zu3QG6UwrY!UlL5tC7oxV*B-OM=ktsW>GO@t{`umI&%XH4xx|>-oM)dijvf2*%7uT2 z&p&+ioP9pe*pT;>W9J%RZg-x2mgkLVeLm0Fz%QRgpJLDDpmXkRGG2}n7u5XYb2u|Z z)8s$U=e2hDeB#{a`J7t*2m0*bIhutPd0Pk1=d_}_-N?an`)4_AMp?OXX96U#Z z(#YF7cs?h1cDs>-=g2V`ji!U=ZbS2&8aQ~42Bnd=b?|&n@a%RY2hWjXG8#<>&)tUR zIW=(b91Th%Z|mUsoZ#8*Mh>1M$7D2`4xYOW&2wtt;5izUM&8!J^Ett@+l?GNM~=y8 zG#xy58=B|Tz`=7gD2=?WgXeRCXSW+Uc#a&C(P%n&?lv^fseyy%Xiyq?TL;hQ1kY|a za_}5ECZo}G@Z4=^o>Kz{&(WYX^0p41&k3I0Zsg!Oa!f{}>EOBB&^)IG4xXbyY2{Jz^l$tr}O+yy8b~?EPoQOTb1HaX#;OJ_BsLh&A}1<8#Kz-dKabJ!T}V`Om?#^z`?*u93BKx}4`V zsLmVsL78aoDd!u{=M>nWM(5e*jJD{10!J9(&yTih{0I8H)()SO&-3%vf1u9}o^4%e zA&ohBK0j;G!E;Cm+A47H?BF>hpzOF0p64@?gJ%cN4xWWIIp^oFi^4f?gj_YY3Y`5p zEEH`~aPVv^Y(pAz@N5fQ!y0k$91?=I3LHF#g`zDA4xVj=ZAfDdo^63^SR)ReLqgD2 zfrIC;P_#wC!LzNf4Qb55vn_B9YsA5GNC?_0aPS-!inb^?c(xU`A&ohBwgs+XjW~D? z2|-&04xYn8(G~><&$hxgq%jB2w!k&45eLs9A!w_>!E;zB+M?j#*;d$wH0I#h7Py8r z;@~+X1Z@>Kcn%9iTNE5T+X~x|#vDA`0@tuc96X1FpsfN2&taixi-Ln^TVWg0n1g3q z;2PG5gXfSCv{m5XIV==yQE>2VD{Mm=bMR~nT*Df1@Ej6?whA0PhlQdo3J#uag>6V< z4xVj+Ygi)=o1*CxP~?2 z;5jq~?UXop4huzF6dXL;iQ3S%96Z|s*RVz$Jcq`hoe~GnVWDV?f`ex}Q5)KpgJ)ad z8rFz|=g=6mQ{vz`EEH`~aPVv=YD3#{@N5fQ!y0k$92$dmN*p|gg`zDA4xa5qZD?B# zo^63^SR)ReLu1fRiG$~`P_#wC!LyyH4Q<&vv3Vw5_!rHl)+GOnKx+Y;d{bJo_Aa1{{f< z5r`Z_j%G9wuyf8FTcINm%^W#xBacAn8E_C%5gq{IMVrK**pAknhnh4lAXO6AV z5r}4voVJliAoL745<4Rh`HVQ4(L}(`Idg1OIgL_Q;qW;7A7bIu%Fp(7B@964lR_F*sGe=I_$RiMX1{{f< z5r}+79L;DVVCS4Uwn9fBnmKaXMjnCCGvG+J0lSJj5wOnM8M8Db8LlQ%%vQ)lkN@Uuir-n}!`+adZTzz#4>^BBibY=` z;#!}3MT`}q2gM@!3S5E``Cz63vnIs1?^f++o)+VQzZQsk2g;9sSrox;{;jbjk39}~ zatSUv-L+TLqn;AiF3Z1*3xumm3#s&F=HnWA{8BfrRTg|H2qc2)Ju*aD5DR3ig;ijo zhzKXQHYm1|ov1G2YtbpNP=SQ0ouBH^UHg66=l4vUp}l=@hmnz5Q(tSQ%Nk>n?G6@Kqtuh z;P?DT~^Sdt0>*FKKb_9vJ}#f zYm|*&d>{tHlc7ptxh}i=g8+JuAo;j9e%o%s#xn1=o+W&M? z@ff@JCC#9p>XvmwjO;jt*wWmpJW_byrFuT+@nXq4?WmixZ?;8~j+5v;HHGxYBaiI( z6k}Q{evNv3$6rK7#~G}r`4=^s8GOj{Tf~S-Z6fcC7%_gg_6hu0WYxEbTR?i!-u#Q! zpdLTszPQ!^-JW**+_<)(?ZRIn=81>l-+gUj#B4EAh!K0l^ z+hKD*;kJvlClZQidNiFTu!FNWo!5Tbbr=D>x$LuX=U9rx43 zkGs`M6E8RsFYC|9e?k5Sw))Y?W01!pj{^_uJnOHpbqe_t)Uns-KC?asjkT8b5oCx> z+?Q3(`g?FMUDI(>-BK_t&o9@uwXa!N-+{b{$MkE}F6*t%V~WQOB5e4-$8j7JAebav94B!?Wc-&nF+oVSY?lU>vMHrBr7W8Q z25U1(VaPS=A1KU=FZHWd+zwc1RcpcuLlqXTo3qL z`HKE^-c5in0KN>JW-vDGp8=px4P0kDOyuA`&RGCR>C?qsD2H)1=Mn(=UhyXIMBhE{ z2Bb?9+@{4qH;Q~eW4UW_?G$;%o5l6KFQUxf0CpzI{QqnJ_;}zO{zr@(=U_}I1n?Cg zjT;zK{!HnVxuJj&y%>9F{Gkzr2R_y)@#Hx{#{Iv#kerVTLRRkYPQJyYlVeN=xDv1f zaL36%GCto#S=A8gcps})#aBkap^qSV*`BI>YzMA)^YI*M!o_P_#4aKokiLjbLxkqf z?yb8h4IcYqtZFwOkBJx2zQbl>-Vo!lz$M0G%zsr!gie&jWhC*J=aWl;r+G6TAm<3= zJi{tK?BsJOm7%$}5-I%`jdC!pKn z^9Fp|Yb%%N0{(DsM^DJ73-|PgI(%VWQ;W65Zfv!hT$PvAC|t$W>Fetc1;bKbr%&49 z3-xGwLjKMEpyUsFeFIX@CZ4g$9}4$LzJPCwFW4uAJ$?T0rtSXVW~t8??yK+x7AAO_ zf*n2m!9HKe=asy^j({iRlZISiCwU|&+u@V8bs`ffC3l-AECqYOexTRa(dYA4CYT}S z33{b1p6#5X-6!>jecr`VM^CRG{E>HQPe}6m!ySPhWPnA7ueXm2>wp2go?wS>95=>V zgWet~?DzU4-=OOLBO7tMR&1i93 z>^800VsaXsP3HAlhu!7Yx-6B}CVR_eSZ?v)MnCHHgu>K2P|2{rCrCA(-`?ZhE>Tl& z@ee4Lp5N`;&KoPV88W$LhFmGOko!B@xLZd*HM%ZuxUZ)t5Y`1cYU5qKwz4X&>$)au zlh)a4b6Z+aT}3fPzn&iSryzBxpw?!wN?SdFeqUH>N3ZpYZc4hNg&P_zHe&-iZ>1zz z{agI#S7E7oNs4~@&uqW(c9Yfn^q0u2@ns^j;^PL-h|DS;M-Z7cGbJshq$^U=RVit# z1Cl~ymOd$k{hL|ll(Zuyy)GraF(uuZlI~4O52U1{De0Xl>0K%5J5thnQqucU(!(j~ zgDL4)O8QVr`fy76NJ{!>O8SkI^jJ#zgYoIvJu@XOrKBrT(pBTq zMR*49#Igw?8kudze5GccSRO@Y>ydUKtzw-qN}G{h$LF-p$0_YVdLz=)SSKDQkcV_9 z(nYKjj|#{`x)-TJ*5#!1PNeCX=X0#fMd>?`jv~E*b-5`$fb>qJr?M_QT7wtTG?!0f zU2T*eL;4P+uVh_Vwnb*|L3$6;SFr(@6ta-shjb1bz@trM_6JB0BVEJ>1C-u{^g*QZ z+29sR$B>R8J(UdxDLstzA*A!zAeO3;*@uxnEa!Iep|j zN*_e}4Wx5e1dk%1MS2YBViv*j6S^V&0WTlH(ipO$usMcs3`?eU7;{}yr=EWBp@AF| zCKd{7&33KTVl&BO&eV>cExrB##$k-k)yuWbzIJU*RaLcAUEQ#xzM-~mYBO@Bj*yQ} zi>VZ~4Yf5>6_%e&5zKU$T3T(Ebxmf2dond@s;LGAKdsd`yM-I9jtB`HcQ(Hi?_DZCwPAIvC0>0?aP*BULPt zE|bdoe1QNNs6Xf*kUW_1uq^R~w)lgdKp7~TZ7zu{TIn*`jIJi9$z*dFoCXw^v2LTq z<**vo6L)DURB&kBb}eOU-6m%XM{`n9tg^{&YqmIBz&fsB1#f+~y^_;WDT~cur797E zXWHy;OOvV6X>yqj4%1YrVoj^vZITSG)l{80ncHP@R~k)FM?%l7qP&$>d!xb1Eit(m zUXe+JEL;dNyqwU_V6~cIL^815>E=T1Hbs#Nm)T^sLLO(NkV1TOtF4JvNK&i8>M+}# zMw64bz*J613|maLR-hJ6t)P{d%W5|mg-Z687S0Yi2BXn!hc1FW7Hw{OlikW26zZ5w z%y6KD8Ab~EwY%y8-YuueFD!I_-pF)++Q4)ttgQRm9XyZrOuJu^m~O0`>HaW>>5dh% z?oFXY-rahpd+jZzd-V;bJNhE>F!&+RUVL}^L8gCbH`5>3#jo8J8+jh>DO1q>>LI2( zGR$~i-$rn?n-+;W)dZhnGwN1jaNwa1w5 z%Wp8<&R3Z3i_b%sMLdu8vAZuWX1eHZrn_zz(?za_E;&4pB8l# z>zxrfkJ@1m(*-s%T{qgO)5?NJ-{g6`es>>XI?qm~+ju?GUDe0B?-l##!Y+w9U)Q#k z=~{c4&e_hoH%q)cwMU=;x>|2zy45!`ojJ<77m9TNy&nq9s$#lE=xVr$>2wk3E96pM zw}g5wJIHkP`B<^e@HcyT zp0K%|>1NMlx>+SmcR?2GGp~r}1qvj#;)`8u#SLD5?GsJR-?jgCK1R^=!c-E#?MVKvedGHq#Sa83Znu%919^ zG6`wHI9#@HYO`fsi^*+}8jQ;@z)4lol})Wqr^)7CZCY>OBjZAeU5wQs;~QsKGT}8j z-?vJn3kX@vDr&2wcqu${B@!4RYpSG1tHHJ!laE8HOT>{S)hv-JNC~5Ttqq2vXscr( z^qd3>dWX~GcCW`2>2O+XZixouR)>}r5HxLq!09loS(A#FDri=1F<_RI$~wGgg5GWP z8-NwWG)jz!3q5zcq!z~7Dv1ziKoK2Wr z+)~Z*rP7rKhXb>8jZ}jcZnD~4rnOQ{eXX<>YeV~52kcNQYc18(E|qAx;DG3wnmUe7 z=vIR^71hQxx&#I@T21SSV`7YOGb;+)a151*V_y&C|+Hs%nZ$2b7hk^4D_d9wY?V|t zuS}XJZcn;FCJhm6g-;eDGYTg|v&f9`&w&b2WQLe`l(ce<%ozV1n81s%T}dm~$P9U4 zR}k_wG6N59lZ42Ojgw&U+%rS0M^ZB*GX_#oJRO;F!zu8)PJzGc6!?9oz>E1jH8V0J zmWtx($c$%Bfj@Ez{A-iq6=Y-v9$qI2k#i?O0u?#;6zzYmn?=fmZrhvRVS#Byj9t11 z^fQ5fi*0w^2IvL87%v}x2fUf%14Y(^piA!oej|&_1r5S>_Yu%nflnXsD}b+I+ntXA z?gZWj{5OHe96Z;}wy&NK{GWlp8u+_`F9&`r@Ld2W@Ed^-178LFBfvcYxDWVV;Qs;B z2(zPt-Bd4P zp9vWYu)bAB>PUGpXjB}iyb|K&WCW!(c;2F`06ne+tVsPctbyNQ{Xe{s-;+eHtYspK0*?hj((}&tqJeCxJ%jLFJWDB>TK1r#0ADOX#8K!&slC zl!dqLkL#h7q3fybLAN77mJ^v*71txVywE>^5qj~VMd+f^;)?gNsv+4PZ^ZSW=LC9Q zpdjoqhnHat_K@49P`yYsq{jTh?J)v-kbQ+csJs#;(<5PzRVbspOGN*uE@B;jTExe0 zDo@Wx^qfS2>j7DDep45V{-K_aTp)g~UFG7_P6Rv&am3+D~ zlP@|a@F9e0QtbZ^BvwS3aCTTA$#1ik`;gF>GpP^Bwq3wuZ7Kr!kZ_+)B**c19gHH~-NPsMlnTEufuW)aHlXEjGyj8!jXRX4p>y@6S(d-+(4wfVeV zn0xZDHnS5LS;5&`*6Ur)kf8c>d&b4ycVU*p=>vjm=5kxN7 zhZWTf@ZkGaoDTGmaR_uzu*xr7srY9p{7EO!lMfI<73=smt)KYgf}#iOf31SY6aH6K ztpCZ~oIkGI?*0F~6mmXf13!xr?O7X!N}^|N-KpYTe|MJGf8eaHKgJn6XT9dAnaK!}w5r5Mwk#&3yKKO7n3;%n#})tC<;NH3e*`ud2qzUOM?-d_1D{IgQ7O z=Y{^qAHed_0G^C>oY*8^z4Eoa`jC(j>t+2Ui{nuq{+Z{+c>xJ|Hpr`B{r9q(5G}~$ z;9C)+a>=3kN${ld2z>km4aLDD1RfjNj$N$gM%GkwKYN$!M$eo?!|A5W>%of0EV7XZ&QRoKiHe`ka({%#&yyswOLKUD5-=ne_*%O1EHidXnP_|*md zTl%+10r(aM=!K1kySQ!Y4|epy39nKXuM_?d{o#-ELL)+ zyZrS26mgGJ?1y8!-l?UHd&5e_@q{sL;hDyl#e>(qH{yxSA=hvmI;gjiaaysqKxD#QLhvV{3R(_lhVp4JT3ClMd zT-FJ;qbB@>`orVbWm?lhuZf(lWKTnGe?w?Kb?1y_Ry(%R4Uo=4vx`EfXSZarF z2pk^0J-%>o0o+79-Q439_9w!=?Y&5%hrx|99DwUC-aU47a%%3UD|^pwM=Lf6+Ft5{ zya#^v{s&J}I4@uJ$?V@^Xfng!iCm@VMH${g%ATPAjq){AfuXsd+ZO5xZXUWUh>8!n zaP`4!*cT!%=OEmKfoh<EN!?W`a+Rp{iQj;&f`8swy3>CVHos>Kn@&=&$@o zMM0gd$)=ElxCTkJDx2d~YM!fMDw-4VOL@rUS58M!3LH1tHJiAp1V6P}lg*hBAz?L& z9K=6iP-_$oL;lIPJo`?)?@xL8(ii*#s3d{3ZOAmu(|E4S-u@(bCVsO`h+Jh z29YS>?il1nSk3ZrG1;1}1}Kpq#}hrqbd!^3IBKo^;EXiMOEa&@{Jf! zn=tEO*RKF>C9O_dv)$Rk3S>V6ldX-d^@M_Oz-*962jf~x%UXkl>#){oahpgQV|)VL zL?0t8WO=PNm!ZvMB>nT@De1yu$^_fy!#UFA7Hu>I&KdAzQdeV9|(PLU#qJA zEaIRg{=}R1K1og%%DsbfuPfgqB0Yv3M4E(g`_46EcNhDpS)+K@^8mih{T1*O_}VAN zqwuiXe?Fc+=bH82$JI}<&eGCSyhdUa-IaeYk zi7>q@5ob)_i9+Z6oL}<0^r%D0H-X9Tq^QOpkLFj4XuKkE{$)2L^F!Q`oYs3ad%d@G zmKLjs-@RkE>D8J8@9MoO&HlH%DjB)|RV)~S?q@PB+fe`=pk!9Vwd$@$0a zqxl@}4s;I92HYP%hjQT0)*$^gp($fAL;xy4ybgYRic_}RvBv2_)u+!Hr#i^t*8uC_ zBYRMNRWvEb;zu=AiP2RL6J)ga@+Y;QCWhNjVT1N5QM;f*&ioCv(n#$pif14D%O6K7T&uV~ql76K z3sj7aoGTO3?NFi{8_8a!R>A6d$*n5JBRwiM#`36(m;C|o7T`F^j3)I#N(2A4xNxg=w2;Z zO?sU>a-jhVXWPkW3l3xMF1E$M9_~cgsL0C=J)PWe-9hVYi=!_uF+VaXxXbJ z&@d-^Y(!%&5qCE>kg$Wws6g32vl*(H5aU7oQNSaBA2Bu)WB<(MLMNJA=CqTfDE)vL zfMipD(g3Kz6}|Ws0_U`^DeWx9T!6S3XC8(!spAX^^3Z_(tYHp`m3^NTCyzIDpOy_n z)K7$+#P}VR?GcmjSzNh2a3$TC7=HrI8&P<_%MBHBe>oL7vwwD=#3|4Zy4*DI&i+|P zAv$vbNRo#r(SNFN^Z!s(lekhS+lwCukIHqX_;kHSKfKDT`kdy#v>q1GAEC~nsUKa< z@0qgIYW25Pt5shjQ+#{1y43J>#LDiy0ly`6xOvOIeb90s*W6jU;S1*Z4`T}Y;i{y* zEDJluh3u~c^*3I|^dC{<+d*{+UR>r?-D2C@OM$q0q6k@fJT53&!Tn*R=Xa{%!od7o=0N4cR1+)SB071Z30DQvKI{*;?)!_y}7n{~dy6gl*0XG3| z27~~&0=@#EI_?JC0k{)zHvqnA>U#ip0rmp+0d@iI2iyx7W`iHr;kqC25MU4B5x@xG zQ9ulEAK=G;#{h=_4*;G8JP9}mcn)VRKmYYu<`@&E;ZLO>Cq7%&5n1(*pa0h9t}0pSOi!Ms0362Y5;YBrGRCC2EYn{4xk4#0*ruWfElm~Uh}*K|n8{PcFL^@d3aNz>tiKB7QyK2EdJgoq(GF zUjf_<*af%^HhKcr-GDpga(5wqH((Fo9>89}KESPj`vLa?hGl*BBR&Fn2yhVaDBwOo z4Dbkmc>fsiB;XL>X}~jpX90%+&jFqXyZ|@?coFat;AOy3z$<{)0Ivhy02~9H2Y3rG z26zYXF5m><1HhjFA2RO}@KwKoH-6XyWO|GzSl^)S`TB)$n@e-y#?2@Z;U$qWB1akZ~C-Rz1fc{Oxr%{`Z{4sjFw`$<}TSM9>ey}9yRPg z2h+u>0R#Q^f?9J`F-1Fz`Lj*KfoXb5ZlngT?<{U-51w>!-OaeKa@j74!Iyp3)H$$w z^7{W8Jd*~|in!yHrqzKRW@#llWCs^L)2wx*^?=o9{_2oPkD%`XG*PX@Y zM?hCxb)ah1?W=gRE*jN)cT-HWwX@i(nm#=X1bM$-TUI9(jq(1kl*z5cMrM<_GRNpPtkgPK7JW2`Oul7iax!!b z9&(LZgA3c3xtuQu_)x9^c{$jJ)H<42Hh)8k7u(qVr6TmglCIcd zYsQYQQB&FMq;$5`)Mi4Cdfw%fWLZLeMlVPyoy!j1EZt(j|>EiNp}ChVq0ohd+XewE*Avm94zBi^)v4*SE%$tAt8#TU0L z-o(-#xMKH}OVMZuSq_8SjH|*=x$;c>D0Y>%5uLeq2T5=#c!e$(`{~rQDxn@z%lc)v z8LX{PNXbWksb7j!y;5FjUq!B=dRcXKE%XxG(A2-`tCqsfE<>})y`E+B{bAS-d$F{s znTzdEd@JZw>?3zWEiVT-qC24-FT0GJR_Sk9w7(1Gvnm~qHoD>)OrDnQm+hAOH#SL) z&|l+*Zy`dq+kj62852hyFxH6kgb1HC&(KI+BzK+*J*2fo=`TvXa_kPy$cb*~bZc2I zKCq`R8*_~KuHLbp<>C`X+HuAeuO*!BTq7D3Mxu7b1^uf9w*cfj#Wfdu;AA3vT}tAa zR?9D}vJ%Gx0aqcCY@vK5JVh0}1_(+k`ML6YiEP@`M*VV{3{IeMHS#MRctG^oWFNYt z20zSV*ZnqtYYqTsk9=4FC6hR2e=P#Ki~ntFknAm1n>~xAm9I#d0E+-Rz%qay&@B%gg zIssjP03ZnH1%v>7fUST5zz#qJFa(GKt_R!zxDl`ua1-DwfSUok0Jj2e1MCLe0k{)z z7vOHd9>6_-y?}cG`vCU=?gu;o7zXSIi~t@290WW9cogs$AO?5>@MFM}fJ1<%0nY%Q z1w02>1$Z9t0^kVXMZimdmjOosuK->L90t4zcnxq2@D^YU@DAWzzzM(yfIkDU{;#8Y zDeHgCXjuOjtFb04_X2!KZ@?(=A+8>zH!&vtp2m$RrceM6F-*e%4IutZ;NOffCkrc& z^3B+|MI!GP7WpZ_h5cK%#fi0PS@ZYJw>w+0ZppummgU8Dqo6GJJL$KRwwj9cg&=Dx z=5qK?{5?fEW?NcnDWQBL3PDF6RPvSSy;vEZ^S!4Ee;|$OMN}mZt|MCwYUe zfx%sZ>A|js6=tIrv_CgJfc>FGA}%zH%8JHdWB{}fK~GkhcJ<$bdHpV8esSe!+jK*g z`9J|J`O9nd#j1zR>VuXm$++bk#`c$4)mM&M_aD_;RgYNJkFK(+euT^FfQItd6%GFu z8CJED9393sRB~7fZB?|+z36Ym{$~EoXqGQ3Br&u%Aj#n6dZ4C~ab+6Hi`#w8?RXOr z&^U{VWlQEAm?Os+Jrj{qh6SjM0d*^1QcSOSP_KfMx0?x*e_OGk8@82MCtd1rj`T@} zxod6-gH_Rhc>b6>9e_R1x#uQPW>Y30u9L`{dk)Yq%XC?|@;d47H9>stw7>1r|M5-{ z)&HuUjT*Y%{+^-J1eJ0&A8A*Qni@r>@s{pr7yp40bI(J5?zC~*ihhbdT6RC4E6};i z{*z?J=!b`CE1<{Md(j9AJ;uEm zA@&UWHFUo&W83%Fv@a@Q!)WWCsCKrxzF>1+k2I@?OKaf@HGFkb_E=c1PSeK>IVuc$H$uD#oEGSP8 zV+JeeQ~1>u+DvP;bflXFUQ`qFYo?C#yheGxJAp?(rQ%|+`>2w&eXJ8$whfC-|mnf zZ`m~7o-P+myb|ZdxrIDBTMqtqWH0eNi|jS6aGo>C`Pg!B!_@`%ywDGBR%l~rB>D&V zH40y?!nJVY(K9k!d`2@06vxwV? z6}nncGw!&ET_WheXc1JWmR+=nC~yFj6=yBNo6X4enMU%2^0dw1nA&V@b(txO4hVhP ze8GO7G+$bWv$_YQrk+r5PYCB;a_@Q@JkmXMpt0X8wQtAS+&IM=_k0-tS?Rp;as8cXB^Ck!<(^R(uh8C;rP53ixE3Ja^?l|sVSW8>q9NPM1;=*6KEC z<(}f=UUc+R!!AH?F=~w_e2aja2DcsDDYeZwY7*_$;t6c(3E?brDI||%J?&jM(F`8+ zl^5cOaGd##lFf!zt6QrKeQs>sT+jlH1vjNu-k8EYizBPyKZre}ZhtTT!lB(mpO*x2 zPI^dc#|h_f#)Q{Cj&%-l%i$1jub*tmN6$(|XIb;(q3L6XA=hGpq4^*mx}x#|Sr=@- zp#$MYM@1btEt2dqb3&f16WYHusGM_-Q@{hL7(N-m;pqI_>zPW$WSb?iL`f0iG)m5$;A*439mXBas(>e!c29vSW-na@8E%t-8G{n&E zomSw`{xqh_jDsY4N+E9)r;l?K5B6)WaE*c3CnZj?k zjKgzQ97pov>rA1`Nv>aX@Q*~Ml)Z_f(ItoK;<&;0@gCK_lhSPag7ZY#_m3c@if%v7 z(K7BZ)}Gjn7J=g;c{d=%ql6VW(|{69;PQqD7ajaBY8pkCiFAV}A62sBbb}`kPQXR- zLWDy-o{7^%^2kUjy5wz|fEzr?+dMY-hZyTq7w`guCx?j+xG3u#Jt*ptw^88!B;l&) zjP-PijKTL~6L67cE(3TTgpBu|Ln1}LX5O#RH#QQXtP96cnhn@qmvte#rIcO5+dLMz z;RxIQ;~NFtk{jc6*EU=&m$jju%ZMEXjvG9=SBWO!_DsM<^31@|Qi%tdU!#(ytBhO0 zwy%0i!3!DhlTG76#!=nkK`u-0BvNHm#fcD+=@zlAhKCfq%x{m9rmIX>J^?rQ{v8u= zk-Rw*aD(rYP2)l4H#3evM8=h{YxS=vco~Pk5oah$!R4@P8%xLIOc7!;yzK=y+jf&p zE{l)h7IluJ8$A92aJ?zGV^lUeIOb(Nzdymt4jzA$MF%u`Hn8Mn8Amn+zn5ZcV7c7KO)~`U=Mr!MPB-}ePL7M@;3CTy zJpMe#4G?)8_bkV4{X;_M!Q+QGZrgc8rquTdjvM^_PBySi=rVYGk}>Bv^)s$QQrY22 zaQ97uo8;a)e)lAFcMvW*_y^c!sbZHx!o>#P+=r`T=R8hV|G|&hz<0%cK6w0Aj@$Nu zH%>Qr{3{fXZF$oi$3;w8h^N*gF-9nv5#xsxjn@BqBwlv#cvRqCA^XU>7(Y;=aophX z9h2bt2p1ioW{#H~Q=&<@HwYIUkPgLhgU5p$x2=XyLhj)4PKq9_|JFe^@MN3ZH=;^5 zt}@;G14=ZGix`hmTnW5v#K_wy8d|{7g5U9WBvi5GZx{(F%jl(OG?cqDj*A%gaNK1L zc}cjt2)8T5_OZTmmdgCDBwQ@?TOw2H(MHi|sP0G{7ct%@aHSOqTr=kv4V{I>lpSsO#aIG&TrF^~9!lVjeJF5; z$!1DDdIj!h3EbfOdX5Y6ZYs+?c0%C9^dszdjO3}J*Su4KtDw8~qIfhOxpuasWG8TZ zYD{U5_jx}c8VW+j?~W?bI4)wWn*>)i36As{FC$`A+Z#S?IY$DWyh ziAE@8y|;?^9nCbVCcooILn`RRVXxCY~8t z(wT(Qaon}D^l_XL8T@TRMjVH&UqyxziPRNDW$%k6;beaI?TOvAY{Dv5aCc?s*kM8d;0|Ll^EOcn-hZWm~4aZkWPxuyp14(Pzo*&QSkeA z0vD+Z5{@Hw{D)2EHx$PW8lUC3NHdoa-EnWC?BFr3^PbD>WLw1sUMd^C=3kTPLL9gB zHp-Lfnt9pSjz`@IT-^quLmNfoxWQuqf&1Q`1ny`|;9iNc9Y5P7>%2+ezLT)&;Cpw< zbU4rFmp6)f)KNa!^boF!F0zbUlFEJ*B|4&EgBOq^Ca&+(uWHYZ@9d|s0p{dIvm@qxhI zC*i8_lWq0A1TNAnm;H8C5*^1;n(cV@F(J3vjFjBwKYLQvWd-4I&uqk1kzo@!vCbB{ z9OGqU*F2?9(480~x;;DoF&4)~>i9YbcBXa~{33M~h?1?2#&Lu1$u@XJk2V^T>-&bF z`|hDQU8HUf+wm>31M2bc)w0erkOIH^HWFIK6%g*|HBUw3xWN-g35R~aD+zamaM2x) z?n}ZQMjPc(nhj37Qt)dQcG>aW3bx}-A$RatBPeA1Jt^*w!4sq_Wb8}Scko0^##P{| z*i^AIp%k4dD)W0`4wpOli+2eJTlG?=z@0cKaDO+Pgrhj6LfFz@sH;#nd1AyD!jwq&bYrqIj>_(AxijpaEwDgcI$&|wVLL&KY!)$E%u`Mj}4ztb&ZW=*-KI^REJiF+c5Sur{L~@0Pa^q_Zbf{`~s5t zR@P5Ii-w+?i!29#0{Pp}k|Iv0*ZiQZX}@0I1TFJ&)MNXX=$pVa`$s=mOs-9DIFQh6 zU2})tL7z6{FS=1LF!%^0Qh!v$ixb(!a&~dkKX5+N-}yQb9=U;j4-0ZQ9)Z=|LP8yq zIgoCr4=d36Dyn~piDl9EA0>4EQ=O?k2y;=Vxrpa|ge&Se5`bIU%m#m&S+H|X> z=}YGCSfJmuf|;WR%^l*)Rl^0NrrUYcG;_33MmEmGMe$p929>NHunlq z4J9)dehK+#y~)4N*B{8jr?wZXyYOj-|KTq4uMQdxOgDSG#=beKe4u|5HT{D(Y&rS- z!A*~>>KeP9yiM|cfzKEyP9F#7tBNiA&+lIKv!_*KU1MKIy)NDbc`kiNl3$HBLZfD%^1f@-9LUulsA()# zj}+pDP&Z*@D!L9am59Nu(c*1XjomS7Zd8xm()2ZpxwN>kSo4D!jb8oO{-;NqcGEY> z*}-B%aid-}c30Ew29=CZ73<+~V^G6?XLR_kgvyh~gufp2JQrhWa^T|&>P^0T1&fgb z8h#E05uNgWf_vUK6!*O0QhnFh{p2@vw->7Aym|Ym?5SsKje4nr1sHLoR*!i;DSGvlV)LOo)FUHW#xazKdj$8X#dBb&}i{i#tEQe)01ME`D%)e=CT;=c1bE z={{MHTS_(KTb5es7JaeVODWCm+()bY@nTAyyT6PyQl0x0Eov@)P)?|M0_v5I@(XSuaO_5^=78LpxQ)LDcuJ8Q6%ndq{GK8d#=EJ3tVZ;I5_J)|6RR`_W|;BO z+Z>!71Aj%RICrI?ScTE;_huDoLdkW*FA9!{d82eZYh}D8U3eHL+o0JeuQx6z)*DoO zM1-##YPS3OIYqFM<&^NC+rCgVe*Kflk%op&DE5@CKEabKFG@b37 z$hQ)|C|gnzV@uTF6*Z!_G7vMzFav4{`fuM z2-}M`P;j^^wo$HIZW6Xp($G0bVZuO}4YlfzG- zpJE^7IyD<(09}L8=~|PavrC* zS*SzgbI)+@T21Ft8sJ#YKd{bst+wFriSxMNFC4lHxLlbJ{3GF5yV3+cQ#j8y?u9Ps zopf*~&QT=a!el*B0rw&qPx0~fnsSK)&cSe%G@33^&TMpozwir%qbK6Yc9?QWbDSP$ zHj=NogU+|i^ZG;Z<_v5HJwM~I)lp+WJYR8@M_UxY-A~&{U&lMxluImeKKu{v;@I|J zUjv=_*$A_&rpYy*`&N^YP+#F^4QIqwM}dg*j6Ap7wOWuc;NeNR)?!5K6~F^=?OM0R zjgO{9TsYX`yim&F8HjV=d7PW+z?r4^W2o-cHk8d*d>5~P&eZ}vBu-jhuk+S z;p~n-kv>H}7nTky75$Ko&#cB7r`*%qZAV?E@KZP|$?N-ye1owK9|^4G=X`Q6=hZ9W zE==cPuEk%u<&NLtEYnsSRZYkh4&x#&DmsTmEF325%j^C1qQdhg>I@m1yA%HoxYB4I44tFKJT{{aSAjB zq>jm~(tf1&h z?T{Q&+XS|KhSQzCO|W*UUv}!XOZ{tHCg#ay_n&U<^6CcGL6BLyoW4z#?fwL9l2~7G z@Oqc-ljSRt?-N?PG`*O_@6+EWldfIBQwg8>K3TqzSbWTSG7BW*bdIv+ zTT$0%s7;pd{S<9d^&>7XX+4?X9dDE6cotl~i?_+M3}esoeSD49ao4l>Lg?Tm>q)K~ zZ<9p6yq;YCEXqGdZPJjF+$Qa7@J;`tN&Lpuk8E>u!CJmUK zKDJG0Z8}cpC~MH8uDhvC8iH()Yk{#V`JS9C&U}~d;!U$H+C*M)4u275Rio^cD=jAAOMB?N5yF3%`pD}bZFtB3dEpe>T$ z_e4CiSjW?_dJn^y;6?a%SsaKC`B8S+dC(K5h39m#&hw5cZNd3cdCnK*WP0Y!?UZGX ze|F@^$$sL`!sF@x+Mb0cQ+*PgVjtz2I>*P@W%p6Bj~Tl#$6toMt#6N$pzuVSyudTi zKUUmbupa5RK>wP8i|ok^T~=6No!$m zu1@GNVSfVchC1+lJkpcr%k#;K6X5ka%_o;vCeJ4*647i;;y12-#P5_LKA*_4iuj(r zyg$KtilU!+KDnG8sXwkwW`Jaz&QW%GC+hkbwaMkXKSi4eZIkzm61?MWa{2BUyZm}; zlgne&CJ1zYcyq629V5+?%<&E)5$mpazT764$G~ftx5)>|ZE^{nPZ~_(H?DrfZ?bUm z1S?ML8OgGW@OMYaK77we6NGI(Vv+CAJ+16*tCjZvz?IPW!mocpzVE`HAfB?{t(z5N zx?Xh&B_Du)L8{>()?5v=iPnyyeQLI!MB-J=N{Fy zGkEJjkM1^nSP%Kg$5s5@_U^-Zplt{3m7I2f^RNgT>CO;-JrE`+O8B@o%c*pG6e*qn-`}sS_ zy)ggF`segNCt;d@!CPNcvi#CwnT>Kuyw7zfu|Y0>pAE-%Is>1FadPzZc2@H}yi>-j zY%tE54F?OAVeC$?`fKXOnO|s}uP;`w8~#tZY~m94-=y?w0U%BjLkz&z zcCcFM1NhPGqn~>nkcR(=mwXkDhTDGlE}d*sj)VWV9r%#k4ac3qMjVB|f*z+5yvXop z;L!BHB6JMg=nDK10C1Xr5^40YBty9N&(y{h;}YXgdvTFY20FFYu2C$NpI`;9RTT+eocAlbW-%l)Mq?kK}L< zMWtq5-gkKmpA{F?peK!Iu7 z_4p$IrKM}Q;7QyL1Uoe6C;I!5cu~@f;{}}f(`uF$6aC%Hx=&P2{Mk@Cpu}zye=t)n z*V(gW(!V;X{JmFt>w-gK5`SrQ$tRM>-ytQd$!z_B0RE~i{xX+1iKEvO4&yKo{E1SR zrJ;e&so{rhtab7~ZHhxAnz6}`5U-yv6xM~ew|fHN?(Mo-ZR2{JK|-7CE?vsWHllv@ zgZTS+riPZb2E3fHyRKb9?>KNGtVt&hVR7l=r)X%+7Mx1sY%;H}ylhGB$CjHQu4bH` zr~Ui8q=a(ljQod7c`cLb`6U+kMg%_(FKNFmkrI65c1^r1|I_8DScme^Rcj3@gl|%F5{pPgx#A(7!iEdgAd7rW0EUo!O_eJ8+ zrSYu~!STOuwO}sQI}!4~l!!B?{};yQ2QfS)=;0rh944XPl1xAU?PO|9rW5%G#?c@8 zIQnvOmy7E&$3LEaz9%`YFW1oEnoQrFoIgRIa&-#*#am8G5Bub`B{E3b;)V{ zD_ol-eaat9&c}p2p8nMd^uwp6KRSW_`=_PTp7{6V{aAqvFpf6m>fr++?$ zKL5Sb(Zk<2h5q7wr=!<*O`!k%>FB%kCsX;?kEfs5KUL?VNW8w~4}UB@?YA!GR1y|d ztHk=VyooR|`ay6AEkuHT1%Cp^y{agQKA9Qf zJ2N3I7AVVvv{)c5jhPX$GcApo5mJ`vYU!~+rmLmL0_kbZjFj}WW=2Y;r=`aNnVyy& z3#6wtGg8vini(mXo|Ya9WO`b9ERdeo%t%R3Yi6WmdRlrckm+gZu|RrSGb1HEt(lRM z>1pY)K&Gdq#{%hT&5V@vv}Q(1rl+OH0-2tc9t)(WH8WDu)0!D6nVyy&3uJm)dMuEh z*33vrPitnRWO`b9ERgAG>9Ih1S~DXhJ*}CMlIdybu|TG$rN;v4Y0Zq3^t5J1N~Wi! z#{!w2mL3bFr!_ND($kt5DVd&@9t&i8T6!#yp4QArNl$BLq-1(pdMuFXY3Z>*dRj9h zB|WW~k&@|Y>9Ihjr=`aN>1oZ3l=QS_MoOlqrN;u9o|Ya9q^C7AQqt3!87Y~bmL3aa zdRlrcke=4eNJ&p?W~5|#T6!#y>1pY)Kzdp;BPBhpnURv|Y3Z>*rl+OH0_kbZjFj}W zW=2Y;r=`aNnVyy&3#6wtGg8vini(mXo|Ya9WO`b9ERdeo%t%R3Yo2*2DSr+ylRV2T zaHe};W~51v1w)CenUC&HUOOFN4bUU9d z^3&6r87XH=e>&6k%=EPMSl~>z^VuRlJ*}CMa<=rRGhNS2PfL#l&U8DUE%MXTni(l) zOMg1k_006N^jP3bxAWN|KRvCPk#e^5r!!s8OixRX1w)CenUC&HUOOFN4bUU9d^3Ss4d;Z(ib$9xtO+A4?&o+N>v(y{v*&On0 zk+yllQb)+=>GOFde^7#yMvqsj*yIm-0t+QiDCF5L^=j^bTLoU!Y z`vX3yuSaU9ynv4wczb+dDcI8|`3C&qKACR8pwYGZ+7$tRxVNJxPQu&$}a z>N2fqF*qD1r>pX^YF= zO>UD>YqA-&_GWFP)!wvP3i*0_LVeN}UtedBm$3z2A8O(6^Y;X`zJXp((CZ6njizRc z&7^gqyv1PEHrt&oLoUfLwDw3_JpsR$e*4K*A*sQ?31v~2a3wocJxorg-Kll9+T4~F z6Y5cZ>iRZYtR~lbsw~;h;Icwz57d%;p%B@%*VEDM+3bUT6UL})u-V-8y$=DvjhUZ&7J@{;O71}7kgD&LtiH_A84EZ{GHV6GX(DQnFshx?+ z=-Y(<{-96kr?wuc&liT>dVL-KO@0tl%cB2x_z>^#ggL)T7VvCo_j>3iXtLYdOis7f zZZ#?$1}LM2tjSn;v(*m6+E!{Ec8krerD{2WTPt<+1jBuy{tnzDXx~%W&uVcwlI`cB z+X^*>z2qL;hdUL#yu9xsWBWGGcJ$}d*e^viq)!YhI(xSGbOGGb+jV}r8+BWJ-hgkr zF3{ug_Vs>U7=K9W3HdkE@F)d6TYQTp-)8Abf3VLN z@^tk1xB4nO0zF~hHc>#tDvbXRd>a$4s zt1V-|?X}4l@&!Biv=zqP(AP;*A?|pxwZ++jhH`g;geC-!L@gsXL|9A*Nev_yLWl7U zD6J(pn0PA&e0=*KddvRm)Zr2m^DFu6J(2r{u7HU8y6@w;FD2y=$eFlRn zW(%$@?oiU)BXxShozf;u#+A}(Z9m80w7AVJCby+Y%jYa*xREE!Ia!*Nkh{2*|lczt> z2m1vv42IaO3HBMso?R551GHv~$!Tylnb%_qaA5+r;D&KowqQ=_Mf31sBSbx`oo2x> zrmHai&pE}q1@pJlWN6|1-A=nzOVg+uE!668C!1gntmibj?5)lwlS^w_*JLsou>?|T z%jQg||M&&bMY8>jrZ$?YMHfh_;w)~TwRTKtc86)gvVmb9l^Jg84`QgpbSq|gnofsY zm7;vYzT>5%{T2O`xt{lqcwb@YKZzNx$>5}g9j(ul{)7BUEuiFooc(9JOiqiv)uoNM zW3qJ_!<{d${BY9_xfXMfSB67|N;XHfU!wT<8oGQTe@{PF)A5-b%ebD7j(*(rUJTfm z!+h8D`!NJy3X%do4~;Gu1C%AsY|#&R51p(5E}ECB05^|;7JyDHM=qLh|B^YAZs5VE zqmz#Rn|gwMVO?(z#+r_hzqe1MJF0Xx)7mDi$y%N3T}@_dL zQT}I55(BZ*j*tKAGY1}z{;#j&X)5UI^Wf>wBVjd#fq6ix@Nbgb3$dD$+VR*W_4o35 zl~2XA?7}jUhVZ_Sk1rRtc)D?`#tX~yI)5^zWgvferg>RBJ8HGG(%js`IRGo}b}y!L z4=q2E1(JZpBpMHOqz4wDLCo`g{(!W-rymnL7NUKf7%{pj2D#AvGcEtv&^f2E&RLMv zg@>rKIjGc{tn8fJy!?VGg;R^B6;CfYXU4hboj>z}(hFzJo^z2@y`Z*kNqznDs)ox} zT&}yKs=5a0rS;2}H#AUMZ)j}71N=&}Wz}kHi_Pv><8--O+t#jIzu|LNUUhZV##84H zMy?&YF8YP*|K^4--uR`RU%u&Yzw*_a|8CbUw|?!mukXJ7j&I!g_jmon-QV2vkN13Q z@3-&$&c5&7_r3f7>4EPLKe+z~BL^P(;lYO=`O%~Q{Mcyh@hAS}$N&1|PYylx^uImx z(`Wzv@Xwz6`SZVc;g?5#_2REz`j40Y^XPA0dG)p5zW#sS_}!boKX&}BKa9Qo&L7`> z@5K8b{OQmC_2FMWI>{mhlRy8Qa{e=$tZlShHvA8t_(Z3#68ky*;SiqqJ3Ikhz>DR; zB)f7BtR~!IkBUkvTQRh(#R7&uKgmnJp?P9Z#VTpYSSgt>K=CLSSp7-miRDXNAnn(P z4M%1Bj&Imtg(51p%UVp&D7p%Sg zA*^$-0_zC|l+oam>$$$A(Qd80tVY=LQ_EGxv&8Fn-TDIg9 z*(G(C7xzVw9-c6z)Al6a%nP(;SG+;ZRuDVrb%9FU^J~lNeU&>OZTrzq)d?wTo99j`dE(sxx%48J!)E3w-l}U9~by8V{ z#oEwfSWRytrFms#Qf+;`RMtfAfa!6yxz%cw#9JV&l2E30X`NKjVlrAy>#;Fuant^+ zYvEL>cFA(7qRHySJI59W9;9oQS4$NY78_=Ct5v(!Y{&i{UbWgC^xDj|5Clt>NfiyW zqhxYQ4Q{&ws5+o{$8=z8(+R_LPl;3D^;{~!r zJC}`4`&#VqNp7>{|FZWk@KF}${`l-A7Xrjh2ozCqgS&uekc%QB+TGmPO*Yw>4RR4| z0zpF(LJ9;(HVM&MOIxfchh6L>Y{C?;2>kHX;=6Roa=9y=%&&)G3g?ydWIjz`Ry4$P~Dcm)uj z3qsyPZ(!E!9A`nO2uZ@*8v<(~)R7z~Er#%cFuAgV**Q*sC^&iYbvO8fPUr&=G~sle1XMdimd+)QvF1i~p}zPLa*P$?nH3F9GSnoAC475j@y z#7y9osDTrlqkSa>SotZ*nF$$>pL{(B1PloYA{UovQYh^d5gsY8dl&IJF6Gh+?mQJ_6z(WM3m*r zpc#CIxz@-j@r)EV6<#btU{xGBmY*?>u_zb@O%8Xae;Ue4Mj$vX3p4(dHh+y+;jb-Q zRzcG?#7w3aljy}knoiHi@`iFUfae^ak-cDk2E;#Z!j$oor(8D)abSHT5XhMZvw>+r zIq5vet<45wZoVj3jPjFefcdJV{g0lLI8^$@uUpHkO z{U`pgj<}?*mevYks6o@}EVVd?R-;Xm)v0bI3W{lfSFZv;mSZ3T%1kU`gs?<|qF5Yc zEOmxAkZ(#|h^3U|V9mmqV&J(|c7ap|Uj|}>xR_BRgZhj)%8OhF$GSr?YBH4w+bujZs)PuVbdL4q8W&>mO=ve-JOQV!d4% z52Toei+gmcd0C}lXl#yhj1+1#YlpQ7smvPBME*dAA z%>o;w%RpNPA{f;hrvPhZI(y8)>m@aVa$x{r>8VS= zPyYj>{>JjzBF0v5py6jBchf+wUulzs--j_;u$nyCjCmNt$Zie!4l$}F;z?udG3oq} zE$1!=V<+JFjP3j{`9;3=uhL&+S0yOU0>N3pQ(yZ`6r?YJS`~|f_ z)r0W>3~+K0rg#Cz!NM+LQN+mH0JP;?aZTN#c~J2A!ZFlyjt_Et9%J4@tn>1gnZoM} z#nd5V!a^8=$R%f*zvi>d=Q#`fe^>gEav{|i=|{_#v3Lo$ixN}bB$NwHwq8=g|8e2^ zZ)WlT-gPe}f%?zBbU@p}lf?h(KfhP{Nmm=d>c1+Iep)CP#OmMuTKaA9+gSZW9`pCJ zTcrP6`2HLyemiRzuIMGhpA34ZBIpe@(X0O| z*X;l7g!HTQwV3_uzcS;$`-Sw2^fhd+F!}30Z;*bGo)uf>NWTUASy)3$n)Hu`e>C|0 zoe97GgJkI!@@(*JFn@nn$xEca{@v5^dmQM+vHB0}(vK#VrLp=AOU&Wdl}mpjz9%C7 zW9IK0#+dvK+Z8_b1PQGEzf0uzOW?nR)&IdPpN3|K{O-heC+NQ|{ZhW~ek}d6d~CQw z`uhXFKj_bseo6n)Qt2Ox??aKE+0rk|%hzk9|6+WUm^echek+z zSzgywOTU!g29-WZ|FfT)<9p~$=@<0Fn_5l&`ah`nW&Ukf{Hyd1H`81Hq4Z0B-g!j& zCH_0>r5|%F%*qEz*zv7JX*@XS<|d zrgvSD^mBSe!J@H+FeIWy#BCYZJ!OV_JKdhPez1A#|qzmy*f6X!G3~^NEi@e( zj6UX%iYq6v%HQQJB@A*HHT3?nwzdPl#O=QM5)Ib@xiJrEc{J|L z5Oz&a1f~bFVS$tl$zl-g?7?D8w|ZjiiXL!`JaZislN!qwEJ9w$B?MThlL_#Ga?TE? z6K!8*&bstiHdJOaAm)UI;pJ9pWToZvPRFEzxrCtX+ig(vX=yQlL3*$lrqsF)B=wQ> znAT3lRH0G!mXM`xNd}a(;-Y{zD+9B2W)zkE>?X0!F`dtJR+VA&RdaKIF9ZrZ;E7|e zi(U>CvlwG=4w(q_k$)IXah(>mUj&~Z*k{zRie>63tN^rW=h(5%Y;aF=w9YG0I%`o>mqJlq$|+zSHiJ|UEGaFmpp6cq zwKDBxxDoY_uO=ct$}o#Zvn)zY_(u7Uxrv)Er2J4q`Rd;FY--=+59?9VX;H()4g<{? zS+1MHn1%|iQ!_%uwgAWj?F}qBmy?Z7HFj(eM)iW_3$TBr9;I^ygdpRG5l+?3^fTe+ z%5s?1F0NjBbM^d*TG5|4cAU0Fg*0g-KrBtm^!Kv97-MoE!_OCu`I0XbKd6JeXDzEG zdr_fh_eZq4od2{DgmZ zp88)b`^W#idY}*UiI}hu<`8m{g6a`%F({ZGDDjhVHJ_`(G$_^pGGN3;MRMMP8tkXx zmhg+p<}X>yw_{}qK_jm=t%Xbae#z{C0xrZ2FihW0j;qXuH*4s>_4V{p*yGiKMY z;iAUL$7X!41vLWysRIF+77O@nCSsjmhDAA4h~<)FnmWPkC{4Z~2rZ}s0w=eZTe?6s zb3K>vl`o%X{u|c6GyfOcy()>+|4r%RLf>idDg99B6Ajyyz9aRObxNNU`czYy(kFfZ zl0RURzMjKI5^)>m67e_b4_{-JK=-f6d_w9ULcdx0XQl5D5@U@AMhkpe1IFK^@iz;4 z(!XMp(%<^wdq1}Pz}H57hBXA8(mx#EhqH#}x1`?*zmtW}UTccKVY|m1{_H{Nm-^*H zN2OorZw)?|^hnX;cwXPkoZDg4ck{sztqpaQu@Ep=ffu}KS1J(^1b|k%FlSnFP_z(Qu!zK z>CY1*=&Sq^^jD^Ox`+gJz7i#AL#PMYYT7(^*y-eUNt26?HXLX!@~`GH;vg0SF~4l}%&w3>`1X|>{t{ZBD5 zWcISlkbi1bmzH?V++VmIue6WsgFPm3qU+4k1b6wuGOq5D7U&GXEEii|tDTE6EX1~V zUBwlvUkjHpHnDGdqL&o?vDu`eiET)Iv*V1gk3_?9ec$3kK+>dW`@T>~`)>a$%v6+~A2VZ^uteW`O1Z4j0UtZ70?(*XOJ4>Mr(!cSDt6lc_Jdcv=Z!Wt zCS&lu02|KvEY6a})fsxv&{uohfUsIo;yE8XUSU`*8J2SGt-NK=@E4foXZk1~KC|PU zK2rd?pEPT;pip4LWSG&yT|ylc^DPn3+#p3sS8^YDfWM+AsJ&`jf?qP zOWzByF>S1BV~uxpiVyfrW;7nd)52JF#dZt@-S``gzo}SOc?GbiSmTrUC?6ZUlDopM z4=sg*r%xp^TAsUPsB^q}NMFTOB|MNyA3UY_Q&G_%l{G$H*+OqU|6oJg+e7hL4v6$2 z|CT*}+MGU_e=Cpb@zIEzp1)`MmgTMHG!5yi1;CWPh6ORoXS|n(>+xsw@39VVuf5OlMW+w>*MC?K5lL`V z`d;lRJ`ip>H*8SNgQ@*MB}iei!;#{Rd|KyFUF=`CaHs^$#okM(S7ZDE=hBpR4bJ zzwlFU$nfHOc+XoVfBgrqNx#tN8hr86FZucWYU!8sKCYGiiIB%c7T%-gGi3T!oAvGR zQ+p)7;_t5}di7r^{ZqtW?|ejl7wK(ya;@|W{V<&7kbWoPcd`a;en#X^y>q=e{B|Wj z8UH#ppCa_f@L8pgiu?*cS1!X#e5Z`LEJ1_3L#r<#(#$ ziL7CRl9xzdy;IGXi1=3id9=hA{(9#RQNXeUE)8i%9||T&XuO{E4HkW zeks50L(SpuSNw|ksPJ<|^1I+~#THdQM1F+#RLJkDe5&#+>-Ud+^1G7PVd)q19V;JI z@r(HC|NCe1`=!X=OJPqEVGr?Dn*6TH`&%Y@_3t>PU&>>{3(_y^-y5nvi~85FTG^M# z_`08v_>$j;Rr*Ey*05u{{4UeKSMe|X&z_LqW%*fMEB(TLrD1im$zT7uqA%Ku@N>&d z;ltf3KV|uU$05JV@^W^v^sD@wD*Yn;;pbF-Nq&4Peo;QcPutD-dj^>N^$+JszbsFm zXG_0q-@a1iUF64#Noqb=rg!_b5?}JW=d{UR?|f7GW&M0ul^+pb!`F)bH7F0)uzKe~ z6MnxAVMCeRCy5fp<%nKKQjIeYW`RDw|hz?J(<7T$C>=~ z?~?l-$nWxe5q!Ci%QQZ$bS@TyzX|qDJ*}uBmD6j@I=76p@mCW_?ALq zmW5BB;A2egcKlkxwg4su+F^%F!a4z?@{2Gj$pZFes~$Erm%|#b^8hB|4G(!$!Zzyk zCfzDv*S@OL%UUn!9XSQ+mX?O!woxO_xUFg^#>Oc%4g9J#5KMlc)h<;cj|~c$a;9f`A>_!|}fR9}IXSCF}(b zTY_$L$xTB9?DX#h-ZO1@i!pfk%Pj(r#4TZsxh{eoUt(R$s((0#hi%Lydp^tY@BVZ( zV2y&_e>M}W^}G1RBVb>ygcErEMzh+pGX?B4=Y=DwpYWHpgvY(jH#Kud__QvU#;A_nYZ(#v=dyoDot zq(V7$*t=_@V2!!5483xY@Mz$~!bkG(YiS9eqI4^IR2EUzpi=0t5ggXI!D)bT*>{F_ zmFuuCiwLhJ{M8m6_MfC7g5J(f1B^R6!v{DoLM~r?Ch!il(nnsA!$<4_wsS4P1m5AV z1ni|w4c3^;ot@#YxZWz#_N9;T=mR|x=7BQ;_Ql%->kPlriZ_%GJmJH;@T=j8c)xgq zV8ElYr0}*zahJh9WCKkMjK$1H{-_Oa8Sj@B0`_vJ0mjpd zcnPHN#*q{8QocyoX`Wv4(<5ZieXVk8u*U0n8EOrmBAygpk#cIV#_N!Mu43}jLxTqv z{t{_-g~&;dggN1ilqtyr{E0S4@N#-+G+sBg^ATZ>z)Fqe@>wU|ioa~-)L~z&0WY)3 zPmkc`3*KI#F03RN5&)j}--F+XIQG+bsz;@Gt2nsq$xn~q`O8G*)M2O5;Og{5UFhB( z4cl)jy8`d@0K!9^CUT2m~Z$6wKh@?>fs!(YrJyw2W0WvFUYF`Qrf^_a~~)gezeCx|CCcg|~ei4SW7Ef^~+U zIY@Xye$TI!FsdgCcCUmP@?%FE!3c-dZ#v2y;cdqV)-q|lf!?;a2-X>XX(*wJICk*% zzBByf79F;Y!T|3{O1H$@)=99I@Z&9btFRjh)){Uygx&F!gw-1G9ucrdI}NZ01?;C+ z>#%Km1gxDvGLGjs&m7R~|GD7#IbL=>PrD-q(1G0O7-3%1JPRx1XFy?~6`y2-x0MI1%=`a@MrFP{N)Nut^nw4VN$> zgGtxdvZezY1njhnpm7{H*C# z$xHVd9d?`K<@6X0rX1lN9IrF{!!4}o_6^jCu<(dW+aBb}^vpHskg$ny6{3t&Se z-T{HPrjs?_c~rpmbrKAJ{1NH>Vlq5L&qF`~JIvd)&hYm-b=X;%wx4-eW4p}Xvm5bU z&}(e}wFtYTg0$;B&?G)JtpIL zZmNVqE|1B4+twyv-)q5J#alx#^3x;JRt{$bY@bY9Grc9=vz^g+I~oXv_P~&i9m@pl zqeoa%-dHIE#OvAzIDbSxvuz7J2>Y^!HHYryc#YS7C1Fm$mW#04NSCB`jIn0_0m<_O zf!EqfV2QU{!br9X*1}FIwT~L` z&c>qW{TG);!*Qgv>UcYZtilf(WUxb)@dpV_ zrI-34gngjX02?V`t997caS~Rf!*)0cMt*u^85#y>1Z=B=V2EQV;Ym63@=ShuWLRF0 z1Vn=+!jG`)*AiTYr59jpx9G6#Uklj!QUmNu0b5&ZfOQGj!$k&|tRD}L)?wQok$40W z2?}rXkh3#}e;#$WM=u-{v>r1idw!KRbO0Z}mx7DS0K#38y(Ml@^#0 zz!J;N5-mw+FPgAk$(suL(1O2CLzol?yX8(G;n+mxy583hCb*pr;AqcSP9OAKjhNs8 z)}U>IriMZEw1;RlgNiG>E74OlY(A?nQDaP}*MLMM0&^t=?$js{ef{yoQ;dgLQ5WbD z-ANJj#&MAmf43Qu1p>CG@b|Q&q{+x*wWL@Wxa>F8x0p4J8!&8`nc&sTij{Gqcb(1! zxhw-k+BsCC=UvPi15U+de?<9uPxP*hrq}-$5@w{=+`olVI-)cNH8Y7=J}v)U0Z13} zb$*7l ziY;Fy*?+PgqFi%%M-fF8aS;$$V=eo&EuP^!EJnd*?{_FH^Jb!vkxvi1(^zxK} zL>eB~4M@%u3DEKb#pyd9By>d3;~jvCYd4oBL-^RvH0(Kq$s9jno;K1dyTP;wyTJ^8 z@(woi)4p2siTpfBOd~|3U`Q4=8$};0&xY7-K5xjEQ9@_>!`w9x5HSzYEE^5y>4*I6 zTQT5ty2}u{<7E*JSH$K}9F>HFsB--|fo%3I{mdbLCJ_IIBd2g!^Wqw{yP2E4-O25o zy-V(Nmho*c*eK={r*bsAo0q21xjnG`#O_m~LstZ46hV|R`Sb_aV2w|+A*as2*#dL0 zn+#ydzB4PBgERcq89iA&oEJZMhPSv7=enDz@O+6p2%ZZx)>cqs!5VBlA4uD11H%s3 z4U3x!1rk%tYxn9^xX7f*jV-^_1OUD&W$0lEF zx-G%cQ{2!S_L$lHs3>fVqg#Jq47Z|eNey-7r-4V#AZkS{8Jo&MXp^=UKQQ0@rg8E8=i(Y~aHYRxB;cmy?w*uA`vj z5;isDvEUN{KOZ_Y*o#F6;$h#4;$IxVbj4ItN%AG&YF4@A_Yuq+J1h_?@vjm`j-mMABr4FMe1QP$vR#SG3Is#oz)qIuK(*6xMtECufs99@F)BRd&nbjzgGa#? zef2$I3_nO|Ov0FKqBI6Yo3}LaV(&7B72-)4!>jced&n1@0g&R?PW-`dcL%Zx_O*!H+H1*q#uV9mFKn65!CC!5jz{@R_n6pm(+ia^ z*$QNM$4?$V9tApnT25hTR)J2JH?4x;MZQkbH{ACdJIp_d@0*6wJ!Nw%(HXU8Jv*ytZW76mS+MAQq)N5nS)_=u7}@Lx|2i5>js0%AoR^u%+^<(Z6%4RK^c1O!*{ z#L@nLWVDiV9N%L@`Huq%2~itwq<@dR`r}T;_On6KuZ=f6-V=+uKXmA5dic9_Ah~)9 zf3k=0u5IS(^ZyHTc*|g;pT@P8!H2Bo$bq4U z|G5#Lu#J8h9tXliJX-klcJr4A`IS#}KCsa7I_RdEXlUVG2h8CuX+}SfKkc0S^GRtv zOw91n{EtKKTi7@!G)R_cr6Dj##G||jy|4uggoD%b|1qxZfY@v&xQQrS*a7M19J=jZ*j-aij?8~Tl`@TCdDJ%f`=BEz2Gki zfBo>6*oia3@MqvLaXvFV3!r{gm8GOuebv^K2?>GxGwnAPr0(-W9wSEPAsMdmDVD^b zWByRelL<41rKI=AH`{#j(vPhiI;m}bhb!LV2$X#%xubA*axl4K*zK3r)hZmxZClbfNXM88}Ep8eD#``l$r+xh93+NlCZ*%2BLSsvqz;$YHU!XLpcF zl~RrDN`Jq747sOO?c3|gY#Ul``EP5DmE~0(oBgLP71h@Q#UAL`eJanN?0_ydxs>u4 zS{OJ_>fSZPi?FT`QF9e%4vZs04tNqjrOAY$nH2;|Twp8_lpk@d$jJu(k_|}07n+N4 z-2ybE!&V{ud|rmjzXe?v{w$q{PoycP{4EwP|M>j8GwovnsVOOmVD`@AGt!2oSo#H1 zN!UfH<=`wnuB-j>j-Z3YonQ89!R~>D6~pEp$getlTiZVuj(nxGE?k8W+3)d2Id^3l(qn58!EJbHdDIDH0;i0#5_bdfGr~!( z{+0N(9m9_+kNipG$|qMpas>ubJ|vbPeYSi`UP0Y3jSTEv=kp%zc?z+0}N>MaikV60Ek}pK9rygiNy1c>SuMV_czv;hlyu zp+BA!uiZDxwmUH|-;XI$%N$$#UrHIfyeMFq)3qf40VI#^YCj=BT@U#!`NQ_Fk>K@y zOWv@3erwx5f!;V~M~~`38h!$w;c>kQ*uUWK*ZBL5{9tOQ3FfWre%zCJq%wexvQRz9u(cZvlX4MO?>G3GydVTw$xjw|!cRc0Z_bR&{ z^uFt$M7W-&qEXeg&EtD_9_#Sp*V<9(J@a^_=SZcOH}rcP9*((3Mtv=E&&oVb=2~KI zpIl2pZyEmTh_x0lgFn_O+Y-E~jEeC-O3Mfreq5nq`YjHLkr?XCWtZaztyUu7qSeyl zTWpSx+C%3j2wqEcTh0|9*Doe?gwP>e?AacY@D4v+Ykbx}%iMO`cWdO@6@d$g{Sc)L^#(*8bc4=)5H2 zQy^a(=}+#t%$@*%bsK?OAP;(DoHJj%#V?KL7p8dQd{z7R(O`07#jFFRQ1)-X{FM|( zd_nm^R@22!R=izvQTNFc|H3*7DyxpYRq=2C!Up-*6$H|(1&;jkG7|Q{uIH<*7*xJe zb*!xIRXqxwpV{AppE-Yjes29H{LDO0eo|)kDxaIa2|wRHPkvkrd*DZJ?;h1NkzB5K z@b@nM-b2sTEWbsyubI!IFbtUK$l8pX1S^K2sfRytH?*TUqv5h2fx_D~$1{w^POksR zA`JB>@y)U7`t)Tkxtu?i-j#x_an@UMmap>=UvR6b_jW5drXg8>94kObv<{cV?}fyEF?}Zq>D9>k9>`kF2sS{G&kg?xgj^reHH7k z;tEU;B@rDgJz#d9$`}?0Xdx6d{n=PO@?){OnDxUNCJH@Y*%D=jFG-rpgQ<+sVvImR z9pnX@FG?EgmjOQB6qc?jl52cOCZpRqv2@9=$fQF>2Wn*`P#nT6#{kVwH691_haeyA zNXXp60sL%eTCK&}DZY#2UbO4VGYsMVh5C23oTZij5+81Af?O`r;tLhydY)`mKg2R* zhLOJj@ki_SbWCKkmmhbEp>|1MN1k zf<)+7XzhZAuk)9SLn(7Y7YS_bz%KoeFuEPym>%Rj@FUGCE{XsoYw73cY(TCb7wTq+ z+pR!vU?_)*kp>umb*Ez8%Xp)$8&zbe>*1Bab^5tQD4qs+2D7t^kl%J2N0rHE$#$E` z06-6qlR*()_v7B0!Xmyts~G{9@)Px}Fj%b14-0l#05tKMcW{0Vqj~w zg2>S6bN)$Qyd6>Ux`_KIdqnFrP}x+-er$l&PN1PC{xv^8paXW50rUw~7iahM);9E6`8@D^lddzJl8q#wT%n{EtO`s4DvS zA7d4IqQ@f(Q|{`g#{V-g{$KctuL=|MuLhIL3(vIA?x>ji9Y;qgWOvKu-%0IAaU=y( zqx6Dcs;(G36ikI?&{2SQ(2-^jrb->b6_R7lM@dI`jMN5Kao2`mGI^g0CPRPtPIB9Q zoJ&JGCjH&hapV7BI&}RS^NlpMrJmUOHT3m$P@Y>n^BDB#bx@*Pyz{J{%C5BzZ+T@G zrcA54p7T_7Jy7MS#8B5$b+W2!lb3$m2m7!NVDXf5&!teqkF;IvS=9XzDdzODcKE6e z?`iur+_OMxeTT>Qk%Nc#6R7P=f908V{(0=)O8*fcdl3G&idoWYN&ogB%hno(+W_@# z9;DLS-99q2{AgDB(Zj@d=20KYV^Tt;C+p}D;e;O(A(dI(?L$17{G(UA#0OJgZ`RSn zB9u4tXe0@p=@>2#uOCHDmOj?79)mdtKKHOx=@u;*GT<)}e+l@rbb?vNpXmBi<@*!n zSQ=-y-i499wlY%=ZThMXZEfaf#RyKg4Ww$buht!P)z$pmJFmJc&Ur@}ZWAb{em2s`jQAU**|6zdnnT$C2m>u? zTjG#?jzK-qc+u`^06}rLAq<6zOSoPDtG)3PCS-W)?xg$r#@#UG+UurVHyL=mgCgSc zEK}%HsaK)f7IuWeBC<#dUByxmFFMz3apYzoNTxmB;$kl>QE<+^u!@xF5Y{3hi@2l* zsdk;8mMYqK+>xgZF;#z*qKzj4*_j!10wnSc7c-(q5e9ZNa-0aBH9UTMA~&Km+}lVR z2rllMo#POOl(!1a2oivtV_bicfwG~iU6L8fj}nZ@<>-q;9a_8?9|-nXif+3JAa3)7 zTnhQ!1>)YB#kD8~sClNa!Qw2^gCb$1CmCcAoQ7*u2r&u7Fy!5|oDv!YQ&>5l0o@`89Kk9Wc_-&GP^vO+g<=py0d`Qq z&VaTDGgUA2Ytn0D!Z4Qs{a^jQ;xUUm+$)W0Ian3E%{kZ#)=qVVD z2ZNBd5k_LB+5nhVuem)W<{@y)r@Eh19l%VDVAQd<$j}npnYxJXSW$?mBm9mVYI*Ni zTvsFSw23|vH-oq3+Ek6Kuc^Fw#vPRWI#;1^rs#7u{6YXaBv|QavM3=jG*=RNY;gvI zsuOVqQU;4W9+=8yYBVC`7jcd-$x0S+es;7R0%!Yg^@m8s&YYD&8UxWYEn8>!33hijhk$Q8X#I)ii5-Wn4EM3-jSqmm{7?S;vlId8LhsZ*Jk9E)nwc-(K#NM zj!vF(E&7HOiKn07i}n*)9Go7~LEuH)V``)Zxj;A5r=~^hYls-3Qc20UJrbF%j>qIzc!&G4eRX9=N_d@5=dnvB77 zHFffMY{E>I@hd6d7upj4#D5a9d_jL!PRNEjr9+WUZdHu<3WIczvSxp2yZY*@2`_;r zAf`|A*{R`yKTf94g7)6{*l=MQ`LT~c+}w%t(uJRXQSM;|Oz(KvxF8+Hm@$E5#A7QN zk98izCr1GmnJ#HwP3b25kS!-Sm++K5tdg60Yxb^L{^G1a4x=FqryDBH@}ZATaEpe{ z7U10?QyWLDBDrkzm4ppGWQ)v&K>lSFOBUDNSs~eCVU7j4D?8e;MMbxkAiuNy1tFwL z;UyIE1KLB%E<2tw4~>J$e@TYyk+Xy7MC08wzcgOHC(|4AIoyx;Wag9sTrOOZjr6Jf zR`gVPw3jcgSpZyRC#~#vl|18xoDJV|bA_F)w{RLtW_&O+58Z$kAGb?Kx)eRdx1yIo z_Pt{R{y10e48M!Yt0*t=xE6*6S7cvI-DU!==cS%b;1~PtsJT=Kt{5dK#*67KW^-eb z6OYY}2~Ip#_f&e}Eo}5{ZcJnv9&TR^Lh&I?yrJ__e8R5VUkG>t_@KcW$`^eKiLR31 zB7fNYcd#CV@;#OY;BZXfb{A-wTyLB8G}}+X)mHrR^*~^fGODjbs(o>65>`H%6Wi22 zCY|2D8qg86uk@~~^zn5d1ffS?-+oyD)Nkba_UnjFx9?#+*$e6Vb%&WhvL8xUacJqR z9&|aa5P8xtvli1nL{BdkF|}Y|vbXetECg4u(x+{m<0;e9n`Boh74P&mqu;~rnbM>^ zQ`#Y<*QxBIzV9$%_Ttv#vzal^9iNrrs}d$trucOE?lH?F3G}rzX@aUw?M1#Cf3ADY z{F&{q?gVjeU&ZaM;^6JU-b$zU{XWx6ZzJ+I6MaxM+iz*~`kn1Fy(DfV726(6qvyJ( z@AS@LUuGr}2$|;2U+C)IZW24O_h9{0UUywiUmq)vX zb~})bZjNEoC4b^DR?S2_mf6DZ3x-MvG0sajCSYHW-2bBbQ_#V14*d=G!%U+$_fL?1 zRO$fjKEeFIAV&sE{Bg>+>^`;rnc8>KHPPSF&|ceL5l`ptLz7H!@$GCb)lbLs{X2*! zlyeK=tA35EO7O>XM-k){L_eBULi37&{*1h;Ur_m(fcrzI zwZ8`aGxle>HM-!xC>P^^1U}#n7AJ^~ zrik_nflW1z8L#BzorlW_0gqo$y>!9CJ1`ET-D4qUr|~f1%l%Ud-#!Dg-hju^J|z(3 z`)aO5zGnwY5&+S6C!*aZNKMq+FoH>f6DII zx`S2fc3SK@1W;nbJNCT1hwQYlXQus@4(}|yH(-AJx0PMoe8l!JH*rh6(cu@p_yZNv zDDN^4XBu|a-Megezht?zQu?jk4oZRR9zme}X7B9VK=r|ng==WsW83*+KE2a+ZqB3k z;P!trQ(|u$DDnLcmbCV&4liizyhkw6ezmZTMj_yl;ys0!U=OP@A;H!u(sue0qzTeP zI(VGVzSMoYA=d90ViY_TdU;HP+ea%aY!MSr?l>L`>=E@8PjrA}f3N%ikqppm!n-4l zwUJMi$frC*KB49?>#T{aF?cr1gZy+{Z4@Bmw;u`O3!JLJ<;dFE(#(Yge6#CIl}hu-@gPg{}t| zb+=T0baSXy*&zYU4I`U_=eWXV%T$8yy*BI+S zWhuAB<7A3IJy3afwY6-Y|F${2Tx<-WP)y02d%LKZ&vz6~bUvAf#XP^mpGQLLa1`)D z_Jp6rYm=}%k<+|z*q-p`@oxg1H;Z~9FmPqq|8dBi|E^ye(LC1OLm{_*zoc@&9bJz= zuuJnCmbTB}w;#ceWiWoy{}Vs9=jr22_2Hu1$y-YwHj#EmT?ae@yxs(+Px6mmTEW%V z6MrmJQN^9>HAn>FaJ_-Qf0j@i-d6l+dWMHAs$EZKQiBC6Wb9ngtdO%{g&g1EhdNECCuLY>;MsM~V{i^HfnS#NsIJo^$`U4xa` zGwnB3JMeoc%>B&{3W2sA=KuiyYMs{P!&C z`Ur(TeaT_1xJ0G1C%{-nH_c2&XfW(0?F-q!0Ygo zSKGQC$V7^})?)?zLjuHgJ=Bp&?&|oib>7UA1WUkLx;OI#l20Ix)(^uWFW~_(scQoe zW%&O51K)F9Jpdm77DNWB5GNrI`Qe1aQ+*MI2G$AMjyT2XK^f6E8^sVpCgy+aeBb2n z(JUGedY!*`pr6mO*JqtwzSgoouL48719{e00@9whU>j<+Pea_~wxTLk1hs)06NlfE~iUHv*{Ixz-#w8J~miP6z}4o{qIqc_ghKEm^< z#Va-hmitfJKebazY_uitQ_E@W3B;Zbv8!X_(IXMOiTy_;|DPg^5nZl-4mX2w9iS@zTn&iE?Keg1@5hK8R^QsQdZabxu*5%)7mVXa=9lBPp!;4=?qq6HcFYgBAm^ji3iz=hq z@`UOd zQG3VXz1Y3j%xQv8r}x$Q&}*JPJ2t(j2>t>1hXf1~(CUNh z&k^Mf{c&H`|E@8w*Xi{Bbb<6}C)K|lRH~m&uj|6-We~l8@+o@Sc`r$*|Hj947@ZSF z5&Y5WtM_?sGK*fG8uO$}yDPf%wuDeMdUlK-jL$jfVIEMUXQrmpTip37!)O$P=C9e} zty2w@HQos3Ew?^naagU-dA!3g0KoA@nOF=|2`hUzg7>`y!w7mcO18v0YmHxQnfi z%@@SkL%B zyq;m%bzb@O|JHiO-I&3$;@>zFY_v1RdDouGGiF#Zm(iZ5ulpPmD;m($K2|GpbRJQa zTwYPjV%7oZCVnIo+Xr7_e=se~g(8-LcISynd|Kp*r1Qzgf=GJ@Ho32Q;g|e7=8)u@ z$8(=rO~G{Q+77W^B+p1PE(%rYJlUexj6Okv@+BWvnird37-)msF#qZLz%l{o2z7nwRpgwe+Kfiz&dNjs_iyj~5+0<~0nxkI(>z?CV->3NA|0eN8&2R4f zFG}fya)MKDPqqGT5OlwD_jgskGmp_EZ6fbYI}9D)22x=MZ=huxIlfwm35;_88LSkG zzE#tYwfOpB{lhr^iJm`^@!im6h%ePf1G(7oK_RCI^F@pp{?MbvhZFbu7@wG}5$WqK zKAdjUQ+(IhgqLL7&RY4UZV|FKQsZ5Nm{G-AET7DtD=9dVK5S+b_)N?X^Dg z@v|7;whzNPfHsC6zDFP9qLRRiIlG%Ci_w*q-t_X`(o6GwSYtWIEZ@_HSw2k3sad|K zMV_9bMC{rsc?Gbfg!}>;Htr8trLJI(@6!v6k5*1x zk5_X08iy%H*W=MKYVu^TW;%EIQS+yb-pRZKL9!25mBHzHGHM7<%5FkL)!=1Fm**eP zKYi#U_WGzP-RHC32G4p8xY z=O3TG9%kwfAL>*8bmH$8--dI<$1_p?xrp0U;skNrn=o^FQ7BoQ%MXh&u_;U2KQ0aJ z2FU%BWGqJ}YZrxz0@!Z>I2hz+jLBn!eH&f>P~scIE>iTQ{rdoI-Cw)p;k!85 z0Dhjl0blV`h!YBcKalU&r%e|keY$+bdE6KABXsC=1HLn~NIx$DI}mejxiwjQFMz!H z3G)Mawq@WB3EGioJa2+_EC!3U^DsnkI`}Vsu`GI7diqYoYQY{AwSfiQdd$G15clU1$PM zmgik4z`z39HYj~4fCF@S@SRNbrI?I-OY@(mb#lPljgM$|J5=ZRpyE$FFqs=Zkpe?}13iICxQhT;4S&K}EN zuzcbC1!Dg+9Ry_D_zT4b=bbDmt9LG~Edvs5h=!STW-yT9!@f1#p<<*b_J@R)mCdhm zE?&N1$sN^;SI{17FRrJcU4{6L16Ob)ccfaPs}h4@f9LWjy*ENHd7Xx+&`MgobD&4T z67e2_q_q!|OW@j4xVMrh-scE#4FspwY1V&gu^g8ot$N|0z>;LoZjT}ZWr0@M&DxP# zON3q9-LPxB$DjvdKI=U6z<{m?{#Mfi|ETGKmq8B{f`Hm}M2ajz6a4U;n&8fJX@Y+= zX@b9&X*8wvCk9Or_9NVK5L}T|44NQLap+AK{G+A|UKJy_q!%lRC=JforQs)n{l1rm zpY&E5-lWo?kv+SmFQwrphLvTMhkH;S4D$m0Fu!^p<-ss7@QzjjcniA zh5NOVAlrrYhIRqtH(LS-mQ(lUJ@~Ezz zmvP6HT|3h{yaKeDzpw1VbP|GcQ-B|81?iJm1xag(Da991kW{Or+bDlxDoDaSIHCz% z+oyt5<<)tLQINbxKk2<7#Y$e!1!?X17NoVk6{N$I1dVLp3esAwAffN22jyu!+7&~2 z>L2_^c@kYS?+*V_p0rU-i~&ne<;l=bSsv+Ac_Itpf6QNF=%Y0&s`;a8E~n>vZeH#? z-{$3ieEe#8^t{T!KgO?A7S1_D|KB}+wLErS<>4RWSJ@s2B?@IjAHkeMuhj;cebsCK zC&sVa`em?1V_W$Eq;6Ioe@Ff#yOpgWW6ReFd!c0aKXJ50a}KgQes#MkNcAeQSftq- z4)~SX{#V&u^H7@2kyqGNK7X$m(LN7@VDGaY-}gLT-_awuf5c_6nr$dF`bqbk2mOtb z{>EPE>+2WTe{VA+vDftrX$La6JUG)h{yX0&E^BbEz}Z($4u)SK0ST^bz$k_b~Kis z`YC~bAv+X4f3L-;)BnqbuP+(amR{D^mUtXG{V)G6^!N5i|3CjO^tbm&|IFWo{=NwM zT1NEXn2bup?@e>VX8S_wk8Ve0f06FwN?)#7BgL|)(()@k#~dHoUb>z5yFzkm#anN8 zppUOx^w*DCEU@45k_Q{hTdaGld>>&~=12QHc_%aTVE=vcgt__A?c3Ay&FxQLCXk2^`3hhexzw7fu<0a-SO>)VDIPt(yZREJ*dwQ++rXncA>uk=j_8Dl#bn%x z_{9332jwD}*=c{)Fszd^)~OAKdX*~_CB80)U24_?)7ysx+UW+Ze(x{p_U8xaCK%UN zLyN4(H}LNhUs~X4itc1(tk{hA7XI}D>VG25oWB!cV>*1>d9(rA{y+C9a7m(-Pp@*l zD^Zs#R&o*6^|QIV=_Vbl+-lYJ)dH=uVsBqnA*yRI`6KMv177-FB$@a9K?n62+#LvF zJJE;aHFqQWI=1*`$kW%a+P*YmVLLj52iicsi$`(^7ogGH0jxT5TifRa5iO%&N9T9=|17^R z#^SfFM}9Rs+@y$hHTF1(hDV9CH8ERkO{_?<;hxXvy@|8S%PUS>VCGlhKOMIV`vhBj zr{f;YQ#Y#K0cAOFXf$?^H-i19g1dD%=#fKLCGzSDPYlJqy72mRvn zpx=}JaxVVop9lS(^p|M*+IYxqKmYch`Zeem`!e@aW#8=2%O@rGrx8WcoZ%5ZJ$?-S zz=HPl+D^g#%N+lvSn=!hF`oNo^q)UBeT)^q8U2m1=xgOSVM5>YzsLGvsv2C>8vS&v zOVN;5J?E-_J=TwC`ifjn@9@^4_@s@qIS1j*uMw;>{DV>oCSdn}EMenx*kO|)dJRZkbnaA+{XkXKRp6=KhZ|m)ntyOU@Za`rnicN8Vlfk&!fZkl?vEu z0!h40T>|za9oBd`@u0=a9gX|jqF~`az7Y-knDfVpsgL1(#H*QJc%M&$HIE<8KZfhc z>|5Y9ZTOvlZKAwEI>LC#kKy{`%E_9a{0SwLh4($7!NSuviLm=PFD>DwRzeYYn?7X8 zYytUMb55=dy9++#WlIZzIjnI)Ex}sDTgo+9c$?0%!V7P@oA3yS9zpN@<8XrKmQvPy z+s`?y>2>-{Fb`m_3cP(Mz{?%MaMTTvK4|pp&@s{+S-$=05@C(Nbuss9=Jtxxf zp$NOp0ea{v@iciplW|ZO;5Drzuz;NO`PMkGl<<&_7Qke_ZK?siDju-u#o03K8iBV$=eco08^Kz`OV<*vz}r6#VX3Yo z9eYF`HBNNE2cEyj!IEAx!I0;Mu-&{(AV;-Xacb?D`RhHBJ~uVOzqD2MI3m zI1KcBI_xZ$75V8Ac$P)dgNDnubrtXRUs4N8`ZKC|I~Y zISSTv89)(X!~1zU=mTrMenT9+!&^J?E8=LH^PzxkCjm>?9u17YYo@Zo5`@xYIqv#7jF@)GrX)6n-*lezc>zAEd?C>O?pp+U3nZnqPLd7 z0=91e!4TGiHtdvuRdpfkGQwd^zT*P+i!Q>0oJSK_!1j0uMt*u^*b{J496lX(ME2dw zoUG~bW`TF)Uc^yHI544KE?_Hp+tdm?-xv*MJwo1utvL1#CNSOE?TaoR@G_CppnJT}^Ns z{e-vH;#cEYgnf2R6s+;uR>V0FYYvMxEPPnTQPB$6 zmxA7YYOloLrFrQX$=}Z?Y)g3l7Q9uyksGkGgF0*<4DcDngS>p?DH)c_1$eCl7U`(k z1w7H=H9d2$gmHQ(8&1L#VV~mlgZ%Ue*kQ^`Dj$er&pR@X68MN0UXCPeGQnEIcMuI3 zwrVZHt|C8c{OV(l*EqoeAB81ZNW7I}2!^l*Ial3-uq}kcnt!-m#=+|c!j2}efc>Hq zP73SOVO7-#dl&gx^UI?DZJg+YkK!e$ikF-emfjM!c@o0j%>k?2)gq3$pTUo?r3Ts0 zJx;LJ@NI2`EAXnQ-S{5)*{Xce*M{GJ3qA_lN??Jvf2f2R`%e-wE4a=fNFUkKP-UamUBrMmnYCy>mEKaMK# zwjk^eIH37^H4^riz?)@|K^2WHR&%_jH4`{qb8WfAYbCe{`4c4{*Guq&o!ceFxzoj#h%pcvT!e9d`UU+-SpY?_{fjr7~F=$+_-pXe27VVmca z609{GY%{>fN&L02rnz79u#Nku%~?+$*s9y4t}*;Le3V{8**MO5Mt+nNs*vAy&NKPx z5xi`t#vvllD?1U#Lma93ht)D{De|1gkNgpNz8&dxe`1CmCoiRqgGJcmPJ)3K18gpD z$B{NCYuc;oAa5rDL;ct*+onpYs~dR0rk5)Oz2Bq?dij(_nYQ1M6Y&-tM_s5DY5O(t zOR!GBM7<0jcYxl*gv?g`X@sD6awFljhV!o`uz>xVmluRZUQUyJ*{^?2c!0G4_L+#| zeX4_xP&gLOeMf|y^ETljFDnQv@G4gV?@{uzaAvW9&3OYp!gCT>;!*i~jQlM8?LQ0H z`{Uq4{@!?yzyfx>MZoe5u=`0K0sQfYXR1CwJ4B{Te(iPs*LaRfzxVIN`q({WLc@lf#skIesO{L}hH6n&Ks zJ-xN_KS!cXu^O;Oia8Sr@suO^BNrXAx2N%SNphl0kNR%cuHj_x4u3o@c}SIRE7t9N zw%zuH4$Ca7Wibn1RPpAnM8DN)!GRJ!>&&*3Dkd%dQP-gfQ&7A|E;e|Whn72ECusY~ zL8XXzinurE5W~$(o`PqX7UJ}utoSP14uE~b;pM=q|QGLyJq9vjrQ&q$NI zwfZ*_oyrB*KibQl2{FhcXom-$M9lF+Ve&y11jER_gnY`Jz;FnyX8$)bS7d*DrsPoy zBZc~8?IHQ5oDU*(ra%UT5kDoD~|H^R~?)6r!5uL*CwH02Re42 z^81qYc2%WFlfQc;;#N?+du<;yJBhy7b%5`F(x#)}Bc2U1DlPr4o#ygyM|!?Mrg z<9+iUzqRdiNy~7*nmb#AamNU^(NDQM!hI;hxEC1O`K?a+T2nlNKuWN^)IDwR# zPt+=!{PK7l$KrF)rSP~k{>aIBtgTBwuM*Z#3Rk?-r($QMs?dh?e`IDrm!Ftp(TGsk zez!`m7T$}??mwctITRH={13FC+~I}}K#KUjBJSUr3d&9Hh`Kf+ZXuzPxvvOroKk>Z!Kug@MpmvJ$im2rj#7;_xLs9g#{wE#! zG&Sk!>7o753@cTO&_bQDSDGUmb5;>L_gjyD`8SCl$FF}RY@;JmsO67+qnVM|{VUAs zo`Z$m6Ue5iT^=v88Rxw7Yet^HulJ1VOX;{-+(?;*BJ7e=_9v}1m`7Ns7DR;)?PfzbW6C3Af zFADhS6N3)-Lhn0$r5EsV{zARbo7LC!ep}F+6_cKssc7HT9OOhk1jP8?x{V+$vJEc9 zhXPWyQXCdv`9W6G#ZFedU2{?Q$rJy=I((H?$KI;=w|`-}6|64b{J!#k!%S)$`~6VQ zbmBlhI)DD2_{+O6{yZuQ@$R|5m^7NU5{|&=H3o+|e-nG+@7nX>Pdo42J;Klpg2i6j zGkzb#GgBh&Com^6+IK4(2;gdH)ad`TZW5qTNbD%o-%-e$QJA|Km4H4Q^Z%nDi&4-= zM%nR)2KVCE@kYlrN(BZThOkuk`Gx|7WeCdI#R~jeQm?bEqlqkhctQjIH<3)Z5#4;56YW!TL%Jv5J)9a_wVn(Z({sy zc^9{xDxc`-dV(%w=C|La=j|Q{0(ql7;KDYyw=^4tAof2@M!e8>si>-_*ZTI|gud*5 zF>QZ&wKAC8-JSuq)z%ljA%^sI!1}!(;9d;T3Bt8_g_=H!BltCZaVwS~6n51Z1FB^7 z@*awV*>b!E;&?LW{KYj(mo2HAzictB#FUiX>AYj{5@(68I5@*uvv?VNbv5NUmMk>( z5bJ2oj6^qL+Hh(h_9j3k&=aft@E;PkBE$Cdf*ja{{Y8I?q zxOCZqnq|&qWq0!UhN^HtGDQYHFUH-^(~4s!VkjMSCsP+0?$!l0bqky$oii6KS-jGj zwRj2AP_}I0;u_E#X18VGl(u4=ttO6}D=wa1R3c8z8)~f<>@Cjn&BCdJxMDfPyvvp? zSX7JrS?pX=TU|EaS?EU;3zt=(a9m=yd2vZ|K~YIYNid_hDB#V?z-KNZ!v|adjVq~f z4kDevhy(F(O{a4qc&u@vkS(}lVac z$jJ7VOfNth4K(Lb;dL%ATe7fhUiAXV;1W8hFoR!k&QH%X%5In>nZvWuTyic^@$rvz zRwFVrL!59p)D+GnPDbS>r`R8y9->4G$;u?Kixo|}51UTk)G$yMB~AIs$R-<>Rg4_U zLPZRf1dDOix*^~t8Vy7K;nH;Q>R0)%-~T!4w7LHqwO_-5L(RXB+TZRRREo~JOLW#z z^Y47-ebj!Mc^|dkF!SCiscH8^jeJ%N10fGx8H*C%*coNZYzpv@gXuG9(8-yhK^gR4$rqnjykmQ??{ZNiR!uM(`git za@!&6&LO0^+~|>hyBKM57}vH4M|}fB`b34Mzq=#WZ(@&U!MmKl=l3cPIw&S_@J{U8 z#J!e2cXRCYne{p1*}eFX6?X(uV!T{cA%I1F!Ssko5dY2vK;P9+TTfrHd47WKVbpX# zE#D&2H)5m^8{U0fn9$?%T}XWHLwqs}Q|0k}lcydZ=1Vb*)}Fql&n44`sqwzWr_n!$ zWBHodJ$}98S0(&gvil>J>^>>nqhH|fx;d}1H!icgEKfo<35of_UE#A|%&=Ae}@Jd5URF!&f-baSib zUvx9sV(8EEHMzRS;QH>_F3ndrM|W#LIPUlrukjiv**$|*ucDz;&rh=Z802`ygplmU zS|pxis>68h_!Z`!@YK!O%HP~Qw}LHSR-^eN9o4J8V9V=ZTQufi}Odz0P2F(K8>*=6$g{p@_PH*2wdU^4QN2pc%_omJp`k8{ zD5J@PL>pFDI6=c9N3vVbbJK?yp1QfP-E_C{FW>DhLH=V7p_ga*8a=+cUx++R9yHAq zsa0DH~^TfS_#$*(-i zm%Xi=QSan2KQ_VYu6oVnSDrh5CDK6tB!_(PWuyTT1WX_eoD}nfQHH)NZ#bllNFKXD|? z6Ii^L^4l5qME!s~Fq5{iOd z4BlSq+fDnE2+e^A9u@!+xU+8>G2!=CGCr9$6}UIHZw%x{?8V{EjE>d^4=f(09Am%I zhaOF6$iAeSUtbH*wz4B-9pZ7gf1%O(Hq&=DWSu^t_{0~q+onhM5A`R81&vm%pkBQn)U8o$B>NU;bu89eY z_Bh<-)MZbY6d+#o6Ucin+Kave_k#}iOywA3X?};tl$~QtO!WW9JPx-RiyZF5{ifk? zub_X8wKrj0_X{&;>MxSR{x0lDJQ)-0n7T0RufJqahdVt?i$OI znUe9-t-FLJJ-X`2rBbK&q1;&4ai z9nFDNA#%TNpt^6K8>%OvUt~N8+&eiYZlEmEt{sUlgu@(({65P4tFXTzJ5t9XVxVmB zJ~hPWa4*(qeY^DYi^k(bhceuabhjuN5z@5gP9qtP;VjOPzNq4HIIov-2|2K^{%!=*% z9f2Qnq$h$us?8bq>KWKBYkinZ*Q1K5XaPt z82=yRaZLG`e19_>wIR8$9ft!!8fLv7?Hv#gERM9PXr|^3cBdIl1pms%)J5V^6)5f7 zMnkND#i4q9JVd%;*D-ZXm^Y9YtDD39LmlRrx<1U)AL4Mc|Awc&J+|&bybkx9Oa)s-X0EcxVyvnU`Ty?q#X#K!<{!6yAE@>?+x=f+&{Bv zGr}}M9PYox&c?>j4E+aTnqw^Qucdw8eZmYN4)?F4y@TR`yo&>dJKSb`8;~I?pg9nc z<49zE?Z$u(b+`{jaWO}4i13918miMY+8pTL9s*^t^C3rKY=0S&<8V(mayE?6uEYJJ zcI(?C?@%FLaRcTzOwptm+>v0~UkvdoJP!BWpUUl+x{P_)Q0nZT!@Pmg*m4gncIdD` zX)QYU-^Rm{ZN%aJhu);HzhPEvd4>b}LF(HhypAb<;62IIRd3dYS*8yR(H&zW^R0#y zqrW5Zxlpinn*(MZ(vaN$`0a4-i{TG>9Amz!(ZJ$^AyU7t!+ow_`ar}$-Yev9Nx#7k z_x?WghU};M&_V=NQry=EG#+1pF$1^(2;r40w)BZW!S(JZdd=HeaRe={CrfjzM z8#Pef_r3WmAD<`Py}NzjR#8mMrlal zx3}(PF#*jD=ulc1L+kBn4jj`Yhr2Eu)Yz34#sj6>RA6zW4+#g@h~tjG?oArh-;iQ# zr@pPPtu%Jk_K6!<9GMq32Zr?t?~mYcGvB+{*I!T{n#29|KD5CI4$pO*ao<evX8F^l7VN(rVt&cb*l)V0#>i zreCOUH)BOT!(sBh!D>s0fO>2Ple#}UNgj(v}GxaY@&H>5=791ZrjFh}BVnPa{e!{g_%GCWj^g)`Lc1fr`JD+yO?~OrHz`t$KjrZe|eaz zA!P^sJo7rf^9B}A4byug_3b|1VYX3LO}&G{e#g`*$}=)|T=xspR|-QQ^zGB#5#|pe zfyF%`RJ#o+1NYY<#trY9@^U1;79wdkkasY~?{Kd)^ingHIoz?|Qev2+JoRmg_7kaJ z339lL_;we?bPec+Pj=|o_3f`9H#QFr_Y2TI>?7Ub{ufOPa3@Lh)4YMXN7VQ2=&-@? zz`drN9qx~?56+ND{Le6Z^Om(?{7MnWjm=les`&!drmqr@Bk}JIEq8==L;oBTib80N z>u~Rh@rOJsUyj(E&>E7lS$97Zj!=Yaa96%;>ae$n=0Jq*a7TXI;7EKmhBZ(c$-e|R z691Wc>_y{llXbr^?J`hGU*#@{kF%PomuD zgBC^RIL#ZL3Pp)=1J#D7zCDuXK=qa|kHh_K-cSC55 zyYgkze>ZRFjG8bAzop-N#MMq&m@_ThcHA%y=U$Xw($ohfW+@_YQzq(H!Ae5uj zX?0jaGJy#P#(7oT3Z-0lWPVr-tkFMJQ0BF1w^Em(DJ5^|Ws@`t8)DQ7^?|ymmMb-X zo*{qh;BN)F^ceqsDVCMLkADxTr-}SD*!Xe$3qAJR#V^Gld85HYPVA$OBxvUhrJ@RO zo2pd`ozzTyG>%y|5k9q|LG}DlWBhX}HAhJwD1G?LkE!2<0#FR}dP?An1SmC6eOblM zIS9UiZ1wXjTC4W_=$q=Lzlf6ZC30;Z-R4@QV$D-EL0o!@|JriMCTTO?sh)n$9K?F7QvYd( zd{5lp;`<2qfc|lfw@aC`f?l$Dl-j8NKA@MszWAC{ul@;6DDYGW(eAg6&m+$5YO*T( zogr|bPzZ@~N9iW;^B<`ZBh)R>|1>J>&vuv=ePc1iIw=+PzEbbuvD1j~E=74MJ9$vv zexy2-TCD%yzE#&KcgEXCCu*wP0Hd3Jx^7iMJFbrDApbYj(|-o0D@du1yS}Q)N>{x` z|D9s7htg*>L0iAgrAGau#_m)qvTP_NbvVROf^E_uv6!cYbTcM2#tzd~X>e*$o~SZD zsnpx&)Ndi~mymBsMe}?IF#W|M+Czzb$duTrJdMT)|DPMeRz8xbR0_UDYPKsxRL>dg zg)l+d*94>9N{CMO-72!i@yWl|JkRU@f2At4Yb4sJnoOJI*(?8~`{W@H^86F9zu>sW z?SC_AxA``Jer>dT}tWuZXLk7dy4nY<%JWG)4MXnO>c->p}G>zmlB4bf4k+7vt#vY1{|J zqopJ$`?zGGWc-Qz*H2VMs>3&isN&X95$X%$u>&5{X?{b{Ir2|;hEtXLq4wNt>o8$Ps zt91|58DnnK)UFfsCc+ecW`;4H@nqdd|3edvhSGSB?Tq4zpfn7gKh@(=CYY4!52x|Z zvtQlxGOm6oS9w+gXKq(-s$-X^?+-L>30PaEvtLf&GtiL;P>~2i z@xz4GqklT8=>DG^nmgxRew_EURf`X=ey-?#Zd*E1=BORUD;^jqIC#os8KP%?Jt z(Rtg-CX_kH4m(;F52bAU*x_XpxCVR~?QY8IOS|fazIM;kpRB$A^s=WvY1G7uOMhGD z(0+Ek5&UJx)1NHUA?1XO(;*wn#!1Myr$1RPx#Yg>Lds>S%B5UBrxIN1hDTz@w!Y<2 zbpPm~L+2E~yRRBehOCbt{nsOO@zl?5%yv?eo+8+wMU;9m9)cHL@DeuVRZj9jk9%ne_!7u(z>xl{ppO4{gjiQ3O*G2n7zxEg; z{#T>i;Z~Vd1FN{u)(soDtb^83MXpr;^qWK4i-&cRrugZAyUrK&;78!5oSmf#3 zzpftrwd?KiX5Yfzqs_i0W~`~91zx(1j&-zi1RZPdlOxLFqlc4tJ)C@_EMA6_vUqzC zasMyfyWZ3FchX7jkUrCWkv>y~kgg}}5v1#{w3hbxAo)1|ndjp_|3AsctDkv3{`ng7 z@lSo~W5mo)uaB*tc|QL7+VU}CR-b&hAN}-vRD9<7sJym(OsVLTk16E?<-@d+zW--1 zuewgpH`~>)&l4V=Z_?w+(_j0~`CO>|r_=sxXqR8R?YYs;;q&^m^LdeG{x|bz<@4;e zJ$k;a`*YHm%`%iuE~1ZhE&6Qw?Dc8B7JW8er9Q()eQNnMU5h?}tJH@Hz07p)=^D7c z>aInfl~<|H6_n44Ytg6nv)8BQTJ%}=S?Qx2S+9Rzk^7AFe0P`**%UWPZHgNSgqIvx zUtldp&mj3VyBd0%bHSQ3`DUe*Bhyxrz0oT4@rjsvELc{a#Gmwq=GroQ^jWwq&% zWbUka8+QRbLo{DN-n;ethb`xO8!^L$l! zMwdo-ws21VmNr1ILTSE@vKTZ`78Fc>*A_Uzoh=7|^InWp#-P$kzEa91)2sTvHHf`@xo3=;7h1e=-O`I6v z`SwAz>DyhJKlE>t@Z9h+Ub}n_IMt>Dl+S@keUVFePKJ3}FK4UP%iNZ7IZ}r0YSW6Q zx@DXQ;;P_mjAai@b)`*r71k|p3M^}Sz?FLU-RV%$XYiLgEqTq(q*RNjQM7->((&9z_^5W9U%ijps-j#`vg!ucu< zjjQYHnq2Dw8yW+0mQ0gt{klNYiaOUy=q@9>YJFYP`t19cai+-H?2>gWmet$R)06Ka zf%T0m)-{oMpOn5deN;u1uu!%Nn^x;=O>@m#_JAwRn>u}}D>ZXQ>hu|2Z}KS7&Ln=NP0MH~#0T*xsk1?6|#F)AS^KfkhUK~A}g zV_GUrU}ae{N6l20<&~AV5-N%cbX@KBAECIkuq?zlV{XCXoIE*8roxqwkjuZ+v`iOp zhdfcql@?SkEGwUjG926kTc33NRh4MruW(f?uHcZF;?m+u)U0svPolVTN{TBgqb2s@ zOZb!&h+6K?nLo>9oILB&p;SmJr=%hrtZPKdrnHO$SPGKM3o43oNIzkIRaqr!RLqrp z8Bt;0%8CM7ML|i8ehf0r7oMl^@_?itfEXH1(m%9eO_YUE3^_%tO*A~l0fcTgo#r_J!D zjneY2Oa;?D%c)1<^ebGPM^(XrLp1Ypj5EKug7cad7jpJhURgnTo-|mjj4Ch5DKBu( zaE;0*NDh?pm6YY=yTU#+@E4a9K*%feFLovPT?zAY<`xuIm6TBEWmT1~O6(FkZP!IN zQy`61TPmkI5qVxtX})XnirUE}R$LBaN*+ffmAk})(MB^heibe`Z%Q}|@;LWsacR!H z0!bj2v3@<$3X97*7Ax6B`>d3ll!?>?Iduv(BuEEH)WYIL^9m|+!1`!DisVLxhTs1` zxi@ouSVdJ{QIbAe%N+J4HPatm3i;+?*O^ne%9BC|nF;$BE7z@aH7r~EfNNRPeSro} zZd>o-Xt1`Nn|gEWGt-pnOBd;UVj6ZG6NiFwI&r@_woQvy<2d4qquBZ!s&><`>%^Fn z=!7|lizC7eySllTl%#nD6%`zh1;0P1vPcq(7O#ry>+9}YR_|KBVcClNB@=S$92H$y zzm6l}*52o8T(_Fz=+-sYHLa{)_toS=tiMvu>C(rtC6z5GD2KE#Ny?{qL2-o~nwGmb zX-NSCrj*aPb&VTVH>_@{ODdROA}uhtxU!ok_r|TP#bqTF4;XaXS6NkgUV&&P=hSJ%L{4Q+-rR7>*>XblxsYBasmxzcYSXa``=mmt z=}5p$p>qL^w4CzUNr29GZVqKOb=RXL7Ig^Bexz=FpC;Ki}}rgRS3B?zMie-#x-2 zbo`Tp#*e&5>R9^yCN}=dgT@I4VBa6M$Hv$1yJ3=)pBxf5NdD!ccGS~v{K4{XZ!!pp z=r{f#`L}<+8;Wk;*TX(r|3UIUaZ;FBBYI6BOp^F=Nx;DQpU65w^wV$r!O~wE9ot^F z2$LlJ(WQggzx$yuvqtpVNSGw?-CyY^eq_D%N7u4Gwf`#Dr$#UT)b+%!YtiTFtJLQT z))W8XTJ+g_mHOQ9>Zg{^Q`e%;4?cT+c3q1;yFYt<{_aWoT*3E@KfM-x{_L~T zC)^_#ByU-Lz0A~W>y`)ZyN}hmudb4{sMTv-8&=hYsZ(9d=VO>z6gxX<3a;>trF8yc+@QL+RITtXttCbOq&!8m9DDH<7&+tLl0s zQ?3ipR9Oq>YA3C0T74g?BeHH|NZ`uVO%!WgeVx20>Vw7C^Ww37T^nsIyer60)!j}?3)ah{g@nw}ZqTZPB7&8aVsG$$vI`QXyy zM~ff%ZB#)xW4cELSE?;QvE0Jj`ywo zUmjr==+koJ!YP1 z>-$!VbHVle_~WPM-pm=R;=>nSk(;-+&yjMpihaMle{}rkO6I=%qr`bAGU?bFw2%^; z_*}{TuT^(l81k&Ic*wioEq>;wtGkZKJ)6(WiznRiKmDnyHTLOmZVBYd5&HaQa?KMSX#XY+Lj+=vzA*qRtMN5)7X^?U`k)@l(##7Lyx2my0r|9o2W2 zf)C%9a8wSNp1xVnrsuvm)OPhfX2NXWUuL2X-KWpwo}LimW_J|lZi|5NQdf`lTc%+> z-QT_CumqT<~yNmK~7JK~ueZA=b2cYFEB7`oI`@9m40F+h}lE@#u_ zD%I^mX7@n%*ZlNq?yrgD|ELI#JpG?%E%&kAZB95}5jpfb5{r75$Ax}B8A!jwSEpY{ z-m?SAJ9KsOhO&c(_RjfE~Rqk=|j***A9^1ki2KERNmY!sqx8o_A5_vJJ=Jc zuYFgV-W+X|6PNUxUPRsxuT-8-%ahe5)52oZjmX<`rSh`%HMcjg+BB%V?_a6BnL#Pv z8(4knSDvWrqW+&8$ezA?b@mjJw{swQ-?5h($dpdlp95MtJ7#Rqb;h2lj<| z{uC}Xc^Uqpn$~uci+vWJaJV23X*nyw3{QLJd#XM2tr(s^gG-HG0nOI=o&~Dyo~b}Y z=ZAG#cZB7%{psVX?N4LZ;Qn0pp^Uyi%(IEJ;WurG>}8QeH>*FV?qyDB^x5?IUbX4* z%@P!T{z7<0%lf3v^TRB)>4(|ja6ukXe*urY4A?wB=}?<~64|FBJb$TqWSz+Hw0^Kp zwSKT)g2K-h%~OTn@U)jLQtf52YpZ`HJQK~{neh4{=NiU56DLG_r3Fl!FxdJRXCcKr z{l*_`{fn}WekMw}haa8({ez`H5&MdM`i(zG`u2IgVG*DEIE;cw`k(u_pY^jy`TZuE zpSrA!_DlTHm4n9r*JysY`|N)o&1Ktt<{aVlC-QYB`nfS?Jyz1c@oxu>e@k?1YWvn` zzb^k<2aUfrnjigR>Qm=`^`P|^^Lvp2;t!Vp#@O_=eTPX}|NhoL!{s-**ZRNiKVssK zW`;6I`L7Q%Yee^TVUo^2BmThgC!3j0IEL;|!#;^GBmBVeC&v8V!tS$U;>(ELJ3jX+ z$>%G+zAu&!XI1PIsnlC-)6aoMk>xllNZVsHG^(N9wRu@N3`5Jzlk| zn^)Je(Dr~!7H(KBF*=36#K!8x_gHfWT7JO-wm(Hz)}QqL0xsWc%h}(-2lesM>@gCR zDrE}+yZc+ch{u8|4-rzhW^xjQT7YjsSDavzs{ zX;%1~dB~;)zE&#EXja_4~$|YtiS8&t9KjU5h@aKYM+C zc`f?9{@Lqu@>=vcb(Q+KL%&5D`1c6UU5h?Pu2P>X_?~&-TJ-txXQfZ5-G|)B`*rL) z)FAg^&vfe9)cr5&^|Oi0%17$eC@nG~@3&X_e*LBKB2Q-5{k~s^)j z;z;LX)ozYb(tLj-Jo>%e=DBB;YQJYC&={8UnDFSe0h6z`zu3!q*B0P>nCBa!vtGY2 zJez*Jo!=Eb3`EvAw#jisqf3Zmm(TC~s{MD_Kz&%w-)f$DVIHg4sjR~Hl~p`B%(Gp1 zCN9TsbhdJvm6clyw1j#7POo`YYn~MkTvirm+gaHo0g*FA^X-s)-S}h8BLpk!VPFIB zhz^&3-;^_>M$7uzFjfD|W@Y(ZLYC*Y%baq=qpXGR06ji+{o{O#`Km*WT@vKxb7d`v z$39MZ)#UGikMv2sTMMv>h3F%&V6sbH{~)f=6O!BS>2j(O%^7NJ6@Cveek#|8!(ZyO z7QBaly4PCZ%Wl7CTTpq%LTiGS>vW)-wP1-;aX^x_pxW8`Z9nb;pStcyx0;ewX)RbA zRM%l=3-W{LO?W=|N}uwK=p-DxNa(n$79qP?UAGIo)`z^c)`E>~MHp8r&U!BzT2yA`%;IRk_|5UJ>kPo`r@Af z)Bw9WtOb?iZ47x6eY^IO2i$#j-VPo>w&aC84~5=+g!1ViAK=GM5_a5LkYV$l@uNQn z;jRf9JrDVe`}!pn|7-Y90q0!mx_`iZ1Gw;t34aZI`}=ClI^6SbS(PI`AW!dDm2u=F zf%Y?2*yM@-$ke~Hb;fw=^H!yGn|O<|DlZ!y7CK$%Y07@#c zfTv8mS%`fteA20=NIv%g`)wT#?nWN@dKKDBN6^D3eV4UxGjPb?TGE4i;(0CC{Y&s} zfcjkcijyzoxTjAM)~MUu!ZWr^DgQU^a=QR7@-AY36L2q`MZQystOarJn|vQfgnlNT zw%b4D7*w~=-r`@R9sCP<9j96re1sd{q4-SPvhV}&k-pY%uhQ+Ueg3(iNU$m=#i`FF zICZ^NW+WrW19>VCR8wB^;i~re8%5usN*DtF46lS)m9(|WX#jOyxxh>OPHfbxhL6J5 zBrF^77ag}R&G`;KX0<}9YL#do3pj_ zAZHW)m~b5M^ zc0c-6?(tcbXS&Gi5mR3DQI*H+_=mwy_^{b-bb8&Ye1ddNKzsEh>7BJIgW#|DNa_^f zLFx(rao`+fkVRdM1%Cs(D#E=8yk+O%lFwTBDD=tLf+J`xqz|m5)tkrlzN!D9RW%Mf zZ=i38>%hf7iN1hzq#mzdi|u@bJmOZ37r(SW`Y-Zb<%$P4{a4jwQ~w_JTT9!kn!z}* z5L+n8#>GFuN0e!VO*ekpe--Ut+E-N;P*h4dW%ziduHUM{1@M(X^9z6b!fZQD+HO^~ z$zN4XC;4~5qpb33=uL}2*BbfDeY8IbhrWtDNIFvgc3oFJ@-TdD@N6~w8+=yP_J;`H zZ2XjY)uZ0lnbYador9Ix3lb7=Gz*4{u_-y@G z(Ps}szUbCs+EDq1E~Cd9u`TFpkxRLkHv)_a<(mOXua&r>%TVwq(DgX(qb?(hx-Z}E z0~eXLJo@dTbw#^E*Nl712;pLdVbw=-sTelrLXV0xz?Vfjg^Zt_=;sHAHXS|o z8Jnn}ZY!wc3Jg()EdtL5WUeT@HD1y&ccPN0QelA;&K)w2B09$;}w*u6^=<_hJ(`gl7!aV{oud9f|#RmL#`}cRbtcp27t70UygFefD z2DhUV89~LjTg!jUrR&Xq82p5^Wf}jY(#IzJr-5CjefeJ@y#)Mk1IH;R>fC=0VE)Hr z`7Z?9%W}S{oo%@0;|3@DXbh5oHj&Up>|3zVyX9#Us`u|8>%#YInR?!ic&VSJd z)E{*|e?*V~r!^ltoIe4$)ucV&73mM=Cz$%2?>R*Rb|MUF- z^*g`G)`_~BUvK(}`7PkBwhlq?8uGOR_t6^C6&XPQ|AYS49O{042O#~x|KM&09tR$y zkGLPV6KHNU{5x%#)c<_yU;2jmUBF@FpT|88Z1s``eSye&1)v`1@5BEexYYIhgYeRC z&p%6g7oWypu`(&f+;@Y3V=lQ#% zzTx8Xbz2ByP8b3|R~zmWhAG>1_!Pp6#qZvKgC@Ayj&Pp{E~2RNKCm~O>Y9rr710Ns zhDPXDqR+72`ozWRGpx5h!z23S)c3DXq`rn;OMP8;mGyN6-|IfS27TNgefIkN{#x|; z;Ir4~+_mWQ=4Yi(lm%-vy#K}Hi47XK08SNiz|BlBU%`e>1emnlqUac#7U%xAw zpZMXqiO_ZYg?;z0M1H^QxivPvhmRqVN8)>K7*zjW`=9!aKbZbEMN$)tb-buYr$1t_ z^E*9bqu2+EZ{BC386)*KCYn4z`h)2&BWl#6*NMY^UH;1kEB}dK4l`>+uSJJR692{@ z4;sHF%&d{o)zN;Pe)XX7WnDY!(QE2qzr>%oe6aZL{~c!52;*whqtl-^nEkj}L5Y6) zjXy~FyWfqDjs2HI`*r#ygQg$zE8Oc*YNu5A*vWpHl9RRh;~OXi6>kCm~zt=6e(Hc@=(Q=S9qCrqo`q z_|mX{eyGjhji0+}p@R<5Gi3Dq&lT;@kRKa4eCBruv?}p>)Ztb494dL{mbvgbCN+Gr zpjMDs3s%>TqVdH2!8zn!nO+SUx9#XW_&@ifXXidPr`U7oq2g5&mi(k-Xm!`m!%C^B z^LYQ~v#t;K9mRxaC!eLlJ`I1bp?5!>EykGb-|(LougI{!_er2jWZC)Ig?}$_&}GeEg4+ai z`>djKxCa`o!l~%U`d!gWE~D4;;HP9g0QWTTxLrPHpgE&-e2uW4Mx*CRThEKo-m=T& z5;*UZMXdkGJ7&>k;4EtEC!Wzm>Ywk^@35{w9T!tSg&*LKkTU3qUEkq-zIeP|`y;jv z(`8mXf!`XOf`1vm>tNkL*6QbOHShbytp9m(j4s9Y`rqtM_^JEiG{EPziaUeKlZy@U zUR_)SOeg#t<%)e3`?Ew-tGL{jv1ozu+v|VDH9pGAslT%oQ>Mj*K)qL&Tk&$jB<@C2 zcEzi}Tb5EMZF>EtnDxJ6*8hqh1X%ye!nTT8|BGksTfVgwi#|`F+bBEjo%kOCu&Ls$ zfL{OOTg*ki|FIraO#K%>1uu40O#KzJ{#X1G?mmF^Ki;*i;)5>o8B}qJ;N8H=-SE4N zo~$7ipE_=2VJpRlc+Y1|t@u^oHP&TC&(kN3{4?j_^C{0=Qkid?I420dcn%tF_60+G z(`C)B4jTFLO_%a08X->Tk@`2~SLh_{0&O3?X1@-80(+m1J;Y1-Q6CQQ@kT~rGWZ1I zVV{Mp4Hi;wg&DvUAkOBetrU8Ju^oml&2JUfxU53TxiA6n0h54y3CEsB=y#*O|sJ621|4c^B*Bwl1qoT^H68M*S61SA}cr_`@X3YZZ2Sl}B{L zUJ5DG!p%Tw4Fw|Yt&{a9BV%?h^bTM<5Cqyp4(=9Po)SLdOrUJWL*E~Cs9SOO;2(#3 z5a64ptOFJ92C$vNL-3DvwioOHKLvCF*h=9M;>6>g@Y23<4*=Ls;j8dFT;%tZ{;HZJZwcJ& zH~s%e`idaM;gD~od~bGPSFGXljbnCl9BY&=`r=9I`qlWo@z(4qli`_S%}(^N&NzWK zkx2ZhxGw1QJ@3mHF^%{c)@&|~x_94^b0=5J6`?JNr&6c^hgZ%@_ znp8>q6QTz``Jgqs%a*qj`a#i!_4iX=Sn<=wXCDJ3KTmZKCIEgoXw81p zY0bV2e#-7|9YMlKgZ^dq8RjyKAG6;w{n6|R6DKwHe75Vzuwt8_aJVg zmwGYddHzG_^PkMKes8Ds2;of~>Xs2fEB`e3Mjw4O^~(O2{Ov#xcob;9q~agI-Gcnx zxI2KynNR&5w-Zk8gj>7xKFR z(VaQN4Mn)8fWw`pJPxRqu05|q?87K-0TsQNe%wXu;^#fB~$++L?8Cc_^krI>rG+&qs&^r zP5uiQ^Yb=O62JQ5ujnAY9;d$eU#9&R6pptFrc?i)U^lH!b^Ax~dwf>D!<28qjG$G} z3T;}pRWM#;`T!Sl_})wY3%o$?bo@T6zy+S=v$`)HC6%jUQkZ_2XU$Yf_giCqYJy0b^wj?Dpr&2vkHz- zrwhOj15I`u?4p3WF2HsRI4W=`)vLb-B!U$JFPRXtJ|MDX%+N%OQsxwL~^>>_uL%y*dQh=|@HocTt-|Vb6Knl{Mz9v@^!@Uk4?smAADU8|+k{vue~AUks`#*F)Q4 z>?3dQu9gWkq`mcFSf2uRq6d99-_m8jT>e(ZrK9lgG3n>gzVDz-=zZ?H9kI!Ww4 zLY$!Z2{V0l-ie@<_gb(maWn2E_+Mgg$ZGnz_ab$ecLw?!PC4t+%Iopb{>i@w{2k;l zPUXD?oCnSkb{hBfpmqC#PT7ZT%7HKEJs-L#>XYiDf6n=cJ|P~x zNXLhK-$rR;Qz(@b@TMlgwK>zRl5Lf#D$IZCvTjYmV_V+B+`uP?RJ{_oSH1f-N zU#`Z#2B80!_hnxr&;m38)iv;S(#Jil;}>kBd``3iTaCO`@H`U4Z}$KB9+Lb(dlY!g z#>hH?PO z7uv?9dT&q;wvqFoOV8PITERDq9ngN+7?3k(i>{-bhryeJL_?o0@a;a!cM5lhod$K9 zb09L_h< z49`huJ+B+Rj)VIs1If=h;7wchg|qO!ZFnx)w0G>fk7FJv?KeFBk3Ai#|7^yF>~WFt zbaXZSt?uiCR<<*ezwGhw#qn-)oIanvRmwek0yfBc>&!ji39SDuVSVOxrdWcjku7n>dmo?D9Eh2Zc~*V#*C-&YCzw0E(;89wkz!WJ1nwvoNu zt2{rqWz)v9n`_`%t8GMVna5(gxRt#Uz@D;Ox){@ItZXxmTiFjb5}*EH31J%m-v4x* zAb5w<$~u6%9Z2lNF8tO^mzj%ZZzX>(LGJ|i0y}LTc9ZvC>ip?C%kJ8YI8*-F#}0sd zjeP1jdmqs4wb#E*`^i254LiuT+er4Q!^nBvnmID4(GmY6)wsuA0OZy!36w^^%XPOuiB9!^7h z6j~D?eS*Ye|F>EHwexT*vcrh`;?dS;t-)S4;vVdR=Lmp)zd}Fia@H~6d0W2| zF5cxuH)y9`$EE)sdKP_58<}-d#s$Kd7f2hK)k71;zId!z^#5b4&O?76*Q^)LI`M%{fMNQH37KQq?v`fq4t~Q z^q?E#U$(3THMV}c+Sou=vRBhRclk~H$=sopfxOc`D~mBKs|frux{-&hIWEJK5AOFl zSPz1{z{;Xt#8$HGde3@H@@I6+s)SzZB0Ol~uA<#;fz}r3&u;v2$o_&>)<%)#L^eD@ zpi%l0Y>)no{R>vsgLd9_fM;z+rb~H#2EGR9#5U-QvX;^xJpKeCz&p@izLN>Qo4J65 z+wC`tF(Yd`u+Nrxa4)j3HQGg%`TdWTd64+nc-A4Gk;fV}KasGqx`9`L)7Z*CEouMfygFRwU6~Fb4qCYWM}gVv|JeS_ zNwhm`E1NX4&l?#toi1zUYe8$~TEfTsteG_1UojKX1%X}v7Xl4TSHGCv> zpNt&aX3~5*Jo|`kPgCKWE;`|QNCSJCiEcCV?evO#lppyaotcY>Yxm(Z=LEr_Edgo( zv7bsi&T??p`)AV5X08Gl7iO-p!x~FT!}NVKA8JOn%gPej;4NFHOSI*orYy4JsC(>W=2?}-X{EYpdFqt?Q&JJ7)OFtno&tVg z{Awuf5F1y%p+h(k^ge>W!@sz7Mf!wPLL>5Oqu2?!8hMje_akq`HORZaA9*!@l)RB8 zvRiaSTMIy8PXlW!TRc(-Q&Lj`=hVriR5?EmFk!675!xQpzRK& zq-}9g@`hchyv!PrBfH@uYK5~9*3bQiE0tI35_zN9$J39zu;2j@>sxOTGNijD(W@Gt znWih<+QZaZ4GCtpO;rzk(P3ykjY8|RO0`{TQ?b^(q8$9HTplZHxuNx36274IrA{Gh zTI+KOLKD9{8rgK)tsyi_vwqRpmv--~eQ2#CU43ZQceT#YxqI{eH;vBUofGD3Kf2e@ z_K1BOU95})hE{z*XygsY4z$+P3)*eXli#iGGJI=_$nWEt$(sMZp}pV}zM$3S6}q8) z+!;b6v==0NNatNWH4)mHETMH^4`Ji<}D>1a{-8Nq*v_hM2Ji7e7$WrYq z9x=2%$n)H+Y5e=VAl9=~foFUy?FAQp(OHvC+!vfe>$K+73eipjL)ZERRr`OPw`n>U z{c50{G_>k1=<<}7hxRjNgZO8T5G}1`Uu=T4a-A?Gx zQg1c1eS^VD7?n_?qOWdIKV7HKM{j}|3Yf|1eZI8~c_~kKt zFKCoBg0w-0q5Ydrf}zzwi!-zyFX?_ym{t4HW;=~3!WXofcMDn5Hcb*-qhXqLi?$8% z%cBEZ57mUwFwNRCsSmC7P*ES6rGM^d(%6_{>-=@Qep`YfZ>apU_Gr5jR34ia4;t3b z(7x{NOM5cLuI#uY`||C4OK8CinXZS@cycZMq_j=_n7(rl0mb+^1Pq>#>1sL*~JMSJ$N&@{oivCyQki}$&FDI40+ z{8wyUg4%Cr8HToXH|@E&mx+E?YZcBHe%Q5oVk3ywHLz|JfBq>k%4t z)EPxPBebBke0PNQojpS9zU!3M(U$j`q5ad;C_afJ>2^nGTeoYPwLChm)>U}8N@Ia7 z@0j*$+Sw;;+TjT8H|K4d%%#lJ@|%^0cCayAE-i2DwP`Ze+I+vZ>vGo{5Xi@?P6;r4 zPnz*EW8sAeZAe!n?ms0PzO5Y*+R0`^8zOdKo|b<+V$1V~NUG%@Wlub|%gzCZ3Tk@G zD`O4qCO-M8uNvAfw%KtD)s4KJ$rrIdJ5kl+ESU)mC+bVhqP1}gk z`EHX&#)gt8z8b;x)AF-Wy*-Sd{Qid~+xcCjX;$-eAsX6{pr&O6qIB6R^*f}q#^WAjZ{Ex+q9v`g8Bc6YsMdG~~& zy|=~Y^QxBjvJLIXLpDuxAdO9t_SW*rMWJHDSNc$z-cCEKb&M6&G6zquG`7a|r47mNhbDE_EA9}niQY8bR-x<1PIoGv-h7_Ew5<{+mapZ*%YA6p zx26cK+d5yw*c0k^U4}NL7T1(t%O?j7?epDg(}AU0mzEDN*|bh*88+>LO$$OZ_T2Je zk4>Y0dG@T$ciN`;pzSuaPxjh07c|?(@78@-x5bQU)3YI4d(!X??}4_!mUqggbwew( zxH(KP<)`CrS2UC{nDhGq>J3+;_wG)6MduY1w3HP6{zw4u;` z6H8McLF?&7W0Khv@4$7elkuC20TNi$-7Kd9xP{zsF2+2rzS7g>Ihnv3%c| z0?l-~5kBm|b0L;*4}8+57rZ5OQ})l+3Qhd-*fd@Ch7zVV;_uBjy)SLZguXQOYG2xu z5B8;ftlJ=M#;dFww;5fO?h~0OcEE4zr;bb9?v~&8C~LH_drNiOv~Fl8?YM_*S|>Ey z*1le2(}K{9tyx=5n`!xd4YXY*?$#4FpAVX?%iX&CNY@3;*rc`fGB(MYJCEfkF>#;V zLfL<)Y5cS6jW+1PX3S&L#5VpAOZ(Ud?c-S5cf@wh{DlA$*FTAU$kLA`YTn1y8hA#4 z$7z52ii@l-?NpoY^=QBR`+HRfkEl3Y(>DENE9*X$z&`Dle@}=U{TuFKnr3BmuuiZQ z*cs;emVBPozY{ldtkeapyG#R?gn2p@_HzAU{5DVGc-B(*o|S0y6~=FCIpts`t@azX zsrDPj0i6=8pPh0?&FC6%Tc4@uGqoD%*5UH+JHo^FvoKG3BkLG^lSz2n_s@BZiTsXvNq7rC|3*2X!EpHRF&%64CML?qLlgb z%JK`6kTXt~kG_c_`e=Psu(sB6IX*)6(m*a3p0vK^U4cE zB;{l7g-EI>E}hL)8YThJzmZ!-*R4#l@7zq{PSX|lOS;@wpJeVCsFFBIRiz8L(?Z>B z-+ob=Q?htT0k?7F7vy-o-qf+Rbt_k|tzW&iE~zBPpCmVR6z7W^t|Tp(C%1PLR+Z+- zl?cKvHDI3p!_x+cm#S{gFUgsgo1epl_gvc%7Fsbbe@@jrKiNYm5-KRK%)y)%tDEw5 zN!r|{NrlCWs{9nxSVPY*$gP?^Tk=<2T3CikH*-@&VOjaSko-`LapW5l_2(rOmY2;- zDy=jZk*IOpg5a;JEJ*4l>83liKHNGnyTE8QFUNl;^)tJml)EU1Q0A{p;!X;#{iu-o z>8Bld(dVXhjT=@stZu1GD$1!Svg_5aRB|;9ZbDt>YRgeKhvjf71Njwcxy6;(oiU93q&%vutT0Ju9{J|J)Ls^rpL}yacb&+6 zCB`iJTxBA6YP98WKP|?wdIOi?x>j;?Y+FULUHxHa;-%2{e@IqFJX>Mu-=@TkwK6Yr zzgFuwzT=N%f9b7O=G&dhbJVH7cW1;A#&7;I&JoAuvNDQ-%JYxl3FFoHGqN8>_IxTU z?MaG^y(e<6WQHfG_fKc=?LA|9kUb;pmly%=lkzruTQcZ#GfKPIf9urW(=(O?b(ox~ zm_dJ=G0ms_pR_f?z93%|? z4)zo6LSHGr{kyD;!<5BI@+SHn1lpuLL=!S2%o#zwX zgxT`g|1Wz$#{}NcdkHdLI%{Pdk^TN}QV-O}bEmD0UBo>FY;;;_j1w6bddUCVR>}zU z_ysij{0!OuKb-m)XXK`tF$|S&yBym8lXZ&Lu+XpfY-e5KyWVA|l}UYYw4Rm8Tp=@_ zJsHz+$4g$2Jp(^`7cyNV%--?4z|%Zdrq3s1mzBxbm^s;}_cCUB!IOamV8&F^&9*YB z(@g4f^jvf*0j~rm0CQY=-)?3;xF0>vM)nbkF#KkK-&J(Ij=Hm-#ieP1O%+wpH~wlY1qEv76ogKfyP@vT1gsdwt%zepZ= ztjvywaZFuhZg~P(+wj{u>;1ov(;t#gly zRV>@SF1&4J9y(3>@1v)!Gv_~N?)^aBl7Fc!b)?q2J#z$&WEd-2sOxD&tElJpEN*$7 z31kDa?11ZVhXUdG`+a=KuH~O+yzhGce}!!z_(tBDyZ>gkHC(?pcLY>R(DPu9|H;V{ zLYu}XOqd{X9?<%SQl6$|Cy?fpsALHBtPQb<>kHjSyLR97F*R^cl|%8lM^=rM|3k+P z<^Qm;!}vdZ>~Q|~zK_yrB8h{XIP(lqmSoTVRiE3gMV~KRr9R=a zb9VRL<_t}ERCXS^3wo+-M&rhjMqC;e;sM~oTqdi>LUdfG_(Yx?Aj%TDc2r{7AO zZ2Ido_Wz|NxQOR91#;pv(^YuI;ExC}eEaf>|V)n}(_8B_k zOvXj_`|cvXzX+ZM0Q#~2F|7sK5@+kTdDlr>>4Pr)HF$Lp9CsD{;V{!5rZsX8z==iZ z+7|8))7Ea#c}uHBC&rz$;6|d^`aQap^y%+Q9y5A8D1H4F<@pKw{FZd$nti}&{GKa? z@hNS$kN#TvXYg{M2H54Z(mn`AWOhM2Y|B4J9$wx~*bxBwK6uaAVXxso2rvfdu;;-~ z0eijn9Hdk4-%dLn)W2OwJ4snc8TWMSxkVcLt#!N$=gFVs-~8qv?b6%iU&aIUWL!>@ zI(uDM<(Uw!e=p;#lt;SETh8nFdVZ7clsOc0A?iInJ_wK4hRvJkLB=G${U?hsD}96y zhYp;VciF3(?gG*{4~5@Hr%wf@n|ev7zP#v>?gcV@R{DcM;yA5z$}hbLU>r}MW2fN{ zTIuzX{krLk7^8>U`Yf^KQI|TsrVhOiHhn4anH!{+`;ZGiwxh#WLBoF1H&T|5Q=cQj zv7_{6=0~Fcwgj9Y@=06#k8i=2&~>Nn-wAE=V^(_SE-QTtc!!UDy!`%W*IqR_5kK>b z^rt$l^xeCS|4BREKIr?&-%Ggc|EBy}XGwX!a@pJ5sE-U?zOO3%6(z}6E zKGZltT4$~F$MBy7&b)4=pFVBUe~tasxzNr5Z(cmEl0~h^PYNs%cvr<<=kCVOtcY+IA(C{wxS*aJLY|U?6QWFSY zMBhz2PR*A6_qd5VT(_mv=|L+spK$CywbbM}b%wYdc0UK*Yy0hXo9ZLZlRDhU7)w4f zkg*Zon(?}?PQ{M2?yG!Sx6tpyQXAoEHT^3ai6l&=<-=9<0Ac6>OsPu zxAi$hK3>`>aZNeBDs}Ax;5h*7v++}nx_?SN0qqRq?c=!g5ve`Krc>X1OOFAmXJ6sH z&y39}afG{^Cf++;h(sTedl`67PlC&{b>BvZ!8KHyelV86+<=j5s2&*6IMYa4?4-9LFc^Mfk$ev>@b zrsZZKuMj%CX~a2;8G6I zC4VQn@prObAn*N@d8^2K1vqQ?pNHqnDg396|213YIp}ZNIPd?VwwU~}jQeu_y9v89 z?mZLlB1Nj7iQ(}-_4G(JVz_Ec?KI`%rM^>~BZOw9zU|U&E5!kA@>pbe+EUL$Kj}lt zB*qr%RrD1*Nt8NCYfC*V=f2>lPfD3)$}%O}{0?YJRw40%0Aa~l4mFu|^yS7@Q;K|6 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

c zr_#UdU>&Iu;Eey_PQt<@8!JrIYgjs1q|#5^VU1=#umceJSaZ4eNyE3(W*Yvf?|qaB zEC7~@*L?O#-Jh4b^V`)|I@I?*tO0U>Cc><;K9I8dp2HulmZff1%ZyC5?3F!g*#ha8 zLjddYIQ7)Gz(%OoMmMTugZ*k*JU2Q%S45cbtxQAk-Dc6zo+>LnsFrcJ4l zN%H?c{~wpY{qHyL>!>M`ZtGh3`7t!(h5Nf)t@H{gAW4?cVc#Y+e`5)JQo(GD5bp0RKe(wK9{>Qc7 zL+=%j7fIr~e!IA9Mc{Yo-r8k1YSQ z_fOe*p1W<`|H6$4O-|i8Sn19v?pOQY&%y{F2Mi-_4(@m(_nTu4-5Kx9H4^Zr z)T&YCg>s*r?woJ1_w3T0ewBOtmdY#K6I3t!z?pYEN2%fem-uYbCpz`Djkxn%YVh9# zxO-AML)+2`-D#L@t2@^cxZ{Mana|(3bwjH_0r5>xc>dt_ZvMDzXzphm;fOl>Q znDiyQ)s27A0o_@62q@N_MTHzLP^vr2%5-OAIsPK>Dr8ozI~#(?!>2n6kmW7%H5s~t zIa24D2JZiBB(8$AhVE>=q@$vo4mhK2&g#xKr|yup>jXY&)}3;1szF>h{@OOHJ=*Ue z+q*g{`lgPO`GomAbIWRfBR?(I$sK{r`=Y$+g=XAnUL=w64a6gN2Xfc4zENb*CUO@f zb*M1!)X_Iw26#6=?RaBwH@_D@^1qSl)Hj4aa=S6QkUMUiVk`6wpXA3KPrUdOfyu;U z^UQd^9iL46O5)}M>BL9b@tJn~JmNPHmjx^&9-C$6&#~jPiAPs%WlY|u9<8aWia zN#8hItK08cQ>G6$UY@2qi&uIdiA3` zd!-zCf1quyOWQV6#uRWT_$^~ag)u1akAe6VgSJOg)?grxJJ6uZ+Oo*}I%5pq>gwwW zz)+_eR);&r&%Uz@`MT6|KGH=J<^$$?Wsh249|lmT>+>k%9jCr}7Ch0Xujk&E-Steu zG7QSY^(sAknJe##l;K}Q`3ndpeLOF*3bgXsjp}S(LgQy^i1}1C78QpT6p_ z>mOn0>&=9naXNaH;(k)#=v8JodXdiu|q8*KVoY@|(ED#K*>{ z5ohCxGjN?M@*rV@hvB+(dkXl_0{wA*L2kv;g51i60==NKKo6J;)VAxV7BIG-FMz&_ z@(h6V6M~Gl*xq8bB6dlFN!R_WbjnT9?S(=56a9OaSM~l5{dkF?+tHQw3@3ivMP2dW znRa|O>9Ggx+D@|s|1RQ}N_&mz}xC=u_Z_KgVq|bUS+0-id!E{`Mk7YN+_*;LSHpS;}2- z5j$PFHHxsythY?-$UPP%qL-%+njrW8GQK0%YcZ5Vf4DZ#r99i{lhWp~D2ExxPHdiWZZG|rCCN^$~0gE{zPD&SH+%&&qDAeKrWDB=xelh zJi31^3m7Z3ZJIe4o*xm0e6KC_Q7*1w=xeRG*}y8sjhCt0Y;gMOwR~U!kO_F{JKr+& zwY^?sXs9Q@N!U9;z)(^BaW^q$eT=&u*nv!F^J}|UCX=|`z?S{A!5;ED)w31&8}{jI zXMBu*w71l!#?b9f+%iL7YepZiJJ%|}TbK{;Lz4b_@*jdfx&N8CHGVZ@*%^yg?O7|V zi13RBiE*od#!pBCeUa7Ow!9RFm+>Dz^>2?>c`0tfgC*vP2aEW1JZED4r<|(9Pv~Fc z*YzC59A6^8xQ}0yHb^3G6Zv^3S*t%0`FSTsPPh`Fq z(RCv8-799EQN)-hGT-ajbt3cKb~9!qG3JTP_j-4o$b9#@G@N;E#!A+GmzrPOMkya$ z{Z#dp4^L%3OYRhsZ))uCWJn)W$^kqHIDvl3e&!6OLTXHJ#qsfA=4tYgvQc85CjWd@ zzh6YlxjRq)=EFHI(>*X}&|>5IHo4#~O3*%B4B;wCUbOhF>p$m^mHZTyy!b6UkShk? z`rVvCIL7a?35y<{edyqHPQ4mro=IljIPm5h_qcK(>Gj`zXr90I?}VtWVQQwPJ)wmI>|izDP*Eh}$jPdRHXwI@7;S4PME*1~2Ch~{($D}|*G z1H(D%AuaZeduPzv!d={tGXPTNMGfR-y-B^|khAhU3pl!Pad=@oc)xk=`+8&-_GhYg z_)Z!p>FA(b=hQDTZGe?0vI{YpNQ>#>!aP^U^q`i}ay`UP=ER%+IfDj-+i22&$Rzrh ztl!HyN%Pcr=2{WVa~0oY^_4qy%{KfI?rLC7S9=9nR|a|jJ%L^-^gQ$)Z{K$m!(AJ* zW`~8(alC$gUqrTfi&IY5#YV~pTl`u-yx*TiB!2M5^cZGpjvI3PU1G!sOZ#`-lN7U6 zPQ9}phduvO`s#j{Zo7=zu5_D|cjh94`KD914Z|M;43PTa%Kg8LG4jsV=E7bl<0cro zEtU5rq}mqmGsmd5ILqd=c?p|f=bg-4`gsLdbN{x{KJH4GNP3@X%i6|~R_KkwX8jB9 z6dz^bGPbl0g|}GTc`l0&#-FxKpYr^9qQ!$BKX$t<`&DQyvGOls%>FyVmIByBzMs== zxjDpBuZ`gA{NG<1D3JMg-oSzQwLkxBTX5IpFg8mcy~AR2hb4#WPp zVgH|-jJwOnyE638f)~qsAMQTN7FuO~bNp=EjsMH|tAIkFp7AA%@_JIAc>J}%9v}$R z8M%MABY>P%;^MFN@?OZhsK~knXp^-8+(SSS^O04!(l$*%GthB~GH+9#J9)FBWllg? ztB6pZxKR7IHduAJ8pS-Z1O9QZ#xp0U?pFudaf}_;FX4|i^wmt__JX?r#(mFM@cY0M zl=6r>%+BK-rLRsDePIsWlkjn4c@MF4cs5VqIsA-+pSAdNmYDA+SC`uSEBLNGEPKwkxyT3puC7eef3><{0qWLT^3E+?`j3Sg$J$r?6dmVRqliy zAa&ki^H^OEFV=kEYPrqlC&XX0>vy@?oNtI8UA;?t&uY`1Rkw9#=^f?)o%-r6!ds+B zd17~V&Hw1ixj)VFnW4S2W1ulmw~l6rdE22|$2fH>vTq&Qu0}E6X_d8)Fy5svvj>Q- zw4(QQJJnl1%jdnPmH0t`Ym6G)f9zWeF(!lilb$F3kA%mLMhB0WlH}id|Zld zb)*u94rix3)RP&yb-`?MB@<@o)-{wvd$i8=zx7J2bNMHWz~R>&8>Igl%GDV*pn@MpqH(BgNI^m*oQZ^Pqm(kwH~`Judzw;DhuYhSOyUnlsgT#NQR=UcBxJqmay zMEy>C5-wSVE)1EBrvzk2HeY&+uz4b~|=3BoWi+>kz zz(ro%eLxT>FJN8H&@H*VN4)7*VTV`;_)EfzsqbxE^uCoo*IH+naTXpd{WWcHYcuP0 z`PktK(sVGtAL!RDeR=1Wc0ey$Zx)ISawkOvB+Xkt!!EU678c}*xBGuI_ssUySH?KZ zzH()(p|6xW)eCvFuhYw1)v2!pz!QLB^8RL!7k=ooSK@=b(;528c)*+|6E>JOki6cp z$UTbnstLLsTX$u|7=5L$OTD1MV*y_wwCuU{0%!`o#Bp4YVD?Y5PFMV?`pT|CaI212 z=yzAr4Si)fJgouG1m+cDTP&M+1v@ITxU!J=b+|b|Ht~^me6Ah8l=yAL8G!J!O8Qp; z^_O_kQ$Mk>R|>?B%zHY`^@}T82-^ruBdwD3;P1RkJp*d!@!9Gbcn|Agz5iXAxC_6_ zoQq#!e7RCosK~?nqDx;99`~!f{u>UlR>XP{YbRG?tTosxRffKDnf9j-U!nc4RGYF^ z@hwf{FV|NZKhak%Ues6GE`c|KljdwI{x*H(X0zq5BfppM_7=i#Q|2As0q@e+ZtB)( z$e2(6a;yJmau%+7YgJR=t@TR`-fNw?8ye9iH}5i{M@2#9PUiy5L85zvN15@tlLpBe zfsyxvUBi~WUo-+31=XR;-e)bRWsF+(k2_t^ahbILxKU^ovOZqGdNeY^-nCXkYphQV zY|kMbwvu?UFCVW@_}aDHxzm^o0JAuP$2h5od_@N!3zxyO!H=l8S?`5IEetTcS zpJ%aEY{By*mca))cz!u~<_ezsLq|S%4*3dLqcL>LU8lKj)3Q?Ix9nES4x^WPd5xsk zEdlCK2<-xCFZ?@g9iY8i-YGEOw_CQ>!Y}grE@2x}S-^s*>_D(iHpYYwpi%g65 z>lXU_{k@Z7cp>}%@y)o50kXzpt{;o6Y5$f6pi0(#$Tu6j4tEZ^CwngutREqZ7T$eZ zE}Q*nS+NWJl416zmUfXzf$IAgrXHJXj4f?c(R`jfYqh_N_ijV=Lwj@>ETZG^a$dDLNB16E>w9V=fcO&wg_MP(>;v) zb9{N}s{`mylhD*3V>3UkugfiW1o&;Q%bKGmvaZy(5Zz#nu#EW2=*cnM7W}L$e%g*c zm4XN9SAFp_MtpilcFx&9k5#JYI8zbqf3IO^9{GgQKkMrrpY?g^t^IKqpAItZkQ@Ww z>z+^ERKlL9l;4H+uM`^h(_gpJhduE*>3ftsn7;LK^h503r~m2W(!07c+)vN;iE#1| zKQNwfhkq6~-TA-p`RPN{yQe?*IDX{BcC&~PrZikiz3?pQqX@ktAwl`a<3GZy?67PIGxb(be4lrLH?x(MLTzVh% zjcj~?{+I{TCzN*ghxG4$d;NnYPv!5P4nAUL_!##3Fzu8l#E<9G?&*~3{lo5lA9D2^ zBuhyCe6wrHpWnRk1ntDo_k7zA{oX4q`l0lED{rM=-aS2MK68|@mDD5=YA^eneVcBm zezrg4+~@xx`Fxgt_nY0y=_24|-lF(!S9wY-{yaw|Dk%TVC&BEYwkOPXRkr`$|Dmo4 zz3gK$!G~PrU%!REKG+iGSoXsUJod#0{oi&4S+3_6VIKqk7x7Ij? zYLbxcUH;;v$+#Z&O}d^DDjfP=0)KC{H|O+Pk4?k#QCCuNUt=ljNI-?0 zv)9kOe)f&KzXyMENaE12aJz^Qefe#XRK4qw^C{gew(mZDW}^Q(bf9^A1Xp6N3;S?V zQW)pACVdc*6z=5OfWn8=xQpE9xudC6m{*05H-JX8laNkQGL?$}J=9xE@ zaOLPflyFyNVqBq|zRQ)LKTo#r>-|I8TE6CWzUk`MgzyRFFZD5aiD657zT8|%T}5Qr=$r_0?Q z5g!ah*Tx3K*l@o@mMp^cp6Cqw(3f<5ds1PCwAJ}8`5^zH{X!(A05~!o`=4kkYoT$L zo5cl$QpTcyGwdZ98iw{ONwTho1ry4D=$`p;xR2h`Lov7FH*S6VPw9ev-XPj<23Ga8VZbTgV~P?(O{|qLQ++ z=)~@SN^^eWgMMj_u<(~lW-Qv2d~feKZg-teMcqp(!{7I$SeWV;);ldm2=oh!w!#&W_0x_~rhcX{G<3@ou?=1NxgBu7|Aoul7OsBg zVaNw29ZZ@|vp)YCrAI94ek}4U+!DfNlFsl~2878P^#Be^j+N!ssB1IiR$m8KJY>BR zFB>d_f12ice{foST1*)6(ZkbXlg+zE%^E z+-uVi%qxS~t4SLiE`(j-P%eD8TSXp^j-`KwoBjX0G;6oC5B7hbTu~eG0gKyV^XxONeUJ3{d4OY84q_aKP&p5m=YfLx*$^=Db^Lf-;Ika{O$~MC7!#1ts9e*Nk#6b ztGcC0lU&>tJt<`ocSZ00D*r_$LitM~Jda#4W6}@h4GWcE(RsQmF79uIt*5IFCV%k6 z^sKmfT&&A&DpRMs4-|HdGxzH`nfmvT`pa*wF!7jt}#LY=*G42lw z|0XTwy?ZOVv-{u2@6R9F9?WEZ4<8B=yTdr#HEM;zyUm}j+z%A&k@?j_*0tOGYsfIyZg=j*B_UkGpHYU9yxvt`XEYXC_}~2ThIOW|4mnr<$CsX_xlzdVHACGi@C)V z_GD$KAw&7?-?E1?J#>G(W%K_zRBl(gQ2vL{$L6=P-5#;=m#v}nK@y?-5C6{lGxLg# z43H1z75ew*k6GP{1Lb#F#@XhR?^)vl;__F8|)Ol*Uh8-YUCi{)`)PIz)My@#jw`g%(~1lzPo77GSpMI4c2a*=JyoMIo|wVuy;3b zA#uXn%0e}CLZ}Za&$`Ypgh#@hgzdm} z;O+r7vOd+}QculcHJ$GloA(1-UFx|XIhmh0w2 zK!r<<>=#f&#oqudcbe;U%{2k#tixX}d8It?YAFvsq-~l3){L5)&=1z%npp=_bBGgp zv;(aGJU;ifUFI#Rwmk8yB1rqQmZ)ScufWmkFzZ7%3mv^mSTibS&4~JbdaEG+FABk9 ze0owPxpD-6?7{avvIK!D+ zg`Rx;D)Jay%X%{36TL(oq6=1@z8sLcnENO_X9d_>37BhjA7|2rjRm>>_(C=6Ypn0N z$-lGK;5bHD22ZLAS)HgwY#r#?T7JX;KXekuOV z#8dD7|4djQM>kC@P|-cR!H#=KR(-}B9hPWJ^LlTZ^vH`)HLdk8*$6p^aAwYz(Y^^g4>4_0Og(fWF?8ji2?;rW|wqGk-!5+yIsW`M`36`Xh4%j$LS4ZR7O+rd+3P zI)MAmT&q0#z{flAuaot4ejfp2UAovrUpHwK5Wfq1huwMVKfsHrGy8Z=dpFU>`*l+d z_`5#c)FAZ)$96RB1WN7vhrla*tkV}!rdOZGj>$e&Qyp-Y^54O&_ED6zZ_#uKztsN| z{G<7OqyxOssV`tVo6wD>R=Ym!K7E1xm3A(3nlRH*vA=CM^^?CQtGk$i+#&CT=c} z2#m{AF>Rl1j|+>4%Q5nk12%v2eEBJt3G+Llftw51ZGB-K_(GrRBlMO7n)cg@yB1gj zpf49Tj>)^?-)w$AdttrLv@P(XFBHLR2l3lou!Sr6Xn)=r@+T-Ge_}g++V{d+MUbu+A*{0v_lh+)5p@Xr6w!d(T_UcO!=EDxYY5%>dceT>z zI(@n^R_R8kp?Wi(pSuGd;hp?UfqbS8;ALH<6K-H`iguSy})FbMSB8xqK~yf#&*Wh#s!r532yorzF!H@E>_=f zOfm3NHuY%Cwtkn=m<65+Or!l)%_G0;`{B<7mM-CY9NGT|M>iT5yL96g+;M=h23ol) zqKR)juvZaH^1A?`PuxnUZmh>GSgW4@6Xn-#Gvl8B(`InO+3#y?!414axHJD3o51&f zRv#PRWjvqYB9CFor*tRu%57TgeSWi;IN9qVe-Tg>B+RMLEdy_?u)@o%`3s+R>c;J7 zR9OFuX8y4LmzdWyG48bD58yUi>CZa#=~&utfS>sT^PP!S{&Vr<-v!(hR^%CQ(Q1E# zJCB(!@h$iHDD*nr$p2~%--FM@PqRjq;l?=gziQyd4x|ih;2Yp^PIF#zKEbkS=cD7H z5v0$KF!?w?6nimCE&dI@xa% zel@_iB-_LI}^!cqK3vg|yL6f9CbMSA54m7Zb=hyo5d2G0Rk0AEs zd;ka<`utvKN<{w+=6hY=6UZF-e395PT*ENG9XNkr3;YEr%hCyx558^S z?rD7<1&ldTrB6G~Fh`L(5Vp;w8^_{`9GlPT(@|d9K2Jiu+18VqC(qH2D9N4-i$Hc2)e~KdAP!-!K zWy&5bwtbB?);El1j|(*Z;D#txKPNN9hLY(J(E@{$?_e zq8nyUB+k$c0U#55&;ECVKT-UYg|0D%G|crndR5}iW8AO8UC8*(erLmi0``4z(}67J z1NMGsLk@oCiCtrTL$1invQ-W1h}&Sz6B@RGYoBh|ZS%SkKl7YeGFZ`J6AHvHu_FK583f&Dh$4d9IR=hosj*CK0N<^d+3moMptU4}k4 zo_OK8y$#-On)*BBQ^Mj1yDdrOdCG2o!tRhi1)CAYcpqu;cFu{dsO9~%zt!i(=ALsf zx8}X#T(q6uZvIN#4f@;;gDSz#Zo)PKn{4`9;0IeIefV5} zIWhLdl!sySgC3pR1-xU~hjWEHD9h%jbic`)yo;Wz0rsL#TMv<6`ab?5pbFS2GQlnL zQ5No5pct98;PQTDhM^PZnth-Z$orC&zlpFGrzwxq(cl-Y`Np}9+t9m=t+4oLjOP2~ z9`vq6r96k&aTSX8I1$>TlSC0fI1pwhR%CWY2L7stg=Zi5Fe&-^FA|-;@GtVf6FoueKIlCoJ1#M9 zZrJ>ASV@`wbV>5-XATqw@0S8Lp8b&s<#j2~c@^1@mzt5^$^5nhWUp%2oW@Nv9wl?eZ3DrO8r!!Ip zgwL>ly3lW7`#&uXKl6>k-}0-2!eS}XdhYXc_J6}q!~c*U&$<7SpSu4IKWF}@{QT~7 z__6lud@OZ+prXQ~5d92P?u9P#1!+J)^w)kud$^`wE)nfJJ01P#JFC(;XyfaJUzoYK zKY^Zq4h3>mx$GTApf!sl&c1Qy_iV*w`|fRA9JwlS(U}hyNAbgmaQ^D0lZE&h8qN3r z1jzYya;}qEC$FT&>3M-}RiZt;7_XO%Bqow|MmaT9sh;Jc^#(P~9xBkn-rdhQ~UmpPWxD;oJ={Ht_*A^=Em(YD0oUx$3u27APV}AY;cr(Cc zLB1=EoB{p`o6Ap_zyHR)$$IW(ep}8wnfI%f=(}pjoxrVv6_G;$;v*LW@D;fp*jBhAvWU*EUIp+|PUKCm z{)l&%gki`sR_Tv8P(0#g{G6|;zOY<>v^o&_z2-+oKJ&0b{Hx_o1M~N#AFV_Gb4i~- z`hfxcQNddM(N?GaXgjp_Y||et-weH-`Xkmj5;!+mJ+&3t1t=fC{Jwnv`FDeV5xhV7 z3wI%H@|TjordWSezMr(^R{Ei&i8-VawgoN!5d8hfUq$}G;7;<_R!E%w=o9kuqYgEx zUVqelNq@ATG|!XfNzMhh*-Zb$@51jW&>yvsz7t(=_*KGlm&rq1JaK(*(!X(^h@LVj zV^YRT{;4DVs?Qe%@sISUPo2{Hi!-PG)vT$hFHXhmd@+4e>er`^l-NEqUz#yFEycv6 zC#9!PddWl;>1R!znUW;wdv|4>2|gt$ed>!DY3VQV_6W_4kzb#hK|P{gOq`THa`L3F zgZB}_sk3HGo|^t=-SE+U<|Jh#j+~j1o|O9aWqCQ@9{KIuoNq2!G%|Wh(u}F8Gn3L% zXR4^FbN!Q2r%as!o!%xc;oy@e&9pcMpENlwJ!4vm6xJs-ZEAXYTKcqnyLDL`zK{2rcRnMH40or z0U6aB+!D2on^F)w1wvCN%^;Da_ahvUr?lf#s|Xb(_(*@6NoVrZuP3Eip57T#XZS}- zBz&4_(x=Xxm68F4sp-_*51pu_RIA1&&8gFpQm0NCIr$~hn|S)jX=&-v83=3UNMTv^ zPV;9>nw%o)W3~kXG224gr3>%d1_=kuOe4Nm0?MX&DetL3XOoOnTF#DI-%R z&CG~K$E_Now}Pi8rC5AUnvJfe&HNheC`^r6&d;Le( zRXB4iGx!}(l#yGRWoYhm*L7w1ojzTc$==2DDla(H$o2D1TQ{gs_4>%ER1&xgh-G|Y zO=r{)aNh0e1_Q&`+gOL|^{HOWC#?M-{G)*h3OWU9lpB0(p&G?|ecd=8cGS>y**^B| zSo37 zZ03^>(IP)ExL3@_s{r8!5CbqbsAH^`HRfUL_0{Dwrn2@}Cw#Am#$wz8FZAL632?@M zx?RrPzjLVE3dWYYjXvf6y$?V0iP!Kmhp5|4T){HSzXKYt6Sf!F2cC^vR0xmYlD-Pq zTx{{53x2@I-GK5g=*^w(!yg3dfU|~*x>G|P{Cw(*zq%o}GTM*ajNFPr_%Ay3smrtv zzdfjl#$Q{gYhHEglcT`ffy?k$NPF;ZT6fFPrv@Sx^LgTy)&82zE`MSq3xJK%kZJHna?G*+BKR;ROkD^3;R#sekNH*GjvP9x4=(7pPuI}U_BClB9IGg0E|NO`}xz$!N&kzV2$(D-v@97GB^jI z6_+-S;`{!;9_G~jqwwzs-j(%DT&a(bIoyBZq64D_JJqN!f(ze=0CekgsZV|BOKS1b z3HADPqoKa^UBdYN-!n|6Wqx+Ly7u)|y94T(XD+fvWT+?JV*Rhpg^ZDx@NpS=k7(AX zYi>dV|0RG!Vq(5^oBVh5X*PpRI<3lnVps{1{a=+=)Xvmp4ttv4ROqA32Wy#IbAH7M zyMOd0O^ad9v1{X;x)vGKj*|H_x>dpa_+r<5+0eBKw%?vF*Sf|-ZvwyTBHuWJejDIz zocsgmlk3J&2DCq6{rPuAg#F`UF*koPnm6od6MZjKOzlwp>{s_D%{Muqyxtm z)h-o#fSV4WZ?y~QPv2V%U0L(Np9N^z;P<$+Ywa@f(WbRRXEpd+xNG619voe%eTR3K zS8%t$Gi#Bx>!A0yKK2O=U0aL40HED!gE?m3s@+PyHTZV}?}D$zEd&mM{|#;_I_ALL zWT@UB;O>Rqil8|kP568K=wxk`p=&E}(U;mX@=0B=0kvnq6LHVx!V~y(aDERa>re9C z0^1Y1wgGyqL)KotXw|V9yo0cO+)M3RY(p)2TFb28dY)^y`@cT9-Kh`r{&y-08_|Kw zJKbUQ@{|+*ZQK}V-qHEEvEIB7p>ZlsYznTc06j4v=QMTWl$-aP^Vshu;>P>(_G3p* z4Flq>I-eTn&HLAS{9~-|El&Bsy#;ySn^%zc{(^$MeJ=bH)3Ik6*s$69lwUY4)Tb(V zhxsvabEPc|eQF6dZ!`YP0`vD-rm&Ph%&9(9^g#LQM*RCR*{0E$7o1ZEGF9iaWC-vR3fj$<1#!g8GzRjYCuJpP^{I2bU z^F6{V!smY6J%k^!%GzCwyN~&}?C}=hl76GSPvfp*t+X=;57AZZ#cG8Ux5#r%!drZ^gh@`E(6qrRZACR;%CFY_fEr zhQ402VJ-VX)?Q##nU6IP`Ccb8Zx42)hW=5r)3Wz9Tfi3rdz|{jQruvzInPMgO#9~H zFECWXlhmsZ?Js4qMo}*LE6U*mUQ@`o1V4L&vMyg!haRBcHD~LI&(tTP3RKT9<|Rsf zKi!Mne#Ou=mx;$Fh|Q{LCcn^Q{okB#RH*Nt=zEuW#7%u7T0|jF>@BPPu_rT?J{k8} zd7bQQ=#yjMllf2WO=}KuGSC~uu8@O;ut?pE|GG5l$lTZ4HiG>!^w4P zAS30i)hBo0Ukx3Hp-<8W9MtXPmW|ANcaT1SD|$d!_Pf|h+Vy7veX>;OTl#V`NZdOG z57@_(`-Ojl^{O&`a^WuXx4|b5FjuRi&lQzI&!-vE}sn9|9)k5 z`|IQHDqW2Tr9LN`fkO24yrmC4Rv60tV;3|GfOIj2uI4T+;bU%ojDsF9OKS!HIp z!JYc}T;djp9T>*+o3!-XY9I1$8l$V{lRwiM52`2o&|$NEb@go0OaPLJpUW76{Hy)o ziF9W={f?gxMRgwU&z@c?&;9aj%7;Rg(Tf-@IR z2!FLekiD@p$gmy!tk0@<19_wlwAFEJqj|nYIR49C^i<|w;4Q>OBVVaI^D8s`EyALN z6?q(X{|}%~4tSCG3O^V@I-ILYs) zZ=)-JM_%-~20cCz3yhYu)W;7#&S&cGiSZUcCwzp>mUUJ7jL=IQhJCg8Karej@l}s$CaJHruXbWLWmHk$4Te5mNP6@Kx#$zSyt=v?e*oAE zH09_M;(r$z)ZiWf4mtA|pcf~Clpmn4)3;BY@v9-X4fdRDeuV#0bZDEQs~zAKj5m`F zec~)OE(JfjapDtz-~7t_^aOjtd_km7v;eKx;Pbfc*te9My1Fm>wofpQBbO6m4$P;2 zgWdnl_nWE#1?D@|@tepXj`RDMpewh0dWz^Zwtk4LPm{kYb}(`rNRUTb6p8V)R)foD%7k3zO^IW>hN2jD8S4r4pmz8z`c%t+_A91O=YO&S-s?weG z7m`T&6rZkIYQ3KwZ@@2M3+?>#!LydYm!Goa`w!`Vi*?mF=^MnoYV(wvWA?wQvxIF} zNjluwcHCz0QGhmd6|y`&47>oqUJN;gObWrb2!FWD_oP2n(Z*H#r3`e8{#UhYHTMFb zzt_Qc?}5I7-%eY~-Yj}hMVnV`1GYm;F&{MF`SBM42-I^Lw+yHS4h7Zl4BU+sR^A%s zPyYf<`qOdRx~f^_9N2(s_wTC9e3Lopet)WJC+;pF^Eu(^7Hv{WcJt}eWVOG64MvCk zjKNK$xec^feeSrE^o-#=`uJe6**^GineQCOV+czCQh~nG=lm*$dL54?|5~fh9rxl# zPRB>vG{%9u0O|ii(`P&>=MTzvamUl?3pW9HI6eZH?2|O6ypPA@PXy-8My3l)Ssc$m z2FnST+|bqw9)avPSSDqz)opr{8INdGB?0o2B0G%^W%GgebyZM zc+oC+!q1pro{Vdb0Y3HgbBynU@uRCJHmJNEtm#y(!GEcMIj~<>xve#lx zQ^}egkFIb=F~4`}iecb`<8@WrKwUA&tt$rNkKy}7=OE%;)ESx75=I+T&~_Ef2U+ve z72X8SKp6{w+d5EzU8rE5C*LDhU<+t3T`>xvx0(vf$7Fxt2x3xA4>?{a;d z4~yUM>SMI&@Im0~fC58TRQq*BnXI+oUu~AJD|UdtlcOTO#k_Bxq^IA1%cWkx6x+reddjA01#klX0H0wT!R>`w5fxKWh!7Vjpr_=hVjz5!Vd78-xa7tI#*r zG%9MT-!tIf1OKGPr1SK1;A??8AL|!Rb6$Fkwyih|&~GEYiS3RCzev8fa68!lVIFx5 z8!qb*mC=aFd}7fAdH?f@Pgit8Z#D4)#eU$w10F*@Qi)&gG4T8?ZXAG3khP9VS1de% zr-R$=Tj>QCJsJ$XAG#sUJdk&T$^?M#k}5NCX9Hu%M|)PH2bIj(WWA&^aUAKvS>LFf zmulr3Vewa)3_a!=m9HAQlDbyWN_Gy$KP{XBPt|DwSI)HsB zU!e3+Y)(}h@;%~IG03-kG2;!>QT2Z~+h59F3ZVDpw0VVwH@{2uS#G^=m#^l1n?6#W zH5>a&`%9Ub^x(<1OYA~Rbi!F?7lrTFP@<+TBG zJ*a#u_ynIWZz-otOCQS7@$v?jCD$|H%{HHx!I_9e-8%~nOSa`rl!pw<+gqW3oBG_; zCtdhO<`AJagA*Zl3u8(#3mv_}j!Ffs=@;ZI}?8bsJY7j4wcdjL3X zd@M!!fVJjwY#jBs{S=~)2_5;pMp=Q`FOH24t-qLK(lH-th85(`X~vyQ+IeDg4c3Rn z=FXONV#=Ct%IKJD0d5Ao%(eWnyw}%~Z(%lWraqPrzR0JKEe&$c6yrk`y0M!2&Sib9 zk~l|!8pVWe)bRo}{9Vol{~}{cAA>Q1wI3OO+R&??kq#ShZ2cziwdT8&tVbQ=H%cGS z_7#`p%x_%UGwLeo0(|rOjG>PeqNB+7*sg8xM;%_=Pdd@BJ?8IeOq<+F{O-MkTmAD` z74wr{hWZ%d@&Tl2_o7$0K>)jPtPMbqj#a}4?RTsJXtZfGGaq@=nkyf>Z0K^3O5mXwI%>g^5B0}`aW$GY3Q;Xm$^q&Hj(hzeoa^8GXJLSPa2R@^M>{qWcz=ZcI?_?P(d$}$aol({&MKAH;@;9tkL z#6JNy$VZ<)x|#8zns=*TQ&t1mltApI`8CsVU(uuNsc+EcF8P{nBJ0 z0gyZsTmeT%*Z#ngmRPtmk5}D}IwJy{C zlrA7F2fwuQ74Y08xU}6LrT-G3I;9o_)P2hwrU5D$^M*`s4z!tAQ63_1k zP8qti5Wj@)aiI_R_kr(XopQSH1-^5?Nx$#(cZs)bVQIP8e&V(n`bZ4?O5KCNRzsKa zzE^q|yn^!}+n5guZ;VG`<4Wt$iK1HYLc47mh|f{O|B|>fVqbBqfXhD8G-LDB;_b=s zF`qE@f6evpWAt0D6gA72DWUoBOJZyPN0(meD{<@nvwixAv{#X#k8DIfI|%dR-;CdGzaw)~;BA2#egpZmSbh4)LYEr; zN5kxwN0w&lBRNa-k%{D8RLC3!{?EIljVPP2WjU0O{l9J5|07u|sq;F0By+t!!rq_I zRcezyvL=8XU2DqW$UO3;J5>z&e`E{vkkOHMb`r<9J9V2wecPpv?Afl5G^2+F%sbk! zf&WPVIZM6jNn32>6}!Oaf)@ddb3K+Ax{N*7vdj2O!TDyOYzsK{U-U)V^hg8Y*qtM1 z0{qq(e1Op04S!8}6#?qsij1%uM?L{A(k4x~mz(vGodMdXjdY>|Vo$uP|3vJG*b&ha z2T|q|XV3rG8>%&QFx#nv)trnTZK!9D62>}Ua0&jnfbuLLell~*c`j&!k0aa#-c)GX zqu^Mjdi#Cq1@?a=k z9~=N+|N9LwRIhi@XY7A)uAw4+ikk?`BkZTLM!$$O3&=}Y#$t=!v`ovD^7=|0;Quyw zj-i8F!I6D1*K6^=5gwiR4eZ1{!~E@3aP0=%Ec{mg53bn^z4fFozzwM0Qsnisa|-h7&`k*`S2Spb8HR?rtzVO@Gpeg+yyp-{1x6k}8BDf5H1<(Mn{u|NcGi`A24F1c=m~lSXSxb57=QsGx))eXM z!bdCV=rcJ&Y~qw_y74@_;#JA5Ngmrc4#_W%|#7ST%et@_KrV$;iWA z>l%G{U6A&2>BBqM;a9pO+pmT*SBdztGX00=ne+d*-ZHk4&x_2wY6$Iic#D)xzu&Um zDtpI1^6a5JX@6;VuXGI7nVDXRlmGK=#kv<&saE`A=I8pT-fb|3mc z_(u9Yed}-s?HC&WpSo?^e{`I>-p0nA=Pp3z3MJWQ`{$J`iK0F6j~_%GI2XJrK!2BU zp80XT;RsW4GT+E688u4komb*@VZW4KddZphVJx&J4kH{MwW_bU3|+h=K{rh)epkX&<;nKCo%si zE)OuzB&;S=x&L1HUHsLY?PE=;nSTl#Akq4 z8@l)|?!`jvjj6)_7$++P{8)E*b09CFs(3u!D>dy2ND&Azk7y@@Fsye&*l7hXLrc8iDJT z^+9OWioG4HqRxr_h~4MRk9EY4cA0BACGp^ie(D-9zkey2pQB6sVrvP{psy$4E_CKk z4=VM-9kpV}4#rSyK?%AtocUWxKK)@CbC*Tbow1^1E|9}me2PB#53Cbp<6i~67W%*^ zUgXoY|4%qJ%8btiU+1Gbw9jtvCBW(p_x-QpH#Xzn0f0~2sh(xSqt6$2Qy;zoI2+I< zyJhUM%R`4tnApU8Yrifj?<&u((;ngqfzl#fvO~(NffoKl<)p8J-Wgr8zY5pt|DxL^ zpVU&UKkvg;m&|wke%aDijk@Hr${i=NJ`2d4$WI>=xn1H{S=iR;T*Ekq)Zr}UDn`%YO*(6Mldj&zy4N11*Bbzzh zj!?%9VJMGd42zOpKl9;x_hu{(zqj#?dutLGN8H;N@%l>xqLQeB^>EM1JnmV^P!qA2 zk~=`6W7hyqKV9E-}i!z_XK~| z#-qUdCE6ZaYd)kAJkK65{~t_x|0To}emoFV2ig>Y{CxH(Q9AR3(K~a43mY@@1kQ zF4+|7eFkhsEDl75$agOCO;nTl4PvAk2Ww0pU^n!53~Ku};cwVM;kaR4(XUTBGxTIawBED@cCf}IkWOW+Q9IAy@X6qsQ;0Fk^jO!&#W{DVlYoqf*WiqWaWv5@ooYI%-DCd8Xmv zwtkqn1n(p`%pxz|JV_O{S55_f@@+xwlC3z}dPf&adq;F(!UYu=WajA#d?266Oo&gX zsEYZZFYD2lh28AcFBPhD|9SWv)91qzKj8E}&dr@CKab@g+3qg_84K$(c{I`lVUW3PHD+=yXAUY@%xgU1g$)?eFLQ zKkU5=d{o8RKYsR-D`DA$5JE&)NXRZoXb6ZQQo0+GxSPwKm;?fdCg5U2h(PdCIH0c9 zB3^0{0Rhn>wU(l_yCDg=02{Tnpm?bUOKs~5Ew#Z~yNb2G*24e$%$#%fY;soX`~Ked z|GuB!Z<5(F^UTaMGtV>kXD-ZePx#%#Pmz3(DTA%c6*kYL(7bzWx~kd#WFAXSP(woWt^WMZkrNvcUVw+ z*loG@Tkz=O$*!o-XdrTb7&Nj{QKtk%nM1$>ns7tI5UPbi<4wFc9kjEkQAEZuLj}q) zGq@F;HQ~0*A&Kb+hUtW1gW~PmRNUQLgGOXhNp;XTocwGKw~Zc>n}tC`nCEs=xGj5V zqU&vL>N}9lL|@SGbHei-C9b=}ZPzh|)!WcQT2EaQsyH}?SV5gJ*zysXX#@qfxZ5(_ z6}Sie;9n|GlXn{p9t27KsO_B!Lsx~-(2dk`-1~xtM)yi&%&?FE-wL;R1|^zk38YDF zj1_48+|&xY0hZw{mj0FzK%esR;gyx=aT!1*p-W=)yj4m3E#bC#L$V7D9)qFi043ap zIB+ev$8f}B?5;9`?JR}2hSBpJWhoRoDTTNVd8)hPQc4x9CLh)O$2G(kwy>0~JPCFS zcXL|bMRzRgWNT&r$%TOi!b%O$KdV`i%fsz+q6$;}SoDO36fv_Yt9~3V-5yR682O0w zhx7oWabY|9>wl(=9LZXR*PULp3a`0&tAOE0@bhJqLxHg-_<18$;{!i7Bp&#Q@j>B1 zv=5_&CY0+R3D&7tEo0+!v=4Snr#v)rM2*7)+YG@+2W^dmpIU z{zQnju)rMAfXI__Pq=Lsb+vJ;C><+U z#8+gL6=6)%kiNxW%lmUK=@?z^^UZLgdQv>{C@?Ud^*Ad6*)wd9loJAffUdb1QA&|` z<&m^Xn#8q{Bz==7sgaUYO}=T4p^yeQb#Fw}bQ%5OUc%?2MBEBf%4K9_=-rhxrlt|& z`0Qq1B^#a5mEE};$@2q1XZai4Ny#bbhzlnCRbfuTA6W_#-k}r}0*l=(r$8nEnj%J1 zWoiqCCInra9WXw{gMXib=Tq>_nhb10%}BUgtReV!!atEQ-i>N$ID*>B!MJ!GnXF%o zaMn`|S#-6#n1vhOt+>}uN#^MPhntVRjaP*YpMQf_n;B+BfrrVJAxN>?`HfgIe$Ri{?o%sT- z;|K_&DtbReeVay|CsDs(KZfg)xuH3=AkI_%Azci_9D4cZF#jB>@KuG|#w%A`R{%X- zaqT;1sytPNl;l_fmx3a={#tSJS413#Vx!;y^&P27y5ZLdtUX8O%qy3;&mX*m!*LIP3M%|!dI>mit|GT5@Tn&aSuAcFNx4jn@8SNs%ROVz?BqIwkZ(L*Tk$05^Z11c^X ziT%{VK0mP>u9EG&qO~f#rxHx}_E)eHalgib5?~DM8IKZ<02{dFfQLXOSq0-$Xoz{QBxzO@C%DWhfMQ z8KoiNtm`zCvmdT5ytGU$EU25izS{Tj%Kqz>;k6v8@>z%m=4)aao_;=<4J70K-eMHf zR-Sx|5dM)&gofh@OcgU%1jdVLs|>>VgXvlyES~!?Vi?rYjolZFFJwJOF#c;sG2=v= zTg=4B+)&i!LesXLa17i{zkebWD?-Kef^)GESrgM)=XsRcyl!gNXhLb?p?;nD zR(LVf&`^MmFTY`0!_<&i(2*qOFEawzkHGKjwIzHq$>T1NGsZ+$m`K3n%FO@WBb(gn9XBZmJDGEhDQ7w-soR znYz_}-}Edba75w zo;b(UL0x%yK=g`pP>L{#3A}GGJt@v<%DNLj4Mm}b!jM>qa)w9PFP_J+{|D&K+bTkc z>(6O{+e}Z1h49q0Su8Z*D;65be-Ykj3A|=_L@Y9hcv0s$vB+p@1K8Lw3u7q5K{n)F z5fWzw{<<=}gHTNg6i^ICyyryLl0bHgiM!MUGR5*1b9g(!TkZuB68<96$dC%idPah) zMXyp|f`<77_p6S4q{)2{hIMklpkXRH)7;gl4BJFL^yFbgFMHg4H6vH*)#0`!pdOXM z)tIc0CSv6)_IS>@Ge{F3QdYBssA*IDu|e)eHA&+yA>)dmaDcw@$e;4{o($hAmQY6@ z*S1mg8XAgOMcojP`3D7eGz<%3dgG{6g*6KAMlE>T7v=!#BpE)ta`QV++5 zw|@>G=`_40!1{oVD056Krq5|MgSsCXooyAp@P_%J3tSWaCYEDBblUuZDOVvqVIG;5q9))73bejz4~m%(Uc54Pq02r*N` zl-@*fvX-fw75cz?m_?>z9sfB=tik7%CO(a%#idW&G;cIM$kxmGy^t9H*YK3YyZd`+ z{F%F|JUt#QRp4#pQ(iA$D|j(BOT-a-V8_abh7^P7;`626l;jK=zC~h#26eO*{|T4> zu3>w=du925PqKe~XBK3sANZO4y2rXkNSe5p$wYfU2K)`|*SUzSPV-CMpW~auW$!)t zPP&U&>i)!!{U~zSf_$m_eaN>VPwgp#z6*M)U+QsNr5?y=dz{dYEs#jaduQUEw4Xrg zDTaF!zL2l?JP3F7Jzdxfp>dw4=Wcu(op_f3?(-3z-orHm26=qXGPpxd-LnQT2IqS! zdLZNNfgHDIEz)@y;TFIw!H-FH-wgO3q{oslWxUZshouGy|7ku)kmxCMLt}fpr|d;6Ci-c~I&FPkN`^jeXR#|7$PG z@@AL`_v2FUW~6yGmZgfeu>C^4Z2uqbOZwYRz@LSGzmSYN(R*MYaPQ}M{Z5|tCjp-b z+JLvcUHS0um+`{h7hvY(c$8Pj|9g+U$iu$G`PGa2AK+i=g-1aP z@6q>pJnx*9UP!U=dipl}hO3dLLG=Fw{7;wL7&{gVcE3^dDiJbW0UlC61-#cuF%yT81>mia7=MEr@BU^Q>Yfw`LJ$ud8i6|J|bCQ=(6p~Pz5%2 zJc1xbLuTNTs+A{?aC3;F7_k(A$ArAb>q6eDKeSx@V-++&Sz`j_E%D*@%d1*UEP$cK zM2UZig^BWs@s~Dsw$5qa=ON$k^U=mg-a}sqpgrLV{P2MvAK`$YK}Z*zAZ?qFXh)mK z_LKx=Z$cj^0}XyD%KoHcqAzvxNo`0|5+<=5hJS`ZPx2;tZMr(Uo@x&If1_eB^G9NF zeQ7Um@lGaCws_Xcy@1XvMI!tWp=>7Yf9 zSpl&U48^E0YzP{6#~C_`#RBphM=STnTSd%m^4Z{4N$YTQEY$w{rLNt44_;TIO}OL{ z*wO!YS=k;ytiPwDo!Lu!)7E!}(e|Lt?y^{=E+@V=C-!vVI}v-ocH!%Qp2hpeuA*ul z=G{z0=tsNZ$6igi&w-w~7wuFbYrnek`S_uW@a6*VR(!8RJRMH>DFOZk+@Blp#n4lr zy@>Boe9``Q)%m5aH3+vE=B96?;3zvg5TfgW9$R_Y1pwhv1@1k`mVFEqb=`jgMBYF`jXBA zNY5iM@3+x?Y#Y5{m;-#A)YS$5eS1O2>hN;SRy3sFm^+CT1{XFbF_#X2M zLJjETg?$U`xTp-$RjCVOE;`H8#qR&X7zKMKS$wB$$g51(0VncnUEkFvtnacA{owy2 zq9M|89|iSOBhG)~MI-S_>Y;R_U&noHQujb62>?ZtQnao$CJA<75% z+?@su-qYCv+Pm33%a8R)e5crG3bUUw_=Z+!!9x#a(Lp8mBD0uGq8iN{@bAGasl!8I55SIc(fthgkFi?X9i1$$kw0o@U)m4ZgE3zBe(0w_-;eR_Lte4R zz56uA8~xRw1%=~%eK+>}bw3Z?&&mVN!N7dVFLl2MJhR{*mmLaT^3TV3-ER|J&vJYx z26*~kN0=8;J|72-FsAFVk$=W~{8%A%_ z>=R*r5B2>u?EiexFN{0kWapqeZ8Ro^dnWW0Xxv@Xc^|%WiSGEK40M*`EjZB) ztr%|`VMp3Jo$1_<1Lk6bw~mWv;UY_piN1armXqHI48u$8{Id9k`X%_g2bJ6V>(GG1k5t-@TX%RI@Wf zo$IW^i0k3L8~O(5od~ztk4_17>5NkfC4&cHz_&o}gWij<^){&s^|x~mbf;fBbb{}1 z?hN>)u6?lo4DHiXa6_Y+in{YoG0tR9f*tk0^BCOQwg5NMY({ySXO%h*0R9f(C@Y=) zfX8Egg1JrSsn>BHGQj66M%Yh7zwMVg#x@FR&u(G+#yfw{<35CR9zuER{21pW<@eG$ zKgIdTV+#LAKdl64bMthAq+ z0bFyZf_{E{>Fqa!o#P;yqXj~E6a0;Z{}z19pbPR52S5LDC}l3=#UZpKHD>g^9Sc=Mdd^^3>x>pq5o#M z4plp)LlR(XFlRUg*mgnc$blVwKF#kA`5S?s*Zo5aoX9hk3DoDgaC;p7O`Cy#2Vk(@ z1^oat%EX~9*c<*6eE06;e)l~CKhFa86!=H=9{G5+QE)s-dxNdgO}E1D(Exbg2mT2g z?4KOwevbO3n^JIg^+mY9jxarY={yzQxbX{)II9!@jSsyF{{0MoUV!-&G`)8xpLab3 z{vQJWJ2Oz{X2Cq*+*pM^WZcWh-}hlhIX!d%`XktD@g+X~Ug3XwnDd{Pmv*aPYDb&f zj&j$Ia?|k<^k+`#5YDEyqyDw$!rq1NSh$y=-J-H$gLx*^f0^HAz;MSyJGp^|?Ng|H z(0*?!AG27!ZqKBCKf>>J+$Gk&27VVn7eh}3uTEfiWpwg5@&QX!_+7{7*}e@hl&SW` z*P#r-&B*!P?!JN1wH^GW{o(E4S$j2fBl15VU!4C-dzQ`tqfUQD{I-F=fUkwdac{v) zZ7nYk?I<_xcO(D1k-if!KLwoujr9O3AMMX>L0G@k-cI}eHTmBJ|7YQT6#76l$^>YI z{qyaIU#B6X)V>q?jY$3v;clztmPT7Dj1>=hWxE1)NVEPuEH^Vuz-@=@T zwk%;U?)P0Ib$klEufq?<2~(V?J1C1C=(||B62H{3*t)T3FJNw%Z})F33c!xGucLY# z{47BJaR%!O*lW;M6!Ec8$41!8p?!X-<0xpD26K~B>ewmsA|7x*U^fF7Xx^~{x)Az0 z=r!O8_}TG{Q|bsrc+s&6FpNLweY1|;3)x&B!%(SXGxWM`QpbMud9`xe7!TMc=qI1W zTc`ML@kAL3Z1)Nu;B-?|}l9litaA`h=i!DN*6FzgpJ`FI;VuLF$Wl(xGx zX`U&}!JWTm!GU$DM+G5CDGvA!eb;8?($v;OcZ-p~Y*W>A80Mo#yuPaQZS!g419njY zLGs0eHd=okNg|fyZ{Ww&MAlz;Xf>3!Ji${^fHo{!ItoN9o;06R;adtX!_4xVE*tO`s{gZ#1Gv3Fepgc_?;_37e6WA44CIVMcr-`vQDyuhF(psQArd+I6(G_zizE z&P*T!DfP8u+pb8p8l5hu>v_)~&i*3g#2#hR&wDVdCwq(0)$gWhKABB0lhJLZ&0;ImNkbEZL(&ilfu%FD{8M(J;JKg6 zmSnR0L$;*AqKzuDj)O>eJS?&-jqD-VC9gSkc{&oXZF=#Y?%Zx!3~?m};6qd0_6 z8$ThG0*&y4bI9ldr9d;xJN628tg{BtCbxItUMq|@0@tnCfMwM6ZJ)s%{a3(k6-MJs zSm1W(YUrCO4Y;#l8O-Rf18B1YX#ZJy{4h(_^?@3E(Lc~V#DTl~QlJw!Fy;(wfnKNy zzcU}0`4dbc1oEeKE>Ele&b zzMbYk!B2mN>>U-xH0f|4tr$0SU1oJez5d~;a1^?^@OUJ_uR1C4P?a2)*M?toyKUkcWtTAiV}EAgNF zqpXl$G}g4f5p*M+pI{8}8+<|kV0kgj)c=!T#N7qhVz`06!F=c?3-KhERhWvih{26C z_KRNc4zB8hOh7_*TcjY~tOuQ?;99>F+-k)+O_(wMOM49C5X#49=q8j|>6 z(}6aB$Saa*S!`85$5@q)t%X73g2U)y4<5#HZsqy54zV(5EcqtdJ8!rxuii_2xe{Kq z#tGwxbqOOppywFi7c<%VeP2jI4@d)uck;z%61H zORC`p%3U>W*m;bC)K|mK9%5r>eWIQbG&VR4v^mE?dyB9~r(qmhlE1MHn?G_XFk+!C z3@qA)+`u?=2{}d_sbDgKABy9!Fr4C0WCUUkb|%$(k=$Hr+r^1IjagX@kYjL*XiLvR zCWYtaOgSdPBY?jFq=I2RZpkMx(-&tk6{)BB4ol=pJs9D`GbED zr&2gzIC=iyTllbq1x6uV<|oCOl-D(KUd2Lj)*)=3p&d5Z;n0umHrQ1TxpbMKp#(c+ zfV3DZ-q)cc{AbAzAc={YL)fzjci4PGTKSfkG(nCK0}Hup&){8QbY- zP?Afrs$QP1NXwFe=Jv}J6S1W=jALkHU>a7XfC>L<#vd6H|6|#Z*iIYXhE*zXhQB$2 zJCV+yZ5UyrLAB*?vM&n<7G`0<<@Thfc&u{aiywR}H+ZqY5Zi6G&N<$@8DT(AoDW5L z*^F`XXu)X{a)t?sAS)X;^0zU`qhAod20e|;Tn!yhV?ObrH8ngw)o*Vxx<7o(!)Sio zf&yyozpKT#v`2;{UqeH%wk4;P2N$o!|B#vVr6#ASLm`uKgu?CVSjzx(>1H)Zco@^E~Q%zIE8nOEP!AmhduY=&Q zrt=peu?FR?CM4G3Qx^)H9w}0z#Zfn7E3*kNEr|=yx7}DFE<_wjJydnm#Kocw4G?Nf zZZorb`$e1K%xR_o&7l*V;$kno9SNW0kwEDON5LBeWRHrATc{05d70YHg)94EH}^Lz z4mB(c1-6V7)8uR>uDW>fkFOY1yHSRlff&IjOka7D`G8DTw9-W4t$yHn#iRy^f6Y8W z4kMr~O0`ZCCyo;E#XeErG4m?CUn)+NA27vk$g~zSo-h?B(i^5o1-SB1v%l(##6pga?ROMs0$n~wSI{r!%jgP$t}ucwT}D?NqV~!u7Gs_$ z$CNG>b98eJ)WppNIy7>Wx;gz~5p^Ls#$DLC2MjsG0%KseKl8X)ggRn>hMh}KJAS8F z#3+I$5YZNg0^gT$XUNf3hG+{TdV=$9S1L|SGKezirfrO(JpW%~6SAKZ(vvb!8(Puq ztU|N+2Tb3g?Y&rk!^D{O*k}Jmsm*>Y5I`qD$3w?Ko1l%*hCY;eK~=i-e!7`z{6kHw zmbaMPA8xHryQ{^tw6_sgQT!Zv9AQ~uYD zdQS^xP$lwCFQ`mvXgXG;-kGG#=j(^e=NI$&d?P6Ehw-T2sn%pF|AXG|MS)iz@ZBz^ z;RWAN6~36&o5eKcE#HOmTz(guyt6s`S!FK&xH6ajE=wi)DS1Ag+x%ZXAEz00kvgNM zS@&0%l7Gn@Tg^ufZjGgeXUMt&l@lY+H2vnj4@&Up4jd9eF-WPe z8H=OCw1!apM${rg@f&g$_$mThLI}{dcD(3|b2M_0NH(!ZAg?$8_KRZOf)&Zf@c)zf zC`OC=-<}tRn3^xnu+dnHnw_$Ku>=(?WeT+^=y`Bj13L}^&+~>uZa%2h#@5`OVp(ykS_rJ!}sF$U>r>izc8o)tJk*1G2?gB)%;^6jNqb0bJQAW2O}Y0dFFOOLL= z2hh6<03FuE2LYjbmdcB9NU+1eUDB}-mq9M+Sf=rs2comF~ zqjM}Hhmp(OFioU8EKE<)iDLq7=F4Z~U_=3KJwO+YOuZHxgVz2skPQ0)cm!zt*BNN1 z0-~_n$m_z@!p*NP#Qtm5>(oV+GV(2aO%9hh0FV{47=S)>-^D560o0RBA#4-kCkr!k zC!!C={DjWl4ci2L4?mA*eH}yNKSBQ-Zudjq$NTH#BQQURuDFFgfCs4pi! zJm_iAUxUtvo-QyowEyMfe}ASTQoxSEtoq7`Q~~x0m5KCypbB>`?uZRKqxO$O&O2Eav#ciR6$Is=qGPFrFOvxg3X2%q53Oq58&D zgN+=fhG>dC)hA9Nhulzob*f;l6ABt;a{)=}vhY)w9b6N3%?-nFdXQ> zaW;a#Em}z|U=3dQIk}{@z$KlB5Yx#eJ$T_~|Ts@f6#>0 z1etQUCJOcI6zW%}uo3kuU3eXGuJ?qg^i-Wv543ejIrB>OMyXR&uavq(ezkQ`sau4L zEB_bN8@OdckA}|ZLmh*j06h^p8#)Ji5_B%KTDJsM#i~Emqfn}tNDhltf2wz;8ZrPl za=6M@i2^3PAF3}-HH@Z`r--Tm{Y$96B-KDQ4|NAs3nN=d*5L3#sNOACIE@Gk4u1{R zm&+9{D}<^gX8FWS3K3>ilvTKKAzEk~=M%@0!-uTQvkEsc#8$6-qKzCr3e}g%6)rc# zmdt!&4mq3;)mO?DZc2zv*?c(g28WMXZ6D8=EXkv4lzUzoE+$f`xR^|(1f_mQ6|-8f zCAI(B;Dyf#%!)jT&Vm=QW0wk#C3xXewOFMw7u@|rE@{CFpD-6HiX>J8YFVxpyzn=2 zVbvsyxg?2M6ecTp;bRtts>wL!k|>TNmvO-h=a~ytlZnhFL7Ye~6N48%VlGq}a+yoK zm`g6X!3!TU7pg#0m`j{Eg z5BXXWUo$6!fYwM}jAS|z#TCjkIzbvrj?)b*j3+AOYLaBEFBj{jv1+Mrv<30E)_#6y3 zRaY|viofOS)+}A+%M)^P=G9>@#Ss5ySIt$mfRh`kgi^d1@2zv2i^Y;fun)#BKS!^^ z2ix)9xd#F!p>F*e%AOD>19<*Qh4|7EynE)(XaKhDI>gxjdDCn~RG@qCs4(2k+j44mH(vS68}<&G-^QjoH)j zi|~}cGOvoC(Q8_6y!Y0hCEv+n_S9j%<=m_Gg z=hq=>Az@PO{Nmcut7W=~3&CqrWv*IgQ0(R_p#Vn%$`qMN#e2nhV)Y{W*18sy3bo?= znt4R81*J8$9?{G3R*GOckxPibe(mz5H!oM|?wVdWefs5sz)L&v6Ldu8YU^q|-m5r& zsJzEj*LoHMubKD_`=IOy=4sW{D2BW~Osf&i-dkE)VBY{uO38=GJCD2x2~)1B5$9J= zF)iTsxDroQEsBhSw{B52MH5lH|Hw!GaTezX(e66XZqYm?M&Vx|Yeaofc%&fhI8Q+&{0EV+Wcrfu_7j7{ zzwy<=V_PMuNc>0trSP;x%6^PGH2W)rArc<*HLZ$~ejdI_6P^Ouz_)FJ*?{3NtNt34?H{2WgP;wLiYbS8AnjV^KtYKpc8+Kp zyiCBh0IgEP+yANsgAP&rBmtql_qaJaFhWG??{T@v$Y}KG@3i4E0^D3d>52Py8lb(= zVhOj$wHChdj4HQ6P2EX$9|0eqVX||8l1ogzMuUE@Fge2#`m{>37_rE znKMrO^y3G*e=xp$aNoe>4krY&k;)%SXP-J4*PXW+3{3t}L-G#~HW)?JRNwQv%i z@ne6EUm;u0mboJQIUSp~LUky?x1&TUoV?*|*_(@%OH6`S%oA37>#DF5?&LlXIw`*`uH%hE&F?18k z-@}^rf$^meO$>BAbb=tO1-QuzW6$$X%(u=z?CGti%>v1PS*$cd<-e?~I2595!?7KX zsmQ%yXn(+RRefQ;TxNd%R=3mRd&y{R4*wAGB%HYOxNw+mV~F&qb9*W(o82wuatjul zNJZlN4U(?L27-J+`1ZnvC4&zEOVy@x#eBvP%(dvyPbbW;RWQ!{AoB>CPI^m||P@C1s{ zX+urH9^>#spsA*`(3L*P4I!s(QQ$1cJrnIO_6ga9?6>(oAujXo11-1*o%VNW>I4&O z&+Di?U;IRqm0c5y{?>R&N2X#nBd+YXuR&jVp(4v_Y~n%zeqR{spB>{zZTn$I`$jyp z|6R^BIm&&2AUKP8hmHuw6{C%Ey0UmfaNLN?O64ZO=&`cq3u`-c7p{ya`m@1?38_Pc zfm)bc>;nMjNMyxe(m&89;r@(S=fHQF7}7ror=d^!@m_+VSRw4F*YRuUyZq(DWMwev zABhYm{dk=U+wlFp1S2~s9=4wnG6;6^1i|{Gr~B}g{aqMKFtU^4VY{A0nn7Z&cs{z2 z1_z3q7WTvIV52lMAP@UP3&HkEPxuMQVc#zy7}-fNm~`%jKtz_#eXhSFYobe)dB79Cil4s0loq(_JHNP2WAkEBP3@<@7gD37E^hw?~z zbSRIcN0Ge2Jld_pqun|@+O5N*-8wwl-KP_W4v%*0@MyOVk9OF{Wm4v%&<>ZDJHN4s=*v`dFayL5Q8ONU3hba=E&hex}R zyum!$sl%h4Iy~B`!=s%#Jlff(6Ne6ucIxnGrw)&H>hNf%4v%)~@MxzFk9Icdq)&%O zJ9T)pQ-?=5>NAw4I{erPZ-Z&SU5C!wb!fU>hko02XtiC3F57izuw5s=+ja7`Jx3?a zDMMk~bjr{+o$|7+PbaKSIoPJd^KCl(-PWjsPls>Yba=E)hez9hZZMA?*5T2^Iy`z< zher?V@aSP39zD$R=9iu-qy)%gOdWna%y{XS4xCo~Ne?%|jB)4V$0D%LtOO%FDQ1u! znMg*zbgn4^>;GJF*1%|OZgAKrS~15B-BIO$$I%}i8n*vE9at1idD#0uRsC&9d{@Tz zP6SrBNrs(LVbWViWf-l`Gb7F~Jte~;Jd#!^{$5o5-S*rv?(hCcnx&9eh7G9xq{Y)@ ze0>qv#}*mZ6M>Dmj=^pl>sMilVI!WnRMMvyHc%9U>AZt@$k3>c8-BB92u#|UBS?!Y z$&avM^d>WXrHdcq7vQ z>XZid4+^8EkK;QR)s`^F4VSpJ{y6OCr-#6#&!X^ge{aKEBn}SSHbUA(7>U}Pq@GCv49^5Hhq;)n8j2XeV{0MBLTwcCSyprR%SI&o|iT931 za`tnO>~G^K4jZ8SC@{HfeDib!c1JZi`=xL8MPM7{@^TA-DXv^5Wcl?jq>5NxAdHU=~_xWkEXNZ$jLZ-oYhWbB*u*kKj6 zq5B!MYZu8*inWuf{NHg(NMtEli8d|BeF%bIG00yhZTmNWLgE%If~P-#J18Loz-T7! zBweET5qD@xPj^~*h=_dYEp-W%xzJj?x`xXlCa{8-jyvKOWE^0m=ei>6?e5-kygN~0 zfdFb@;4}iL^3MrP6h5LRkByjtm-ebnrW--cr=Gz@=NrF~PY*1ZuAt+}loK9tBIxrn zcE`zy2L@HXH}a5RHo=|mjp$PsqjlGVQ;lprxR$L4gF2>LJmrWk>5-N6F?}l%fl8kY zQANoTPWvzn@XVA-9~ZJAZxm)JPJUAs0U-~L9=C^H{ZL3RhyCJDM1Jtnp!Mf}*W*u% zX*{hqNAYBCx6|F+V)l91iQ7TZMezUrU%~GLvG8sSqF{zaPf^(#=Cr!$mh%)G)gP=> z{@7pU{88nlvasMw`P1VmUu70ZFwr2(aI|r#^2h8j=%H~@%Pxaaa+y4QwIKcCl)-)e zfSX=EdU2fb{2nT9&iy26h&KLE1;{GFQ?*YTFd^IK>D*)W&lq?VF+)0ngW% zslVV#+BZir!cVcr47$il+UHe_@Wa}AW|#I+|HPHFuTe3=&kY)Li^jZGV_v5*Qy;{Y zwC`@k2t4;`%v&_(9UAi;y#$2v3S8L1*H0C85^D>RONn>86G2g5)OB%CZW8S1OKcF#h)tGl` z%#Ul#Pio8uH0FTD+^I1i)|j8yn2%}9uWHQw8uQy4^J$IwU5)vD)x7cRVLa9s!TY~t zpE5+Jpv(U%eFo{p+%+5fjIvQTvtNS7o|x>PL8I|E2`#AKk zpwTX5pM(BAH0HLrXOHf!r2FpK8)(^R2eLnaeg*mkXtWpE;D7dK(Eos@xc;C1|Ahwj z5YE3E4?JyJkE?~g4ShHCcc3>x-y>M;C-A*jt&@tu;>ZVlI&=Z_4CtBAmqX8jz5==s zdN%WJaj@aL5;W>-iQfCi{o7Hd2C3F_*G0~cBq2RUjfcqHzyxfBW4hDalJ@rNxDEwF ze%}n+_kD4Ohw?(zr=_`Ns|M@|D!C4WlS@g@JAZuLveH#-9vJ`V1w=t#ixP)qJC&+SFV|6G~& zFYGCrgF*hpMd2Re0sd>a-p8 z>}u-vw%l=kYsp7SG{J?~?_(0GZMaxMu*QKd zG=HEmIQS&QgYIRa1qo|ATd40j^ty1XgR&~Dq1iV3MJA>XnN9NO=<1H0$@;uTrq2eeRy|`RfO`4v8-;a#`!G26gp=Sr}KZkx1 z`WMjXC&*o&{}_>d{hetZJ-kF~3z_ zPfL@uhm`Vj!B9@ysZB406tGaTRcTaM@BFG_oI@R)KJWa>N~<;w0w6O{VXI16*eHMObf%nNCEkkC zMfGA$35!F4dAxO{SC!VJm0msHRhfq~hE=8Bx;%Dl&dOmpQCI4vGk~>-cjOd0N6Fmt zDqVGTo_VEHQs-4w;^-kxOjhHtAcz2uX|*`-$-R{>taf=zkhiocgtj`*?W%R>)wzl* zOQ#5_laTS!8qd5uPWZfP+*B~B+EwSK6P53_@}lX}i!Psm3r(W%5&3~n zTP7(|&>+g+jOj%)W+8oa05z}HE!NcK$wh5;Dkl{&f@gBNuD`;0Evs)@vFe+)rM6Y8 zSLNMwGfte|sDtl{sCcK(F1j3}2_1h(jUc2CP0uVuuM5xDhZ8yV{8O~L@GD}#DM32v zA@b_NXU2eoMY{e`MRegY@_TuV{LYM#-Z$XUw7R1PJL5%zs#K>+BeGogIU&vt!V8 zb_}}Cj!}*ZW8}9mMt%!p6RA-za5qY>u*jk;P(<$eX^%pPrk=-p9bL17$;;E%vvB)&W}g#(Eo+#r`+w zPno&(9EULrbHm(gkg_3ErX!k+B$&sfG<$3=QioOww^mN1l~HZm%&=k zO&sE;04(-XiVH$ks}ZiZf|`X6j)9hk#F7W=!Zlf@1>osMc9 zs8*pCyShh|!7O}_it4U4STy%gSg_{sRg}ekILf=lJ`iR9sul~aZ+wBWIL0zpi{n!H zJ5K(N2OYi8Ht1^TtD$S4YoY6)=R+@mu9y8!V&DH0KNkBNL(o|4|272np8>R<>-v|2 zTkO9>TM_NwVt;c;c#HiU=y4zP{m>6Ue;4{e=t{bMC))Yn35&a$%5d1Q@h9e6-v6Hvd`LQh4T9qlj5lg47P zzoyzOxO>5Zds<5r}h8+2I* z4LL3D+pst`KyQS;4f=NIJJg^S$7*J_IC25ELpz{Tp{GD!20axz4|*E(*VJ%Yg9UFC zX;tev-i8va_1s3)$>NaL4poT0!Qz;JboVpI)^p|hp8f++i(@PDu;yUp2IzgZ$tANlfn+`R*W#{g*@hw4Uig*gr?XEeYX0bL1Q#gMcP?1)0vI^aWo>KM#o|3GzX9k@$1TkL04GZ|XX=(ouhdqPRQ^|)cB3P}?K^B*LVf=8*_W!ojV4gOLg z<9nm;-F*Lj+qXTkLzo%mk6BFgtIen40f za{aQUjrVLaLK;cxQ$aY5Pd9YIl?(9873$*DC2JHL`_2-Cw{wKw;>uhZyy#cgY^=Eb z4*#7f-s|P#EzIW>_l-cauTGfoFdr2$3d$`NBv5 z-=}3WeXjQ{-|@)KUArIMBRm4Dvqr!y{%5E&u<+zZT1WCfNR=q|5Dd3Iy!9cv+xzr^ z{el7aAipRyg2O3zXMpxcCT774y*Co|9@Qv6mbDZlkgWc@vZn_yg92yoNTq%_BGoyP zZ#7!PKM*2&*psvJi&57adaAGiW{@=csI$BR_e-0-mQZ=cE2dC0u9J7uGZN~{RSmc= z`Yl|ajfW^mLJj$}2baxn4GNE!i&p+ZQmDMygEy4!6tl2*OOD-!=V#JI8+(RnRJrmB zlTCevshmH;WMhvoIc-iGzp=htoQTJlLimU|gP(s2l{;;C>8YH@z#om`<|XBH9ld=u zy?*z=%AjyB&}Aqo;WtOyk3qU#j#n~fZxz$-M!RKxa2R{!irh2% z#f+#ot~d~vS&QlLMemGQ52oXOZF=Ae7t1G;yq_*4ABWdRa2NkrdgE$rD0tyF%?-Ki zm8e|WkyEZd5>*cA|4E*1!Z(~7n^Px_;g3O0;Q(B_FB=NL8Zp0LEFkZZ2cX`R`TbuX za=7~F)X+G;7BjV&5vVV-$ZuA?I+FN=*H|7Yr&C!YCR@v`N;yW|coFqtiM+qE5&V2j zpl1~Y$4+Rp2oChcjz_Jol9D|6a^gI?`x!p0Tpl^EG7n-~MQ%Q?vef0xn_rz50T;|r z<*GA^rWY1XpQ)937UUNd%qk+Gi$)$fqiDwEMfvb&g?N=D3m$K2jVyxJ$dUQozVj$8 zxZrkPUd?=O9i;ADlrE$(2|7vO^UCIX=aI-kuyU!oSY7I^bX66XxDa;a5*`7UX>O&^7Bb_B8)8Y)UX{A zi}H}-YSD`w1gVo$qbw7LjJ$N7TO=C<+=^sB4M{EoNwhiE(C_l18TpLPgZD+u!*+xy z88iWq7Pc=!v%jO*Gf3uM?750$?zO9LS$q9*+YKvPmfQGM#y)meax?^`jf<{JTy=_U zA8{}l5^XmiFsB0K^|I!`rj;b#6^-bHyT z1T>w5?G$pbygHHXQ&ILiV6R192_*Thx_NE|Hc!Mg=JOz9$DQ3O%w0OKB9Gq-Jra8m z>RmM@d3-NRUZp5jrxjz@1Orl`XCNVs?(xn;4D(C9^GXpdZuL%MdmrS09G#Fxw?!++ zWY|c}z73^BSoz)%6b9^!k;}7&zcY&p3XAfw(4QI!E8jQ`T6s(B^IRnhJlHrS9zDCEyZSlZS=_p(o`^}w5_48$K?4yr`npX$l;NT67{%4b`B z%gwgcH`tb~zGao~rXt(zRGxJGqtJgP|M_3d|8(T(tKgrGVc1vlf5lhykFnub!Vi9? z*L&*Rd1wlh9WkP}lInyWJ*gc{SN6NG?M2jfxN2x1t?M6c*yv)kKP70T>Y^JIUH{;( zqDIx#i+S~~MbV*R!~;H$s$Jw2y^E^;CI8@ay1Z>ioL`3qSPm57p7E`>Enm0drkih?rc2j+@OjPJ)i=O~wKiJrFQ0MtZ>KujC(m{wn1tpZGj!Xs3}^?D6X67ko}9@+r)!7IDiw z^_CHpq20F>*@z~LCb*{GP&(Rlt$zhb{2b(;b73f4-r~jmD|_xR{-|-y!+xxx{^jmT zNC#nWUdkQ~5<%{e`NA207%<}$wG+qlRn_sEfamU6B)#+%P`K~**w}JQal>W#* zIkrJD5A7yB)u4g1oBQ+F9>Caqi^b3XX>g?k{7*~QS541om2W6n7@d0S_{KuMuc6Gv znjDNoXjDSYo*taWYm^wdp(u`vn-9q4ajy>ZYKUtk~Fu&?~rX-r=Yt)zHWB2n9#;4wo>uA$V(}DL= z3}8&9ksVymKYL#aO*h*b!9LH+Xo$6;aMc9-Qu> zc*0|K8w|akZRHiYJ$K_k%VKu>#Cyy)c!HIOO!yAq1c-`&1;_a`9(akdJ-*V=l+|0_ zkx{WIRAK5!p!+NSh)G>yd{5wS6=T!`Ig$G;)~LvsVbFa8^bUmi%ziejHC2X)FXoTw zS&6v1cGH&~GSOgG`9)_&wMu_|gwId;Zx)h}^h7lKBjt(CqiWTcGGUtPp9KuNiT&TT45!a^^Nkd z%y^YQlUGv3im1tGpC)e~k{*ty!%0mN5O!QaB_OGd&O9cyooIJBUG#d{6NtxW;9d@9 zggmlwKY$)Xcwdv%ZS)ws7Y2SEiBC2afha~=*qsa=so$t=k3wUOl+LL#71jPwDiThx z-&ff0tEt&$PjmQbm#2T3F;t9SbI5f~arhyp6>n#hSA3R)#Ti5Ln}=ImmFIt4>1$bh z{>c_wzrXUAaQsIC-TfYT1Mx)CgWl=CB|S@ddL&BE$sy@c`Q><<-ybwNTYG;HQmmF8 zqLRE|n%-8dnCR?i+@IRA6+6{6`GOg@5m)ihi|jaS7x;zZfdz0|T@N)`iL&wInzU`k zT=0vZpZlpSM4@P*9PN=lg8`!X)yUd=YOxPq>U0(3$RUHIni8tKIKY^dHkv$GU2bDW zN0z(WRqQrK+09L1M z5LDRSgZ>cu&lDG_KCTV;8llyO5b+G7es026nBu8bnXr`z{_ypJ?|P%}dUFJPeLR&z zPERM|J0qkJn#q%(bAj>#aR&gV{IEciimo4s!SOl0vBH_DoFor9-N)h=zY-r=;pKtl z^ZPc0`W4>qAarURp%dH_moKPUbkr4#f_{Djle{BLq*S^4ObElyj@L*e$RPC8Z|_eUD_Ifl{C zBlMGuAH!ifCx~TBc(A{Aee`2f8uF<|2l_C_V?17mDrxltJ+v9x1Z{-YEw8TasC`du zxto4BQynyqMgvZ^CMPumWHperQMDSKxTUPWeC4khCsHTGRe=A)cJp6gFkQRE#{@xU zIt=;L!jIe1>04dNym1fraNnUya&c=Ba5I6O!%;L%*IrxEVj^o{1xsB&{aTh(acumT zoby3?c-De>I0w5tVD$MtRpiY^N9j%1TB`_(uOKVPTb3O7iJ?(w!hHfG=>3p!<$`&f z+};R6AKudDUUkduht||J^hU4pj_+A;a&ofvDQsbYp8ZLB9fHUekdM*Jy-^Qe3;zb0 zq7`zw6_75HYt$px!f)W3NzzETM8C%S8^RlBhQJWS+%W!A*)5zX67xp^!#qrAP z)EASO3vR}cpWU6HJiB`_iI5q?+wn2o_Fa;pO->27C*W)Th~@RtwdAD9D|wB3_ipI7nw_Qos$jx@sPqjFeO5qZ`FD}k% z0v=PjScpT}FqwZR=D>u1Fe&bhhN7VG8O4|wJ~)9VDIt7tG&jYEpB9JXozuFyMfEl8 zuqv8Evq?E@N(*G!!`1bbTCu7WLj5vN4XrWD0uf=vBnW08AyEQZRM{7o1EoNGhNGxn z`53H_qT+)*2Nhxjo>`p_!Ae<;Sd~}mEwO0iMi2oB!xg(ML`qTYJUN1e#jgDH;(f z$$y4V!h5Wq5?Q25`K_uXR0@BIo|@vIrgsu#R(V*OwXk?=k$6v;2MfL_3jJj{bBdO} zM9)b%IV_0$NNt3kKvqWaYlM14PnkaQ3UPI$yum-EpX6_Bg_jH8qWBG=*a%q`PH|S_ zv0h6wK4CC_Mj#>=1edfVP2UK=%3L@EPUVfS8&{Tkuc~u{emud&A|4b5K`ruOZCawI zhhawyk`oOdBsfX&c%$Sf7EW&EupZB!diI?22St?287$ehK=cv4JiEsH0D^{(zc?C{B zb8pMnDq?_nOINL0eY5TQ)yqkQeS59#=G8Vz9*HdHuUffk^|w|rJA^%J)-J#4Cg6b6 zO~MzsWl}leq5?!yJFmu5P)ngrC*d}pb1B-*~5^<br5AG2DPNbBSELWQrgOR5i*-R`*4G_#(GV-WDrTy2!Cy zh57WgOv71*Z8!&Y>jA;C7iV&A{8X@Pep#?gc~Y>vh`r+v;vB>iIKOiYXEsJ06)eBR zUUxUnN_`0U*wupN4zpm%$N7l|za>~Yakl3h?+TXh+#*=;)`;az;F_F+a2bMSC-!eo zl?2NPoUJqCe2}RZe)|MV)r*4VEaFcI36{?v5-joi1y|5&w!Q=N{%?v8vycM8IK7 zxfWlnC60IEtBDWt2L@LHOui2BeSp#ML>^9oUwT=z-F5`_u}ByB1HSAD+-{l??N14B zdYJo@?eviM@^{fSrv1CH{4ZNDvi~9M?_dot4&PS=VWJD)(||7$mj4NBXcJ2C-HU?b z0NjmmpWyoz;9tj=hIF!;fN+1(q0fZ>kG;2ni|RP{$A?z|4OtN>C1{S+n1u)>#u#G^ zSriQ5!V*A0MA%i(1s7NWQD%ubO-*V|Zc1&E>&-Qm8f$HurYpYG7$d}_R;@K8#r$n< zVr^r#|#o5cl7C>e)$vqFAq!qK7H%~ z<){2#8J2$9M6G)U$^VsM^M_38pMLQv|E^*4r+v}7r(b+3f7h`2zp9H2uwQ)2|G=>M z9~d@1<$qw<{GnU)&%peHf4%cYDL=THk9Gl*5cs}d5R)(8KZHL4AwBI)N%aDnJ=!4d zM<2<(0_2Mycf<9>ufggTEzSE9@Wr2C!}=WxNbkAjHv+s_cY6WYrd>h#h#vBx_oanD z{(|d`UxQqH3Hahiw_b02O?D$7Z9LU(;;I*Xst(;0LUS^McMex96t=`7v@-0*Z3zdab8)9~&fK)f$p z1+M5=81#J<_j#BfXvjd=zJlPp>ey*O-&GGNL;XaZ>$K#MeRu(_|HRll&(QKwjEz3E zF0Nk<@$C2#-N`rhr=A^g1WfqE^CMwj@O)3$9?yRO9TDPdX{ zpwJV4=J^rX@#&uLQ5y$1cY^w3>3Ngtxt*6fm`{dl{(cUwH=3%~5f@H_N z{FD{Pa2{Gi|0*?H+9vP+cnN}pY6^uuSR#9-m_FDTdJPkN-XyKVbpK!QU!y~Z`ND?0 zFA(d$6Fy|Y;bC4~(2e5Cq71tJyF85Ub6sB&C0<-)IfC}RY_6Jnu`{Ww_7%9W=)2z% zS(SIOGlf=pyRvg~Ee0&`#g&kdOgP;o)=ftSd!91WeWSX=;R9DqB%NcG>6Gd?})Gw_@S}UBGxi(i< zr9c*vXfw0_5;j`K5L*>9^NO>vd-4Hth!3E zH7PcwYDHaL>kW)HuGiU|N>xKOW!bFQmNr&bD=TZ7?Vz~6xw^i&37eVOEv}5hxev~C zU=F^xp|LuxN$h)XO2c&DyKt6r&+VYkKR55Q-hlH8*wmkw;oV2s)KFL5Y^Phaf)QHA;7hi{QN7gWP?lAguWok!%yK zJ%Vjm25G5jSkXigoDKC&)l5epX5`r1?<=G@`hevOY|q4s)}&j8o}<(H9@SxfQ31PU zxNx)07VORx`+9E~W?nCrlV~w053jO@3r7nvTE@et=g)WIP-_OX_BlIKuDXHG6XhIQ zTeQ&DPrPdy;1O0pifB1S1_Pqcq6k*>AmjQ4yGcXKpKqCt1aQ(2@^`=4GAkXTT7b&} zX~XQ`a)8aUi&5puVp|g}h@rg=^<>u}tWz}3MQH0J$iDslO;{wmmcNZO1Y%8Anp*1? zH8>Q=`eM7S(YCm`x)GUP%l}&GU(5em>0itLTIpZQ|61u^%l}&GU(5em>0itLTIpZQ z|61u^%RgSf9*B2EavfPNf>FB~Kg2p*erD!eT8oPx!XHX3BOmeOhghrg`i~#N-<$r; z!|I*vym3S75nA!Pw*22L*6;i1RH=J39dj-I|K0vtKO){rt!RSIKsSPJNgQa?&iqWE z<0odQn`G#m^knRr$Ei56onCwCfr?5PTCa)4UD9bog^`En=9N+y3`GWA=a+h~7;hdJ zqwZZCRCC%EFS9Mhfi*0w+i+k>so8Hz6b z`tz5Dpi2s>Y^y`jC3-&@1au9){@s@cgNGp=f$!OQb1dM~;9>MU7%Gf5L>V?6J->&f zS;xzv!t~`~|FMDpg-NoeY?R@24ZW~Hl_d!WY`PW z5w`AA%+W%A+hv)7z=;90BR=?qWrpE9cG@R+_gYKL_JE&Qrd&VqdmSThwoJw}E99Zd zNnKTzNzq|lRX8sH^E#fJ$g!472)oUPU)gqap=v_NfMYDjZnY@ z|0x=2NMNFfe@`WXSdxA|rmLzp+CYDi_RkiGmQH=h>2!k5|svKc&1dpKH z0x3vfR2MdRd^(o4i?By5<0wu>0y8eNXR&`^um;Z)vLGL!f~Teavi`I$6- z+>O70n99`ce_er~#!o$+ldo48u5Pr9-x>7q_N!Yc)eiSk%aqOAuMVK2X9zl`(FOkl z>A3QHNymT4y)kcWzw)k@&ArHGn$eUcQp$4;Iks2KyCQS(4W5^=)v;{* zr?=!z+UNd+wtNQv`Z@ddPm^*2w|^R+T@kb^+zw=rnYpfJkidAK5d`qdcz=@UTbmL% z7p)p3(wdccByN)%INIdu$MN15f%7eV$@H$mKQTlLCTqpDsT4S@uEtmUh=m^a+!o-V0ra?+kX9nrPINeanP~Cto0a)qjRr2V zZ@Avgz}?sn*AASa56-p83Eb#DIR01<+&-QPM)JqN=YBZX=0kd%h`?zbi{Tr>n_yux zCjGe%n(&YB`~K${a!TALT0`%bNAEzKYb@xa^j5a};_|1mG~8q#&UKTB+s$38d^rA8 zDup9AJpyQZ*-jw7Yfa_RaC=4BI{3fE`f#q7`p_cFc3JU8p>RS-TzlMloEDDK>6o(gV6jmz31r{R~&2U zhx>Z`z;I8V9)NTGSJ6OR+_ZtX*S8J8@yo^mIM+MV2jKXVM+w)>TMogN#PhEUuzT8b z4nOYl9`f$yPn_`Mo)z=~CuB_&l0Qc2^egX^gUCj2-oS8c&kw{s);$pS>_8sy#{_){ zD;`P9vn22RXnAa){JAy{g8TNsxUT00mcz9PdZ>RMy;%cru5afL!13N$18}Zyw++DY z-kAe&8$E>U=FQ!(rH6ptRszsFX2K_AZb&b9$K z-s?|~H_g=IIw>6Jvr=45CzfisR6lP08j0iie%xc^kGS*J5>BM&dVP>K(>BrT?F+}} z4kCYZ-2=ltrVPYwr2QYSQ(E|rYK2B~EQRalUlnK#XCRzF@UfAyyc_+p!AqveaJ}PY z+}XOgy;^!p6+&v^q5wkQclYRU)PDlEW1|n}+AQ+L_vQ)Zl!VVc8R;6P#UgHmW|I+eK^;qj{u`=uNi$fzRsiJ+Jm z?dchzA9qt& z8TVPTfcx`gKkkQifm^la5aOQH;*w+psI3=Of4E*zZ{$X}qcYrjD_kgtqQdslH=S_g zX045JGThoC!gWvUI!b8Ct6q{%84iGym&ZCVMk2b!Bgb6pWn8}0L`WI;v37vSm+RzU z?Hq{{BI(Uz4dGzKBjf%s9*+JvWgxECF%b7`0^uN6-LSPhE|ZKAj%f1INA*hd5lZ9B zI=95#d&q}#JtyRa-1G?gTrW|X`qJlmZZMiX1H$p%vH>`k`0jeY^!A({815y*K-{+n z(!$qm7!Z!Hqq6tSgZEko!7Ukxdv*)qx_LVBN8{hKb`3{)X}G6pa7N)&KW=@NhNJLW zxOHnaT)rRov`6BWbo+7ZMLS1&B(GZBwFFZh3T$t_9{?m=m=5=@#F;2vZ`{`AJ+xOqChtc{nryNM>PybpNko9@TmLv>AgD1O{p zp?A@TsyZBj#22!?e4Zk4cZd0L_Xs|B^XVQx?ymDP+@0Ni+&%3Yj%;sztdY3sC;Yg( zPHDJqKW?K@!x8P?xT_>?iPewGCmKNWbX^{81QU+Jd*ccni++$$UYr#m!YwhumN?g@ z>4YOUJ(>(@{lXH(kJ~86P16qg<&STShCkA~)2a&>A#wNWXu0bx4VUi^_W*%J3)xz} z4;Uowj#GZzU9St=w4Z*Y!|fJ0elPLNOLLZnBa}Bi1t9X6dB~4@Y%Rg!;hsoY-uxc8 z(TDzQ1K}m^F{0JS7tx2huAW98`Wp&EkL*Jqvje0&ItVA@lDH7A=oA539^C*jXTO7N ziF1A0PB?PYqvb2gAu(RuJ)#|{d`>svWw?7%0V0n(I&`>+5_dbLtA)F3n}(b0$K4Yv zaZeCR3-^E(Akq_`Ve{sp>AE6H!;2#j;lAwlgaae_f6zefR4mq8z^L5$u}#)dJX3tg3!& z&+79@X5V?{#I;(-GM0C@?*#EEp$#O-S!U zI=zk2Efffy-400yy}mU?cm%;vhI%H8y`;t~>9ep%86x)Q$^Fm@(tBSHCi|qJ(TDA7 zR_tkWg(9o-CO>#R8`MC7{_*dtdr$7G3*MrqTh)gJO#AkX|4n=8=nkBK#aaD1;;Vn- zahV?7?VOn4<+GNaj|X0U|67&VTu7(ZLp~gXugCvU+aT*t?=3C8xhS-c#_LEgV6jLq zT~g|or)D*nbCUc}tLA7me) zFTDxh(Ip13UwVVw{}lA#XTSf+5Fiukyx5f&=>CxI)Gp}z9wp*WpVNDk%f9z0pXK#Q z=rFI&K8N=x;tmM!dz4rH_V*}5@G%eif!cg3-m-nGuRctSLc18F)v>=lKsJJZy_Mty zw|b>Z7g=y=FQj50B1W3%g;aWUOjkOTK)?-$#?UoKRoQs26eZqM{h{A`D$RQ;yoY{I z+4o)5-~2+72nfD_rVPeHRnVT_aW6~WT4_VBP+M7k@Nj5cbg0xMkiR_0pPq03_IdG5 z{eO{fd;EM;{d|+)K)&U(EXZ3Z$y;KKf6_4I!r<0sxa zZ25ihL!`i_upspR;J5L&GCuYHefs`BeZJ^FMgAdQ1@-#;PiyhdTxb6B2#0?>^BXyy z>DNyPdWRX!`1yZI=6{X)^Oaw4U)TQ`Pf~IG56*q+9$m*LitY3Ak9T?p9q;J3?9(p& zzOnWB_xREjKmg?5|4{xDUZ{E!R>%&08ovJ4_=Z0;LBSYj_#e7yC+I=?8#xk5yhZ68 zr*w>rq5d&{G5*XSn!cIA_fJIda2nf&)Aon4AJH{H5$kH{8lZ?ry)^jpA4hXY-7~Nr z$L;Z*zw);qfBYZoA_E*YzVG}U&Yiq@Lsr22fW6s)3j+4d4Sa>@eK{8mBZ_GLdg)(@D^b#aTY`8OdxNb ziocMzEwPkF6i!LNV#)YR`~rD=lq1vho-cy^NWk__vn{cpBJyK-f(Iiy^gH?Jcg$=m zYBP`-6=pn&=sK1T+&{7`>yJ-CWg36>m1VZkw+D+`54*(Whe2k8clXF&e4`!|>riL( z8J?59So-OGPT~>Qxk*GdzN*qLZ!-vJn7(}T@0KXid1HTXi87e0 z=$ut}m*>0U)RmjgT5TuP*w?&AuXcEkUOlHHY;e$oN(f+9)CU%?Xvx6)BxZnZ%Ye^> zjrF6%IWYIbWWi)>p+>+)gB6O4+8QO$XZ(>-HOJF=>-~{cnHRs=l_@6$o*#CZ(z7my z&zg-t&v&v6S<8A$-5<`$%(y>t&hcIZ%C5>n@T{oOL4jFSIsWk3zVO-0dU1W~Z;_q$ z_~k0@Gsu z?N8Bt?wd=U=PP|nR3Um*^oWM8+)mO%vZpg1rLK^QWDwV?33{Y2iuigj@Nl88qdsne zUG{8}?xE?|Q9LNwV>I$nxQCN^wq=6hPE|{Ea!94f;x)adAXaKNkAW!xm}k zUnAq1>n+-O*s_3^a{_l!kpt}6&;`gKpp$kDkJv?(<-ZRX^A>%7ea-Z7)hm@lq))?< zF+azj@>5b~bIrbT_~|$Q9rRP5iu1Sl4;`x&LSutJ{kfk@`cY5yO@Giz*CBoD6UI+i z7^w>4VV|+%VDq==0W*rMm$K4vCGCI}Qh)k?km>im2bD6@QRAIo#`x3s-hevBRCPG! zP$;Ra?4O5bdmE}h{j=9aKbkP^R~;Ro-LI;x?hZvgt=wqqH^z7Su0!@W+Qxz7T z-oe7Z4>*gpEHuHM=w>(Fgt!L)XQ=Fkm9ULkyd1!BD$%yGtWpjQWZ(IUD zieI3}w9SA^O)Wn@s--_!VL{V?vohz3kJOgO%R1NucRu^_Qs9aWEMP2b4l^BQ6->E` zL-9y|jG^V=3AneyIAI<(u#s7?x4^V%bge`DXt+0+`0^MnzsH$#)dk?5R(az#t-Q~} z?ND0|o`Jm@rriV@+EHGuoV2g16ZGE=`vsUiFps)f)B=?^9s;}@`h8vg%9rd;p6NWu z8{akYhA_(S2w0NJ5(^OK7-P3hMcyab%9VS1B3ZnlrI~0u4fk&FHlm#+HmfYriZngI z&FG-IY&qDCFeg80IoWMIFa7{$pC*VSuAf zv8eaDS!8Vo3vsd5Etio8c-s`I!rL7=q8o9#;8tM5+F9_+Dw}L+Up;aI+zANp!7Gxz z`Rt|<9qgtlz-1uqJw2ce@H7MbV53eZTaa$C+Lnt^a#SI3SxQ^32{vS-DIaEv!ke5b zZ-SgPl~VXr7F7p0uLCy=z_zNmSpasifj2!2+YV#u08ZsiZ>us)1^m_nzsBHt6?|`c z;uH(Uwn>>~@$-# zzdZ+dKg?8xH=Tj~B23SrNH!7n?sr*ecn1qQ*~^>GYv~+An~H+psS_-eWTxjli!KAL zfBFD*4gCA?PlN4IdBb$jFdcgUlMDz4xrm^m(=+0#tbb?AiY@un&V+m<7OCXPmwT{R zFp4?0M~?y?aD;({pUW@F0C| z!Vq2SsD5FufoWI4^LCUal{?>p`w0{7zF>~MldQ4~j{>*31Lak@b0^Aag&VTq1V8X_ z=N_UT?Hw}j>`+av|L+NPG zO>MINArnu64`^4*G2mt_iZ73h#;iV)1$`TI&5MI<#RE3*<#M3MmnWRk>4#X1ixCd8 zv3$IW_y(4UGA*BG<;FRD`K;-TWw7Rv2hIG| zOL=_xOcT2)qk!Euvj}or3^)hr<-=Inn0vd~O*bOFrc$`k29GMdYcujGhu)i{GKPf; zYFo?6p#DkLmpiR|c^m5g2EeHQuFWRim7(%3$nf$;)Ia*Xvd0GF^ z-+M{7n%HFArN_b|c|G_!`2oi3k#ECgmDeX2cs*#WkA*=R^>K(JbiN^yMWjTsU~d|e zc>UBVke#W#zS+p@BTej!lMz23yhJ;%uYf65UHdN?T>GJ4>P@Mx{byj$f__7vT%V<~ zuut1v``cl<;huvwvt4Dkolx5jSXEvRoxsfPydM0np8bu^K_KW_Y zz6!?K63GHndA)Hp6_(dyyii}?%K{br0q?4&0EZv$O#!-kF#G#qOueZlLu z8l?Y0$lJ&5X#b46(Z<7*;dcP`E<>Bi#8{$5<@JZa_vbs%PT;psMFWKGeiv<_18Hpp z&2aB|AM~E)_2)m}^$(xm^`{Mv#c9BMOvvZdvOJ^eSd4Z^daeEf)emzljs$$pAnCbG z?4T#cBkLc$D})X>3c8^K8X~~+d!dhC25eAygAx5lD&VQmW$(3POrRjH3IkkxH;oT? zLzL?3wjvGmtBKW9*odu@dBaTfKbJZn&+w0RVyu|P8!x3o&u8$4ROE5r9Nu7>Iqmd5 z=+0&{Zz#@#ZZaWR18+EmIOWBFb9h4<+>nh1)PIAfZyPwuchtm^(u#OP7VyoK9>RdO z;9tN-{WmyKZ--EqC)!$Z-h(&PFX0VOC@ktVz@;!M;@?N~A#R#e=#GZ9t3U(V(p30A zqwI8fQyoD}k*aQ0ZBENe9cO#vUR51n$MgQ5bALfvW1^)>4L72UOsVtD|hGQ^0Vcwzs z0Cq3<{0Q+tt zP?kt44+{#5U_p1ax8-)Uw-v8dd4?PMza$=JJPSQ*zz0bZ08fOO#6n(+WncKS$}OVh%+b|ws zNWa9adM0`jV8|Z$T9**F>Y4GRn^IaEP!DzS3a?9I+-^{L9me!A7l4}r*kPb_c-?f2 zM}pzD8ZbA2J1vQQY2h4^-j@~{Bn>&3UmV2z;&u4vtC1sq3ioSpgHLs6w{->WZFfy? z7ju@nvMd>AMm^GipLq%LQF-0-fTz|1r?lN;P}}Y@z`e@UHXY-U5b&d}1!fkEsxM6Sf`UBpe`EPE=4j3$uvK+_My@NW< zK$<7er$Z;l*uZ}~+#h++=fUoQc^~phWqlXsOoy1qCqh@$^}>9h^17?XP(PQ!hbz2p z(kH~{HdLej;kAAjuMPD%cEKiyJWU7B)WNfKaF!0v)4@eL zxJ(CIb?_1$?9joDI(U^1UT0zqKRmp)9YCoDKMlA?gEwMa*P+3iO^ojO!^3O00q!6W z@J;6Q_5|Q|4Sy1_ z~=4S4+U@MReQj2gV#7v{ci7GO*)(CohTw1%U> z-zxLNPgeNhrxy9(^jmtZV#y9s(i2bk;pBJy@RZYjc*Z$DeBVbt*pzU|pXTgKK79K9 zSNw2!jvuz>`QfSpAM7~M4oYO%+nxe%gG)tW?whj8m;QZswE5wwsvo{{jUT?f*$b=9 zxu>jJnt;1?aEA_7b+FY7vsI}*PS)o|AEPHA-#h+;!?_ju8uwnWSej*E#_vFf$E)0) zTdfaz>_g23r0BTQhOZMy*>my9XgxzH^y0Z=tO%=dz&Sn z^fe50xP6KnX|}h0P25B-AD`iF~p;^{*2O5V3q*) zIL5RAn5VG(6-%e8ZCjb4^=J9;YldGVYzK^0WzpTROR@fzrZQsy;8po}3k>~E{e2wx z8V%e!n6)r1SRV|9ZAU+gJV~e8(I?m+Hmz8S{@Y&F&Jsc~*7!5v4IM}a^qDcPdJ&b3 ze%Su}DX~@-^`4v3=k~4WAFwW9??gDJu2?$Furij?+=KKK!-MvAz(?VK6815S&Atlz zJjT#=gbiyKbSAynj`WFkg!=^J1B}P*=tJ%3+bMrzfT^w0-7e-oiAU77N-FPJ#2;l~ z6EVlMMPdAdv5Nh)ThJML1K>-77odrrxGS>$Y24@QUs%#3VJsH?iS-KOHBqSdlae1b z32=`xG2=FcC9OsIcCohiV}YB3aqc4&rbqNkH8Dn{$M}sYSo;fB+0FN;+-6s}Esw?z z2tU=yl727Z^O{)*Get{(2K;8i%rWrMsLz@rS{rL8RnaozEZnAUz(kK0*UDOx%{2d0 zfJeO@MVQqdz&$XOW(REGD%c8T4Qt){0c*Xzh^@4p_h5~-2gVK4uC3S7nyuGJ|H#^b z{#55TtTgZ%H_}D@1RYXgP)`Nzm}?TO@|ta$8#DzSLbwiEtHhiR?%=Z+Qz0DEK)&$n zM*F$x2>R`#uv2kAIQV6H3;w-uAL2DVBu^(WWA4+_ODS}hHK{IBW5qqeMix2ft5 zlV|6Rh>0yh;KlsC+KXmi{0YWZ)1|N5uC z@e>olu^Tj;Pq5@$Jl#e{|NhI5Wv_gF-%q6-tYQbMKmJEr`~xB(U6zh2OEH5U*3(S#TZ%1bdAmsjNy9B-#UEl?Ie z_6W+r@)|MYI~t=yzYr}MZTzq3A`!;;%ON?A>KT&b@BUxl_+=f(lm8ZuFMA^pwTXX7 z-Dle7=J_n#|8I@^#@}mVZv0r|zVU*W`xm|3|6_mdhx{d4llPB?=Kd!d_l@VGb7U=^ zk2VY7f3O9_J|yY`f3XjdF4-cQ!epu#$e!^%umSBPmL?J2c5>U_Qfs27^i?M%``Vim z-~TMN_A76#o$}V&2i{uyowwG`cx&x9L)Y4At=5dcjh0%<_+hlBrA~S)>!em$#JR26S~l1qO`lDF8?X2IZvn6pv~>g|FrK^p^3G zrt=X?*1<5%11E@NC-Ql95Py-KJnj`dhked1{(Z7hPxYNXC(c3_GMmZA*Vme=LL#?R zg%~=cyG&I_0#j=}+Z@4YXMs)b0vgKvhw0U@!|Vtf;hrsqR1xB6V32(gqY;MNO*_~l zXwV&TA4WTSj{yq3LAcYzKiz|vcj5*F4h>F6Uf=BcDl!|BF7x`nH?P8Uky*Mgvve_r z-6T$w*%t+dD}wGX`sk*?fZv4PEn%-sej&|%e{Wc=^gavt#@jKT74|dKHN#AWxf5m@ z{Mun21&lRAZyH`ZG|ra{3%v_rU_?4?GOXWsa46({MR+78`Tf0Vdu`*N`sN$b)Ynbn z`agsV0nJ{!Uzz&&h5W@&E5*^5iN={BUz4VP9z(f9?jOqM@5L)fAeANFCeq<`FZSgF zVQ~(*PaRz^uZ+J!+*2?gp!|L7pBaA#{BOX6%P`=T@ifeDVLpU83v*H$;+>aQ#xsJ( zYyQdlN0}!3gL>=TTdzjX-&m&iK-ceKJ|3h@7l8kxu1p{K^T6IpW;_RT9{&0=UG&p9 z9Q2Q?|3Q?^OJPFUq~kv#P5cXGqe^8X_FsDF%2)Q%XzK`56)Bj`_%5N(_Ac9JdNuG! zkW%Y;&XM81%`w}3Ye?j?ro(Kn=}^!<(~-chxnpQ5Hsa`BVf}ocu#W9d_ogFM)yvCX zNgpJg^uz4s^g}_fq>FS&hmAP;vao*sim;Ahf4CWWXPJBV zO~*PC@04p8IET^FSFeYT{h!zCUG0L^{q%aV^Y7Q|gVbx+p~334xb%NVy-w>>uXC`I zC=9Owtf+CU3xwzz*XMYS!t6UofjcXzvOPPd%7YZY*z2(6T>O4cm4jd0;!uvOIkV_! z#V=lV*ydjR{#+k=uJ5qL>w_J(_);((w(uo7Aoi@;IDhereGZ%XBEB;2&C9GMDoep}=VZ2z!oe8vQTonYyZ>|ao%3))CbBD=?hc6f zbcaHRGRBa2McjwKAUipKnoY-Lv`@o_yK&aR61i)N#efeG&6FR1$M=fp$jk!wb97|p zIXW_fuN6I&CtTvo@9w88hKn09)G0A~KQwQCuD0AAUu(X&)m&wXy!dUp=DI{NTOvn_ z%*>;2H{fhwr01L2hHOjR?n(tD#?@5DcV*Kt#5npodwge-W&Dmwju93m6goQM7dX-5 zuvwxmzF>(WHtx6$b>^OAiE=0C!bEpD(k;;!pSMI;Im#}6*P--&#S;CdCDs!2W2C#R z*AkC!xmU)y<+2_4T@HRbSULDTiufIje&dVR;`bj7qfOC1mM803ey3zPiW6j?kN@FW z`Wi9uwLUC;O|o>C#?l2F`mi(>EZqV&UVIh|U9i^2Pz!yaYeG9%WUj>tPGVxLCGKM9 z&6X(QWn5)+7xCE=V~Li0Kp^)?R70#K3DvNJXIqkXSJEf$Q49FCeN<&amnErE!ME#C z4Jo1;QnhM`r)r2tHN@+yAzoC2H_UjdhViI|@&0NU|E49uq9FSuRKw)Tl&;Do_akF0 zk(EY^!LuVCc~0uG7%L}&QsZvRB+EnuH7@IQ{~D*a{O!Ym`g)s{qP|8_eccG6Fa!2I zgSL-98XSQ(oFt>~b>SpgnZ57Vx+=v%GWvj5bQd@X(Sek8+JKGeBCOg7#C+Ehzj=G$zHE%_I~R4i7i(wC-qy~TJx#UyG}UhSaqk&3RHyvB*IL4l z{Sf$Q5zG=z_-OYd0)GbhIKn?^i36TZ!=iT}Ga;qJER6JIlmfkgHx%+w84HF9V!kIR z#|Hus>*7^3sR;g7m&tuIK_NRsO#$v`P!W`qh1pBV6+5YdujtkQru^2jT@Q#g-p*_q5hT`hrXvv6dP$cAZN=ZjpP8^~E`M=x;>sZE^T)jT?{sW+ zTzc2nM=RnCZq(s1W43=`d%LPKhiiK?7B2$<8-|l z>ua3ZTIwO#mVf%+TKV{v z|1@u?%#!2F9RDIkPXD}eL|!?*ymDk-^lif+JADpwz=Fsda^NiP2S^kDBClAP7kU@; z#TLV^5ti|lhHs#|pfN60@bYGRA#VttIB-chTX+U))5=o+40-YsfubIo=X)i8)@WSjJlvIZ?Ve z+8UEBCpb!%U@1DmW$2W$b(5T_m@K72-A891X7J8F6hr}NrV~d@A90kB1pJ)v1RTSs zLvp;y3htqcTZZqEv;H5sj*iKp~#L0i_!5WSteR0gMGvXF~!1AJUfS2HddT>e;fVkIc7z_dV?5u z_AqvnPD2fM29Fpd`_P5J2C8fRv&RycG2*{aesvB%3;P3z{ri z5CZ615Rfui;AOH?yDTZ91*M1%X|ON;a(A<7mg9Z=?OI zuGMPowbwsyo$w31w)Hk=*hBTNhSC4b{cGis!P@JgGyjP8T6uYp_S#mKI!t?QE1N!K zdu=NV8>+pwl_|rw*F(;J?bRzNH{-1oo&Ps*EB2#WV`v{J`H9ICw~nVXLD)z7iOQ{O z5ypcs*zai#Q(00Y+{J*EXo|qC30fTEBsf*!jAN5e4$lHoNq1IVQ+YEaNOjd!PzLp9ZCP|)`ur^{d zn_0ykHV5#&{jA(tn#z)}C)bLz6IKrMaEI96YqbJyc1rqJQM@M*?@<{x?rFgJ+}iy( z{MU;ziSxTS2V&i*<@dZ+=54?|>CF%2CVuRL>451}WL_@--a~xZ0Mmgo!o3^j#r+zs zTAGIr!Vl*KiPm?H!7o*oeGA-2U{3TR`IEp?8Q@2G^}xIha|SP(%%_0rU_m)_)&scH z=U`uk`vR{VCG)7kC|y1Vt^V0Vi@Chhz!rvmqL)?d?Nvp-wulaSKIIAQF~yk@y9Z~w z_fp=%|DnZCKt8Z9*fw7B!e+#p&0f?e&IZ|XV3JahKhB4B*+ejluw*FL-5}Re<>*Ms>D*prE{3yRbb29Ap3ww{^h0VBoexuu-43_3}Om+d+gko5X%++h(dK z;wk+1!W@wDXM^0>cEVskc{tjE?M3YUy>|_rKjgLxaGzA=Ia6=Gr&Vqvy7xdnD8Dl> zJ+%LsYEN*=KwWq#Otvz2j>Pjr-0}Ct-YzY3ook)JbA|jR5-bHIOn{;N|!_Ma)Mr zLp6%=H728&p(e@kb&@u|hK=zx=B5}8r}P_NQ%C(wmzbeb-<)7E9v8Jp_p|k4{Cie6 zUqv(f*L?L_i$7)SL?730@n^w5WWHKPH&2D$&~LuF;L>pY>4Mau`_l!cA^Xz>&SCr0 zwgvyMkAI;O#4|?I|0=J*d6*=ebEyc!JFC4aOBxH<0DLTi9_?_wslpwpy58IXf1F9K zh=5ThP5aB97^F0rQsWilCqj3%vs?e7@(SF?Qn41e6cfAkGTc_USHVqr6v17F{3s8T zf;D~>dK)m#9nl$=ihSfx;czy#vPfkK&~GArb4BYf*BV*Ww>wzyD@%laub5SiJP~#V z&JuqN+phA8Hj0n5pld6fi&}rR0d^zq0*D9wR-F4m-(0ZrsWgqK6?<^UY>U8+*Q7C z6w%;;@jfH9`j=yt%9!@nAJ)2Czt;m=P@k3Y`MeVSyVZcSop7U{uMA^+VOlB+`Xyk4 zi6s@m#)cns`@Aw1CP`sQ=*uc6!la_FS=)jBG?gX&H|pdr6R!lll_n3n^;6g>FtgxS z4?hQBoKdOFfl;*l%koh!$kSEeAP<#uOp>l*#CZ|!e3(Trc2%73sw_9Ko6+x8*1|Z@ zr>}+WG|^cpUiq*==7Bn_MBP_5LWUq~l~&|^H;tD7w*anFNZxqmX6)MuG+`_Td4Cyr z$ZF*V7}Rf!X_L5@r}AmIxeA)le?Q#8#^8)u<&!EKgT6k-CdXQpZk1OaMSpFF-vOjE z9lS%`MtvLZP8gi!qW(MaCvr?sxgR);6QjP3I9mbtsJ!x>4sp*%!*+ZtDnC1I@SDw!TRaSuz$q7cmBhJ_0yGWhwG;++lTI_D-R9XPgkB8 zwx52`j(6&VzNGo*Tvy&PAFWBOB|~M2CwiNl|99XhZ6x#r<{LD1%8%jYX;zjnr5k;B z1dIHNftQ%D0}E$F%Ws+{w_B)xsv^ zpg%$1Q=Wt}oQA!6Rn>?X0~-|v`0*a}H626`FMmemW1!3N@bZV@-rO$q_PE;~1!^n8 zw7Yt!Y|}UK@@*XmOKTb(G}d8p^@y`p(8L!k!nouL-0xCa3QPJ8l@IRMLEl?C{_WHF zcTjcwaFWJ9%DV@7#A>{I3p7m^;}u?h2K+gY&&Pg3>9#+3jHwSE3sd>nJ&1G8z!yX? zzM#V(=I{lW_fPmMc=JB^cnNsax_oXtp{@V0qz_TIkvLP0JAN=97InEW26g#?m=C+& z)aJtrV-YTl=)qi50US4~_1!}%UpR9Tjjxcb;_C5W3}S#^>a^A~rX=8Iz)Th6w1p|D zd|{S>8erO;iy_!Mz)jUkl4o-dDS^7J>8I+mLn< z>c1ZOE`qxbcB4Vu(Xnue=3h(x-teiu`#ctM#KoCK*ufuE4yg$MSxp0VbmT(85x z-MJ4ufgJu0@KNfYAwQ7Kg{Z@Y1}kI|?eA)L>wD~Njkmxbgy}_kTVbCuVa-J43n2sJ zZlgSbJFCdNAlnN)@VgBAlt|l!qr`k6&Y1V?q3r32z3i?31kh9V5w&+AU+@FJUxBQ= z!&*OZg2wmYKOPH&@qYOzLtFm=+GA9!L9CUOO+%PijQ19(ylg7tzj)l#R??396wd%} zRN4;MA%i&cTsB=r`ckILX2iFiGa`J^9Hiae@SEN3%M&KGx6In#(|Y?S?QIA4;NGux z11|&r=2ztNvI@}j0<|^7aj0wp>R|pf$WI8#kF=BC_4B{XnbZ0)ll(7x7;}J$lsC@V zqaBnrA`P{z^;d@;N8ZFEYTLlCLV5oS_S0+Ol=`9!`YjC#93WiM*!V?0;( zj2m^P%5*lv-TowW&c0>QA5i+c0Ry*f&*Fz6S2PYpz40>K57WICcWiBdAKFq`59}k| zt-qa&^`l>QU~GL7^f6xA2K?J^A#H=}3y_hr4^99^et$U&`!p}RVCCgepci#sw&@eP zHvoJ&)B3?S=G>KXmBzsccY&9kfhC?BFUk5>;gULnbSUZL!)FYx!>7P&LnL1iukr;G z0Y}AP4N2kUVQ}}ttsvY9$)EBg;MuQ%n*=w;>kE>kPF;|aiv9%Qb0`ns=a5b1mNLA+ z1i!5?Prz>$+8pX-K^EL)n3G^Uy`Ulrl9O$poM5}_UqRLkYVbd7PLUW#!CHqcop0#(o|tTY!Lm^g0+CHDqpan!|}rz zTAJ&Sw;kb}n?Oe?XoP;bIRWmzWJ$kLakn3(1Np(f zF))>d|GM3E2zudgKH?tR0{$FCI*{`ogM3bXj_;EHdU3~g-yj|9XlF1! z*T0wg<-gubU2}ZyO88)~@%dfa#-`786O}8Twp9*TN1NsuZhSuN%+TZWX+w|Cr|lVb zeBL(AKIHiPpJ!eA&PwqDdAN1y_x=0HC%kig`^lB4;okF->Y(SwD^mZX5A{Gl9zq`z z##+yHz>dKEukn#A+%CtPrHYd!?lmD!6zM8g7xd12=&I6$@vXl)g}Z|?0OP#{mS%Wq z63k=+Wxz{Q6<&H(<)se;o^Il$Ws`tTgHc)1Qs8DOfML&s$ui-tO6Wf5z0zX&PNTFy z>c9CX+r@pUrDm-0nBb2wcIh1CVTQd3rb^2X^m_Z>(mWG%CB`GI&5JiY!yL~~#e0=V zgl$oI>5CmK#F8(@QKhxOO*8Nkj4eu`|4ZAkhI2RQTVmj)2jIro&%2&ey1@i;!7KDR zrO(4W3A07PovE;&f!PVOM&+d^sK3|B&|!G+8^o*q7@KYF7UTcYx3%)1Z~oCDUHXU6 zU!sg6{dW)ty8WgI*!y584XpFw;iYFO{Z%YV1>AF9^h2e`FkZ+x4ew8681x~f7tXM_ z8&EdTS`y}w;m(maJvW^2j{lO7*Zfib{&IepfzRIvT%_uFzFGE{-C1zQVyt3P5m%1i z=Ep%^R$=Vogx^$^&o8HWz?9YxO(}eS8N%jw^TK2P^39*_cFiu8<(r?=&Bs37j_tY0g90|D^7&gp+ed(xFkZZb?)%ZDZzuk0>2rjM zVvYBfDt!KGz_kefG{&m!=$A3B8u7d$))D6u?N3vgByZ=hgZps}hAbEZke?g4t#t1a z>@}L-HWQ`A=dXv^K=G-6FKzt*COP0AK&_+3VRx*pBgFhgS=5Wi%ToOn>?V(VPyL$E;8|A$a!%V_y=83 zY-bM^nItcZA4YpaJ=1s;>V(g~gz?!zz%8j_y}G#8B-T}n_oF;URlKtb7_zblN7y3!?!)0fTX5!kvsI^#WdtMH9#jtwk5VuF~B(ycA_GegS5SMuR(*g}i{d z)Q^GdgxL$;Kn9cWF1+}NkS!ro#gyJ|g(;)K^G3k$k}Sc-9D&j;J_duiUvan0U-%sb zZ5M!h-^r3}9ndY-$S}xDIMNmR)e67UFdqq89(o`WeE%ME6-B^XJi%+c`oDA?Xsk5x zk|`=LNpZTm?5LY+&>E#sNRI14c}Xnvb0}<#`@5{NPD&CKp_g$zEH42MiPjQi7k4M@ zNhZ`u2lOxC7^MGo*wa(7CM|hWg0+~0yW3lKzw2fbP)8+GO)Th#z)ejR?W)8CTmj?1 zqJCv6;Hn-m-Y>y;y9D)FQV)J(zEE1BrPrc@RM1_e@{&~s+)0fv&;cb@;tkP@_BfOJ z9w|E|jjJI~sVs@!0z-C6*26r}4tbvBS$<^hh z?+D!6U@+eo^nD<8Zpkq%?im&I!T$iv36fv=&Y|Qi+~?$7&n2FA&2vX>qI-QKL)oa2AJX!q<4$;rB?mCKu{?|U(cf52@IUM%dP^27Jf zchPsMC_k_?VC>FBeU|6w3w9HJoQ;-xW5v!$;cAdBk+Z*izrFtQ#cTO}D=TQ{jaqKc zWtHt3L4`aUAd~-&-H;RLKBp@Jfxh}nJkYm%6OZUangVyxF4gcO^bH)z!40q?LXp9F zM@#S*-Ay?74aW2_WR{+&n6rnoIw2-kfCGK6#n&cHj1ZewQWYXaxA=la9RM zmXJVL;qGO}(I#rME`C2fYqtsf40`KF_;gzokm$i~3DRP)XPKbeRL165F|Nnh1N}fjRy5qe zQFtQ^{DZy+T}yeD=8G|GL79QwR1CKjW=^}%?^t{11$MX>saO-!Xm$d(TJygOcoqB` z;ZI{6Dw7HvbUyVDC>Jk)jxTr^_C|@rJb)LhN7xgNjG^r{^fv__m@BmY zbA%U0(%Ko^(24RfT=kCsZ#J=&6>HGfX3%~Q14{^IEUCx93k{4H_JV$_anjhgFjkIP z$e+d_g>fdV#Ubx0NcX%-$@0P^m`QjC&=ZOImz=-->TSr#8^BMSy7EgI|`xfi71eYh)- z-(}b)Q3h8=njP^}Ubu$#18V7)!Mz^&zJqrd_&&g!VKC^+>6;COYdPq60%76DV8H)E z(3^A&_D28wsBi;#a~il!s$!Kh#IzUWMHT z`Ma$Na5vr=AnzW7ffp!nAEkRsVPpL=;db!ci(+!`1Q2Arw_TF7Ta&1r`(V^ClR#+RmX4=tKU9PBldY>^XE|eJaN_#+eZ;Vzt2-UfcSI5Q~Jkn5{q_q zVxMP{*yo8Yo!I9&S?=?ktnKrJjeVZj<7qKkQuX^hv7ScfsQR7Dn2t4SjPre)R4AhF zFcl>M&iRi`X=g3O!~o5O_J_WYb?pM}+&mg-;$jFGd1+6-^YK+do42z=0iz!X$)YRO zCVcF9vJ02N(jBN1f982!Amh_Lowv~)8Y5o7hN%WRN;Jxhzr;uI7qk_@wPWvMhy+~l zanFu1G_1l#o^51DAcZt?iv%v10!)GX>>6gM}tnK#g1y9r~-pmIZv zhwkqUoo+Dg3Ij0CL|21^AKrBX-PjO*xHEeDr(-bo#5E1evLd4vvF)FRQ1sFU_Mkam zrqSibE-iY{jtbC@PU_aP|LgNu&;H-upOtn}74$!3pY{*w&r0Q)#(w=-n)WVg@I&@# zZ0Pqx_pTbUKfBjHe1A5x=U@FF&9S&i`k)=jL;~ z=VIZJ!J1&Ywyp8=9a1j5B=YLl1k+Q88&aBv*+OYrJ7g0yWewj1O}Oc5&@GhzwD(-# zDnW72MbuNidoE7t`m=Zc)t_B+zXP|bgEc0zTMGE++nB5e25U@a?PANp`!n;Zq5Ctl zbI8VIzD9p$whqylMqB^s=4bwUF7A^36#nHs7sF4@&4)^;4E?Tz|b*^fd9cj{Ab04??gHuf)B@F<84d-2j8D&iLd*yI5*D{xB1;TGtLr! zkENav*dP1x_`Wksgde_1%@Tj^$M=Wuy>^z^iTGHoO7wVr^BR;o+v3Is#o5^4tZr;> zRg#mH^4#><1(uY|;&gL-^(v>WzACvSyC^Gpw#97DoL!V{$xANGF3K!KBJr~=dBvFp zMadR(Msh~xob0?z1k20Frcm%7r^Sa?`aE+{azSQcQ96PbWae86iWs{&JtL#YGAG-d zS$JQ1YHI53^mhmSO{Kp($Cu|9WEK_8&o9W%E1G4t%%1yY9pZL2uBv)TO?^#sO+$UM z%&NLk(qRTENFU{DZfI_GRwpm1Cy)EhmRafM{PcqK+{~iPg7HJdmqjUH_ctgud$p}f z0TYzm^tmXZITMc7mA2OV6vkGkD|TCxVp9r>3g*o&nuqc!{v^R4%G#M+-C}dBur*gF z&&w;!zCSNBBYD>RB9J%0zcBNGd6{{$GX*cm-=A2Y@_{3nn7FZVw`fc!L^2U4OE373 z3K}Phu2sTpOKv_wWF*g-mnW*RpMPO?Zaxx7FDOW#uMyBEet-WdgU6qhU6fo5Ik6Nl zmhEs)!;#-hzE@Vb$LsL`DB1d(i z;c&P;Q&WFKe1G}z3ON-3`Hy#H6wZBcrlY3GxwxURI<2W;MdRY? zrnF47fRuY6pXI~X&&rx+yMj!W=IX|}CZ%DC(qyZtQXDmltLvMp2PwZSAEYfi?|$TO zQ<|C^YwDLyR+?Jt7Bx5&kiFP$YqTv!g4f|cuc=z8Y1RZfMNx|EHBAbB^X@m#Pf1B( zg?5|6p=2wL2DE`@@?28ms8;d|Ecqn*q1h54n>3mLNYW@Q&b zFy<2iFSgkD@{E$~-0V5?rSEJConB_wvU4(rpTYTL-ny3pDY*6$F`_pMYE8Y zre+j*TzTQ_bWuXd9CCS^`5Y)<$lsv+6?*ng@JGvbDE$uoMl6O9G^~`3mxL8qwAQ*5 z=)Xdx$=mc{;{9VO-4tS zSwM1rAJWg))DJ4St`6!)aGRR6(+PI3E)>j{Jqp}Q8W4g+p=RldMjLf{@wa5>LD#37 zv&)3$mrP18$|7zf{rJp+0!u-1!Mwa85S^Sp2YDyYNiQ^0gMh!cewtP+YN}qoqPl)@ zwN^7Jt8Xc6wly}B^sUZFQ8Lj13J|dvnEUFE25^{K%U zp$925v;}&m%6Kc98q*vNi*1fHM->w2uRTj=n`e7zPPqr&3`@PPc%oIM&nuO2D8JjU zkIw#Ne&+mS>3sQJqkM()3#D2k6(OFC6;9}Uj1bTfpb1gyQktCAi))tDh-yr&&NZXooRe9Q zl0m|H&+UHxG*&wsAeGn2A(PSoh0>T@(_CGrC^WcrYU)#9>Z@&yLgR=~=n1RqBxkNq zPUq#7pdS-bS14ufZ;3}DkWFJ)o1=zTD@hnbW){t{6yz2rk!tkn)D~MK2AXJv4bZkU zo~&;2$=kKsq3Djhb?2>nvQuPzTti;HCA|GJhM&R~pnt8eUJ0e;Y;CMrYDe#|vc9^J zDnc9PRil9Q81F5C>Gw9r_ zR@BwC-oU;r(|5Ku+Z*Z!S3VhNo6ymaKeW#4;}66&w^&HPXA6Hjn|xj6otKwkk*eY| z(mzF`2g;+idU3O+p6^Jx)2E^HGE4l$opPP^3w@qz$)gIm&hl#EeeyFjJ##F1Md;*( z&VX{fK6wzsMj;P{&5amIOiDMKEhWj8qAc`wb2H}`(g4fWxYXN}eCm_Uw$x#w<;{^8^e5olBa@qr@vOySWnPQE5RB?TChWELR#Y5In*!6S8Z zeKAwfChij_iZ-82YDf=9l+Vt}oIO{}e!@f$#6nv7Ff!(B)Inc-cwQdnT{ODK&e91a z({s!;hY3$N14l~^z^Ba4r125;`C$_$TILny&%-hS)6*74!a;;lm^lTOTpHr`3louN zDFX4xWCj~ab8Q-jA-gc@>F1z=5S}QY$q0>;A`0h$NunjN2ueG>2sK;8!n{2n!eG=3 zFidJbOa4@ARmT8(b%47_)>}y)2`KpiGU$X|A)P|0gtM>_J_~RBw-TBWM(pn zAqJQrAISh|N-ZKqIuioUB$J#7h8?Xvu=nbA6|&U<|D0;;Zzlf|?zFXbkSF&8xc_<(N1&5W z!2Laxpd6SV_NSw}!t& z`RPT`<9=y>WbzL=tRDdK1WauP+fP!wH)N(@m-6X_VTZ@`W8VR{$Jk&ju~^;pK8w{u zdnq4P_fh`1$73`cbk~2c>z9zt1qI6j}S7ZqFlkU;5_N-o-SnoL{L5)OFz9##C4!!?9ENI2Tj zn#qkKZk&le12Y5nf+WzrAg)nh6&1Sy^_J(F#9?;ZWOJGS+>Ubl;?6v_3B#3ZEvx32 z%%#cJn(Ru;k+S+zH-_Gjt>ch^p^tqfrP;_Hm(v;*h$Oky^FA&(4vBKQ^z%OKw2%E6 z#5jd6tx7&tSIQ6kuHmH)06@f#k0S`7<1+WD#m%jv#v?Db6d8-d6<CVh=TX;_k5Jvq-%2-t z9mp2v^VC@DtP7FHm_Kio>Y&y%0K4P~L*?5i1LFj^1#7V%ri z?(6Z@WQRsRgY--6O7yX7$n3X5+V3qsD}+FcQA>VUU|RUe=x_cngg*s|ZlLxu|K`~6 zO^+cz9>@EHNEG_Us+|LK8*N`Vv2$kzx**B^es~;hnYTYjMIryj`%B4Kj-<#&%cRVT z_)3r^CQ>dkY(Y#WG;dR^Gg%13@IOpy-r^N@3d4AN!+p5aazW)k1ok1Y_X&5ZY$otq7DKND^MrjI+{a1H|9)E7 zF+RWzO1I>+3p?6t+)BQ2NtUqZ!=8`ya0|OgkF#oiQnup^mmC!CBVZpPH8<}Oc9A~K zYWi~dT7IF*&+|taVHfnd@Sh9+YW@oUZ$B>FMfz?t3p?5$DMf1jV2rS%grdQ3-umYl zd&|RB!p_TAbE_IZ7wBE^KQe~C>B4Mb=jExXSxrwGZw!@`t&@ejkmpl1zj*#MZ&%At z7U;92=539Fp3AG`EE4uB;C_X4^M|TDJU^Q9)cjD(Q(SuHs_DtgnfR z0GW1?bex68E?ahVjZw*RX(v1 zyt7Hl^O4;G6Q)#2c!fsqxqreRJ40AiA*ecYJ*IBT!sKHfl#Z%K68lcWG9#rbbi}@2 zBiM9aQDo|-OMjD(;m`iPBAzcGO%SAK)p&|Tw9X{u5P{Cxh21ORrJo3!84|(MWKslw ze|9#4$z=%qX~AfTNugTxFn_B{`g6m6kI!)8{vw~zaN=H{5r;5+2CO@5G1Q+bV#X_Q zK~+mWwv}9$Nj+ZUf{u&Tl#s}e0P>?zT7dLTA^i}!Z()s!r7{1@--3Mjkw9qa?+$oQ zZ0)HH(0s$R#cc?>DMM)Sp|HnRmFPC!7zpPWXc-{)Emq@}7!LTctWokn?Y`1&wF|vI z@>v#o4ZdhiVrp%`HYdq#T-uGf&4_4^HyRF>84ZU@_tfn3ccs=Y@|KWK|4(Z6mxo@W z6MFeIEC3s|6LkMHtIT>k<3h}72%$cMwli3yF+jt{A_!?@`Yr}*B-jdpr4*&+WIJCK zNR{od{Tj;w$fh#VjbXS6e=bYeof@3VYcy*vfMl(MW0`Crk82ql$1)#TwrY7ERc}=3 zFWD?XT^Yjki>yMekMd?JiLyxUz8|&SZ3Il_PYaw{N#SB=gBWpb7^Imzj4g3 z83rWD`xezkeoREaVkm-sSprZ^mE>O%$K-wVZ{NuCJ$v3dx)bSO*axlvK)C21xTmw zil(MPM6?~f^Hp_J-gNqKv^&E4LA2fd40_bE82%m6?gQ|@f+;}M`G;cZ-;clb zY%KrXvGj5LN&dtb`F|EmAJ1R;pT}eQ?~0`#fPYF1|3_o#`|*E|EmZ08{plCbzZECX z&RF_5c~Bnm12OXaB$mFPJg?`)#ZT<6N?3y%#ezV+ zfBE@8jXx9+AvgD<1V;tlPk#2(Y zM@fVI^^?bKp))*)$*fY)`uxAgmai{bpBLZB5?(>#7);_zSj|ohNi^9B(D~o}<@pc! znc!a?j^`f}*Z>w>%8L9!{Gf+4_Mz{AsX&zqbnLtmQ|)h&Mn6L)4Gj`IF?%pQgQ)4> z6K{-*&*y(nOrWXbkjL@0sAUu)L1Q}>uFenNhqPh>r@`hYBHhh@1V5>iS86aF*~dBR z@f|PXB@8;BWxj}X_?AG##MkX9!sN(xMQrAQQj;(Lo!I&LAo5|#>)8*{Mik?ZuQIIl z(rB0ltKg^WSNvUUeB;}*Zmz_Ue~nH4C1ynLIT2gd21ALXh{P8fdU)735S_lCAKnRs zcQ$)~@N|ASfBU)ognmfYEGPf6R_FCWw9q=g*S>&XY0i9te?PrW_3Csw{MYHxT!F#oC6t5%&T zu7iR&2J1+Hpx@ml`)%|TalfG9+zt;ddW<(5ahL0? zmKZ9>^pTta<_Eb_?L!f>`Yj!X3<7f}MgXP|Xh;Vr zT_iBGn!t}4!3PBXfe~a7_$I^tk-(P;Oz0-?IDydh1@JI|(EkN6OdwVP0RD`?^s5Qn zL7;ghf%hcmxftt}N$5{1ko=9&=?c48AIskccst%74Xc1IEc|_Qmaw}`-J@rkx-D$a!Sj*unA(ufQ2)xZq@K_RSkJ@qWaw2g zrBENC6M91bDTWqXYC@yjrUyNyd))?);conWcJ5A(=|^sl;a0bYwE9k;i9l%NQEOEf zO>3+(P2uz+)ApH$A_J-ZwE{S2#j@e{o|!6!&>}um?us9O(l7@K%8gi7D@0sZ$LiTp z(}VfY+6Pwt_-3e&thTC5_s))lum{QBk?;hRD8qP!;*tA7WM_w=kW{}VpMaxb6oI^; zItXM1)sRdeFQ^w70V}BI7y&D&XBd_h)ZY@w3+hV*@`C!G1oDDeiV^TK#RzzrVpv|L2oz&PnPM0!Qw&38iUCxn2w-K3VW>6piVr~Seb2Li^mXSWKU_O(?A`v z(^xr%`e}I#(9}`OIZ*zTht7UVKO?ZW9Nr#GI z3!sDKN&AYat|YL@4E2=ZdTO=HN(=}2hXeFmvsmIICGI2ddE{RY;vjwPWI-Hc-{_tu znk{Tyn}+$~WrCiJgo`PqRZe^3I2~0v9iU-y0&zMpqaP`DIaymGq;tdpu93#x+(U35^P$uuFL3NebY z!e7R-__KeHZ5j2G0@&>G>?3|7HnkpJ5_&@Yl&Td1%*RWQ6OR*o9S(_toyar}IT=@f z-iWS08LBFXN#YO%P9MycF;eNLx8T}YbR;f=pJQPMQ09Vm(o8z{j1D1255-*1e0CbS zTyo$%x{Slo9)AHHK*l*_A3MX4L1#${a1f*H`gxur|E!7veuyNqf*ooRS{86{dDhJ9 z=ioGrL!48G2<&tSJ7JC5pIMB9G^A=`VF4X%D8LB_oE|DCc~l4JBN0bGCRIoo1LBd| zV{rflT20EY#jy{Z!QiScC|*%`oRyhGXG>iYR{Za;YiF z!WEiMCPgU{iNR|MN+xqTReBBob&1KN;#KAY$U`NN6xFbJsq{GXQ_M;w@`2Jv!|RC` zpAK^umKDi<5igaVXAVv?*{q>o=N zzm~JsNIDVf8Dt%d(%-1J~ zen%XAP@}&9`XX%9CLesgh3KD)rJqxbvjhuF_tXY!ws;Lzujuf#?Xo36hnV9nmT^mfwsT#C6Md#>>3H+vKrR0yI|HT*3 zS1pO9KNd?LClAs;yD>%{q(Jl&JMKgJFNyp9*BecZe*6c~b}A1;T`~N7qTL6G@8WQ* z{6}KxisgSOhCE(=b*(|?e=wH5AOD4{e8v(C>FIcKh33&jge=?Hjyp4&{O4~C9S2Uaw!Ae9zS z>B7_oZJaw#2c3b{(6mHkE1IA-ra;P0Fb&XYQ_pyXlr@+h6UZ`rz&@SMLJsCeJh9n( zrd+Xb(f~m+o}}z+V8<-cXOGnf7HT*Ax#^NUpqw}hj1#%pW5u|q|ET42d0wu{GQe;o zi;Z2P#v)}nKI5%|+HIP5Gz%hSO`sJdAE>euYc*S#S8PLC9 z{WbRc)nMn&qVFq1Bc1WLuFJ&yhFy`yPDff_@~KOqI{))uiogBdOXUy!iL`XAK9?&0 zCzr|}XJo$w|CEcD%KzM@^B+kQJ$^sk<+%R~Yu1kFJUCPD`|o}i)2ZnaXX^R$;iZR9 zlT;D@a2~#0UD05LAS!g7KR)YyiS*0(^z+kC-@ovGFr|))Tx|dMh5J|dyqTui)C=p6 z&i|KRoHEjd$&(Oa|J|8na?zgU`-lvCK5LxO+a5sli?V$VgV8$2A-S2KO&cUUG8Xf874J!TsYD zoBnA2U2AnDL2>s7HfoR`@gddajj9w3a`6c-Oy!2mo3I6-1zxMszH7?e_ zx}Sq#wTUe<$@He%qwnR={g1sA|Ln`MD_2iOy?r}-$?e;IuWy9Pf!F^+%un9M7f>_I zGbBf^CQSZ+Yajr31?qSjzvhe{cJ{D-Wczx6g- zmS#J``DyU@_4BtP$P2c7+E)OGt&8@}q5M%#0jX=7Y^fLRk61rntgWA8(K}}Syzlnd zCF;KWwIB`=Us(-<%xF^G$6D`%T)@zN`UI>jSQ)A0_EoUL9RW5GCZ%Bl=Re2o0<0^u3;icQih{j*Izl%m0nGnobed zV|Ppo;uw7sV?i9-qX!{Y($o`f?^{scjrH@gCU8mqW&ic_ z&(&|P)}w!!|4M;>rNIAJQ$U={t&_Z%#3Zr(Ja3UY2K^aizo*gm^I>u4<&H!h&b|7K zIGjt3dH&nw+Bw`?+$n_lJwwwC8RA54)cG(vj7z7&aF~w{zMiLDq)|tE@gX0c6JNz2 zoqoN=O-*<7d0jaR9`GZAtMNw%KW}lLmFbHt4(#IJ{Kql__RdZqGE%CeesjhcWPmfg zR=vq5PwN&z(HO*i_5xvE)kuZop2UHFp*<9s>ARS`qc-;w=p znqwt*E?OLTfGfknXW=`0O6m?DD)UYYUsi%6rHuN3x8&SCCHs8Fg`tCfkFUsPPnEN} z?LOMTVgGX$wmRZNZs?cnxL&55y)^J+&Ta<|>>043BHNhN6Urr49bINQyKFC0WaFAz zj-I#HB^24Pof5{?s6UmP*TzKf_r5TtR9q^hX`H54;bX=Y{RVG+X;{kr(@mDkoPK zs;ZB|H~T8HE3+1FE5!=GAu*g?17o=5=~E;-_twiJA&Bg(KP8VghWg}*+_$T)(gi}l zk9OC%u+zqa>uZZ-7wE@Wu+e551aU!%-*71kAjK++Dh11zcxDuJ#%G|`W*ckv_1R6^S`Xb8Dxu*UZc&F3Te~-N6w@sF8v|x zh&+{YR@DtR$(d}MgKX!mQNqh|7HDzKS8o(#2Z-a=W^`dC)OXP?yP&7&pBWDb=As&q z{7fm^wvT3N_!eru28vo-m(fweL-Bb^!&j5|DPETITNDgj-iBSK>vJ^u0*7$ zQT{UdG8Oq@Wc}p(q((`923wc)BzV+qTOQ+9=n`iY07p$(a}Q0*zg zm-l$;4jw4=PQy8>5<|V)()~$^5h)pZpNKoUGU}F~QTs2Ce=oVc>4!^%Do__~GuyW^ zrhkA&DLl;NMO(Svy9Ygs1MOB40b3_Se`0FlI=Y-p z=n(p7f7v-?vipdqY;S$JrHA%XF>Q~@U8JS1+8HYf3u%TXPg<-zgSL+lC{{lL(+|k> zC7MFiCBAflhApgNz@I6^+CFMaU=!*NC}mz8jV)hP{pi(NKDSyPU0B14u2+M~<4Mrv zF&v^Wo}rCs2}juf%k*!0lY&>nBFC4hHA@)4F-91qkbeH|Pv9ep3mJpea~!=Jte$&u zsP!A_hXfonxYKm6*Jn7l$;Uo%3|H$m_T`)IEivE=2L@T{cW^aiU7nA>x;%kzI3dO+ z>d75nQZikh$XAyKS{A=*`l#uon#$(g0C{~`oE!9nH_}5Jt*61IIiHdj=PH1nL$@XC_(2tu7Xjxqy2GL%_Cf|Qb6$*ey^I% zag!(=Ij-fQUKP}E%C@D1>s2O@oA5i0V8TW7V`p)K^=Do%a2~AkYrb7 zaS;d{Tg&I^auxPoF&vR`x>h!C9l-X{Ws>}>Te908JX=v+7<^r#dn}Y9$z)d+pX`#|lngjPMl3m5^P(evq zvzLcEjg`}0EU#~Ln^4_rt}dG^_)EU6FYQtEF z@`OD@=wIDMZ!4>-z)Lu} zE&7U4Rj_ecT4pX4bb6X9wG%mR)B>VIeS@LKcgiu28yAK1y})t9qsre7mghlb;%*}3 z{2n~Y=%&0%bz9)>%wss^vY?Ke!pcUk!pH=j+{fu$NN?5ej!!sldWD8-dDxG%UqW_z zcz#R~ZSiypOYqzAE`hyMUZD7JT+72#RZzP5hoTSN>?B;@lwSv63co()m+bWLxNSZ| zAlfjuq};fR<956xa8BU1a@@A31PZzxM~>=e>@FN6#`cmgKK#hW!zOCgHxv51v}c)Nes=xZF#tl za15aW%CsgGBs`aIS_6T-%2Y2lR6NCTQ#Nwkys0|f6jpY7mB~RYg*+tamT|htRlwaX zaI+D&PV$F^sx2Jn>x0be7!H4;zMTSYeJpMi^24?z)_g7 zep`;Qv?71>Fvpg6x>QiZDWBC0fD84hZgU>tP>*1!ZPTo1@3B>1^DF^~8Y>8H!5*vfgjOqr+gYq2g7X~pu0`BgH`b6gqaD+3A7aZjFB zK^-@0fcRcu^&{B)mtLYvpg(1r7ypRwaEiCUO#$TEMRrNCi*i403~Zot5?0V{-3rjq z+k8H%u5P`Jmcm@K``f2q)M(}r<6Z1W<3{+cgF2n;rV6eKJ6yR}i^2qkc% zSX~HCd5_5~=oXPP!pI^zHWO4vvAB^Pt4j?6r>9@bh~qpBMiC#zMrs+6CHPSzjJlN_ zgel@X%F1xf9}-I7MxJLlWhx7o^BZ|a;D}76J54x-P?qxcs`(S+q3 z$jd6C3tqL0+yuXo6$JLKFFQ^+M%R3CH^J;tGDeCtXj4&=;t+ZMw^rZ`!S!<~4}{;p z)kM)*xZjK9m&#u+xv{d_e6fk)n*UTqI1w&uH+oxtz+_>5m629X_hC?{`{WabQ?lDN zTuZi>;ii0iO2ak(5wNS5?DX(-zD|{;if|%alAq*rYdEDM$Z%8s#L|k>ebNqo$B2d= z#;^I0dx84}$7nc=hg{Fb;bQs^#!uP9WKrov7(88+sU(vs-!On^52EU7^Mwe<{V9s> zk6Q>ATstEw{r0RQ99~IUT`-L2$0xjfQBXbc@Nhqy3Xs}AhGTs|^Cy!z?hk#0;Q!1)B?!PELoS(9%m~dpLhlg=N_1muFK1l(LaQ_h0a7uZIaKS0(^9aYoy>NnX zz3cYsacjQN#c<8P>w~G%?clgSROz_)7(ayJ)^VQ^h;aXFqK^AL)k)xf$HEZtZRfZ@ zIAQWITCy7$PD#{p&7bx$T=O4bsIvT?)sNohGkqFPk*feBjCZ2K_>_HPxd)^Qi+5zHQC>0XwpE$=kJjxq4x_7PslqVjXc-Af*LzxwF_vW)C6 zbMt3RzP{%3EHAm=5p9fL^T)(a@RLIfr)1^nxM>8U9K6`8YyMy-ENH_rgM?(V@N@NUtW7SKhMC~UviI$#TSnwv`O~jid z;i*C~zOBI&c@PWM*0nW(?CiPO%aeMpPX`#kjuS8VZUa%*;Z(rM^5hL!@3i^ zq}a`ndBE454Ap@P_l4dq8Mi-#UnqjtJDbZPz7w1J4_+b&*Gb8uF`KkDKaWI~a{RaqDx^p;B)H zNol<4^nqx%7jApr_``T9_A!|?BG ztfVtC`k9XJ!TkQE21pX+(*ORYTHCG3-g56{aI3V0sFjU=w0oj*@BJb<>#J>FPoR6E8cfv(kzTgR$>n9|!VcMDKjiDY z%HQcKp>KZJ#amv@)Y^C3=nH416_F{gKeaS;O16(fR6-w@l={V;QU2YyKMI8y8sGr< zvk4p>my}Fg`hI0#->=|mii*LY-)Ep#lfD-j4j>_z);gDse~p2C^bq{HZ1^+1iNE9{ zq+=65LXeh(+%_GN+)Wh!K^HTf*T{t*Ae@t*#!)HvW4(E1(LhzIxxSbM_%byBXzm#F&NKe6%%Y#1+<>n80{_ zK$|uWTv>}l?C~Vc<|hBAdSIDbZ=0Nek3IKb8;u*xETxA^yHou&*^3YO>Q5~U{kMPI z!O&l#y&-W_{l&RA#5(Bh7U7A1?w&w67ZRsE2;Pa`Z#1lG$a=M5I{i*z1C^=uRQ;(K z*~ud$M-4&4>O#AyKVXyi6nL7BJWk-=%gDZ|ivCHrLt-8UF&=-pJIQHR08N2`zPRTP zb)*p4E)kM;|C0;p!Fos$$QSB+6Zbzcz2i@Sv#Zd@zSh%5+PF)ebh-OMdib-xYWM{M zg|G83{)+sEpZk3NGruB#*Mx!iYy10M>9I}sVD(w(pJeyJk#qsGL3H13z{Izs>6js-bXf9;`taszz- zH=xibhdq3M+z79oZwMgd5ma6;HUgBCp6k4eK81lC_UWBXNgpCn65ZCvH~y!@Y&q~$*}>T=4cjgT+7>y8|z zB9JUwyOVtO&`Nfz40hOQxsUCSb_4V|+GDcc9+Ummy;}59OmHa;x@r`n(4K(dGh?Gs zDz87i^uygX4OgP|P4M@0pDi!Lb`TVhj*F-r@sGaW3gc=^l6{Emk@-uQK+jEBcO{BC>4*ST`^3;7~+Afi(czgk<=^J&;Q@ecOV>;Tq zRKTUePE%d29MIsG&eM@PTlAeXrV50#kc8a;6;fobi-c)2v8e{zYg%XIVbGNPbm&TI z4_!;3ql`IKVUN~G>@seh;k+{n;bnM!AIsD5$dn5UNd_{C(0H1#J6m#15i>|Z<+>IL z^#I--2)zq+{GxE6&XxvfG4b-SdoH!jq~nV`C`HN76cyXjll(KM-BV^Qg>ts?2BX_@ zxYUTPOotAJ{vh@ljRciFu@qE(tEY7DVSgEs9YWDt9C{y7FkR9<17N>W+3Rdg!dZv9Lb|F`fG z@BjT;>=0iIKljI9E&PH@44;$=MLl}>l_a9FjEd1xbQuwY3ml(b)HvDO5 zgN^JQfLkmniNyKB`41LMV)t2gPM~HCSK(ek=8*GjQk2UtU8YHq>k9P-=BO!>mj15% z*zwPRg@>@LumnM?%L9X~DV$c<6ylZ-^zbp$gxK0MVEA$6KkT3juqPpI*uhCR z{9<`xz*6w4dJDE7E!7q<^mh8nxOTb->^wpot>5?X{kCeqlI~f|_EBTUEjIsR&+SK| zCyCi}8~&ZT<+k$;ZO^T%i1ys}+T(f?U7m0J9rB3%zYlBse}7U-(wr00muQTvf6{~huSkUq4#{0q~k>$h>~b1)}PAbr00_1OOC|N4II!oMSZ z{x|Zg;O~%Ufc*MLm*?TU7_YvN zsiZqS)QHeAZdcbbV-*%DrvgsOTF`k7M)6C%G`cjs+v8y_L`ug34O`H*v0FFO|JE=W zh;fS>CX>?Op_|ccnFIUSVXmaC{YAbLNO|A3IkmW!3}?+HwuK(|9JCi1XLC}q zN@9AZ$6e%w&nx^rZjbLiFiZ?=!vE-9K-zZ4_A%1uJk!~tOAZ$1ZiAFMVN1G&-E5iP z3a+L{5p+78ZD-fHuv>$Mhsa@XwzY#5pdXua38OGVR+PaEoyWfQ*8Abw*gLk)thaF zIz>GqUjXs-SvRJp*Yo@DQlO{K^j+0g5K+b(^~8<~8&aTe*=9|k^;JXWen@}|0FkZu z_L9^+1Q}P-3zq~3`-Am{U0xs+7U`Qct$(FL5AXG)?hks_=3)gPRn^aS-SzT3tO#3#9eQ_tirgnhne&Rk6Nq~aATYa46V)vj)IGKFZVf^gD&kNE0Pt+7il;BFc=f%__dW zBJBp>Jg?e!0lwM;WU~ z6M7O!yCX}lvDcTAZd?iu$s?uC^w08?Utgi7Puk2fze-E7w8ZL{MtoTUP4ZM!%qqth z3Jd6o*W86X2U2}dSnWf4tK~P&u9vsDv*ulQoit1TNLLz+~w;9Fe}a?l5fHS6^U$+*5-E zSVB5_=xeGYAlr%Z0pK%xYH>E5+;V#8V%nU5oK0@zCkscRxq276KFInA9X{`=E5qWi zlX`+;$j*;@7ru8q65r_N`w)?x(?k>uSEPk%#{vO4S|#Ebf*I%eK}pYoZ?{zeaZS` z{E4I13H0sQe2(4Ko_I*M@JTZbIB5N52z}#BuxMzkInV6XzA%$pw~uLg&_*c0xhnBD z`blww8!!uR$R7axT>+ic0um!68VP9&-AKO*q+f%y1Yc=~NqJ7mRTZmGpntipwS8!{ zwG9_r8BnTTir>rt+$(%LLoJFlb~%uO0B8mX$POyLFQfR{k*2jM({N-e59E;nIfooi z!Z8~~ny#>d#nE;r?3OfdR*Y9$beZ7X;*qv0$)Z5%5tD8WE13cB=yLn3CeSrp%(!3a-kzdo-FoRxawJzSln@O z1S`&?sCbWkQL7STs7j1(DV|$;%k+lYo7OB}y>`Wnn^v!1yL`n>GiG8qP~n@su;5!? zm&#W+PP(ai)w0zM&JERTYpa(vtZ+6~uUg?8y>aenXKkZ%^*60^&OwvrnL7(j zn0)=5nX{ZL*REdWtkyi`E?F{r_1fa~T#2x}vS@XaXxUXCC@@QkZ}62NVBV!LF+B6+ zvO=ctpZ+FG&8yctmsdBc+J);VXjR4Vs_Hd2IVYt`F6ZdkvfnSGbH3K8_px)G=)a(3 zeOB@4d}*V{S>15cYG+OLO^_13i;u<_bHP^~!(e_fNcw1PED~rYl&;R3#WWc+uPXvf zCG5JI+MAqfS0Gsfm{HZ<)Hr?}f?2t~aXA|vu@sy%$yxiIMkIWoAXOq&$V^T0n(F2C z)!$j+T)ukMs_MpobIsb-YgVjX*NoO+_UguUH!=1%*ER-L-|W1p`KEO%R!t-tG_s+!_d1ykf(OhSh6Ut!P{a8VFpwyc+tT zZ?36bUc;lhZnd*vb#=f=qm5}!Nt#)^cKP~-YEr7(xQ-&l66B^eE0));B+nRFO3p#@ z1U)Qt`BRBSdJjS)h8v8=*U+%yJJk)8nyV;XkUZ;2)Jdof>!zVp6CW_Gz<8jT4N2HA zt$0?^_1B`iy%svN>8cEAeIw=acN#H@4LFfu$hx&rg@_G=F)l=DsCEX{uW8_k01Wl* z7$}qeU{oQA5@F^n1T_AVI3vH>{&v zTfKIjbJdD{1j$FodT)d2NtA$Geb19Sy$fcm;Vm9mV8qi+9A=RM0PNViZ_ijlV zrHTWye|zn%w;7EkJ~WYrDK&O#y!%Gh9`M#g-ziZKU!;LA)k+TAFCb?aS#@2!M8`}`zcp09ALRrAKB_>)@SfB5TmCH9fW3`gq7oEi~vtnT01U0 z#XL|U$zm?g%30)+)o~$2F07C^nagvslU$q~7dpv>6_PyWazf4{m%NS(dl@$>B!$f7 z*K#4b6hgc**&bj~q0In#Oyumq{q!}@H77g`J)k^VBO<+sBD%OuO7%)#(Nrv3X>u*F zR!#u}L&9!(3aC;ph7W*g;2Z8p7&lU7i*<(ZNE$1RBLy_BI{YyeT&^V;gt{6+cfy~E zZnX4u4~fd$1UVZH&`9;qKsP*uV>Yf3$6u+y6pTCsCziQy{`TjqW|L3v( zXWr(ftbLICr6KDk3>#xNC&q+-f2{ve!{F0Y{DB5>$Ks8_?bTu|4RxPAu; z{|LsxI*XQ3?QY`&<3hs$pYb3#CB9lp{C4sEn&1HiYQ%%D=ac^fAd2#z)dm0B2QI^* zQq)jPH*^XPiTDRwE7d*F9Is@wv-pQ;qlj%UWubX5mUr_yX^@VeNDAG5RSat-V|ToN z)1w3U*Y9_U#N>aAb!wwDYSe{<+|>m`Oke+M-mjvkNm6pvs0oa(EUGhss7Ca`~T^s`j1rt-M_!ZclM59&?f%j zeO1(d-9}3QH3u6^K%f-m58YG?OZ6f8wr0pYOmlcc=8-bdp>?N}3y3!MaWDz}vH+=* z6JP?mWkH*O2^PCO7<<7q21c25vUSRt_ijhAwmH01U_qVM< z`@KiB--Q@2m0>E5tmbRrw0y*Ry&;w7+(Djmhe{C?9hEpN0OJt>Bp?R`NI57# zGjdRXDab)oX#aU+Us*Tw4jR1W%orkD$do#e6dRDG(~vNUaweVk$gJ@5@KVqQ=Dr+$ z57AA2k*=W@{VxVl|HimRIt)(;TK=)Xe;WQ1=(=k7ds_IT@Q=%O#u-_Y{4`_h}7c3 zr09^23T{UBp~Fvs3E6j|cNTujncRp&>3LQ7jtjpKJ|*U}G!oLL) zdUDZt*34=9uP0m+%WtrCF|q%8)HlKN=PufR9W!DnkW3f}O_ihxHM%qeebIgs$T`6u z-STqp+WyH2*T>2C75vGGzR5g-;+XjT0I!&Uvv>pZ@1r62C{2orJe=b!_XmgS>%>XBW+3Kp1U;)?!rgIR-6Gvv#!O zLJ^V`A6wDC?V@&Ojc7Rt_R928H|B#Y0>FG@5BjSO`hC5LofvsW1s#_zJPNq4*v*c} zq&{cHxAxZZHj0iR)ArpVUeP`67l84A01^%gAnA|*%!dV#a>UnVBQ|$HkzQ+g6P4PM zz&3(09L+8bgcqs}y9F`Cc;Ydc0kmP6I=849S50VwiXqY^5nLdDIZG*niWlidq4)#g zbkUJ@B~v$6zMv+%tP48p^LdJNIf*;*k3Mqu+QOT!4N6<7oWq+*3@j~q8JUNI1oOPMhx@^rbCBXHPRT4Q`t4g z;21svnac`8`y_ghuN#oB4@q9Mo&eLdg>0rcI0q* z0H^V0V8Ca=r=bK4Cos6coL{z{3t!Vy)8ngjP@%x|{Mrs_JFOGoIu$ic39HvznMU9+t7_g<&MFB#Wz#Te`5=M#ye%S~JJn zOlfj<_zECnC-%6WqV?OmDL*s9%X&hKI zL?ridqO6{~HTU@C4qAOlN@enyo*d77an|>-xY0cg7&(*pNpraKamG}4cGdFO$>S@t znE%};wvpfbp`lC?qWuI-DO^i#XWEz({+fzzAop(BLV3lC70TU1D0eSlU%Ua+<2(@G zfZivn+{Lzw^|o8h?ryWU{{RZyf)+BE zo}{fd+16#!?I1Q`TM-?0Ok5vmXo>u&r{R`=4>T+$;Kth<@*?4D8}i)^M&!BG-fgO@ ze{Es-o3Q&>Az;15d>UdU=9OhR*fEoyVfV;#kkq z#O+jz{c$|PqwM*iD;^`{qv z91Y_m_tLr4JIX1^%Ms@uH`%%TkZezRpdmN%vp~bQB0IZZCaJ<>OFKuS;CtFZNokgF z*`kNtCH1G_XXy4t_m+Ia89ppqF-vi{z4(M2l~$hJBttjJ0Eg52=&O7AmW~VWd3`7l z7v70VDWnJL%?qeEHPFvWi&AdHA|0(6K=m2=1aKC8f9r(HWA`TxHonGwFShUc0K~~I zwiPD%LX!iA#W=yE9N!8Y`;=_jRcb_aBHT{CZ|zW7_Yj;*Tzad2++m}s``6|65;jB? z=YtESQ8@1swf-eJ>Qza}bQ>nt*)V1ZKqk<_fvNu$tlE4j7h_~C7z7&IuF-fjcaNAa zCA_tR#=H5pT9lyNZ}xb*v&cQ+tPPP&~MU_F9QZ_h&#f-?aDFs#9IR4;T#WH6Y1Wn#Nxoc9HR%t^S=V| zxK^?zIzV(9aj%B?8c&1Fw}>~lOHvTg#B0K9#B0FIo?Z|TU~?L-x8){KsxL=St|0zQ z0gOLQ%X`Ko4X`hAx|DEg|KqZX2~#_ZIyqOB7(40t|6fsTh-JU|NWxp;0@js{IQno8 zCAk>1ER#aN7fJsFYTT?dBL9hml^Jh$Ix$sZ&-#W4(SpIW8-X24@cDvqU+^1&FenF#xpLB%nj=!q6MKXBuE z!NaOJ+<>RUy&NW#E1Gr%!2|ZGZYf{k_F-nY72++%>x6&k_jAxY18MYWg?a(t8l&)~%+rq>` z?DuVx^1lx^;>FYK9^g%Q?+!_$AA`NsDdpb+`(1eNZA1KmEDRRk zhk7agiUWE;SQ_mH%}&^RMH+?NisNWh{P)5AP)JLIQIt-5+azW_-p11)jQIWs;Sk@# zbqMQqyl)`RZvy`+;zHrSBROtBrI8@t_obF`?;!l!!0X+&5of@NQwElt^Mk)}NV| zAg-X>T|%akF$eHNRw?;4z*VTgvtcf4fLkMQE3wgN9iyA`LLE%EgwY!i{+fTs%y|C}G;>!x` zC)+>|dl8EjqJ-qyOb3Ghp9XcTx>GJpCm<7KA&dHYS^`e1LD5`F{w z8$rqTWKc=RLeS;^4SNJH%BFoWHkYG3kZkE_iLB^Dw6?xqd*=Fczg}%-ROiv1e+@FRlj+I+PLFV>q&fYa9$nBioQb76 z{eUHiLrlG^sG*JjL-}J5#%H((2i-;q`j8}c{_RirCMaCVn1IBc0ED&<8`ICYSx@Tv z%=TicXW^o5uN!wawe+^bPsZ~-p>q(6ZgWzYc9Nt7g5Cx$iLPQ112mfM0N;aK1^{Je zk1?36G~rFe0{j+_VKL>H=~0?%gnMus$C4YDZYyW*VVb_09`$x70!<(dOijCrz=h*D zuQDP|=&Ft-w*OftHqn6v)0^JVl`zxa!rufsm}eiQv7V3yyV=I=B$02oY5@!)yUbD|q3fHB)qvCi({`E^K>X}YEF~xr zRe^eCtdA=_AE^@2H>M$bB3(4y8L|gbA)j2I!V;An@X%}3SoBV#Uu|IHPu5Z1 z{s$F1wZ|1$m&Kro+B17r5V1siQ3IU4t+niQTgwr1u(b^R+K|VAD?s~&vMXIjr5E(m zfEzuI*eZ4h`mKG|mLq7t>}YT8BdhQs9RBYBJb5B+yO@nI0H@$Bnjww01Qq)tv?CEW z$4?Em%4e*tGWtq;g&#$CzG80#JST*{mii;7q>fMQOBP6`2jPEXBmBA%hm|D%nw&Mx zH90kq<~sOW)7m&{BFu(5#l8pTTBnrk3BnQZ9YMw39&BA4A-lVE@yRBbcPn=E<93pN zOS?35EX=#A)+AS0TNn2N-i~)iu(iBBsMvQ(YaV-c5B#7%Nqx#9<+MrG(+J-Uw-B}e zyBn|G4!9TZu_G2~OxNm6FT&e>2r%fThE^|oio&M1ZFSY&w#NLnw$*=a=xxltn{ZZX zqFYkzZ@^yFD_x#~_@m#ozuMlI?Eud+y^WU#+gca5wMj#L;M?BTc)1t&^W-Znb+F7=rrtw2!8=gq;>kZDcsLTV?d8S=;&l-Pag@l zJd`V<_qR#I5vJ+2He5v)329e zE%H9S4gK`qIgon?`drvIZdKBsf_XRS_F{a}3Ai2ae3C_kw|hJ2pOP%Mw6S=n?}Yo~ zphvx7^!q|e`q7Z&`1TQHNju8SIJg}H%>npFnM*%@6y@zDB|UUXvM+yCNk91l_`ME( zCt>GhG5z@p#a=?=zju}Nmrlc!lw-xx%^OyJprn8NHnP^L*cI@)@IL6;q{|b6ifyD- zNjeVPpHUvl)%?G#kLSMyJc81Q&)ibN6Xcdje~KM(wvvLdCxVJ~BIP~o!)h>H`D|b>ms~$R+=*^RvQ0FPHEzdpp^MG>}yuS z-Uk`lacVEb>WXz4{86~%x2X~CFz?t1o^Hvyioyx8@?`rAG@FCc7!TZcY;FFX6ZTEF z!To-`TbK;<&x0506@Yv3J_5HFU>*QYf_Ws^I{%~&c`^n3iy(Cj8$RIgKqYU zidN4_z-T{hw^&kPr36wmaBjb-;eqDot1gd&ntWHaf`ReMg#qH#G=RkKu*eUi1Mu zXir}O9L9SbhIZ3l z3CU3n_*ohczzid9Q{YZKd+~0?ob5E^!+h3q{1EVf{|E5v)b_(XigzF0=iQR+@G0Xb*t{>o@@^OF* z3nkYFz%N0&h4NDCtdLy)6GDFkxA}c&XW)i%kv4ssF?N~oYrrG%W(Pr1fwDvI#NUyYa@KV0?ityiv3jcJl^;^f=l(hHZZWrO59T$m?>c~Y3Cgn3$+ZwRwb znC}Slj4Gwd7 zlConUG}4Wihj>RNg_no^_}+LFvnwgQJj6RHDW~I6f*$4Ma~>rnGN7x1C8B{IW#}OJ zKXj1%A38|>4;>``hYpheLkG$Kp@ZcA(5ivNmz1G{RB9LoSa&reowuY=ol5rOCV$?EZ(6$Vz#<5F0o4Vz0W)*sF*Q^G3QvDf?L6=0(Ok!r9zm~C&E5XF}s|~EN@Vm zg|Uyh&;=aUs}@VmPan8aF_*U~v!()HU{z-2f#o;h&pi$Pfphv1ez{^EHydV~Vy?pY z3v&R;UxKhg(!_tqm}o8N7GUgrH;v5zFPg8IH@cM%@3tytv~lJQLFK~&m<>V290cwW zz!?9T+k=t;V{qsIRm@ERHg+~E;Eg#>)*HZKjAq8%(e@$CJMd-&rL32&OgmEv{Uof9g%+Izf<_~~- z8}Cz?%iqA~=jL9FA!|ZX(oU;%SvA}!OpN!<&tv>{7tE8G!!G0FMROnQ7{i-M=2wG? zIRdkWjmM?Y-v@kVC(;`x+IjQ4A0rNbR+3WQhn!dodHMny|Czf!Qj*MwI(yJN@cfr1 zjkZdYu8@>ub5Kb}9i229W5rL9CNBbK$Lj!m5@r^y0|CakH`#@CG|T~$^YCK+k(`bB z$;%@-pE0mI@lGxP{TeAX2zVm=5f1a7eh%<~r-=70(mue4@IKxv6}%k-hvrO^D7ZnF~^&y!*okmjFp<6+zweQK~o_$-H-WH^2ct-UMNj^3hNsQ!J9up zT}WC$Yq3EksSSDjHuC#f;HvPJ;9Z7#v=X>q0Ios)KLZ%`C<*zW)DTpXutsb_IZbK; zp5k#gqnB)`OG&pOeiGcr1KxsnZF}>^<1jb1S%&n$+*ldG#_sQ{v>4k&OV+-yCiACIN*-J&jpyrkT&lCj)?I33h~{Xk-*}#2-`v39=oZs6)au-j!mj4vLA-7ZhBhNRYAdG;03iu)~hd8XtkZCZnHkcSe zeVhz93%L0(M@r4%?O11>Yi;!)&4%RtKkR)8e3aF>_j%u$tb~`zB!mzGgb+fQnZ$rg zkxO+Zn={EIZ%l$=i6la>lMsm_TY}nX-HNqBK*Xhpij?9u8A!`MwAvP|R$PkE>uu57 zQkO1cX>Ds&zW;O1d1oV_{oVWB-}n8lZ*t~r&pGEg&)K)<>AT5w96I_2EB3#VP(PD2 zC<_$Y1sERmCQXMz`!Bu~x|5F&y-E3bthfW|F}T%3m0>O4hOYOXzTTt;KP&D7{B3Zb z4OQ)DC0Ll^j!th9%0Fo??k&8IxG~-)`Jfi~nF)C)Nrf5ZpVXNKI;>@*D%Y}N@?T2( ze`{COvqQYDCI02xC|}Tgc3;me$$f01eFOZrK);*QEGc{v{mPH0`O)9Q{~^S;sI)gJ0JFcZH|Z2x<-APP!KB@yt|k5Q zCkVG4VO|jFJdJie6YwuWy@WDwK|gvJZh0#|t|I(kKS}K$`fE`8eYw8^l#qL*M zR6?Dh`(Ze&+)lqKU8yH#cZPPQxw=U35_r}7+|ZNXF5|Zzl7A6&oqc63@?Q9NNZ&{v zZRP5}M86kq>GvvqK4K!Ba11{g-S{zWBhv~YT!yj^Yw8Li^rALU0Gst7ekN4o$Fz;W zK$@#h<>b^7nS42Yq!CS`zX(34g3JF1HJ+DvLg`cGNFlA0Sh#_ynx9NR=$wx4Lf}uMv zc#wF|XK4e-4;7<^@Ai(pcy+sv-WZtQ z-bNa3q*n)u$&~Q3T?HP_6%p?u`h%Txe;c!aEB42%f)*ZDL;l&%jY69gAo0z(q)VU^6_vAf5v|qVOC5 z`zs3n&RKX0e%3@!x8SFlFaz1HhI&TQKBkZ0SBOcZON(hR)kDu%wL9^ivJK%Ia|8cI z_iKht3I(#gDrfa+T^o9c^0L+m2lZYuE_8YoScsZA`>F@iAO&Xb9&LYI z%kN7HoSOnP{wsXEU4%Ls1^0R5ZMu|OM(+TU{~bT+Z^ zR{D5Ao~f8NN6vI@DtVyO`QiFb=ZQWio)*9y7!^B8-^)koyZDHG-Dkh0;TjjIz@E4a zeQZj4;OBUdGN<#yoj)n3aXW?IE)Tyam~cQ`4Hrn@CdKza-=)$Po+HrBL_Bj$SNO$l z-0&_oF4%vEUJvR{ahKaa7DKDNYrlZGkeVfF&fQWEdIFg)f}8Mwn|ggEOWZ@dNza3g z&K&>6uXhOeUWNqXzFxcxj{kbuxOgYlOYgSgzFy3%;=f+Z{^Gx0-06+~dKv0L+}F$I z#<^fl#M*~&TQY>(sv+EN8^Y~dL%3}m!fneCZaao>!;(Jk>tzSyTqqxhhj4ps2)DO} za62`GTWAQkkI!~fq9-iEyH~*qH}30Ivg2HUvywlAn_~#KONMZB4&hckgj>@PZu5t5 z^9|u6hO;r8qhZo7wY`_T|??~g&RhwrDnZ&~#6 zSG=AvCdUql5QtB+_hgl#Fqc+dg(^tr?Hj4!+f1S)05(XXXF;Io+a*% zE)E5z#$Orbj6{>a&)Hx^U7ppmMG(BN?NUR5n}Tl6R%;G=dJ})2M=Z&rF1x}Od*PR+ ziHv~4SAK;HMvgg&h{{|=!ehr)&xONK(f zZhZDz0f)ZI{tfA(LXV6u?T?tAa$c3QFwNDh{mEdmERD)V}UuiKn*Tn!Jz*j2Xu!5lL@ey@{{@Xb3(5rXzL#V4Pf7SVZm}`Awj3O z=sl{Fr)*J;ln2gS!4s~Ic-n7|c-jzfn3ryOKkQT&u=aMmnVe+g?KvK@22U>usv55f zdi?++^X~&?l)44YVG&X_1?ruO z$|p_OEK&BjOgr;Dk9eXe1R#YjddsBl_TYh`qPP@MG8ukfOj4&1L5)*srZ?J|U-wr+ zv)>*HOmX@rw9{4yvb1X$iG%kAN=g!gjxf257o;) z@F{{yf=Yx+fHFgwpj0Sht`@1cc3yVnaJH9nF>y4k)u<1LK?>88M9GAU=fbQN(a&T)-*ln_so_2}cOn*S5J3n5#TOYn|T)-!EiDQvC7KFSU7T~?eGR$%k(E7K4uC=Tny#PAqBqq=;IUS_M zm}b8h_G)3be;aA$!|gsOj9H_{gX}+r-wUwo!Y}(6!-q1kK#hRXpi-eyppv1e%*;?G z1|5p@a36CBT^y7ZDg*AUVwVjvzRT`wSCrl0k%&FExwpCt_aKLVs1`Gl=PG3`Z&w~4Fy9Y8 zozVE=mwIN?&E-nDFFS~0ppnbcL7l?SItJKFc>F>AIjrB;HE&k`0DD%~sPqruDK=cU z5C>!+l(4+j(&Y(l2d~R2a=#nyCdAB2$$&yJk7~8Huj8+=6ZW@e;*mBujH0AD(-5ix z2u+L(Ot;*Q-_!&>6GYIhfeUpoG+TUJMn%T>$RfheUnAk?FT1T`C_#OyQ|AwScFMW9 ze1zu9S&)d{>qDh1t94vpOb2mH2Q$b6uEn)PAw^U-(|ngOwdPXKW8VQ0i~NmBk96-G zFnxtQz89i>50l|MV9L{TJ44&RJ)$G@AP=#;e84nY`R;LaxD z;Xk1vV;)dxv(^6H(4){&Y|<6*NAz6scrvtef-r3h?HnacPlTQlk=eI~0%er!cwGjB zIcY?BjuCb+)d(TLn1G`U>BGG5|JDBG1`S}Ru*^h2S*Xz1y0M@VT}UQTI#RR(=96d1+RSS3JY?NN9^Z3-9E z17YH93=`-6P@sZ>j$9HQv{U5t0Wi_waoiumuqcchW88RAu|Yy}LpaX$C^U+5qBSZ` zfs=@1eTbK_|0W989}3WGF22+;*# z7x&NW^qfL46(0C!dpSn;0s;o>qMjGZ=w}IaMLFo0;A~&VJ13erB^-l0x^tTUEyK9F zRPsqG1=RB_ISD>AhO!2zdMN6b`B+J2`kd`1ny|I=jt^}qi<=Twhj#Ey!<5?G2lx}q zq+J%%gU$|Ac>C@Jtj}o*e1MtXdf6SmiU=_Lr~HIEzkPwRM1TA9G>Y1P%3qoBbBmAA$){!Z*Frll<1Rl9?Yx)_=FHGe2RHm9v~waiSVB8FSKail zhWL!ktcn>~(wo?~?f^@Wos~|SpV;^8`YH_tW{meEJ=Sz3p?25JPNf$3B)>v9v=Gqq z?SWHDc!$%i&i22~cQ}2RCYg5CVy;98J{j6ohTN%&Y3FFlR>Co-iisC>^NDRa3)sMC zht%|`i8ZFdTsSMVloCptkbG7RKH812}$U;uq zAqqMDZBfYP*TDkD>57Eo2qnKF5K2B83KWnxCC-sQ!sDF;r??>Ld7+*BHER0np`8ts zX8J3kogQvD8rtdPhF3#7zrqcumnCFKzB;sX5_dTe+Q~cW^go1la^76&CnQmhgON`> zQ5fYPLn>jz9&oy1@nd(mR3iG#F_`n5B^|+#80$=E{Cg;HC35M{rxG*OP~glO9>?&S zNO4&2N16San#8VrmkI_nVc=mkMv+-}B?0Jn9TvS z8dDy6gjNi0k3vn!Y~cW7e}+OP=jn#CY3D?De3PM*R@#`f6Bi-}gM6~NGWJJUDKrbP%0{if<24%Ji*v{#(w^&@XbXj2os`@{;s4uM&a)?nSQ|7 z1<)Mq3haC^h9wJQzrUJ2!}x~W2kZ)Rc%HE%q;u?#Uc?xB)3d)#aJsTC%Ds# bo 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�I7;x|bI~MTuUSF-k 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%0AVcu|OVi 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Ɔ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%0AJ7Rre-i0eKfDmX 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

{|rFC1g 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%0D^37oDKU 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%0A1;r|%yT`*hQ;r~J5&*uRQ+&UQ9 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

O2wL-bnq1{cVb*IgHy&Z6};&L2rv~ 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 |%Bf`qxCLyaQ;V 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�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%0DWj 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%0AqOrz+?PU9qy=~68PCw@V7hK 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άvpnIWev60m;JxZ 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Α_o)1Jx2f}L1{il6E+q^; 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

Z=v?wPZ4TM12*-#nyLtn!SzKcBL>Yj~UhByxIUM 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[zlD!g0kGiuf)>I)YNM6b0 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%0DD-wj%sZ)x*DZ#8zs*_Vi&q?;nudYymD>G;LBmC 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

30T_> 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�N&yMNkJl9Ui}XSgSQZJhD&I0 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%0DV{ZqU=JuLn_;Ud1;aqX9 zsSl8NVyjOuUa$AZR+;$u{eQ>QmrgHsvWW3IziOk!G~2_@4Kr=p3$15(^y#@Kz6zv{ z`Pe(XjMwq2{f$iP_fhkk(&GMNzRmu5aKnDMyfmhn-=8<_EeHNN=zo^8zb;SYiHDhH zehk0JG|wk)eZ%j6>m<{3M^X3odpv42wWAOJsMRT% z<->$ltLr}u+{LQZargI!_>m9U+r0*d^hL#O9X*(0us#v0ow6QhvVy5koaZwX{o2c| z8)$_($*}I)hLbII=gXwIJBG_MdfIcN>OhaPb=xRHakmN7wz#I@SVvE%O}f&~mafCp z6!o+5a_O4&3ZvEH)Pp;l+FRm1ty(uq1;wPS6Y6)YZSXXzxEpeG2X>D;qO?g+jST-j z`s%ettq2_~DL_eL$7K|5CWs>8y_{6@jy$gu+(pX-3i>o&K8PVhlv}f;v4)iRZJ4~Y zbYTMOXiuGhmtEh|{7Bv8!7Ci=bbZDJj_%5m8i^@ApZsKnK--Rj27cwEj%JZ^j4R-$w>da{r;5sesETPGe{&{$_~R?*?%M4Hd@hpO?d4en+mZ%%kOuX@q^3z&LsQm@h5WbqCdS=7Sol8 zztW0cWAM8E4j+lLzYTxPXWldQ%j4gj#$U^ys>QSi-9Dn%nEK@L><$yZZZ9QgpL2GX zIZXmpSn`EoKmAAF^3z`&@zek5ML+%JQ9u31Kk(CoV}AN8FZ=2LJnpBz_KKhWlLF@o@Pygw(k5(<)nLk=Sh+Z?ywC3Nz)uuh_ z`HfmR&i>WlXEo##LoWus81yLnb9;H>0@F_Wzr_0ZEGz$xO3vGTVqD`*0p?OP^~8tW z4>jAZV92_DOh2uochVR4!_Bg^j~;TC%sUZsd7TAZCpM!zq*BpUM)vNV&>_;gXJ?x; zj?65xgP;NS*sS;0bz!a8bmg5r?T*F^`bLaGLT@&6)fvY&^!SBEXXJ27w& zqvo!=){e+wND@&D=NP~Ax|Hh)6 zZw-y4yQu}5KeN45>;9ay3`bb@WOU5D)+Rcq`6SYI|eP&&%|XsaLJ zCwJxdlX!}LML*Swxdm4%s9(DLqgK#-=kkwQLG!B1KWatz@*p783YMHMgH|hgFN4tD zYQ>p3;)dpkdvT7q@j2q&m?Lg_Zn$icvo8OrY?2o*|EO%zgI@ko*+rKJ0im+%=ZI^b zBktij;*xX0WnXSxg7!E-`@riwqW>i_gvBdt!n1ceYdw~FEN8a0e&0^L%a2+$lzYXGi45N=Gv|t<%k{+GSX(P^2Y{)Y*Ll?I3YoWnY;LH3}nd4VC|5?`6jL$8t z7ClH(nUnnIKf#`=gW`6(n09G7Q)n7@BeX%(?BUd+%^J8LRCw1qUD>MzS_9RIT~S)! zv1;?GE*{Av0eL z03Wboixzq3Bi6y)38pu}e-r!-4HA#a@bBk{oHz3!oxjL=lb)e}#qk-sf$22FmS#o1 z@($BlUmZDb^bxEd_@t?iQs7IimM;!5{uJm_*1_k^{F(6!&3swwOCsluentC7H(MN@ z*ROuo$TZK_{wb4bJ^zb*#pK`QZ;Jg*dCd9<)8`UCf3?r#e>?IEo0q>e>FfD=&JUPoeaoQXr_uL3?29jQ?scYheXEtdOjjd5%vUq|G_A9b z^}Y!oK61X5X~6MB&d2@q&w@;U6uuut{>GTT4m9?&{nIN<>-loz{0P%}Js@(<_%l9Z z9PO7fqxls%_nbezjA{6o2-~ zRZhtF{v1Bi$ar4A%IJqb#ii^2;Pa+^==>gj(A0-sUr_}K4$u0w8x5`Ti0FzQMcKN7 zN8M&$L1^>`w-sGs_{J*?pSZ&CLsuAn>mUOG}EdAjnZAJ70Uq7)pV;~XFw-MvxV5%HwB$eRZBacs&Gbk zA>SCZqjl=(ZfR|K$g{q&>C)>rsa^cr{5P|kLjc#+I-9Y(uFc<=yEZr9x~`<98`==2 z3#1^m5^ zzt{8k2L9g2--Z0W3F$iV1o<2Jb72H|g>g1fB0|@tsfMoNvTS--LH)gvU442hmPFINylh z`9`|VH{zvl7q{M_9X`X|;WNI8&({{LMZ2K%=$qo9Z;FS$QJ>B?>eKn&fOrUP!fkYD zoj-))cnUb40*Of<*8fzx-&TU%ZeF0Zz17?HBczpQ2#j9ys_u#M9x7q(;8?6}9ej<RpKU-dgNW++*2gm2||$qH_kM zeXZF69Uz{C?5^KSY6lw~K38>g9PWv4w(HT45RTlb-sU4+qOaRiR}WKNJFhFPDJ#bo z$c3eK_)8lP^b>Y=aN^)1r(;DX{+ZrIA^@OqP> zqrBc^XvOPIhAt54trO|37wK&f>1`D06^isWiS#z}`j$!mZeHIq^p-a@zYM*V*S8G4 z?N@&Pd#3$#(Yt=S_@a+i!$#iM^QUOeB5pr=f}j?f`O3%9K41_3eIsvk`+cX7@hpFD z2{5haSFuHA{-NdHXpZsc{e|b>^|jZ-4;p`#zdvv03)x5?du`{L{ObKvk#kS`^ZQOZ z(|W!e`N~^N>-FBq`Ff@i9iC{8$-gddGi^7}sk{SQ`b%EV84RGer2YeUoO zkFr#!u}`uD^b*8h=8I3=ME1mJcXP_#8rf}gZRutn#@>FiCq@{uR;KqZ6NXNgX}hF{ zfFV0_gh|81LtGX$&OqFLZ{+Lw$81yArwCwrksRop+pan= z5a+RIk2vijH~iAI?AGD@g*exy&vfWpvxr|Bp z4aT%J9gq8d%!f{Ho=MBg3y=Nh`MJz~?5A90`TK*;+n8Pk4D21<`aaXTzl<$1{fD6& z{Qj%Wc|qRKvdG8_8n50r{Tuh!w-0gnBBWPjsZW~x+za|%D^@kh{=9!C+w{L$-xB-# ze)cC32fPRxyzY-f06Sqb9kMf zXhn!=tsji$R58ut<@;tous**RIlqPddH>RH)-aue{N`9~>B1hxO2Z$`kI4BKeep+g z%=pFp{k(}!kB^b_XBf}<%?UHj?dL|*K9D?~$oZ4(uk#ms+m!E4_}*#7ZZz>baGa}I z%J>yX8fn~g|Gjq>(1}%QF}l8CC-NrEfA1X#gmK5o%#Q%0`R~0;fiNka!2a`1 zn*ZKA8Hg*Xc7!u5H);NR?{*+e>ivKmag*l%I?;~YvS+RUM)Ti$*967m$`P56BW}|C z_upBeZ-dii?*K;g-+T83<=B;3GTT%9U!wUh?;J~|2^j!gC-L8ZciCEx{Qn7HH2=MK zpix~?YtZ?EErF$)|K7XQsP($%h%<4Q#!}6Hc_&+nCm~=o|K;6osroJlM)Ti$M;zJt zPL-<^7|nn0U2|05sd|Duu~hSaqr*+pM`+91x?DI@u~hTld#@dFKUMYzfYJQ--j7EZ zw_Rt3fzkYz_w1$WrwJI%fB$`bo^zy`I7hlv^IzYrX!5LYUDkR2T8jTmHUIth2^M(T zE^M+v6eRxZ7G&bnRLgr*&uM-x9Daaclsm&fxs zG)2=6&&#-24@G$y)t$$%FhU3+gb+dqA%qaZ zO$%qgt0N@LbdrX;b#?Fkoj><{=lA!Vd(Ij5$L|XKvkuAa|6x7y?+X00-s86;dqjR$ z;D30pNqI%?fXs?dU|9nH_xG$kjQ`<%iDjAqZi%$pqXhnk_cxa7704$cgfs&G!}}!5G(mmK@!BYX|Ka_X zWtt#QDoG>oKfG_Vj9O4eB$Gzqe|Z0AnI>2kzYUBM_#fU!S}rT_UJ2BXQ3C(>_oJ45 zu7f@sN*aOx;eD;;2tYs|$@@`83H%T5k1f*#Vkq+7mr(+Lv73+JGnpo!v*f)mqXho) ze&+|+$~1v@m-pF>68OKr|M#Ii-OtFjvLF8_f&csai64?DXDCk?I+F2!e_!%LzWo{c zIUfrA-{0T-5dLR~|Azwq;6CZ{^Fw>-gm5pN4+Z}3@3($Pj+~(!`B32h{=V(!WROBP;-az~OGsgdv0{_q0MhERJ(*)}LGM z0{_o^y;S5Q>zx2ilKfr*f3dnmkS6e6N%DIM{69P7L&^CB-YZFdFM)qB7AISOhu$lx zI*7kg;QyIV5{WWpE(yq-GhZvD4+Q?7`R)d30y5`J9ccvqpS`D(5A~xn>_;C6{Kd|3 z!F&S!=nVVO2Lk`kScikQliv)VZpKj?R|#r z{ei$g7)urT1ls!y+xr87zu2iOm`|X+&#=8eIKW@N8>9*JqciMB9~|I+SZ*KE$?`sH z9~{X4U_X*$+=2G_zJ)Xg@;}Ji|09jSKmU*qCF|=zofAI|;{R=dziizf)Lm}Lz`7(! zf25EY+LHNSwg3;)$X>j!y^}7HM&K`dorh@xIxy)+q!IWB*HV%D<)J;9lQ=&uQs6H~ z(+}qp=#NQ1B#pqoFd!#IK7sz2L?0ni;9ux_Yk`T}ivsv3{e(0E|3V+f2WbNMCzX*# z;4i=b;raylKj{xiBk-5^Tsce=z%8keGy?yNhcJ=fJg7`-Y{4XBjZJ9QpOOtY`BLw~z5An84 z6YL}ZGie0=7vJkghisQ5+AiM__=_Gb>MkP^=tn=`-qqg`_+LEKk7O??z)L@%P4*pu zzt|b^ARpoB`}*S#*w?-z@RxVNIcQ5ch7;%`KWHY6z+YbP>K~>#z(2^_a(x2*=m(+9 z=K%j8Z_74(pw3D0q!IWRyw{J!h>_r-3#1YF7rfVxG7e!ufAl*7|AIr<$~r5+ABmLL z-x2tW9SBAH$TWd>Ppk{z@BdNwR{l|&6MpS~aYstwCzaB_aVVq{u9GMUS1DA<(TaqB z9VUgR4B=^EtP~y=C54~vQYxZa6``*ZrErxTyp(^-AFU=xC*F3Ej?b0yy-X=QDhnm5 zWGOu30-tB_xBq#h{JcP+`l3(@&&=ktVnp=jOW~LO&%@>C<)ptXg;x|wCmvLiri_RG zd6@hhD5&)AMrJnLRc;R9n#=g&*?LZs`S zmcqwoP%=F!g){CIKFYlMm`2Or?l;Vf=Y#T%2Bxt|;nQ}MSR7Kg)xvbv+K57?8Dtul zqBcBg4<&of+K3uoIkn+@1M!#Xl+U%{;V2D{lp;8;@u?$Tq3T!EerQ!l5mC{#pL)Vj z(#z}1aZ*GW?7-OIj@u!(KNs1s3MG4Vh z@%(6zzq4~$*JQqLp%f9_rHJFY*b!MdQbZol8Bw^d;<+e~HHvCnNZ{|v%lutJ`YNX5 zb#WekK3OhBUO7HifCx&bsG=4KCNwgERo~wkNo)@=t)5n(A&q@XTpm7Gza4df+qN0l*wV&{4~L_R5{iZ(0#|~M}{4g zB}-UYmdg3awLWN{SkhGb^O4{7fJRt3KG}ZEO`4m2ngcsaaA z3ASMj^RfB!kz3@TtV4e7G5WP(iGG^Hm>#kk5&B<_v>c`h^w}iJxo->oU-+KA zmdUn1u*H8&8lnFS-?P^;gP10jP!zrQ_q*>DiofTd!l%n3+?09jqbiA}kIvywF+3|uX>3BV9Zt=*aJhSo4 zy~&SX@yoL6Qr0Jm_2#|CTDcy)=I<;XLf=Wp8(O~lqXhXKu1Uw+dB3ie0a$b(LB zN!Wi8tt^K&5oP{~Fa>q%N&HBol1{`#OQA_h>4eYDV>H-je^EE3B~XXO1noJsoIXuD zktLtwNteMRQ#z3?&$UgFPDEXhP9&uJ>6tzypXsylBe$&Ux|E7!IbDf#;<9|sW12GM z$NlBfiHgglE0#{AS4t=HOa1gr&wz;PiwfoUf8PpGqel4e{(xe|mzy$NblP z{}?&llyqW9K0lXEyq=a$Ow90oHPVSUuSut4K5zW*%lD5qNhciIV0x9D&cSQ>Y?Mw+ zyQC93w^ET~lTJ8?*v7Q~6iz8z8KvZ02q`=%`qIyS%2nv)z3fc_`naFGfwMZv{MxZ8m0kGKTC6rcZ#rY0_-U(U6U zea)=+=tt5wH9wP4^kvx4C~?IRu27-6L;b8@`_$u8d;Q7%ay5^*+=pg3nG&rv&RJJKPvr21NW`s zcPngfd8)gARh8(HpZq3rMYN0n_lx=bk1zi5#rQv$e) z;91U9PsAjB-aqw|ALd`;t_5knx?C(vE8)ETp9IQfWyBNzZW)S?L_T6;gtWr4AODef z?puGkQA$0s1oJ_;ML+yW`H#!KOk?x>VR_L3_=nDyeez!l9m3DMsIO>0h0qoY-5WxC zcogjbUPti=AEIuL^6AwO+M*#Rhh+Wf(@P<=r$bH;$vTeuh`*D0Bn*A^*YrL9qKdz% zQ$iR&_=`GT)2<51=8?hlA*8205t7H_0`=%$cYXD{)CYe--4~KC`+Z%C*iTs(lL9@~ zO7u9dpr@ir3aOwTn5dCLDxp-Iu9ZTnef~f1U8BybmqO~Q`MZ&_xk(DSah-Crj`xNC zA9D33?^6$`Wcg2jU)9cYvlPq$M}9^my8o(Fl|D}_85MvrlXI%8A{8S?pmeEy8j z#z`|Ig*=^*LY}=~y2l^$DD9lk9OhNRb7dj%$d*F=He%@I z0y!P~O&QPSQfTrektU1x>X@d2X_`uJe+($tZe0MpFD*hyez&|(#QqTt5fV}oSfk|)B7?Gd}wm~Vsr~N5SP5*)!zHeTGpC@pVKaC&78DX>1 z(h^2#YG6NzpdDHAGkKG)uMt?;gK4Gu>t8qitX|#^A^s+HEa&ZueiWP|DA(uESjsVu zr4)F@alfj-a3kjC~#Z=cMWK;UAnMC};w4`(vN5tOJ_EF`|!s z5e&g+SFwcRv@${fAQ0%Uo`To4K6St zf4&hf??e%Qv9|W>pMEXX|MVN#0r~mYIM}G+jIefbDpUErlZj@RO|Ks{=-~1^* zO#H(}i64&8=#)Ps`JudEEW3mFa@zli2)`roS))D*TJHxdv>Yt3Brg-g@3DR*`bcoD zk=#D#eNh~N3FEyn2Q-Hkdk5#_ zh$X5P~&x_%$xCC!*3A`NRDdX6cxAro;1+<-ti{LG*f;YZZ z@jDg;yp?6RSX={dA>b{kfVZ0W%CAbJtlF(AMkw!;C=K2-u^+9h4+$vnE8#s`*;-I;eNK;Q+S^|gLiD4Z7~Gz z?FrWP1-zp#;hh@e@7M5NorL$*6ltGhzkQnNXPA!$-sxBHYIXdrhj-Gz_J0Gf&IGUC z%zGAijdC2w#(LY~^*ETn5f>9&teg8QkJ2NJDy{IE_LP4x?fuFV&u}l}K%+9GzP}dX z{|$$uCqEK@V^!kwDg`c9on$_;{U43}lVQrzKRAv3q*&}n#^LjJ;(s~;`>~09o`n7Q z82n8`3O?^5{uycP7xCCn&%l0kCiWAum~S!)EElj}o`e15TNkSpoJh6=FX# z8~X*t_`L2C_RC7JpPNT~%2<9m_VX_DcM@CdmrQTmIwHoG&#oi z1p5yMu|Lqu-@|OD5x&DH_WSyAQTY`6HP2YiIQGYeusM-?n{3!O+gXMK`&Qzg z=fXbyzx^5y_UZq5 zzTyad^%45IBlHbN=$ntwx4z&0zrOu``v>;3_qYGA9~{a5{r-So_aDiB=m`DTk@_6$ zPkxZUjQ^qj@as26>T~ct>jAy-2)*?Pz4QJ4^Xs?o(SNm{{2o0!-aq+=xBn!G0&nH| z{o{XlE31ls{10!l{&506#oPB~!f#4|w?QBGH$9i{;jOGH{_#J&z4?z5@G0JQ{T4Kj zehZqB--71lZ$YE|Cut4{@YZ(l^B+9pSO4Inzytj1x4{2bzXkrk`X})}bD1L(zLB7O z4(`y$^DRcs#ksjmY9Ti-_BoRHm9X1`bE#z;Se^xU;FA^7Cp++K564@?S98MNE+CDt z+k^9?<$Mm!k35!38ez8w=SK^gU`&Slbp1-$?ZNrcf+iS~xj-6Ww+H7(3!0!0#r-0F zCH$J;{AfWF^r8NM{-5yIg7c$gnhc-kA>K>YU+?`1`w!dUP+20e>r%p_Qb0BBv;T0m zE*iV0Fzk9yWA{-k?Uy)sVxpkhOMoX!1~rK^G4Ld$z>}!P+2S;KlH-|I2A^fZb0Ld1 zP%=DW7jR0M15ZjW>C@rK%ZDef0G{+hc=EHEUokvYm*B}MQ9c>SgQvI*o=fG*`-aQ# zlommqTnSIv6?iJDa8_N)JZo?&0q|U|g{P(hXS1%tbLAR5b@lKxRkN%{(lo(SdmWza zI@bFJJf~aWX}(F?2As;e1y6Mw>(~y@t!8*yJD6W5JS}%{wyG7Lj=S)5-sAK8@NoW@ z>WgmHy9b^}4{@rv3!dIb@Z9W!=k8+iVP;SFhpenS^I-3ZB=`S;jQ$JOhtjL)usH zywH(O50A+J&-FJ<>x=)heioc<(ZciGhUg4CJX!}lHX}THF3xLo!(;Z4#tM&XkNJ49 z``{hl!%4V#+xO?k-$VSHBY8)O=xO5Ld=k4^D!BKed5`#?B>t*crGobVF7c1(O~CHy zM7X<>uuJ=YH#-Hp32Noa|CEMZ;;&B5z-~$=cGI(vvM2n%=!_ifrsZOn_P?q*A7{T+ zz`P5wOZ$H}zZh=YCFWa#-J(3+FXK^8n#@t*L_QekpdVYp|OO?3UG% zPBsLuV)y{irc_i8oUq7l3Iny`!OtaBZ9>HqCEwXl9SvD@6Be42QRb!@|KXFGOp zG-J1|180?;*u8rPyEj`|#$A?q54-gLcCXxK{@rZP9-NJNh~39s*uDJ-yTyI1?_=!J z|J$t}fNJ0g=>|#Di`{`?>^>P`UmL~lP(OB`Jth4!?7kdl-a|YlSg#k@oqWl1#;`m5 zn)ps)cX|rDW6z-)pT@3XhUqozkFS`wj&yqL(*ED2{lD99BJO7LsRg?;TI}xGu>0K3 z_i|vD_P=V}MLu%#9X;5k{l9DT<3C0G6P)lI#eX;a>;G(uWSx|tyRX##-zVV?S4ktf zXt<-o;7&RX_sLjZ$H7hf)yWBP%lOA9A!R%UJB}2bDp$iDmj-uAJlq)>NO_eBw=xUv z#AK*CFMR!_1xp33}cbDX|tqMp}2zOpK(-tGec?s^a62501+{tBZqjI=?=J?;)n0Ii$H~#16e^)rvIg!eZRwcHb z3hYFm#P(B_@|#~rV~6;Atf#SaGFAy^9CrNp?-2hT;(xY1hWMpmCsU0b;=e=u)o~fv zNzB9!`F|&z_}{vKounM>kpFjxKj(U5`+fm-82?en`S53ZU1FU}uv5%AVWDN%sV&D& z!DXBsEW%D%C3ecM@Oc$>Dg^%OIAG_hkN>el`M*vF#@RhbrL;lOLSK&RZ4EYNFwal5d>m5ervB9P1sW{4c2qaD^wrbux+X z69ZR#igM_J8m^c$xQM@t@gG-QCR~YGe1~MXGA_WCnWM~%&xMQltCRELV*JlV{LhXF z{&$sMf-AQKF2?`PPL#n_P!3n=Ww?@ypc<)!tMCe3B~@^7{6C_%20I?WRb5Nk3iiLN zte0%m*TY5muNrTJi}<^69cOKIa8drdnp*h$CS1*e|J8AAa54U;P&C7JxdX2HPPlH| zVI3*|$M3@R_#Rx8|E{~YmA}8%%{uqM)%Ost&Mvrm9^vd{A6x^E;ky5TWe;Hc@e{bn z{}H{taPZgt4hRwTw_BlbArbU9xq8V2G_)ExL!;`t(b!A)pO=I z&1W-k=`^&ZUctrqk84N|*J}gY`wgE7{9SJ>aG7MI--fM7J6w7P>uQ9{=2B8Zv(6s4 zh`-Ce$9%ll3ZwitIDf0GIxZ#1?U|7&eJ&AeibCg5y&BDPbKupJ%4@>8fY)YvBe+v)MFe+IV0GO4?=*jJLV9e)9yH$whz6aQ`6 zf7{6gOh^2yvawD5zg=*N?^c5CqCDa$^#69{Wo%~_VY|E%s@^NuF0P^-P>OBp|LqcB zyR;VDwEz70WBW=y>spO%#{agjHBo+D$96*<>wW{74^Ih+v9p{Q~z&M{%>mq{@aZIowaGP&G_Fo<9}*}1KU<3)4QNn zxv~Au!{3zu(?b7mYu;gd&xvgtZ~OlI{O<_ImR8t*PU?R}&PleJ3eMPQZ0&`?sUrRv zv2Z5D!KsXr?SJ-{L^v7$cP7WMt|@SatEofe0mgVZV=}Ncoym5|f>Xr*mH$DN!)Ljq zNr&@7KAbrPP;>r=lltFzshISa;JjP{XMCRW-!zrc-YSRl%4ImKir~zzgu3$zoV5R( zMWt|N)BZ09)7L^hQUPb(RX8dCowWa)GXLuv;Uxb%$^U9g9h~HUC*%LA%A0UD)BZ2N zh17&LIQ{W|XLSepqZ3ZX|DAsMuTb1WYTkV~>upPPYdAHNY@aF8J%^L>-#IzMchVgbD%f!}&ENm&0v6Xp2 z#vfbs|I~5m*dqULr4?X{{@)h;KiU4KgM3jc45{@)h)U#%ejPv63p z-~Zbp|8KQ+u)dwxqW`DPX~h=(zb(K2x8?i(hw?wJ2V1oNwr-ODrypT!ocPoK`)E|~ z|JKVV*rNR3qW`B%5&qv6{l6{xe_Qnb)Zx#tMgMQh@BgW$Uto*+f9nHkK;N&Fr1unz;)oV!T=ipHif3{K+joDlds z1paXN{eN|33>?JYA>-ei1_%AWQwbTQ&x9ja`2UWu3+$^oa1`XSZ>7VLk`MK*0yv5b z;YiPhqokPSU1ItYIO_A@h$~Zm^PkG0?!64h^&&X(D&fc`|4&rGLH+NXsA1m*9M@{$ zsH}hkSE0r=I2!BWsH$drH7b8r)&vLbKSy&N962}OC~YA>-DKZrfTQjf9H-mZzU^?d zHp6kd1CEAH)`9qUw!%UD9i8`B$NO+}-NvbJb@N#d9K_#2|L;`!BbLzz$KA)Ie*j0z z0D0~S9K_!-&juR?6*WwR}dv6+8~*Cp7b{!dkxVY9d#o3#Jb<3-d5mDt1;Y|{SQtSqHW zufZne|0eCf&GZWPm8;mid<~mb_1LTv_P>3v37ZW<{+}wpfz4WB|83rAz-IF;sGM!s zY-(qHo3VMT1DkCE|IOR2*t~a_W!%GN_kC<$C;sK#tYZ&0J08NmNB-Y?giZ4QX4hkE zK6;?^{^bDc`~;gLgV^lp#pV<8|Em#fJ{`s8<9@#HQy$N-*+0%U8Nz1k1U4VOz$W>B zbAs}J?=>-<#OBNt%XyB?XVavc!6xm$&H7h-rh{|T&;NUGu&FgMjTxJ?|2Ap=Z(424 z-;PbagJ&Z)Z7yuu-FycRHvRm+N&ff#YWPet`&P9D>{&&#+v!4|B z+tXrUkBno#i-MiwzxLQf{!W5DK8Ej}0(*iQcH*Bs;=`XYtW4OGvS26vYWjb6bq?&= zxv&@b@Mr$SKdTV-ux!3xF&qZsUsOWcJU%OfJ-wXg%dnRf!CqR){I0-$sfvBH6!yv* z*sp-kYhm}#|5bNhgT1ky{jM7JhDO*+nqaRX{~PK^cZ2QP0(;#}*onWxK>e?7gPrjo zds8#)jQ^?1Ep zGX^{DfBTC`^3fFR^#4zlPs2|C-(IMJ-7o*`^#AOI2H3T4Sa%cbIy3At{|{&xf3(5w zvBPd~z-}`#PZ!(C&9et~vlaHSJ@S^9b$$ms$A9e>KJxwf`QJ+Xvm&v<&qKuA;FEAT zRIu$uvrb{yVEk``@xOn6Hx3&yQOfUqp1?XJVndyTjngsMNK8R$j2asmY1oL1XU;UE%X8Y*7Ahq}O0Wp8x%wT5J%1IsUg%bB*UL=>MH6e}Ikt0c_lPf{pG$Y~&OFm|<+Z9KlBKC^m-sY0Eyv2Iqfl zjEy6;afoSz|DRg*5*y_IjlS2^nUmOfHigvo=h&eAw?X?awOfM?`u`hx9a0DN*kJs3 zWAF{%SJ?j>jQ^!h5dQ=l-^q>*#(y^`|2JN_Sa&xzDF0J6R&2QT;Lub4)Ba1fIbl62 z|2K$#aU^VsKKzv{Z%?w#h(GQBP1^r9e*g91U&X>k``@OFV)+R?5@DnKU)RJiZ3@e$ z{@16$78Va1?f*^2|782$mY&S>1=tF6m?oDr>9EoMx6%GjRTjcV`+q&Un9nZ3#`zzo z=>OYF%XnQ5TR!E#rHH>PVY_|>Hpc&Km8JZ4zXrBuz{dFB%G(Oq82_{3nsR2W9ya2i zs&0hsY7=a-{CC!|ZZ}}N)B;=mP1tTUFh9nB_u6=FhpnlZ=MLC1I$6&+ zfA!vd*oeQas+;|?2ewBK*-yJ*WBlLN-Ur*=$E16}V*s|PC$Lff+i3sAoF9fwGXh)R zDEnwXY}EfY#{XuBzin)Yd^Ev2zJP7=C2UW}V0-Zzso$D}jqzXG_;c2GntgW$w&xny zw69?6(ZNRiQNN(f+eh|J&XO{hz8d!bbUTqx?_J^T0;?|5Vi; zY%VYB`3^Sn|5_w}`u_a9YNHbCVG8mn@$Xh)o%&z(MHtIDjSXik*2CkNDhlhe z{?AIpx{N>Pf2}8{@V*-Bv1#Plc&w*nU|pRFEAd|^{#N3j7M_Fkf?TX;q+>lNAE_+` zSf~BBo|VnC#VqF%*0ag~?RgyED8qVuIo3Jvz_S9x6H!B2b!tFcb`zfSqTPWx}Yv5xuO!1}`$tY5oHng*=jxP|qWHrBNr>#fbi zv;*t6I+@oUtP}rr#(&p4?kQd0+{ZfcPYdtH`rRI^)BjKH>SA3VVZE*o>-QgH{gJ>w zwfhP04`RKim%3sY>lGuc^C;Ho|F4e={h!)Bj&<69>+QsU;sw@Uzhqw-!#c-*)(0oC z{#4livix87%wV1PuTRtd%hO@qtH=7Jfpva^b=v>ywEtb-Sg>x?Dh-h~*3pi2w*%`Y zBi8LMr1rV7{?3DSixulH_SkQ{utmPZ`jivvRyKq0&yWAQ@c%Zb|LMW|{C{h#3LDh_ z){|jKi#rW#WGt*Paac1(;Z$P+thE2E(MhmU|DS3}fwfSLjnOp9zj#=Qzm@oJF-EA@YBaZvwTssF9?|EzJve6LI7>k?RV^4M;a|98t_ExpY9MX)mdZ%q>N z-%9&0wXp_P+JDySTE0a9e^_b%S?T}F@n36K6Rh(1kFpL{`u|q?{~LF2!b<;towY-4Uum7#o|5jQ5 zE2m(k{{K=r4J-A(wL}9e<-gUcgO&QyCr`4xmjrQLf?Z33-c+zKJEh-ahwExyJeEMIh z_#lUQ=3-4P;{TR61z5`~SgWg67Vb8(PEA0f7Y6AAT6T>YaIVs z6XQR`s10iz|4GYfW*LnC|4t{?82?}EXvG@se|h|8jpILSRkyLm@t?Gu9<0&-Tg&Yt z{UaVC{+CuM_wGm&bqCEW|&|%6Hi#jTbA7|F3mX{>!Ss_vh#TwQ!^w ziT_C@Ry_)=&Jh1e6;_FVsx1tbnA12lNc_X%U^z|xA537LiLj`XSeF=BR4JrW!$SLS zbt0Z=Gk8CfC1g={B*PMQLHX(5=D?Di3k%18EsX!HS_)vvEF?`fER6qJ3dsM;5?JW} zeW@&irMO)ARpw<_X#ZJiD`6?SqWrkI3KrUbY2h`nR00VFHz|1HG-)L08F)c=D|1EVLIMv^3Z%|7p3`!{-lSq5XGiO!)tn?#Hb216VlzW9fUs`VGR;-%I&9%sP(1 z!uXG6pdS{-f6`RXU}5~nGB`xpFagWd3s~s?rN#O1XWo;raQxr$`Z+AO#rVHPuYqO! z6)YV8Pm9yTLi^8hQ~3X@?PjL2uwQCnG1{1?9TwVu7TSLnr;E?ru+aXq+_b_%`%lJy zjq(34mBe3G_r5O?8a zsNn&uGXB3>Q$gOn%DP^|YEwN{Z&qXVN+ao-uzKS;pVzuQCXwkNURmOkQ!UwR*`0py`f2U6N!dgGfd`7VPcoeI{{rvru?e&c9HjdRNL*$L~x||F3fVXO;2))z=2nyh!(AMS;P`hV3$`G1uEm&28c6OmY<{7=87 zfSKbzD^?X&sQ=Bv|7W?eFh|BA{eBe8l>cV>|LFrsFvrL6Sqjp})i9I)&0+B{t25Xi zGht51Li%(v%-I)U=J>Cf{BORHPWpV-zX0aULZn-=VJ82Z3oapjuLS0zJY`f@8O|%q zVJ80O^dgwcE7{Mkz+7B~^9iLebNt85@gFnsH#7cwYV0b^*RR2Rr5@+As$u5%kD2qo z&lg{Znf{--;s(x_x4=yKe`=xu=GI#<6Mu7KJI>cNvpyX>I$@^#HM0_KsITuW^XX6pZy;Yr?~f|>Z6Ure*i89vj%O!>cJ z(7{akpEh8Cnfm|KqzPu~|CM12%(VZ_jQ^TVcG5dw_K*Lh4Y-ju?t$4K|1op?KW+LQ z%+&wON@nl-^Yg#iXaDhz5-VZygOga}_;1>+XsnR`PfZH`U!nhJu|{DfR``D_CzB{w zVz5H~Ux`*@B_<6kDL(m+mBLJ{aQyeeN-|bB{=35Q-*bPKixrOlrPb$Sh2y^~9RE!# z_33~1mrGdT`0on!|4LaI^G(etw!uA@( z%4jcE9t^WD2>XA9_Ww%zQ`YAhk8#orVTI#AEByZZocbkJo(uiIQaOng^8ZTzbLKTo zo}R&qfBx6XgbwG*^;n_&UwI|uzr|o?dJE2R{{M>6#x!=UQ2wvjj9A$d@_&W$|J;}r zD`Nf^%YTRTN+$@n|Id%VAsoxzNGx;ugo*y&`Noqlg{xqSibmQ<7?$6h#Y$$p0qtzo|gjf2N{5(v|Vu%3&h^o3aJ|vj1ly|1ZBTg-PcBall0WHeW;E6(2f}De^WyTOliXZ zH_`tyQU9B+-(x-Qljb%|)c>Y?JxJSo2-Aar{Rb1{Kc>M4%wvH0J%OovkoE3`sg3sk zi4mCS|Ct#7G12}vJ$we!lW~?a1QYQ$5r0$KOPDDC&o{n?X<`zlS5rvSKWDjO{MYnS z0~7tfG>Z@d;(OS2eZa=KvBi};_( zWhEwiSfczl+27$D^}lJ4Mfm>w_?yCEHbml-O^IdlKlMMKs$kwD{ubiT_}{WBmhT^j zW&ilkIr@Lg9RFW2#9&#*KU|IF(`h)DK>oM+>_041|1VSjf2q8Hb9p&fzMP9?+W#?( z|C?>(|KUO`Gybz&Ta0DK|5t`fuuS{!d}A4wi_5Xh_j3fDRm7;SVVU;d@=f9YnO`?ynfBi~bsfv|#eexuH?hq4?{e-f#Bl!K zGUNYgoC-G!LKM_7K=hh_5r zGRObTuLoG?Cs=0uf0^>Ff|ECSSWL{%f z9(qmQ6Y_ug)pI_dR?htK4C|{Q%_}T({C|0d@_*WZWy=3$vx(2lShiWPoaNL1Ok>Bg z&cS*c*++VGt50?G-n_|3JCjQIyl>bNZUku06UL=;Pl`#7G-$?#9lK;t_k^H~pqW|wsfsyjxNd7k_3;thvnh7KM|6Erx(_diy1pgb! z|1$o@%LOo!|If8&!$|%&`uX2@!2ez4F#6ViEP^qq62{ysFp~e5o|ZCw4UE?TBl+J* z{$F}3_}@tWHm$1pl9FybUAy-$?#H*Y^-c@;~E0eBK8m`9CK40gR0Q8e5;hDD!_;FP{zb z7=e-eZ}i)L#;Ip8lK+k5ee1$o0RB^#6?1|1$p@$^S<3|G9P}%XX1Y@V}AxpBvj#=KQ4>i;?eO zv^!xuYX2F-VR#e?lUYgrRp6A7@}CpI9hDXWF=K_x$EYbd3BL0R)`Q(=ZEL|$ZQf4-m z3W{+q>k^h2|6Stuf2V9^%(EOzjQ^d>E5Z`L|C8na67Byb^8XTQcnvIZ{MS@L{L8PB z?i!Xj{%d$!&Gd~}y4l1s$^Tt-Jp1?`OT>T4AODR}wPC5LozI%FME+lD>!b~F2TSDt zrTcfW)Nzk_-N#bbZ7kJyV~O!U!`p{gqWyoq@e!6d|6_^sf6o;^U>*ZJo?z+WAeO}Z zPqxztmRd)##PRgof!}kyb|u%sjYQ6?Q-Lu z_h89v#nL;I|egGhyKT4?|Lb|6w5h zF^vBjRQc@R1=J^nFqCA&kX{Uv; z@)=-Y{MV3I!Mv`reXhY!S1Vi<87#RPJNxlI?R|^c+sQ)buFfjgWXldi` zb{JZlS@#YY82>eJ{@1y0wPLZ($Nw<2--qGuZI;zdz1hPu9>UPsrBsAHf}yyN^?eKj z{XfH~!2g_b5QhF<(hsvgj=^PCr+y9t$A1iyGb}>`1MPpqm<|To|At}%3|#+(<3BLa{y*Pnfr0#gF2)9f$qs{m z{^##b5&r}?3@<$}F#cGplS=j(1&oH1q*KA@ zq5SU(!y@rF68}ZUe-Fhou$V~s-;stz%K!6?8CXoo#G)+! zyMy>IrsZOh{J$8L&;D6JJ}AT@`G2v5^52jDBJp1o_><-`7CHZ4w*S*BuVAr8#Q$Sd zHN*l~6!ZVFm@oYQMb7_PyjqP##{Z2iO<0uUzfpBqWc+uL@n56mCKj71|1Gyz$2Kf7 z{=3Nd?_ygA&e8v0Wc+uL@!uHLT`WGlhegJJ&yD%;XL&tXy!{Z1-9Gz|?b(M#j{n9K zKENX5zvsrDU~za5i^aWIfl`>HjUt z@!zN^EYkm5l;wZn4AW|G&h`q6)c=dr|LL6nv*=s@$Aom18H+Xx`;Hci9RFEl{CAQ1 zKRwyV@_h0ii`4&%l>g~DLjD_+@32VuzZj7J-@GNU0Ajor%zM{8!KMUp>cvbK}&|Q~vAy?>P_`g0X2f3xW(9{3ZbNqL5N{s*NIsPk;|8V?|M+s^2py&9n{!%$|3ok=2@aMBD z(AQK!&+or8!Ug{NvRcwtK%Yhb@55`*6MsGN*AsvJoZf4#c#J3arn|Gk^Xk}a6Wn0{XzV1Hs^#AnK|N8tMw#`H6DgS?2 zBlLf6#$)Ko|N18bY^x{Gj}AhArxzbr3H`617=?bkANog8O0El`RIIc@Px-HZIDzxF z7tr^=Wc|mX=lGAF<3IYLDd-vh`?zYF^_hYGg@$#01wHZC&*+u2Um2jM{g>-BK~MhI zQ~u{N{&(JOgP!C6ddC0t{`h}xp_}jJfu8bT|9lVnZV~_2Q~v7%^8Zf-{=W=onUTEs z1^WLB^#2tf=3*h+7yrQm{eKq_Q# z1q-zQ7b;6xuNs{16Z1b7$}9N$Di%&(WBux}P*+XbM$$0;({~*U4R!p@_|Ieu7H%D^ z|9y-1+OW_l^#A!uf&T*i|AmfLKD*02?qNZW|9*HI3&ekc_TR$khgcx~3zUHil#>gS zkFn7G01JJ@w?&~mlQYP=_F-XU80QB^u<&dY3lE?0UMm(}i1^Pa)Kv$3p9reGCnQ(qcW)!c(hc2U4|JUm zDHpq->wW}XPapa2F?8hrnCSt^q$kh~53;;o=vsym!}ULOk4BLZ*AE^2e;vpFbd>+P zr?mep6Qp|q9p!%p{XZS$zwX5(GMrP;QT~4~W*Q&I%s|KZug>s_c?tVZ_u7DuIsUI3 zGC?f28}qY6r+4tZjWE=^pbc|F*X)6g@_+s<@$d3tf%;!Z`L8=F|8?Pr z;rQQtl#*B}U~rs-!K=dG?)m2bVV?f~y!`!NR2=60{{Q^xMCE_|lO)XhDEpZDwkdCLEJ z%KyKLyNP*z|JV5+h(GoJJoW!P_5XZZhaz>T6Z3cPVE$$+>m~4?C;sQli9fnAU)O_q z>i_xfF3kJKf9L(dNSwErw&$stup7_rb|9Rp+FXN91%sXCS z-ar03KS92XCtnV>VxIWRJ6~nP zJng@E`hW97Mz)cQ?d2w4dN5D>Pp1_2pH8;_I4fQ!n|r=LKmWfW|4&6?MvnhiDp>wW z=Apt2M#f==^Z&Hue{F0ce`h#)zDsTg!Wn!%eW40LmkgI zSjQG<$^Tk@|DkQUh4kh&XvzQD>&?(sbg)l#LQDCdeybH)#{cH4?m=z)A&Yd$(9r(VWac1y zJQo_;|C&63zvee**F1Ve-20$ucnr-w zfqz8r6KJ0I`tZ^W5u5K5i^b>AjOHm7XLwEd{{4kkXvTOpOhA+Jg6;H@`Se3W`(N{5 zlJ7AE4ekHgsA*{U{kP_YhVTCh8ruJw89kpHprQQNOqiI?3=QMIA6IFiq5r3uvO`1v zPm^LqhRTJxNH;V_4>Z*Onv^}hlNVFue+~7&CZPZQ@?R5V|INOC6|?;QXSS}M_p5m{Vz#gev$fYTOa7PF zf0#{Z!7S(hX5T0Nakp59Hqy0Y_Es~o?Z7POf6wy!pHE_1G0XA)+0J`Rb04#e|IIS~ zH_Q0nm&%8j72`iX{6EQijM?4?%xeIjQ2)jK|37@cqgO?+mck1DOV(hPPzoW0D6Cdt2}=~BmsJQML~gZOxFtl>`WQ`% zX|-Cd7HPFwqSg8cW(k&wRxc|PtidcVFCpap-R=f^W}MopO{(l{&8>R+oO|wb&pr1% z_c`Y|&&TOPP2&GGS+HA^=zk~C|4#T=|5Zto=zk|!|4nM2(lhpJ68-Na@jqYMQl&`? z^FRDQ3H?9&>QUNMjUEK~|G+^_68|%~`Z(=Ap-K3E68V4fKppSG{7?MXB=nzz{^x>Zzv=8>wBBjQ{D_|0jw6G5CLy@qd!>e-ipnHFj&#-otYonneFQ z+3g|k)g`1+sxLru;;LQc7>$wd6mMA9?L7j)yr{C_Y$ z{*NR7vHqW8xW@mVe4PKMmM_&*)*?loEW?juxu%cj)casE$#k_kQXG-b}$RBC~y^0G9Q%lZ%cPi1eX zeYu)K|1)Ly|0nO%6#PGh|Nj*HA93x`6yyI?&R$KGit`Fhm9hS>+NY_#`!z-UU;3>w z>aXHG4rvPhpEC5nI*Ol3wWbP>X^QcG3jOa?a-9BCHAi^nDWDFV)0#S2L;ei@Ck>jy z{x@|vCjV341x=l5Brd$rv ztF+Ohseo5go%El_uk?k0rb5>=)#HX&Lev}96#if7PkiK~Ja1A{zG+P{{-++f$unV8F; z|Ix_U(~+7wOb|D)D(iXLvGt?l4A6-EEQF0T_^ zZMUN6|Bd+H)Y_}09z_%S|LA!?^b9D9{y$3mN0j-0!W&i;{eOC?Pf_&$QS|>&^#4)h z|J2%>iX#6Vi2PbI&WXRXu3vh}oor6wO|Fs5(R1or<4#{UV%|A`gZnqd5o+R`<__&-7X zN7PoJ3FiMds){s${%?Z#uP;5!<(nwh#O@MJ6fpi57t)udn%K5m6U_e;=@#g-R}=Vu zO)&pY!2h4J?o;&feoYwsZz}uE)V3;3>^Vfc4r>DbpE!7wd#W`7{nOVR)CBaOsE*J7 z6Yzh^ubiUYb(&!PpL(Q56RiIx4m4<@7WzLvNqy%vf&OQL_5TF&U-Yq!Hrq9U{(qw3 zoF?pTN=N@Q!TdkbXvlz_nyBm61na-_6zG2>PX7t!{|V-Q!~e^m{{-U%XI>Mt_jrfT@j?H#82xpF^?!u< z--!Q+ViAK9Lv2>PEJ=Q0&ZU&FIE zE0U3|2>$=+)^tUEarr-j|9^z>KfSF;k?d`X6mF;Qa(PCvQoSXLK>tWZAjR%bX z&_BJ+!t?fmC-5p1LH>)Z-ba4FBD zaoQDO{7?6u;~BB_zaq^45$69$WhZU!R>ad|zV!o#BKE7`c@$y&7uo4j1p8m4F~EJy z|8va$Z6V$#tO(V{+HvcPv{2xL8Z%V$c2>k!qSMMkS|3`MtDFXjT zp3RfLN1N{}0{tU*9w;*ZQ0c)(im?8VbU#t#!BhI?nIf$JB4a%Iy|CXew zr;GW%%o<;0bjuQrv;Lo|U8-@`|KqEdX`J={RP73lrzZ2ArD=TGDvjg+^Tw;O@t^r? zoyO7sj;~#*@r(@Qr;Um}%GCI(HOxQAe>bw>i5!i`*MB@CADjY>BmbL_|KGs>V;uQ^ zd`+&#k^c?;A5ZN6HIDqBivPzr^8YyUe=768VgDUB;y;piX&n9kIQsvo8wWH_{KsEq zR?)^o8Yli^ocNFNL+Jlft2JJGOykJ^&-s5G|L-@_j%eI+3Ynr#%W%QR+Y{qK$If5wpirXBJ1 z{}|(cMrmyRr$1Q#dsk|V_5awqjp%DKHOBZqowk{4*&55s(Rc2qYb-mDvV4tY6tIrY z(pX`U#-RTg_Mfq$xczUeqC{i)J9$o_#*qKUN_Lz7`uHA=A^&e;|A#T;|FN zEEoOXn*AEvb3kM0|HrDT(3>36*!II3QzdKVqZ(uV|0(M+jp6@E{4eb}4$cXUA^&9* zoI;;er!nULv9mQ?I|DRmtoAJFNsS@@jh(olG3Ng<=KqWW8+F(<))3SGY0TE9G2%b| z`nXeL4lB>;)L2_Ly3HPqA^(pBuF__YvTk`b2K~o6lQnh?J!pzs-ziH+4-%rzF^#eJ z$`39X^Fmzy&zg&m|6^BgYV7DO>be$WiqpFpD-jT-;|m&SP$x5tj(cxWX0izMn^tm`T9_1|B5mtY@5|FdkV z{&Jr&AjITh7U^)&SVGjaLv`ttQ$TdC{N|GJ_7c`Z}d6Z)U)%>RG6 zFGtrC`k(9AfB$k{fvzL}ZP-(!>&SoCk^kQC$LLT0mgqY3|MlWR>MX@Bx0`g2u5YuD z->d73M4Kygy)35x^H#raX7TG#g-BR$Bq`22qz{=Z&( zgtAjSuTIyiPt#`X|E&M7FKPhJ>N@(L>viXK9sSRSJ&n4K{Wq&NPX9NiFY0>xIm+9( zzg=0SPF+85RhA__{~Ph2*IkZ^f0K2!;@>>=@Ek8VE?r0ee;xn7th3j2-SGdL32`l~ z>&SoCr+wt3z@)DG(flDWSBb>RCYZ<^sh0`)g*C@Ow z&i`T7e_{N8!nyc=tjV*wvrmcrb&VVf6puqC$ny|8IJ@ zTVeG7VMG7Fu$MMSVf6nwrd{yPK83UPD~$aw4F88Kt7z*Xg{u$q{7Qvc|K~veFynuC zS&aXA&*NOf|HE=bVe~)YiaLcE|HG$hD39}h_;{TE!`T1B4Hsx@qr%XC%xO~?|G)6E ziwd*;3-`1sY-{J-sWAMXv(Tw43Pb_4NMw{u@EEi0z}5{>5W)F|t} zubN9W%KC2<`9FvF@9$v$8_gHrUxh}I|3|U^W)$q#DDr35{-e-;l>NU_?>gYEs~SD)(J1sE zh5n;%KeUO<|D)Y*`YEK*jIc(7W0d=N|ENZL;_JUr^glW1e@DZ&G>ZSP5&xBueMe#Q ztVXBjGPoqZsR|@0&`~&KH2t3j#^8e_)Cw!AnwQ1&=Mv?zVA5cx~Ncew^ zV*fj_SRwd--8)x%m9Q$$mni#QJ~Jbe%%X|Dgjl+<%7p8Wc**|D$u~6~g~N z#QYy({vVyQDTMwn)Nqk;^_)V`Kg9h1`Y$;ZBK|XJt`nZ=R>;$%5b>X(ZsvcdMa@F81bK9QmGNv|06rAx#t+)DfB;5OCKHA2=o6)!u~UY|K~{cX>e*Z!u&sC#D9MJ ztVWpsGnoHJi2wZU;YN+X|0BeIju8J@@QW8U!uY?*-=-19{}JLpH&t0RvcHpObZg{d zk48G-|0B@9I`029g8x?r`k#?R{O1Vs|HyQF{@+wRrV-@-jJjyd{xfoOnsx>?a`q-X zcS|FQ_|K7hR6h5p2Uju`y^=^2f{|0BeI7X0EPjS&C&<*z-VjZYO? z{7fSc7Bupd*Nh$Ch|B*&#)N?XXMtHk!~T0@3FBpog2;ct6><5`pnov2|Htrjnu5gt z1d;!O$bT6};__c``Fh6Ol?pQc2a*5&;v1O?GX5L;zXbXJr?KoD1+o7Ix8*5_{Fk$U zbd#G~-dA6w9Q6Oe;#>`{FqOY^vzR(d6vY0Mqe2CDmD0Z53PS&2!vF76Rw;=6CwOv~ zf+flOtJt?b2>ow8DdV0h@DD49F7q7g!VK#{1<%%3{98x8dB#+4e*AYeMq2T2&)1tj zVe*+*CgeZn0`9A!>g7AOP=`nY7c@=bb^WJ_1vHt{p*M9TeSKYKP1f9bQGXDp$ z|70vg6~z7<3^4x_{~L@_|BOkYh1&{FMie|p{l8BA^M?M`S!_WCYb(MzU|B)4`8aDWUVV#DTt;f${rG^vyKMem5XRI-|eSI_EU$%zx zb2NZ2y;G)_MSq;PgoBZcBjQl^${x6#{>*-&chVlOxK6_Ea ziTz(T<;M4a8NLAjujth9u5Q}gqhZ#6!`H6THvB(wy&7iymjV4Z!T-ad`2O$1Cqmp4 z*6`Ia@O&DML^VwO$FOf&!_5B~2X1Qk$t?{V`@eiTqG87WVaESc8|O64{x8Q*%+tnu z8h&_R!*^yheD8ra6+P52`rl#n{~Pu^q0LW8pJ_O_py9hb=BIn;+E4rWxj)qg=vvKB z`T4$|?(_frr}}u4{yg`m+kl^qrzgh$!Pxk(z$&IR{NaA*bIkt>DGFf!A7cNvK*}=Z zoL#O!+6n~{`@b3MzX0?9&`hd=nQIkTv`#tre+97r1X43J6pXL`0?hvz3o-eRSIz+^ zT><330QSF}V1WYYe}b7sT-&Aq`rp9nTm_K-HX#26jQM}APyzJ60sKD#%>M!OzZqxu zDnR^a0R8Xpd~TNl=zjz3|MS)R2Nb~nJ7=LvfqjP*ApSR}tx^HYQR=H!;J`5ji2u#$ zu2taBaRq8l@V<=y)>8`L{~b7XS^>s?|K)U_q;2OFIB|irQGrDKPX_Tn zfrg99xphtfTtNznr;l1&IIsl+~dC{+~nj9tGOGv@tIK1#SlvK>iO9 z|MgZ~h&G26m>g5U<5M6URgQO3ft%9`Tnkd~P3pX*0Q#StV1#ql|Hyv<D%d1Z{i2vW<;sws19|`&gk`zqD{|y=P-@+0N zWu{cuWG(%j}Yq^G!@c&6k))4l;A?$x0UC@7Js`-!q8~PvS{~_%EL)ia^ z)@3N?$VLre{~ubthPEUBEo5tm^{vz+FT7~ z7lT)#A>{uc^dEx$Lpi%?^d7z+3-|A(PH71Fe+c)qtkV$dzoCj6>Wl0DhicDisOKcl zI#1aJ`mj+$?s^Te|MyUpo%g<|A?rEw@jq?j{o6Iv?bMLXs-gByHw)m+tpdsi#g#AAQ`>(P8>k#xGLjN+wH*rXkk<0YlV_ z9SQmmB+;I@{O5=MgZGzc@NtT^R4tVs{ZB@8nYL6fmmmK3uTJL9G+>qdOIB-3eX0iU zt>t{3{Hg2Z$Nsa$nIZqGjq>CF@6U$+qcQ%Me|?VpOVjzj^5ox>ufeeb4O+6~XZ`O- z|2JsaEM8jz*2!<^ ze_yYWpY@*~|F6Nev+^VV4PyV_a{hw+_D1>7)XUHQFI&uZ`SJhupFJo4-Zs9;cKOda zwI$UmKlUF#{(pYtKR@x`OLUbsdgKpy zFp~xiS7~s`YQ`?;zhvrlV~@jqwbj0W-l9W=)OC(ys_yao?n&>;H1LG(Z9{}>DGwBw=%@&Cx^ zZsXf+r_D|cqW>H8cG8A!aC$W8a*)3Yy*(QAd&#>rc+9WCivbOGUgN$P|5I03gXn(- zL-F{JLHz#)(f@A2{%7p}JUDxcI&Nza{qL6CI~tsv)gZc`K)2PjF2m(&fuS{};`d5BmEU|9yo;ly8%d{r^p`=gNowpAY{(r)j5rmO}Hv zrc%D;-Dt-4$X9HUZ}(o)XFntPSpWHU?&98k^xuB@p#PStxc<+Vdq_Uke?Iu%ckn1} zt(NcjF>nvcx4#y=D96e07cB z)XT^E-)F4;H^}Hu-Grw9_dc^!Husln?t~;UD+N$NF!}`K$7EdgSB(pFg|w zN8`V*=bC(s|GtwU`YUW6Y8aD``QJAkmG4Mg|K~&h=eu~5=R*JL+wx)m%OL)9i*r^! z*8eHLa>M-I+wHMbea!2aiVZ`T0h z|G?^E4WR#>xx7;Y=zq7IFV#TtZVjOS-;!ye{=I-SfdAJ(JpKos*sp=C0~**}rUB;v zfz(5^`LG6<|1;*|^Z%CIV;YFtfBBw|YXJIZEF94Q_Md@@It?6+>HnxZuKyi?{sYAS zd^h#H20Rxu!2f@nUa!{x^dEr!GnX%Ffcf9QvW+&jYk>KGfcbxb`F~4Mw+5L12blje z7Ov7C9t|-64;*(vXTJu{2I#A68bJRy;0kG=DolIFG=Tn(_+Jg&o}?Y{e@RdS`2P${ zLjS7U8i4)--aA~I)d2pV8NnMGVE!K%yQhJh=>J}i(Vyo%)ByA!fd2lK@c;Rz@-hAo zK>vXc)4wmt-23uk^)Enw;uB1-Eh+cjO;JDm?}h%}LTf)`yV*l~3IB5RnpV!K3j@$pXJUk+A%_(!_6Tl`5rB1yfUjF`Og?L44<)_+^?p!$z6{yUFT z?+NuEIHLa3r_`TW2i|G*pRD1wxc+yG^Q`(4|NpWjd_nyQ|NjlCHuV$#*MH_B_nlL} zwT*k))sOtwkN?kC&7JDEcdOr^|4eND=emb)(5rsv-;e)ae`7%X-Pg3`po^*{?E%^D^J=wd5HhWOIb-h@$ugS{XO{q zdf5LV5C31o|I35^*He(EzB~Dx7s$i--?ubA|L3jPE)V1XhD`Y1QX&uQKhK^*o*$>b zCm#RF`CfQj^1%Nd)_)%4KhO64@)+@-OUvY8{P(c_d+kpT%X6^O{PXPpn3r8G&+%jO zR2`J3x>k8>j?2UN?>YQp{+9>-_te)={~3A88tCh@Jm;i5HRt8YyFhyz<%#eA1W(z) zy9mxXd078@u>YApHkb9{j&N$bX(Ycj%v4d8~8t;QzIu zWL}>0_h{dJdG5}Xzh{2Hvmb)PuOrzLl%Xy=PN-{#t5V zr@j^I)rb6N?EmKtZB!rYzby~fa4k0eljf+;82^i)|IU2%Z7krMhyINJeTn_Q`V9J) z6mwsR`V#TKeXC2kcenbA_RvO)`mq1^_2_X|9$(be)Ed` zkovIy^;J~zyrcACwfZWLF)kjY{#y0zI<7wKe|@z_)K_zgHrJ`IAvXW3ulfvl4eBHQ zqi=m|{m=Yxfi^Vq9oMUm_>aD0cJ<-^+h;pReQoL+YggX|gR!jYBmSeWy&HP>sL$nq zc30I0{nvldt3LGqeG$LHhm68_nPah$t*Jh4uwkO?hX%{MI1=~P zyeJ?OE2~($U}S5`pJf@>;&^YLh?P|slHdzGd=9|VZ}?u6mA_pbFZ+F?ozI_pGG6vO zM$z-K*n8CEy=S!jdD%H5TT}jLl`qOFzG#Smu_nAIEB~R@D66S>IryTi;)}*I;DdM- zUyRjf;21~z-4>TT&%P)t|Doe2l({}qR`Eq+==kt6K8jbK8TcsPuX&8Jn)0(GiAu^d zf5LM!mp{M!BfKB_K2lcEY77-0YRlrnkCc`F(CDKN;eGMtkCc`FF!Ir|e}3;HWfj}X zK2lcx&lf&YRVq;mJ7#f&Frxf%aA)Gv{n^}h%Eujl+CxtA=HoA{rvGXA^c^FQ~mVm?`|yxLT` z)7HwpYMt`Vu9thwO2(KB<+W{;8~yJF{D0iU|G3TBa<9!%p4WK8JRo0g*8lFjEb>Ki z@7X4I_IBmX<;sox=iXMLub6krjr_O4U8=97?Up;S|A%|yUbzb-cQN{(CA;J<+eaPy z^_AQMa-S}foA`hCvO~1}u-peLdAFl-S26#eKPET+Kkm9(xsM*#SJs`7yXJ`UN>9mM zTPHX1UvAaV{xi(w4cvED?h_~FZe;$SkI(;Z6JG@HoZQU+ZhJd@;gp;C z-;MsyeWqLPwjOXCa^wH)HvGRo`Tr~H zqH;6;yN&rD|Ie)2o3!bc+|2)O=6|=9`TxMIHrVInX8w2IpO-r^|GOFg-3kBiJof)^ zC;Y$N#{7TwncU3(@0w{=?1=fspVH6tyM4kzg#`AUcJo!UqS!hyLO{`ng8>Stf8H;`Cq-P|9Xx2 zKb%Kj<*PTjK)vk$(#!nsPVE2EYs~-dVp>-M&QA5R|CjOq?|E&z)yw*C!;D3}%>TX2 z|GkO*Up9pIsrU4L^|Jo!HP(L*tJGV6NWI4XFQ2JYFaBS>?Ei8V{a-Kpzg+rSEp0rm z-ntX&J$gjF$4@D*u1>w^|9g+c=&#=04eDk6pLg~o&pb~XE~pp(uU_QCeD4nR9=NKk6pwmY|Mw#Q_aguIBLDX$_J8R` z{_hPS|9xgmz0f}^DXL!n|KZZtrq#>(uXpaIdZV|@zyBw<)yw+-E9>s4_vWm6iT};B z-r!mD%35sp-%KlufEG6Gm^ar^s_br^+|9Ag6_vb--^WPiD-|zqB z@4c6}ue7bw^`+Rg?|<*TUq0}6riISWaDUPF64z&A*ZTWUCUAJ>SMxewSNAWd47H>w ziJ!W{RWH4q{H8kp_D4m@@voD(s#a53+htRMX`|_72DDtpLAPn~D_s5(BG0Fmm`tyI zj`SOhcE4cUQ)4o{47>yw$BXgt%bkb!y~h13UwiH4H;vbPgLnKYnQs^FfB8G^H(jq6 z?tkSw?hn3hY5a9_SN0agJK+1@D>dHnPvZA{FL&kdzuCRG@SEJ<{fVMCXP1=GJZJ2k z_7#4|c&i^h536SEc};JAs89dChcvuN{U_d3!-uPm^$q<}K);lkGEJ}Wmd0FVHzmKy zD<}G;yaAE>I%S$gAefLlLSoYXt`a6yqv*{0$&F`-Z@VWCChbg3G|nBI8{l!NCrsVn zG;lfZ2^n9JI<1r$@Beqv@`jX2WSeRAM1tgRswaAj0rR$c68nGl+?-{fz&Z8I+@O43 zJ$LRQBi>g}!v5D|`2XYo*^`+6d-(siPkic`dKmvdco_6g*1OR1-KF$@InO^2%tNnV zr40IaKOtQN4mz}VQ-LMqvq{&3Uk2{~0KO0Y*C<;9ECW`8vz;^@SWCWyw19pwaQ_VW z6Y!0)Tp$C;0;hts5Xd9HpL7rP7lZrXfji*8MH%#ew+OI+bBweMC?$WK^f34qaA$zO z0)Gc((Er`NKqWY5Nsj$C90h8?agx>pr^t7cLf7|m!Tk$h z8vHGkS%EXaIdHC#Lf?07Yu4NQRluPNg@dAAL4fpeSG2V5mTOF9jH2Dnk6 z9{e{bivWHg2+kwY8$gu&Q_}n3r-M5Q)PVo5D7y>X1ZMaqmy#|3^W>NFotf$X?}2;f z$G-rB{wBS%kgV?2(0UR1C*;?WUqSuX!T%$GJuctpow`$jBp?}_9MYA*GV=6YcP97& zaDN}D1D|*6P6y!o?ls`-B+UXc$nPfI4t_tlO~4<3@1?8|*bL-?bAZ$W6p=qfS^@q$ z;QkljB>0__l>x=TE^tneRsws;*O49rzXRM_;1u{S%8mg0fP>&PlGXr6$=gZKf^YEp z?*adJvf1=LW%WQUa1xvz(sRHW@*Ywr_zrMS0LQ8S+mtzg^MDncF;e51ZR96OuYqp| z_ZslK;5Sod^pWu%ZgA#EgMgp>J<{9Y+rYH~{~7!y%5DH5AOg-a(iz|;-@{_kN6`0g zz%^*>2mhOtEdY0byWp%KeGEMKF#W;*Ti%y;yt9aL=mGFJS?{dpJQ+wLzmaq`^&9>9 zKJXZP-tC>0z!D%8oC4A{KpOdNq&eVU0@n$=4nFGeq*mZO`2cAT z_(tEK1)9O1q0Hzb8{hzEn$!(+lD|bd2L5-!{bS%yY5)I6SrE7i_`tbO8UaG&ACk_2 zZ}55pFiZVW%8X|i=?%UIGwEI64*3+)XW);6`(FVY_(oli0c7X+@s^>mG?mxK)_>(r z?7#WlM#&N&rQC`Aw-ftces|pd+qo(p|J#ZEH@|z8I@hi)ce+!-UCSC|9qD@I^Z(z^ zwQs}uY0Z+&y8 zI$8g3Eh<$f_TNtIzxiGZ=W+XAC-&b?^#A$6ed=WYug>`XUz}G_$02oA9HuRX{pYAU ziU00o|F3+40{H(|t{*2oq0ZVPq^E#7bylC&*4!F(;{VfG*Ff1>b=IGx>^yC~pw5f2 z{huhe(Kfp}ofoO+oI1~NPj|99ufaF0|2xl-50m%ueH!DNF-Ba1zI~KI|IRkR1ek=_8J2j7sDo&YJ}_fQ7?J8uFrd^1Z) z7l3*4%b~j&d}I8a;}v2@V*THhRPHt6|5MHCT7>?`zeHV0DdpbUrRu`|*R^Jux|S^G ze1*E;^Q}c`>LUKXi}?Tiq}1}RyKBq49<5Us`u{HMzge{z%1_xy-(;!_|DO%v&E?)i z{C^kmA6?ty`k(xi0(B+mpU?guUB%mJRj#`D|G%!x5_RS62j&#qDn z^xUhi8mY^O|4-eeF8n{cw4Y}jP*-IcX%%feq^|12>LUKXi}?Ti71iphJ*KV$vG~vO zuDs*wLjRw?<_Pu2>EDI@r|VRWx=zOZ|GF-m<@qPob^JVd7u02IRM+OX|Nn-EcCKAi zzU7>{`2UZt6Yc84{@2xJrMwg9R+qhp)S)i)KV63YC)KO2g#D)r{ZH5CYwAM((}n)0 z3;oak`?q823i@b!R9)zQy3qgRX9UqF#PvU2=zqG<|8$}M$^|xrqPRx+hC6;y+!)f4Vlu=nrnOT!%~KBL2fwT*!H;Tt{}xwGI34 z=PYuS?v-n|ct(X>*nc~s`)K2Sxv>AZ_Lj-Dze+n^JtPs_aBujzgjNrKRe6^ zd1j3N<%0e$>_1y`3>KYwIj1$uAMe>+P|>N zh5g5c{l^9UUC`f^u>ZKQ|F{hM&*ysN!v424_o`g@|F|-|a-siojrrw*{;rH`azTGf zQb;cBKQ8|NWk;%y{*9WGE>FsZ{l|sf8j7x6zk(q`m}JkZv44{7fsxv>B5D0(8-%u~4@Ka&gp57$#J#f}91T}kS+E;d{K zwOJkT|JI@<>M-b!{VzYdi1TH%X}LPk|8^`(W;{<*2ll^?m8+>GmGjv6uZ|V#Igi`_ zIuCDD2l~JKTWctbjsK)M>OlXO|0GWx8}rqXTR>TC{HOkH>O8z%9S3qLE3Qa-R8sz_ zvYqO%6q1(GN4wR5|5rz`MIF2MYI_j+Ku`2Tbm{$HQFs1E!;wx+eIgE+5_<4$!j{&)B~)q(#<$MGI@Kz~cp zRdqoB4!2j^Z@FlzUmYg`>cIc21OKnB=8(3}g()9XhX?-8jKX_y|E~`8e;so-Y1=Ju zZmR?R-`2D{e4n%Gi2Hx3py_GmCU1 z_{Q3WIJ+P0BW2!lrsc}HjdEjM%zWlt17wq*q`nFAxj@YS-{5`nc_zNsV%iJ;KiVm0 zoc}rBEhqM0ga4iIzZ3p^S=}Rcf$Wpga6kZk`w-SV*j-y9p(ONISu~L zjL-kZ{vS^G-wFTk$c*#9v*9#&HF6sKpV=U%!T)m~;{QGMG}8vy<%Iv8@c)iIZQR!` zXM+Eo@V_&`|4x?!+^cdL{6FWFlkwl6ztiCVxodJJ_}>ZtI}QHN_0iraIFoY1|ITQT z`)|@Gw@7cx8IF*@BWJ??>%{*T{V&(p$qxhJ48S`U>=Ke*ipA)|K^~Cj&|3k^iqC|HszX_rZT3eAd@jp#PO60CK^V z0#fLE1^NF9^8b|_@QwBLao`^K`IPaUTtWW7k`4~?{}t$eWixq^BLBzM*M`hJ4?gSb zD;9un;tKNrmBXaF0ObEG$p2RkfN!j?{~EXpKI`i%l|U(g{D0*%=|Ny0dF1~qhWu}= zujc?`{l)tFN)1p290BJd=}7?j{|fT|l}7N5^|c|7)q>CZ`pP)~`Tt5iILQB3tiXBl z0aE1u*xJij?-=U^qc2>54M6_CGEM3RkpHhB|6duSenX#D1BAg}MOhHI3LyVqxlbAa zLgbPEugrmO=%b7^)&B#28f7y8^8b|^@SvIWE`a>+ME<|>4E)c7I|6v%H}q*&9s?ht zze$(j|91GleGz&1za9Q>hyUO2CB1;5FK|#+2y6y&!8t%`0gA{UBCVkQZ-aXZ z_mg3!DU}oAexT#`R)--EOSSze*Y3K>IaP;~i||!=zs7GxTYOe&B~Z|5qt< z18sl{oZF;6;41l9(rNI^zek=_8Jr~eFnnxW4$^aCZ7 z-34v}$p2TCk}d%ASO(UISb&MxttEp z9@1Q3GkKBj1m9RcHv+8x-=Cq(0^|XO;2b911r(F7COrVYv3@r61^qmq_48%uf4LNZ z|1X~=JqW=6mm5go|Cp|L8vOIrKS@~)0RLZx|1V!8Jqf`7m)l7jsXq#?pgF z-Ih<9$@gREV+a1HywyR_#hWk&$` zzwID6jifceQSx@uv)~(b8}^EB+S5W=Jx~jr1gD4e9B_ubhtyeb{(J?vT|j5D`SazJ zIe_zk6`V0r7tltYZ>{Yb_}>867$ebFeSR-xKA;nDgEL1O1pMUhk=~|%jJ8|^T4;X- zWjBBj5CP{I=?rj_?_)9PBk+y!(ak|C`gEzpP0lu4TUig=kLH|po0Q`UHH0ePA{=d{f3jZ&x0{1rXm$c`L zltKSX@c$+F|I$U$lK}jGshzZu`i-&c7Qmn5nD|C6odZq*_276(t-yKm0n(m&v*}CV z-UR*v`W~YU8eFmg4shWAOKt%EzjTWf{{O+h1lN$UBeZ7~Wzhf9RRI3Kbe}W=!2g#X zlEVL{mEeYeVd~GP4EkS!|1ZJ+ZD!KD0Q}#ULi!B+_rMJTe@^=^QT7;k!T*W%UrU_+ zCX-n^=1pq7w#01uY>HaZ|2feAIoSWF_5N}>68pb8i2rmL`@eo}wHzyB`ae1F|7|_D zUJmH*$jOjnE&G4eWy+Dh26=X~92wbi;Qze?|8MsHFK?^Mmm{-44*b7&oG+3C{f~qF z-yF%ga%?N+dWjqbJLT9@$QrFwtq*p~f&OpDd5avmd-Z0C_)sh4K>z2!|JPyJF9-3T zJKSY*;Q#B`e~5by%R&6d))PnNsH&#D$K=5O$8owAyyMytJ|PGGKW~J@s-B|LHht=lw3qLHx&irER=pyBx%SIEepn z5dX0Q|8EEJAC8L-?!78UgGUbhKX%N!sMAj$1mqz8)4}@B*#F6h|8z`_$uaGdgZR%K z^OJHA|LNEnR4e?8nAU|LJZQ_3%iTF+2EzITKV(mClqSl1}Z)fh)H)MYEBe3IylJ(v{TG9XPsE*LKJ8E^zsulfD zYn=Y{*FEaKuhv^Lqz~Z5hqU>TTA{y#|9{##{ZtO(e|DT$kR!>o&h#=?zjRZ@l}eK_ z;%jfWNhjvWJwIOf&KL!`@BCbuNnf}BJcw<~TAgovGk5>XNhZ@PlRs}Vee$1uirlp? zcc$ciGgkKHO6C5-C#bwSIZ^WBi%V3Wjz15ffF@PVnHI$!wS#(o*Yu5lU1DI=7(YMe zzmxk(ldcvFr{Tj>$OBWJbgeQxR8)0q7rsBQ|Nb|~F3^aS-u^ghVMS6ff~L2#gR!S4ete|BOMubl*kSpG>DPZRjoXqh zy|XTU@|J~$z4n{KYl=wWr?HagT6b4Bb3pmSO@y3fPC!uzh3+N%XG{uUx#2P3TW6Xg37Oa zy?@mwUy3y%oBLid<(l++nWn`*$2~viApa`byglIE<}O2JV9?={z(@S4Dl3;6E?tX{ zy!P@-Uw-Y&pDcRiomYQ3`6ch0+Y9NG#Wj%T#KNC!@7wmy;(u4UZ1;ObFPFM*|GU*5 z*JGnrj_3Vvdgb4n7Qck-@_R)*mv>$HS1~%ov7UbiAL;+M_Gj=tUS0F{Vw35gj~idb zJ1gEcUh_Bl-+G%CymGkz*G%P0E%AJ1a%J(SK-Z7@KmPq0@9#G)rVD?4hT-)WCQSRv ztGFA8A2mPW-Hj{8%YSlpC2jaUcarJX|1wNJylHg!cMD&F?91MdofH+m96$NdbK}(- zU%o-NbQ7{v{QH0ItM$?^7$`NyPlB#S=F6RHV*YD9_7nY`uNS_P68EUXG3$?Fx&Fdr zT+>`XjGuHbeQ~+_Q;DKi-u`GSp6~zEoTQeS#pNx#%(657w=n*Okj{NFLZ zTz2CB?Mcb9FHh4}=PKEW|336vsj?IQXJ5KbcH+P7Ygd}TzAb|>YoqMMf7`MD*opt% z@i1F<;=k?d)2S~{TiyAxPxih0xqd))h{FGW%D(Rq)VdW z&irp@{NvCAT|JRQHuO+2MEj!OpXM^k~&dSdCZ$E!tmK7JMzftzO zdQzM0#dhkwD7*C>&ugQs9UQ0Z=zq7)cgm98Ej#nS-Rt1mRlp;Ao0t1svNQi1|Nm`g z{ zOv&NJYFTA2Z<#fj|DbOPeUhS<~Z(7(l;4E@rmf0bI2SCdaIZ+W~H z8DkwX)q1sLu2c*Azc_*$>7PusApf@=3)lCm<%HCN{qGO@cBuvXUkm%c{Ksz{ zP)lVQZLdn2jdQzN8ZPoZo>L3{-!1m|{NDooTe^||=DXDb z{aa2tsQW7K<53Iyzx>Byr6tJxKNC@l^$zbes}|(H7UKU}?#2~wXpxoj+uvQdG<&xr;-1r zpYUxyl^y*r@jtZv`H`T%HA&5e{dc)pHu%4g9VKkgzqxj)Z1BHr{W95*|C+J?+K~T> zEorhL|JktrT1sQ`KlQGY4g0Tc?Mf<#|FuztbD6Ti|F)dXYEIaHZCUBEne)KO2d6-` zg#Fi2yG^#@82@vvShkE3*`R;(jY8QhrPQ@sHt26Fwb0JJvXw|S_W!h;-Nm!_v0m9P zOYH&K_La$Yuu3-ef3xYZEbRYd!~ffMs9F~9G1-X!#{Mr0_8;4+*#1A|&B0T$Ro2ON z6#k#9k?rIe${J)t{CffzO-ZEd54g1fV#DBe&)-D_V z-?ntGN!_y9dh}MNLpJvRv0e1YhWu~C|NG67xcqM;{_`#V|J#QDw~hGExAu(5 zhWuBU64hH(ld?g7+wCCjy$Rfsjrh;EPDEsL-H~le>41Vu@tBo`M(+aZ}X~cYR-#~|INgIG#mf_v>f^;#{XvgKkT+WYTjj` zzP)NL73URdX8bR<>{B!Gzs>yrizTD1+<*#DZ@|G|=7P5Ci3??0&K z6SZp2I8Gm(P&4Cy^MO;mV;wlB)qJuB`kdk0Y)~`ypXQ?{)y)5YY<+k^&58XVo2@oA zpSG(R`%g3WAA|nQ*V@%={QuK(tD3R@G`Dy2j2<;(|7*^;N*g_D4tUkv=~6TQ|70l$ zsG0p=nsFRW`IQhn7gjU-e;DI`Gvj|V@qf*}X*DP8KgRz*HP7Croe?#M?|?U}X5#;w zYj1GxJaxq7|F`OA)Etb{zj@}7nz8>jKYqgZ{8Y_}|9@(JLN&1?@&7MP@c)g)va$b% zP3GEC2syP5l33({vhluab4?YFRT=>BqIQZC)oU>%X_^ zp?`J;b!-GDQ&!f0O;0ydU$(64a^Tl=S)so*@&9jD=x^Ot#C_XjW&F3U%;moL_-}>( zZJXi$g;H4=|E=)9mGR%Uc`yAbS=s;7TCz)4VgEa_U)HJvvhFG4Syep$kgV8$Ewz=h zX2Jgp)v{v$voii$kJr-XDe^=bWsJ|5oCE-l})X%J~0gNhkGm%j)fsbMEqCN>NP4%_VyB=3e>bBOHJuTvd(RTCfn7- z`oDRhSWSD3h2Tzb3e{9xs-}|NjM;nCw98U%tJupmsR{dk^TIAQq5o+j{=2F40PQZL z|Ett=`jDESe^XVZ>5G=5YO1eR(|+hbcTi32|JB6)UsmG(o8bRq%PBQM|0YBJ>#k9g z&Zy}?gPM^4ni&7zEJ6PBUZBm5YO1T}`?9I2C@%jsG5$C8B;-G@Q%w#l&+B9!=~h$X z|G%0JUsY41M@?<<^?%`9eEe@>{%=a?f12)x)#MqY{XR8?qG}3H@{DOUMS?u7|$dfz^C``^P=-aS!|x?tvHMK=~IeKQpgU{)NJy znYMh~kdJ%dXT1l?zmOYiV)++#{qHvQ#W?W4Tfsl(eZ-N*s>9dhAG6y3qw2!%)nvrr zetdk~1OJFU@G~_I81H4oo`3kj$L+&KAD{mt^#DG(|421`T+Kh>9{8CX2mT57<;P9` z2ljv=2ja^P7^ZAvPWZD#`g$yV{zJU}^X!Y1cz^KU2mbcQ%H}vv0bbY>V%LnZkC++Y zQsVrhbI*%PenJL+?VnH@FEZL@?5py>b3EVo;_s99e$*e|{)yG&L;n-YpBEZ^YaIA4 zKQDTo{!EPnhF>*t;6M-X=g-?n{xtB1FV3H5h);T+<@zL04;Ut@_+iBH{jUyuuDNF# z_=^vq5FKPdZR94P-nC3}Awt|&j%BVqsjR+5@*i?MHF|BvzY5?Yl4ELG!@Mdja` zT~_|BN6Xc?cm@71$!f&^zj660uCG=j{@;a`wb(7!sWD?cb;RSp8+UG0V;c5f8}?tz zW;K>%t8q<^8aJm?mWS;!Uya)e)X4sijrm2g+}fr_?Ej59xzroC|2O9DBwtwmE&l(x z@BsGTxjkyEu&A+cubLhUdvS#t@&9Pd+y`FV|Iad4rbhg~8}a{s%Y0ak2P?UD6sT5X z?J?>)s7C((xpCKVHCCOV-AAbV6z#54BmUowr)sdbo>Ak)1~neX{`>f(8rlE9vEc&w zMm4hkXR*bm#`AVH;{Rt^IH$(yHWk*ktFh6k#x|=OJF)*h>89QuHQF7dSJk-JLwmhy zjK}}do&Y%4)QJCg;n@)WLt!=Y|L=|X{}@MhF6fe`X__X+&@>^05aSRZ z*I!8tQxu43h|;v7iLR16<=6+u=H1 zVfW>bdSjLA3c!&=z;u459B}AMU_$yGA|Ivf}|DH4x@__ySGrLg6 zwbav4PCX_w^~B2ZKRww0@7b^)ad5|E1CB^Nxc{XG??0{6JE_Mm-Tw_Y5B1>wkH0)) zryj_E^i=gxkK+)^UzY#rf&5Po?*Hfk{dK8>)N^@=diqWvo_^}V{U1F;Ct)6?9^C)1 zKJOIu;QV(F-hW@0G)z67bC5BZpq|n5)N^heWpt5x@cvKF1^NBoocRb=>z4BX$^)7#|I>48ntG1j1^z7cT)zjIvYXU{_n-Ovf6wGcz?%WN zp*{VcmcY{z`2VN`eDi=mb^P+2{>kf?KXqJB!~1_<0(_?gpNr?a75F|tzC)1j`Qy6~ z`2GaGh$JAm^~P`qA(8`gJx_bK0BhI=HScpm>Y)K4EP z0KS8j@1?*!6;Pi6&fh+U^CSS@6EOedyB+vGjNkXey&k~-3RH^Zh3^i*T_RAcpBM!0 z4N>s&kj8%l-a4qYP#2-r19sf!4|g&E_HC#)e6aZj+=)2f`jDB=VDraoZtutUEb@oD zUjNg-o2vVCpz3;_7EEGR)c@ulO2Zo z*+Xuh77Oll`*%$W^R1qKkCniusvlrp4(=U=V&2b$FR?5i@T5Id-Y52cvOGu~@NRfP zFyHiJk2swB7MZzPLSFe2y}I><(Zo>-*m&IPZb~z8~)5gulB`A3Wsc zNqgmt;Oz@=hvq~0|GQgw&!1%haGxsF4}95?WdeBn?BS31{JkH`mB{iXb93Y0B~QbC z<-L9f^j2?BlFqUKzwMj9$B(->;h*>ZJD|KWI_}@*{UJA&3u2im+)Mfhyyqdi*D^l}KPstfOF;+~ekf07dT)b<1a zNy_(WHvWT4fX{Y3{r=z*@bv?RSI7Sl&x-v2Z$c@17v#TZRgh)}EK_q!_ z|6eZTzdgw@(*&-cH1Aph@y{D05YO7h6^|KzFI z1$!-dl>0wD)fS|?fjp4^UY9S+|7XwIkPeYNM;*{x$zybq2lu~a&$^K(4|$aPA3eDL z(}VjzvvL2U2lxL9U@YSOFO_?i56<f$Y76<=kQ5YQ}`%(Aph+- zeTqDg|IQW8kf&joJmcrcgZtmJ-RH@J`#*Dqi&;}Id>KC3*9AIt(}}>WUXAJ3oRp%xI`9Hj=uQ%kDj6{O{D*u0GU~$nf7wL|fUTenqv_CBQr8NJ{=i=ix@7{EMqN32=sDE2ESI|Q z{zI33J?#0^wP^!zbTAiESK21{DWa~7JnAX{{c-`)x;E^hE>o@Qzgo(v3-|wZ;r_o|y#LxIRw4cSDI52{cJ09Xf1rQY zeh0#7r7pbx(8ctxa8p;Khq_$M0JOt?5bk}{@fr&q?YU<_*CC>N<3aHuRoG7-vAYVd^@2j=GLcP}hm`)OBtgI2WNV zQ5WdX=RdOht^jw6x=w@s_6xM(@HOhXbDg?y|7+JZW-{J_`)%ay4&0}yYy2*CUB$)n z8}Cuq)J^J|y^p&20D1d}x^VuZi;oLPpVIz2LTTf$On-NTKyI}E&IcM}O+h4OFAo8x zbpIptSaL_Jp)Y}2N^Xrre{wHLgguGexc@P`D307Asnl5}zyIpS{lD(C71Vh*9cf!h z?u z|L$BOH`>1&?SI4l5^~p;Qnt2?+!e*Zk?HT=R7u%-6Vg@Im0KAplxc}81+6cc=`-k2QTH2u>gz6(V+Q0jt)c(os zIYRFKqvRHQfip;*XNM5Z353~C?tu|<f4fY7_nE5*;{v%)UPFDqPHxcOjr)JyH*b;q{B3ei-9fz5 zcsh<4Hq|4C+>glEH)zC0@dx$lu+l&QtB)!qfXray|A}} zIwN*aC+`2=aM6UbHPzH<+=X=1QYYx&S!E_2S*R2A-)O3$PV;{1wD1OojXH7vZ)d9m z>29S?(7&@%zW=lHgoir!cOzWf|55unc zHh}(}%KN_^ArIge^w-Z&=Y0evec%3&HIplpI$jQi*#toh5Mg7uH~alH;^k&N3NVga;@J) z8}p0ERgg!nrJHGEk&#>`ZD~bl0n$)LuELbk3LIr~l@z1A1Y=$K4ssQnP;czQi-97! zJZk#cO}JN9kgLIL>iAGT|K$>E$(1>vTJYc1ss$5pZxmGv{touPRU2MKnq8O=x%Rse zUpKi9!t4-{Ua9|weuy?UxK#h7J4~(r| zEOkVw;ZveN^myPzQ3u|C?pT^c8iIeDV;i2uf*BJ z6zWLKKs{Sc9eDq_BSpIZALWn(|G6kQAbV@!p%c_ z-%K65h&s}Y)PerrJye4Hl~M=Zf9=>*OdX{av=Q(BcHsTj4kOorYWUwp9k~CwLst%Z znW>}5g1Xp19hm=hl<%jGXu1FIQ11Wk=;jSaCvY061Lr?GaQ<_nwwpR|{$9LD@`E$BC=df%l(u=4;fk|2pV# zgF2=s5!WsFxec5<)PeJ#3w!TU2hM+PEV@S>=>J_RZtxFG9Vxi~*E~ZmU;hvA)9+~s zJS~C$BqiYE1NGPfgl+OI&44?13A)mGLo;Q34WP4eEx6(iq8u28AI=R!;3IaL;VWs*HAdm_&-w~l80a!SAM@#KA(#7 zcFO%R^0_-cD+qkNhbqekho7$lE}vag;r&d!rwN?TKrMw@?<;M7ixY2i&e{14 zB;;Nt8BM(FDW9u+3-&KU^#L~#>hpqX2LA94Dc&Uo95S7sMLFW#Q@n#Jg(aU;N7U{*x2)e`gNn|LGgZiTS^72K|`ZlC#{Ty5g+H9BUUj@&2O|?>{}N7-IRlzrdBE_bdnSAe>z1sIU_uXtDBry5Gd<^=!bygA}8MeaN_-s z0?ko!_V)rl2sK1btpA*&nEy?UApDc$JUj~g0dm?-k?zK6a$^1G#QNU}{*M#`jGTp=gke{kac$BnZW5cV~Mcb%Mg|HFy(Ux9FooOu7o zdGn6y@6JzCTPW^-xG_u48~3O!giEPCF&?lea@|a%c2yF!M<<({+Bo=6rS{Ba z)DHT$rzQZl0(nTMcFh0V@&0FfI_CdhNbHbW7V5jX|Zj`zRXsTB3IjM`1S{=-U8*g@@>|Le}0 zs2%*j_PkxxUQ&y6m&46W?cEk?FK?iBa~16SslC@q?YnGwjJEAhj0`A-yN49sIxc zGb4!OBydKl9rwTR`oEy?G_{{Q13$ym-f#}Jt(e`}w*j`ZE2_UTE~^IJ&cZEDB+U+veXsr~j{+IV@E+CRES?Kf^B z%=^@S_5td~N7N4fUps@OFY80rw#f7sqW?-Twe`mdnw5O-i?HRmTiDWZJ46Wifcd@x zwW?r0rxu>uBCY?nbexK(R=oexnviH}JD&tQ_`hF{qt?V!YE4=WmY`P9d?kTeQ&s@J zl3H^(%oOB(HMPbeyk+43CZ$oUR*&#=s5Lbgx)$NDSM|S>5Az0UjnxSu|Fdw5=V%eN z7U1pRuj6H=Qp7PUrH@*7iPSosLalgDxph+kwXTF-T|upRJJ6+6s$AbKrPlIVgeAfb z+{tp3RTZ_`fM-$*i&LPR)q?6Zgg30E)(PN%4_uH5{V3cVY9Zhdbgcbb8@q)?!**&t z)F*|vX!sD^Jk(mNMn2&GXfNQvb3$3w!t+Vc2hcC%jZmxo1ho#Uxs0iGTr7P9yoT2P zGth?tJ4dZ2&dYvJGGACNM65)3eV4b4o;oXsW4S834_=bfT+F=xJovqWG;x1`@Ggij zL%)3&@OxXZ&ZE}rO8dwAUoEPSOl`YnsMXj0cS`g(waM+@Ij&OujWh;Ekn=+g`r=4x zL;v3vBlrJpc>m9NTYCSG+QODnTSPo)8AWYziKH7%qBgw$*p?VaZQ%d3#V(_^rOVNW zB~V-H3Tj)Ht{VT^N@`03{bw?$ZN+M8(`HgZXd1>3nf`4nbE!=a{-0(&wXM#lHt_#+ z;QzH16jEElCThzqLT$}MyV^|7dqi!;M&K3zRzhw0rO?Z$4e!6{&dU7XHmbxJVxl&@ z|JJr+7u;*9t*RXU%}BR}+PMFxDr&Rf{-3i}YOA&(jUu(#9l&j+HoX7V=4ez6#k!GZ z54H7mQybp@Y4aSUg4jN4!}`C?=>qOyl>ZTG1OKNW0qy_(Ahk6PQ5)KS8`l4A10#s@ zB(wn$-E7TG?MQsyT zfpdY{(EbYwuT$G?@cwStg^1S$3SM!WT0-tn+tf7DdyCpWQX9T#!lS1*kRROtgY`eu zN7RP)-!=`S^eO#+Qz*4y{BN06sW#$G@hsf`Oj50`pRGVElJPO8j4>BZ(ZKzhhY(LQX|_ETaOv|K0Lo0y*MVP|JmMl)*}Jq@}1v zf-=alVKwkTe`^{!!2flu&Y^;#Typ5NfO93xCkOWbaQ_!M5(-s6I=6`&`XVYA%_9f+ z|BjVJ4)FgS;QwUhmyiSee+S-wUi*V$a$x_@QMyC*wUd?PC^sSP)#SkbpQEal3Y_KS z0RLY%VBHeCstniQn{eM9(_`mlL zl0)o6+76Ke{lBC4Fw95D;Q{?G_L2kdzd4Q!0d|5M1O3oPknWS@I5kR+?g98eh4MK~ zj=?iXqx}B2=~L+M2&J~O z(*17=Jc3%e{f|ac3*P_JY?Rx7%aU014{ByN_M6j25alvOLWxVfMjsb!NJemv9y z{(sA;omy%SqE7UI)`zHN+(j++!_;Cvg8Ut&mi}I}p+V4Zh+0mbpq9h^)G`G6SDmC5 z(7)yA0Md4f+Gg#;pMp`)KNMi;Gf4fv zp*hrGzbo_qv-E<&ejx&`8iO70|JlL+w?{=A>~~_w9u}+0>{pXLdI{dnU5av!Cwp8J z*<%vPj{W~^y!~!Z5Z|)J;{Erc7AvO6=$o|3nv z>1Z1AsyEoL<&a&M0e^7oUava;#eAe;1KHQ>$PW73mv16F_`mwlJhB&VCi^CWA0yd| z3sgU^E+PBoQoN&EMt1D~*umr1hwdPKLM7SJ{_T0yq_^%OySbLq%;jXq{eO0&h3pmB z|HJ)%X_)`nTdicTvXLG4|7FiQ$ZlyRJLZ0N%rER$+>{pTA-l~^_FmY}9wd81AK6O| zAq_6FWBzaNI|B1jvSa@@R~RJw;UThP?w5r*M(8T!>GVmm9~~w8$bd?SK1FuC{b?T; zk^d1WxSyCny*Lltag@hJvfsP}JJbK1kgS@5xfl8crW)DNN88iYZ#7}9W}luU`{)g_ zXNqq%6=EL3?zf6DFPRklx}KV~`P7W|-+W$&G!>$*@z@`Su=1#xfLkih|C@8s{|A;(b0x0{#4SUI z83*p0pvo&z4kl_YsNUkx>_S|%7~6JGGw9!JY^aIV0;jBsnh&XW1{T6>w;>;5O>Cbi zyp-EY&3#U4#<;Ms*F()m;EwrUqRj#LL8v}z9z6uVE^6L<81WpT=95RsaR&T<)gaO` z1lS2`M*kmhXaw<}6kgVjzGYi60Kcb%MAvB{vHgsYczGBw-2ay}LCqKC`G0fDMd78@ zm#FzD`hUFt`?B_m5MiI9X6*koU%7zty++O0|7qs^AMGUk%l&^A`2Wqfrpb==Uslm9 z*^_Tl^L5Ope|VpouRcJz&QSA*r~}K8Jn4H&qCXu7MSBS&TZD@2=LO_9!eBq40S4MX z=xQ9tCBlCa+0rrp7nYDM2JWlXhB(A!ONpbA zJP~tmn6du1ElB_l%&D1VLtD2kPp7m5J=uzL$d-_c_%q0c^}h}4fBX3jWW)MD7xEuA z?El#ciYRNB{Qj#gipaLXNVd%d2(E;(8szz(ZBsGq6=buSkPo}C;D{Y|k!-cQsOf$= z*{TPG1#g>yUyXRxG=e$ufu;M=zO2BrkqzzNmgzvB)k-$Z|FVuYk`4PmwpI_^yUB+A z9~N0a<7C79&xZM*4f8)6=6`8sY5$jO*RPW8#s#ur z|1ZmZoosmj)mAY{wzIdY)k)2RvT|0b;eo3Q>bIJ=sf zu>NmS*8ffF9BRV)zu=-4aj&N)?Ef`k|E~%Af0~W5{8tm9|Bub1rku^dBWl9?pN^RV zxTF8il;ERK|C@OJH)W?L(?M#g?4u^E|C7&|zu<|EKB51U1R) zf8bt(x6j6G;bd zgpyT*wm%7&IhL$TBgh)Jlx#O)uZ|~cDBAyIBJ!9-R>=QYqvFV#gzydnAuH%_EtA?m!Yd_fVHxsJjGR?aTKW#Mg8o*}-wOVZwP+VvOKTBN zIaxt}>n;n-4P;g5Z^iqsR?PpiCPesmK(&$;^M9+O5oR~qhKH=>-DI`e$qM;DtMdM< zwbzBX4g=>1aE_7{{6EdcLDb*=Yak8F699J&TYe|<8&snm9?`K82LY@BPWCi`L zL$^@=w<&A-4p~8e>ov9E2jGKPA8`LSUYUI6zUuAdo5sCiqTvVVbFHAU{C!#O|E+TW ze;`7V|AA8k;?R)oUL^XL5Tq#@_82;V{{KL<8Zb2-XaN0_MY4kbb6~kh2e2+UPy$#2 z%;ivec`kAwC7upwmLq*)>Gola37E4SSOJv|zRC^g+B7;pT=KIDsVe(}AIrQknt|4bg!Kkw!A%b`;^= zfj%yW7rY+kv&;h;Mm@Sj2adpgW`Yh}h$Cwl%%`9xwTSxy!n#2R9*ER11=uy_2_Wrj zV4j_(1NWg%$vmqAAHjSX_2Tk7EgUkd*HThUaHs(i~E2eSXV^_G&;tG}m_hG_3_hPlvj5;v zB<7YLJ{Esj?E{*&qAYx1K}eR;lmeJa2=NEKnVpaHb6)U?b7_~7u9d@%QS`WQf4?kF z(|yE?TnLMQB;_K;$1p69Fjs;jcH9B8w!hwwRp3VWdUWLJjq4=E!h)0 zN@?p|$Vmh8_cF>jt%tq#?R(v9ACm0z6Ro6uzLttK`XL`e!0SQ?>Xk%?fI=^dDCfg# z6^fD3!^c%fQ&O>1HwHHOAC-W9{(b-~_;4V*7zs4KOj|W!W5kGgnusxya5RBq#K|{k z;$#D9V#Z3SZ1=}xipB@(>L^PSIu^my+!F5Rucy{$gwi)=e@8Cn)vJ*_A;b^kWx%&l z&`5W94<}yaAAI8qO^Sum?MHvcq&SwsDO$XaV_b|>nDB=t0${)vP<=!LhX4YJ1GbDU z4fcCZ@~PBHIBD)5OO`-o{xM~Kb`x=yQ`L)tg&i4(*%$)Sg?wqN)-)5w8If>*XKtjl zKIvzb-2d0Bsj*a`#z?`qcShp1V#wXk#JNX22%Z!i)a|b2*gSF1)Z9x{1SuUST%w zy>3CD*dTBMQz9TzUTA=(YoP5cWQ5Y&}H! zJQp=${omMk1b9cO5$k_F-hbCyhp170{~d67|F7}zD8e0po6P@f#Q5KMY8bF{81E*i z5%QmnC&#IA;v(r&FHs}pKO4`Sh1(UxH${zSxv#%K`t)nCUx$7J_DO1l{C}hEHqw2E z8gEVmb{Fom(C-1~CN(PjpL+0r^o282k2)lOUz1h>#=Tho&xX;y2$f;~EdlXKyDlF4MS#i2>MB=Lr_>pLhfHtz0gHT zX~r9A-!3icmWaA3*WrEr$j99Q)OEQ{>>Ggnuw809`vx!2zEL)FeMER)y?|l??5rK_ zXFhD2_Fc3i3@=O#JcNU_+rF!Iv=xTK?^j{gvl;36s!02;Lr>?usXMeUPId#XFD;E& z|LJ3AjC)mraS>N*-*_$=40op=hnZ#=CT9HgY3Q;CgXz8mqy1;+VA3-4;qZ)!LtZa) zcv}M>gBcUY8HPAwe0WA9$*{3fAIxx9N(mn4d`BpPqxg)9-bjgGpES$muig ziIoh-obku--b_z>47N4*3E@@9X`x_d^(bliAVeTr9NYPm)AxbeYxKd4{l>>&h7Y11 zhnc3>kN18v%qTwTs!dnIjY!vB-^I<6xEaPN40~LB$yv8}0v5aBxtM$PQ73}AcGFbD3 zd{jvBjvHTQuSy){5`D)r&T<~T=^JLFNV`NI%orBOFt+n284Ue)Hj4BY;vDRyn_lNR z*aPmKP@hLUbFi&_g6RU6q4de&eITU;c@r6^z_e@>4dYewU^*H0^Za?RJYm~sQ`yd+ z?02i1jbg^TvvaTyie=bno)5+bA-E0`l%HT0|5af}Im$S|1h0#P?bA}76M+B~1QiGs z0QKZ`0H!R#t1-C={^rcVcZ8o~TDEt36^57K{aQc+eg$Ln`@BQ|5b=cj`DOWSn+y*R z$ny95sXjZ)-`}q^coG_P|4Dh)<`qU<{5~gDUQfvZ zi4T{fFb+>pflxtE!B7jJLImY2`}pH;l+ZUfNIBz-J^z!Ed{~r%m5kupa2W^q!`Gt! zHCBw@|GPBkpG#(bvQcIF1{@dtGnc*fSnXDxlxoHv1`n?1CB#$~4L(O(XO4VXeS9HD za3~AJ&_4>)1GrHwtvL{|`fZ6|jQ(RTwPIdToEUpTqD|^jLgXR#G2OPwg3{2L!9VB3 z1blCd{T1*^F`#m6Ud|MVe(*U)$kX$$4#5X}%fd#j;x1?TosUs6(g!+~fKEoxDFANgfA?}|PZ-OY-bMHFWA8@HjdEL>m@2$YPN(hR>PvF09 z7Q$2fwHYXgy+u+%%ye%ZmaHbpI0aPPS)Z5lwp=)LG%-f!P7a!%Pv!3&T?uWDR`P zZnf_x7s-OTo&~A0dp zni_753xOk;Pw3%R!TbKAY{vdyT455^-%KV;<`Vc##hhyyS<;u2MV&yFWh+Qe>14@R zNtWak#FzoKnk*@qq%TXO`boWUuO){p;Qw0mTC(J?$9ycGESolvB>^Y3Ru=+q6InJF zQT-tJe}$V7Hz5oo>3a*nV=Ey`Whq$-%E(eu4EPS5?z$iZ{`Rb}5FBukzw|7F1*pk;IfX*vmGo9)||N7(<@FFv)UcH*?LH~Mf8p=yg z^(%9*Zpx*4tOx7U)WS1wp&lAHpdRR`eiP`Qw~6XO|HfPS$lqqFm-xP@f2gPRR6_Ly zrKlriRFD1N`b?e>?Vx(h|I<=UR1f}dJ@~)%C0qx};opq(TBsiL|9Yl>`hKcEWTpCD zHiVDxK>vEszwwrn>J|FegZ}k6{~PrTIuPajXFcd&5Bk^d0R0P(P<_Kus)zhvTKXW` zfK2~-?Em5XAN+v+g`-pt`Y*)!ulmcws1MTq)OVNk*{S{>%Jw$$e07}aF9H7c1?25A z)sLJ<+W`I3FH!w8>Sid?ci|esyH53|Za|-;dc6Opw@#BqH6W-G?82g*sOLWd-kqCp zXP6o=fh-|_eK<>&B>+nwDg{2;BhlYz#`*tj&YryfGnzqvGw7dfk47G1$Q%}HtV3U5 z#`#Zk%u<-+$&CH~Tp^Ln*#9@<{J(xG4t8n%N9OqDWKK;W{f!j}Go8#ER+1U}Kjw6i z%%`wEZx_g{6^(nMU_S%7!XLt}izBlcb|cJrS`0)yNh%`qauHo5U^o-3zo7;UX4C=R zt1zPun5$&jIE8)8UM?b>h2adqp+eq1}ax!0l`QTA94;_-jb`L>6 zLgre)M@Ptf=p^ieWF8g`U(lY0AHem)WWEgDj(BcDzo@3I;IWu5iL`SG^bDx}aXD>g zQC=OePhJK+L}9^ktTzwAK7EzUShJha{>>v?A7GwP8~3Q8OY%RrkZ<_y6pVX9XK7C( z;8z%pzcnB7udyx^{b(4~sZ~;3mb(#TxyPgCT>Y%msi|%yhKgh^d!>F>#8Vx30{UKV z|4UKMBGqkxic2NS;4-Si`G0+H0`OPBJso-q)vd6jJ_09mHR(sws4iz5byE!(!Y<07 zx@BB<>jGKqW`~dr#kHa)baffszX$V{U7~(wb8sE=|6!zh7X`$8>H+dLsWOV7yj(1 z=SYuf0Qh#J*#$f3Sl7>To@c1;;0Vsxp9B5`)m=YNbpxlUZUXte3LMCPWn=%R?iR{C zM=+XWM5>$QFc2QccY$RnC)n>B%ubxEkJ;Y5S(h&zG3XA<=F96-K=Yfwz)C&>wZgI0> zH^HofLR}S06j;SP{3^hA%(IKIS3{W<+(x8%9E$U@Ux8u&M{HHhF6~_0hXHp(^~D)? za~is#22!MS?J0n{7iw@G{u$VhLY*uZqBE56CSXUs!ABzc5OEml64a?Y8P?D88=`S{ z5nxdN zdKHcTbI5myK)a`5|D0k+Ke8tj_LpIQ3FauM2-sgz>~XM1!~Q(%&%>MmwFLI(U=N2m z1qw2OLbyn^r(n)VG1elzwb&!ulM1DU+al;`P&%zjSf~|}S0g{=uxCQ8hsrAl40;a2 zTnHUyy=N253!oQ6mBJhZy+S0>E|nLFHrO{Kya4FsDI{`uCa7vCQKUVf&7K|b=Lg-q zpUhVU9{XsIB?aZ>K%eQPJs#M*8&MD47}Gqo=b)X;_e3G^9{{)Y(H@-t*W>-yTt)t4 z59ELM96pG01^@Rx_x~qo58i*(L;k~Dc@q8ODD4?$`M(sw59h!2_lIc@Xu9Xz1QUby zRGosR1#K?^2km;vSs8wnJM1aibLs-^xq>`~U5B0NItd*3yCb*%Jr}2G&n*#qE_Z3q z^epmokM=0%|M%Q|fHZtWdp?{&*c>c>3#aAw58A{+4QP4HH13{Cft#Gq+6aMaW7JgZ zh8_<$)UVnw;OYS*nBxRvEy_g5fn5uGf);+EC#tLVpsv?~{vaYN>XX!w`<}~t5c-fGf=0ecYZHW4LkfkunU2|u#GP+Xz@5vo0q&R!2L584-Gv4JC)`63 z&WG%ei;TZ;5P|!DeLf9M+XurD*{=Wjf5~=~p&UTFJ z@56iu3UzF^S)|=(5Y{!Ady(FQu%n)AO@h6j+okx{0#3^SluZc_^xS%4{T$Q-t+BxkznuPi zP~%XyksrMp{Rqr6qOpMxU!h=Zh_R~#rstGI{HH(v|1E*#=mY$PJWTCg7t|6T6ZN$c zb#G@8V1?4YeZ_ly-U1SZhxot3IFO(Mz3$%#1{W*yJr#3$2iMBHF9nv$JYNV92(gRv zV;ornFMy$)HE)|lb^@O-7>v~Fw*4{`lL{9o zE4(^$?CREm7quvuu&VG?L0R7lI3A^ENsO@ln}sn`#9*p+RVWCcRr|^KoomQnGA7M5 z|6q;Z$?W3`b4<~%kF4<@_?w*gpAP(MF_N1wxD428D^?|%_Ys)diqesVEP~-630dsT zhr>J}3$@mSeFCt8=W57mENlD)5z)Ja7>WLz|2in<*;feLr+Pu$E}_IwA(e^ARwbBh zWy1FNF;04U{5(ez0-*w+{Gt4y_*(!K48;L+8{zun59KREY+@h=loc5FUkcFqy{q&0 z8-Wlr^Vg%Je~OGOUi@`Qpa?mcCr1+K%i_^TvWU?Ch%e@WJpN;Da0GLJUkFrQIrYwd$R3W2~x<0?Y<`x?+#h0*<}rtC)LC1D*h!B{K!{snM~?yXa;POxm=jcEPEf4_eu{#R@x59N6=^s2 zG5@T__*PvE{A2~+RA#JgC_p+YA)lw<8%wFW9C(|7e-L^V@RJmLu>t8Rr|L2rRTn7u zwH7W%s;&n92y{E}6BT?{H|A1}NXsFhDELkfRb$Oo?EpT;=<0spCn)%k{|o#@@6O)x z(K-C1LlTdm`Y`Zs0e>9$@d`ff|EV4xMtNSQ>Io(MGZV&D5x_eI{12f|0)MH3KYat` zcmeo#sQQ9}fAzXt##hwF>O|nr++_Notb0|$l6%HgA(CIDhd){V+i)B;Q3#`&Se0Q2 zbc&yep!g3ps>)X)sRrji6V1_76A?o-QL&V$;YPFsYAMx3##0UCKNDjUsU{|gYQX=i zSr$i8H+cQOjB4VS8;0&BVBNEV;?Jj34dnk5V=?~;$)K9J)d(Y#YBJKO2IqgVfS{W6 zTuRK-QVrz)YjW}d+dwsWvix@<&VSZyE>dm#$2_XR`M;W#L^bP;NMnJ@@No&%;QU_= z`2RH}#VW(!S0K$hsAg9s)sTs5c2rYh>Mp9m`JbAya;n*6rWXP&R0IBRVtN(T;QqfF zqm^oK{-vqZ;u4qb}a38m#{kt3IL{od0`8RXLV({A#xU>jQsJeudZ| z8VW+s^R0mP+~Z5vyrC)@!w7S8tt#TR!I!z4SIgt8casS{Pe^dlnimGHuw#hqIJQdB z8K#WQCSQMxeK{lc<;sQC=m&!^??AUNs4=*0{n9Q$i26X-`9UCH_9u)#3q?T)g?i#R z#KZ1lA-p(9yXsB&SD_xO-{!qI$r>eD2bKW~qM7e<$_BCk!&ajfFxs0Gil61O^9Y=4 z?7W!@=WxGZIY4&(Ym`uB-K6&aQLdkN%+WdC5!_M; zONxYa=3lO4%$6DTzpGSv-;lkWZ3|JV`kaiInm(CMQcOCN4>c zNG@C(NeAEg_>mD4^eYGb^09!MxBnf4^&-z36xm@xSPMJ)e5^I70n0tOQ9~+J0;;3* ziSl?kf2^FbLv(BOL zZ_2aJ7zvqv#7K7JDdbB$wgR|VkTD(K9QcYfw92x&>@p{!=^I)bc&B>a>>=VcMIt%s z`17)CGe^Mln#EsvT@y8yUC3d6nTKu@VS8K^y+tL7EvIDZHb!9H(Ga^)-H!<`OXKdH z&EiI($P;8fT%J7J3)~`=p(Hm8nab_{GYI@kN?9UPkZq<0Z}AACVj9QX0?HpM04fmb zp)wVePfBUNDOyMr{2*_fAn+Xz4}H%duDOqM8Sx(GS^?kFnzk+!woF*%Hk~Bl#0lHS zXM{jMwt)81e26tnuD1L-NtO&37FWFqo7|9evTv5c}Hn6N7@1Y0;AkOcM$ltjFbM4(0@|52F9VtzOGmHAbEN7!=j9B5hQhuXH~9?PWQ zKSUt)D2G=3aQ;a>CB-kz6X)_@j9IYb8J<0IgaKjY7Z@p$^zp{L)XnoEORe^OAfA*U`Nfy$b9UZmsm%uKtTQFGpX z=MEnA|K^V`d%dxLC@DXA+ty(z>ve%HmtP!<*-QCX+K(3l^%p&x+^sF)o~B^FXJ9=k z{oL=)`^M*)IsFaTvGjgYPxZ~{Eur~5YU7Xwwto@!j7-z}pSI{x;oaNM^U(Ccfqr*HQ5P!Trn-yY0;?SKi}lnC?6flCv)!n&d#GkSRmFb$T#imgL2FH572WyL^;3Syvl8h z^QVlM;h*tWjKS|}F>9cm6*KNJ1r#`tD1mm(w2Wm9M6qkbOmh}X_R&uJ%upDM?Ma`X z;=?~O+%G^eOM*s=QwG;$4=zQSYToA@LQL$<&-Ze-EFC{tcx_cSPr+u@iYE-=$ZR2U z8}L1#CPvBgF|DleaU8jhzN(xg;ym)F)SFFn<jL z!XM19Vw9HlWj=f&6*>+B(N6sYZXUgI3z-2xf* z{qcFQVhLvGikpK$q=Wrt{I?t*%$QikFt+n2r*G>t8zGm>Aa9yEKKLDH8ptqX{G``7 z2TQa(0k)rEqTviLt-ay76c~fNuwFKbw4df+TX|gLc<0L0uysO$8Dop*@cNk!@cRR4 zgjVu_K3a;G-IO@C;;n1H=h-e8)59b@W8xF)(C0UKy)deR=kywVFvHz}$6&@cq_i*& zf3jcGqs7 z7THPp0^jqRSV!Nr`7HNm3pa8HH~2XQT-0s@qZf0@pp)SE@>#;5li>jYS^6l-eqjt; zaYlhu2+Y2)QUxAob(n;iaGnmviH*6h41h!!K>Y{#^r?1%E!;fbYD@!{g5u zJ60o@4N8O2mI`TR=v!RCM~V~{$A|4z{7G>kPURbi4&@71Ak$gkG$_tKc%GAc_dt!P z&2wVa&!$z;>!P>#&*e<^;+qd|nO4G(wYfYEHM0 zr(P?WIrd^!P{8qLb$Yt;oA;0EOZ_hm{1b8(d~5KIN!;41J07rAtpjv;;M}~BmPwUF zi*lm*WRlB`=@j@YC~w{21Tigr<*5A{pS1l;-4ArgmZ>TWd3|PO#Hx%{Z5T0oCM_tB z#T$8fyla)5P2c)pJGg}iiME43RB?Y^ihN-+Ogr>vD9ydIJmei>riOAH87nslr1g`R zagvQ?)n6Py5;U^h4F}+zPg7;DR6nJ8gS@6?XOVyAeOv{-C!WzRWIn`;I(b$lPuOJ? z6G!vzL!^^}@y-9i0}qrSdGmr7a6%g4H*3{g{WSNbDzC(MJV}NPE#+y6atM3q`FWPP zv^^fL5=qc2nuvK*0wcHKS2UV=pdlF)xr$GnCMgU(>?zA1=3ARE56u(geMGDycVZnD z1V_v}eREK$+yX_}i}b6^dShh9jCWqEK%}#c=(4Iev zGF=e$E>8BUe>=nYU&?z<0Vcra_F<)S`BHiMi)dF+(l-ty zs6Z$#d_kVPa#>-swL{q{O*y^^>IaZVe&htkoyRbSSc`(N&bnAQ$mjXLP^>u6)-1grPtF5xaGgw(v8EOZTT?EE0{;dds`)~J z7rTTO0yrhRaI$&+z8d9Gic^mM=+3|&t{fHA3*e&WIYOqqrg`E#K3GKFq2`y1uWwj2 ze?Ff)uFT%KtvoiLPww@)A|LbS^U1DHn$MRm%-R961UcrmDf5A-Spy$FKdeBK}9LS-4&TWaXwK?LuEo+s1niw7BBe3(AMI0(RSrR9fV za-kSwQToq2j|Y4MD<_aCd=x*y`}i;tHpY#wdhnBQ0Y9H};YV{8^=e@h{|o>x5C^&5 ze6|QCO~1sBz{L!0u%a`^uv3}IUD{8992~{FtkTfHUZ^rb@q#`=@dDGsUaBP@JbuVt zQoUY+u6ex#U3=Kel}Eg!d%Y|4F5k>I<+;k|}2V11!Q!P0x7Zwfm{ zojxG55)i|jqY!9#$ng>9%FNhDoacL&x>}SA^OHQ-x$qaBK{ceE(?U!{EZ7L?JR)FT z(SWM>m(Vd6)%43{CGnNO7w59$dqm_q%=J}7jf7G|Jqx9RS_Bma6$0h$m!iK^q9Y81A=dE$A(T4uyw5yEXPl==dmL-Va+I|f7BnQm3=nzr!f4x!0@L|m#xT(Bku=k`4b%(!6SF__`OX@-gPRuXhM5JS*} z3_GNqgFQGQ!QQ$)S5}6*aSUS|{v?CpZi3f12V-6<$ML0rPLY{j$^_GnTJh(WgS- zPS6c)LWDsHI_Vdw3wq^vsM2FbFw7{q$jcs|i-ui>Bo}%0<8z5*mt5VV5NK=E9OI+k za?EF>dC>MKnIF%62GU8}A>YJpN8XH>~`#T0>4 z@)`1qGV!OfL9a>FXU`l<)br4RW7biSEcEv;iNfMS_~Jgb-)j)%Xv;eO^Q{A?b^Zkd zKV>*>u|iCbesZ~LG55jfg{07Syidnt9j8;i`-{DZTzA+oFRg6B65G4QM7VyA?;+!|l-F$DeQ|F&O4*vXTIcGDwc$u6M=+EPl5v4ZbT{FO zF}VW7&x5`P3rb6ISvucE<~$%cTw3-ds!MT8KfZZ8?$Y4>BO&11lH&c#xwJF=rTPl} z(e%&ff5?ecc6@LTgjFdtwOnYzg0BpIT>-@%;@o0Ej2g6fG3Qp^+?o@_@P~`E6;_do zjLs9pz>@kCyaf2XBs}7UTY$8y`I!)yu&XKM9*0rU{sPdg(e@-kgJ#V#pOWmSawi61 zo+9&{Mxk>X9%7&3C+{b+^IUs=1~bVeXvwQEf2WEYJYz@v;XB_8#txZ2+b>%YNZ_U2 z;(d@!@PqT>#_+%eIcq3)vKXoU@^3!)p`@?*rI`C}&RP{i7nRD;MWs2v+_P3Ct&5@~ z5XcwzYkBu^yNbeut*#kwK9Q&=ek+iBe<}Z3K@$uVZ=Z^GCCQv%E-cA^V~+fAe-I>M z2?P}Y<*gGB^<@G+t-qfi7?05W{oZB9>Ed3H$aiC4K=%AzBT$zkS0LU#3{uQWWjgj8 zvu-2`zG#986kKyG8nAiWgoYQ3mHok-HQ+4L9Giuc^5jqEM|1zDk@^+pTXDUY@;ukK zh@X(hC-#32b$V&;=MO_Nh@Sn!+Q z@(&nSSloc0;4N~Kl2**f!1Es};$p9@jms*5{}*KcF@OJX5MoI*i|m+yi62~TtS zIYnRGCr=!*H1TZZCd_k;@RGGl-XBuwN@(qpUt$8Z{l6uF4p?t`u->c$2P;rmfbIfv z4MNPbSZ_*W>MCLTOrcQu1;~(ZFA}z6TFhevZO@n6oVN`=wBA&q4u(Q4fZ{gi59Mul z0m8g_#5e|T*riXI>&#nkE`3*lC68nrU%ZM215*Ccv1u2o68Sd5Z0zO2ONTc5^qMFGE->r@(xC`!VL z(&7|hDm6&^`_&+>5K&*n&*FhFVS8ris2o|YW@)Zk?>Fms=i_zROl3WGH^RTBS{o67 zx*Hi0{m#cL{N9K`RbH$9;MmOCm^Y%w)I;L_ya|iH}fSuli%=e+HfU`@2N&FY^#H6{E zGADfVD}lnB+~)*f&h-$zpBDuo5^6D&21*ST2DK21>%lWn-ac5sCyhDdg76|#4Ae_d zsBiM8P=WdF4-o`>JFYug$bZT6zb(I>MN~NBriM)5uWvz3a|q&GU3;jH=V5hWH~%E_ zbQMHR3&9|?u#5L|(u84__`59ifZt*UR+!^8Z5H&1&#pS2!gHU1{|ec}PGl}udJpZKjnKK!J7ESK(0{eOsi`>?38^j>r; zA0lE&SJMR)RYg%?0R|nUX>e@pP<#nkd<>KyZ5W4-cUKow30y!2ZPP;>$N2PPj4{R- zy_V_8LQsr!V7}jxmn8zjy6jC9wA7`hM5vrjA;Oi1CBA20En4%JS;J`>C}Jaob&(pK)W&o zuc!l~6s)^eoPa(9G%>Oyq=}*3D~$Z;yQd_wND+PNrfBQhHB>wfTHNW`b znuv{E2u@^D9PWhC_7MNdEQ!>Q@7@;rLH{bW)7)0?hG=>n#uH=@x5YEcQdn*dQ4g3+ zzLB=(_yktkpl(5* zgdR)3)Av`#Dx9p!C(-LmUVAM@cRcqeujR*SqRyQ&VkdNO=mnqK2fAVw&?VR+HAR#6MbJgv?mKLeyWb!~EkG)`rHHTUf_V zZcuIP$>$9YGum4ZoM99jAZ&VHU*wTpr|2orkdm}SPfCm~Zs?D7P!|(l%YVJWDN-4t zXRzo=4LK0~JFbfjSqRyMkli~QT<-5=amW)5Zit`!TE4Ym$w(OvKM;Dssj+$J2u2*Q zVuBg!*)hq#*iZof^5I|M&W3#VcM90Qiw%Y5@8n%}A!umsUrGuwk@4S5X~ zl+0MW73|i4mlgGgi47?Y7OUr#UF4CjN3^sC1$;qq(P9_j_eCW>WW6(_u?MdF-Z;<`>OgvOKj zpM$ocuSCy$-5J-z*w(Ng)0PkTess{Bp>f4x0@QRhl=XwbVB;{PJ16S-KC52E~A4LGu*+aMxaVoweDwmQ#xd15IN5uQhc!Pk+Dq zNOfZMAq7jp;ylJlC7Ajbx^&XP|ath06`0Lnq0Ao#5p zn{^Xd#xw1?xyiS7y=h^Lsl3|LSh2pQZkeyLqQ<8rRHz-Hw!XH3&Ytdm$hoN8ThrX= zZ0J=rY!UMdOmncPsxzcIJp%)Mo$Xr&)cyovZ&v%Zs(qS!@K@D%E1Pxxn(p2$1J0@~ z-5nwbQ&Z=Afq|t}p)LJ^&hGaVQ}ed&fwn3J5(BWR#8~b|vh$q}Htl8Z5p6YC9?}8BQUtP~u_Ffl9S>#ju zHg|SI0AE`>T$niArDa?EezlL|2YEW%@xsaJ1ow*|M}JSBv$3bYlM}=gk*A|iRlD&X z@vrn%S2k%$;0vhE?zYXU6VX=(RWf<{;e0?PXH}@}y?$k3GnhTi)y+PSZ*4Q=YpQJY zdde#qTT}TiGafUsCf){?Q@c2A%Zz}gzdYZyuv-ZBM#^>{tdD;I6f4xTwFT%?5 z;C*>Ri&l&AxXVE1ONt?>2{>vxlbY zs?|*m>wVQ#o^oG96Xa{E^l0(pRM66+xxC5aE3el0;lH=RQ=#(Ua@E3+X zZ>sQ>d3F0TB<-^1nvICy!s@pE0OxgO_dwq^*u(kj+t$nZpU~J;xvr*RZF7A?g-CC2 zL&KW2jmw&SO*Qqa*?mnjk`<8wL2mYG+s)l9F)eY;LDz<(5_$Z3cU- zDYmRf>HJSwA1VzbUtkMRitVE;(>$Ls#`L zMoV;-)8I%BbC|lSe^%ouW3J&q;+$_&{nW{e^-+IRS8w}+x=;SJb7a^%cjOP*<+6mS zGvyRD>f$-cWeMfB(d5q0!a95_-0$Rm%zch|7yjDRe`DTc=3V$}<+dZ$dLXApY|QY+ z`l(apQGX(y%5B<2O^$tP zK0fkbqrOTbNrd^(PlYz7cGXM!3Hi-B~`e z3-J8qQ~yO6?Q<`NDn%&OWjO!IGc6-s?K~Wdxm**9z8k#rS+HfzFQD=M36udP=BMpS zMNI4`^Fyo-Mg8T*Z-?T=;O+^B)u@U8QWGD^kG-UI!Me~~Y!8BuQMUxd-h2;FSpT1k z|BI-_5}g3mt>`qOXi zox!K(A7j38QpXt=e8Dcx`Z?q3_^WVL`{D5G2%l;{Dq;S4Ny05{Nr~|J=UD~j$25rl z`c>R~Klxn_rZ z+5j6dz(m}Di=QTQ%pfdtaIfSZ2DNbKtqVUg#uXCZ8Ysd4NVpm{uSLcd`ebZg`*chT z7jvi6{1X@j$0f{>g&~k93?s`4)bOY86FSUk?`D-KL3PQGun&r z{F3JrjI@-Ph5-MsXSDrZ0v_w8%{uXh(vNw&=(0v`%rP(t3iG?+z3w{792@lK(&|!u zI;sqd@cNV$y7G>q4G0ADPSrS1U5d8O|KE3WCUGqW_4lE~fjDE%MRlhqt zgX2Hk?`pGV<)J9ixT1v*IBx&qP&v=L<)CAoD`3%gpj(c{p8&*NIZ;<$b-Wrpy-$(e zP3vK1zYF&_rJk~KR&-ANdr_Vd&l2>L;{Kxm=1WD5)Lyf$K>_r;tj|IB(0<%*&d7gE zkCuA$xU-^G(jI%!qer?NF~xMLNAGu>6snjyc(L=xWxw4ubqM7oI`r{i&FD7*Kdu&E zstQz{g;K5i^;%SPC~i${DEe>j@V@N$By@v!%p-pq_B-O~mtVemyc2m8XHotRmpka9 zaJFd5+tbnCFHh_$|5-SJBIgSN+^)U)alBvYTah*)?4g#S;qW}6X#8mz%jaRDu1wF! ze}`*Ymi}t4aOQ@?)^xluf2e|!`EvLrckDugdKHy__bEKT*>Mc(|D3f^ZO~npDjmOn z33L`CjDKbKLugMx{F|Ns$jLWW%m?#ru5E-a=#3TpMJp|ZbM*7|9mnoz&b9y89(3#~ zT$-{Vy{UL~Ilf=jcM857yLnN(`wIj(_YcJ5&d}U+cs=(X+b(>K?Lo(QyRT)ELkRC* z=s@;~^Y1xuxeW9E$viydc8qBbh~>sF>P^km{x=@@)+h7Pl0Zr2O-M^lYtKB*vg9=T zA1)sqpO~h*!}GU5jXD-7AEny7*qonI*DrprGqG!G>~*Yt!?&m(Vp>y};zKYIzqI`# zSZldf1u-KqYlqV;O6eSWvvg|AR66I+=l+#~gv(K~c`p1TewX;}Q6Pu3AYg(1T zeT`fN;*$9(yn9QFpA(!9f7SgA$T>g<2PLxJoA_s=i@7g)V{jUTs+#m; zKGh2z?SPKdS8z|tyN@Vwuh`GyKft<9P@woX^r~J62<0+)&wNGwtI|%4ZQ0{P=m`>0 zvQafK1BuHQ_{>wrTj3g_t&_n2KnYmF-tv7orAYt3(t$|&hvG`PElWa-5`Hs?9u+&p z=GU0HbxfRduBP@bG6k(At`XZX^7pTN`_)hWd9`>M@n1an=W)57g=HJ)OA8J7VvkC0 zscX^zo02ep>@f+Wu4ghPl7E(bu_q-yf9x3vqhOo?#+7BJe-zANY>3)8zqObCSneZc z^7&)WX?)+=GmURt$2fg72dbUl&vZ+{e4TF`ruLG8D-?Biq%H~vYX5}de;;%F+D~8< zEQM{((B=myJ3nX?m_L?vJg>$T4)?_b^NrJhfHnUXqg@wq8)i`VuUf~hMlf}GNW-?3 zzQX!%>sV_9^T*y~jP3l>Wx2zTLnJ=W9u9-kgRxg(P;did<0==Mh}$p1j}c7m=eY6r zkQmbZQ|;J#u|GLd`88Sk&nTw3VKz;^V3!jB=j8;y z(D+iW=-9~!=8ye4{CXPpLc##>XQ zP7_W95mlH98o!P++Q!(Z-@%Tu8Z>t?pN(eLd=gb-p3^?J>{R(l9-e>W*QZ8bFAbEH zSMUl?AU=^B#J}dwJ?4At$63o<_GL8HgCnl+L!89r)o~@}`%}MHoj84dWdn{I^0i|6 z+zP#DoIbaL37VR)hWq80uO9D29{E~Kq*V>l`9H`Q6Jex~Z|V?FF~;2g0UPs|hdqmp z@Pv^#mNELtlx`2!gyx2M1SBG_y+n7)`6luwfc&Y(ylxcw&lSiYq(3;rKR$o0EZQ92 ze*kz!ejr7){RK!&U3KSOezB#WM0J%3h2-afJdt za~n*dD9<9(Z`b2tE*>yPcIzkJQ1q?yKl-=zuha{aU%qFhB63d^B|b+w#VMTw4>^g( z`5%7V(_clzvBA}aTzIXI0lp{7oQZ71I{~siWPSyII%_0} z=1|oBIkT>{eOzm{qIibSV?#e4L*E-|2Jm90e^9bnUldC68`Ygt0qDxujnr}Jlnswj z)xt0KFB0ERjE2cPszi-wEq_xUD|$Lpq+8;S;SqQc!K`<*FNaCaVYv_jEw8T zGVnc?>`%L+{+@Sf#tv8iv@3vHsFc|KKmFU_orqwn_6Si_-ibxL<8F<<$ji)wsSd@D()W z&VQYDWkPs7LhXBnf3N1XM1Wd*#u=tfB>l==QoN~!^DdlzxRp$_3;Nw-kJ(q-JPbtYXvqnU^s>DqWRUy9bIbk9L&GtKsYpy_(v7=HJyX|`Fy zMB+nepR>OB=s^yi6OYA?0H}!UMVR z`~W3RiF2^LCx#L?D(W9Wulu#%3a82t`Zdsuy2bAhSof9*QP8oCy?V|$Tp;-F=o_`z z6W86BG=+mrlt`HPO6=BG^dkG-67ju3t^mvWF+%?fnCG!2^KTKvLPf#Ze*HIuDhrw( z_Kf&<@`lYhU4hcM0S`9hDd{+}IpY^@FVItH?S=9-dZE-X5B#1HCrt1r?nUu##U9NA zh}IiX*d;U3jpiuv&v>Uv|HN40Yl-3r|AIe$mqwq0XTk4W9GMDx7&$MLh;!ah1+=>c zgJ_QtX7qzF+q7_J#0RZu#@QL;W3(caxKpIC(fBx0UfNHI@}k7%PSZs=xEcPJQcUc} zE*gDH^aS7FvJ&&Xc7;Z>bghq{Q$q6);iy|E+B{5V4wVnFPV3gGjmN_7-kW^5Fl8ncAw=E}6&Clesk)o?aO&b75)(9X3b zdX&xYOz(?l#&66dB0~RJy9#EGu+0^>!(b0R?zhzSAw)cO(M4G2@x(^dmDfiiva_6# z-wM=vE)JN}QIeu85bX}w+hG0-ecFCJ_bQROAii@?`wh)3v)s`~(qbHrG%iJHMy){y z#m9I$CUPLu^kY2C6mE}spOv^j6n9-r`(es&#(6{B`@;}%{Q2M@;tw0*kN+3X3T_1Q z#+w(banC0*HtugOM!@`wBmZNX*V^L>thz@j`A)^3Uu|{pwSt)1nqQ1AUc;wu;{FCV1&dFcz7boG2rv3qfD7((*)G6d^tPXPKUr88 zu(o_w8@#n~rgW`@Q)R-Fa_~&F4#_q5X!-y_TH3{xt3T6AD;F{=aHZC~lkqJ8;f zKG(S8?FuH^sQnb*%!4Lp^mR>Lz(!VmF)EQ8pg-j103+T++y|pB;{=FWJ}Uvj>5m(r zwE7?SI=I4PU}cC!n)cHgG*RiX=@km^=r?GtkZ9`gMI4`nXwxeF#cILHN%Bk4M7$c< zg#D~V`p;v1^RGAISQ1jeDFhtHth`|9xb`s2%I10-s?)W5bGhEZfY#j+hbhSDHHmXt zIL4!CYrH%|U6cKqXCa@rNNh;r`VnjYj7Q-A*BopFE)8HD_Z{4DkQeyajvIZ)g3}k`D8|T-=fFvWwIOltoD1KspE^+=bp+dY4mBix{AK6J zd7N1q`B6iP8#{?d{?F;s{s*45@>huV1N~=ooHFpw*Kl8BW!U97k`5FTwkuoSmq(H?zx(^II~g<^F26CNwVqB+O6BQKkn-4{@%agPwa<1SMym7UqrM9#Srcn z{xfU7zZXd4uT;Fzv0gG2SMcxaT6ea%I83i(=R8g5Q}{<|2{7L-?MZjxW#Po*gp~eO)8wHvne4u}2RLJld~$bfK&M=Rd69*;UVc7ucsG)00E%@AFYhcWd=e++X&$({zlv zh?|Hf#}RSCdREJr3O1c3aB`92?6jrwmmucx&W ziR>J+x>KX6V4lxec&lvmTX@tb)|h|J!l}dIi45UDiTR%*JZ-5NEZF?SEZWLrA~bUB zgqj+|(GKlM$MkrHGibJ{+8Y5y;wK(dyUzgIAY;E=A!GIy8H>r6F?*|w{c?$n*~tJ4 z$QaJs%kc=wSWJnG{n935_Ff6|$9^DTs(nDle#vd;>@*!Tz;?(O?zxlQ4$0W_VHvaU zk}&GJAz^AvwT#)hj?b3)q>QCcNZ5O;q{^t8%+FXVRCA8W*Clid1a{Sv0WkozuwtX!`A ze80qOnSb}Vg!y9!B`oOKFJY?PD`PPR_2ZXS5+8sx?R-y7_W%y~h$A`9?{*FZoH*vu zm#V!h58ymd2j1(afO_~~k9C?mKJ8N8)4dhP5X7mWw6*~A@L?J&pNZ(~cD8ksa{%XDe7<*`I=hnE46!=+h>-M3 zNv-ecUi!-4&Am9i)ZQ8D9M}dqHCe=I8!cu!BMx7rm4|TZ20n6tO=?fC+RZk>Yi(BB z`n2%a?yTtS!-1ckzD~GH@pkqPggIxt!OilGTY7~LPVEd7M_{0*qbGzkORI+a?T9zh ztGTzWgT3J68wkEXb)DKb(Ai<|2JXUVnyPyGHn$Ckp!MYIw}#&};&_oJRQPBW#~qm_ z4qSbsVaouYyJ~Ff2;%$_gwcO#bz4FMoyaBU`nGNT&K^Jb#Q`e_mxc_esYe906HArqu6VkF*^Fy(&?rZA}bawPR zb!j7~&X8A#-)8u>Rdq(VkOm!U??8WQ_)Hh)V{@R5ILy_3orGwnHmUC+w{%fwp501= z|02iPUAQdh2f0$~dbafAU>mB$Rum*0w~8F`!q;L42HLc;QKxoq>38~iA}_7J@cFNB z0goJYQ&Lfry5D2rxOD3Wzr=YmsIl~8411S8x2Zoh3fAV5iIZ7f|83;H_2HCTIQL0!f35go=?eqUE>m_+Mdc-w47F|?U~HSU$>NGzA0g<9ndU3HCj$9)h?Gm z>M|(1_Bh$UemNerc0%T}CrFq-HebTje>iS{8RVrsQQ`xjsJ2E4R|jRis{5;6na}2v zu|Wg>qIb!Bwha;%>>83V)z%_m!7d|NS|vW!Mlv=i>p`k5V8B-*W44fl(OQE!0h@t* z(fcL0s%=2V1`A}&HYj1#H7sGOZHI&fyGkWYwGByFuq$7}RGXY{{(m$m)3!a5TUxtU z!c?1#1wF$Cd~#X^J>v#^2PG`%X_PS4c38rKrM(iS+Kw7v!x9!OH45Xn#HZR$N|--Z z9w(@_(-L3MGbCZEZNvZ@lQG|B=9DlpY|FDG zKDAIz7uA*{^V#wYuzU#%cI}rimB0BlJ04woBuur*WrGa;E0Nq%*I@}$2T8_kr4mMK zdnHV@RY;is5ujP|P;J!)m{-Q0%QAy0x*&fkcQ|am2{RUE;nL;0Ss-vuJPm(S*x%Cm zd2)^MVx7MjK56zhbrT1t$@8Xg9}9bt z@E0cDYj#ebHzWRO^1Z3c$EnEv6zcL7>hUZT{>B1-3mlrs{=hE$Wt`KwP?xt*_rFk& zf1&U{2Je@n^a~RK2@@G9OhiDKh=4HRu`nUHFp;41*!_y7%XPCrH{aCFLcxa!>Grpx z3s_o?&s$o0!Q>Q-6(;99+gWawp3{fzod0j>>G+l&zqdp>^7|tAq?ue^*j}icZ|NpJ z3Cp`qGucBlET)honOmxoIPyW3ge&wcGv(rYJd$(n2LL=P{M9rzI@dH7;RP zHzH$e<+){AYtWb0jmd6b%4098J1g_8mGwxfJ8!_p)na!3j>}lkD1R?Yd}{Qdgi+m9 z2@4v`J5b#wS6BtEJ$@Gp4QfbW5X z`RB=FISLy1S2roSRr|TKpPg@yB}~mX;+vBAsP3tR0YLrFmvHq*y%I)sg)-**RL1I7 z$e2$qM^sm0z;{!|>PjU{jW&?Ezfa<$)emK?OZJae%jrt1pU7@kKa;V#3JLSa0-BX~ z{#XWQ=BLW{!p_2|u3Ey>XoIw>^GbYF*C=DY2^p*NNthZfhf8%EBtCy^f`qBjvVT<9 zBJoj|Q5dZ0y3ZPD+%+*nk7t)Zj~^q3(448KvEtV)Q>JXt*CB5a;rug zgi$vr@dXX`ZBU(DUeqNgCAU;JBx7Bz5(XfyzHB`t0j?fvT&i6d7QfEpU0b=ds-fPe%;!7Xv`1yZI@~I^)KgzxjZ4)wAN&GqX2h!) zO85RlO?-tQ{GZ>r*4JG5t+h4v2)Cu>J#`?cVu?$0jkN3aRw^C5q@wma2YOa2@oVZE*4K+`-<0=p zpIS{*Ij)8KO&m0Ww7Ad?A}jN&YMOAnoo96=o*Bn=ca_MwcyDEuudKo6Yp7G=nrc>8 zTVLlXUk_g!@b48K2ebixEoDC= z998uTnkqRJEBIZUr~cjbxakj~Df1&d;Kv1u%PQ-?wYG9?rFdTFX<|olxO}g&2@zv? zININ+toJp&t1MUo2TMgdEP?Dvao!NG{L=xo$qz?)pz}Im4j`(&WxN*l_tHJm{aluC1?A+}en^@TxED?B{&30$kVD z3ridpY{9 zt8P}}aOY)D_coDk^It7bqs;eo^IEHjmykg$p(_jO*LuCq3UzB|hZ^tgc~2}U)^y`G zV=;yjuP-%$fZXbvb3sdqc*2^4tx1Z%KS=G@#jGc<)G< zI=END$a_!1)a6FuPRM+PW(gzj0~uR=SH`@P5~fBcNEmq^OPKnvXC;ihQ!?f=itkec zz9TZ`eI{dFIWp!m=pVcXKxvYlV!}$^NN>g9dyy2~!8VC5-Bv5~fCHNf^}`VFvm8 zlBY*zrF~tVgar-8MPO3M8<2R(8MK<4v|NtpjjBUud6di7Pw zty;KW!pJM@OXM@iWABiG+g%3O9vNGGUB>hgpp5PJ0R~#iBBCIma*kVD!gNYJG-f;u$vWyw*KPB%~na|fNVE`+C{-ZCcytYhKpqY4)*R`i8hBd>P-u>}!ZP1m4Wo zhs$`9*jX6jOXZ>jG2E|hlOXNa9nxUaabt$RybNU=0;X~*We0jPf% zJ-piJl+=JdQ<`2k4aI3az8{aMdEV788HfMLjN?w|hNg-}Px%_?``Z24Nfm7a zZ9)mdW+;`g;|`aWGe2LfT>~u%${O@vD1^{}p*9Ksp*Q=Q8oX8Y)BN|gZEmNwrOmy# zHXN64hd13Nho7`C!nXdT@Dq0UdHUYlA{19nPc2>uuOs-%7svxSvHc7i(}aQ=cHN(} z7T2Eh7BXy+f6wquN2ugc&{Q~ZjK$6xE|W6?cPJc`Y$Q0t2%vw zHZY1^k9cSC_8@6E55xvTKPMDyilttKo{Q~rZJ`j4y22h>X6{1^`>I&NPn!RgTiZfg z5HsZsq0j2u5hJ@Gk)M&63Uxhv&A9SL&byV}GoJouZpZEo)gb#`c*F0~z! zkUtsW3O(Ja4G8M6=ae@-BEH>S;mqO$gig-+{|1+rIxgf*%_!V@X@UPWJhI^2(o&1w2g1eb3FK{l!4n6 z2@7g>ZUGlR5pnX`V40Z)>fk*Iqt%yW%Bk=`;P6;D#o&lCG zV_kq|#m)ca3JD``p^W)tx8yZ&>odu2y(Kc%Wl#>hr3QQkdG4){_|(Ch5=LI5H044* zGk?k3C}HaF%H@T;oCverb{X*br*r8S|)vd}R-R`Nt^wNgP@&uj;t6E!M z?yG62hyNyg$f608bgP>xS2M!=+EmpteCc9sV*=(Br>P-I!gPIx<%_&5Z{SI)gqo&0 z% zFD&or-Nx;prwI!7Roh0S^|7JkqEL)U_eB~ng&FT&Y?CfgtC`7Yw$q;~Z5q21Ot z?kfqpU7tq6_Z);?#4~9tgf;AcT59z(MSqG?j$a-K?_%+JQbUlU3i?>HRU%)uzUD%8XI+jPbFXEJ9yEf0+Z-TRjdN^_fKdwX?1NmExQlsYkEWO=mfh4(?Jb2Qhz*@`hCOwRJ)dhVG`<=hUiDkJcVE zLQNllu8)H;n^lwn#6hd8ub^r9{_3noz4~1oMiP}?ujFa^xCAY3Sh078D|||Q$ao-v zG)vXTDD^%4vqmX+ssF5D_XbQUo{%MKJtq;Y z$VonnrdMO_@S7OyXpK$^w-KH^XIY-$Um0#KP&AYjETFWB2B6J3V`#$fBDFY@@!B|w z<2S3GM>x2gHn#O)01{B~K`d=J(;qojmiB5K5-G7hoyq7OQrpwm=zSMKYCl>vj)z(L zP4Tb+c3j3*$+`>`%esfU%_X}nJ}qObZb+EA%|O>G9+CK{cudCLzAR(KXC+MCW|A=S zgk-Gvyo{}u(?#7DZNPU*#)`*fY_(C`^l@D_8kfn`yknjyvIJs z<=TGPSeU%?Rx`2hlI?GM>~C-yxGQ{ykx`FZ~%^Ygw$HhF@VO|idI zYsz6~*Np4?XkoJdY-fMi)ZFX)WnpLcjI;b~@_ykMn7m&$dbzfbH5MkvgYBC9Y%fq^ zbiFcmIq(1Ec(RFol)}V*O<`jHq%b+%_&ui^o1AVi5uRq}bkp~b!W8>ug~{ol?++Dr zP6urtC%Y5-H-)K%%lkJqTnm?X(rR`sT;37O?#2F2;Z6%zOHbZ4%keJK)1ydF56Fr1 zhylJF0t*ufAxtE&Fp503>7kA;bZ7A6updO7a~*Gx`VwrlxStmjv; zo?pd!eisY*V!_Azd6{1;cWmeQ7cc#$$OksVc1{nrb9%7J>A@za2b-K8FcH3HUjg|b z7vejQO=PTY76=>y>-IOJc~i8In?q;$c{j0UYUPb{@;JrjU>K<+Fd{M{r4nb3xG{e15bL*F+ZLezQV+OQsOt?kY?KnL$Y)3n&F- z1=&CjkQ3wrWr5tF9MBR_9%vZ|chnaafC@oHpcSB%pc2qKpi)p7r~*_4ss`19yr6ne zBd7`F1FZvX0O9*Ig)N{>pjHrWb}S^29~1y}fkL2eP%o$tGyvKP!Z+Cqw}W(9p#9}TT4KBpk<(ZPywhAR0LW9S_vuvy#p!*m4PZiRiJ86EyxS12Q`9x zpmm@Ppl;AcPzz`is1?)>B9I>x0Cj;vpk7cPXaKYuv=uZ6+78+Q`T#Tp+6meP+5`F! zv=?+7v=6i&bO3Y^bO>}9bOdx1^bu$nbPRL?bP{w5bRKjXbOtm68U>AkJ_VfxodaC} zje{OBfYR$(Sca#)_UwnEGor38SKC5~lu0E=N@KLgEVs4f2RJ zz1ij0lOr=PklVBpp%Vd}O` z5=N_sWUSaAtyUSN^QyxJZgXU8)v$~e=gHXHCuOWy&JX{@9Rt2X8CzxK-wKHj0P26Q zgsa=GNf@m*Nb4fGz6OIgB)2N`L#bRA4a(T+ZW()9mXC^z>hO@{R^2AA*Q?vkN_f{g0M#TIH0nqBsN0 zARSia$b75YWvnPs!qja~C5%?(%UDs8gav~W5~gl@Bw4`i&URmR>nstY9XsoQQ# z7!?I%Y?VP86v^dJ&6nF$c&4a3ugZSr9+xn6(xA-bo|O0~_q2?aj>}l?h=c`u6D5pt z$7F1^L3ztPYrtnPUe7%*^Q{6jyC0b>kTA*}m$6lGGWJqVf6Bcq^Q|_>yIh0(c-tns z&AldLZ!eLt+#51hYT!2amc%EfUS_2WJ}NxeIaA35@n31 zF=mIcDn-Hoa3=9DS2HAgjaPfIpr1-Q7Iw_~U&+z3n&wx$Tv| zv;F_J&fnYK+lEad%5UiQrMkJkx?w4w^L6U><$2gRgWvMJa$$z$MEEOwJ-telzKj8r z>nq!NxrWU`Ve;Y%+j((CGqv~Hbwi9}5*+Wf>x9_U__XVU*sl4bT_dE#==*%4wB=BI zOKmOa_7@oUSPY!{gUQw+{wa#>`Ym#36y_>-@jEa*IJ)yKY*{#fm}tP-UyC$g!@ zr7f>1QGD4FelWH8Xv=GC*W!caCGlQc#!{lRWh^#@d@)$YVh-2^zp%qc*fn{zWi7UA z@@mUkN|d$?#ika%w*16)E#BJl6WcX^wB;uy=9^-9Pcz|C*de(v;Zm58M3`_1_aao`SHQno za&PjIdqq9DYfDW(N^GJfJALGCSx4@QYI6HF(&9%gtAhCXsz1|auVa`y&I4L{jV?%g}U_W^i%$-R9ixp(ZMC63+X9vUQf z>xX!^m)r;TnKCDa$i4pnxwjr9_s&C*dk>{XA0hXrN6EeCBXS?vPbpK!$bIEFxeuOz ztcS^c>=e0=pEmu$wlm~DISkoH$$e^!+#{dT66GYh_nw0v=gEEM0=dtPAdN1Od+ai~ z$FD%{v*bSXIi)A=_OLccNdA`|b^Le{`SRS09l3 z)%U`zUmNV@81L2k5Kl3qm+I4BU*fEKV=Udqm+BcDf`d~%070O zvQM2tI-REM-DfEK=rH^nrRy$9cHHb&)m;v7o18m3u+hu_5k+G5~2~#KKu`lKBmH7MQ(duoF7*E{^#7?v$KcO#aveN@cKk58(Eq!RpGIGOhFs|XQ#Xx5 zw-_VWxlhS;{v`Z52mbTqI(30u`$s6X?-IGrTt?r0gNxt) zn@FEq`1n0?-T#7I*Kff8`|$4pxo)8U&$&aXyB|@8=`p$Pd_}HD z6Y&2D(&j0-(En#7Op@!tbEM4+@V+G1vng`%T$K3f`R|HX%=;54(`+K=*Es#U-b~pK zlgRlD{l6~`{j(L^Hp+~1P$u#}6Z+qR;VjC`)ABzvX$ko9D6?Q0IWIWjzQCl+FN7N{ z|1(#tq)ZF)Kj$6FT$vBNj4}%=D6_PR7H?Vsdo9RIneWt7W^E~+n<&%oqs)qRrug5g zrp%^|l<8|RDJ7dIb3-F74zyF|MxxAC^#6SuC^NqcIzxyuH+55HS1V=q_0i%T1C&|6 zl``?MJVn_~na&-M`2)%v?1g+gf$aj%Zps`QgwBWjKeCrHk^h;2AKh99*sbR`IIZCOfG0Hp+ z{jc#PWsaVs%(3&dgf37f`v1(!muSi0Wy(bVpLyaeWYPNn%yZXi$)R!7wVRar#VyK2 z|DSpDD&F4(-J?wO|C!DklsR&rGOs_N%#R*Y=KVXs9-+KErp%{bQRck~%6$BU7Vmya znXLakoP>YR5%(A5vLOHCrzmq0-ie={|C#ZyCD7tLS0c|! z$O-+=S&&ao*8hqs$O-+=S)}DZ>wiw@e~U{?5k?d0jE|hC|IVgra<*(l_$}n5P2_Yp zlGED`J|btApE90r0Dl)bx9auZ*9y0N$m0QWwr(Y7Ux1vA+aco)a)v$te=j+q|2uc= zf~>pA3H{&sA@YC6UUK^Pp&SpvzXRmlc@T0RBIo`+@aqUU4;(dlGCv~c;r)oqF>)R` zPEO?i;@ZPVi&NwrJ5A1y&X5!NzZmu3d3=nV(Epu-$p2^O$a&&CIideMk^c*ZFOhS@ zWpa*R0qo=|%HQ*usxP0lBis6){I0xu{t;UzgAPm%Kl zyb?b>|DExadL)4|5>1G!LaqyDa-se^o@?X34CwzENj9XHgEFB1r|x!9hBb>E2i%n5 zOreaTC6wXHGyO~5GRnwtBCG<+SW-wC`9+lVJO_TRq|`Gdl(Fm`%2=6C8D+@-=nBe+ ztD=lTjQ@_*lH-vV=~7P_)urHXf^^XTqt{Ue^#81qjVPNfl!5VIhQASh3H_fkn*89~ zKp88#C}UlSGB$Km2I_xSNgrkG8=wr@3Yi0x(YKv426jL`Dry0kZ~7fp#9I- zK1dn6kpHH=l!5x6@xc(n$N2B-gOo9Z_CIA0WuX4MJ~&DlsQ(#y{a-MAoH9}RFtQMmv6yodVq1!W-r7YFWB#@z>$G4YTV zyF~s&j>nYo#aEPp_CMn+>VMu-lzFuO4<;$&<#WnF{a-Nrk}}Z#XYepX{Pg_KK>pVz zki((nfBKY}(w`+!dY^?HiE#+eN)EG)92oy+jU`h0gbS{b{}wknF#gZFu!J18JaXhL z1MY-hTL15G7m*__2jQ-y^y?+$Sn&>c^Io5cf*hr_aN{LMNj+svm6D^j zi5%hp_BwJP{~f6RS@&AV(Y^_8SQ%<34Bg4m8cz_&52O;Mn za$x-D@T33lV}c8W_W61jzIWYdSo1P%dr{MXT92ozl`ks^H z$qSUxm*hbHi|;&wBQpQvh$kE7f1Ec&{sT9Y^Q$DXO`HF*joK)k^M5Dme~}Au&H|sC z(vklQhL=!!Q68mZ{wM2{lhV=tr|a`S>G?V2Oj(I^D53PSci=Xk(o4(Wwt~_Ns>n7f z+J8#N{7*XC|Mc2YU`6rh?+S@|usQ>BO{10>>qIAsvr0erPiV~u% zL*0~)`JZ&m|D@~lKk2;zgteX0_w9iB0eE^T9qoTQ=6|v-?51?I|EZg_{7*ly5AhnJ z^j7r$^AA!w`v0tZdng_CKYi;_N=N-qKe8YGX!>6|^uKh=VM>Somk#|e-ExM~q5mxo zj8Z!0f6~$ZXAPf3{LfMP<@1z|_CFo@pLOaIrDOgl9qoVm{Q~Oqu zt*Qhez5~8|vaKv5TS*1V67s)v1=%dMc;_WsSv}k#|55*KUfeDbzm9C0{!g}|7VvLE z{xy{Ve2x;Rd8}xs!|5+D8Wb5mO46O*akL>FP$kx6U=@TGZ?{@I)AY0%AvTg4r z+s>V+8$7VwO}2qSm>-g@X)nUwN47mfWc%m<**-i7`ysNS{x1$3Asgm@Y?%Ma>fVnq zj-k&wPPRiQ$cFhJ8|Htq?wuyv;2E+V9fp6SWGm3-e{7il;rh?>KUw!KknQXUo-ZLD zm&peG&vyMR{Q4YzUL%`6|6?1ziSl=gY|#H~nE$cexl6VS_s9nQFYDe7vSI$mcJBeg zct|#}IqVVH?mve8E3zT~)8f(o2T=b9za|^%zYX(0Svy})dfZE-%M_)tN+*7L{@dco z`XT{{iSX?za@;Ya4@Le%|8qQyL;hMJpN;JC4pUw~>i;Ge+26?`d!n1{(EptOv;;hP zWG`Gsb{q0PuYj_03dz2*i0tkh_`4ERLU!o?S`^S}1|Dzc;fPu*0DJoA#> zSC4Q?$zIX~J|EdPt|RNiYP{P>j(1w%$0n4CMzU{c7xmxX=qG!-rvKSnLSzqgL+)0x z_iFQhcK=qg_i6RtzHbNFLmxoaUb3V9+gblB*-duT|E#JH$-Wc$zh@t1HER8T>Tcx! z?n7ihu!rnNj!@RdqhxRWi0pes{YTw64!KT{9qqrOXzhR2#xrC;ISl(K@@b6h82{NX zoP@rlwg2{07vOG$?E5bve=n1LR_K4$6=jsVzk;lVRg~peLDsTbvQ~H@Q9W6!OUdd({+Ia3%K2YZ4fh+#`aug> zYd1kg=zmAr$-0Bciu|{>Z!lFHMg6Y|k#(S(tSzl%4fRnL=6|i*x02N_@*jThAS>#> z6(4}Y_>Zic(EdaJPdze7*4_`vx@<4x-bdCwTK=bfz!Nryz_W*}2ab^S;8B#xkH`xB zKlR8lygN?TQzyuJM$7-C^{2^tc}^9Ar5WSzKA z){zHfy^Z!C^Zz{mYyI#sStq{&?*!ua1m)`~c)up=lS#5ZdrsDSFUb1%CCc#>S)b#T z`04p?MgM<8%>N*-6|%fAlcg^S{#qyv?SEPd+W!|exNso6L`t)|D9x5dsT0V5=>KT{ z@h*?jF#bEl0ML21bU zvfDm62{ zR5~bQxhWE+PI8wy%WbYr!qmxO38P%6gavyWC5&>jBut$=Bw>`BBVp=E*V?>j*R6N%GgTo4ra?D=dU`+!`j(=B@zZ8{L|b2w0KJXI>9thW+Ds9 z9MAt+;*(5oHCxDn_CJZNWP$!~!T2w!F%fn#{v!*<{}vZ#?h;Dc$ceLzEYSawHWpCw zO-=u|VErHSKX_LH{2j8a;KV62DNz+H1-?POU=WLf7Yi?08ro(Yj#(dmwN34Sev4 z@_Djcx&WPXge;iIgXMOt(4@jDbcqal$?EP6k6SB?^MTg(6CC0yY1DcN79 zyuP4Gf)^@cU3khalU5_wCOQQZn*C8T$Y0)khGAqm;b& zBk=5}WX%60A3Y9PPf)U^|5Ng@(~$EFC1d=bd|{N5PmQ5IeM-s5|0Fs`$)o2f`RoNs zDj9(vmq3>(`O_efR*R_sQd#_XS`Ei7QladE-LFU_(eBi;m{MCI*8hk*>=>OBV-g)0~{1LFnlzjIq@J%56C(4q2PbnGwe=_EOmATI;dGZCl z9{-Y(G5?#4bHF)6V4c-gtmfsMS=h=CWGu&^EnCUSH_L6#9vLe+EMqwaZdd0S@a>l{ z^&dY-fEmal)c4u(I4ZeSasFS9@34%OoRqPg<1)7Lh>YdPZqXZ3$E=!m? zIVE9~b5+9B$%hg~IoD)tb%BhP$o^5z4VkaBRl-!<{UGH>&MgU3Q{}W*C+|solygVI z)Ja))08{w4^%*~*VNe|JCeZ5>V*Zz2$Nc~6&yw)QLgvIcywm1?%w{YQ%t<6O#(!p8 zmMM0Po6JtE|CKDE*PiB)8S_78my^sG|E=pTBs1oJ%$Wa)It1Ni9Jfn-6LeaaujXuN84MD>?iY{ zV`T0-Zo2*3C&)Z}n9SEtks0m(UpzfSX0-o{{G(((HHLQoQ!=CdH)H&7K6;+aqiFx* zN63uvzZv6yW$qO+WBhME^Eu*wjm)>MlljuPnsEd3e{*k<`HQP$uFl8Q=v~PD1(|W* zgZUvBE^Yj0esqV-Hxd=||EtpA(uAOq(nDyA;j6P}V8?Z5fSBgpj}vb>;V%>S7& zH)MYC|Fic#P*G)fzV9jJPe~Vt;*U0=Z9)^rFhmJMJ3itNS4ks-ghmEwn;2r#?p=sT zN}5JP6Jnn+F5+{1c7=Eyuj6xAwnGeYOvM-%;}|8h<06JJ#2A|xL;^@7(sZ>!M0DVN z_NhYc*vXo?_s+bx-nwV;WAEQ@fA??iv;Y3~KKqW=zfkPa?GM)LeuznZEg?qmM1$RS6$GJMFPCH`%` zme^k)BYFNCnV*I3HG~z($egvfc`}my-^e0KTP%^0#f93l8D%nZT{-!r{!5ExUURvF%2LEg5}CbrASEp;+-TQxd&%J3`Hf9Y-+S!=-8 z%gEF{4+bjirJZpx=aMt1gc-l1Pcb_~c!p8rP<50Tel896$lJ$H!369|BtL6L^eUYcpxL#|BtY#L6P%+h5WY|vRrY#Nx@m_n)W`D@eLD&`%1qO z`EcTQim@2!?QWah_=Wtrv}YDm+>_oos6Fv>$uSyi6Wr+9Ul9%p^awD+M*Cd_+M zwxmGGNaM&OTw1YD_Db|anX}Y)AF{gVG1(a(?#qscGMQHDlR4cFWzNzzpX?1K^5w5& zJ>j;$GX;-imC9>~fAc80c^}eYdRychai&N8D_O6av8ClJ{g3h|9X3-Yt6OmWX_T1r z4fodbP$nHJ4)<&RR)#-~CF^{$S5-Mqr)!oKaVs9mO4etaxb&axc_?#!TE+Qj*~>H) z=c6*`nuaH3pV{@KY!Ra0i!0NrpO9^=X!#hK=LwliD1K75r}KXwm+)l%oNx7f46f=)nIrj0S;CX$Cmm@Y zgR6Z~mgas!hG6>gjsN8vLS)!6n-=gZU52|E{})Hdum@3q=186OpU(bo*n_!Jx5div zV|J-C|Lg4kh8>$P^|)x(dx=tyU%-5uB=v+i)`uzJ7BR*zmO9V>bo&y<&NQiW{y*Sy zGHb$g)>9c$=lO5=P%7!DhM6OEp8x9E4#w7esb>^OJ#RH@p)A&iYowmVfSiu z|Ar=U{?D=<-E~s0s%GrmDZ|EhNqxs|O5JmWdGr){IxY2cXQY1IBlXj*GW_s4 zsq_3#KWVQ2$}5@w_2!G@sfG34C8;-FrVOuezim=)xhnO#F7nwe_0A5~d%aTcP=oLQ zm`1qhQfK_vdj=uKf6D_I$@m{?^-6t+;QxL7?-I~z##JH6 zh!7cGi_I8;_lkief;Ju{ZDZ#7FL?U@(z!B>^PgcccKCQ1mP`MSny;(#zhUu-GHl)g z{h6O7$*_btea=k!f88P(mbO@iB__zQMfCr*X)=uSA7M$!GAuS-i#U@Z!?6FuOHoc{{r{Fi$E6UP2uSnM_#RW*e-Ydf^cYxoog={$>!*(B(Vc7rSwTEOF=Rd<58cA!P zHuFrA4BL8Ch8;X6LvtF)`*9hTcS447{v*8h2>Ck&?lgHhBg0O4w8%}ZGHlK{8Fu14 z{jynxwO){6=ajK@QHHg(fWIWeS}x153s=Zahn=o^z^1B0aPJO8O;|A*bC{}&TvUQS>A&k2#C zYi%-gl<|MDx&MoO93?{^%#k+6|ImUMX|v6hw&+;aU3T;6*0dt(CT{t$NbCmD0xg&&Kor1rv4BX4FuQJEe{1 z|29?k4!5+2XkwyakF@dZ&sN_c?i@NmJ@knC=?A54S3UQ6NZJw)OIyP}*j`Hd{imhvm`B=9(SLH_yU$6Rs(g)7L*ZIET4u>T*lOV@&T%TU@t=(c*+S9{p^-z!5||Ap?{&$$!Yz*7fh zDC@t_`a`;AJFIJ=jWU$=f9U=uUDJ>1S{VJG^?&H00F!hGkyt?d6< zQxcH*_J6GlmWujq$U7^C9H<{wbIJ@ zFKbPOs2|uStySBl)u0wIj3{4 z3Zs0W9J_N)2l9pk%tuYq8g)!skH8;lq|A;>YvT#9CkZ=(y>yB=r{T|FD|xVuT4nIu zbJ#lPrS)>N4BoG78fCY*v0EP5EY{I0&gVSXgWXrjV;62W_i`DxmwW8T9pK(Oafc|Q zVcZeQt_OFJGB>bG?AR{k>9%i=IN0j5J*=kHN0zj;rcc^JI}^xB7*i1 zMfe;!iw5yrc8r`AGnaWd7Q5OmXT`@u^9Y~My+&h;Ct@Ejz@LOI90x81{~|dnmiph3 zfW3?TH*U`V*r&;qM>=scz+}o=P8QkFXklmYh|v z2EK@WgFHDa*DYtc>{?KO_F7t13HDAQy3F~XwXw zssOi*HU4%vYqE~`)!=tRyU6!$!VK2m^>WsZJ>+jM@*U{e&zk!H>*|Bpwxr*92<%}w z>r5m5eR7uDkh8k%^cTwR2>u7qCCZ8KFVFJC$y2fL7w|VbO1@v(Ag!MB#5a&5YdwR% zowV?uzKBiLg1vQ_yfsiJZP;AMPog^&w--9zfeqG=4*KW+F(7A6bYqJR6R&}97`{93LcgD5B=Rw)3|F4xn z$@udfq_s{4@%%rixP*RCh^{ii%W++}#mMZku0eC2ShodisSK*Fl|gHXTd@^P6@6$M zxb3)gGKl^En74PzpekSg52`ib>*;TMWRQC=?hg3<;19^4-3M{qTI6?p=RblkHB#Q} z|93SZKPrPS9Fsv!4XV$}pjNjQe6&ScBXGZG=10ytX2_tE9#J3LDh^ejBhDEabhrio z1*lyHU2dUH4Ciz1OJFX`psVzMcN<|>!FI`@wr(v#bP(1H-!FsM{}1ZzL^cFJEQ7jw zM14X7_)(u8V+{WwG=cnq4Adu`&lz4B^nhUVs`k~t*=Jf|PQ30y&Gj2SX!+2nm z!7(w6Lvs2h7Rg}7|KP<5V3#lkJlX%7 zx-w;OW~vOaPzG;xbHA$pH$sLuq}Kn9O~{VY2dV#a4fNmR=srQ; zJxO0Zg8vkK^fcjTXd50dt+#`d#ZX+9&!R-G9Um0Xhn1FvE zgKU$8d*Mmeyj;He4-Aok6E;zwsmlPXMtg~%O-0Fom^t9B$YXHl$^hQ~j1YEFpBE2i z9Wt9 zeDi-mnnTpDQSG#WdP^D0@gAAuQB_-3@CD; zt5^o`{5PPy3O{4NTj^5+p5c7j*oxmg|BZh;{yG_8RO9YM-!2)jZ8vyB2JrolfL(it zzgGq@|6AQ=|A%*L;s2)_Ji4+D9e; zEdvfjI5RF3N!B7Hot|HD9`YSqAX_pQX4Bd*Q0{X?qu# z4jIs)*82v2-&`Kht@Z;n8PGdS`yN5w37Px9^xZKT;2olUPB1?|kd}~1Y&S2ufSA`N zU;PJ#khYC{>N3#EI5`#}gLwWQA?C zk_=3UM{|k{Ok4zZu?$T1)qjLYlY#92N4-q_r}*kWFeMY6*ner+#LXehAp=uYd&-9j zWMEMix)=|$)_^IJf$P@de^md0c_qZB{?mN*AISb+U|BITpZyoeyWg{IkLv%qWV8O! zz0LVt@^%?$)Dixu{sXt}mVrABWcBFSLw@$k!0kKmtNM5ItC$|*8szD)nXhMdG{WzL znw-z6&&XW1Do5en()H;o ze(SQz{B3RZ^O_6dUf&ew;?K!XU-G+xmHeFOtNbv%`hih7Bbr~{i!*v`rSuU zyX*Hg`hFAAmneI7&Pst!eu`bC^1Aus?QySH@Qbo>VsoYXnZxoolm_yvTBpX(DLTKh zjvtaVbHmSAZrQMjpFMwAl#gprcz=FeuYSc$K;4>OFIBjHJz4cBuT)@lmGo%pcODhc zcN6}yosPv%m&R38ZW8={yor}Hdlde&aia89*ZS$G)9BUw4rbiuD!NjQ`FruIf93rV z{1bUv__d5xU-)_&DV8}!mA^MWpY-Q+$k!_EXlP0^xzvM?C}<| z_ln`Fm9wYo(zQ<&6StE6+$zo1w1qucHtcc?S9Pkg0k(?2>8Pm9-C^2)@O4lPWVo~r z12^yMKli#hqHKI6B*E@n;NgCEL;Ik5_t$?u*z%R95)6p-*pHAMgm&>fxJ1RZ69>LA zSqmhbOEL{hZL~p)_>v*DbF7ath{rlg^Hyy9O_tHd||2ZTt=0QMhG(JfXDTRlPs3`b!%VE-SqVxPo-Weq4}rNwT?Mvs@4 zdGnz8(h?mlEvbpv<_oaLldwVJz@}hRFTyTgj4hpjO}+$NnzW=XC5-j|2kF@78Pc*l z6I?2`c{ctW;^q?WfPD2ov(fkbKbG&mS#pa=-}n4K_V7AsDWs|GF2O!3gvy|D^6P?% zp-QmSzjceWjFw`L*Py=^dwi>w*j<5t8}|5i!s}?#)nIl)yGVC8WN<(A(z10AI`&G7 zdk6N?ex9=&K(AX`_Bo_QJ;PDm<|uZcau3_ZA&Gk&I=GJ@wfAG-oOZsKO`;n!{m1ax%vDLm7|1>NlVWl?gV>H55zZ?PGVbn#W%XO@TX4v$tKPDbn1Fd z+Pxu~Yx9s|;~ueAWbNjCqO0kq^=o|#q|0A(Ktiz zoGs@6-SXfYy3M_EfH*B9h^;_mnU-PxSntQDm(T%Ki0ROj9Q;zP-2 zeK5E8z}cLY`ZVqn3Res6p=djq57-?Vq*bL~dc}U$v69D(C z`?6zXl&6q{+rPJN#)(+R#${pp6XIZ>SmUC8N~xdy+EU6ZKr7Znk5{u>BQ)*V!&=q4 zJgu@z5le_?ZfVuFC>2Lt#>dn_3w5KyeAlBoQ~YD)zwt(yxBds(FE(kFKWh$uZidQy z^iL_^XKtDK4!5YHNAyow>b3-B`TA^!s-?QKpps%rS3E_Q(pH3MmDd7RtXJ7HBd!1* z{?(rbt+8zU_2U&2V`47(l+O$TR@rqXN7d+C{se

a(=XUygr8IYn(IS9D2fUh|Zu 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%0AL=%S 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 z1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc z7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf( zSik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?D zU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPq zfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b z0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q? zEMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}n zuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQ zzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI z0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51< z1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc z7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf( zSik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?D zU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPq zfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b z0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q? zEMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}n zuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQ zzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI z0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51< z1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc z7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf( zSik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?D zU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPq zfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b z0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q? zEMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}n zuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQ zzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI z0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51< z1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc z7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf( zSik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?D zU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPq zfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b z0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q? zEMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}n zuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQ zzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI z0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51< z1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc z7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf( zSik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?D zU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPq zfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b z0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q? zEMNf(Sik}nuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}n zuz&?DU;ztQzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQ zzycPqfCVgI0Sj2b0v51<1uS3z3s}Gc7O;Q?EMNf(Sik}nuz&?DU;ztQzycPqfCVgI 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 &J$zAlCw?p3h?Y^RP4To`_c#31y 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

6MYxQpwC-NT_RFeL9$yV4iz0HE&hdUcv_h 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 z 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

g;3M-e=l>25 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�!%iC$sZ!{?X&pGcyev~(c@HZpd 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

tAG4K=PRD(C0_rEcYc*kGt@T?0`V2;UTgRY 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%0D(U4n;J^EB`62U3pU4 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

$BV}+I&cMe9)g%)+BtE@$;;7j_^%+ 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%0A0`cqouD}_-l{RMDkQPM-6*JEeR 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

c5&Qi<-pM#CJOhq4LEvl zqHv!r0FHPOg?sZna1-NjXMvj*i#yea8SnpMxb~)c`T!`}o<96F^lI-eR63TtC~&6) zt`oS|7|#DahrsOw?gXcMvtQtPfqPHT(Y%$?>sS0sh6y_C)gj!!^#Yf}ai?BmIDeV~ z+&F>j<+xP5cT1)T+y_}9gd;_5N9@Q0RN1n}8{LaOk?#-iw!_6*%I|Lve z*E10J_SAv6H(wZtdwcvq+kB;Y@!i;M zG)mI({&IXf+VWL~YrieP==}Gsr#!&tor?dPLqxt-#I?o6-N@-)XJ}4$Y8%7(&+b;* zryu0$jk6Js5#f)ZV|m2lE`zN5b)ZKVyBNQ#;Zd!5yZ@xOe2jUig{0 zL;-a1_w{WT9^>f#(mxP)zMdTD0?#fU_k0a-aqs`z3qc_2=3mImcN*`~vt-x7E|G5o z0PsrNOh``mHu25Se`}pJ3g=)r%||Fs=PzbsG(-4~KO^!m0*se!on0|RjvE)(~{_m zrI87J(jUBv@63Ao(`9F#wA@D9>zT1ozmPenYhZ4U$axg}9MKOP9nlXw9nlZ-FJ%$s zm;Q{jhx%jlTX9U}=aKn&Sbm=P{C0gQe^vwXdmQqj-t85oWAQ?f-#VG!I+owMxcso) z`3vhOGZOXV`-O2{*!f20ub%dc4-3$?-8cbxWDK4m;mpcAFg^Kj>QLHa8zA+ecr@-0VBbD`;0q z>U~x4|F1pQ6$s0OrT;apAAE~yzbl>}g)-qF)1>SNms;epPYK!BJB>F&dIBRyUBhNQ z%$$B5qc=5e^?-Vc{F(hXEh4tT3wGA0i^}TjtSdTTeI8c z6;?79hxIzjN;V0+ymz^19lkl*AUoF3h|xmrjI~*2^1+H(#Oex;*Gr>&*eUp6gi=73 zDAqQz%7K9a9cTml2#;8RCYvEBZg*X zV?nFQyjVD`h8g0Eyh^z}0nArmSF^ksJ3TzpE16*dw+xvy?i-giFDNe1&zOOM!Favo zUp0S=$z}(=En*4+UZZYpu4X?OkF0xWxh9l(zO}GC0C!02gd1VAH~T9c>OELyxG< z5V6IKDf1Ts+OF7OZ5I=lbfmT`b|}$yW$Iz{pzX58!Fh3Tq;V-g+ch;V+!hBr;^3M% zxFHT+7zexJU|$@}Dzyu^S!J$&eN9j`- z4w7Na#pyXpdupm3HmK3t#;kdx>XtfNh22n_)!Ez*lTjGx6<4-b=39$h%|3kmtrI5| zT1)ApRJRJd-Bwu3$O3qAb4%+eYawhtXYju_#pI0l=_%h=pI=@fnGM`zEySt!aT)ro z{{{Jp`VGuYDI-&6*qAZHP7fUcmd`|>7TD}sm$Z5yG{HU=_M`a3ki921jkUp6*waei z+-CnOd=Y$Yuoh$czUTwL)YF15JFGh~^kXMxM_cof=HL0go zLXwlYac+vN$x_-2-Yth+HCgoK3!t9Hs=)juKi~LCTg@{1nO$U?AFDFmOy^XX2V8FBr`jOP{DP~gj>GL_v zk8t^Zx65WU^w{7>?(?gvTQJukDr2g)kS9dpR%cIx*lhbQ9ayO?a4oOc)wR>7yY zfgE`!!-aP$`Mt#?53{f=mA2t0KI^EC@wBa`N>^3-d1yC^^U#V&=N2`;{KM2a$=hgB zlXy`m7~mTlCnJ-qF$a!Cb{OUxjoXol>FG*i);dfvU$MQOanJ@Q=i0{&Rfb9fCSs<; zm4+&}xjOmfvaRJ6qxY|`aAh@Omf90wS`W%mT>N}2_~E$m9>om*XqsLgJ{k4>!Da`4 z?8G1P*_8TGFoXTR?wn)`)1g6Hk#n7^(-oY|)ghr-tn^TxIE>^39exX6&p5z~XRR=l zv(lAUxXqQxaP#M8niPvH4eekvU|O2p+41pCav!2!S_(OKSFWc&CMWYp&ZgXKmc78x zlpLxyHc7AQP3Z=>QdiT_HklzX#((UHnhE}-EI^|VcB{#1>hiY<-pb*Os){mlX>2+i zRT7@H4f-52?IXM{leY8emzKGaom(en{`0p~8aiE=@Gn3~sBv86iqS-ka-bJ;^1=T^ zPdkB2EnpLK^qs0;22t)-EohyriYhgkytGsQ(Q(v?VvEG}6KJo;PblVuX#EnO%xjYt z0XeU}$2OZhrzJT<>?FfO;G5R?VU!BtR`?QyKIoy$Dk!14oODv4_E53_jG%t}1)RqF z(2fBrhF8;*qa2LO`Mr{R&Hu^#-gwQvbUD2rmL0qfnd8(lBl+BR9wwz&@H{Ix9bu^J z0g|&x3o&NlKwZGz*O)TkM|$(<5883G8|g;J_Y)59HNMfGI`J1cS|ZnRw0=i8YZQ(i zfh$-Uh4XM+)zk>?vwnuV)f0vLl*Sjty*WQZcbvk3+q^IeXCqvvws~_D&OtcjyE6*c zAaF;ba4y0jZm*8>zki6H*`-bTFo_G(RK z_VzKt_1?N-J$_}rQRz+H#^e5#@rq~^ZR!b*d%H)`Zaph-e2qqXdpB_BIqtS}PWP9M zfJMHy`8n>5a0EBwEsp!-jR?-MS;Xy);MDs#?sR7aH`^xSQr{JMG>Ec%k{-b|{anOt zkKh)5z;OO?z6h?hh~a?1{%h8D{o2pzofo`0l?peQ^nS7{k^X8sb^=Fvv5VtQ;XLlg zpeK#S?Fe8#@-v3kGzQ>~0w>z(jZ%T@0Z#D$4bmqY zY^#5G9JoL8xI2yr+%c@VFA%ssfkS#r77N@Nf$IhCPJz2fxL)mu4ZpI!<2mk;0O;0m zx>M5#M>KSC+@tguhdbpMh-a_zdFTr$i{=I(`I9=ipIIKZGc7#(& zy7O3{dF-uN+^NOj^J@&}Z(S$KX9Wyi?cA&QTgM3;s~d3hftxOH>|F=00k~?8`y^S! ztp`r5ZGOVm(t5Ss{Rk8FINv~YSjRj9I>Gx(^nS$g<@{y%cj(iBbcb>W;x3&cT)*~e zJ$@zc7ZR>l`@v59N?a!%3D=8Xfjd+}ID+Zob-S32M?>$F4U;3dJ?jbAslC-3!9BW} zp4rtd-s`sdR{`tku?KBWFX1}1{GIrfW$DEuaJz}O5_gPny;}Z}2=3D^jvL<_!ChqI z7`|tOl5zX-h`0rL5!|Pn2-m6o&=tWw8Wwal5!|OMIUTPK=fQFML3*3V>vVX)dFI06 zn%irS5Pl-13zFf|9=oo-iX38&7>n(mwea3jz?AD_hski*y(3th?=Fx8GlS}ASU)eG zo%cQ*=c&V=(2QDP_?|5D7Y6tvc&L8jB0rCvolnWU)g+5>X@}196Nym$M7Xs7k2=5G zUShY`4j19l-XHa;pD8O(h4{K_yo>fxdY$s)e2f3l1(`B#IT%JBF@8+NO3{y5H` zubGRsE32uQQH%P;mtUqQYsmQ-MX&GY!1>`wU^v?dB1;cglte;6!NNBdw_ zOu8F(P$qm}j$o}yXO-6#&<>Chq>dRsu~}LFA0n5t3fEFKZ9#Uvvy5$}7V~`ZymR?Zudeow@bOaOQ`I(&QdXalX6^ zXIoj4Wqi>9QSqr~D^cZRJ4Vn2{^$A<9Dv_{W7qTWlkLEIbRwOX{20b@GN}}of9Y3z z&Kv|QoT4|>g^92W8kFxg<6$XNr9cehA?XOoppbNgWMEnip^b-NR^OCGA(;rt3X$lM zcU@C9c{R@#Ud^+GSMzM?)jV6Cv6s!y*vr_aW~=EqG)v8*r%arirDj`1b>SDW1pFvf zO27~3BdoB$AVsu(`P+Ob&$FZGBtSfLUFuoeOpEnn6oGkm%1djTUjim!IAJjTe`V_a zwaxoMyrmSFL>HW1|3mZ3OAioc8pFT^_CGYgvJ^H0+LnpHfIG>ksfB8qjG9`A2V3%Z zNGd|oDI^sk>7;ZRvy6viAS9DQG7yqU+}TodT~ih@M$IaNiHDk14hxUUht;eKn0Qp< zw+d&7sg`YOmYPf)NvEe&;z%YvWnjv$GDQUVQVPCoQe5E62;$2Y$j8^|Y=OPtN|f;{ z^H)!4{b%}#GFCC5q|o0y>yH!?PulEhHYggNJStmUgzEI}7;;5x2s8Q1g`rS#YAjS%BW>lni5)2~GTow)McoyzEQu0+3{WWmVguk$ndyerXfV0sokLfdP+ zz7wxV|AJ0S5B}cCEd6O$qTe_zhQ96Ty^Ox}iuAGk@qd@6Uvnk;dymGX-@bYWOTY0- z^jk>Ij$D5Ke4>9g|4Q@^F_~JA;P*bq(sy2w{;W<*4{h#tM(?>2{bRBH-@oKOM!)h( z^p9u8r0;KC&FI%%iM}h2pS4G9q*BGfb1G^NK_dDu}FF!Ia zj_|+uGW@TPiaoIYh~L<#w_jt;!1jy#{tWCt^A5>KQ8`UP|21I!$`@Fvn2ng@W-%pX zuk6hJZ{ErJaqZ*i#HokNu-NfU)Sp%nhBcrMN8+!$Li`s7#D5|xe!gPl-_OTm>+hdW zYf#sg-~-)7@=Dhx9NJ3j7feiuR6w^EeSCo|G7I$2e+%nw4JJCgX^X?q>A>+WTG!qI zFS7pr?)We!zIKb1mAfbb_J^6Tn;$`G62C#OuU>Ug2;Ohome`>CI-s;IS*RE8XV5Qc zT^_(g7|!ob!Z`Pg;&)qhnj?(H8KJ=d==Yvb{GL3W=5?i-Mqa?Y_p(*&jK}Q&h(7eIwH4)*0KZmgo`}Q#g)1QA~G*n&;*0=UU zRzP?MbbcM3z!`BX%3F+v+JWb#dA2E<2Q;4DES&!QlGUA_czbC}E<&zB8!qN~Q^;{j z=gISuW@r_kXwu|zNM!D;48gH4D(0=2)+$Mu_ZB;56jvZpQl-5J=f2REd}S!p?Qld= zZZ1tyb19>tIDWpVyIVwgmrY68}L@E{;_y z!;m?(W%V1Ir;v!4#VWNimiO>+C?m8ZIjN}(bhO#9dxC^u{CAUa}qslOZ>w!2=$QK6+O${7F&mA_ic8@Mkbls!#9W2^~ z+B7;HylZ;;oQEuPWpGsbLu>7Gq}K|nBhDaV8rdQCQh2ljXj>b}U2^`Vsa|VukKOHz4yQAp#*+29`|9^4~T{?fuq92@%cP`gX3}8193YTPqAi-Aer6{8+dSpA==!lc^+@j zcc1D@a+Bz5J8C$t|5MglmXO9rhwI|lWB*q=1;^6ZO=$9TRnIm#(lkQ#u+B}Nu#%us_3C>|~sf6zx z#o%cS9-aV#_^GU({uBDR!7|Y%y^8eKzeVxaUy|vqKf>U!4j*LjhkE)O7FZ%>q$iy} zPt;t2KSwEv4XdO0(<}M2VKw+Ol$BwFAFSDMC@%Hr^gUNdzYl3(D;zSpcQxe0Ejc~5 znNg-oU5zXVb8E0L-4bPb6kCxiKoij?45a^iVlO875h873uMPZu@{kLfPx+J@qP!YE z>~Z|i1w*@+%0L0rDC7R}o!>7v%tP3d{tz9s`!Si)y-TU_^hrNpgWXnC`UB^8#j8`U zH`>S?3sy}@FFDJu-4ZHWTb8w-qsr5h$_KCy9`$Mdh5cw7Mnw|GlW#puaV1Lc_jczJ z<<6{{@Q;@uG(G&F9X57O(~q1Fy6E6U)4vSJfVV%=zx!RZ57O<*-EPY6tjZ_2kT+|fnURSzUV|A@_r7O0$tRjg=o>HX@35je5)^#B@C@K0H-+cJ% zDzei7krqiO1#BcS;g*8(W>3K_ldKaa6i&RkaKZ%8(RwnZLz)bTC0)fjxuCoQbmOfP zCKpbcP&i>c=*Cvhm;B{OE170=-3u0*9Lw!Z1Qz7*-DwP41~S#~VQ%|+edT-MV@7P$p-FP)NRHi;8+A}OXY(Vneu3yyOKnYMO+5tjG)@;KF&EUJd~!8j&&9&&qIwI` zyS-8^f|EemLL_LSAF!E<9ue)^(CYWDv=)2)@N&#-uYpSwe&&dQV#+qw5?u<&_B06ThwDHjh`QCQ1@rNns?$X#DweTj)#Ox< zywK4^jlD;5o)I;#KwHX{;V2H$d7k1x9O1z(etjJFA9$N1FZ~EH|CbnAg^oIoNl6yr zvZp5N?)bGunZFnhpzG>nHw%8QpI+FpXyr&?E6D9m1l##J%N8!kr}aSkoB zcZn2NiRKRsVrr2e^bvY-DSyCvaiZ-9m||l%e?RK#D+;P-5r1TUA_)dAE{?5$ud8|A(5W!o(lQi#^y+OGxlK6P83-l zp@tInNg@%9Ga_8CFxewflTP5%ZDklQuihRp{3ClJ5bHB_4sv|{m+2?i@gH&CL$4xxpDR~ zBUsJK>SxuHy-7ih&_mGX8tfbKH%I)4D@vxYt+~u6PRWe4L#*di@DOJSFi+>$io-r+ zb8w`zJdbN+)Odw->!{J0P6q>5CXL21XQd&KbV5jTcB`kO)jHaGxo-$IK8gRfd27ZN z(-8>H0x!;OwywDY+m6`IAu{u^t{F=X!1c4)2Ii-Ka+Pc1{ls!drAc&X66xZ}U#=(2+q-tGEQ3k||yf#W^ zJavIM)sD(CR-IK(7HcIWwN$Eb^vhMF=)+m$hgFs%uAtO!^003)6h2l(R`zZa6%S8!p>dw});P5Q{b8oGz4g`VaC((e!sx`(G1bN#`lodO5l z!_z`fvne2O9|5;U(De%38Q|_0xMKo$3b-dY?tCZVpd+*5SLiJcpCKHc$TMkfu#rBdEh?fxJ_pST^MnP z2prRwfbI-%sT}ux`l0kr0hb|g7J=&rPUv&C_6gj(z~ykd3;l#ceW&7A)|b_TV7fTn zdn`SUk+{RJ0*>dwDZ=&N%IuS6dc6bb-g9EfISf3z66vr1=tscC>HoHdpAi@>X%AZm;DCs=6I>#!@nBb% zjgTC&k;{gSTn^dQ-AlH72(cn$6opt3G72Ggo)8vjxd<6eA-M<{&EjP8IC%&eOCfm( z8OuVFc}PA&#!*NxZO}BfTrrSME<93fZ+tg`lHd*L1oMi&Z_}-rOKF@JY;}fX~!#PdB{M!(v8ml3cJz;NS!8>1|8vlM(}Vl%u|bwJ(hToN=S8+h zl(UiiU-(k_qaD^a21Ys!R1mnoixi@4WE#xc&d4IHuZb=~9@7-_A`pJHv_I4HU)}X( z^KbkxFviJv3)O!h(@7;Upk3M}JIXStB)`M`>nqe+wtf`Cq^O{(fhsWpq|ziF*jP5$g{UOc&#eb_i>*>yL1ZjwAlP6^q-n5d3?S;o4q% zikIb3HeljG18mjW8P0!nyTHu{j?dftM{NSP5I7;1ZpG}C#dQL=j;FVEiom&mTQ6`$ z0_O(q9)YVCI3IBLi+oE62mXce%X#HLdWLWW)5YUnVEu(-bX+gscsgo_INW=Xm8h@r z=^jsSQz!WH2Jq-ty<#4CVHeSXFYA@IpMAvXwnDC8xQ)Pxez0}1z-BSID8I!auG<@y*Xu zl1%uZ%*PqxxW(0pk5+HA;NlxG>T+^Jiq()}F|wuFd+!Ne&(_iJ_0wAJ{Au4~AJb>^ zmtuZ_Z|0v|_u(Udub)2C^QXPU<7^H(`NA%~d)QTlKV6sbp&3J7NuHg8r-b47uw)+r zxTVxaAT&(g>XEmC3=`lj zZz~VnY%m%)RVAZ1P+<)0F~B7cM^-Z=d=dqojc4_KmW4lM!f-X+w9leuq^69w@B#%q z1}6jy*dio90U=+_+?T52E8djJUFS5V2ac&(qnk1Ve{#aT4#`7Ax;IfxHn^}&47u;U zn*GR-!3<)C1_{?TWt(=WIr|FL>?SMb*J$^bRck8CdBNV1{8vU~X8+$=;L1uFPa=%= zo%+BWa5pKTDM!s78F&@>Ta0=El2iaFfd$^040}iNUp*-f%0i5a?B8qLiPZ?vMEKDh z=tW=U`>xN72E6aEAiC`Pj`>ex>2=tkhxt#YnEzyo`A?>t|76PfPo_Tq$>j5&OiQFT zSANp>FV1@*w*GVazvB9jS$&1^?hEQaZ^3_C{oQy^quak>_g7s1)Svzb>fiIp~6=+73E5JnGWC09!YmTMaK1Y{-ex>x4r0mX5+x_Xt>DhTonzM`n@X(tyYwy zxDv~(dU+AAqZNcQU$v+lrs86wJbunxy4sUGxTE%AC<5ksac`ICqx z%F;^v?Pk?pR0}$D5jai1EacsHYFb#(4Io=W{o8C>t`@VDWqzN3|XlqxT$D}h7I6^mN^)mX=+ zUlqs7<41wv7d((FN_mHy@d<`ytlU+UI4(PmMyE++RkOdvh2PTFMg9)>)r6rM{V1bh zA42^k4`FoO#DDbufHNiMsI?`^?GvVs|Hfp{8X5SdnmRYFY)&4Nty=PgX(r^ujhII?Kr$r1fRLLJ>5~m7mFnm(lm7bS9=)l1S)j{199G?fXVTyn--84*6VRS9l)@RrGLBO?JI9-?T5K zic8Fm;b2LqEKn%*RIZmBP5Y87s#tO1hcNKA0b(Hp>bFE)dKN* zPAcbbs?eB%zYXB;0)_j@Y*4%(A615#lN4WaI<KF5LS31Uxq59)vpqccLOMZ@3ZF zSuH?)K5FCM1%GI>aEVb#nP76jW)|KD!$DevQO2yKGD6ff*DpWbl0<5)mn5bvYff@j zOR{}e*{rOVA!XQUh-pgrscvQK?4Z>qrRhBx;0sT~hy+t+hJ!QNGArw_Ap9dIPxu5!w_oEJVO_H4s!W6Q7*6?b0xunG&#!hom5@ZL1~oiFo1 zFcfs&UvF{H-{3Hm&cVb;F+VOsIU zdXcftX0R*xwUBLA#QM2qh@ctP7%Jbl60^K-X4=pxuKIc4W6>_*X+Ah0`=GI z`#M!_l|;-*MuR022VRz_imdvqmZXZ=SuJ3R@r#+#cZitM_d$dyr~#i38Wt%G6i`+jQ@e)Dm=aMS03=7G23o`(CI02Sazv0w2A-QW8wTgt~HQo=bY;ewRTZ`hia z8D3VGnf7FtrPvEqw`regUAOtH>Pf{QG`P2%9LAOz4CtH6m^tAev)_BeTS80MhFrm% z3Miy8;|M=i;WQfN+zoyuWd1m`v~f$f*;!#|a`9MuZdTdTtni)!{xmzh=LY^%7v3|H zKh=kyS6wXqTI$O^p$a6q5=mP6Fgd9x%X&%8gg@1NV+nuf0cR!b)+^UmX0_bODbY%g z<&X}R`5WyveZUam;Alqwin9vzRcot=Ud_ZHSAiid3*%Y!$Zpe%Dtw@Nf0Y^Do3CaX z=iCVwCr;IJ?L%-zf&qeM0pBJF!e9-5u4-y#w`m>vNMov+K|kYJYjvAEoE=Yf8{dp7 z{n!vV$U}n57@lQThUqjfEW)WynEpD|EXp-&otni8I@XDZs8={RDsUAhpgD{btHo-L zQO(YzZ^^$e-QTSQ)v>|9q9miRVuU^$!q$L2&FV5E%NGq7tdHbNXgz0jtju7UIyR7p zEOLzoPEm-K$;Hw$hp-NAorkreSHDxyXTydsc})bgltuu84w8P(CO zydSZqTxNVyU4~A>*|MeEI0ZF>o8B_arc+E)RX4&^kI_(wuFx4$J%*;qq7Mdd2$eOB zGa9j!t&UUkyA3s{`}0(HatO@oPTg*H_*s=lnH3JgB@foNsihjR&aF-~s^d|Q#sCHtMM4wTsXqRmvI?uz7st$|L>-i9X-IV#)zZNAyePrz zIl(Lp;ps#Qiw#N5p%%Ivo5)h}y`|R1<2d4yiRP>y6={rdG4Z zZ-s-4)oP;wZC)6hkCT9wHU{QWhUI7t{&G9Q!O7?oaP5mR47D&hn;H#G4I#A={bY8i zqNzTlHZ;|S)Ow>@I}&5DS)INAeoCV(`~&Jsi%t86qYKTYe%bv=G0PW;{$5=ilPLP$ zqL7MS)U+_9E^b;7QWrJN52*``>U^H+!u^5$hNgDbq8P#+2kD$Uv!4Oe_oS=sO@1`) zzBJVjRTOJvx3S6Hed(m?AC1-y{E-i+@K?3C>v`iDWj*Aus|*;Ij~-Mi^U4uA9XEZW zN)>MiIuGR*+|zJF-b@^?C|~;}@T4yXJQ!p2U<=?KxHk(rqDL6$l)={ne-CcR5hF$_ z$_;byi}jiW8|24g;4$`_mg3X*DQKtS6nBWAribu+yW;)nd4!XQ&aO_d5%*}^H{#C4 zeFN@MxUa`;#eE&_9NgF99*H{>_tm&Fa9@Qx9d{b;RNO;x55YYccM|SI+zGe`;Wpzo z;Wpwn;HHboKfMt5ao>b{EO6|y8{pa7NPi5=Y$}-k)y9`)$BTpNrl@<0G=8H~t=VtkFpC z_~5?qZu-sX2?y2CLdARV(jM2G+Mp8z1}f#eWoq8XduFM5PWR^@?@^HwMddL`=*ro* zp8mcFyOms{n#X>ca=Slo1@>#_!@+APq2=LVnwob&&2<`$D5&+uQ1|CWY96vXIwWID zx1mGLn`A{nSFBKw8xT%4&-3}`^wdbn=29Vo8BUJ@;eEhljU>r(L~G#dY97iJ#PF`> zouuc}6e@z9_Y*oozBn_4qW$gXRN=%^;b0>h%kzlOh7{vSb^M(A@H6VfrcBemtJRD> zH>wk%4ptHtHf1oz2d*{HE9U*_uJD7dk@O7>oKPpK8ADKwbu6iISxw_G$~;3Ej3@~Q zzr~o6tBzK44PoNeh!Wz~h+_O1HfK&v0)A$_ZpjX&FLSa&?N;-$SOo$FL^3-<^2D+j zg6}Ouc%n|8V#-!0t5Y)7sUy=+#m|1rO5mcw84SqJXd1gO6Az;e%ivHyKZ`y%xke&9 zXr$&`-ZwJv2PA0zWjJ_79c}FX>;UWq4A-iK2G&Zw=_H9XBdz6qO?k9d|ACtS0LG;( zr$NoaaFZDtNgwb(sQFFFX%$uPEU0pS=i}h$Dx{h8DgG$qmMCq%W*%O{PKihfNkIi$YbrVa^vvSyrC1=tgz=zHg}P#VaS#2j5n2 zs2uHhG>867915^L%~t6sQ!~_LHGOy@uzOu_eP84>J=LAyV_%#iLlgAd-k-jJ;opX= zsTTw>au=Z!helC1$!schR(YL(|mJs6yhu8Je>3 zEzUN)v%D|$vyXQmOf3adx)aQ*&DcHY_ox(mPYsvUQe#tz(-fS@26xl0@Sf{Kkd;ID z2$TdesF9GSnw~`!n})`jMvZf}d(aUiaShE>Q-(H`;D!GewG??6Q;cKO5>s%LTH-WJ zvTk)Xm4rGCD7Qha4DT}RnZmL&?YoJ-+SA=ewPZvxzU^t5@~<-agYyY zlutD}*>qzTViHvOj&s?^j}x2B>U2Ub5Bwpm`)_WP!MKOb5KRxo#iA7TSjo|`rhpyY zpW6`bTow*mX%tBOV|4wIC4G>OPU|)wc4FM&Bp+XaWT%tHI8GD30?lft+aziJa0QwM zw>eBc_m#xoUx9*_+!D{l1sdXDS@OXut;i+*CcNis>?!9M+MPeW8Qya>dm8hk=!wdh zC&Ix3^hB1JI?a{ka^me$9a&8dbP6IyS7%+pU^w1w>O#^(-wp?FREu0XbyEp7P^Ngz zOIYM?(^}Eh=_{iA9;^isM(n1NeHCgc9aj<4q$|zpHlD`gh#4{I4e!q3-LuVQ%~dXeV2Ia z!HWHy74p3=q4z$RMV&Dxu7{L#8^4Z`poHXNHiH?_84gZSONjL6(E~yb280|jAOx=h zHC_}(q?XXgU^vU;{4qL?6>+R0&SOOUM?p+eftG-vxXUIrw;( zVh8Rmw0t(~%u4VJxm(EGB#Sc{9CEoXb3+a%nY-iP%5g7%4PqF-`8-WU>4cn#dj#&` zxQF4soa{UZcr$Jj?r6Cg5|1(nw;8tyw-L7ix6+GG74B5rX}HsIGb7$&_RTM0e`m12 ztk>Nx7Nmh0vNt7n(2RXr@v@ZEq-v)1Q65SwiGp5Cs|wOOxc6umc{Ni?sw%Ux4%lts ze*|QD-cHb*QS>SJk#lMIk&vyjsB{>pw}s~9k`hS?&dGb+R$5WyC@ZhT(ZSxMJ8hOS zp4+grN-D!!2LfwpQC+36Oqq@pvkp`np_5sD915C1AHsy__)kP&hoE6GGOCU25$D*x z5~1(@yf6}B54|&rBN8KURS}B%xSG5yy#2C~hf=k^jW^l!trWvxn@TF-5!cfcJv+>R z!H+=HS4NDIAu6fJOdX*)W1WOIg&$_&*TKr6QqoZDGcvZCT5%GI8d^elg3v9W%j5$Y zTd>d~`QYFWrDzw6nhnd1G>BWGWHNs>Gaf^^_UpN3bt@kjNPUy4TAijn*E=U!gK42< zs`caDKwu*9qd<#lU5cC_V+9(R4grGHlh84#R->Acl?79bWr5o;lGCd%@tMG90zU?5 zY>a*Nk9{1;gmQ!tV$R?iBuv@j)4piaQN=I&QpMX1voQ zGH_pwJCn`7m81iB&c+=XBiK9~;|3cmFfPz|prj-tU3PWCtpo0{xNpKe2DhA(-+<>) zxWDY2I#GcXjr&UD!^B=inS^k5VRHRPOG@~<6pQutWG);(AKs2LwQh$Y&7x$Q>MAAS z#{tn%RvfwZ_T*sJ?aB8zmLKoIC&RSwqGNeqzuVNe;?vVTw3*n9E7a8fHl++v4BGbMZX}2f4O>Rq{qdz5WjOrk5Q?&^*TU(l%yw6fqjCUD=#^)2nm zHmR1rl+>|m4JnW6iR^*20Okv&rhTPVY6(eQ)+f>9OF#ZGp3&o<+NhR_?wMjLP-laI zhJ@D@@!*CjyJBop8~W77pJ8TtK)w?A9tNT(+ z~kC6f&Pxl ztT-@;c{-KAjSQL|ek@e|v|9eb2mJ>2jCLtdz9H1s4` zxosLHbKnm$2Q#!Q$YHeGj2uXv^7nJ7I05}_qAd%{Qre#o*H%*aQ@dugJh(2{HsNj1?NqiS7fu`xI z?IaZDO@)%4KM49|ed;tc#Pnro2iun^8hUg}@|?vmI7~6Hsdx(no`Xl|!|o(`vxR&K zx$sTk7rrA~urBNt{+4Wz{VyrQ3=n&m-_=_XV<}V!zm@cz;-MGKf}7+vcBNPp8+Oom zyWR@Tq(Rrb59+Y4OTll?gi;Nn(z9j~$-CYSK@JbvXR`G-QcLc+0q-TLQ}$%h3yNvU zKQY8EzA^{x**1#!Z1M*7Gb#k3`(VgMGvv?-5}nQaX0i!_Is5}g7h1m74dtR2r{2{f z_?i#HIEdKW^`RbTrjt#;NXG>QJxhV68eNz6SZ4~@jUft%y~Ac=WTDxIIouG;pJ|wB zY%#K8m_rT-?{9ip7|!-1YS-$b2u_3wm->IT|IV?K*ig#mm~pUJz3d z?2PL;yS70>R#HE;6z{MZ(V|M?-iCeOv>9MkjK;N76CWwYOzOL}dK(5OglY}Oxz1o3 z#OCKFS@to(^BM9P+z`0cV1rRc2_j&(W1HqqsR)U(mm>4giXi!O&3^LP*Aa7e_YJbg&7>n*&Wk{V=_tdBY( z)Zat4lrrN_Xqn^Vr!i!H9L!`*^DcWKBB4EGInK*Psc&bghiuFry0@#8l*NB8qI#?f z2Mg_dLJaE<#k32526^x&=dc5R6F=gQ%ljyqAY^j7ma{T&`XUEcYDo~YM*9!6*WYD2UR~tHQlgP-j<$;OO-n=w7NDb~asuz=p$k8`w_z$^!2`QGzj%Eue!NQTMTWRBF7eC8Wd4+6 z;b1Y;KL%598fk&{Ou;jg|B^oEFMHZ8(!?W+Drhv2+VU~}Se%8iDex1Fd+7RL!qB&2 z@zTdEUSgp+mN}_#C0C^l@{cFa27rDz+0SO#ewNG5j0m)E{{}l zWGFCZd5U3BWgv~h5~^8tp{nJ_@1W`4xk>|U%<$PtBj_+Cc9F+JcILP7XGkvoq&#Iu z<9Lh;H4%tj&Xhf>lwQCeoCVF8Co%s<;n=8nu!!=(7DMmB8aZr&b!g9awC6^=A2d4A z`{BfQ1VS|0P8qZ|(pJ~}7UPDEbDO;%hE4#z;=RDH88^+<*j11G6MskFT+)#N82WZC zcxgr{V*u>u1)K!A1VVw%zjxqZlNDCUImQ``N$}x9iDYaT{0`xKv#8!kB4q}^YgbZY zFA+*-N8R#wS`vUx{0-*@XAi}N*G`N*csevzrkwOM@f6__hQ=SnA7UeG`Tzbe`Ulx# zI+RNE4xC%1c>kI71d)n+PfxWO8;mc3!-G!H8QNtBa7^=ql~9wNFvK3@-IR)DDLQcq zhChEh$TS+MuQX*mq-Nk~XJ}jq-KdhvISNf`bnidA;?b}Z!roZ#>G4E;fI8T3OyQnPmO+ys~nkaEdpp_nQpUqBx^SiZHQdi2Zdk>gSg4xQ!DyBs>t zp${31_q>Lymh?rnen9;fH63L(n}2oY<3jdK2NWXB6Kh z3kuHYwkEKWUZP#(y4j1A2Z?&O+%eaTm6OLfIczO?<$G%GF&v9uT5TfY! z(Vh59WezBsUzGWcJb~K_oGA07vc5gQi84QWM9>`oPV6In^o+pu0w?y2enKBjs@wl& z@BPE7yzWHbSEPmz!|V`hIn;@4CA|g>hMBOopdm&nCta%S( zJ=EhkyN{^?LSgVZ9q}0dBWgKf6CzHc?Q^)Jc$)z6a@$uwj?&rJK z+CLzqGxs^Y|D9LAeAoBq`uVP3@4MIA2e$e6_?Ym7mMcmAs7s^#oxr;Wf1gP+!bbqU z(LDz5JqgNXc-OMv-7=gA?Vrm1>rp$&-++@Z~E7or}oS=X*n|jE#-2}Q76b|bB6bWZI<^Qyz|yp;uPCaco(c*y5)TUZ^-ce`y9)=4ezqmtFb)JDSGLO z;r+K<%Ol?}y=!>CthKy*@J0;pek9Eg;Mul&-?e%l!?SJo2Ys6N^-=Qll5M;9n=CI8 z-fbI4n&t7k?3ZjixSwTtoay|MX$NidV3FUik9y$QcJOnPmamVd!TZ?w`)?83ba)SJ z9C>0(+ZYrlhWC>UMB8!I%PF2+BUj+1hM_$Uqlwx}`uC=3TD^RououVxlCf_E(-!w;Vw>*Sd+jvg zTt+qu}jOE_4CFL0a3;Evtkka~GEB-r@egM2IYgW#@x@DBs{ScnhK zBiVZ-42`|yzZ*EJY4!3Q!o5Hba1i^Cz z(C=yE{b{v#=mPwA0eqC<;}dvS!_e4^?g(&A)9Pi~|K3sH25=esh2Y!3O>ApCyZ(9x z;jv+C!FRD2{NTRexJ&AvZ`0iMsBg^U`!u9s&%LY`#hRaRbxd>^tp zpc?r!D{r#$dgPtR0zfnJL@N(k`Bvn7JLel6KpU_pMEs!?Cqd-sJ669-Xg9^l^rSdm z^g_Tv67B|$KxaUw6Yd3ipl3jHzkj0-I0>B!O`q_MFwhU30zIAZ0B{C689IsZ zAaD+P8gwGzA>dMo^Z*HjFZ-NF-f*ceQ-9wWaoU#*>H3#CRNoi{ZfJVf2xHMVZUZ;t z!d2~D3ljTJgj?uZar|dX7A386N_CXiK(SGQnIJyeDERL>& zray?r*92W3M+cy}|Mwj5s6Ev8o*=N5^362$yQjmnhdph`Uqj{sdysprT-QImPULTb zLx8D&-Cp-}Tl*u(-$B+3Nd3>W_I*}<68UvxVL%#LBPIo>P#G0ymJSS@~@%zlmJp8w2hjPqp#~T239w<)xv>{hzGb z?@m`Qr871qIja3(l6omQr25lB_WrP8>RifQ*S-F*)f{!eH%q;o=&F~_%yrW0=cPEa zGm*Lu#`r3C=@J98HGk}nrskCQcpaBT(Q<(f|Y74*7t z!r&rw$;V60fWO8`{nchCZ4KcnpY!GI4XCslJ=(@gTbtkojJ(C;e3?GwCGPi^+C9$i zKMw8)!o%M~!Uqqaw-5edqrb=J%=zVhd>u3XTy&0f!3!DrArA*G!0QRC<7dg+1;V|+ zae(?hJ_PRT<_w(Ew1<%MSb2z_(!=W?a~|y*2EsrHh}>%t{QtMyL!7h&Hla11&bsRu z^S(rj6Tscjf{%lzSuAp)h5xG67cBHiOAAhLcKm&Z6q%7}Z00NUWBLkSBTla1N3|NO ze?5vWZ9`+)oW|2ErXSQa{h!8|eEALZxn_I8q)TJuMT<3UF!Zu?=nRW#&zhcLG5xcq zQ!Vyb%zdQ!^v@cTE{#c-#-vMQ(xq`E9@^%sa-I=-8l$H%dK#mrvFM#f55F3VzR;pC zSo8&pzF^TG0E@n0(HAWGf<<4j=nEG8OJMS;G5OS(d}>TSH71`LlTVGszu1X?!Qx-A z_!lhx1&jYHV9^&W`hrDYu;>dGeZiuC9W45SMPIP!3l@FBqAytVr9DWxY`f4{?1UCO z!D1&^>;#M59kA#L7CphDCs_0Zi=M3iL{G5j2^KxUq9+(VmTOv1WArpePh<2n7QJNj zNUz4^Q)B#VEOsInJHcWnSnSfkq9<7N1dEa(nEKb4`q!BH*O+wg<{pxGcI){*c($f@Z-v(};23<~;z5hwws^?mE7)aOKXWaX z?p*wqYi#@sTm5Smk68Sk#iJH~fL)cfud%q!;zM!%Zd?5iEgrM@p2ZI={@CEJI~FHe zoMiEIi#--oZo5M^zM~d*TYNSa|JT#4{!EL#7SFag%i_8C8?g50EgrP^J&kqwd_C9d zFR(b@;>8yGEH1|1sI~vV;@bv)&D5ju=ePRh7FStZV{x6u>nv_^)YnY^tiI;4{$!d* zJ$}v9tMS`n^#c}fvp8sRJNmZ%zqY{I=UZ&*)%fYK`g<*QE#7Z&7k+B2ovr_`t+RBy z#>USfs~@uXsKwnDGcJFv!`kh&*tNJYuW>&*C>M4qJTI;sN}gvVQt3e#7Fo z-rq%aozf7A{JN?_PyB^ivK$yO!J(am#uSdN^|I+T& zzEpcA_OzGwELj_1UvBAKc-cTkNPTZ1IBy>EB>+D9@ge@0??>bJLlk58d4WG;_iBJ-KS%1y{W; zzG<)Rozg%K82LWt$er*G8vjof5e@-|!m2&&F*e=MM_koE=273He{S#XA`E8!r^~DF zHRi$O)o1hDe;T`x^Jr%;efyip(Cvw>SK0?A0F|ec6rm0#nQhk3tpy2?WzGU z2^pPit*^(uUHQaQjJySTMM$Sj-`g&Iv>*MRO_O&a7j%g37{W@Xl zf7g*Xc`r2Ufp)vT-qiL$ZkpX;xZ+HwIeIHC)%M1zD_wcTp$XR=}7l6lZ!M_jS;~4iF zbAVmZJ>cINwfDbj%VJGLowOx6YUe|A*-zmcXR6KPb5d7` zg_e8Uw)ZyfiMEh!@5!!ebD@)C?V~MU>LiZ#Auoud{m@0&?f0k;a|u@gWz?VSC(#eJ z)rq~UKBNtNm=E0q)FV%}@_?!HHu{6Ke}gOtY(*~jkJxvJob?=K(^d_%0eg_k{Uh=& zBTwBPQXghP&j1c0PqgxGk)Krmu<%sd&UfZHpBqEo)2rIfhp-RPrnJ2Y>-N{@Wd9eJ z@;}cS@&e&Ev2|73&9_zCsdrS{rE|^~6ECT@QI`Y3SVNx0-{mlCOS7JA8-`|_Xrn%5 zE!j3Qq}ndL-xh3<^(FKT%DPY1k;C9H5TPS$%RzXalt=#3X$z)EI)o3>muD<;|L>#x z+ICa-Nm`(GnirPTPLFiEA=*N$eeF!;`_m6SYG)n#-WkZHjnih>gJ?SdFFOqF(QR>O zF7#YY>-MvgI@_5C(0+D`F7>~&0NYvE9wY3}!WLYHz2K?}(D?Sfvl@O8_9wwjwa7OE z_@E89y#{YRAk&TS@s>7RFY0Bt}s_V0jQU=Ox=*!C0d3g8QT(8eD+42iuR&vter zI|6i)riI|1W5{0v@Ua*lVR-#<@eBQijo(Lj060VWUDXAvb`C;E`U8oV`+q0*|IW)E zJ)Z3x_Nsl$p|1iXKDG09A92Y&4}BfD$#_;p+}yi6-vjQ9BKpY4Z_#EM^LE}f>5=hl z=L6uL<73bFa}MXMzs@|12d9xsEzRBXTRs1eV=5;-|E!6nblX!rS>}|#G<(Wlnmy$& zEpp0VTI7_!G;_*dnkSOZ2#)4sd*b+fH1+_%LNn8F(e<`&i*#@(KbFG&11ji zd~E;Bd~8quZRX?p_Hl{fF#Rt~)k^>0dPdW#t(Nd05ZC{=4nbcEtDU{N zuT!nV(9Hi@KViH|CpH`4#p=R1ryo8d*C_b?x5y$yU|{O@C}(K-g)0d8Q=IMVt6 zh(7;G`N-6NGW9<_c$oCE_( z@;%ySM;3HuI66Pvk?X2IJ`kH9?#Rn^9^K9yrIYoL_#}-xm@h=y*ABmwc^qAZyvz;u z)Vpd&U3&1a_?PE@GM^LsCehzU`d!kr&PiPXPoDqDd`{#+k<0Ud5U&}zPU`dU+K|h9 zPUNo0J?bC(2!~v?;|*}9tNw8ygq(Vf%;zMm+e5DUN9KTBYDX7vvLkqdy4Z15_WYqw z$XuXb?f8f?yu=0xEz_! z4S&Y`E+QXAE^|Gp8+5n3V43S_2==tNYR3atecucI*iqjpLp+6d4`lhqh9sBz^zrjprS1We@Wgnx`7Cm^i+32%7gpc7N!o z#uJA3ir?~RtBt2DFKBu9;Js#fU6w~1ZhXV=4*4vPJT;!SygI}C8hL6wYk3`(M<3Am zrs3U#rOO~!0)}^~OL#)dWq98?MQ|cdig_Y$NO-)9bQWxF4n(+Aey4Jdg> zhWok6z9Vx;#|v*Jytj?sp+2kUh4+r-4O!l7c(zOrjanY}M$@}S?^3t$s9!%glDA&r z2`!h=dssn``VF?kc=sry?X-4tnfg6^fqeX2bJV6{V|!=}TJo{jQJZEN-n&(n=Yu!f z@cuB%@`~Zju{^)!`QgpAye7+|AKNs~@E&SC@*%QFnx(!bY8clfI11>o(syjzyH4c-Ck zZ^-h3@D3Z^!&KpsH))%Zyh(6E`u^~?@J5xID?(%YOG)npy_VWIIz>0npZ7U8rS|KWfop-!z^QEZ5(E=e@>n-r*0QFz5AZ_03To_KdTa zek67&j&c|K`T$?UiiG%*Jci$rZ`HrrCf1I9ub=pr5r6!9mx}_tmpbJwf5Mb=TlfL_ z+A{eaN`^6tMH6RF{NwD0-S|72`S^9qc zTJpFwnD5Webb{f$xKv@EIg@06shB^R4f1E9Pu}?cR2K4dqQyQKyTg1t2zmwSizW~I6DRO=AC>(of$UpZ+hmPO$&y(tlvQefB`q-X#5>OF!)=KK|_7N$h`9`Wq(L z^UD(2zr;GO=svUjedFza|MYnKaZYGL*3UxfZwjw)1Ycn$G?i{4<15kz2O~F=njgZ? zTmEDIgl`8rc@es2hok1V`{lPKo>gaZi>C1iKK*A2^;^fjOIkm7y)?s9_M#3a{hBbm zsei(sN2^LPh*5ru;OHS`1d&AQ~#nblf!{Y=7sX3D=X&wSY88P&zB*76n-!6 zHa7Vu{vP_?M9I3j)S7)Z{`x6DvYB+wEFrSg!~99f;?I-2ZJQ#jf76io=cHAw;lLy~ z$-7IVA6_CAI=R#9CRCqe`VYQ8^-bNUN22F@X!1?A$lNO0zw=|I-5FJ5-!AkN+K|r! zFStK#>`&nc=2t)8{NyvZ|2@9XRu_Jg2+a5+@yqxb zyJBZSYo7ju$-d5?$on6hv#AG^PMy(6bh$`e|Ifr9m>53;X>k8?9Z}#j zlVByEodiioG7Cw0{=<5RwPZiz*XAUb^^hy;E7nlZ9v~TcB6I>_=B%4}7O;Jkb>!)g z%o5dRyB^fxEEg08bfZ(7bCGAWK5VdbK6D;XU}>LEZD!5Gr8cu3-prbEbGfTF2Rv%? zF~U{Aa@JBIkJ`ar=H@z41=m}fCOS~|hgo9^)_cyIn~_&z-vn%dlhy`-b}1c>$R+>l`7^CbKu z*pGt4ufdllkB`&%VDETyWW6u(4+7_bGqRs7J_uhzcL3dP!oxCQ1z)xCja-M+>uJFz zK6(BZDev3p`oqXPdjELy81$X6+RplNhllV3;4Wf)eW}l`|J9aR)76%F%uSOV)$$O3 ztgm?|Ms4v(d&p2*l4q(dOOn(U>VHcra@N;c?iG2q+LAF>Z7E7uTe6U6B2TpPT#*;3 zE!m6JmZ~hZh5Fx;m#?-Igs>0U^)>pmKkd&i`skF^kiuH^g6mV;57hJAw1IaEU3k?1 zdkXAD$g`3yO|IIqC$^s65`ahjZ`o?r(_4ad%$s+!HaF|(Ep3tYGHc{XpO^H)mw05| zd`!JK*unh#gzPV0$||1IqQY`Gi1pFvXp*Y&?j!0~)&?tj+Xw3n6&?tSk6O%LgR=F-0C4_b7$ z15P#lPfPj?%8mXf?s;=d2J&R=w}P`|@-h#=$3lE8ftP3cBk6Bjxc^%gXj(r%Zt+1E z0NL2nzqa^+B5Zxw77?z>m3mSw)i(aRT1f2e^SG8KWc5Iq^q=5n84p?ke3ap%3SOIz zPxqBA9nkHX*6)|JxX^pZ^9>Ju5aBMM)9MQy0uBO4On=(a?N!@rpnHH`pK1vQF_V4( z`UKF={%Heow-G)CoS}=={Xb#)f7w56vHid7pSBDF=fkRHlrdFoh5+gR8UN({k`~+l zw{XA9^UIc4|8Mep<9+?Gv=~w}{w(s<@&m?K~=y70Em0!{mqw7ddwMT8*4`vfz#)?h#TAx0YaKKfY z+L0e6%>KWODVw%h`82}R|E4D7-QdGkzQ@WF;Zgsag2;QpC#?LS;E)}w;JcP4%{u;& z?w{#{k@d;k30?a&P@^y5_0%K}W5p zFIgYbwEP*-I#&o;o!U1YRZDtmg=en6)jF3T(ltX>bU3Q=T}M^K(tN}DDQT7|lJ&EK zGW4Hy)QZ{034i}i`#BxcDfT<6VZzsyx=2)PVf;aQ+<8$ft~+H`_twm>iZ#Z$MmPox;$o}?W%3OPteR3^C-a*xN+-S|6lQZ>JMN;SW8NHzCD_i+Eqd|Aq- zPxQ~I=96bt^Yvau(o}Q5?jMYNK;)NH^O?6*^9|BDh+O7>GG7+^A(3BI&6loG)`O~f z7~bV!)qIsc=T2z+d|C8IMc*~)zWI@Q!8f9|r@LxX`aR~%A2Mh5F;A8kzV50`DU>7k zNAt&`E?3egrv5!@<6P=&hUrh69*R$o?oT&*T(yzkHf>yte2%06oNDFM2zvqYzR?F> zXyut!PWf-l1^DgHMn8DDmFLCh1%8&L9kGMX*X5=A(~VW*`_qlpK6aa2((aKAsEtkZ zVQ-rH*EIFN(XIm)cr`Bm5$J0sewhz!90hIwm(g7az751hw0qwL*HEmt4nrf}Q$jXzDSNT;_R(*=|wOZA**~+V} zd>ZnmI@RQNohe^;Ra3yqo2{Jo*TnjN%GdYs{CBr%>bCMW!I68ZLp2??`qWcX*8$a3 z2c|xCT0@6ZoHr!>@Q$2NO?!^1rsJ+^8aM^-xN6dEk@?bDGkAY%sFZ?f3n4V^qy)O{YZsJTswan zRZaJGeoXz1-BwNS$JN&Z(sNgugj}h%|7ZNZ=}{XPPc~5I4fMC$>OHDy8?v?_J_fKposWev2_Vo zUH=KaS{D0da(%(<`6c9K6-#{ND^ZyNT z^ZyNl(9HigjCqXB5cDNi9pPQdZN~@?50I?uChznI+j`;M0Jy(peXwD4#K@>W=?^yC zz6DKL_-uLH@zIW@|Nlre(f4n-3`G0?X}2T&e*?A+GtB+b80r6$;c@>rlC}o=|Ask6 z-jHhVmn3*zfd0RMx@}l!<&pcJ`?Dbzp#N{E0x!4n$oc+w^Rru{Tf{~H@(_1oa0zsIzP zCMkn1Ag=x!sQ-q8)Q_EiH*`ZEaaF@Rq$#9 zKGwmzqvJEWW6*Z~FKwsc0T8|aAA8%>zpYQ|yD`Zd{DsT2p1XuSlsn^3V{)v%8`B+? z)x__?XTwji@(e4dz8kYx|7~}J;j=;2m}}+PR!)64=6i$R8FGSue!(TpRxW#i*CX}4 z#7TM9>QfGly#Fh|^=+*7n6z;JPp@-TBYj0xq48BF=E%fy!bjK*TZ_WX}^c^+}B z*5xk*(KpQv3D#|NT>*Uh|8*VUxbr`rzk?4yylNev(XE570d#*aJ_y$n-#v6C{y>%C zZS@!&Yz6E7P_XeK?|<3;fTC6F&xMhh{(T+wzm7h7-9g%l_zvwxb_^hVgf#Yod$`xq zz{k_MiIA!|wb$#7Nx8KGeK5ghT9{s-Dx&fbBH-eqmzYClL-gf2pM9w3x6CMIC zgrn<~b;Hn?b^7&w&$_E`;*T~c>y_*88{dPm`d@cj>N<|*{$F?Jp=zA{f!wdU4Xumb z|Bv1`^)HJ&X%s1HeG-*V8;h)e)_bHu#Qd$N{@2qUqH-^EhO5>u@u>9`gsK1avj0ze zkiKJmuJ{5|zv~;o`9L0W#tbd@S$P5SR%Cvl2>CQCud?zoc z&-LB(pSw+afvMK_0zH~m>pmvj2b_$PhoSq!YF(4HAAmmNs`a->?*qbvGjQ_`KpVb9 z8>U^XzijOp57txv>#rF9{nX|95rF=GJ-X}Wfk%NG*j~YQHsRYt_yXUt@r`{18KP~4 zG?qEodiwS=HIVWiUOIar_I}~RYZKm}S}Dn5(~V25 z^6__y1m!ZkODzN^@SfW%yirx?g00?jJ+!&M6Pmr7BgXb<2b8350ldwYCs`0)KD<^N zZ=K~WhSz3!0n78j;|GmgYE{G^eUg8-<#ky-+MM6M$AKT zcr}LiAlve2=aseAcGU8=!80AWdhU+p1>rRqJv|kbINIT{(a)t0%U|Jjz_aCiIL-3* z!rNx_Rt;I63olakBbK)xUZk9FTORjOr7h>9SA<8Ij)EiQCtcUXGSz7o9l310x;{pq zDO?=m@eXi`^S4?_)fO4O?+B879A^)4hUH~gUN5{^hIhzgd8goI8eUJA<#F%U&bGX6 z%XL1nx(ub^Sb+n*V6|jX?`2t zRm&T&ydikkEN{^AuE4u)d83v`|4{e7;k_bA{9S{0)AF(`kA9=>1I>dGxgP)6&j0l9 zS@|xss!MXz+WTPoZ&_c|d0bIeb*a#E!Rb!$a8+zPs>@(5$g@>F9$j%&T@&^XV&g+y zuJpHYH1}>@9`9S{f-6G0@2)El9S?mnJU{PV=OfP|+&~{Lc`mbZ(pFao_<*W8!Ebx5 zyxz*E!4EW(9_gT3Rb8i*Z?*D7YdjsJK`vWe|Q%HZG;8E}(a4L8s|CU;lY2vl-d#k!nZj+8M zN^r$$yTbIH4Ejn`E_%15NHCq5cK{!@44<@rDuDK|;)MApKtT1x)#D&x{ax|+1QiswYl>^A-*{t5^Q|t!Oz6L1MFJ}e>s2;=Hzws zO>4_^d`7nlx?Iz`J+7tx*H!~X*!O^&fO>2XV7s4iz>hERR*%7v`Cr_8b8Q>)X6(aY zcQ<+m0DOe-(FN~dT>K&ELjY|l@_xqJBk1;^%e-%GZYc?e@lK@e+xEwko{jf ze^@&}+1)k%Wj|rr$Za0^IfHN~W;n{U6?5dq{h{O4^dV`gf(Z z+>5o;eWx2~Z)vo3cqtKjn6?)NBDAzgfnInn?j^iXz39zQ-OdthX?M3>Ra>xt@R)sn zLh3!AzPt=9gRDz=jemclwo2~BSpQK={nu7|R4sK~+iLoc+Q|JcX$}xaJMyE1_nG^< zmi8an&#vu&--MiUtUYYyd#s%Pqn7%wWzAUI2R>ot2dz92UN_((r|s09w(=gqk^TdI z$kOCT=BBm1)PIskzfV;=;L^`QCqgG6qyB5pd3bG*dD*cL?F9OgX&*W~Oqp;WN7_&A z2=c38Rab24yLJ?s^`G3IYb9;BftvvJ&!uXq|F!g|bv4v`imTSnffud+C&x_v$I5q2 zlA~%K#?iEaHOX;wI&^BL_@*9B`LD^aN>tp5-9>h^#O zD=)C}ROEi_+C2PLhj6o%msz=_h0foZBI|w^Y~_*qr+u#pH1SeqtKKtMQ)T5_t^IW5 zlCEBlx<$FKk@}bPMe3jSv!=^cw}z2ZziXuaMSjrQQ#NZTW1?1TLO~U9t-Qy|X+LZF zPEsys$lGbP=8~27TRH7#%>efc10CWw!%0OQm13&9-?#Jvw7yoWS)fjfzh`=e$*I+C7)z#;nA4sggdx<_pM z-Ny{wWBS*cUZ1KN#ZK(s1Wp2Pu>S<_TlWalj%r>Dt0R=JoL5>i0Gt8NVI$=`cmjX# z7@v#*#}C2ddH?ZagnJ1O16RV){eT)NldC%adOx7%#t^o&DcKLWbj$dmUyiKLYsRE4 z#nBJ2zbk5TdB!6Bf5lCYT3tcCCsBS6T~$9s`4>a$Y=cux{#V=m|8Lz3VGmG;t22OP z?3=)G`~US<@jq@Y-~ICjJiSc1`Q@U+qHg0k&fQE|~VPn)XmX zhV6dBp&-7%w*FV^`VWmezjk#G@`Koqg8QUCPn-B3;^Qd1GjZ_`K%X`7A3sKT5I6_) z(-!GJR}TS~Xpf25o+3Ofy5OrGgYEl2$9qH2fRz6Y;4=1E;M?!R{|LZG3O>%lyDL7h z7hURq^}XNO5o~{9`wM$E<jhh1IK|qyCl^7guxA{K~==C2{^@@gYZJ`l{06lAMy| z%S)EkVD3yWEUqnGR+3Y=yru+m2e;)pYy2e@IpvjwObo``7gmp#=QxjB`=XNNmDME- zP4Vd|tab`lttwerR9;e@Q&L@BS)H?TS4+#bP2L@?-VLo^|JsJHKaSbT!kU~_HPxjR zU!4$NVR3ccvhsq0;*#a16{R($l@;UDQ&?CXi%(KkJ1&0AonWZ4Sn`1}i?QH?p(CCejKGF=id zZx!B`)jTKZi^x~4E?QNSQ}wu!*Q~B6Dy^V?QX=w|B{hY#ka+(Tzq4%HrVXt*yMkVc zawq;)SFFJ>r-~1;5k-!TZ&`IAMI!NOKPEC7T6s#1zq)b_%|jYYN%8pdC4$F|Jlde9 zXB*p+x~l4I{8_n8{kZlj)#FSz_BQpzUsL$iqRQg6G>8>B6{}aq+IL}1-*6vk)9`_QRh@vEvqap;U=6tdu8FW>dKswirUiZ%8HdG6*bP2RM4`L zRjYEAudbl+RaVgWYAP$eD+?>udJC(+x>~fbeNx{WG))?9PHDyRO7x!0wvEtVxXPbX zQ^@U?J(<5JqhI#W#mA-c;%g57; za#n2$=H%t(<$Ck-3Uc!bzOv{^Y>R31h0FYsHd6T2Rg_EhS0x+ORFCutpHVJPWTTx^ z^4#juTAMTa*JwVLS67u6F5|XvJlPZsT~0}{@g{9CuI$T8<*ufIOqS-!c%Je1eNGd!o8z)#~z^9GZdLB1O`1Kbbf+(i2orRW)m?N`5cZHrAZV zijti2!j(nEg^nkp1um7+m$HiRqIdb^X?}7--?6G@Wld@<&Fi=!iwakjIGzc5GHyMo z?}PDzX!;6i4#lfiR^>eHc-9q_uUNH`hE|ogoFS+NTRt6RdWmSxNOL4_5nJ@Ui*kxL zZOmEpv^RHt!P9vKdHk|2m76eUbyeJmxJt?@a@R&Z#^g zxq|tBg{)VZOUPQNBHhRkne`B0?Lq2v+_DCuSU+it)dB#`9Jd|Z6C1mX5`E#D}n&?|BAK{^3eF_ zK@y)U`mD+A`Rx_V|0+81m+GNR2#0`!(DwZHif-s5(DwOJMK5#@^fdGn3HJdfL##)D z1j7A3=gCbjMb7-ofoA?!%X~aa55haAX|-lHVamQDZv9^|49$9=#&7LMps%`WHTALD zOL$b=%DkUBD|?D-7Qnk>{WIUI7z6C{|8I>FX8u=kS8U{(&SX{ge_YkYeD_`D36iZYj|fW~muOEjOna^zHto5R`F-Ul$VPyx$SH4W@0FugeuMTt z1Nt^_6FK#z<$C=G?+)@g;0M56et#<0OwQ38VH-sg`cLp$rvGQoqx8H_==K(onBObT zB(CQpuM%7RxmN$Nx3>CHE|yv=(x9rXD% z>ID60e&1fK^UL==#AZ3YW^E2Cohp7v+nDpFL~WJ zL0@laL@iX_er8}FP@=a*7~PEQ~yxRIU(ggr1b|rOP@Wh_)ArGYW+(S^y78n z!ZRP(@gE)*j2C4|{C48wu+aK_{xbUiGU{c8-@}+jI2}mUa`B_eyg&w!>2c(FMp>3u z)gJ<91Gzp`<`XrYNL4luUO}#^Kjy0XUc!u3WkvbOmy41rTVkGRl$9C(^8BK#3Mdb& zvH;_c*wg{lVbxVd`Z5VO$-6U={V?!cc+EgP{oepM=r_LGNM9$k{{D~jnI7Grm$~rv z#QNj1F6hoUIs|>NN0psEuF5X#Q)S)IX8bq)d&O73D(iVemA%`o%KDI>r2m!qjKm)n z`8ieAe_oZn->1ricLur4XCyo*^2@61+!a-Jb3m01!IS=9<})JK{r?SBcKJP3Ha4Wn zM&Ml?QDrwm$V21jGopW6{DJS>a~`{PUj>{|Re$y&&yzl}zn{G;d*k++ZtLIra*VBi zOs8KzuUO$3|GZ*FI&C49vHKeHh&PF!dRvhZYY!{3Tv%~*E^@~IvJ)POQ?1Ac82?u= z{%hLjQ!9A)Nr#y)t|$V^UA2PxUU7^t^}k{{?S=X-J59JwRKfMu#{T}BHUJx-4X;g7E>^_-{=1$wQO2BP1@#?i?<=VP6?-*Jnyi z%?#QBWnB7D+JQ&UXZ@ZeRXUcT`~@?Ve~yv+Qw2xbUb^xpS$*oopEXDMX(Rq@kM`x~ z`R|kbctqae^ye*6UmaYi>X*C9zpa=y$+N%NF6jt6k6mSccorSMJj-Cd$Xr&QkNc?; ze;H71=8yh5^L)}@53i|+_isY_dE=w}B2MOz{)PxW3_lD+Xqo#7#Lov0sI8-0dDlng zf3EuRfUEom_Y;mhpOkqZ^S{6A0UrfiJ130w4}N|B$I*SH;iO0Txj+0DLi%3x_uKNJ zAN5NdZzKPJ@Vk`b0Qj7hClQuBhmqd{zi;K2t(=j`KLQLQe*pf-%5PYCBD~wcFl|qK zePZQz1V`!%{wP_|*B3sC%>V1@@BNftDZ@RNDor-+sg!2GeKqd+PH8H?oqOm}rPNJn z-1)!t$@rihm1ff(?RZj}3r)K&&6M^SGQRU@i_BmB1@L`(LZC{EY9zEWaHo>DUl(ODqtW~9f3S_NDcPnY^fY(NRi^1*aWP$epylWuu z;+MKXquXiycO8HZ^XwekF!B&^5IBOZ_~<^2`~-l{Jf7*K!8;j_KA$P=gFdCxukXLo z{$6xxgYtal^qYi{_r%&usqX*d=pp2s|6Y3UyefU)w4c(;vG!9sGOS8JxT*Zp-&dtl z|8l=Z>Yq93Eu1A#ZT;Br|rC+;soD5 z1{{)P$~9(X5Nleb@J#gl1i={;scDLLC=Zoqg1| zN`kGrjKyXFv)KfG1gU17brPq+NO)b?Zsc3UDj~?caP|wF9sEdOAn?{7Y#4ZfLy^?1 zPR-$iwSTbT+zUUV@@E}->iiR)&y}~1IpssnF9TOwf9Icm`N3Z~7t6Q4I5Hgg8$wT( z9xeB$C0tx_w7iV3xJpmCfY>?JhWuwaNqh`Fc#pRHXQwqb=@_49na``&uSgoXq7z2a zIPGycoag$i>gkR;GE2S*?$212@x+uVewjzs^A%@i{%Ib6H0#>KT>W=8zZLCp5~oo9 zMMJ_FjQCbh6g~~KMY~|~+&ZB4k>ARZ#lWAmp^M@@Ykc%hE|E=f7U=a~l8&EovFIvr7Ku*BV0@jcCq9-K6aV3u zj`%AVtG~^mP-i|bUsIQ<{)}%2+!vVc|K7!m{-333&2AI;-LG6+Wh@1;90*8K%=(A( zkM2Q4i<9p|y}caJT|&HoSf>7|Z|0wZ|J6+2%z!xrO~}4I|A+Yh^13en;JxL<7gzqw1>!E>b6=Dge~|aw57O~> zu1fy+ePnp*I^$m$KKYaHdv3}Usg`vYpPRx-a!%@?Ulv49O-!wCGbAFnS_^%K@ zeFANd%Z(r$N>IKWPVjMB z;Wzma&*ay%Q9J)P`*ZXa#YwInvr6dSi*7522 zNpTZ&J$81#t+<)}wv8^?)p=IMLFPN&aExX=C~niVDrJl=c7e!z&>`FfbcR)FzO@fQ zA9PhQ^O53V!pxW={r|F2#)uE#vELIJ?~41NPZ|I9%yWywKtIrf{U_i7;Eb!5-NBYI zzId=#9I9f|E>!W*JCGs9m5^XP{uN(Feh&R~@W{LH-v{t=sReUop{@c(WnD}LV zR6GXU0d8O~<@^AM?*FCUvh^Pwze=e8Fa3UO{3@aSCGWQ5*Qpt*ggh;I7#pujyiz}L zbQWveOjnio7BJ_VspowqQvcF^P9f9vA5ypKfF|Cx3BZ&6Uui!g_lv)3l{HwSN}BV? zCp;PdrTvIp@BcQ#u410%<=sYjjQ=HjX+Nhzw*A;J_tVs&UMKbMUG%+r?nXeBw79CI zf4`G@;(&T8r3u`rN?xNpd58X6lv&9^=AUPoZ_+20Q2!-|poh%-v!omP2+(8pFH3m; zPrr*KerX5e=bIDhLFDoCPnY@VYr${lyJ|4kRV733kSBDuyTP7Ak^M;c!;*fWT=pZc z1pi3q%R}CXbM$>|;>w@;FQGj|*0&|pf5{zJ6|k-s5wHw7f&Y6Phy- zdJOLsX|9%+Y~Ry9+#APRZuH(=9LH-lyk8y>-k>=e)yDD4i16HJmV3dL_pZ)|tCkPO z@p=i9KA*6x-nCp!$RG8u8cZC2ldD3CyMb)d8dT1BoNTd(-f)c_J+Qy<>S* zaXkC(_8*PL@l2Vj{}yMPo?>j@jf@ARFMW>T-49@E%P-xQ)%|qgjjG%x@oV%RVDp7O zp|Q2~`vdxqFT8De_TBOy9EUe*dAE%1$3xIIj*K?L`yY3ryhvc@DmM}Y8v|AKo&*Qg zR-f>UZPl3J6$;Dpsz(WmUK7~zj?NaI&~h2uGdgds`Zu8{uWeMen8enN^3-#4ofPNq zh2|U&`}>6Fd{De2|19^((hB46xiZW95FRhUaj8{;M34JtX|3hyc;V4+FSWn3Se0e< zxUZJl_HxuOJbv%c4UXiaNq9obrTw*C86Y^3=jDu%D_V&^k4Qj0kTZOx3<;Om-vpe| z<-)uE)L+RPCVkH}pds)7d*GcmyfgZqftLpFtmcWI1waC?+^V8ZXFBs=XX=LN{7>eh zs_25Kx%eBj^FVMS@Hs~=^~7ka^VCyy7ps|R{oX(N|3{j0aW%orKO~rNaSIN=VIB-j z{RXFC2KdL6xYc?5DP}DzlhT|Q!HS5t+z;gM@2(Nm z-jP5KiT~XfBgEsRW9m=LWKyT-|J$F~{x35JnOfOPEt=_@#=L!2AT7fjH%VxwKEL?o zwgLZt2tVncvKEEc=LXWIF~1xL{}q4}N~c7nr3p+!qSUfl8R#vTn+c%M%*pgw=|KM$eSS)Qgp#gvPWfjWaG*rX@^iOqV)O z`qj$DjEj{ijWaI>8fO7sAoF5nhO7=6XCJAY{msgm68_`LS>dNEGp1C|lmlf&Wmb2k zw=#1M7G0H@fs95k_LUh4;%;UF{=(-gQ>SbpV>OlOk@Hmp8Kf`e*OfE$IjgZu{0lA$(+V_B6@%56LUBdqPzk|g@Ehhep(+tTzUOOjo+ zWQj*DsUj?Wpfd|_)iU-_c==2%$qXC&a>7}_Y(szP_X+0$*+2&N`@s1C`#;MLU|UPr z=fxIWWaEqM|HSR5E-6D^fPD|Rt^#%G=9{LAx`C1b#cVO8Sc_a$P(IJG1?|4%<)_x~`T?mW3G zMZHRXznv@J0~u!CEZ=(%IiGvURj>AV(QyIV2k-wsxobAOIbe_Tq(7UzT>brT_3b9o zPx&tOGykv8!jIU*=F>}=>%P7)HlJSV!(Ty2zYDOmC{G1tudGkz#pQZlJAOXR-1t-T z=W4aJm-+Jp;taH6vzc*sw@$zLUi~)W-v^M6a+yB|nG?9t`SDV>L(&(cyGT!`M=d=I zJ`vJ$?4<{_zFvPW?Is@Ted*iCPs=(3++*c*;!COjrL@bXL*NTm-f!iJ@TmW#y~u~b z?^^jeyIx5UJ@{culV(j1hGl)E*SkwcSPRFUFSqoDPc6Gd-t7Im^fv3e)>!*mO8qZ2 z?Ln2$ewR}JOPT*KPQ-+|Tx_NUYOz<-`g^Dy_PekhP0rT_n)n{@0*iAko{QaVt*;hm zSu8UO{7rE+-u_XO#%giC#l;#M|1IV_q#XhLlxzO>kNj4z%HkS}TdX`+<9SciY5erR zeZ$IwR-Uf$OXr6yzun@!8t?sPH~GjSK4WLnG25oYtMT@nL1*_1gU{Ye*d*&rnO7AdglAE+jHK)|5>fS{kTTZ9~=9vlud{IUT#Ow+P7P5zlYng*V3-V z`z`LW*naP}BV_5L7TfRLb{w~Kuf=H=dn{(I_^eIWv$p=9oo>?mZ$>p%&w4CQv)GiY zdUmFzy%yX0f7aIjvvVzffySnMlZemO|Fes&+|;v?C)#vTHqVw@d6mUY8jIfcoR78M z_M8V6-$UQD3-xTk>f3hkYObZb;_Sz)o%tT__8jwl-0e9ZI8S#T)q25)BO2%JGU?x* zJE&>(Y_G;99i!IId&Gar%KI!f?Mgixw)9zx2P{5s@u0L!>XWa5?=izJkvJf1*)Jmp44Gg&@lz{;Y+D5!U6W_JT8@)4(&KMK2RN89W<07n}`EUh?Nc=Y#W@ zKhkICFM#%e3!v|S7eo8OMbM+*V(2Px8T55TNR5cUJGUgw*uBr5*GGgy>M!chX}SsTHZWoS9`eF-0enQ~|4-7J==u-#+zP5i zNvuJ((+-kF&u#l@m#Y?~iV5d+9fx+IGiErCd%~9VST`qZP({!21|015}^KB@#sKS*0 zPpdp_Kc#IfsspNBNt0Ss?+5kj-_tJIOZs=WKzr3sz4-Pa54zCor9X6b{9m4JYSC-( zTCM-%_!pghwtgRQUc*PwT|g&rkop}4hxRxbr;j-qe{>YX8YM_je&+$q*KeCvHp zH)#*I-w1lzZ%F$3-1ZwC=(%p&J5qk(li0lpAnOm)wnEe=Yosz{m*JfsP+1`tF*ZTk zS;sqsk-c{f{BDY~K<6*`N}?0oHH1zTI+R;K_rM~aKP|eAkDJgE_Xp5p;5*RE!5>0D z0N;gP48F(xkOY3{6tM3&)sg3qZBEj(Wc~cnK7%A$X(yi>jGRv_40$dachyeg;XI%J zd7?1Um++@PwxxK~=<(0@oJrf3;Qz13WiRO0z6`@=tK*MTtPWdw|8eYzDWCHtoDV#I zuKb6Otw?1Phc8FUBU^mDwc==5>6~->`NB^9kIEC)h5u7rtdj)IbL4#TG1ojtH_uTA zBm1hs?{g3D@3odwA|6Q6w=$F1`8vS!Qxf~g8~%WNyyvL}Jj{2d_Ce{714y3G+)^q;8q%w$CcJMQ^T)h6K7DyZ;_vyksK4a#{*v`x{quY?Y1|%o z^nL6TjCgUE${P`X+sqFVwC%R#+SY^@Pw*2ljirzI^SJaq6o31YV?Opdb#Ima2fwE@ zx_SRr_*W4>5ghgRYWjG8i)M?z{q^!dU?$HVV$TptrKR(9K{o#7o>cN}u5p=;IG+SZ z%j4C|aZBg7m@1WUP2K-BZTTU;6V5m1(HOhMH@r<%U{ls47GG z3{`KaGEYEvT+)^0cLwCyT+$|aHrM}uIQ9L1=G5^6fGHHaj0<`3(+bX+l|tbiIui48 zh~S)G>fizV?bEl?%X{Ib{z`Mp9+yEROAjKmG^Z_Y5cv{=$Y+cpH`7u~$8W3xaaLa` zo$}+AcI;WHAF!S1T*-qq<4J1#QzO#lG*7&@2BVsm8qchWi{cp_11S1O?@>P0 zqdAfHC`BivIdRXko;m>MQ_r)W+6#Bm=UGp+8Oem_S>iijB{Lk$<~sEMlu)4 zJdw;rGEYn98c8maJdxxg$4Tri8q-s>(SMnoU!x%$86V4WM$Kgy!-+ z-O4-(<bkYv|_PyRL=EL;saj)wJ->!-^idZQ9W3&F_K78m= zd9xgqm*ldx04GDw0ehfXTjcS+U*0@$I`ndI1~lulJl0yWw#egszq}>jENJ!;^0J{t zFBdus%=>Jg+2fdLSF~BK_3QpKwkmxfj$Oyq1j8w>x4cI?t&fwA2j;~ zc_HZ2uF5+F?+D>j&ND?bq2G8-)~xMA!4v9f@{o7-wEULg>qGvNYC#tC`8SO`zh6B~ z8uQ-1Ahi1FgEQ)B;>^49j?isC9XqGK?Lc2+tta&DOKJgm&U^2=p+_#Or+cA4cwgw< zKOMQM7LbR$5B2(A{dDMtdU_E0-bW%=Kkd7zR*L;6_YK{9M?F1?U-FUn;I83yM_Rxa zKQi?%&-rY27kRPKPlB#v4g7wtGxe0KuH1%ha@73RTIZ4f3_S`R*vxv|HS`E{ z5P8EkqdyGYu@Cuf)>MQK?I(P|`P}urEL9H@J}kEC%1|d?u01+Q5?PWf)D*@1j;Vk{-BTV{D1-UuWG`Sq=jn>% z>5|TWFx-#afxg_N<`20dZ~vJW`s$$8oj>XXPp834hxZ=XbKObd;j%oRP5pbXezu9C zn*YH~$p=AC@E6_CpSY?qle*{k+<7ygAGqoly^fg=&E)m@q4D#LQDIN{m-RkcGeVgVdsnP#NQJu&uo4_$~ZUc zy|)6qN|bo9^sV^c6-PYGWxV6}%U)G97Fp_RkxK8~wDrIK>5BnY1z&#oVqnwnB@B>_ z^FE)Sm$j!QMlxdJXMXwpOL~4OXIpX&YA5n%O595!j>DVX!M{qclJ~uTqFtEzGyUw| zw5W*$z9q{@OTF?dj^-dOXUrSeSLk*zJ9W0Rdl^`g8L`BY@q)0 z^lM%6&0rn>G|=@4Yg>sfX8+#!`!8?QRNX(bMvB>wO|Tym`|Y9MZ2x(Cj!g6%p~9-F z^0oXP(4Ie(Q&>@0zP7$ZjvJA4p*}y6uTMg8oXgtNmOwXs%PrAQa zi~r9^&!qa~>+|~jn2AZ6B)|4lrB9XT%36JV(HA1;#+Y-HsyWDu(}+r{Kc#O^2wJ^! zleawpY~Td3?0u`eFSPD#-?X76>SxumLOClfQVE|bAA9ajq@|}t;@5UIa)h5B$JggU zaln}4OyaMoq}~h6aSI?YCn^dgXYJ| zA&tYaqW1=MDb48V_;Ry;qU8`h6KWmjxmC)6K1Jn}=jY?jE8^5EIj^Xyrh4-9$bCS& zTU%7Zow%}+1K>!sJ@h9n>R%#W#$i@+I-2OqIc(;zFgYJ-l|3&Dk-4J%M^Vf8{wq1; zo2q}>mFbf$;wKl4)qUIl?{qlnpT@d<2~!ZWw3mMoXW;1m%3j8kxc)G>hi3;b-m{uf zfsBj4Q^=oWA3ePPhlwwErWEpKs7JmJ|6kFL?uUf&7q?%d=3F1YA0pF?M6)R(GnMH7 z_{8CFo->sh1J675R&T1P^4_~V&Zj9q#;@=7nCA{= z{2Gk-QS%ot4)#BcY)p+Em!CyC)6ywTkI&;{e!^aN%wcqY@V6EF zFYgt9&$sdCdp%Kqdec|?d;aui`a3aeg1=MZ?>X_OH*Ix(x8KpUBmPg5-+e8g?XP}< zziaq2`Tb_J{7iX%a}<9%eO>jR?T`C0?o#vLkETy=qDuO9{aB~3t2L6ouJ@~PIudWJ_^p5&9~80 zkn_IgcI+3*#Fus7%*zwQg?B`kg05(DF1K8zz+kT!4<~eY-Z@GH0HybqWO1 zd-zK{yZa7-YliXd4|Z48%DPo_g0Hj%RrWf!?b@)X?b;wZO|Hrggxaok5pH&Ze|Dh` zy*6MsHe%lz?CuT5?DwMcc4zSF!~JUXR)@-VvF{26|Jni4-HyK*bA#Rd*6SbGi^%Ri zhTUO&Il-TMs#O2gqXc_py&8Pw0O{y;+RnHzIu7+FatK8OJ&alh>PCW9$)4 zUSf<;YjaIro1xZgoYZERjAPNJ=9v0xY^v|~S$pln0Zr#N_s=`$!{S-%SscoptCP9o*ki}-N1Z+P7zT;4Zw1gEXWBoP{GD~|vE9Ja%#TChgtiOZN6kj6l;w zn0t?#J=sW|MVO}fO;er~o__mejboo&fS>RvTa*+tve6!Qe}g^FYPL@X!7U|C0@q4= zFpV)Yu&c17XA*pOlAc`BlM8;MV~=YlJyI5%gujKszV3PAmGI9Iew&_S6FxwGvI*}e zydS!qgby`0Df_P1>~SYr>~V(Rv+)BJ-vPE?Zm>jolE48y&v%Tn6KAm#rRk|He&xr zc$cD#e>L1%)eg}^e_ImUnx%s9Z$O?3XD^t{_busix(dBq2WE2|lK77`$#TBW%3qed z>wTIi{v#gI6vpzas z&%0!OG_99h(Pw=$P#fD~%079FDx;UfTlN~4#X9H_v7Q%e%72LUU&NY}E!Go?AW^Ju zi*>|gu^tjDq7&AAir_0^-Knr2iuE7Fn(|YzZV~H-J3+4Fp*u_!nFIP)r+FlD6!< z(Op~{6Z_)c8>eeyL{6k};P@vF7I38CXGt}CZyYT)Rk_bs`xC{;QT+@#r@<+9z8XFE z-Q9H-d*e}d36D!%@r%e}$(;kKXfDQ3v;X5-a?G81k0iZ1sXXP8loxC7(^S z;`H*f;QzI%&f zN@9F5a1*iYj*}%Zw__2BI6@hJnOZNAyISeoI!k|u!2eqraI4eXpYWYDnrH{f>{D1r z4jJ(yku{ElG1qAqaYEa{eKSlZW)w~a-@SZO(9`1nBJDznXZ!2I`x63l3MgyyRPx2U zlEWFvet+@yWh}ED3(9&Qi*~P81Q#0$Yc@acddRqLBoM6sPf9K2rNILqLXxex3MCy z$k)Ee7&K_m-kUYTFZkkK<2eieCbLmfG!+ztC<*YAyArUDiB3WPW8T%youdTCEcZXdP|QbE!bQl+z<(>}kdGb`Ne z7PUUCQu0o&pY$q>pY#;QhPk1l+PN{&b)o3%V3**wm-f;apK_^6 zZZFkU^^<^#F;Z1;sBr%1^mX*KlMTV%>HGAIF0G6g_r|hkNg6v~=rz$=D&dL7)(2!v z?U<~JLpAm%8be>KeKR#L%bB8cXi(*zMU&%)X zGj^-HqKuJdZL?e-tuX7tb>Tydsr&oM!1^Zt1jGGK8Dn3l7#x*^y~c*}S1M9etg47Y zk4r@HZbZtXzuQ4nHs8DkWq+N%iX`Q5OIA|=JNS?h?Ief>M5{DuCgj%Ki14sY)C z%HhoxD5J`OZh7bCp$TcwjZ+a8tCYGSD~9z=whSPV(oN$NnckNoK8ga~2T$n|%=YbbPhONV`q>9N zd!jse)GO43%>?dKs6Mw)Gh63Mp&rzQDoH))K<)J+)eJL3_tic!RvJ%&&RxY=x8e>; zd8-C|(25Gh80g-?4nz&u|M5fV+^Onh<+}Bf&cE}9$pm`*_uNb2?l5j2tcl79Wv44u zlIM0TN!Ypsl`qu}Rm!t_5xSj55gMWF+DFDmHUIXC@p?o!XeuU=p7+mnrliwo{i1|? ztT~if8^d`9;r~Wggg<8oDgtf?AhZAC4froy+OFE2yTS8!!s&(cE~olKiW6rbgwv@g zPPw<`)D;EeLbZd(m@QeJru88h#K;*INi%J*KF%8v?pKaTJNXr%o{zMZHZRlu2zy}=AIZzyxqUKi zL=zsk)?*nf0j!=`A_@1J=oGh!! z>no-q+FtDP4%mrY?K{c*s>Ud1&J@pbjJ38FO-oeex7rNr+of7=mbJCS4t+&f;d*3h z<&^TVZdAcywI(T^B-DRwyZzwu2^V#y!(T6sa)}_yXbA~VU5AKI7 zwzailSg!!BRz(K-A;`+w?ABUzN|>+Su`G0V3|MLV>)+j?)NIrhd!5&F@ zHDOuk3kVdUU&^FW7^F&Bod197UJCh{qJ=(CY0OZp-Sj8IB`8O#TxAm(Oym4@OkLGa zov(X2#;2YC1^%l9{;LH3FD!vwKZ^0Gakf~kWATnaDA-GHOjG7MeeOx$2gy4$ldt*3 z8H}GZl=d6BuJYszcW?Cza-3+V>{rT4PvY~eU<`cbdoyKCYo?D0kpze%Yb-c~gbUZWf;-3zWZNOv7*|Xs)`>q^}2kSo>sU`(gtR&3#zD`7iAFyLJlPdNQCy-aXGLN2xhOdA4cKYUO#@^_;Igk7-XO zcE51a^=#ChUD|W4D@nVaPifCf+H;$D?lN4@X4i99g7(~@JX2lIJ=!xvd$uXhY}fO! z_ME6ak15ZouIEYZS)@I?lxNWOJa5jB6wKW}KxO-q91NdcT}o4YrLIS!a7&Z#UM=l? zX-|DTIq7rNhsZ}U_XQLfTm7F^%!XP?@C$CmY-n(E^MbCJ4Xc%>TQM8fYfoJ<8#XIX zw_-Ltr#*GWY-mxQ=T$ju*rh#n#cbFwp1NW-9CAIqirH{fdAb#|;kfqH6|>>A@^mX^ z!&&XAD`rDjdAb#|;kx$pDke^O>WWF~T`_5qim}Jl_o*1_WhwPir0a!!j18P0LnQTn zedIcI@~}2J{|*u0o~WyPWA3Y#vR2P~Rb=7sD+m9qCnqUME~D7RxFVKxz$eG2rn_Dx z(Ox2b;pJ*eV^5kBj;V2qPCNQ3oEh`5Ty}tcd+`jVtqjS{W!qK~LAcCbFGcoR81r>? zJwk<$n-b9}X)Ec$=rCo3nI!u=MU=}bBcH>lak9^_fqnVNu)#R-?MrHZp{IOAri-j6 z=j(!cd_b|3OU$f1mF7Gd7q|h}PfT*Nu5(+eaN`y3;naRJq-I~((K<-b z)7KtUMZ$7HYo=E?)`rxck`f0c1u)B8@z=*-nfze5^|*E$UzgpOF$==21??IYN8-MH z{*cSCq#PC5ibL;YmHVR6k0hn`t4NZTwd;C#f30TJPqN2C=FO#LwQlVFNcD!fgITR( zq3&hIh9|oC!rc8%=o1~A?3dh91TNAogGW+`DTVzw>&NfRl>Z;HP@Y_@HejR`_)3a< z)oH2cbSw10>+Bt^^O`gDx{7*jGA46+C)UXIbEg%3;p`iHJ0LV2k;WgtSlr%k38#u4 zU6`DA2e*+geqTy-?)rM)!UMDazC^Vr<|yr@uJvt$?Y5XjC10PXzY*KoXO>cwYd7zW zDVDn2^Y^a%xxF!y^_RjUY1tcdkB}VJB)j&;-0hMa^GNpZjqwS|NlkKSukndX(&dpH zWfxIM&TEq6dyRi`NiKOLr}r8MA=zbUlCyh_-HK#af=3eGYy7>Cq-v7uY>K%g8GrBQ z=-Y9jRYH-yRb}YgdqUrE2_||3NugOnFjW(zg^FB)B99<5biWV;HNp7MJ^GuH=(3y? zN>yK#GAjO?HG1%RXzz{h>vy53&nD{g17jX?R3fLwtZ(!EW-B)G`;7Z@vKLFk+qhcQ zCDr5IZ4Q>CCaAm38yiAtwQ9>Yn#8@>d`?Cc;YvpPr3je4gg(9@xIVKzJ`aJc<204oD4m-g* zZV*X+IOJ@quBp-yv%C0_!73TZK`j-^y7rOOUJ1eHDSck=e$LsW|6T^le)*iF_-&*b z7#lmH9ENpcnCLwJH-orP+yAyt!#K4I=817VA>8``?DMTz4S)LUnp(_U405yTx6*ed z4tH*C?M3EW(;$BQBI9x(n7-J^doX>m#K+Q1Woo}l71@_5X_S*;@ECQajC>`NlJ&R`E%%d7)yZppwT_@f`6R&$;A0bKspwy?w@ zzYfxki50v0*%MMrCHPrCD^ ztkd2$TC-u4@-+XF#5QP^7QC@1tSa%eVJh+aHd*nK*bC+|p2o;{x-Hd+BO6-AcD(v9 zZabbP`}BBf-w3MlR3yo5hLR^I=`QX@GZF4F2J*?1b#dOEoW#FV+29PWKU)E=Tu#Ap9@Y_He`2_g-+V>?!TLTXqkAY{|bm z_jpJhoz+PBZELFFYUE$g^H?TPxapU9-qhaplQ}OSEdPPB&zvL*|1-JVVg_PR2k=k~ zS_Wb`i)w`qm4;i>XFS6b2`?zZ;u%6&DecWYIP3Ng#=j#iy~^ja?j!r;yiN>9J!NJU z|1n$0vCqTO$8cd?+AQrs?%4EgWxa~#c8;`b-ubW5!#Dz>?hW~^Uo3E}Us#4c+BB?( zt|V}OYA}8ajD+Ewk*fip#Cf7HFiXxO0jYUjTQgzOFDcP;W>lXd5tr15=W5mHO-C6UMcSg z`Hh4-z^7vtNcefAYpFeYtqy;l^H>()yUfPUE@&*muWq(FPhoGYlkh7#&SK|$-)Kj| zuZ7=J_UP?8{3XJd5x#}^w?fnG*rT@+el>P=7tC+OcVg$R;pi3#za4%r*`p7-;Y0ML zSFRC0NcduCLXJJUjqm~Nt%rzzC*cnQaX&BNP07DK`U4%F@6T?N@Y#fy^6PZ$(H{bj z<4yyfGFH4+eug|_f4{>X{ZR`%94nMcxatemLr1%ep?5j<=<8RALwJ4!?I+fN1n%Hn zYi{~EY5VzP(CU|QP2d0HTv(DlX0)Wou*YnTx5s2TP&n2Pn#s>G(o;wL4t{BlJ;qOd zEbQr{?QtKN#4|R@SD$5%QT1tBYu4jetix|3{0Z7anD#(@jG0XMQs5NaAz&ce9+Skm zwC`fiF9J488m!&R%iy~J!L6A)Zo-RhSq9DQ4(_`F*J}Qp6C5)a{?ykmsG~7;jy+}# za5?TepjAnFR;ltHgC3|c6WsFp0dKwRo@(+f2lt#~kJ-MOxP+(Q`UU6tevu2lS?&b_ zt1%m%g|^xHMK|`RY5&K8JEXkiEZ|G_m~5RM*4Ck z&Lm^WVPni+9kj=EaK7=hPS0V&oq_(X4*cG=$D9>@x8Cm?a{_+nNnacMX`f@dI*I>+ zF=i!c+lc$av-X%vq>nZ}=1R9c=1>P|yq;t{eaRj@nEE_Mz6%Wd`;5y*Ou(Lc!m!f^ z^MNxAd-GO}I|XjEiwg!d?libbF7EnLjiWx(Q5ek6-h4{q$V0l;tN#668b_I>&v)r2 zY|yxmz%^*xcENRhwV@k`u)xp$VK)CGa)7clzLzFA$NJO(x^#`x#R~4!(Fo4owA01? zT2Pwbgbu9G{WJ2Whx`5sg`09cwFh@y!n!}}#9Q%VvxA%YPuOeC;#9cClgzu3U+l8t z2+p2xMsSYxFWEh~FNzi1udAbQ16|xd_wcjZ#V&DlMA2mlu4T$qCkn^+NdK&JMQ-}O zsCX-^bxxOaaKA@pSm$&(Z#n{w_YV4XiJzN~;|^Bh{Z$80m(>>+V3mBd0KNRGcHr2O zbdPRR7gqQUtnI;laf8BH|0*btpU&H_clO{mUBDjGVg0MqgZpnB420j5%O|36V-?Qs zFDNg~9axE1vGd{(M@-9CXE;EO`)@^pBYj7Ea9=#;;#!I$xW?(M6$o8RRDFC=wP)V5 z@JHzE@2NPPua>Tk!YMj&8`j59#|yL{oWy_1?~mfrX?gG|h5KrWl%t2+p>Ve0^x#@0 zU6jio13kD0+XUx)^#Or8?DY)6iJKk4Q*ON5(v(}_t}JzN|K1gaTc>al1lmZ#?)Z;> zxnjc}^{HcLaz4A}S;xruu>+mSdnyPn=(>}$;F*5>CvdKGjnnkrWZbD4j6Kap=6vwE zgu9ZZzKxk_Cc=@(PPxGG(C{ek4|!zPH_guEQK6xC@%EqkHWgVl>n9s2iyiA&akHIS z3|t+s;b;B)6z(9ftDLa&h2Hx4QR109+s>T4lrTZo;6uikn>BXk)0VY^F@Mx~(p1Zt z`xy)D%pys@v10x)a1G{)_QMFvcfg|s9&1S--~Y@FjI}o`BkmuC_G!`uZjtB)t-03g ze7`eyVs>K=br8>C%n>{D*e2q2?6hGf5Wkb}V(&ml3^D=v$vkyTl~V?D?#!doDFWYK z|6&XIdtdN&S_b$J{8HvtO&0b~x(F9YGGac$A9p9|Xa!z^UmWj`B$-WVhjCw%=;U`d zHaY(vQtw4iPooUu$=}fw@w7)}g_S%oO5T5>4JiLK@kidsuuT$aeS7-~P);sp7=Yh-dkJJ9E#lOY=-B$4M z_<09#4gNmuzft_F?f9eMH&K>S4py_eKO(xgM{UC_*b2JYjqh14e`Ql1I|Ha6YQfJD z!%`cxt$XbF7Rm!%kZ}ia@1|`%%zcu4#~yWB=njxa(|&ceVP}z^QAhpuhknQYum#%A zlXkq)2lzg8CrCrH{h`#+yQUSI2t3oN^$B9{0#^h)>(sBm;;jDH4pZqf92GtV6j>0z zPt2w+;d>o+>KEsC>)*6TbQ!iE-3|vsY3UJ2MED95sn3{_A5cxciG6EaOg z+h{DYM_dACVzNv-OK{n_#=Yp$$V$LI1v9DHxc9H&w;B7`fSr|U8uvQbNvj_j%b$<` zcYqTxQwc|#_LpMHuxA5<@LPwS{Q4JR=64wPKH)d+{WkVWOdV#L-^lz?i=8zU`$0?% zX&3#Ol$GBi{90tn_1GIR#{$Tas*O<3xFs!Z^l#dna&N@FKFZyUdsCEqEAA~(?iSqJ zqTD-i^BzEiUkEp2hsdn{(-_7Rzr6p8{uGtI4mU0Gj+Or-%mR$O|I2+M@#j4!<=^FozxSJj`xLVdBk#XcH_AWk`lGSR9-8FXL&g6SVI#kUYr6kq zr!SXLZt;da?0QJtst!k*;Hb-CVbdN-+DB5RBU3{5sHJY-A4yxyN`<~myR-4ngti_y ztryuAJ03nX(|~ zvRuMX!0f-oc#LB zKfB#en*T+ttgdWVbdCA)Ig~U{1-Dt_l#B;108Yz&cTE;L2`WFA?!9AJV_NK@Km=zG z$`l-Phj0&WlYD8wF>*PCurPd@CzRc={L5E9b&kAAV}GT2X8$&32A{3c|98{ZojWDFP~<)wZu z9mQym2xycp`)BLHmG;4H2Up!2_rF5m=J&=uOP?B1*BiGj46d;^F39*WVr_5Sv-F1% zPxZ!euMd@Iy>Z_k4{lp;+yvUhh#h@!)wH1x6wXd>a?5IZ7H(-nj0r>c=rXO>xP#yh zxwzm|jq3pSu8aG@YK=PrPWQ{}9U6BO+*z0I`_nY;7`Q7gZgWuMI+<@LDIAFCpU8iP zJ^VW3mBZK;AHdVJhm~Q^z{uF2>M*u2CcTS2&9R3~3JHxG8;AM9x#KxB*eTy(nHc27 zVGY1s%-E3aXPt+CccxvHPCeNy%>yrBW8J2e9gG| z{!5vR=)%4g!*^wv0}saMVJ(<#d_P9(_;$kUd{lfP{P`9Py99iT_!zT?wL)`=_$FcR zz(lrNjCgmgXNtjN|I~dA;q}0bL%yHr?((!fiZDE}#Ql8!Te+cdUz#DwW4B&Za zkgrG0#(oX+zEp+$;;!_S|A)tmyg*x_Jq#y(!%a*A-#;z?4^MObho|7rH*L5d6D9u- z&({9P0Kr{T>) z?})sHOa>kGKYR=RgK?)~Z^3NCE$=%?S?$EUh&u`QKR$M^Fcd(zujz4X{ ze+U>p51#NIziZ$k@?RXIp7ejmPESFeVeL0P9$A?@487(U0~$KOi946~n8XcTIyA`e z18iWH=a1d5{l`N87<5xK%>>-=OP?tI9(`^PzkK|rYT7c-9~|vK#aBsq;kQWB%*HMJ z=8As+J}u(!($;}rs{L!d_fyHbu@2+VM<}1Kq8H!;sZ-N!=Z*}nJ@R_`MtH1`ayR3q z|3~Pl|MV?UZt6dMTa;VUMt_dbQ~&9^96SA8(@tl+NT>eOqvZee4!1p~AHbjSF8wGb zO8!sp)c)__e*-`2KRrtRPw&$H@6(Asr18&7Qm~G6J{q8!_&=;GnP%XF}9k=wCp{?L| zyKQ&qLC+sto7-lG9;Ut0zK0&yG;g`>cj!Cf@6qQ*`peMw3421*p7H#_(GH})3_VYH z;m7w+`smOLA^MAJPnSCRMChn)^<&1U`+qY1{dW5eX#- z)ydvWh`H@p*3i<_`dOM^_{iJO4tq+I?97gAJMI1{c3SpS*6gO)Y3P4+*W1wJFo(6e zgl6>~!U)<~8uge~kZ-3kA55HS+HYp#4m$Rmw5_yC@{k9tG1;d9)??;ELz>bSHQNWf zfVIT=-P~`l-{I~-rL6(CiuJY`<;0DBzNF2u)3&#;m$RDq!C3*;=fE{H{>I>b7V{kZ z7C81nz9kv^q>R@~xD~soGcGziKx7ulY{OWCvgMR#W2JC~zi{M`akDLCJ z#`;fMTgY|qzI8t*jrSkY+K#C{!g~*P+NrnfG#T5ad{21g`#xzn3LQAc12vWzr@-BY z-x*mSR5~E70a>Q?2K^=Ng36mUz`Q{`VQWAJEYxq9u7BmQ%}W8=xML5Q9Iw_3%}-e~ zO!3BrWa2dYUo(fnJD;*Iu!opM_KZwYn%Ons~j?MYk3T*r;VW))-5yI?xzcIyX8A%gIB(rz^%52(9efB z!bi+T)=F=~?^)7UWm->kKzqPxN~3=d+2OaII4WVVxAjTy9!albJ<;jdLpt$qHIK(D!zN_aL?}v=f!u=cyO7RI1KUKljhaO z;3)lou4+hELEzxRnqVG!7At~<Ss}wzn<+BSbt8=O=a;BH%M6^k!=9QtsF=tl! zoD$K_SXohBI9&?w@m1fxi2@X>lF z%L=Qiatdpvqa+dKhvikqy3y+j{7oyYocblJmel)~u4sI0-ISnVlzgLMMWd@K(`sC? zxPIYd3!9d$Xqb>+QSeaCoRaF|idn+JQ=e!IF005Zs4kf)+9j*1^UAAd=2gxptTa6R zsJb{JiXl^rD)VL*q5-nJqB^g-Q0af1O**6ET~=SekzSJ1p2d~wp8mUoylpaf$jWIY1UsRq`E{U6&7ep^-Sw+>X%BYl1 z&r=FDbpuF6+bESHsv&bqW};LwFTbo1zp9dg!W>T*=i^J7mgX#JSOxy>xY)wk1ejA? zC~8J2vxkC(qo7|_yCi4H(xpolH$CpJUD&ixs=~i6uSYK>p=K3U<&>3FNxO(Dr`jb{ zPot_H>NzeJ&7OrbNkwH&VP$1Sr5i!b^fLeS6^~iV>X$U4^Hl0th4{ks;=J+)3Ja)8 z^lB2OAg?;Ftg3qOE%|m8fTlJqd~8Y1(gxA9S`nneOXgC`qV&jWTK3qoHA`~l1!wiB z;WWO`S3mAdT43G-h0%IDqXR_pwd`>}Q7DC>6NG=C`V@Vk<=`XwR4dVjT3A(BPHUnc z+^Ppvmz&ofBWc$KD*dvmx^mX^YF8C$PIYCW)MKhHp9p;wg#+IEB?k)&gT)nPh4gf{ zG&mw3t=m-V_Z`#=m-m45BQqMO_4KAh<8)*0#ZNL$N4W(@VI=ozbW)KVagFAub?NrP zX+65haj`u;K)1xk=#-Azl(ChC1r?%%Rw+fUDnSEn zuQJeGYf$eVqDH)4`E{G3F=%>4@S&XE#L1%BmGQ(ax*WPa^YPv!ISg;cpz6Y^>KrwA zi?15AP0_lXSDlkr`M@l#7S_0La?Z?!-^}?+u0Qv_DHFdu<;xRq8+M}Kk1pYy9RK2l zj9Rt+rHv~d^C#2krmGGmYH8_Vj8|D%s!8WiEhUu|y0st6mJ~!bXh-8(Ysw~-PVJu^JWy1i#g?y;;%@VhaTOM z>IrVqVh`SDm_1{K)c8#4XUSt-t-{`iPLvZ5(mI37880eTE6A%h=_fg}f;|xsHbsqd zRq{!#F0AB|XI_~xt9(|~tUSiNf=WO2>6h*w8UMWa8y`1PR2@YMTUC-7aq@juEtfXb zgY!Ny-VmVRC?$P9c4q?fiGfDu*OP2BUOZBa#FA9oOdtGM%Gr3^Om)C9Z+TQ8^Xa?N zjm+WBs*gGx+swplXg18*_?1ntP1A3idtn6q4gCg?ZDlmII+HJE9+M#c-`k9{^~L9uNnEyZA; z&zjW^;Brj8tUs*kZ;Y+8%_he-*ROMFrZm~+Q!0+8pCeD16W7>g9sFVli(F=IeCn|Y zQ(K7hIV1iE?oChI<`(FU?M7zC^R~HTi)}vrqHV6(0q>W9+l2nHI|tK0%UYPLl8?I# zEB-mh>Yq#a-MLnO=9}#QTm6|sn{5F(hhz`Q!e7dcIkI`gG7|1{Ry$|SmA_8I{SJox z5BBtIvlDX~yQK9)!lVR@j9sKR4)^hZ?C05LSFW4yQ`paAg!Ti>8P>0a?i1p_VAu&J z{BaLSAUo>k4@cI21{#fzzZSIjhK;5{7gCrfrmjgj%9msg=eQa;zuLl?)}4->oJKpC zl1b<+J9+GA{4j))_^AA&bE{NQ;mCl4qe|wW4AENaR6?POWgFT=m}d3cBHUSXs8cxlLI>fqT$oQRk2NmX$apQ>txYRyx9hqPUUiu-iD zLgB@$gd)S`IjgF$vZ!3;D_B{=XUmAsf2g`}LSc=h)6=6bvRWeFv-)L=mo?RYb4rhB z0M97FJ)v>QVpklkH3mcp;t7aR6Q)luE}TBYi1&mE;Ta{AyJgFa;y&=|y@l$E!o2Cl zJ#ppqiYqZn2I>`8dEp!s;WH7b`pmez@+_S-GnhENtT2y?kZ(y|l#Dw8YOK~K1v!dDn~lt6OWKEVck6qEB>l(N#l~Qja+w+(JQQc4YfQPKN$`86s@!+ zw+$fP76fTmQ8Y92YVr|YgeJNzeU`mPys7$3`TzHqq1zs&2TMqg+jp?T$HlvXwWgt_s2A10 z3JS}D6~RPL7RV`lkg&`FDuOEg`J(qh&?hWE41oyzmo$i*tHw_^^EPwQL!pm#SeMkzoyyl#cX*_u^P z^6L)H7yyG~+X0+ImX`uv>2m6}mXwkHR}Qyto(-nU;BKPbl^`mghfn9<$Um0w|2DS^ zm+?%q^5-VIk@~gS;kpX_~%d1y;XXqa}} z84Y9RK2y5M^By{5jA&hH%??x#u4zpxetp(~V&5CHW(2H+G7~(Snv&c<# z`r`Oo8<%_kFUyhlsp5Q+4`d;ceW@q;*~x8G_QhgR^c%aXoj0pcRq)U=B~Mn8`aAX& zzb$ua2mF0ImlloKm2&;?;^Zh=A^o0^j-2x-el4f!a&8T>@?x$I5)a{{pF#Ng?ViU{ zY5d>#H|Uxx{~31TCqX-bGsKt2BPY^VQhw)1_!ZU2jfvNgKUs%N7>4Yh(87M5^0O1t z6ck$fz11c!hC!1ZfQMrzOvSF`Ltr`01lcFysb>4V8fX{5?g}yPDyAF<>uo*jZiiGt#&o3Pl*r?wZ zK6UF~bz?hmaI;`--xbGB%rATn-ZWhhDHZGLv*0!(}et7&9Sz+Q)0gjufrt;sIFk+>c3t5;D5q-8&L+RS@h z!1W;`GgH%V#JvHt$>iKEusL8Sw$iqQeg|d?W;=V(^}t=2=VWhjHwK=&_JDthwC?Bp z0Oh@Xrz-En7U;IpKO~=Rl2+gW~iByh`#~;3jMq1{o=LPB{@C6 zthA^*+L5!YjLDz*9x_q8sajs8sWo$CEg`j)a7r_OyW9l_w^os8sTx0lS| zm3IAIQMC|xAB}uJ>q!_9e1Edy%nj`>GBFH^8WMM(;mu&pR@dW(noi4KQW4*J*w%m()TCd zWAB})TU`?jsoPsWE`8jI))II>=cbHOe80=V1%Oh8_fcvUX>yB2uROwk{lrz9;+! z+EUc7uYQVJMCSTKqyOr{A10xhWEWll?sdVJMDR~}8`U@UzQEgQN$u{8 zLveA_PyF||^)G9sy~2Mi%HA%W4#b3?37S&=sb7nV-f-ime}_)H@xQXCSNPA+gF&8* z!BP|Bg&Ho_8qr@9uk_0FydR?4VMo-!5qvPJ?o~*o|74gSEiH^Cf^mP=l{N}2eGhMf z_pkHbOLvF61H8E=&wZClJ|gwMws(KM&HJwdr~-NaH9Gq`{ghvRwwr(EN&GtGpZsiJ zd{E7=2hqRtrITl@SI^I$b>}Kx`(XfZ-%oYR&ryN-*Ju1;D3j+?3^iozH;r_ji>xRw zVO54DlbpPQ*(K9iyHL+^8tlHP4Oc&VLjI*I8y3qB`s4l;4SweE?h}J5L{(vd`)s9N zM4G*%VdWD4Xn)O;#ucmCwQaOkc-ypSX50Y$;4 zHi@Z98_VJf?X)t5^M8p1RA#0dr1!IjNWAkQ{2H9cH zDJ!gzLRTC0vRCw{^6;np(r(%3)*GFq^Hx8-S&E6_MV4lWE;`+CxS^jRGDtY*DJ){D z^Z($IxWEmQO9Cf_RNXUw;JYcSO(*6TS>yxlZHcsQH_3Cuco(QYOsfe23imn{OBMn4`?c;=r}R`w0H0vA^ri-+Tw6 z=WpOcJ@Ypo`#-)8HMb+YravAc?dp4CyLA)dZisewL;oR$^Ztn^fZ>49+M?e<)<=Dx zV3_s0zY%)Ac)ia$ z>S@A!V8@<13EdgZ|CAm3e((Lp*s~pS-WZxo(09qYs~vm(x)FQ!Q`^V+U-kxV-#}w3 z@=u&`zn^#AjQIWujC@~KbC{lY*?b+W%VL<@@UuQX#XRoWCH1kt-}-2MECI$m(Z1x- zf395~eg(yvZIAx*^6(GqV;8>u=tstlk(-S-Wf?Lg!ySQ};a(%#yn1K2x_|HX8nN#=*Kb%bqFwPUuT9Zw87> z>SJdn%|})nSQBQEc#x>b?*D4|nYyRSnZZd+<;&z<9-0Dk2FokQb5gek=A@FQerZnKL#@>%2a?U$(q~G)Q)kA! z5n%b=y1Z@Zye(xuC-A0nH7CdPQt&4S}w%?t-0CEu?|6M=gMu#~l(nZUBtIQC(%l&ALN&AsP%PtQz^Z?70Ew$#)F z9@vYj<=%OYcDefZvJ5+8wbFm6^j|8181>)w&F77drmme-5_>rT=Arph-;QHOQ2b1> zRMYFqyQUIqYkpFfK#9^&1Q**Z~q(z$a;C%B>d#u5B|*GZsbqq z?tUOiba~#G+R3+&7N{S{V2Kr;O*;jn(20Y{dV0po3Y1Ssy)~Gyd~^Q}m4g1OLL2?}3~-vTkg} zY$0Cv`)l23!M!acZn>Xn-PnnF(RIf@jXi|nd`E=74RUzGqXxNgCyQUk1H=n@?d*D1P$2vu<=@-p9NH?F68t;X}d};eHW&xD#GL z&H$`j0(I3p0{LCxmsAJ6U6P^KGMir7Uln4t|7(&&@Q-g71`<-B?>0Jd8aXlNqxA&C>ML@y)TAiKcZk0ObA`e65>Hu}{IUIcP8(tNbQFa}->u;-}Jk zlRVxmbKR^lST}1hm6&PNhool#X0Gy=wM^?~9cB?`Ir7PW2U^9D0a^dg$N;kbuiR^h z>p9%cI@i74wEs=w+W3^~-ekIv`e%*6y17NWx6()Q3EK*8H)b1V2QzA+*^hbtY1Tqs zQ|(=)w`C80A(4Hpn>%@XSi&4=BcD>XBA4Jk7+u~S)_*j=tH1BJ$OG2R6P?z7bnyMp za!B7+WbU%$2z4D;H z(1%*k-@2r#FA`7W`~!C|2Ks1%>`kjP5VA*o7xJik2Erjg2L*(Q#l&ImFyv?buZ~J3 zx7=SvE_d%@ZG}%mKg5w))v0FtEIy)~h>#s#IT3*zlePZ!y2Wwr%S)2f0*O3NlP9X8_1KB2`8%Q(D%v%ro;2v1HE%E7c_lvz8|4sj}g!Mm;Lg5Lhm7G>gPnq zEg0*<g@)Al^bTk}k@i2x~*-vfb|hg@-ynb(-PG466&>x5Di zY0JV|Yi7Xr28SP>nejJu^S=Jf%q&V<)9Ks2pAEF5$9=QaNfKXE0 zD{jf_{m5VFulCDaCQkD2ds)yF4YM^IuVJo+_iH#=!>JkuG%V0i4bQ|=rrkjet2M0A zaGr(>G_2LIPQ!W)Ee)GAT&>|+4IK?PXt+_s%^Egq_^gIoHQcUYi-tQi+^OMi4MQ64 z*RV~)gBo^dctpda8XnWIQ^RWtJ{D-v?lTImT5cGR<(x8Hc!F~4*8X7y*FMSobTxDA zzjV|8SRm;7{~!;Km? zE9jOV-^xF@+^reZO^ej5D!%Sssp)9#b=%9s;cq5&I=w!;=?~E`C%3N+eW|P?R92J3<8RgQW<`s zI50$>=-@o(+>#;q6#EDfdRK*y$Y0#|jb}Yh&hB%L9~tnF_&W$C7^4Hh0Kj+p+~`UK zZoMNr=yqGOitc~+pDTX`{MOz!M$*yY_B0UCcv9M!!2uNke3R_h*xCyFV%M{AcGHj0B!Lwf{#qvbCIVxU@fo_3ODU zihpGP^T=7nU!PrYByRad?FEZd_C1fBh7m1yZzhhtlT?!B1r}aV$?6xQxC*KJbL&4K z2OgAsY?wd8PT3r}E(DI2kAd#5&)JE1n#HE&(nG$H9P0}#X9jZQ&>*lQ&t%2OOghp( z*8VyDL%mA<{BxAbS1-w?`ky|N<)!UUz~Ouyy!9XErZdpz$b9kY^^nrXdruc`(_x;P zZWv#|KE-ii3jXNhQvQDN_Zx9<;!ifOOva%9L-g?~|6K7mR$RLvZ#SfI6a@c?_{VAg zfbzGlWS8MT#pRPFB_!(ryCf~vm3KH3$ePy`%dhsH(s_U2O2=E!A6Rj1`!OKyLr1JD zAFw9y81(P6eqn=q7xzx!aajxN!0#x0&O(m+ap*q$KXr;M+b68}asN%0fwQ;QkGrbZf39-&^Q`1Wum4}Tc)%j2CQWo#L1(^)^Zv9_9@GkZv zRixS{L7Jn#0GtEW0$oU{+tj;?m8`lnx*(l@ND-Ix#E^-$#w<31ndzJ~h~ z!+N_LHZdLc0|8+dFaNCHN(rO4{#P5tsd02!a8u9;8^Qf%k>Jn?do&7HCpgD0a-wij z^xy`x^x%G*>Eil#_2AwPi(UQfG4tJc-;T6V!ye=6ytIBh9vb-lNYbR!_nRicb=dbV z=)rv=R`Sv1^x%FwN#X1wLAhb=)Ts*h)iUAX;ffV*%Jm%)ob`z$$z3F9{7ap_PgJ=G zjr^2nyei;XBRKoDVYlLVL#%IDJGEJG z9d>-SgjI1^zuzdhmand>iNb9aT!(dMR}^li;2dkZpmZ6eh?VySE~+_)=GP&(maiJB zt`yErDmS?4BgFFSFaPWmDPT8mR?{?1_Z)Om{_3abtl!g4F9$SAhfR7BTxlO1ef)BD zAKZR$^Lyh`YKN2fNQ#iY9bq_8{x_zV_=&=4< zaY-tD5>9?DU6M+Ri;3XQJnigx7>`o#4Tq;xJy=DF{?7E zq`aIv=@lp&kV7U$lDcoMl)7*}tI8NC_w7o`QK*tvRV@4>XKJSB6%+a!SP70?RcPTvxDn05n(4Wii&!rz&Trs2YAuh^t z>3i}sy+F#Vum7F;NM2rL#Von|*Vn(VTk1n8H7VfoAL+Z3<8GBGY2dgWDq&ca_WZdo zSoS&6f0wS$!kH!2oHz<5RdEmyRWRPkvO6U~6N)%cRh?f^!wR}S?I+ENWK_BS+$Gj$ zxB8}^YqH!_tSoec{pb1Z8~(0H`zw49{RzRI@>TAr_UXC@s`TLaf_4k zisC2reP=}DkE>uM+F#1^POdr^qRWUQja(qbt=fH#bgJov96F1lSNEw0s-~;YZV|pG zy+sccRu@oz?kPxDv5jGPC4&Nv>Pjm3&Pe(cxp8NoLvE4dmYV*qsPk~5B#0>0FaDY* z|Eu#!3CLOTjulQdt?>QWGeqtNCWzdP{1uNKndu^LvxN(=PtgA9+P@#TY>bJ2F>spp zAFKW2z)i;Z@kg!;muvqi0-Lq04?b7B4JGee;Xp{{8_X&2t6~2!0a`=oF~ZZ`|C1b9 z;W`Hp!k8G`7G`bt8q7C)@ZjAu&z$lcD_?#WUBCH#|rNxjmU1{X3SHLbs72b z3j2rQt-=<#O^0cD9%nPMU$a0Z!-n~eg^?G--N4XG;9tYQV=X);fIASvP53hG9hig4 zjVy`%DCRJx6?s$Q>%_c6SoX88Ov8Svjj%xEKLwTiNBk$7abkq$hnVApp8^b@1%Cwt zk7jt3gS(DX{f6ao)OWgi6Xt2|EE+X5f&K(VYk_vw@Gr)Va z#}r@}|6;;qIM&5^v!MyvyC#-{uXO249s6t-G;{H9fSz^Qi}f|o;NHK~rKyJID0!WP zj2*z=%C&bDVK2qL9`n?4!mV>@8v`O+SQi&T69m#WE^fk5=NDIDHV|$;a0}*H&Zpf8 z-0BEF=5W||Jr5t!A$fThvuy`_WWL7S%-(HXq&_dUcZWUB zuF-!N`LG=8;&FJK_Rc?Gf9aSTU*`wVQYU3Hr|XgLFLq0xiE@VtbDp-CMZG6At2x3& zB_K<64*$rlf6|o48Lunov*`BQ7h8-KKe)!8p9$_-uJXH(L|oMOg*0PDypg5OYg`yS z+K53Z`Q4Kp>%v6wm-_cJ2leyrkYj%o=5)wDzogN+K)bszHNgDaZ+~%wgJti>NT%iJ8?wDBtjcK{~|Pcdf0cJgt-3R)K$xHEbe^~-!S`9W|CtQFr+)^G@xI1?}?hQuj@1NoX77x_^licy# zjBzmNmkBx6h20yCJLi!8y?!J1my9_v@Y@Y+IjjrY zF;9~}!(8=S$wO!tWs=Lwt<9@`n~S>@^8x*EEb!g8re3Ol&AQO#SQk#2M%=65-p76+ zWdG)rY5zvbsME23(*- zUU@Max&ZWP&dQ5^+QE;Z31TLJHy!Ka%6th=qVNlWua$9u@oEqDdQ91T!k9c1i@njY zK3*f^0BQJJhiBNqt!*IODsV0IDctnckL#e@2wVW4HsE^dGqk{nc@tf+3C*I9n0t)S zNF19nuZ8FXrX6mfe>>L4g4-|Y1iskJc}nbM*f(J4#~&YC zO_~Ds3&;E`!;^_`GWZV6JG}oSW%MlemoSGgotRCSgQV{y@VH}rd?)E^zNaWc%_FO8Ld+1(hW> zSWvFq)2nL)_RG8PzWeT=NmiRmwN2?_>);;cD_c(Z0 z!wLG}`?w#NnEU12uYe!DE>A8jc;P+zSi~&h+h68A1y%P|qyA9b9$i1VzLJ-3%n_Y> zQTV*ZZ}{t%J>HbRqV}6Y&kRD9QzRVvMyLVwnz$i#aYxeW#oreeR1}p|GO;SC5M^>b z`O06`P`jjYiXSaATmUGKq;K6l>sCnyW-qK?xnznz!rx1WS596$9)0z~Z%py~{kN1? z-}3Y5z3?9N@E-Ky?{Sk@_I zE^8psI5pi8+*mhX71Py(oZDcOv%2%s`>u~0R^R8*y8DuK<)a;tWf-?bq>N=sDf9Z0 zawgz1c^zv&H=YITxw=PrWNYJFWDN1Bcsa^7tr%G3=TnSsLE z;|Gp~B3D(ZG03I!R7$z}F1>XmX7gV8rOXN{)kx90zs#AUbJ1Ph$PuNYl*`22oYIx` zqOl^^(MFRrnqZFs8xIjot?7qFfm#m zqL(})B{G-JFPowCa-rW-ua~&mi7Sd^QL~pWPhIJzN(+;J`Tj^kpt~5ye|7AEss{3oEX6Gp}7m-Sr~uExIjH@&r9=4OOy4 zP{Q3x(Lx!~mla+11dseOkkCc`bFA)kXT`DO=xDqP88E@I{=L|={ym7@6k>Gt3qB>o z>dqPr9rW2*$be~L$G_S7cZV>mC!pgo6WWRR-EVcLO|rTtjt4gd_f)HU{4{j?=UUyo z{eAp7_>~n|-BacLSM?sObz~QOO9R&Nt)_KuHU7-Kx&xSM@U`HkVy|(mbJeERjhxh7 z-)wasKrT+kztM5SFE3_quz@r*+k1)~dr!bL`tOEzH|`qTL1>x#v)68QKTY`U4twvs zZ{p+a5)<4;{JER6XMu?xK-|rkO(ya?5c#az!E8ZBe7+eTDy-Gr;#l4L!EePZFs->A zz}8MT4Hj|MSyG5r_bO*a$947{&tjiz8Y8|8>ePDH;I*I)Z<=J9|uAd^W&~;+i|55qu?y|bW7p(4+j=0oJ($cq4mupKrF#7|>lyA)XBD z+%(*#W1WeIHWSF2&Kb(+TsH2>N?x|k)h;H_gl{u z1Sl6|{8^49(CR*1j-5tWM)-N1djHn6{?}``mt$&#P7Jic+wiLo(k?>Qxl1w!aNEea zwT^Xequ)CBz8mh`X3}SohdS`jt%2Sx%X6INj)Zx~Ex&Wr@wxT6lr8jIp??wgYuH=J z|4!^X!5swd!W{yJa38>QNZiEJ2Cfx&lrSA{fqNES$A|}f3v;=-@RssFje8sB_)+A1 z+#h0pmoO|!rOrAF4Sg=2K4*Mjox4I`m9h^*ccY8?0q?&89k}KTE^pf9FB@@R!*sj4 z7&A)>3b@KVGmj6j zT3*z$LOe3CUT!wH`0OoJy87&tu3Pv_Py=jHIRc5h*2^Vr__*u8YO6uvxs9$wQ^Cl# zgna$<*FvmS-txA5I^yTe6b*b;46}x3zaP7jt@Pb=Z~gRZF3m&SdoQ0Md7Kw4sVOYW zFGDz%G`q|0@Ii=~&eFTc%>IRq-;i6lB2UIE`MFbXer<~s?LMpZF9E9Mvp z^VIq~y6$U?_=2*$p#B~uOz&BkA5g9qiqXJGn#<)OK|N8_GZ%N;){ex^HE=7ZC7HKrpc>D=oz3?a*B3G_yoD6t@Ye{d_>`8qIdlo zC6NhA$aNcZLeHn!NGPdNaxS|Rz1mfD8;gh$l1|EA^s9;@?`WFndXKh8bYBzpws!hU zLX=>hsC1I&6qV&YF!r8>iSf6a{<^TA+Biel* z{`W!u|Fie@aZw)U{_yOAiiB)#aHWJ2x*;6HF~)AK$72&~7h^mNBD+x%4KYFtNzkn9 zEFns)nmZnAskL@vjI|aGwP*~YSr@P<3Iq(k#3~10YOTkT)EaAzXKQVKsmD+9e6N|g zmtEBKoZtC8|2)rG9cHeVx#pUed*1GQuIW`Uz0Ms3_`HG#0v-tXqJj;1eg&)a-k1?h zpKibd5PtykU8`1fDgU8QFH6{T4_;^9!{*hGi=y+(p?>f+1*`Pma7WYM$WyRPkH6uJ zg6Gwbje_|nOu3O4wg`|;bN_~&&R`H|`I zPcr+(KNuB%-u89T^fyK;Se3^cb_E;yjELsHdRoD%ynf%P;0)w91NZbAWG>9z{<9oC5ug`bB$Y_pq`b8tF-W%YJCcGs?>-Zv!^!&*1M?@@Z}thxTDs zu+sO96a|a;_o7#ZIeKG-Nw>GSrlV`ewJ%s+K9WQ4Ebp6=0~071eDS{i(W&CP5MdxD z(zZng^>bL-JUH#qJZZP$LAPs~7-#C>3`9OP_o8MY6+@?eTaQ-~xa= z?+bIvUc%h~^PcmT;R2ZQIY3r;Z7)L}1li_2^K9uH5T2>9-TU2%(fj{QMgPg8EAd{sPC_MG?Smpl+hB-@-4TwgHHTk;(2 z30K%ky$c`|`I-G3Bs@n{%H2y9&(Jmw>SCtz5%-f*FeFceLE^mZCv&FYb^+{|;v)=H zj<8l^Lv7L>JtJx5H?qJrk~S&n27{4eK&Nfe@GswMlUu;H7v{`=u55(uC9kc_TY(~a z!B&C-q(+-DQyTlhRU#Po3q~3mL?p>mQF%M3eimyQIBUL^o;R6Bi6riqAwWyt!O3Ca{j;J^)%tt6Uw(nq%&^A*V zSDv0TvA`*`Q8KXSramiR(^TxaFTYelb@2kq_8IIcS15Zl$R9&SZ7;q2Y^jazg!%dl z<=&V1NLw}<;4@{fEO_RX@7PG^lINbEQ#OYzA3Z3y7M?4onNN6103Nh!thDnVe^iS%J}-i^funLp>&&Oka9mO}yW|;IB1Z*^7AThPcs2zv6*hwk zSdK?tDrA@zrv``XbL3?>55Yb+^f7qE43BKx+=>Z&;wQh)cEW002YL&9-wt~R(e`;+ zI|f?CjkVSO$Zx8{cwyk+XYQXmaFm^F7BppMH;iaV* z!7|Lyh5Pl096);y?c{SGWY zPAJoq6>DKk`wv>KOG74NIup$a(^HYBU)xy))y=^*w z>Y(8={NopG;+(643|k&zFT#^Ir?hgNg5$;FGWp9?ZcX zab|TL0%m2nB-v##<)!WghO9v(9h#E5FEHB6_#bA_pJJDVGB^`fEr_d>s4519t6Ua^ zCG+90=S`6ZZ29jFiUYQYn)KWMT8)RZC<2CkO)s_YaI*&K@7dQhi9-}@&~|5(QB*@7 zfBMvaPo5MP+uF}wr<9k*_|KZdk0dGXyMI@-Jye(?VX^Yhm)UC#>o*spsd~gkLHwQk z;t8Ly8^&hLIOsh0dS6NR>DLh@&v*a1+v)eE_GJ6?D~po%_v+(z`iZ=K$)B+O!kxKM zTzsb^5=Qrmv)E0kj*^(I)ZvzfnkVb}=hJ8ySZ{S;kf@6~h8B(}&-0)? z1ty`5htaqXc8SAmf{kLb-VUolup$4w9PtRh?$mJbn+IB{S*7+pkMp|BB8R}tjkAlWB<{ZoJK`toG8way01ffF!rli^eBYd*lN{b}#ANi2Q~1c1-;$ zCDJf@Y6A@`ffV|qN!z|{G;g@pNCRmAwu61|e&(2J683gxwoNsWInbo{oG>+jj5y7h z$o!x*(L@LF)PXdQl~k4Y9$-H4ektr}A*0aKa3JfL+`y5pg8<6%6#@CjVSd{o%BWG6 z!E_50*&IqtGAG&xI09KEg(c?gZBAH$B9lUt^7o|QlGik7a%t+*uT37d7lrwoDM?9@ z#TSu8bZ{a%!2x9dA+wCd#Y0~;{);()(08zofw3LA77_W$D}5JD%of-mV@YUz^hkM0 z!;GtEEX=kh8CH9KP@auV%WENNwWl!0stx(lF;w<%c*nHAC$bp> zc87IBz+p~&W}q{ColYqR0hY8GB^gsP)3h(oY-&Z02Gvg%*7~;POreH?htTp@6ltU! z?3l&CLJEyfv!d{PXDJMF7tvKCekMW`+g~{BRzP% z*Z(KS8IcwrCDx2#67NZEWpZDoXiiFUIia8HS;uq3A1u>zJJ`Ur|6@_Lx6q_cQe!cq2GN)?MMkOoG+}mc09Im!XqfX#K*|gUq@RY%ZUq3P`!UY{zksrZO()Ej62B2cho_e`u6L5P zrzK0jY1@u#ZuqZ?QQJcgw*`JLuyjHmC#+?(79+NK&t!8h4#!6s6G(5(!9@VKHYWg$ zZ~Y5D2a7`grRRWF?4(#cl_bpEh980W9Bcd#VQ79yJQ!Z>2-<0L0h}tztB%MgCOyZR zLQf3nXjkj4l9vTiN{Ag@Hea|@NzX|cg68l?Fn`Gu6;`}4B4a&{yTSYHQNea6*#%cN zsZavCn(wru&f#cGq5WTsCnrx$n3_sk57Vg6IDBZ_f^FD}bK$b*0Uix8$Hp zPk8)sn5dfY2qp@dOPeQv^=lYASVrCJr7Q51utC3;c9*O~8vG53LMt0Qr)>fzXKcvv z+cYZZ5#Cq8UFQj~CTGkm#JG+91>b}kQdh@b0$c(d?JHQ|?qc-gC$HUd{Qe*9E1WuL z>?@F=$wc#=#%2Pb>FMj__=~VBIsB|RP#dt1iV|vNaf2~GqB%$3n6AtD+<E7u{z+xy*9GHVy2id-KSysC&uLXwVHnFxTE-hkAcWIG>I(7*VBhWJ$d}K${ zrLA^puLZ1q*NC|^GiZT}`Fn@t3G-NFlY^yB%%LJ8V`Cm+tiPYVE1_h>AAYz}y$?|D z57y=>mR1q!C|Fb3}j4Stp0 zWkVkNLiC6HvhjXI^7{rD?>prCud>%KD0yg*n4|K;j;Qp@)*A1Bl>Dn>6`iVB1HS9O^-24q7FJdt z4f8i{^oxI4!N&7&B#O?jmMYk2A4YzR_QU(pPbk=+8|}}Ce>#dTl*Wr?oc5sa|CslD z$mZK&*9p&0;Q2cdZ{@R{$qQoL)T`+Hge?uU&jtx%qsIx!Y-F5@Tg4dAaS9S2~1yZ3zu!mz9P zea!hz;M>FHpTYO|+3=l6CodxY4DeTgR*3jE_{BE<>n!-Q;Y#81?B4&QmkAx0hX6kh z=hpdheBZYGG{TiSKd}^Uou4mn2E35tluCsBs^#Kr&50F|Uj@1!yp70<-!INvoLFt+ z%OPXAAGDgAzc)KkyNYMFBTml_VGH-fMmt}QJT7-qc_B`-AK$Q17!{KTxV2rJc{;HR z`cd8w!gUZG{^3*OSZ|QseOTuwuAW7io`7zUhjKk}88YL*^O1wUO67hH;dA&tkK$hf zd;>ntu>89F3@-uyAFZDvF7nX}+-VX|zr>5i_n#;8@lD-AjK6UX9tdf^4+{`Z(fP?V z_*TZNLvG(ABXoSPhDj|B?O6+pu^3~%;jn}L)mZS=BmNTb4uiA9S=?;+Cpb?t$_9C3 z#5ZUshXX&_&jz4gPL9%i_Z@*hek|l@Ebc!LE`VKNe6w~kLqi<+m2mM6+%K*1Q%;1R z*ZIj(_%qS2#scR+xEMIJ6YE0=&w&5W@Mj13DYu5ZrxE6GPw4#Qa=5xYq5sKpS|Bas zC%58UnD{0zU>S5+vkW=_-YVTP=se&q!0!Y0!>s_kA8;qa>)=)c?m+r85Uzn+zk>>s zpLD}*(vcT@Yxfbtt+@Y<^5eAelfAm+*^jxxb)BC)N@WSZqY*y%=Y#KDm(b@F+Se(Z z)jUOMb%Tdw;XLOlO6xRSGsX4uQ(F-}a|GcF{5ZY`Jk^ePpq;#g@M(l8ZphD1B;f3n z4YmR=%WqDPQ=ce)Vf#P42kQjfxxjnkY`kZz&U?V$qdDk1RFQ{cSLu6F;8K&Z16G4? zPt$qN7{FGC@52%Bu`4pD9)1?~RM8%dZ%=#d8KUlcMvddgE{^9t!7;q&Asg>V0x#M_ z&m^4ZgWTiSAF`N!2RL5mJyn1&;Tz! zG&bNA!s}PD`+op`F2%u~P5v4@gF0|FOz(k5+vusQhCcPcBRp#d@LOOYjconYz!&%b z@tzudSB*JQPkTF_{Te*)_%?WyjrujJ1>Upw2=B>-?>NePt^|0`LFfzn**)h@SxlD> z@}3Ji@99PVfO6?Uz4lzAcJAlP*P#!nIl+7I9QB;R8C^UBJr_y8t8f?iQ48Qp4!&H! z&a2Pd@YVH%c+Y2ycZBQTJW}=l{3M<4#=Pu!s!$1S0sY-l<~@ymo9xIOAEC4KKj{4U zT!ho$L*L`^Xt%TB+vIn~$0z9EMT22FoQjuc2M+nc*~sHF;hsl-_mqu)2l=4(^t1yq zW-;&8S=6RLPln5a%arZuxZ5Vahb7+QGnn^Gp3aXu;7R~L;ouLaz#kQmI!ejMdV&)#vgkK;=n;#~XjCF6j;{sW?4UbI z`SIm&^(uY`IoA-oH9G!Xu2N(cT5xKH6$!!1Pq zis4_h^PW7FzYyT7aA)DJsQjV+kN2{&wKZx!Am=~6p~n1*-nXQHUL7@G@V#ctj}-rF z&5ADPL%z-tQE-`eY*hStzs*%}BIGABpKi=I)%@!NcT{}-fe~NLx4edYHDCI;L-8j- zUIONahJKQtAKtI%hWydd@L^+qr}TH1Df$q|8^X%GSqfJ3sSoT5R`NeE^fA&4MA6Fv z0~Ji`!@;a9V9Y`+9OEAt`l#~nERN#mKQPKK2mCqA z*Xf9&`#O#JxuI{pqO0^*7bsZf*VoaHet2s?c@v{xe)xPpxHk$eTU(`Iqdv4Ky6?@) z3YO*L8=9ctp~%lrpFr z@QrBx!zZHPvbBp8tlG=rZUrlS4u9552K^1^PhaxG-UjtW z;F(b)>;)bjsWbd|eTBvzsArY$pr1NwvEi&b{NZrpY&h4hOL#2BwTr&%s2%ZhKzG26 zfwRGlcVqBC|9OYbkIoW(tamNuo=2zpWgHlGVFNL~ku5lk2S-aG7th8~j0Hz$(zvJd zqqq*6nK9m?-#@w#4t?U$3h*(V(K&eAanLa~CDj4H60Qtx8Qc<*3!mG(dLw)t&cD|C zGnB>AExj1G;jh|=tgf-JPd35d0;gjPuZFKx4rm5FheM;R&llrd(fUc4%lATM@f&(W)<4Q?KjNak zk5N89g1dw?@k{@sqwE02XqxXF%YaLQ8)N6kN~ydZVlH-!bi_Dw3}e@^;Wo^B;Ag_w z-Bd1~=U{{-W(44oaB*+=U*c$jXn1>Rqvq9T{bNkud=qHXP!{w7Kr87?e9=0M#r=?3Ebv{3e_3N=J zz~zQaArE>h`IW1o?;3vW+*;&)5kGbWcoWvIze1dKn6FN*LE9~sx~$jvG0ZKF9R)3@ z;@8)R_I_*=#_sRi5D$1f5693(j%~G*&ZNI+|Hn|5$95ftUPt(`vwq4pKh{e8NUs}V z%pd4EIflAEcKRI12T?}nQAU7IorRu$=%e%F8J98Vyuy$9d-<`;R3;kA2RxxmqC9E- zbu|8S@O;XT^}@^Qq@1m{>A&jlBoV-UcE6s(K`tf_=^=?_IG98nNjii z2L>$1n{r35qB{`Zf&P4kg5~(;>&%OS`3KSC(Mz-4ioOi-mtp>3^rvRPX6DLW|oqy1;fBzs&(PjDY4^k8?_2(a0qvNk$7frv+6fE^C^BUu| zOmAL&Ad26&!pNVozdAzEWq!)n8}j7-U76RR=u%#}!=R5td5mLaA8bh3j~@F^Nbiwp&YXN4rhsj~Y2Y>Ny2Mgq5%549Q>EwJ zV%Qmg(HhvziG-(2n3&D(3e$6Nyd*m>3@hUqVOSa6Ap3`80znupKo1cGqoWC@rwn|A z<4=3^U&x9@f)QVw7DWecz{*HSSe`gp8bMdaMl6PXN*pc9%XTw$%GmaVx)8YHnHOfm zL<}9WSVB!q+J8i3IwJ$vLJfPQI4n96SVcE1lo)iFUVI#ei_iu3*q308;SUm-~ISBCytOnpoGazhOBVIekfUogejH?etE{)pyTXT1f5z9j&`Hr z8FZ*2>64xy!y_|r6liMplYMj?`W19}e%r7*33`<64dh?Is!~aR7%#zrb9M7EVB-v~ zIDd}vG2m=6-%YL&l`H_c_>BFEqbFvcMcavqZI^&BYyP$59=-Lb#^6TtvHTZ*j<6LF1L<(oP*|ayz>g@ zT@yja+N~?qCU9L?mv>=p)_DqkCiVy1@YAuLve3F6;S`N`&46!rSlAtgT%C7~1#X1D@%^S=%+(7RCN}vL@G( zWmw0LAo++>3;ClozT*jm*J@aU!QZN5ZAJPbyhi6;7c}UP@D}8K7yNFx8t5>h7xIt> z-YZafcI{E+eWV6?Ao+HwKhgHW-9UMthu^OFdvvT{HLU+4#=VjU}sqtQllY1oxE;8T$ z`HV$;Ur37z=DSX7DH8?hCvkr$MX(?4I<0B?;a*F-8TW_4O}O$E#e~y+d0XMjH27sJ z;RvRmNSA+b4Z;4n-kWf~-_cAmn$Op9Q(8*i$D#~$-2EAW zqjzzpcK+LxKHQ-i!s+}iy$|=XP2&Dm+=n}~75%vU@vUW2myd@j4D@?vn9}bo_+kW} zzaw?_Sw;Qo5BsRhlzx{kAZTiTm@f+Bd{)v6IPc{MTqfak-x!RlM%<4_2ps>Ly$^RN zAaSy2lzudnB5!Aj%}6(-a0Pw1k4Y~o7k311yyDy1hdb0PaK15wQt}S9BZxFM>F^EQ zL5ceXp$uHN!s&guk0%P;!?86HxLk>g>FvW^x-N01i+#95rzMUsMjC&LMG(655=y1} zG35#6_b=@cILx30P7mXJR=dFQeSt8JAL=Ds%|l-h&5$>faQZ_x`s#>?5kK+$5AW&L zc?b4g;|^l{i!Wxe$Nl2_iJnh^A7;nAK$o;sw3oZ&c#m$2cdZ0}ij8;ZH7xG02#xvPw00SY_DNIe=Fs$i^^B& zhxZ2^`)%G9lyk>2xYKUD|B(82j#B!b1OAFl)KB^zimUUEi_rI5O2?1`b1cZl_<0fI zc*j||8!Y12H~;HQ#vbue)OEJ3kIppA@3O#uRb!?(2;1P|XuhKJPCL@bbKomu#JK?X zDcZ+w(1!=`z6gFMoL0=AzDDv8w!mTh?Hp@o31jfSXgfLm3=246>cB+7Q#>4g2{fbRJK;3tqhPw=RV`z9iB-fnE>>;z__KpY15Z1JUCt>5uFo(syB16(L0ako;^#>NW z)B5Dh#8PuY_OwSQJV|y>hhiPCVm}yZFYGH5VT0+>DKMd1fDMsJSW-@c>4wq&G!(IK z#h*Nq)~nf*un9qnU96O8y*rXw#d;fSoCha9?#|1B4Jc@XDzVbK2bRht0*mnpd5;bU zekklEWy6pKKw6=P307gxORTkp=`yhc0RCk6qmR1DmT%b3B73^)z5+dAbQ4yWAD=o6s>5mua`EKw zWJCVr`DBxYwo?jVSA~V~#!oFr+wi^~!gf&*fkQ?$w zzvSU$Ng^jZPn1>OG}z$8JtM=JRju3eU9jCkyBET0Cd%~|_-{bYP-6uONnyh;cu#e8T6mo8?F|pSQx(#@EgArD0F2 zXbpYZi`6so+aE8vsT}B@l|Fv8t#%8%*j{7F{rTlK+f8_5gWxOu_>GN({&EZ(xXG$L z8s=EZR0%AzP}N8M(ih3~Up&@i2`uJWHt#>iGTwH>iuHvK&SZSM7gv_R(WhkU^G;Oa zeeYvBZ%rM>Qhubvngzz(j1=BFet6ki1vcI~POgPp)4(%Z_P4DgvgU1QAE)Gz&G#`; z>%Ug4|Avl|{afo)*m|5kiGAg7Pr!%l2@Z^7c`T-6miIp~rnEZY3f(vzS0d>Ju=PHD z2JG$^(|42e{%tGLoojpP`?bvbpG(2Z=d%I7DV?_)^O1QNyIPkmVFONA%-fx=bX(qz zxq(>!dDrXg<%Sg9o6!pyLFj{iyLG+hUEd3T9bA|$&To&utmlHi?B6f>y|E#`H+`kwJF&#? z{mFX2_g5Cb_t&w0--mwqJN(>op`AZn;P!oJ!8gMxXggUNfBFdHGm@G2+PVO4Z1=-) z-ZtJ17l- z1zyY-hJONo$$Zc$o#mLP+TkcY@Irozm1G$(;r<@n4t|?&HP-L2tHIj>6i48I2aLLJ zJ4!gz1w;5S(Zce9A{x137{94ugX(K!ymo1g(Yg ztZ55=SIKxwJn5wQRnwb~>B8$Q&J@S^cRS!vZ{KYu)!MOUfHT9z0L0!v_)Mt) zr#c2R-y@4c!SN0{S-SKPgBcv!dwLr__8&s4+vdF1R@(5j$H2D{XPW5-R-6NTOmNS! zn&&(_(5X2@F$jU-b9~>u7Ilt~zj%r97kdQ{bW%QZ1Se((v+4X`syoy$mX0S<;OoHf zW!BL8?2?#Yl)R3U$RQ0hfr1GO10@c@HpR}-Oiz;5D?^)eveRA{7xV@$$s|UKw6Yk- z^%3~IApG-H(ONP5!wJlXui?ZWa)(nAft(W4ZpweyqLH#*gk!0F7LA0Jqu8eY7L9Vq zpb8F}Rh@0dalvLZ&&Xd`pJn~@iLMt>EtjyYT6R_hdu33Rxw+O7|;0kMp$EI zHTJQL=wlfnSa9F3GsikGN2xUiDTzPx(05_n1KklKY+art|DL&HhzXSM0mF_=~gasKlg0s0IA*cm6wyTb@9d z2g40+2v8^8Wv$8ja^T2uFP<-Hw}R|JsGknMJ)%9c{^zJ;n(l$f!LAq4bhc+amVoeN z`4o|S`u=M%mNk4&0`(oT zKiPx6Yfqp*tSx!rJov1#f7z2~@8d^a_vGqGLB+?zo%{@NBg3$_c|PDV0qUQq?zOy>Z% zgyi6Rz+{A1M#^K}mKApBsL~5iHxfa=b@?pb6NH>vBY(SC=6ZZB@iV&PWiMPS%dBo> z@q;KYWb2vEdo<&|mJaytMIUaBkben!U4pD5+JfJrf8KMZ8@fl*Iq1Z55ckSl!Tm8B z^rJGpz%nua>BWH{YvDz>8gZZS+;OaYPL0Orx*_XRBrkqnL3c;%e=$x#KE{bSH;ox2 zOSm>X-xw#oPn=7`*huHUk^yI6yw1cpn#x;j4skvQ@4tD=7|0n5e}vAz4H@5t-Ys_E z#>w+JEm`t>PRpnOANLu`d>-hih4qE(FaV|7C$hR@n6Pkhzs9>Y>Hp4jDcyKZD2+1I=Q+OHB5)|fV!r#MOMG|PWeb~mh3~%Di}`nr_+EQPsgCeP zgs)?-{RZDv@j2gpiP{8ZkA6vN{AZpYUe@_8v9|If4dz*Un0bDRep=Q)!W_@f%s%+_ z(af_UEktyTFRZ*2{p#F8#&_X6bBh1dLbw&8Ecx6?2*-B=-xq(42e?|KQ!V-5n;K1j zcQ5m-vBFI->Jj>RjQAA36-@05yEM~nEE8*Q8pC!iEMqahSweaC{_>)O-P=ANwB=~) zpmDgRmB8sl=erhZ?9PSoSHP`A+r9?hk9zCa82^8%X;g3gmvK5rnB>AGvxGW) zZSv1LxQ+AQR{rCIHp&x8;J?hpMIoXcQ2waC>AVPJI5E$-K|Z+<@I(*5`QZfJvmwu* zbEJiEK?J?P0oX=*P(2EtpPR)@al_ahA5+@22SocnGvNrH%?pYn;#WdmS3O$>u?{T?g~Tw=!o+~r0Y+|^NQ#3hbs)8o9XMTnP)xbhfv=N?E{l0qpHc8kZDHvu#v79*yt*I%>N@bwfLlp2 zw1u$I#2d%BdE;0CQ+bi|tS*OZ4S}Z{j%a?kV%~`Q?{h}`W8O={@Ok~%LRHVR*uZ~& zf@iW4HNMeUPBJt&q_;}v4WDU?e~dQM=+}`$Lq79t+yuARfRWZpz*Uhj;T*hiHOUA; zo-yY7Nw&AX1ai@5G_Gad9iM43y;k6gfvbUE0>9Ca$2=X7)7VVyf%MRL<9?BU@4x0T z@4vQdmG_0f-%V-A{_}a%&0Mt6#xCNIYD*k8OFbJgru`y`d6%m3cjFm1o(m&A(wQ8! zaa-kmH6#PF#QcwVq`nOn==Bg}tRpi0zJlEr@%~Tbrzt}R&QCh?ru1(36xVlfrZJ2+4XdH}kVAAMKJ)B6LooHvN?sL}hd~Do_1{!Q@d&5!rb40< z-T~OQxS~VWM-$4sX}L|Mf$%bthq=?tZuo{g=6R3OLm$vospP5W|GjI(4}2BLlYUc` z$P;v1#Vn3Yao!f^ywJ8*!cl*=npq0){0ukbBVHZ3b-Zbpl2=Fdv4dGA*D{M6_xMiV z1xNK!51;b2mkmSSnvN>|gE(L8WW1?$4@-zM(x?6(Yr^R#SlkJUbA&ftQT&&*ML|3G zPes5K|6DhF;Okcq$B=PBrAP5E@~^4#6we3RSmRhce^)>fKkId)|EKm79FK{i9fZ6j z$iP6Fm%xKbn)f|F;dJ~7pzLJ&L6l)IT;3EWXGfiBkbybgbgI8GJeV*N@#S1O=&%!> z2a{nu_A`<<4%YTarpAK>#1G$zHhKj-V~H-F4^dyi+1hvGyMTW}r9ay(`9BA)4C}uZ z_?%=w_NO`zE~EGn`s%>xkio%MVU!iVS@Tcq({DBA1=E%M_29$&$#@=u>#2TMA|1kk zR#h$Xvdrp`aET7T8@htFRp-GY&}k3C0iD0ny9a4(;=zl=qt@ePj2C9$nO_N>R_vMg z!pApZ@A*k*ZNWK;dkQ?Yqz~u8OC+0U1UmrhaK&)oxxl>JKh>Zg<-eKI^|T})eo&SB zRZ8~;+!cJ=2Rxqoz8^jR%(HT$2Dywk#GxN?gb?nA3&8o|2p8%8r*xq!^tD&sC-R3r z34K??B*0rKJ?8bz0GtoFUcq&Mp8y{wi(6TeRV zB^3d0SR&$kR${*QkG}@IoZ@J_VZCTeo_5v0H8oOOY>$+W=p;wUJC8f%u;0}n=4Z_F z6DywANq~2V{+$~IS^!Ra`2yNk!wtv~0uoIi;ZyYzEVdY?&@a($A7dnjPtF+yqI*}SK5dBp~#!=%PQ`} z{aB{U*Ahym%dcLJc{kyFueINd`x&(p=z`aF_=$9VI`u96(!E+tINdj}9lql0v?3VI z=lfe4;m{6=hNz<&F1|TcWpHCD@##Lh4qxH^&pN^pOg~wsZ(?lNc}il8_VP(R zaJ~I-0l@v@UN5)_XGDUZ*sjKZglYfJLSx#)f3DC0$E&rI>|b`Ef9mIsM-|-qh0N3h{s6-DTaeDiiZ@Ty!UxYd;MRh_ z1L08!*T4lySMVQ1ct3@=@-?iL*DnK47H~Vje+J=ngqz_GQyG9Cb-v@Q&g*q;!O6J@ zUjUC4ei!(!A{>u!H{3^(e>=g~1poXWLC*F#@G#)cIr#P@O?;EL-2(U`+zqH9ekthL zX#AJoe>{Ni&)$ur^1}EO>V{9UCA`@jG;k*ZAJ>-B}Xe zSQstutq$gS3;WC)Mg7B1h@^A=?h4RX!&Ojxg5794I+cp&t;?93WAF7{vdwn{>9)xQV?rSgJf5mquSC1Iw!MxY2F(27u_ua2k{t*Y|Q$HT? z4GH5+0k5BA_YGSq;j0yZ^8sI!@PFC>KVkP3bt`xm;91>aeLi<;zWYmn!#5$HcXQt` z577dOUX14m{RZYtPo4o!xp>B9Uvh!u>AZfm_DXUOXv;AxIYE1T2G1%!l59_;=_oHl z9{B6Y^@pkdS-0R$3;=TNw`;-OxmXiEh4+8c1HxJ6;=Ag9x2g3M(%ak262_A3BcONj zOx0g)vm8d6-AaF*Z?kCN1OF)s^TiLWAX;Dg+bo192cC~Ypxurxc#xj)qvxOIqPp*` zYi_B?Ze@x_=#82d%-XEBNUAF%Jx(^w4?2r;GY2B zuFd}u;m1SX5%5oqh~EJ``pNAR;l_c#5WX{l-VAwJ3+ z^X@u|xYcO?%iz~{gHHTdkD)z2uphV`cy^i*K96u;f9c(U@1vIPxBG@KlKe|&fZm1Y z!7AbUMSzb29xdU29S!&t;CczaOS+!}d{D)wy1C%?4HIob^9{=bd;@w=*j zCd#TF%Y6A8toncEsSin7U7V2TsW0yZuLGu}CH!s@?3ML0UWb0VzKRPubynDYgZw(Q znYv881H$`U8q?~=BU}dmAu2B!|1IcWHyrQT&cL;I1CQ_6?v!;`hq0v^`-jyl17ZHH z7%SdNjexXoxeyjmMR_QLk`+*-6GN%KK8Td`|CPC($I((W5OQ*uT%UOtA4Vcc%{6x zb3wy+vhyg>@$J?&=6QELaC7YoyVgltc6DeEb*+;B-A0vuv4THxEbP1vx|m-fF6zJT zXh6x=c^%$g?(fwWHjM}VgqRbduesU&Xx(|-Ot+@5{~z3bh1XrZ&hE{>!MDbJ&h9-F z;#=d5`cE%4_J7d7hZVX%&+(T^e8{_!4TzvcgX!QBGZR6X~ALfE54{j_Q z{3heuCg@PG0I>7n&}Awg^jR}!p+9sW&$y*p?58~sI<3(Q`AB_szy2BffyCgy7TsL$=}FE6|2Ff$s|V3g8|>yF%Nq-;1QeKkENUPv+fxgJk>R!g^Qy z%*OcE1g&Cy9Q=s!2<1?*ekE|}qD(4&j{I&Fx<$sfS5%i9Fz90d+alocft%8+J_x>v zA>g~=3_9}`p|9`U3O7@v2O9VmX^X!{{KcAt7v5aHTRnczME>}UR#rZDlL2=}$QN|) ziL1=}cC|s*UfDAYvRB!`r@ivtDug#O{z6hB<~2vGflhVkc}gb4oAz;WR4&Y*!KT!C;`pU~X-&_+= z=~4Lq2DUG*-bngUT*kMIv@iZeBs}Kt$?uLxAKx&wLqCgi*9z-}_6MELhxnKU^jKOb|73c+o!EqMfO`|X29zCyqmG(W=3 zvn$u2k*^Vszx}Cu@!OLi|0$ineIDmB$2s^BY8w}+{j>|7^`j_0#eocz{fvqDhN)D> z-x8<%@cb|3s%X$WAf^=lWA3_KfK0MFNX?Q-;!v!#8E+DbQQI>sy1&r+i=2Hz@a z53+Uz_;&!tESRCK)^Z1IY`CEV>^-1dYjwEQRlF8$t#G^>@8HQ%~|0Q^XH8dyXwd-{p!)1KKXS?9ngI0s@1zRO;EA0*7J*OLdM_KvvmEgOk^ICkd z9s4eDXcM&|9m$_STBmsJnLT(%O8Yb&E3FT zQ2#_v2Ys%nAI~AIabovS*`sXn9mLNtSK5rR{*b!{IGlmrkM&AHH^RVAlJ7z{Ptf`1 zJm4R)E&gFV#RDxD-}82XzmsGE9t(%E*^Kqx{&K2oncn^?z+(N3?|?f%F9Uo=TW}uZ z^yZm(w{{l3C&2Fi0=|>#yPf&(apW>wv!maY9PoCeqE2ucOWlM>uV9+%@p8 z)A1akJVr@*o2{C#o;k@9fyUc6jdimzh{p|kFA*U4MQ40Jk^1g-5)vzs2W$~$K7vu4sAeNy_ z-gn6Rjj&I_uT2sTRjuPS1DvUyvB3cGo(=Pnh@WG#IQgRCMdDKh(~}a*;~YQ4ZD=u@ zbDgR3`m?`)VRMMCKB9XU8-_S>hU2Xcb(5mi;-si=te@59X!?iJeU7z`5>rgWx7+f? z5s)cJb8x%W+?J2ak?69c_dxt@{$7X4VaDa*;`~R+A(q-ALzAs6uv?M_BLj_7QUmWs z=z7bb1FtA!8QR+Wi&!j@Q)e@D^~weBRu;jPtGMBJDvA0a9BIL!4n&D55w~BPTC&Xz z58^Zk-5K@|!Y^&ONBFZEh6=x6oAAmhTft>7ATdXCb^{$fx&JX7J;8P6r4(L2na%{^ z=5mAJn|BGp!7jRVi;jQ9Wz%g^v-Y_xO^NwQeNmQ_X!17Dz4>dV8dx_L&>`k7MhQmE|n$PPCK#E8*7SoD%NrqPx&75O2Akv7`;qY>IRgCLGb^PseK` zxI5tD;ReIex`^7&K)3f1G1---T{uyqCyHyEx3tq@AS0k>CU#(C)zQ7htpbLcI=!ERPrr7&)`p9ru%jtXJ^*t< zZ&E;9WFJ3%Dzu3GF!(&$2)plC!>mLN7s~RVUqK!Q-br;l@D3d4VKJvg71~=0MX*Q^{N$t1DghVyH33k)%6tsA!wR z$PX#?-}!lJ@Sfw)GKQRs-{L7W2FjlYqlf2^B}}W>+iQ@RrzVYg+E#>V(ebbs*H#jy zMaRQ;N4JfK?}Kj}5BnCiM{Xl?HfYzvv}j%Um&C(3aNBq*nP>CXu*~Q@V9&3%FieY1 z5AT|88*kT_#KSm=cNRuHM5l*6(E8pmEjm5y2i`W`mD|QMD$?_F)IWx!Tc-PS)PL|c z>HZw`f7^Jd|J%kx{Wo;qCOy=DFe^-p%ID8f|F?~Y`oC>F)c-!RWhZ}8<@$5f|Gwfd zEjm5a|83);{%;!(_1|_rEHgSi)PJirOp8tr^?%!VsQ=r<^M=r2;AiAd<}&)PK`Z~3 zGnxQM-m7fK`PK{Qq9e$ex4u6X!`nQ6;(H0sLQ^(ok+?WEHz%dd8L;ABR~+xGkXLE8 zDjxH^w z&6VUzNpa9vnwjFVpc}5;h-Gi0Q}&qho=W6@VO`{~guZzr+*_(Z!s8N7RVM!Vu564) zDE52jAjOyxG1!P(ZD-+j#GITSKNR-IYY8aV_LZp?jC*<fqdJWu!Rmn2_w^*u)4{Ly?^f;wYy~|Cw;ygV_%Fdf zXy=tv5x$P_IXL?6Cm!YWAoKn#*&)mMu%8Ediutu3?5S8#whqoKCxVYT%BwPQ*HtQP zapWQ{)`8VG;64M-aC*Owa5pP|X$BP={f40Tr~N-!|IBXT8_)n_-iSl~Yv8;2hT+(w zxQ=h9%#dHG^9`xkuSkQlYJ9^e_%^sK@SFqP4gLvu5BA%Uviz`~+>ik`8V>uT8=%t$ zthqL%*m-R;_{V|25U>;R&j2QQ55eWZO$7gJ_-+T^(5&+fe$cbPUk=<1JN7^Trz1QS zt^{r-_!q)2E#@0Iz6GQDw1R(y_@3K&LKcq({cos)zpe`VJsU;--ns<-J=puf+Ihn+@b|)B4~P2SfcoEn`ri-&qZvnjn{8td}Zbuq`n-M+?cNXph`0kkAOBE-HxxSEb$vwS4K?JG*@O);hVWJAdJtZ_=Ta`$*Xso zz7Zt>Jv7C7tGrF|Y}(1*26z1U$q4-zq0}9&v_$(?asw46^l!LH{1PnAFDhMG!-|Hr1+JEuic$spPhF`4DcT|S z1IUlrLL)?K(eO6ch^E1=;fOtQscZPKq7gJjIpP|bl!{>{b^G^SX}Jg_eTv>63n~K= zWBg2Wz0f(2OgMlDpwGC6Fyt|KD&ZLZBnqn^83Y#hH|_ys{P;W}qf{FC&>STw>$q7RUNZZq#wm!B`YP8pPwyxp{wQ#UHd8aG53 zQi0~nLTXZIkZ_f{5%WSnQUYC@PB)=byz5lmjlt34;&llv4GtA8XW0eN-YOStAx$LG zhq$0+t0`shYmz%8ByE&}DC&~NhOyN4Xx?cg5F*W&9-`*G$Qrb@Deg$@Iw|hDCiTNk z1eNsnMg(6Zf0;}sII9m>+VGeFWSYT=eZbN=q2ND>dKe{;*R64F4%jq-lom%J`4@JJ z9W0b(d|R$4)ydX`wjt4VNA-jHWRqznX5a~o zX^N>b(abJ2rfJj=mv!|{_D4Z>V0tgwSbC`y%K%CUAxj$((bdd(awq$p3DZDVIz3(J z;OMc~mJ({feA7V1ZAVyAu$AQ^V|5LdEb6VrHCsu>geonH)+S#l*&>9-?eqMY3>tArEUTq(g6v4(O$7lA~l zGA|azG9;=}s8QgDcC)H(yD6FBqh;J`h;eOECDZOt!n_}2=E6caH{3X=-($2Til<|O z36~Cc4_q1?Yo~tB_}#+J584;j2<@u*>`rui%~3QKUE4!#rF&%E&WvdoDng|g0)8n& zJJ}mK4flIl`M3P^rwToB%*?jDAC;KI1{=zEVI}p~e-0eTGv%0Ca?HE2^dMxOIS?o@ zwdOQrVq1IRsJ47lz8T##k@C%EQ}A2#R|pAYWr49 z$u_pM)XLiCJex1t*{cP?jGQ7%OjE*~hPx^0Nu{*?iVkN}Y2ZJw>uL`CUgWJH=p}M` zTcSN9CxC&$w|Ww`a(&x!iyUpP2^fJ`VuQF`FzBQWvc{SDd@gjX=0JR4vTAT7@nFcmxe4P;kgm5Ij|vThbybE z;&!stR03HWU0JlHsge#XiY$s@N{3-mhfMWU%j~;`iM8>-d-|7vkY>>ESY){}W$n3! z(ONLml@ZPXdIJf#Y{)_Bli_Y7=~m@efTnp}R$tNRn5IOdC7@?O=klScXpE_7R9kLN zV#YAnq@uhwmouhmQfX3=U1h^AvoW&GWp8*~HcZzTvkA^~fmTMNSaWvVJUEln^;m<=BoHjccT9L^#JZ;}L*s zIMo>?Et|VcFgTMC^f`fw4yTaQnPAxol74!MP;XthPwrZPD=yO9yHFSlKG zh4M*krsrT;q39g5N|DE+w5FJ)J6TBL8}1Xn8v}vCBF7>;@h%(s$~nzW3@M)r;?nG$ z>_4$rVMYgy0$qg1hkZX$OO!Futbv!}?f}(|QO%Xn@Q_TXbnjD5v4ICoGhNA{hUs~G zBzK-!aAJq-Ztw=bBa;zbh*G@B()6IC2%WrdnHvM+{Xam$*FyAYB~f;>T$(i=!=8EP z=YNBFvkj(MV%jICUt&uQy-Z*)o?nxy^Lp$F$ts>RBarS8n?x>*4=AMYBMh+67)aMLkM=c9EorI3KuipCi_lftKolh2GmX3wSPpDhu3$JSe+#$j5#%e@t zUQ4v^TC`k2>`=rMK|CUf8H#vH5l0AOuOyC9#7m0k5X5Vem@A2OOc4u+SQjsevlP*) zh^2yG0d>D3UaO5Aw|wbxh6pKN+S1WHTy&1|xZ2kg~Z!MSoC z{OT;co8m9-umqoM+sWQEDF_eB4|2?bF4NObnN8>w&@y0iFE^!aN{N}8A3dDgA|B2u zM#P54rl(91o!)mZ1s}y|y^3_eWU1*PM^Q3`9a5YaJxEfz%Zgc@R7*C{L#(b(w1f6n zi!i<_HRuheIiGfVOMp|V)c5g&U=Ay@e|ic)L!DjNrQP|(0-7H^k9x^xlhD`)(EMoO z1(q;40i}k1jJ{70b}^fc>d@u;O{$~8aOfk|kH3gLg%`^s>dFjCUwtL|22EJ)H0#a= zr!#neZbPPXrpkrbGncjxQIhY3AIvt4n6N2{p#Xm|ZD0fM5r1+^LzyNsni+r5PqTx& z{}P;?sKq&FDS7B0P$U{ApH9>CB-9s5KgDUnTlw5yxU}GiZ~_4vz^~*wF)bB>_k=0S zoTl8=!nPrJ&m2?rthG(Rdz|LxonL%g<`?CbU$@OfdHmns|CYf2mcai{O91mgGy2a} z=s^dtff(KR+)&i}L_QaL+;h=pqm@<&q-8F-LpWVDwzkKP(~V213QS1!KN$)(j!Dk#-GbL6Kw zg>7?l{<1m8^Tl6+kLNZFMa=l|Fb_)%Fy*_=5f~RGtj!W3>?Y=ZviHp0o!f9f?UsIj zauHT;C>S$sRM6IKo!ga!^&h@zK^6ngO>UZEq_b@dLSkpqv=)l=nH^Spl>K)m^XR2p zWR?OnG*^}3tsN~NT`8FVrnF6-Dfe<{j{|#hLIXsaXL%%NBH39^#Sns0vc^l&1dL8| z8$+w}N|)zh@j@@}tO;^>!K++MIpw|t#@o@Te-rj2y?G`G_K4P~=kv`MMzYO7fp$75S1P|JfqQ z*AzKLO$M1k&LDDKydsZKWUE0QBgpBBY)oIX46>ZRj#6Y}0z1wi%Ngt>MK-3eZb{~r zgF<*=W4y@tpBME_MW2e8ii(~Jgy zfC^a_T(sDw)*^MSOI&YgSb zrIHurV}!;6sGwGX2DhZ1b0^TTr?)>5GgD$mrs(%b5I*$Y!9&Z@fMeSq((aJ@hu9kTF!h<7 z?5v?f?@byCv06s{fAUbz%l~hl_Wx6j{$F1HuLOEt0@^&So=wJh+l#)FKdafg9fk3_ zzv4Ujv2sWA%$S#_#J+-!$+U4|c1vFS*8$^Y)~@>!H|8g{56an4<*&Za(UR|2lM}b0 z8eh>Looh0G1F*?_Rj$GO-CQuQt^#`<3~$2k!8U6xptxspa@DRM{7yYoMMDCX!m2RW z$@>SSmzJmPry6(&QC8BHXgu20woYM&R`(_z@?u_;xH;dEKk!CGZK9o2_t7nIUhJXv zm$8QkY;Sx@KV3)*yKwM`!PpAi^V0m=j{&=1-?r0f%$tHV7WCy0hBGKv*+G|z7V_L<{k}PR;rJQJzpaTMDzy;Fkik}Ul@pZ?8XudzYf@tE_eMIZv zkHFIei(5ZXw0A5td=pXfZEzA%D#c%0s%YTdA1*d% z{0~)%wxNJ%a?ykTL6$)W-#}qnx_{8p-QXvh#@9^2;G?v3zE+LaPBh6U26QUgJ0w?+ zyI;{Z94DH}+aCxfd7Ty-!7&};ag!#Ju-D`IXNiZLj4OII5Qy)Skxm-zsxgwr-;umZ zmqHor7ggkI`W2=CL>lk93>yEWL(w)7N#`3cX?#4m&K zzSKf%)o8~}+8_0}9VV@?UGj;AttRc~nCE4=$SZ1+9( z0RUGFF4;VQvZ`wsyCtXK?!qe&>uCqcqkH-B%!6-osFp=+aBqx~_P4`q2$69Y;gy#66pxqh(s<%A$G=5y81;Ht zs;9qjW9ouhkufuWl3yI03AKkfLj9W+>3>Tc+dlh6IPOQNeW(YfwweT0y+ds+LSZ8*6-ag9`V*6u>9J=+!)Z^_=090T4I~ua^ zt6ezn4(pNUwqV(F_;vV+t0<3$xZb@~(;CTQArbBU#Cmn}6jy|_t|VESvlaq#(cx?_ z4sqS?+?V8G1JHrbRdwy_>#F_Y3jh#lj8AVoZ_BUe-T=^8}x_4?<_H`&sQrv7ms?HwLaU#kD3zv756*fgPO-7M?y?^|LpanE}&Yw~`#g1&$|V|J?;- z|J|ALcVcM!ugaIkrwV)jGWJ%;B-Hq1v;QPDo!+x)%(R?=sN{`7yO@dkhatxNneS1h zpefs7D9u>Ge8eA%VQC9(!8>|fH6jaxvL|<7{6D1Z=k>P(KBIGxEL>)r^1Petf>69l zjGvemH0Y!mFz2# z@!okj{Th7J({m}9rRPsA$j;3uMDzl}b-LoajonLUXM=9Y!(rd(AS~YP@o@ODIWiiH zohqzI+{J8IYM~+!HX?Q%&LeB@R>!IgU&$nIWtXENSX6{|2S7`lur54^b3RMy}R+U&dzHs!|X=9~c z;lkrk-oy}_rz#{?mJZVMc|1f97cVovP*$++hvWO-PVZBimOEu?>Rmm}hu-dVU)FcQ z3>H^#59Sf5|Iu`C`)C%InJ3F%m(L9QTG~o{hT{WV1`MFephr$$58&9@+EDPh15sn+fw(3c7sHi8h@@`D#9;)2i+I;C^}KSv^ep+_%-G-iE>XcipgKqL;mKT@vouv zNz(=B6I@?wFrTov?)gtyxP$U*$VZdH{0HT~1>>p3iRmNLdZRxNevRQkWsFVQsklb@ zuRIl1`J3`FKe0IP#4Q+*amue=@LHJ3-)iAz%scT!H~jYY=AB5lk&)!v?;m{=>bv2$ z_ZQ!U-%0*W0s0&B|1EFY<|p1e3uyj7BY@q!U)b_)0RK__exc9Xbi)}KQ7auYy#njB zf_eE##NU(^yP;||J=sa3>BXun>>%F*hFffe5r8_!BogyqdYwRfEvfBd*S=m@^pbhj?G ztp8bDBzb3XFUd4w0n)>*+3Fe83hSbxZVGd_~+p&`z(JFJ7ZjdTSKC%rGL$5mP!t9zcFIZCf7r(XQOA zgB3Z~wH(g5KWFHEyu|Pt_TbHu9M{n2y#{`?JKvFYs3H$6dH3fH-A`{c{FAPQ=^O2; z{-(zi%n-rmJFD)A)F$zb6Y8xL(|Bi9E)S|LY^II` zneWwN-qp(zhI2gGkamq=*aLj;VP_8BEyWu1&T-h>jkm9`{RtmLM-9SH!P*19ladMp zj<%P0fi~C0V?$wM%0Xp7a*}#yy_`)ikHVNFs1Kp-961GV!XUQ(Q8Ba&#KHH(Eb8c> zYQJ6`zHy#!aVPx%kLnC?=fA}E1A91*|KLlnG;SgDEerU8J=sJ?G)~RWpu^vs`4DtTG zOOA8eWFvM#*WO&&@;+{`gT5KS(X%WWf55DKF=e3uP2T?@|5pN30>*r3jm_SNYHx0u1Z`o| z^xT;yI8lOne=y}eZ7bjq?YE(yA*6xX+OMVUn(~fxC$G`eud!rZMGSp;Om&D0ra)8P ziEic5lwakSKKG!5XCxS$-?QDxqYndULYivB<=3z$=g2-K$onUr*s9C!0D#M|C$LP6 zHp1Ps;%+%0arXJpp|qZY{n1R|doa?Dr<}CMA zR66HZ)>eAUe3cc>8jrWq>8mQMb$V(mow=z6&g$AapLbEYuiB$lV3qK+6_bmmtejX; zUAJ%&{fwQoprQ_Id+xeP?(*9wxvT4VIYiw)dd#Fc&mwPmW!)q!S*4FE$jB(5rQ*>O zZnJ5b(op1VNNsS^PS#Go#Ey?oe-Q} zR(q4r>8o_RolB}Jsf;|%y2{!LCzYsYiL<(yUdFp&9@Q~3_DF~}0-F?e=B`MVd7g8Z4 zu4y)3*KUHd!b3S-Sc^;90t9@v>ZWNlYa(<<^ZnUOk`X#o{sTswoqcWzY<_0v-$(JavxG*)Z zh_YT}7npj9@>26sb7zzUbsuZhgoeex6g$#oP&|I)nfTRF4etZI537y!YdB42do!M$ zqT!g|u^d+WnadWRH!%&T=QJ4zpRD0Z9&hPy=Wj`}<7d1Y4kL!=Y5cpNYIq{>M99ms z@z;KqtKmw%cc_`Kyh4X2xmIL2F?8lC_g_IFxB0Dp1- zu9t@vKjpL*{x!t^8slYp`Ah(gvjki2u*I+aOfP>GUp&;Qg%1J$5LSC&nucrT(Gr;d z=~}o}Khxp^@PP7d(aTHKckO4T8b6YQ<2Sc!xL)3KG+fKy`)&VuAIYCo&j_!VB$tk+k6q=)ys z9^mke`2=MO`@h!)(ZsJl#u`Bq1(PFXm^kt@e(iC^uRaZ;aXRC%Q9T$$pp4638$*14 zZ)^vAbTl||RR?~tC--5(bQ;amVmicHmq~kQuB1&^={9M!Wf>mIWB;R(Duvb2OUYLZkF3-2w|ur7L<{`JPpLn=JZ0)F5f1 zcPo4?zoY570@B^oVWDYdQ0=nNx&X&?OsMZPX}4;5t0t0?$3N->2>mu$^c#e=YDr6h zucdqI7)cYGIxRG<3^uh|XjJBqcYl*XCHBp=oieIxIBO0q+{r%XXAN0b&r{ zcObtTD1A+rhn`h5wNG5}(d&T3_qY?j#y61UK$i!PTWG^1P26meH!wxf9(P&zs68U? zLqyW$O_VgT$#2qb-Kx>%n6!a1A052;w1r0N(LpETORkb8R{ z@`^Hw<5Kfx5TC?Hr>6IrnmQd@1B!Z2O)bdGD`LH-<`&Js6Z!b``~tb3qd4_0=@(?n zjRU*&7GE7SkwoPxiR-F>V@p?ypdK6&1&4r{@(z&tAp(&Fh~D|BMMe4PGQI4)%=~!T_ki&DqN&*s!}^q_q7+7tjY~}{qbJiAE!=wbnw(LTjvV)z ztTz6jeo!w+H;c4@pQ?PVd~S=&mt>UJZR4oKC?9G0lV@O`Nop|)68ndW&`emLg4Du{ zyyAkmRFVcf9s7uK^V9oe7G`8Xp}73QyNHhVgxxHt$7$)QgvaHkNxxTqK|wxx2Yh+2 z)VrX#Ff)5P+D9=OQ1By*_!6izd~3YJLH9L4I?JvP&|G zbUlpy9_f=a3$X_(F27(b#n+O(5X?3^juY4FW#PtpV8RqOs^rnI3iU8t^_ERTr=uXxS_Mc|7!j->`4r0O_y(7c9N(k{dTQ zNn_yCcMR|$LhLWa{e$*hMJ>1kg^Y{lV$u-4g)c2KM!-E=oS4{Cb% zKp}K$8er2+VQYyGx zVg0MhV=ICdk&O0Izt7fQx_J&alb%r8p2MBMw@&phz*4fSLp@ES{Aum8{!ow7J3{p{ z^8|j@Rau_lo$4-C<9XPc!M5~5tY5Cf_fYwoaW1L7{8-gGuY_NVM~Z8P>u)uXCPs*5 z>nN(ky8gOf;`&dB^yr(S+WO(Dst2*Yi6;@jX~q9MrLn3QM=xOyutEKUx$LQn4f6S! zJnjDA3WQyO`_1h(-1GW3HGC+-hcf<}e!rUtJdt?{_4|*n0sk8FEN;^HVNbB0;CWrY zzrGguwYVSC@299;p+a( zvqTTq^>t|B5C`X3tlxiY>7Oaq!uul>_g`o9`%w-54_)5Z5&m^1?ssbZDnFjZ2^y}I z$B&=YaIJpM%(2VAcbA4M{dr2KhLas}u-a9+d=)O5u#;i|sH{d#_sK7Zf8 zirolFtnV%In)vf3W!*HqcGY+-zRJI6@zWYkk*Iuh{d)uJjr!EfPpi*WdipB7_Q~^F z{DI&f$Z8+gaiwqVD!o0b^$2l@Y5Y#`J6Y}f{WVEG=(r#Je#mdP@q2#K zYM00L{9OnB>)3?vomb^?!x#8;F3zC4TTlOXgx`+)ZC$?B-XGA*TWfC*ysOFA>g$0{ z4Ojf)e!V@baPQc`S~$v|-GcTq#vXsIUVd8r_0siK?N{_Vig>tJ@M9LL-)EeKtp!bt zlw&3-#zYd$+dv!BN~od@_*BvQSZEI`8mG_c>wJ$ANac;Sg=b!saruusfN8X+Z&dOg zr8>Yp?ON&!S{iRP6U{G1E;VTU>~Tq(uqN4{iC&$Gw&X*Twthd+I{3>ZLz8!)ifH}` zt4U8q;~$+;wEN#RXkySvqIK}kI!xMwRL3X-N?w=u@L)yzuFIr7BK7MK-zAck?!(go zLf-wvuh9mb*JuSMZHvaYp2}O}d-7Su=kc2~83no|v>G)2k*XuUok&{TpS%eW>7K4I zX$4ySCJ;&S@sDUi26^LT=46O?%PDCS{GY?uD>N zT<|s8A2&-Hf2Y%=4ctVqbmGb%sdWG7(kN&zB2Uq-`T#WKWBs!frfA{F5<~#?=j{jL&O2B~9d> zhOhX%w;v~(U-X${p>38l?tj*x@lPB?Bb=O+=N&84@N<8sK@)$G{g7~Sl1~g+3(y`{ zB)%6!;}7f)qIt(=5e?ryptQ8SJ+L10=GBCgqk#(ZlC7YvCy<1Rz!z7JYQTx>SQWWiFB57$nB-^i_S3PUc_}Q_5(cY?wq{o#y`}usA zK@&w?fT8n-4ui(e%68cy$ov>_3jji1t(8_nv<}hRMMRl5ezro=c(XNc6bW(X`{C<+ zONrLO=XY3WRFBm5t@)63`yu><;*<&2kZ2P7)3J`QdBj@?;g!Ag{xq@w2T& zL%En~2>JdK_&z5#UB5QsLm7;*(Do6HaK?8XlDdc@E^$fQnW<>Maaw2^-{B6>kcMiO zim#W<8_ExTefM@r_1OhlG098gg{^szr}(%2M4hj+ zv=rf4F1~bb0UPwod5G($ev145*}Sl04)G&yJJQ$qeK<$S2ma+%>)<~Nd^66ee!G?3`~cu4bFEv*4DhA&nKY!^1O+TFN)0p%s8}4XFdA<(5 zpWveW9OX}>91qUV=d7l?3)_C#gFrg5RQ6ZhPqys z1pcw`om%+k2tNV-G!3r@j`NR}4aao{E}Z|gEC>F0htzf1T!iljKhAC1Iv(_Cz;TY! zvO96*;=*}gecIp`w6dH248PFNm(2su(@Oq^519Lh(_10S&le_goWFGva62vvcL66F z;w;A*k>EX&Xq+SFdnAdu50p~4A`&t|Lp2nr8;YaDx^(=qvIOzl4)BE_c4|M&Y6Y6i-X&omx z6n;|6lU{E+pG*gB`5^Q{`CO#5aJKU&AMnwwT6!1%h%k!(F-!1#Lb`#U+81P8BzAIF zcj^6qvBLpgw1Wgc2TZ(@|Iq>^Z}G4stqh!eu~YARH?o8&L;2{Aky=$iBXS>c141-VRBhIsA#^X8P2g7dx2etsg0Qz`YYcW_-zF!kOopmXkJp7d!lt z|Ctjyf2eTcX-7N<$>2+VM0hJ3xQxz+hc0hYShIwcJPN1Fv2r8UhL_0m>#gB|{9~3p z>D0r)|C2Gx%LZHUQ-S=BC2I$Q?_Iv+{)CfAR}W|2s?~bh2tVssas6h-7x#032R^L{ zNOvV>Lv;S1pZkVlRqwi1?ro?1IJs{Q^0SW#=V=wkH%_++h8=-~F)IeuHp~3_AlG-J zi~Gj*V{vcE^Z#f}ls3RO%nx3=#_(Gi&Xc^>&%U-~GSZs}Sd%|57qmR?%Slu6O4RxF zzUevKSL){{{H=VYYZ~`WhMe41zTiwL_vIl?j0?U6Bzq2Q+guj+YBTHm13#ZtMKm|s z2T$QKy zaqUGq^z?$t@HpUse(rnU!F`_qKPl&9ivP5OT|qi_;@Xev6zS(=H!lbLCaw=@JcR!) z(OYHS>Jl+N4yHU)A7;F+KlC_+qLJ*o z4C>GYUJ9f5dHm7i)E)_k-fhKNT{u>L?@`7VVSHHBMlygm1FmK6qXRX3Gw{X0^E4cG zcoEKhKK8MOw*g;^aKDD{1O5oYWgm7lEPf04CWOl|#p^Te!i&vBw!hiHb?Dl4roL_$YOfG%n~N!;|}SiEFpt=o_*vf^7$&R{ZuyM+ovJ_ zq|7Js>VO>J@3*sozih^rew=9Y6b9N`lpfBZejRczQd)!)911^)up>O#|3~iYXO{mW zWBkAB9lih8eS*gT+nV_s(D#k~n0xKQS3dCe5!vawix_KG!_UFTJ+4XO-aDM~99O(B z&Am6${0#l=c|Z52v|}!E9lPRQb^dGJE~@v@Jh@{G>W%cLt69#cy-xH2$n;JEen0#) z;C}d-z*oV~0gkzXH&2b1-a_CQSH05^j(+AXnZsx84=x{X1zWOuoS%E20zdkgm%Grf z9Ndfc;av+l`meX%k1z-N2Vg&FkHB9Fe)J=66Ry?DF3j5BVU(};WzZk=bMMQlyy4R+ z+T1J06QTq5!UmvUdfS@$tSz{3#_1c=f$uuV1}z>B8uaLp{Q`a9D2sQzibMSNv$$EW zqnu9QqI-ZN?20R>oZbR_oR45KJ<+f8O_X7~rVsP{d7K|K9VeLazCOoFUjfp?JS&FM zJ%7^Rf40K0A`NCA-kdXG<|pU)`N<}-`!p{Y%ldgnvi^^b!FOhx*-cmv_o2VljiY-$I{P<` z#V1bWb&FA6&*Ld*te<hs;vM2RC9r>%PUCiq?xlkssg+D|b)O+0mT>Eg% z#reZOhu`G){o83juiNavYiz)q$^N&BmR2W?Wh56qcz=knwoNRi5Ayd{z<1zkL4HWj zXP!oy@X=oCP=0l-@K3^@jydh`;U5Hk9QWI#V+ZNjiiharQ$K6xx4J+-fgrEoQZhpz{4*BMm_PNh*JyS3A!8p za9k+`tS{!bbY3)fIrxG1K^u*0BCZ?32Yb!?;~L+JGj4%b_*vq2f#*WjT=<2!?nHeN z4Ex8^3KALWfEOSfZGl(dLZ9QMz)RsnKVIC5^f>O>{G2yBR-za=pNH`2@Chb=DXu&} z8?prS7{JS$6Ils-l3foyP?ntIYH}sAVu$Y$26!*7wYXY9D?~h$B}W_P>v3(xdAiHt zKiz?}G2f{1bB?yiF}L7{#w4;d#$(3;ufm0TT)wFl`7OYGCd&4JpY#2oKLT1N{0>~3 zaiJcUuSYsAz{lGY*(AVJZYOb_!1X5ZJK>+E{EkUvvg z%=0@uBR%sBXz$?qpq&kvjrf%JPyHC=^~&$luKK^jTZME)q95Z7@)QsIf$|nN7H~1$ z&xO;U*ymM8VxJ?R4aSw+%)fy$5<}5WK4+f2Xq&uy$RHncof$bEg!9qcoMQ4?Akt{J^u`gYeD&q z-HZOeOUZc(^aXw{-p72f2=IOvbOZjngAZ>8-ht~lrQ6Js{tkL<_VeMb4wi(v7N=cH z-YaaCYjFZ)zn648cjw6`Mxz?;#S)#*xqkwF?Bpi9TMiAs1a<3gi$`a zb!Pt8_9Xv}7cH8qGmzz08skji%tG3d(Rfjn#&|u4ja>op%$Lm@&jbV^^Hffa7xmnZ z(9S8=PA_JAwd^;Zx#aA_n#IBjp#GO9VSU$9Tyfj6O-Vg)(ATRG>WZbaU7c6TPuIpA zOnoUEhp^&ayf2t5N@HHhjh!7MKev7#ozaHl$71hG!kLOVtOjTA45s(26V6SggE51kiY2zy3|yE@HaS-zlL=bsuUUT~QJHLK3yw z82t+Y*@FkQUo9!vpXMt;z0-FCK*jc)pCKBZbgeh@LqJznslIboevd$kr8A~Wahz=S zK>9$)i^=V`V=oUjn?0Ia5xe1`+?bbgUc3VDgO?n@8G65%a^u1F&tjj>ikZurXbaMg zvsrlSKg5yIW|qQ1qNd&m5-r9(p+SoV;48gBY$CmiiDY^X6x#6t`;7q4xlRMt0X_h8 z!X7$K`?exDk$wvEpb~>aq)U5e-~@;frwm-I>SQ9V)xg66qAAJ-7fygi7d20J!(k8R zD>@}Xj4;d6&Jh_CJ5+otmsm5-ib`0F7#>99NB7xiSc_4-+v06>9T7Eabug@t4`751 zvj*@1odzo0wFXRpxWTMHTY!dOjx8b2+h&^;ovoo*Z8Sb0Sgvr7weduY(D~cC z@GJFs{Tb|eO^hlHQF7ei6KU%WSO>&L-1dfXBHc{G)1~e)#mw_el)%Pnj<3nl!60AE zH0@DPU<3kRGcrOb!}psmzmJODiHzn%;)e4wE#dBpm}aOz(X=`gIVu`o(-{??C<$+O zqY@B-Nx082G0dz>oi%abgE}aE(J%~OuLU$!&Rn9ds(B1 z8_dM+Dod%;35B6^QV zyuOQx7FC`iEqJ^YC0KU~I0qwA0(_6MSA3Q^e~QF^sbRb{=~AQ0cw(k$55o!KbU$rz zxQ(@7n2XVO{45UZ))EsXq36PU`MYSNDqWoEfp1Ql{RAIWv`Dgpo-X^GkMGHm44!jl z8OyVZ?a}c4QqxvhgFIb0x8dz^21)F?hHS>nT5re< z1@KbU_Qb}KMlf%TZmicMh#E7lPP^&lW>Le$-xP6d<+*$C31P z&&zn?hQZSJbea8_uZ&=uYPzupGfjO+FhBORlpoCxUlY0QL?h#?=E43{TN0wN%ZBR+ zUol(p;-rsLwAQ}z6`48 zoa)DyAp(zAabGb4YtuEZOA;fR4qZ~bON}IEhM$A+qp&?I?R}8a5e*^kO|kYM((L^@ zlulw;Nhoqin!txv#74U<49OS;QM5$CWML64c0I+mk+8!q3&*8_V#k+w9}r>wEVi!h zk%D5xT7w@?q$Mo2MxIlNjlpfh5b_lQVvRSXba8`euR=2PfG9f6d(<98v$67(roFNS zXb8T&ABt?yggd%9su7`wfLIrLUXggy)Uc97jhgf53}UyvfAZ2cCU&W|$4i&$Y$1Ko z5Ioo7rPzyfKFP+tTVP23J-B``lStMa~5hZ3l=}e*|*oJt{ z)yrUh?1;{0^TnD@8~$Y>{CxN0)1{;(X4?C)7#7)fh>cHUPn)t0I0YkOl45tU5iZXJ zGBDKh_5urrZ=ZC9uVWiy0KzYH(#a+PRE6T*BZJP5g|@G}F>*gJ1XuvEJ-A(1g2RHM zQ`r`s!P8~OiOyB?(pe0j2b}q11at$4VdfmU8`hA)Vw>GY1~Q3lc3UMzxNIzAwB(^Y*bw>fCjE7~L2b8e);ubp3K;8uXI7;Hr^8x}QqUb4z;pY-j( z?i^pC>P6=h$&vfC*lOAxJS~& zfh24#Hph;@KwhtGl&Bew`~Ap$G%#+oxc(lgr>i#FC_Um6P0HqoD8@X#rAMM|%zU{j zN8Z?GqgxSvel?!yw^~Vb9F7h5blFhMZ}2Q?yS;39qDn&~zbl#f3bSpBRmv`kwoKd` zoHc}r68n6ZA65N^uPMekF|7t4Z#-ncmjj5I#YS}O%QxU~fWTU#?(puN1VyJgUU=R< zp$FUi#KbZiP6$6{rcJm=Gv~F0_tc37>={@XoxK)mrahu`_yture2+J5vV5T$fA~tX ze~O*vm?Spt4;%NZ3J^Ojy42vFAz*L3JX7^D6Bp}DdnR^=FCS|%VwdU*VpsQV${LT; zH)ng`_=2Rc-1ydR*f6}O7dA`}5KZ>}?CA=fmIye5E}wCEasQ4FDo7yba`g@DAOcFSkGP3(?sYtMd4cffbDk=4(!c_9U9lNEv*MYCnMj#kS%=k`4Eq)7o9* zag4EcyKQ3x!q+?vp4A3fbcQc~fiYFAi>{6E3&C?%JrTYF`$@t)FC`vNSLnH|9^dMV z9q|S#R^=FQG=OMZYOwJOW*ee+>&fw>s!qjrWrqyr2mr?`|KvpSFqSyrP9{3n8{B*V zp1T5~KAO{#3gc2!S&Kxlg@wwrw`P&(fexi1Cs|99Yg58jX86WO+h z(nB;Y#l4iOcd;u%KThr!D!Pp(@cD*NPHc3ABLBD2_yWCOnsX%qJ9fE_FIHO%}h~d^iksNTNrUmjwvs^@t>N9+eX{Y##&|{TV zHo^EFVIb+UaADCQlpub-7W1m`?H#8Ogo+lD=6Sp4wnC(9{c*b*(@C&c6@6Rf$2vpm zaw$ZSY>q{Ge7?e-f6-}K(nW)P91v0N z%@gZR7&0ywkmtsS5F&Q&$9U%o3K40wL9|ODh%|fNbs3^0{C$+pLq1<=w-S&LiH8lHe-l16YdTYEun2c#p4%(`=KbIb?!I26B{yI%rx&KJYD!+%Q3T0gp3e| z=s6d@zw>(R<5)K`Ow68>MM+Z6BSnZIRt=62`qc!9nQHv?yd69aiyc@G*u}#@B zUOF*qW%xpSeegtO-$adB-z1D5vyVG^0%F}+9gNBsJI!_@l1;nWU1VP0iansFor}be z@0&#mjyg>244&h8y6pDdJYOtou|bStm8x5j7M;BjGhIP4h#+=^pKppC!(|+?#wGo5 zKRi+04~Gl4()sxkE7~p02h?}V^Hnm4nc>SvPgk@B&vV4?(0Yrs)q1q3ec{Gl-F2b$ z5G|qSa$KD?8g&|>7{v&zVUECh#zHlh6~ok+C^jlx@I7fGniygBQ6h>Kdp^amHoRYi z{aqte|KN14+25e!iI+F85N>updAig+wn4A}{OFfgKVs`rtjUH?%aW`F z`O4=5Ntcb&x5Xnl(SUo%5mk{`LWc1Hs&9C@FxI5IaGCuS-?|DJ=TeCLnAYba>|ql- zazct0$sz7P+Jb2zBX>jOD}u+nZld%kSTt?w5&u`g%#SLYAl7w86fbtEabB!C5}9v@ zef|`YIf_7Dis$9YXS(GSotfS8L}K78@N6J?qGaJK)V-glt7q*9Ux$m7M7LqQz91}* zSZCU{uuLHW#7s3$6(f2!FSUvi+ms9&ZC7}k=jn>B9E3Kt61zuYzxqByJWuRrz?TXL z`iA$yDqORJMDRqs-=ElpIsBJ*ZxxhC6a=wNwX;yHVs~(TdEO3fbNK}&ht7%ppKzXY zp>4BO7qKJ!y`tC^U3=l}m@AI(qMw@g1-vwJTM-+B>))!E4)ap2G3tbFe9>sPNn%yc z+7dsSiRZB@ju@tFmngZ2cdb;t^A*AUUDV(idqeOX3}=BD+6sK7GSGR>;oG)H*BfN9 z&76Y>w@Eh`EC4^+YQg?zLD6YXUnC#06D|W2H=MYn*dk4h8G2;Vrj4gNym$uY(#bYo zxM7=)b>C;Kk$9<+Yo$dCd(I6H$tt#|7<93_(|`j3vBMQeiV7FIS`9w2-RxgtChYxI zHTU5IEbBETCchC8fah)1C#1tIN>7j zo+ob;CAQ-`U`K<;D=U-doZ0`a^e+SE=hb|OuQc!D_@3x&$)%>x2VB}Xa;fS4cf=F! z;QlMp%=y2V8C{zbtHRqn(PqjE%o9&kfz}MZ65>Uini83Qjc(cLD@)NA8bqL z%(ZBoXgh@c6_|eew7CI~P%W{07-3EwZ^!-n> zj>L8o{<6~SsT>jEU7KiSiFG;AvSJT#@cLBLks~mQnk^ARznUNsW-qukHLjU@vD0NG z2f;W~(V&T@3Io0rKr~dKon4G7Dz|(?I;sf&4NPKV==Q|5?>YZBsDM2vcDu}v+U?Zk z>cHFWcC9;k!o9CMmZ-wTF8f+oxJbeseH-L^g6%8G<$LVwh&+n-Uqom0>-ZwM7JJ-l zLuP^Fh;(vdcWB*0MhZa`TMI%^O%k0o8t6pRM9jOI1Ib?+F4BY78%a1n8a!u;CQ-g1 ze3|pa?&mtuq+#XZ148$2D^DQIwKZJP5?tS+#eP5H>ALj3%8!LE+dzFT7w5+!w+|6; zmWF5vJzvrF5Nk}m`7wK&6b-?3$P=TpKcXh|crAuSzDLsa3iL%wc)LR9tM$Z*b)m<6 z-l*=IJYD;+|9LjnB+dCW$NPXhF>;^oi4M{7iV~GK(bOuV2+Q}7#YXcUL2Se`ll12$ z58o3|k4>iDd|~K%3Dk!#SLyK!mNGbs`@#`}16jl3VteSZ$MbeG-mO+;%}Yb`gcTYh zK7|;U#u#&vGMcvdt}iNy3LEG@MD{RDH09#IuXNg?o!K}wzL8f z(W&M^BCTIwP*|MLiVqnkc1AZB2#oA`JGlIKguWUWU&r}?Ejsu&aY{QRgnm{NY=6YA z0=)O9`WdgsiLWaI=F4d%m}{wa(48Ka5-zm+42ml@cG^UU?cvLSe~ItDi>4%7x|f4+ ze2Y7A=(nO0!B^m04({mYL!NWyyiaV6zCQTE(CsuT1;1n_u`}_qB#IEvvo2L2KQ=gG zRBl-dAVxvwHC-_E=ONB(65E5@k*6#4co;Ep1oBzo>y4Lo7h8pk8oR9#O_9gb=%n_H zON=P)S%gdE7QCD7BAV!;$BW(JQRK}=r~fv?DslK6_?`J6Qg9>qN} z@e7ydU~KpSGG*Y!}x8_Ib+(MONiBi%Ne`J#+ggl%UZL*i1P!&ZNub?M1d=Low1Pw z{DQH=##+)2qS)M%7VJUxT?@w8Il>+^etrw+du$rv%q@TMV;*Pl24nRgq-!Aq+3y%L z8t@;9YE~^_n9Q4ziC}egM-2=*&nKiyQ3PXIY{?=>KE~d%1cWk% zR9{yz_Jv|QE4|54D(Fp&Q4fLJjcW{B#@JB8 zR72aB%GkAi33uU|NWjhXBi-FPp!*XD*k7Te0~q_9;I}1#J~LI#*qwT)^7YPj6*ZE* zmN1#91qZ0}>eT--3So*Qt7f515$w2d}KZtlV(ZhSd8j3-RmD|@G6t0L)U4* zE}g*s&44U`*0`){)+?C)ghzM?3o1ooT}NZp4Vjpe^WN0ta<8!U!O zBT@5<+TBH*JG2U2AfpY3g6|l0DWc|dXVkAw2umI zVI1{HtBX^}ci{aMHtjt8TElB?(a*`fiHj83^HYYhmTn#W{zEK&P-%&hREpn& z5~81e1|$JJA1yjrTI>6DO!^1dpKe91*C}EzBW$b&QCnjT^z#>%O%wF z2Cj8NHg}Ox5D%&{p+5Z+TZ{^&@@=v^BBb6LdfbXI@F;nxGPqCVul_Sf2Q*)A^wfHv zz@=qZj!mU#`bc(%?3LfML@XruPZoj(s$u}r%usa75p9Hy82*#m0J)wq8j{#uS?q*i zvX>idj4iRi26&x>eyI)oWUy3U{ei|&%u3qz36T+rvDjOH473mcrZe_Wit>GXfW&@q znlZ!tQr~+(V_F=<`~dq{wg@9&9(A|Pgt{dyjee0|ax^$`TsIh9ji_W?q}4`^h)b%M|V<&R@p7vD(Mi5kvlxMt17&v#e}4bVSiM=%`b zg7Eh&`FX~^4#@7x8M{fRp#T0SL(^7m{xKr|CoU>?tDAAPfo%tL4bzO&IcoH%pnHtq z5Wp2^sHBB6FzhwiXf^6I=xaJ5HpeMz*sDJa17qdJMqvCX9e`ynnwzs=}LR*qLC@)A2lKAIgv!@aSIEc$wl|4||`_OS9I z|IV$nhOcwV5ga6a(2>*BK>KKoqQU>nb~08I7_e9=YbC#ELG-GpDTBo&nXqb~MKDVY z_S6ipO3}H0rvZ;a6LQOyN59sljiC|!_d90bBoox3R04+MdPS!g{?)R^KeXKZIQ6h^ zG3L`@@|8)mQZy3`5)67Lg?vAF-biG_eL~f1HcxfyV1z2*S?N7Bjy%(7s4)Ge z5|^F!-5|E_22m8j+7v>vtTP%yJe#6%7?om)@xVD9xk?8#zhoTN1^&@O3~X7NRVlZy zFpS&A*r(|8$)njTT$S?h`yN|<6Jy^ta1BU%1H(P0c#E|mIWXM7w79e`b@Z&{WMC ztN^H|+uYyTups2Pl``9kD7Ykmw12Qh$P5V3(0m#(eh@kg<$npTnBwGFZW`3>jj@{5 zLNnZhhTvTWq<~+lqBAC?EcU-Nj^8MMErWd_C#z3FvGUjaSw=N;tBGsSH$n_lXu11; zOW~*43dJ^)z3`wG!R`&y(OFF95vc4ukLYyit4Xcw)i%09U<0gkdstw$9~brR8eF=& zmxyY0-n{wJ164!b@U>9$7n4Uq?f~3k1gsM%3s;u~4gxU+QtoAA>V$T$*%v*GZE7{Z ziv|<{kY%EmekeXFrPdGuS6FB>EwBPVG$4WM1s%L4{kKF{^d2S;GuzqcTKo2#Pq*EvV9v(-f6U0VzA#x0cj$I@Usancy#U!cX(%)Dv~e@+D0ximlYCrtAG_gIp%p;@lzq3=LD>>*O7?k``N$ zaPTN&3GO#Hg`DKXs+jXoi{oEX22xX9P8XgilHpbIcdz2Tzf<~uLGyZ8QRw#_wc-b8 z6`>cu&tAC!{!5mYOLX0J&;l@HjS3&7lTAO+ZXo2x<^cE4;|)&aKp#Uu3z*RuToz!6 z1t#!B01i}dxqkut+|L-hKrH`8KX=oQ;XDc&Xb}Dk=%j�LFx%DU#mwjj_?>l!hh3 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 SWFs#v?!b8D#%7}k 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

3U`?*+5n9W`w(ustPwzm3K4h$yTb`vX!bH<}r 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

  • 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 UT)gh9zfopP{^u?@)fvY8U;JWCvH$=8 literal 0 HcmV?d00001 From cfded49965c7cdd3e3b913efc0232751ed39d458 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Sun, 14 Feb 2021 11:28:31 -0800 Subject: [PATCH 16/37] minor cleanups --- scripts/loadup-all.sh | 12 ++++++++++++ scripts/loadup-lisp-from-init.sh | 6 ++---- scripts/loadup-lisp.sh | 4 ++-- sources/LOADUP-FULL | 2 +- sources/LOADUP-FULL.LCOM | Bin 4908 -> 4953 bytes sources/MAKEINITGREET | 2 +- sources/MAKEINITGREET.LCOM | Bin 1352 -> 1332 bytes 7 files changed, 18 insertions(+), 8 deletions(-) create mode 100755 scripts/loadup-all.sh mode change 100755 => 100644 sources/MAKEINITGREET mode change 100755 => 100644 sources/MAKEINITGREET.LCOM diff --git a/scripts/loadup-all.sh b/scripts/loadup-all.sh new file mode 100755 index 00000000..2756a2bd --- /dev/null +++ b/scripts/loadup-all.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +export MEDLEYDIR=`pwd` + +if [ ! -f run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +./scripts/loadup-init.sh && ./scripts/loadup-lisp-from-init.sh && ./scripts/loadup-full.sh + +echo tada! diff --git a/scripts/loadup-lisp-from-init.sh b/scripts/loadup-lisp-from-init.sh index f83b06d1..e7c62054 100755 --- a/scripts/loadup-lisp-from-init.sh +++ b/scripts/loadup-lisp-from-init.sh @@ -9,10 +9,8 @@ fi export LOADUPDIR="$MEDLEYDIR" mkdir -p "$MEDLEYDIR/tmp" -echo ------ starting with --- -ls -l tmp loadups/init* -echo ---------- -rm -f ~/rem.cm ~/lisp.virtualmem + +rm -f ~/rem.cm ~/lisp.virtualmem ./tmp/* loadups/init*~ cp sources/XREM.CM ~/rem.cm diff --git a/scripts/loadup-lisp.sh b/scripts/loadup-lisp.sh index 7238b09b..2756a2bd 100755 --- a/scripts/loadup-lisp.sh +++ b/scripts/loadup-lisp.sh @@ -7,6 +7,6 @@ if [ ! -f run-medley ] ; then exit 1 fi -export LOADUPDIR=$MEDLEYDIR +./scripts/loadup-init.sh && ./scripts/loadup-lisp-from-init.sh && ./scripts/loadup-full.sh -./run-medley -greet $MEDLEYDIR/sources/LOADUP-LISP.LCOM $MEDLEYDIR/loadups/lisp.venuesysout +echo tada! diff --git a/sources/LOADUP-FULL b/sources/LOADUP-FULL index 71566db0..e1c7d3ec 100644 --- a/sources/LOADUP-FULL +++ b/sources/LOADUP-FULL @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "13-Feb-2021 23:47:35" {DSK}larry>ilisp>medley>sources>LOADUP-FULL.;6 6188 changes to%: (FNS MAKEFULLSYSOUT) (VARS LOADUP-FULLCOMS) previous date%: "13-Feb-2021 22:54:15" {DSK}larry>ilisp>medley>sources>LOADUP-FULL.;4) (PRETTYCOMPRINT LOADUP-FULLCOMS) (RPAQQ LOADUP-FULLCOMS ((COMMANDS "cd" "pwd" "ls") (FNS LOADFULLFONTS MAKEFULLSYSOUT FIXMETA) (P (FIXMETA)) (GLOBALVARS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (P (MAKEFULLSYSOUT T))) (PROP FILETYPE))) (DEFCOMMAND "cd" (DIR) (/CNDIR DIR)) (DEFCOMMAND "pwd" NIL (DIRECTORYNAME T)) (DEFCOMMAND "ls" (FIRST . REST) (DODIR (CONS FIRST REST))) (DEFINEQ (LOADFULLFONTS [LAMBDA NIL (* ; "Edited 13-Feb-2021 22:51 by larry") (* ;; " Don't do Interpress. Do character set 0 and the symbol character sets 41Q, 42Q, 356Q, 357Q and extended and accented Latin 43Q and 361Q") (PRINTOUT T "Loading FULL fonts..." T) (SETQ DISPLAYFONTEXTENSIONS '(DISPLAYFONT STRIKE)) (SETQ *POSTSCRIPT-FILE-TYPE* 'TEXT) (RESETVARS ((MISSINGDISPLAYFONTCOERCIONS NIL) (MISSINGCHARSETDISPLAYFONTCOERCIONS NIL)) (* ;  "Don't let the font loader substitute just because a server went catatonic on us") (for FAMILY in '(CLASSIC MODERN TERMINAL) do (PRINTOUT T " Loading " FAMILY " ") [for SIZE in '(8 10 12) do (PRINTOUT T SIZE " ") (for FACE in '(MRR BRR MIR) do (for CSET in '(0 33 34 35 238 239 241) do (NLSETQ (FONTCREATE FAMILY SIZE FACE NIL 'DISPLAY NIL CSET] (PRINTOUT T T)) (PRINTOUT T " Loading postscript fonts" T) (for F in (FILDIR (CONCAT (CAR POSTSCRIPTFONTDIRECTORIES) ">c0>*.*")) do (PSCFONT.READFONT F)) (PRINTOUT T "FULL fonts loaded" T]) (MAKEFULLSYSOUT [LAMBDA (DOIT) (* ; "Edited 13-Feb-2021 23:47 by larry") (* ; "Edited 14-May-2018 15:01 by kaplan") (* ; "Edited 28-Sep-2020 12:35 by rmk:") (* ; "Edited 17-Apr-2018 08:41 by ") (* ; "Edited 21-Apr-2018 07:27 by rmk:") (* ; "Edited 23-Feb-94 15:04 by bvm") (CLRPROMPT) (LET NIL (SETQ MAKESYSFILENAME (CONCAT (MEDLEYDIR "loadups") "full.sysout")) (SETQ MAKESYSNAME (CONCAT "Medley from Interlisp.org of " (DATE))) (DRIBBLE (PACKFILENAME 'EXTENSION "dribble" 'BODY MAKESYSFILENAME)) (* ;; "BKSYSBUF stops page holding ") (PRINTOUT T T "Full loadup started at " (DATE) " while connected to " (DIRECTORYNAME T) T T) (BKSYSBUF " ") (SETQ DEFAULTFILETYPE 'BINARY) (* ;  "These prevent bits from being lost due to lack of knowledge") (DREMOVE (ASSOC NIL DEFAULTFILETYPELIST) DEFAULTFILETYPELIST) (push DEFAULTFILETYPELIST '(TXT . TEXT) '(TEXT . TEXT) '(TEX . TEXT) '(HTML . TEXT) '(HTM . TEXT)) (MEDLEY-INIT-VARS) (SETQ LOADUPDIRECTORIES DIRECTORIES) (LOADUP '(POSTSCRIPTSTREAM)) (* ; " to get PSCFONT.READFONT") (LOADFULLFONTS) (LISTPUT IDLE.PROFILE 'TIMEOUT 0) (SETQQ *DEFAULT-CLEANUP-COMPILER* BCOMPL) (LOADUP '(CHAT PRESS INTERPRESS TEDIT HRULE TEDITCHAT READNUMBER EDITBITMAP FILEBROWSER THINFILES GRAPHER SPY WHERE-IS COPYFILES MSANALYZE MSPARSE MASTERSCOPE UNIXPRINT UNICODE ISO8859IO HELPSYS DINFO CLIPBOARD MACINTERFACE PRETTYFILEINDEX WHO-LINE UNIXCOMM UNIXCHAT)) (SETQ *WHO-LINE-ANCHOR* '(:CENTER :TOP)) (* ;; "Turn off who-line until after the user has greeted") (CL:WHEN (WINDOWP *WHO-LINE*) (CLOSEW *WHO-LINE*)) [SETQ POSTGREETFORMS (APPEND POSTGREETFORMS '((INSTALL-WHO-LINE-OPTIONS] (LISTPUT IDLE.PROFILE 'TIMEOUT 20) (SETTOPVAL 'INITIALS NIL) (ENDLOADUP) (COND ((WINDOWP LOGOW) (CLOSEW LOGOW))) (DREMOVE (ASSOC 'LOGOW AFTERMAKESYSFORMS) AFTERMAKESYSFORMS) (push AFTERMAKESYSFORMS '(CLRPROMPT) '(MEDLEY-INIT-VARS)) (* ;; "Set up for making the sysout, if we made it this far.") (CL:WHEN DOIT (PRINTOUT T "Creating FULL sysout on " MAKESYSFILENAME T) (BKSYSBUF (CONCAT "(IL:MAKESYS %"" MAKESYSFILENAME "%" %"Medley " " Full Sysout%")"))) (DRIBBLE]) (FIXMETA [LAMBDA NIL (* ;  "Edited 25-Jun-2017 17:12 by rmk:") (KEYACTION 'BLANK-TOP '(METADOWN . METAUP) \CURRENTKEYACTION) (KEYACTION 'BLANK-TOP '(METADOWN . METAUP]) ) (FIXMETA) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS) ) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (MAKEFULLSYSOUT T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (857 5960 (LOADFULLFONTS 867 . 2455) (MAKEFULLSYSOUT 2457 . 5649) (FIXMETA 5651 . 5958)) ))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "14-Feb-2021 10:08:45" {DSK}larry>ilisp>medley>sources>LOADUP-FULL.;7 5949 changes to%: (FNS MAKEFULLSYSOUT) previous date%: "13-Feb-2021 23:47:35" {DSK}larry>ilisp>medley>sources>LOADUP-FULL.;6) (PRETTYCOMPRINT LOADUP-FULLCOMS) (RPAQQ LOADUP-FULLCOMS ((COMMANDS "cd" "pwd" "ls") (FNS LOADFULLFONTS MAKEFULLSYSOUT FIXMETA) (P (FIXMETA)) (GLOBALVARS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (P (MAKEFULLSYSOUT T))) (PROP FILETYPE))) (DEFCOMMAND "cd" (DIR) (/CNDIR DIR)) (DEFCOMMAND "pwd" NIL (DIRECTORYNAME T)) (DEFCOMMAND "ls" (FIRST . REST) (DODIR (CONS FIRST REST))) (DEFINEQ (LOADFULLFONTS [LAMBDA NIL (* ; "Edited 13-Feb-2021 22:51 by larry") (* ;; " Don't do Interpress. Do character set 0 and the symbol character sets 41Q, 42Q, 356Q, 357Q and extended and accented Latin 43Q and 361Q") (PRINTOUT T "Loading FULL fonts..." T) (SETQ DISPLAYFONTEXTENSIONS '(DISPLAYFONT STRIKE)) (SETQ *POSTSCRIPT-FILE-TYPE* 'TEXT) (RESETVARS ((MISSINGDISPLAYFONTCOERCIONS NIL) (MISSINGCHARSETDISPLAYFONTCOERCIONS NIL)) (* ;  "Don't let the font loader substitute just because a server went catatonic on us") (for FAMILY in '(CLASSIC MODERN TERMINAL) do (PRINTOUT T " Loading " FAMILY " ") [for SIZE in '(8 10 12) do (PRINTOUT T SIZE " ") (for FACE in '(MRR BRR MIR) do (for CSET in '(0 33 34 35 238 239 241) do (NLSETQ (FONTCREATE FAMILY SIZE FACE NIL 'DISPLAY NIL CSET] (PRINTOUT T T)) (PRINTOUT T " Loading postscript fonts" T) (for F in (FILDIR (CONCAT (CAR POSTSCRIPTFONTDIRECTORIES) ">c0>*.*")) do (PSCFONT.READFONT F)) (PRINTOUT T "FULL fonts loaded" T]) (MAKEFULLSYSOUT [LAMBDA (DOIT) (* ; "Edited 14-Feb-2021 10:08 by larry") (* ; "Edited 14-May-2018 15:01 by kaplan") (* ; "Edited 28-Sep-2020 12:35 by rmk:") (* ; "Edited 17-Apr-2018 08:41 by ") (* ; "Edited 21-Apr-2018 07:27 by rmk:") (* ; "Edited 23-Feb-94 15:04 by bvm") (CLRPROMPT) (SETQ MAKESYSFILENAME (CONCAT (MEDLEYDIR "loadups") "full.sysout")) (SETQ MAKESYSNAME (CONCAT "Medley from Interlisp.org of " (DATE))) (DRIBBLE (PACKFILENAME 'EXTENSION "dribble" 'BODY MAKESYSFILENAME)) (* ;; "BKSYSBUF stops page holding ") (PRINTOUT T T "Full loadup started at " (DATE) " while connected to " (DIRECTORYNAME T) T T) (BKSYSBUF " ") (SETQ DEFAULTFILETYPE 'BINARY) (* ;  "These prevent bits from being lost due to lack of knowledge") (DREMOVE (ASSOC NIL DEFAULTFILETYPELIST) DEFAULTFILETYPELIST) (push DEFAULTFILETYPELIST '(TXT . TEXT) '(TEXT . TEXT) '(TEX . TEXT) '(HTML . TEXT) '(HTM . TEXT)) (MEDLEY-INIT-VARS) (SETQ LOADUPDIRECTORIES DIRECTORIES) (LOADUP '(POSTSCRIPTSTREAM)) (* ; " to get PSCFONT.READFONT") (LOADFULLFONTS) (LISTPUT IDLE.PROFILE 'TIMEOUT 0) (SETQQ *DEFAULT-CLEANUP-COMPILER* BCOMPL) (LOADUP '(CHAT PRESS INTERPRESS TEDIT HRULE TEDITCHAT READNUMBER EDITBITMAP FILEBROWSER THINFILES GRAPHER SPY WHERE-IS COPYFILES MSANALYZE MSPARSE MASTERSCOPE UNIXPRINT UNICODE ISO8859IO HELPSYS DINFO CLIPBOARD MACINTERFACE PRETTYFILEINDEX WHO-LINE UNIXCOMM UNIXCHAT)) (SETQ *WHO-LINE-ANCHOR* '(:CENTER :TOP)) (* ;; "Turn off who-line until after the user has greeted") (CL:WHEN (WINDOWP *WHO-LINE*) (CLOSEW *WHO-LINE*)) [SETQ POSTGREETFORMS (APPEND POSTGREETFORMS '((INSTALL-WHO-LINE-OPTIONS] (LISTPUT IDLE.PROFILE 'TIMEOUT 20) (SETTOPVAL 'INITIALS NIL) (ENDLOADUP) (COND ((WINDOWP LOGOW) (CLOSEW LOGOW))) (DREMOVE (ASSOC 'LOGOW AFTERMAKESYSFORMS) AFTERMAKESYSFORMS) (push AFTERMAKESYSFORMS '(CLRPROMPT) '(MEDLEY-INIT-VARS)) (* ;; "Set up for making the sysout, if we made it this far.") (CL:WHEN DOIT (PRINTOUT T "Creating FULL sysout on " MAKESYSFILENAME T) (BKSYSBUF (CONCAT "(IL:MAKESYS %"" MAKESYSFILENAME "%" %"Medley " " Full Sysout%")" " (IL:LOGOUT T)"))) (DRIBBLE]) (FIXMETA [LAMBDA NIL (* ;  "Edited 25-Jun-2017 17:12 by rmk:") (KEYACTION 'BLANK-TOP '(METADOWN . METAUP) \CURRENTKEYACTION) (KEYACTION 'BLANK-TOP '(METADOWN . METAUP]) ) (FIXMETA) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS MISSINGDISPLAYFONTCOERCIONS MISSINGCHARSETDISPLAYFONTCOERCIONS) ) (DECLARE%: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (MAKEFULLSYSOUT T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (814 5721 (LOADFULLFONTS 824 . 2412) (MAKEFULLSYSOUT 2414 . 5410) (FIXMETA 5412 . 5719)) ))) STOP \ No newline at end of file diff --git a/sources/LOADUP-FULL.LCOM b/sources/LOADUP-FULL.LCOM index 49510ab1da133aa06668f6e710249d4448de4fa5..1599f26ba25dec809f72e3656d257907490ef636 100644 GIT binary patch delta 359 zcmZ3Zc2jMFpRkFpTWXT7k%5t+f}w$xfrXWc`NTxGdUH($B|{`R1E8FVm4T6xLQ+v` za(-?>W=?8~LUKl8UV3V=s+9t-ucNoCTd0puaAdH5Xox~)o`RBZYD!LOrGkQ6X-Er4gVm2Y>e|U_jAm@+ z3Z|AOmXnhhRVL46l$)%;$T|54qY0zg=AVp**%^0i-pg6R$Y?j&j9c3@p8*JXSwSQx zh}h2oA_W*UOpMJHT!K8EoP1mrOpFZ`oVBXcVgBPE5B^FGaY7U z+_d>TX9Xjp#bgg|ZG9dFAm9WM`#C_Q0E32!v7v%Xkf)QAkE?=-k*R`{cW`8|Q>Yt| sW3YJzw-3`~PQGXf1!FT41r1+U7a!M1T~9yH5M7WHGlarry>ilisp>medley>sources>MAKEINITGREET.;33 1897 changes to%: (FNS MAKEINITGREET) (FILES RENAMEFNS) (VARS MAKEINITGREETCOMS) previous date%: " 5-Dec-2017 15:26:33" {DSK}larry>ilisp>medley>sources>MAKEINITGREET.;28 ) (PRETTYCOMPRINT MAKEINITGREETCOMS) (RPAQQ MAKEINITGREETCOMS ((FNS MAKEINITGREET) (FILES (SOURCE) FILESETS) (FILES RENAMEFNS MAKEINIT DLFIXINIT XCL-PACKAGE CMLARRAY-SUPPORT VMEM))) (DEFINEQ (MAKEINITGREET [LAMBDA NIL (* ; "Edited 7-Feb-2021 18:06 by lmm") (* ;  "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "") (* ;; " Updated Lisp version for big physical memory --bvm |11/3/87") (* ;; "") (XCL:RESTORE-PROFILE "INTERLISP") (* ; "Doesn't exist") (SETQ LITATOM-PACKAGE-CONVERSION-ENABLED NIL) (SETQ *REMOVE-INTERLISP-COMMENTS* NIL) (LOAD 'FILESETS) (* ; "rmk: VMEM has WORDARRAY") (* Versions are Lisp Microcode Bcpl) (DORENAME 'I) (DLFIXINIT (MAKEINIT '(39424 5682 11008) (MEDLEYDIR "loadups" "init.sysout" T) NIL DIRECTORIES DISPLAYFONTDIRECTORIES) (MEDLEYDIR "loadups" "init.dlinit" T]) ) (FILESLOAD (SOURCE) FILESETS) (FILESLOAD RENAMEFNS MAKEINIT DLFIXINIT XCL-PACKAGE CMLARRAY-SUPPORT VMEM) (PUTPROPS MAKEINITGREET COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (681 1718 (MAKEINITGREET 691 . 1716))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "14-Feb-2021 09:57:01" {DSK}larry>ilisp>medley>sources>MAKEINITGREET.;2 1770 changes to%: (FNS MAKEINITGREET) previous date%: " 7-Feb-2021 18:10:42" {DSK}larry>ilisp>medley>sources>MAKEINITGREET.;1 ) (PRETTYCOMPRINT MAKEINITGREETCOMS) (RPAQQ MAKEINITGREETCOMS ((FNS MAKEINITGREET) (FILES (SOURCE) FILESETS) (FILES RENAMEFNS MAKEINIT DLFIXINIT XCL-PACKAGE CMLARRAY-SUPPORT VMEM))) (DEFINEQ (MAKEINITGREET [LAMBDA NIL (* ; "Edited 14-Feb-2021 09:56 by larry") (* ; "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "") (* ;; " Updated Lisp version for big physical memory --bvm |11/3/87") (* ;; "") (XCL:RESTORE-PROFILE "INTERLISP") (* ; "Doesn't exist") (SETQ LITATOM-PACKAGE-CONVERSION-ENABLED NIL) (SETQ *REMOVE-INTERLISP-COMMENTS* NIL) (LOAD 'FILESETS) (* ; "rmk: VMEM has WORDARRAY") (* Versions are Lisp Microcode Bcpl) (BKSYSBUF " ") (DORENAME 'I) (DLFIXINIT (MAKEINIT '(39424 5682 11008) (MEDLEYDIR "loadups" "init.sysout" T) NIL DIRECTORIES DISPLAYFONTDIRECTORIES) (MEDLEYDIR "loadups" "init.dlinit" T]) ) (FILESLOAD (SOURCE) FILESETS) (FILESLOAD RENAMEFNS MAKEINIT DLFIXINIT XCL-PACKAGE CMLARRAY-SUPPORT VMEM) (PUTPROPS MAKEINITGREET COPYRIGHT (NONE)) (DECLARE%: DONTCOPY (FILEMAP (NIL (596 1591 (MAKEINITGREET 606 . 1589))))) STOP \ No newline at end of file diff --git a/sources/MAKEINITGREET.LCOM b/sources/MAKEINITGREET.LCOM old mode 100755 new mode 100644 index 436d37d4a820471028e5923c06d86a556e03c8bf..f7a020b6eb0db567380fe8d1b51a0ac05ebe5870 GIT binary patch delta 419 zcmZvY&q~8U5XMPFgo1bx^d#eo&>k9glimEgXlpjOHmN0vU@t;76$-%=(+HkCd$a7L z=nHrgU&2SxG=fx-ISj+^o0*UAt?|-$3O5OD`{T>Dj&%aqahc^}Iv*Wx=`BFN7_NYe z=dZ>E_+^$sd|%|{43;&TrXfg2vvK<0uE9`iz3Gd9A4R;AaPN=k`#F(os=W%tvapoO z-p2HHd^gF Date: Wed, 17 Feb 2021 11:30:42 -0800 Subject: [PATCH 17/37] Update LOADUP-INIT.LISP --- sources/LOADUP-INIT.LISP | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/LOADUP-INIT.LISP b/sources/LOADUP-INIT.LISP index 3f4ce49f..2c54250a 100644 --- a/sources/LOADUP-INIT.LISP +++ b/sources/LOADUP-INIT.LISP @@ -1,7 +1,7 @@ (* "make init files") (CNDIR (MEDLEYDIR "tmp")) - +(MOVD 'NILL 'PAGEFULLFN) (LOAD (MEDLEYDIR "sources" "MAKEINITGREET.LCOM")) (PROGN (DRIBBLE "makeinit.dribble") (BKSYSBUF " ") From 80223da62527512f6ad3baf5081947c9c86dd178 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Wed, 17 Feb 2021 14:58:53 -0800 Subject: [PATCH 18/37] split loadup of lisp into two phases for better debugging --- scripts/loadup-all.sh | 2 +- scripts/loadup-lisp-from-mid.sh | 28 ++++++++++++++++++++++++++++ scripts/loadup-mid-from-init.sh | 30 ++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100755 scripts/loadup-lisp-from-mid.sh create mode 100755 scripts/loadup-mid-from-init.sh diff --git a/scripts/loadup-all.sh b/scripts/loadup-all.sh index 2756a2bd..6283ff52 100755 --- a/scripts/loadup-all.sh +++ b/scripts/loadup-all.sh @@ -7,6 +7,6 @@ if [ ! -f run-medley ] ; then exit 1 fi -./scripts/loadup-init.sh && ./scripts/loadup-lisp-from-init.sh && ./scripts/loadup-full.sh +./scripts/loadup-init.sh && ./scripts/loadup-mid-from-init.sh && ./scripts/loadup-lisp-from-mid.sh && ./scripts/loadup-full.sh echo tada! diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh new file mode 100755 index 00000000..3f9d65fa --- /dev/null +++ b/scripts/loadup-lisp-from-mid.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +export MEDLEYDIR=`pwd` + +if [ ! -f run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +rm -f ~/rem.cm loadups/LISP.SYSOUT* loadups/lisp.sysout* +touch loadups/lisp.sysout + +echo '"' > ~/rem.cm +echo '(PROGN(LOAD(QUOTE {DSK}'$MEDLEYDIR'/sources/LOADUP.LISP))(HARDRESET))' >> ~/rem.cm +echo 'SHH(PROGN (IL:ENDLOADUP) (IL:SPECVARS . T) (IL:MAKESYS (QUOTE {DSK}'$MEDLEYDIR'/loadups/lisp.sysout)))' >> ~/rem.cm +echo '(IL:LOGOUT T)' >> ~/rem.cm +echo '"' >> ~/rem.cm + +echo -----rem.cm ----- +cat ~/rem.cm +echo ---------------- +./run-medley -greet $MEDLEYDIR/sources/LOADUP-GREET tmp/init-mid.sysout +rm ~/rem.cm + +echo ----- created: ------- +ls -l loadups/lisp.sysout +echo ---------------------- + diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh new file mode 100755 index 00000000..dd4e3146 --- /dev/null +++ b/scripts/loadup-mid-from-init.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +export MEDLEYDIR=`pwd` + +if [ ! -f run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +mkdir -p "$MEDLEYDIR/tmp" + +rm -f ~/rem.cm ~/lisp.virtualmem ./tmp/* loadups/init*~ + +cp sources/XREM.CM ~/rem.cm + +prog=../maiko/linux.x86_64/ldeinit +if [ ! -x $prog ] ; then + echo $prog not found + prog=../maiko/darwin.aarch64/ldeinit +fi + +$prog -sc 1000x900 -g 1000x900 loadups/init.dlinit + +echo - +echo --- init run -- +ls -l ~ + + +cp ~/lisp.virtualmem tmp/init-mid.sysout + From c46e57fabce4932869e1c51163559e8b2ceaa718 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Wed, 17 Feb 2021 19:10:30 -0800 Subject: [PATCH 19/37] loadup on pi --- scripts/loadup-mid-from-init.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index dd4e3146..0d1b2fa1 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -15,9 +15,12 @@ cp sources/XREM.CM ~/rem.cm prog=../maiko/linux.x86_64/ldeinit if [ ! -x $prog ] ; then - echo $prog not found prog=../maiko/darwin.aarch64/ldeinit fi +if [ ! -x $prog ] ; then + prog=../maiko/linux.armv7l/ldeinit +fi + $prog -sc 1000x900 -g 1000x900 loadups/init.dlinit From 7b1c12989f94f96eb51403610fe6ab2a522c014c Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Thu, 18 Feb 2021 10:15:01 -0800 Subject: [PATCH 20/37] run-medley -prog option for selecting ldeinit; update screen dimensions --- run-medley | 4 +++ scripts/loadup-all.sh | 2 +- scripts/loadup-full.sh | 10 ++++++-- scripts/loadup-init.sh | 9 ++++--- scripts/loadup-lisp-from-init.sh | 44 -------------------------------- scripts/loadup-lisp-from-mid.sh | 7 ++--- scripts/loadup-lisp.sh | 12 --------- scripts/loadup-mid-from-init.sh | 26 +++++-------------- 8 files changed, 29 insertions(+), 85 deletions(-) delete mode 100755 scripts/loadup-lisp-from-init.sh delete mode 100755 scripts/loadup-lisp.sh diff --git a/run-medley b/run-medley index 861eee9b..87ae41de 100755 --- a/run-medley +++ b/run-medley @@ -75,6 +75,10 @@ while [ "$#" -ne 0 ]; do export DISPLAY="$2" shift ;; + "-prog" ) + prog="$2" + shift + ;; "-vmem" | "--vmem" | "-vmfile" ) export LDEDESTSYSOUT="$2" shift diff --git a/scripts/loadup-all.sh b/scripts/loadup-all.sh index 6283ff52..ee96265f 100755 --- a/scripts/loadup-all.sh +++ b/scripts/loadup-all.sh @@ -2,7 +2,7 @@ export MEDLEYDIR=`pwd` -if [ ! -f run-medley ] ; then +if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi diff --git a/scripts/loadup-full.sh b/scripts/loadup-full.sh index 882266ed..a77f1ddd 100755 --- a/scripts/loadup-full.sh +++ b/scripts/loadup-full.sh @@ -2,11 +2,17 @@ export MEDLEYDIR=`pwd` -if [ ! -f run-medley ] ; then +if [ ! -x run-medley ] ; then echo must run from MEDLEYDIR ; exit 1 ; fi +scr="-sc 1024x768 -gr 1042x790" -./run-medley -greet $MEDLEYDIR/sources/LOADUP-FULL.LCOM $MEDLEYDIR/loadups/lisp.sysout +rm -f ~/rem.cm + +./run-medley $scr -greet $MEDLEYDIR/sources/LOADUP-FULL.LCOM $MEDLEYDIR/loadups/lisp.sysout +echo ----- made ---- +ls -l loadups/full.sysout +echo --------------- diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index a7cae529..92e4805f 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -7,10 +7,13 @@ if [ ! -f run-medley ] ; then exit 1 fi -export LOADUPDIR="$MEDLEYDIR" +scr="-sc 1024x768 -gr 1042x790" + mkdir -p "$MEDLEYDIR/tmp" +rm -f ~/rem.cm -./run-medley -greet "$MEDLEYDIR"/sources/LOADUP-INIT.LISP -full +./run-medley $scr -greet "$MEDLEYDIR"/sources/LOADUP-INIT.LISP -full +echo ---- made ---- ls -l tmp loadups/init* - +echo -------------- diff --git a/scripts/loadup-lisp-from-init.sh b/scripts/loadup-lisp-from-init.sh deleted file mode 100755 index e7c62054..00000000 --- a/scripts/loadup-lisp-from-init.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh - -export MEDLEYDIR=`pwd` - -if [ ! -f run-medley ] ; then - echo run from MEDLEYDIR - exit 1 -fi - -export LOADUPDIR="$MEDLEYDIR" -mkdir -p "$MEDLEYDIR/tmp" - -rm -f ~/rem.cm ~/lisp.virtualmem ./tmp/* loadups/init*~ - -cp sources/XREM.CM ~/rem.cm - -prog=../maiko/linux.x86_64/ldeinit -if [ ! -x $prog ] ; then - echo $prog not found - prog=../maiko/darwin.aarch64/ldeinit -fi - -$prog -sc 1000x900 -g 1000x900 loadups/init.dlinit -echo init run - -cp ~/lisp.virtualmem tmp/init-mid.sysout -echo '"' > ~/rem.cm - -echo '(PROGN(LOAD(QUOTE {DSK}'$MEDLEYDIR'/sources/LOADUP.LISP))(HARDRESET))' >> ~/rem.cm -echo 'SHH(PROGN (IL:ENDLOADUP) (IL:SPECVARS . T) (IL:MAKESYS (QUOTE {DSK}'$MEDLEYDIR'/loadups/lisp.sysout)))' >> ~/rem.cm -echo '(IL:LOGOUT)' >> ~/rem.cm - -echo '"' >> ~/rem.cm - -echo -----rem.cm -cat ~/rem.cm -echo ----- -./run-medley -greet $MEDLEYDIR/sources/LOADUP-GREET tmp/init-mid.sysout -rm ~/rem.cm - -echo ----- created: ------- -ls -l loadups/lisp.sysout -echo ---------------------- - diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 3f9d65fa..370bda35 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -7,8 +7,7 @@ if [ ! -f run-medley ] ; then exit 1 fi -rm -f ~/rem.cm loadups/LISP.SYSOUT* loadups/lisp.sysout* -touch loadups/lisp.sysout +scr="-sc 1024x768 -gr 1042x790" echo '"' > ~/rem.cm echo '(PROGN(LOAD(QUOTE {DSK}'$MEDLEYDIR'/sources/LOADUP.LISP))(HARDRESET))' >> ~/rem.cm @@ -19,7 +18,9 @@ echo '"' >> ~/rem.cm echo -----rem.cm ----- cat ~/rem.cm echo ---------------- -./run-medley -greet $MEDLEYDIR/sources/LOADUP-GREET tmp/init-mid.sysout + +./run-medley $scr -greet $MEDLEYDIR/sources/LOADUP-GREET tmp/init-mid.sysout + rm ~/rem.cm echo ----- created: ------- diff --git a/scripts/loadup-lisp.sh b/scripts/loadup-lisp.sh deleted file mode 100755 index 2756a2bd..00000000 --- a/scripts/loadup-lisp.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -export MEDLEYDIR=`pwd` - -if [ ! -f run-medley ] ; then - echo run from MEDLEYDIR - exit 1 -fi - -./scripts/loadup-init.sh && ./scripts/loadup-lisp-from-init.sh && ./scripts/loadup-full.sh - -echo tada! diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index 0d1b2fa1..1e0f5712 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -2,32 +2,18 @@ export MEDLEYDIR=`pwd` -if [ ! -f run-medley ] ; then +if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi mkdir -p "$MEDLEYDIR/tmp" - -rm -f ~/rem.cm ~/lisp.virtualmem ./tmp/* loadups/init*~ +scr="-sc 1024x768 -gr 1042x790" cp sources/XREM.CM ~/rem.cm -prog=../maiko/linux.x86_64/ldeinit -if [ ! -x $prog ] ; then - prog=../maiko/darwin.aarch64/ldeinit -fi -if [ ! -x $prog ] ; then - prog=../maiko/linux.armv7l/ldeinit -fi - - -$prog -sc 1000x900 -g 1000x900 loadups/init.dlinit - -echo - -echo --- init run -- -ls -l ~ - - -cp ~/lisp.virtualmem tmp/init-mid.sysout +./run-medley -prog ldeinit $scr -vmem tmp/init-mid.sysout loadups/init.dlinit +echo ---- made ---- +ls -l tmp/ +echo -------------- From b14cbb2f775a8d70958feed00c365d47ec4248c6 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Thu, 18 Feb 2021 12:29:23 -0800 Subject: [PATCH 21/37] typo in -gr instead of -g --- scripts/loadup-full.sh | 2 +- scripts/loadup-init.sh | 2 +- scripts/loadup-lisp-from-mid.sh | 2 +- scripts/loadup-mid-from-init.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/loadup-full.sh b/scripts/loadup-full.sh index a77f1ddd..f2223a96 100755 --- a/scripts/loadup-full.sh +++ b/scripts/loadup-full.sh @@ -6,7 +6,7 @@ if [ ! -x run-medley ] ; then echo must run from MEDLEYDIR ; exit 1 ; fi -scr="-sc 1024x768 -gr 1042x790" +scr="-sc 1024x768 -g 1042x790" rm -f ~/rem.cm diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 92e4805f..4e2525e4 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -7,7 +7,7 @@ if [ ! -f run-medley ] ; then exit 1 fi -scr="-sc 1024x768 -gr 1042x790" +scr="-sc 1024x768 -g 1042x790" mkdir -p "$MEDLEYDIR/tmp" rm -f ~/rem.cm diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 370bda35..043e244d 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -7,7 +7,7 @@ if [ ! -f run-medley ] ; then exit 1 fi -scr="-sc 1024x768 -gr 1042x790" +scr="-sc 1024x768 -g 1042x790" echo '"' > ~/rem.cm echo '(PROGN(LOAD(QUOTE {DSK}'$MEDLEYDIR'/sources/LOADUP.LISP))(HARDRESET))' >> ~/rem.cm diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index 1e0f5712..4c045e73 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -8,7 +8,7 @@ if [ ! -x run-medley ] ; then fi mkdir -p "$MEDLEYDIR/tmp" -scr="-sc 1024x768 -gr 1042x790" +scr="-sc 1024x768 -g 1042x790" cp sources/XREM.CM ~/rem.cm From 30e47fc81101b3601c381822bbedd586dcc200e3 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Mon, 22 Feb 2021 16:12:20 -0800 Subject: [PATCH 22/37] Remove use of ~/rem.cm in loadups. Now the LDEINIT file is checked instead; probably can get rid of even that, later --- run-medley | 2 +- scripts/loadup-lisp-from-mid.sh | 13 +------------ scripts/loadup-mid-from-init.sh | 4 +--- sources/ADIR | 2 +- sources/ADIR.LCOM | Bin 23850 -> 22824 bytes sources/LLSUBRS | 2 +- sources/LLSUBRS.LCOM | Bin 13941 -> 13948 bytes sources/LOADUP-GREET | 1 - sources/YREM.CM | 6 ++++++ 9 files changed, 11 insertions(+), 19 deletions(-) delete mode 100644 sources/LOADUP-GREET create mode 100644 sources/YREM.CM diff --git a/run-medley b/run-medley index 87ae41de..beac3c66 100755 --- a/run-medley +++ b/run-medley @@ -159,6 +159,6 @@ echo "start $LDEINIT" export INMEDLEY=1 -$prog $geometry $screensize -t "Medley Interlisp" $passthrough_args "$LDESRCESYSOUT" +$prog $geometry $screensize -m 256 -t "Medley Interlisp" $passthrough_args "$LDESRCESYSOUT" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 043e244d..1721ea5d 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -9,19 +9,8 @@ fi scr="-sc 1024x768 -g 1042x790" -echo '"' > ~/rem.cm -echo '(PROGN(LOAD(QUOTE {DSK}'$MEDLEYDIR'/sources/LOADUP.LISP))(HARDRESET))' >> ~/rem.cm -echo 'SHH(PROGN (IL:ENDLOADUP) (IL:SPECVARS . T) (IL:MAKESYS (QUOTE {DSK}'$MEDLEYDIR'/loadups/lisp.sysout)))' >> ~/rem.cm -echo '(IL:LOGOUT T)' >> ~/rem.cm -echo '"' >> ~/rem.cm -echo -----rem.cm ----- -cat ~/rem.cm -echo ---------------- - -./run-medley $scr -greet $MEDLEYDIR/sources/LOADUP-GREET tmp/init-mid.sysout - -rm ~/rem.cm +./run-medley $scr -greet $MEDLEYDIR/sources/YREM.CM tmp/init-mid.sysout echo ----- created: ------- ls -l loadups/lisp.sysout diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index 4c045e73..481a7139 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -10,9 +10,7 @@ fi mkdir -p "$MEDLEYDIR/tmp" scr="-sc 1024x768 -g 1042x790" -cp sources/XREM.CM ~/rem.cm - -./run-medley -prog ldeinit $scr -vmem tmp/init-mid.sysout loadups/init.dlinit +./run-medley -prog ldeinit -greet $MEDLEYDIR/sources/XREM.CM $scr -vmem tmp/init-mid.sysout loadups/init.dlinit echo ---- made ---- ls -l tmp/ diff --git a/sources/ADIR b/sources/ADIR index 35819d67..98808193 100644 --- a/sources/ADIR +++ b/sources/ADIR @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "14-Oct-2020 11:14:03" {DSK}kaplan>Local>medley3.5>lispcore>sources>ADIR.;7 48306 changes to%: (FNS SYSOUT) previous date%: "14-Oct-2020 10:54:03" {DSK}kaplan>Local>medley3.5>lispcore>sources>ADIR.;6) (* ; " Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1920, 2017, 2020 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT ADIRCOMS) (RPAQQ ADIRCOMS [[COMS (* ; "user-level i/o routines") (FNS DELFILE FULLNAME INFILE INFILEP IOFILE OPENFILE OPENSTREAM OUTFILE OUTFILEP RENAMEFILE SIMPLE.FINDFILE) (CONSTANTS (MULTIPLE.STREAMS.PER.FILE.ALLOWED T)) (P (MOVD? 'SIMPLE.FINDFILE 'FINDFILE NIL T)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (* ;; "for the benefit of the call to PATHNAMEP in OPENSTREAM. PATHNAMEP (and pathnames) get defined much later in the loadup.") (MOVD? 'NILL 'CL:PATHNAMEP] (COMS (FNS UNPACKFILENAME UNPACKFILENAME.STRING LASTCHPOS \UPF.NEXTPOS \UPF.TEMPFILEP FILENAMEFIELD PACKFILENAME PACKFILENAME.STRING) (DECLARE%: DONTCOPY (MACROS CANONICAL.DIRECTORY UNPACKFILE1.DIRECTORY PACKFILENAME.ASSEMBLE UNPACKFILE1)) (VARS \FILENAME.SYNTAX) (GLOBALVARS \FILENAME.SYNTAX)) (COMS (* ;  "saving and restoring system state") (FNS LOGOUT MAKESYS SYSOUT SAVEVM HERALD INTERPRET.REM.CM \USEREVENT) (ADDVARS (AROUNDEXITFNS)) (INITVARS (HERALDSTRING "") (\USERNAME)) (GLOBALVARS HERALDSTRING USERNAME \USERNAME AROUNDEXITFNS) (FNS USERNAME SETUSERNAME)) (LOCALVARS . T) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILES (LOADCOMP) FILEIO)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA PACKFILENAME.STRING PACKFILENAME]) (* ; "user-level i/o routines") (DEFINEQ (DELFILE (LAMBDA (FILE) (* bvm%: "23-Oct-85 11:20") (AND FILE (NEQ FILE T) (\DELETEFILE FILE)))) (FULLNAME (LAMBDA (X RECOG) (* rmk%: "22-AUG-83 13:33") (COND ((type? STREAM X) (fetch (STREAM FULLNAME) of X)) (T (SELECTQ RECOG (NIL (SETQQ RECOG OLD)) ((OLD OLD/NEW NEW OLDEST)) (\ILLEGAL.ARG RECOG)) (\GETFILENAME X RECOG)))) ) (INFILE (LAMBDA (FILE) (* rmk%: " 3-OCT-79 14:23") (INPUT (OPENFILE FILE (QUOTE INPUT) (QUOTE OLD))))) (INFILEP (LAMBDA (FILE) (* rmk%: " 9-OCT-79 22:39") (\GETFILENAME FILE (QUOTE OLD)))) (IOFILE (LAMBDA (FILE) (* rmk%: " 5-SEP-81 13:54") (OPENFILE FILE (QUOTE BOTH) (QUOTE OLD)))) (OPENFILE [LAMBDA (FILE ACCESS RECOG PARAMETERS OPTIONAL) (* ; "Edited 23-May-91 19:12 by jds") (if MULTIPLE.STREAMS.PER.FILE.ALLOWED then (OPENSTREAM FILE ACCESS RECOG PARAMETERS OPTIONAL) else (fetch (STREAM FULLNAME) of (OPENSTREAM FILE ACCESS RECOG PARAMETERS OPTIONAL]) (OPENSTREAM (LAMBDA (FILE ACCESS RECOG PARAMETERS OBSOLETE) (* hdj "28-Aug-86 14:50") (PROG (REC OLDSTREAM STREAM) (SELECTQ ACCESS ((INPUT OUTPUT BOTH APPEND)) (\ILLEGAL.ARG ACCESS)) (SETQ REC (SELECTQ RECOG ((EXACT NEW OLD OLD/NEW OLDEST) RECOG) (NIL (SELECTQ ACCESS (INPUT (QUOTE OLD)) (OUTPUT (QUOTE NEW)) (QUOTE OLD/NEW))) (\ILLEGAL.ARG RECOG))) (if (OR (LISTP OBSOLETE) (AND PARAMETERS (NLISTP PARAMETERS))) then (* ;; "used to have OPENFILE/OPENSTREAM with BYTESIZE and PARAMETERS. Now it will take PARAMETERS, and generally ignore the BYTESIZE") (SETQ PARAMETERS (APPEND (SELECTQ PARAMETERS (7 (QUOTE ((TYPE TEXT)))) (8 (QUOTE ((TYPE BINARY)))) NIL) OBSOLETE))) (COND ((OR (EQ FILE T) (NULL FILE)) (* ;; "Handle T and NIL separately, cause they can return the terminal streams, for which the search isn't necessary and the \ADDOFD shouldn't be done.") (SETQ STREAM (\GETSTREAM FILE ACCESS)) (\DO.PARAMS.AT.OPEN STREAM ACCESS PARAMETERS) (RETURN STREAM))) (* ;; "Explicitly test for PATHNAMEP, as PATHNAMEP will have a NILL def early in the loadup, and the tests in \CONVERT-PATHNAME won't break anything") (* ;; "Pavel changed a call to (PATHNAMEP FILE) into (TYPEP FILE `PATHNAME) because PATHNAMEP didn't have a NILL defn early in the loadup and TYPEP has an optimizer on it that compiles away the call to TYPEP which also has no defn early in the loadup.") (* ;; "Pavel also added the call to MKSTRING below as a temporary hack to get around the fact that the Interlisp string functions can't yet handle Common Lisp simple-strings.") (if (TYPEP FILE (QUOTE PATHNAME)) then (SETQ FILE (\CONVERT-PATHNAME FILE))) (* ;; "We open the file before looking to see whether it is already open. This guarantees that we acquire the opening rights at the time we lookup the name. We then check to see if it is currently open in Lisp. If it is, we return the previous stream, which has the file's current state. ") (* ;; "There are still potential problems: First, an interrupt can happen while we are doing the search which causes the file to be deleted or re-opened beneath us, BEFORE it gets added to \OPENFILES. Second, a network device might not allow multiple openings of the file, even by the same guy with the same mode.") (SETQ STREAM (\OPENFILE FILE ACCESS REC PARAMETERS)) (COND ((AND (NOT MULTIPLE.STREAMS.PER.FILE.ALLOWED) (SETQ OLDSTREAM (\SEARCHOPENFILES (fetch FULLNAME of STREAM)))) (* ;; "There is already a stream open on the file. Check that there is no conflict. Eventually all this registration belongs in the device, so that we can have multiple streams open per file") (COND ((AND (EQ ACCESS (QUOTE INPUT)) (EQ (fetch ACCESS of OLDSTREAM) (QUOTE INPUT))) (* ; "Dispose of the newly-obtained stream, This might be a noop, but a network device (LEAF) cares") (OR (EQ STREAM OLDSTREAM) (\CLOSEFILE STREAM)) (\DO.PARAMS.AT.OPEN OLDSTREAM ACCESS PARAMETERS) (* ; "Do parameters on the old stream") (RETURN OLDSTREAM)) (T (LISPERROR "FILE WON'T OPEN" FILE)))) (T (AND (NOT MULTIPLE.STREAMS.PER.FILE.ALLOWED) (\ADDOFD STREAM)) (* ; "Parameters done on new stream by \OPENFILE") (RETURN STREAM))))) ) (OUTFILE (LAMBDA (FILE) (* rmk%: " 3-OCT-79 14:24") (OUTPUT (OPENFILE FILE (QUOTE OUTPUT) (QUOTE NEW))))) (OUTFILEP (LAMBDA (FILE) (* rmk%: " 9-OCT-79 22:39") (\GETFILENAME FILE (QUOTE NEW)))) (RENAMEFILE (LAMBDA (OLDFILE NEWFILE) (* hdj " 4-Sep-86 16:56") (SETQ OLDFILE (\CONVERT-PATHNAME OLDFILE)) (SETQ NEWFILE (\CONVERT-PATHNAME NEWFILE)) (AND OLDFILE NEWFILE (NEQ OLDFILE T) (NEQ NEWFILE T) (\RENAMEFILE OLDFILE NEWFILE))) ) (SIMPLE.FINDFILE (LAMBDA (FILE DUMMY DIRLST) (* bvm%: "23-Oct-85 11:22") (OR (for DIR in DIRLST when (SETQ $$VAL (INFILEP (PACKFILENAME.STRING (QUOTE DIRECTORY) DIR (QUOTE BODY) FILE))) do (RETURN $$VAL)) (AND (NOT (MEMB NIL DIRLST)) (INFILEP FILE)))) ) ) (DECLARE%: EVAL@COMPILE (RPAQQ MULTIPLE.STREAMS.PER.FILE.ALLOWED T) (CONSTANTS (MULTIPLE.STREAMS.PER.FILE.ALLOWED T)) ) (MOVD? 'SIMPLE.FINDFILE 'FINDFILE NIL T) (DECLARE%: DONTEVAL@LOAD DOCOPY (* ;; "for the benefit of the call to PATHNAMEP in OPENSTREAM. PATHNAMEP (and pathnames) get defined much later in the loadup.") (MOVD? 'NILL 'CL:PATHNAMEP) ) (DEFINEQ (UNPACKFILENAME (LAMBDA (FILE ONEFIELDFLG OSTYPE) (* ; "Edited 6-Jan-88 13:13 by bvm:") (UNPACKFILENAME.STRING FILE ONEFIELDFLG NIL OSTYPE T)) ) (UNPACKFILENAME.STRING (LAMBDA (FILE ONEFIELDFLG DIRFLG OSTYPE PACKFLG CLFLG) (* ; "Edited 30-Mar-90 22:37 by nm") (* ;;; "Given a string or atom representation of a file name, unpack it into its component parts") (PROG ((POS 1) (LEN (NCHARS FILE)) TEM BEYONDNAME BEYONDEXT VAL CODE HOSTP SUBDIREND FIRSTDOT SECONDDOT USEDSEMI) (COND ((NULL FILE) (RETURN NIL)) ((OR (LITATOM FILE) (STRINGP FILE) (NUMBERP FILE))) ((TYPEP FILE (QUOTE PATHNAME)) (RETURN (UNPACKPATHNAME.STRING FILE ONEFIELDFLG DIRFLG PACKFLG))) ((STREAMP FILE) (* ; "For streams, use full name. If anonymous, fake it") (SETQ FILE (OR (ffetch FULLFILENAME of FILE) (RETURN (COND (ONEFIELDFLG (AND (EQ ONEFIELDFLG (QUOTE NAME)) FILE)) (T (LIST (QUOTE NAME) FILE))))))) (T (\ILLEGAL.ARG FILE))) (COND ((SELCHARQ (NTHCHARCODE FILE 1) ({ (* ; "normal use in Interlisp-D") (SETQ TEM (SUB1 (OR (\UPF.NEXTPOS (CHARCODE }) FILE 2) 0)))) (%[ (* ; "some Xerox and Arpanet systems use '[' for host") (SETQ TEM (SUB1 (OR (\UPF.NEXTPOS (CHARCODE "]") FILE 2) 0)))) (%( (* ; "this is the 'proposed standard' for Xerox servers") (SETQ TEM (SUB1 (OR (\UPF.NEXTPOS (CHARCODE ")") FILE 2) 0)))) NIL) (UNPACKFILE1 (QUOTE HOST) 2 TEM) (COND ((EQ TEM -1) (* ; "Started with the host field delimiter, but there was no corresponding terminating delimiter .") (* ; "I'm not sure why the name is dealt with the host name.") (RETURN (DREVERSE VAL)))) (SETQ POS (IPLUS TEM 2)) (if (EQ OSTYPE T) then (* ; "Use actual host to determine os type") (SETQ OSTYPE (GETHOSTINFO (CAR VAL) (QUOTE OSTYPE)))) (SETQ HOSTP T))) (COND ((SETQ TEM (LASTCHPOS (CHARCODE %:) FILE POS)) (* ; "all device returned have DEVICE.END on it so that NIL: will work") (UNPACKFILE1 (QUOTE DEVICE) POS (if CLFLG then (SUB1 TEM) else TEM)) (SETQ POS (ADD1 TEM)) (SETQ HOSTP T))) (COND ((EQ DIRFLG (QUOTE RETURN)) (* ; "assert that this is a directory; more forgiving about missing trailing delimiter. There are two distinct cases for the missing initial delimiter. If HOST is also specified, it is dealt with as the true %"relative pathname%" by device dependent manner, otherwise it is dealt with following the %"incomplete file names%" convention. In the first case, returns RELATIVEDIRECTORY instead of DIRECTORY and in the second case, returns SUBDIRECTORY.") (LET ((TYPE (QUOTE DIRECTORY)) (START (SELCHARQ (NTHCHARCODE FILE POS) (NIL (* ; "just host, return") (RETURN (DREVERSE VAL))) ((/ <) (* ; "Started with the initial directory delimiter.") (ADD1 POS)) POS)) END) (SETQ END (SELCHARQ (NTHCHARCODE FILE -1) ((/ >) (COND ((EQ START POS) (* ; "Didn't start with a directory delimiter,") (COND ((NOT HOSTP) (* ; "%"Incomplete file names%" case defined in IRM. This is a subdirectory of the current connected directory") (SETQ TYPE (QUOTE SUBDIRECTORY))) (T (* ; "True %"relative pathname%". The way to deal with it is dependent on the device on which HOST is implemented.") (SETQ TYPE (QUOTE RELATIVEDIRECTORY)))))) (COND ((EQ LEN POS) (* ; "Only the initial directory is specified (i.e. %"{DSK}/%").") (SETQ START POS) -1) (T -2))) (PROGN (COND ((EQ START POS) (* ; "Both of the initial and trail delimiters are omitted.") (COND ((NOT HOSTP) (* ; "%"Incomplete file names%" case defined in IRM. This is a subdirectory of the current connected directory") (SETQ TYPE (QUOTE SUBDIRECTORY))) (T (* ; "True %"relative pathname%". The way to deal with it is dependent on the device on which HOST is implemented.") (SETQ TYPE (QUOTE RELATIVEDIRECTORY))))) (T (COND ((EQ LEN POS) (* ; "Only the initial directory is specified (i.e. %"{DSK}<%").") (SETQ START POS))))) -1))) (UNPACKFILE1.DIRECTORY TYPE START END)) (RETURN (DREVERSE VAL))) ((SELCHARQ (NTHCHARCODE FILE POS) (/ (* ; "unix and the 'xerox standard' use / for delimiter") (* ; "In the case of the {DSK}/FOO>BAR, FOO should be dealt with as a directory.") (SETQ TEM (LASTCHPOS (CHARCODE (/ >)) FILE (ADD1 POS))) T) ((< >) (* ; "Interlisp-D and most other Xerox systems, and Tops-20/Tenex use <>. Jericho uses >>") (* ; "In the case of the {DSK} /)) FILE (ADD1 POS))) T) NIL) (* ;; "allow {DSK}/etc to be a directory specification.") (if TEM then (UNPACKFILE1.DIRECTORY (QUOTE DIRECTORY) (ADD1 POS) (SUB1 TEM)) (SETQ POS (ADD1 TEM)) else (* ;; "{DSK}/foo: the directory is /, the name is foo") (UNPACKFILE1.DIRECTORY (QUOTE DIRECTORY) POS POS) (SETQ POS (ADD1 POS))) (SETQ HOSTP T)) ((SETQ TEM (LASTCHPOS (CHARCODE (/ >)) FILE POS)) (* ; " {eris}abc> relative") (* ;; " This is the true %"relative pathname%". Returns RELATIVEDIRECTORY instead of DIRECTORY.") (COND ((NOT HOSTP) (* ; "%"Incomplete file names%" case.") (UNPACKFILE1.DIRECTORY (if (EQ DIRFLG (QUOTE FIELD)) then (QUOTE DIRECTORY) else (QUOTE SUBDIRECTORY)) POS (SUB1 TEM))) (T (* ; "True %"relative pathname%".") (UNPACKFILE1.DIRECTORY (if (EQ DIRFLG (QUOTE FIELD)) then (QUOTE DIRECTORY) else (QUOTE RELATIVEDIRECTORY)) POS (SUB1 TEM)))) (SETQ POS (ADD1 TEM)) (SETQ HOSTP T))) (OR (SETQ CODE (NTHCHARCODE FILE (SETQ TEM POS))) (RETURN (DREVERSE VAL))) (if (EQ OSTYPE T) then (* ; "There wasn't a host field in the name, so we have no clue") (SETQ OSTYPE NIL)) NAMELP (* ;; "At this point, CODE is the TEM'th char of file name. POS is the first character of the field we are currently working on.") (SELCHARQ CODE (%. (* ; "Note position for later--we only want to deal with the last set of dots") (if BEYONDNAME then (* ; "no longer of interest (probably a bad name, too)") elseif FIRSTDOT then (* ; "We're recording the second dot") (if SECONDDOT then (* ; "Note only the two most recent dots") (SETQ FIRSTDOT SECONDDOT)) (SETQ SECONDDOT TEM) else (SETQ FIRSTDOT TEM))) ((! ; NIL) (* ; "SUBDIRECTORY, NAME and EXTENSION fields definitely terminated by now") (if (SELCHARQ CODE (! (* ; "! is only a delimiter on IFS, so ignore it if we know the ostype is something else") (AND OSTYPE (NEQ OSTYPE (QUOTE IFS)))) (; (* ; "If we've already parsed the extension, then we have a semi in the middle of the version. Skip it unless it's ;T or ;S") (AND BEYONDEXT (NOT (\UPF.TEMPFILEP FILE (ADD1 TEM))))) NIL) then (GO NEXTCHAR)) (if FIRSTDOT then (* ; "Have a name and/or extension to parse now") (if (AND SECONDDOT (NOT (if OSTYPE then (* ; "Known OS type must be Tops20 for second dot to mean version") (EQ OSTYPE (QUOTE TOPS20)) else (* ; "Unknown OS type, so check that %"version%" is numeric or wildcard") (AND (for I from (ADD1 SECONDDOT) to (SUB1 TEM) bind CH always (OR (DIGITCHARP (SETQ CH (NTHCHARCODE FILE I))) (EQ CH (CHARCODE *)))) (SELCHARQ CODE (NIL (* ; "end of file name, ok") T) (; (* ; "This semi-colon better not be introducing a version") (\UPF.TEMPFILEP FILE (ADD1 TEM))) NIL))))) then (* ; "Second dot is not intoducing a version") (SETQ FIRSTDOT SECONDDOT) (SETQ SECONDDOT NIL)) (UNPACKFILE1 (QUOTE NAME) POS (SUB1 FIRSTDOT)) (SETQ POS (ADD1 (if SECONDDOT then (UNPACKFILE1 (QUOTE EXTENSION) (ADD1 FIRSTDOT) (SUB1 SECONDDOT)) (SETQ BEYONDEXT T) SECONDDOT else FIRSTDOT))) (SETQ BEYONDNAME T) (SETQ FIRSTDOT NIL)) (UNPACKFILE1 (COND ((NOT BEYONDNAME) (SETQQ BEYONDNAME NAME)) ((NOT BEYONDEXT) (QUOTE EXTENSION)) ((AND (EQ BEYONDEXT (CHARCODE ";")) (\UPF.TEMPFILEP FILE POS))) (T (* ; "Everything after the semi was version") (QUOTE VERSION))) POS (SUB1 TEM)) (if (NULL CODE) then (* ; "End of string") (RETURN (DREVERSE VAL))) (SETQ BEYONDEXT CODE) (* ; "Note the character that terminated the name/ext") (SETQ POS (ADD1 TEM))) (%' (* ; "Quoter") (add TEM 1)) NIL) NEXTCHAR (SETQ CODE (NTHCHARCODE FILE (add TEM 1))) (GO NAMELP))) ) (LASTCHPOS (LAMBDA (CH STR START) (* ; "Edited 17-May-88 13:43 by MASINTER") (PROG (RESULT NC) (OR START (SETQ START 1)) (while (SETQ NC (NTHCHARCODE STR START)) do (COND ((EQMEMB NC CH) (SETQ RESULT START)) ((EQ NC (CHARCODE %')) (add START 1))) (add START 1)) (RETURN RESULT))) ) (\UPF.NEXTPOS (LAMBDA (CHAR STRING POS) (* lmm " 5-Oct-84 18:41") (bind NCH while (SETQ NCH (NTHCHARCODE STRING POS)) do (COND ((EQMEMB NCH CHAR) (RETURN POS)) ((EQ NCH (CHARCODE %')) (add POS 1))) (add POS 1))) ) (\UPF.TEMPFILEP (LAMBDA (FILENAME START) (* ; "Edited 6-Jan-88 13:12 by bvm:") (* ;; "Checks whether START denotes a temporary mark for Twenex filename beginning at START. Returns the appropriate field name if so. Not sure we should parse this junk any more, but this at least localizes it.") (SELCHARQ (NTHCHARCODE FILENAME START) ((T S) (* ; "Funny temp stuff") (AND (EQ START (NCHARS FILENAME)) (QUOTE TEMPORARY))) NIL)) ) (FILENAMEFIELD (LAMBDA (FILE FIELDNAME) (* ; "Edited 6-Mar-90 19:38 by nm") (UNPACKFILENAME.STRING FILE (SELECTQ FIELDNAME ((VERSION GENERATION) (QUOTE VERSION)) ((DEVICE STRUCTURE) (QUOTE DEVICE)) FIELDNAME) (QUOTE FIELD) NIL T)) ) (PACKFILENAME (LAMBDA N (* bvm%: " 5-Jul-85 15:40") (COND ((AND (EQ N 1) (LISTP (ARG N 1))) (* ; "spread argument list") (APPLY (FUNCTION PACKFILENAME) (ARG N 1))) (T (PACK (PACKFILENAME.ASSEMBLE))))) ) (PACKFILENAME.STRING (LAMBDA N (* bvm%: " 5-Jul-85 15:41") (COND ((AND (EQ N 1) (LISTP (ARG N 1))) (* ; "spread argument list") (APPLY (FUNCTION PACKFILENAME.STRING) (ARG N 1))) (T (CONCATLIST (PACKFILENAME.ASSEMBLE))))) ) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE [PUTPROPS CANONICAL.DIRECTORY MACRO (OPENLAMBDA (SRCSTRING) (AND SRCSTRING (LET ((LEN (NCHARS SRCSTRING))) (COND ((EQ LEN 1) (if (STREQUAL SRCSTRING "/") then "<" else SRCSTRING)) (T (LET* ((FATP (ffetch (STRINGP FATSTRINGP) of SRCSTRING)) (DSTSTRING (ALLOCSTRING LEN NIL NIL (AND FATP T))) (DSTBASE (ffetch (STRINGP BASE) of DSTSTRING)) (DSTPOS 0) (NEXTPOS -1)) (if (NOT FATP) then [for SRCPOS from 1 to LEN bind CODE first (while (EQMEMB (NTHCHARCODE SRCSTRING SRCPOS) (CHARCODE (< / >))) do (add SRCPOS 1)) (if (> SRCPOS LEN) then (RETURN "<")) do (SELCHARQ (SETQ CODE (NTHCHARCODE SRCSTRING SRCPOS)) ((> /) (if (> DSTPOS NEXTPOS) then (\PUTBASETHIN DSTBASE DSTPOS (CHARCODE >)) (SETQ NEXTPOS (add DSTPOS 1)))) (%' (\PUTBASETHIN DSTBASE DSTPOS CODE) (add DSTPOS 1) (if (NEQ SRCPOS LEN) then (\PUTBASETHIN DSTBASE DSTPOS (NTHCHARCODE SRCSTRING (add SRCPOS 1))) (add DSTPOS 1))) (PROGN (\PUTBASETHIN DSTBASE DSTPOS CODE) (add DSTPOS 1))) finally (RETURN (if (EQ DSTPOS LEN) then (if (EQMEMB (NTHCHARCODE DSTSTRING -1) (CHARCODE (> /))) then (SUBSTRING DSTSTRING 1 -2) else DSTSTRING) elseif (EQMEMB (NTHCHARCODE DSTSTRING DSTPOS) (CHARCODE (> /))) then (SUBSTRING DSTSTRING 1 (SUB1 DSTPOS)) else (SUBSTRING DSTSTRING 1 DSTPOS] else (for SRCPOS from 1 to LEN bind CODE first (while (EQMEMB (NTHCHARCODE SRCSTRING SRCPOS) (CHARCODE (< / >))) do (add SRCPOS 1)) do (SELCHARQ (SETQ CODE (NTHCHARCODE SRCSTRING SRCPOS)) ((> /) (if (> DSTPOS NEXTPOS) then (\PUTBASEFAT DSTBASE DSTPOS (CHARCODE >)) (SETQ NEXTPOS (add DSTPOS 1)))) (%' (\PUTBASEFAT DSTBASE DSTPOS CODE) (add DSTPOS 1) (if (NEQ SRCPOS LEN) then (\PUTBASEFAT DSTBASE DSTPOS (NTHCHARCODE SRCSTRING (add SRCPOS 1))) (add DSTPOS 1))) (PROGN (\PUTBASEFAT DSTBASE DSTPOS CODE) (add DSTPOS 1))) finally (RETURN (if (EQ DSTPOS LEN) then (if (EQMEMB (NTHCHARCODE DSTSTRING -1) (CHARCODE (> /))) then (SUBSTRING DSTSTRING 1 -2) else DSTSTRING) elseif (EQMEMB (NTHCHARCODE DSTSTRING DSTPOS) (CHARCODE (> /))) then (SUBSTRING DSTSTRING 1 (SUB1 DSTPOS)) else (SUBSTRING DSTSTRING 1 DSTPOS] [PUTPROPS UNPACKFILE1.DIRECTORY MACRO (OPENLAMBDA (NAM ST END) (LET* ((OLDDIR (SUBSTRING FILE ST END)) (NEWDIR (CANONICAL.DIRECTORY OLDDIR))) (COND [(NOT ONEFIELDFLG) (SETQ VAL (CONS (COND (PACKFLG (AND NEWDIR (MKATOM NEWDIR))) (T (OR NEWDIR ""))) (CONS NAM VAL] ((EQMEMB NAM ONEFIELDFLG) (RETURN (COND (PACKFLG (AND NEWDIR (MKATOM NEWDIR))) (T (OR NEWDIR ""] [PUTPROPS PACKFILENAME.ASSEMBLE MACRO (NIL (PROG ((BLIP "") (I 1) HOST DEVICE STRUCTURE DIRECTORY SUBDIRECTORY RELATIVEDIRECTORY NAME EXTENSION VERSION TEMPORARY PROTECTION ACCOUNT PACKLIST VAR VAL TEMP) (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY SUBDIRECTORY NAME EXTENSION VERSION TEMPORARY PROTECTION ACCOUNT)) LP (COND ((<= I N) (* ;; "Grab the next field-name / value pair and fold it into the filename:") (COND ((LISTP (SETQ VAR (ARG N I))) (SETQ VAL (CDR VAR)) (SETQ VAR (CAR VAR))) ((<= (SETQ I (ADD1 I)) N) (SETQ VAL (ARG N I))) (T (SETQ VAL))) (OR (STRINGP VAL) (ATOM VAL) (EQ VAR 'BODY) (\ILLEGAL.ARG VAL)) (SELECTQ VAR (BODY (MAP (UNPACKFILENAME.STRING (COND ((LISTP VAL) (PACKFILENAME.STRING VAL)) (T VAL)) NIL 'OK) [FUNCTION (LAMBDA (X) (SELECTQ (CAR X) (HOST (OR HOST (SETQ HOST (OR (CADR X) BLIP)))) (DEVICE (OR DEVICE (SETQ DEVICE (OR (CADR X) BLIP)))) (DIRECTORY [OR DIRECTORY (COND (RELATIVEDIRECTORY (SETQ DIRECTORY BLIP)) (T (SETQ DIRECTORY (OR (CADR X) BLIP]) (SUBDIRECTORY (OR SUBDIRECTORY (SETQ SUBDIRECTORY (OR (CADR X) BLIP)))) (RELATIVEDIRECTORY [OR RELATIVEDIRECTORY (COND (DIRECTORY (SETQ RELATIVEDIRECTORY BLIP)) (T (SETQ RELATIVEDIRECTORY (OR (CADR X) BLIP]) (NAME (OR NAME (SETQ NAME (OR (CADR X) BLIP)))) (EXTENSION (OR EXTENSION (SETQ EXTENSION (OR (CADR X) BLIP)))) (VERSION (OR VERSION (SETQ VERSION (OR (CADR X) BLIP)))) (SHOULDNT] (FUNCTION CDDR))) (HOST [OR HOST (SETQ HOST (COND (VAL (SELCHARQ (CHCON1 VAL) (({ %[ %() (SUBSTRING VAL 2 (SELCHARQ (NTHCHARCODE VAL -1) ((} %] %)) -2) -1))) VAL)) (T BLIP]) ((PATHNAME DIRECTORY) [COND (VAL (for X on (SETQ VAL (UNPACKFILENAME.STRING VAL NIL 'RETURN)) by (CDDR X) do (SELECTQ (CAR X) (HOST [COND ((NOT HOST) (SETQ HOST (OR (CADR X) BLIP]) (DEVICE [COND ((NOT DEVICE) (SETQ DEVICE (OR (CADR X) BLIP]) (SUBDIRECTORY [OR DIRECTORY (COND (RELATIVEDIRECTORY (SETQ DIRECTORY BLIP)) (T (SETQ DIRECTORY (OR (CADR X) BLIP]) (RELATIVEDIRECTORY (* ;; "This used to set RELATIVEDIRECTORY to BLIP if DIRECTORY was already specified. It really should act as a subdirectory in that case? JDS") (OR RELATIVEDIRECTORY (SETQ RELATIVEDIRECTORY (OR (CADR X) BLIP)))) (DIRECTORY [OR DIRECTORY (COND (RELATIVEDIRECTORY (SETQ DIRECTORY BLIP)) (T (SETQ DIRECTORY (OR (CADR X) BLIP]) (ERROR "Illegal field in DIRECTORY slot" VAL))) (for X on VAL by (CDDR X) do (SELECTQ (CAR X) (HOST (OR DEVICE (SETQ DEVICE BLIP)) (OR DIRECTORY (SETQ DIRECTORY BLIP))) (DEVICE (OR DIRECTORY (SETQ DIRECTORY BLIP))) NIL))) (T (OR DIRECTORY (SETQ DIRECTORY BLIP]) (SUBDIRECTORY (OR SUBDIRECTORY (SETQ SUBDIRECTORY (OR VAL BLIP)))) (RELATIVEDIRECTORY (* ;; "This used to set RELATIVEDIRECTORY to BLIP if DIRECTORY was already specified. It really should act as a subdirectory in that case? JDS") (OR RELATIVEDIRECTORY (SETQ RELATIVEDIRECTORY (OR VAL BLIP)))) (DEVICE (OR DEVICE (SETQ DEVICE (OR VAL BLIP)))) (NAME (OR NAME (SETQ NAME (OR VAL BLIP)))) (EXTENSION (OR EXTENSION (SETQ EXTENSION (OR VAL BLIP)))) (VERSION (OR VERSION (SETQ VERSION (OR VAL BLIP)))) (TEMPORARY (OR TEMPORARY (SETQ TEMPORARY (OR VAL BLIP)))) (\ILLEGAL.ARG VAR)) (SETQ I (ADD1 I)) (GO LP))) (COND ((EQ HOST BLIP) (SETQ HOST NIL))) (COND ((EQ DEVICE BLIP) (SETQ DEVICE NIL))) (COND ((EQ DIRECTORY BLIP) (SETQ DIRECTORY NIL))) [COND ((EQ SUBDIRECTORY BLIP) (SETQ SUBDIRECTORY NIL)) ((AND NIL SUBDIRECTORY) (COND ((AND (NULL DIRECTORY) (OR HOST DEVICE)) (SETQ DIRECTORY SUBDIRECTORY) (SETQ SUBDIRECTORY NIL] (COND ((EQ RELATIVEDIRECTORY BLIP) (SETQ RELATIVEDIRECTORY NIL))) (RETURN (NCONC (AND HOST (LIST "{" HOST "}")) [AND DEVICE (COND ((AND (SETQ TEMP (LASTCHPOS (CHARCODE %:) DEVICE 1)) (EQ TEMP (NCHARS DEVICE))) (LIST DEVICE)) (T (LIST DEVICE ":"] [COND (DIRECTORY (COND [[OR (STREQUAL DIRECTORY "<") (AND (SETQ TEMP (LASTCHPOS (CHARCODE (> /)) DIRECTORY 1)) (EQ TEMP (NCHARS DIRECTORY] (COND ((EQMEMB (NTHCHARCODE DIRECTORY 1) (CHARCODE (< /))) (LIST DIRECTORY)) (T (LIST (CL:FIRST \FILENAME.SYNTAX) DIRECTORY] (T (LIST (CL:FIRST \FILENAME.SYNTAX) DIRECTORY (CL:SECOND \FILENAME.SYNTAX] [COND (RELATIVEDIRECTORY (COND ((AND (SETQ TEMP (LASTCHPOS (CHARCODE (> /)) RELATIVEDIRECTORY 1)) (EQ TEMP (NCHARS RELATIVEDIRECTORY))) (LIST RELATIVEDIRECTORY)) (T (LIST RELATIVEDIRECTORY (CL:SECOND \FILENAME.SYNTAX ] [COND (SUBDIRECTORY (LIST SUBDIRECTORY (CL:SECOND \FILENAME.SYNTAX] (AND NAME (NEQ NAME BLIP) (LIST NAME)) (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP)) (AND VERSION (NEQ VERSION BLIP))) (LIST (COND ((AND EXTENSION (EQ (CHCON1 EXTENSION) (CHARCODE %.))) BLIP) (T '%.)) (OR EXTENSION BLIP))) (AND VERSION (NEQ VERSION BLIP) (LIST (CL:THIRD \FILENAME.SYNTAX) (COND ((FIXP VERSION) VERSION) (T (SELCHARQ (CHCON1 VERSION) ((%. ! ;) (SUBSTRING VERSION 2 -1)) VERSION] [PUTPROPS UNPACKFILE1 MACRO (OPENLAMBDA (NAM ST END) (* lmm "22-APR-81 22:21") (COND [(NOT ONEFIELDFLG) (SETQ VAL (CONS (COND (PACKFLG (SUBATOM FILE ST END)) (T (OR (SUBSTRING FILE ST END) ""))) (CONS NAM VAL] ((EQMEMB NAM ONEFIELDFLG) (RETURN (COND (PACKFLG (SUBATOM FILE ST END)) (T (OR (SUBSTRING FILE ST END) ""] ) ) (RPAQQ \FILENAME.SYNTAX ("<" ">" ";")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \FILENAME.SYNTAX) ) (* ; "saving and restoring system state") (DEFINEQ (LOGOUT (LAMBDA (FAST) (* hdj "23-May-86 16:20") (\USEREVENT (QUOTE BEFORELOGOUT)) (COND ((OR (EQ FAST T) (\FLUSHVMOK? (QUOTE LOGOUT))) (* ; "Check that we have a vmem file before allowing LOGOUT") (\PROCESS.BEFORE.LOGOUT) (\DEVICEEVENT (QUOTE BEFORELOGOUT)) (\SETTOTALTIME) (* ; "update the total time that this sysout has been running.") (\LOGOUT0 FAST) (* ;; "Must re-establish the state of devices and of previously open files that might have been modified at the EXEC.") (\RESETKEYBOARD) (\DEVICEEVENT (QUOTE AFTERLOGOUT)) (\OPENLINEBUF) (\PROCESS.AFTER.EXIT (QUOTE AFTERLOGOUT)) (\USEREVENT (QUOTE AFTERLOGOUT)) (INTERPRET.REM.CM) NIL))) ) (MAKESYS [LAMBDA (FILE NAME) (DECLARE (GLOBALVARS \MISCSTATS) (SPECVARS FILE NAME)) (* ; "Edited 13-Oct-2020 22:51 by rmk:") (* ; "Edited 28-Jul-88 18:16 by drc:") (\FLUSHVMOK? 'MAKESYS) (\USEREVENT 'BEFOREMAKESYS) (HERALD (CONCAT (OR NAME (CL:STRING-CAPITALIZE MAKESYSNAME)) " " (SUBSTRING (SETQ MAKESYSDATE (DATE)) 1 11) " ...")) (\DEVICEEVENT 'BEFOREMAKESYS) (* ;; "RMK: make sysout on a temp file, then rename it in order to get version numbers") (LET [(NEWFILE (\COPYSYS (CONCAT (PACKFILENAME 'VERSION NIL 'BODY (OUTFILEP FILE)) "-TEMP"] (COND ((NLISTP NEWFILE) (* ;  "Coming back from doing the MAKESYS, so just set up to keep going.,") (\DEVICEEVENT 'AFTERDOMAKESYS) (\USEREVENT 'AFTERDOMAKESYS) (RENAMEFILE NEWFILE (SETQ FILE (OUTFILEP FILE))) FILE) (T (* ;  "Coming back in the MAKESYS'd sysout, so restart the world.") (\DEVICEEVENT 'AFTERMAKESYS) (\PROCESS.AFTER.EXIT 'AFTERMAKESYS) (PRIN1 HERALDSTRING T) (\USEREVENT 'AFTERMAKESYS) (INTERPRET.REM.CM) (* ;  "Run the commands in the file REM.CM") (RESET]) (SYSOUT [LAMBDA (FILE) (* ; "Edited 14-Oct-2020 11:13 by rmk:") (* hdj "29-Sep-86 12:14") (DECLARE (GLOBALVARS \MISCSTATS) (SPECVARS FILE)) (* ;  "FILE is special so that BEFORESYSOUTFORMS can alter it") (\FLUSHVMOK? 'SYSOUT) (\USEREVENT 'BEFORESYSOUT) (\DEVICEEVENT 'BEFORESYSOUT) (* ;;  "RMK: Fix it so that sysouts are versioned. Temp file goes to same place as eventual sysout.") (LET ((TOTALTIMESAVE (fetch TOTALTIME of \MISCSTATS)) NEWFILE) (* ;  "update the total time field so that the run time in the sysout will be right.") (\SETTOTALTIME) (SETQ NEWFILE (\COPYSYS (CONCAT (PACKFILENAME 'VERSION NIL 'BODY (OUTFILEP FILE)) "-TEMP"))) (RENAMEFILE NEWFILE (SETQ FILE (OUTFILEP FILE))) [COND ((NLISTP NEWFILE) (* ;; "Continuing in same sysout; reset TOTALTIME in misc stats page to not include the time before the sysout.") (replace TOTALTIME of \MISCSTATS with TOTALTIMESAVE) (\DEVICEEVENT 'AFTERDOSYSOUT) (\USEREVENT 'AFTERDOSYSOUT)) (T (* ; "restarting") (\DEVICEEVENT 'AFTERSYSOUT) (\PROCESS.AFTER.EXIT 'AFTERSYSOUT) (INTERPRET.REM.CM) (\USEREVENT 'AFTERSYSOUT] FILE]) (SAVEVM (LAMBDA (RELEASEFLG) (* hdj "23-May-86 16:20") (* ;; "Save the virtual memory. This is similar to logging out, then back in, but is much faster, since it doesn't lose any pages. Conceptually, this is like doing a sysout to Lisp.virtualmem") (\FLUSHVMOK? (QUOTE SAVEVM)) (\USEREVENT (QUOTE BEFORESAVEVM)) (\DEVICEEVENT (QUOTE BEFORESAVEVM)) (COND ((\FLUSHVM) (\RESETKEYBOARD) (* ; "Returns T when starting up fresh") (\DEVICEEVENT (QUOTE AFTERSAVEVM)) (\PROCESS.AFTER.EXIT (QUOTE AFTERSAVEVM)) (\USEREVENT (QUOTE AFTERSAVEVM)) T) (T (\DEVICEEVENT (QUOTE AFTERDOSAVEVM)) (\USEREVENT (QUOTE AFTERDOSAVEVM))))) ) (HERALD (LAMBDA (STR) (* wt%: " 2-MAY-79 15:38") (AND STR (SETQ HERALDSTRING STR)) HERALDSTRING)) (INTERPRET.REM.CM [LAMBDA (RETFLG) (* ; "Edited 29-Jun-2017 15:36 by rmk:") (DECLARE (GLOBALVARS STARTUPFORM)) (* ;;; "Looks at REM.CM and evaluates the form there if the first character of the file is open paren or doublequote. If it's a string, it will be unread,, else the form will be evaluated at the next prompt. For use in INIT.LISP, among others. If RETFLG is true, the expression read is simply returned") (PROG ([FILE (CAR (NLSETQ (OPENSTREAM '{DSK}REM.CM;1 'BOTH 'OLD] COM AUXFILE) (OR FILE (RETURN)) [COND ([AND (IGREATERP (GETFILEINFO FILE 'LENGTH) 0) (SELECTQ (SKIPSEPRS FILE T) ((%( %") T) NIL) (SETQ COM (PROGN (SETFILEINFO FILE 'ENDOFSTREAMOP (FUNCTION ERROR!)) (CAR (NLSETQ (READ FILE T] (COND (RETFLG (* ; "Save it to return")) ((LISTP COM) (* ; "make it happen at next prompt") (SETQ STARTUPFORM (LIST 'PROGN '(SETQ PROMPTCHARFORMS (DREMOVE STARTUPFORM PROMPTCHARFORMS)) (LIST 'PRINT (LIST 'LISPXEVAL (KWOTE COM)) T T))) (SETQ PROMPTCHARFORMS (CONS STARTUPFORM PROMPTCHARFORMS))) (T (* ; "Unread a string") (* ;  "RMK: Replace CR and LF by space to avoid EOL convention issues") (FOR I FROM 1 TO (NCHARS COM) WHEN (FMEMB (NTHCHARCODE COM I) (CHARCODE (CR LF EOL))) DO (RPLCHARCODE COM I (CHARCODE SPACE))) (BKSYSBUF COM))) (* ;; "Eat up the command terminator") (WHILE (FMEMB (\PEEKBIN FILE T) (CHARCODE (CR LF EOL ;))) DO (\BIN FILE)) (COND ((\EOFP FILE) (* ;  "Nothing left, get rid of the file") (CLOSEF FILE) (DELFILE FILE) (\SETEOFPTR FILE 0)) (T (* ;; "Need to rewrite REM.CM with remainder of text") (SETQ AUXFILE (OPENSTREAM '{NODIRCORE} 'BOTH 'NEW)) (COPYBYTES FILE AUXFILE) (SETFILEPTR FILE 0) (COPYBYTES AUXFILE FILE 0 (GETFILEPTR AUXFILE)) (CLOSEF AUXFILE) (\SETEOFPTR FILE (GETFILEPTR FILE)) (CLOSEF FILE] (RETURN (COND (RETFLG COM) (COM T]) (\USEREVENT (LAMBDA (EVENT) (DECLARE (GLOBALVARS AROUNDEXITFNS)) (* bvm%: "16-Dec-83 15:27") (for FN in (SELECTQ EVENT ((BEFORELOGOUT BEFORESYSOUT BEFORESAVEVM BEFOREMAKESYS) AROUNDEXITFNS) (REVERSE AROUNDEXITFNS)) do (APPLY* FN EVENT))) ) ) (ADDTOVAR AROUNDEXITFNS ) (RPAQ? HERALDSTRING "") (RPAQ? \USERNAME ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS HERALDSTRING USERNAME \USERNAME AROUNDEXITFNS) ) (DEFINEQ (USERNAME (LAMBDA (FLG STRPTR PRESERVECASE) (* lmm "28-MAR-82 14:10") (* ; "On 10, USERNAME can take a user number as arg") (PROG (ADDR NAME) (SETQ NAME (COND (FLG NIL) ((NEQ 0 (SETQ ADDR (fetch (IFPAGE UserNameAddr) of \InterfacePage))) (GetBcplString (\ADDBASE (EMADDRESS 0) ADDR) (EQ STRPTR T))) (T \USERNAME))) (OR PRESERVECASE (NULL NAME) (SETQ NAME (U-CASE NAME))) (RETURN (COND ((NULL NAME) NIL) ((STRINGP STRPTR) (SUBSTRING NAME 1 -1 STRPTR)) (T NAME))))) ) (SETUSERNAME (LAMBDA (NAME) (* lmm "28-MAR-82 14:11") (* ; "Changed interpretation of UserName0") (COND (NAME (PROG ((ADDR (fetch (IFPAGE UserNameAddr) of \InterfacePage))) (RETURN (COND ((NEQ ADDR 0) (SetBcplString (\ADDBASE (EMADDRESS 0) ADDR) NAME) (SETQ USERNAME (USERNAME NIL T))) (T (SETQ \USERNAME (CONCAT NAME))))))))) ) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILESLOAD (LOADCOMP) FILEIO) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA PACKFILENAME.STRING PACKFILENAME) ) (PUTPROPS ADIR COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1990 1991 1992 1920 2017 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (2794 7673 (DELFILE 2804 . 2904) (FULLNAME 2906 . 3140) (INFILE 3142 . 3248) (INFILEP 3250 . 3339) (IOFILE 3341 . 3438) (OPENFILE 3440 . 3840) (OPENSTREAM 3842 . 6967) (OUTFILE 6969 . 7078 ) (OUTFILEP 7080 . 7170) (RENAMEFILE 7172 . 7412) (SIMPLE.FINDFILE 7414 . 7671)) (8045 17409 ( UNPACKFILENAME 8055 . 8204) (UNPACKFILENAME.STRING 8206 . 15792) (LASTCHPOS 15794 . 16079) ( \UPF.NEXTPOS 16081 . 16298) (\UPF.TEMPFILEP 16300 . 16732) (FILENAMEFIELD 16734 . 16971) (PACKFILENAME 16973 . 17179) (PACKFILENAME.STRING 17181 . 17407)) (38426 46850 (LOGOUT 38436 . 39085) (MAKESYS 39087 . 40854) (SYSOUT 40856 . 42599) (SAVEVM 42601 . 43223) (HERALD 43225 . 43326) (INTERPRET.REM.CM 43328 . 46603) (\USEREVENT 46605 . 46848)) (47032 47847 (USERNAME 47042 . 47511) (SETUSERNAME 47513 . 47845))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "22-Feb-2021 15:32:34" {DSK}larry>medley>sources>ADIR.;11 61717 changes to%: (FNS INTERPRET.REM.CM) previous date%: "21-Feb-2021 21:49:20" {DSK}larry>medley>sources>ADIR.;10) (* ; " Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1920, 2017, 2020, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT ADIRCOMS) (RPAQQ ADIRCOMS [[COMS (* ; "user-level i/o routines") (FNS DELFILE FULLNAME INFILE INFILEP IOFILE OPENFILE OPENSTREAM OUTFILE OUTFILEP RENAMEFILE SIMPLE.FINDFILE) (CONSTANTS (MULTIPLE.STREAMS.PER.FILE.ALLOWED T)) (P (MOVD? 'SIMPLE.FINDFILE 'FINDFILE NIL T)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (* ;; "for the benefit of the call to PATHNAMEP in OPENSTREAM. PATHNAMEP (and pathnames) get defined much later in the loadup.") (MOVD? 'NILL 'CL:PATHNAMEP] (COMS (FNS UNPACKFILENAME UNPACKFILENAME.STRING LASTCHPOS \UPF.NEXTPOS \UPF.TEMPFILEP FILENAMEFIELD PACKFILENAME PACKFILENAME.STRING) (DECLARE%: DONTCOPY (MACROS CANONICAL.DIRECTORY UNPACKFILE1.DIRECTORY PACKFILENAME.ASSEMBLE UNPACKFILE1)) (VARS \FILENAME.SYNTAX) (GLOBALVARS \FILENAME.SYNTAX)) (COMS (* ;  "saving and restoring system state") (FNS LOGOUT MAKESYS SYSOUT SAVEVM HERALD INTERPRET.REM.CM \USEREVENT) (ADDVARS (AROUNDEXITFNS)) (INITVARS (HERALDSTRING "") (\USERNAME)) (GLOBALVARS HERALDSTRING USERNAME \USERNAME AROUNDEXITFNS) (FNS USERNAME SETUSERNAME)) (LOCALVARS . T) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILES (LOADCOMP) FILEIO)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA PACKFILENAME.STRING PACKFILENAME]) (* ; "user-level i/o routines") (DEFINEQ (DELFILE [LAMBDA (FILE) (* bvm%: "23-Oct-85 11:20") (AND FILE (NEQ FILE T) (\DELETEFILE FILE]) (FULLNAME [LAMBDA (X RECOG) (* rmk%: "22-AUG-83 13:33") (COND ((type? STREAM X) (fetch (STREAM FULLNAME) of X)) (T (SELECTQ RECOG (NIL (SETQQ RECOG OLD)) ((OLD OLD/NEW NEW OLDEST)) (\ILLEGAL.ARG RECOG)) (\GETFILENAME X RECOG]) (INFILE [LAMBDA (FILE) (* rmk%: " 3-OCT-79 14:23") (INPUT (OPENFILE FILE 'INPUT 'OLD]) (INFILEP [LAMBDA (FILE) (* rmk%: " 9-OCT-79 22:39") (\GETFILENAME FILE 'OLD]) (IOFILE [LAMBDA (FILE) (* rmk%: " 5-SEP-81 13:54") (OPENFILE FILE 'BOTH 'OLD]) (OPENFILE [LAMBDA (FILE ACCESS RECOG PARAMETERS OPTIONAL) (* ; "Edited 23-May-91 19:12 by jds") (if MULTIPLE.STREAMS.PER.FILE.ALLOWED then (OPENSTREAM FILE ACCESS RECOG PARAMETERS OPTIONAL) else (fetch (STREAM FULLNAME) of (OPENSTREAM FILE ACCESS RECOG PARAMETERS OPTIONAL]) (OPENSTREAM [LAMBDA (FILE ACCESS RECOG PARAMETERS OBSOLETE) (* hdj "28-Aug-86 14:50") (PROG (REC OLDSTREAM STREAM) (SELECTQ ACCESS ((INPUT OUTPUT BOTH APPEND)) (\ILLEGAL.ARG ACCESS)) (SETQ REC (SELECTQ RECOG ((EXACT NEW OLD OLD/NEW OLDEST) RECOG) (NIL (SELECTQ ACCESS (INPUT 'OLD) (OUTPUT 'NEW) 'OLD/NEW)) (\ILLEGAL.ARG RECOG))) (if (OR (LISTP OBSOLETE) (AND PARAMETERS (NLISTP PARAMETERS))) then (* ;; "used to have OPENFILE/OPENSTREAM with BYTESIZE and PARAMETERS. Now it will take PARAMETERS, and generally ignore the BYTESIZE") (SETQ PARAMETERS (APPEND (SELECTQ PARAMETERS (7 '((TYPE TEXT))) (8 '((TYPE BINARY))) NIL) OBSOLETE))) (COND ((OR (EQ FILE T) (NULL FILE)) (* ;; "Handle T and NIL separately, cause they can return the terminal streams, for which the search isn't necessary and the \ADDOFD shouldn't be done.") (SETQ STREAM (\GETSTREAM FILE ACCESS)) (\DO.PARAMS.AT.OPEN STREAM ACCESS PARAMETERS) (RETURN STREAM))) (* ;; "Explicitly test for PATHNAMEP, as PATHNAMEP will have a NILL def early in the loadup, and the tests in \CONVERT-PATHNAME won't break anything") (* ;; "Pavel changed a call to (PATHNAMEP FILE) into (TYPEP FILE `PATHNAME) because PATHNAMEP didn't have a NILL defn early in the loadup and TYPEP has an optimizer on it that compiles away the call to TYPEP which also has no defn early in the loadup.") (* ;; "Pavel also added the call to MKSTRING below as a temporary hack to get around the fact that the Interlisp string functions can't yet handle Common Lisp simple-strings.") (if (TYPEP FILE 'PATHNAME) then (SETQ FILE (\CONVERT-PATHNAME FILE))) (* ;; "We open the file before looking to see whether it is already open. This guarantees that we acquire the opening rights at the time we lookup the name. We then check to see if it is currently open in Lisp. If it is, we return the previous stream, which has the file's current state. ") (* ;; "There are still potential problems: First, an interrupt can happen while we are doing the search which causes the file to be deleted or re-opened beneath us, BEFORE it gets added to \OPENFILES. Second, a network device might not allow multiple openings of the file, even by the same guy with the same mode.") (SETQ STREAM (\OPENFILE FILE ACCESS REC PARAMETERS)) (COND [[AND (NOT MULTIPLE.STREAMS.PER.FILE.ALLOWED) (SETQ OLDSTREAM (\SEARCHOPENFILES (fetch FULLNAME of STREAM] (* ;; "There is already a stream open on the file. Check that there is no conflict. Eventually all this registration belongs in the device, so that we can have multiple streams open per file") (COND ((AND (EQ ACCESS 'INPUT) (EQ (fetch ACCESS of OLDSTREAM) 'INPUT)) (* ;  "Dispose of the newly-obtained stream, This might be a noop, but a network device (LEAF) cares") (OR (EQ STREAM OLDSTREAM) (\CLOSEFILE STREAM)) (\DO.PARAMS.AT.OPEN OLDSTREAM ACCESS PARAMETERS) (* ; "Do parameters on the old stream") (RETURN OLDSTREAM)) (T (LISPERROR "FILE WON'T OPEN" FILE] (T (AND (NOT MULTIPLE.STREAMS.PER.FILE.ALLOWED) (\ADDOFD STREAM)) (* ;  "Parameters done on new stream by \OPENFILE") (RETURN STREAM]) (OUTFILE [LAMBDA (FILE) (* rmk%: " 3-OCT-79 14:24") (OUTPUT (OPENFILE FILE 'OUTPUT 'NEW]) (OUTFILEP [LAMBDA (FILE) (* rmk%: " 9-OCT-79 22:39") (\GETFILENAME FILE 'NEW]) (RENAMEFILE [LAMBDA (OLDFILE NEWFILE) (* hdj " 4-Sep-86 16:56") (SETQ OLDFILE (\CONVERT-PATHNAME OLDFILE)) (SETQ NEWFILE (\CONVERT-PATHNAME NEWFILE)) (AND OLDFILE NEWFILE (NEQ OLDFILE T) (NEQ NEWFILE T) (\RENAMEFILE OLDFILE NEWFILE]) (SIMPLE.FINDFILE [LAMBDA (FILE DUMMY DIRLST) (* bvm%: "23-Oct-85 11:22") (OR (for DIR in DIRLST when (SETQ $$VAL (INFILEP (PACKFILENAME.STRING 'DIRECTORY DIR 'BODY FILE))) do (RETURN $$VAL)) (AND (NOT (MEMB NIL DIRLST)) (INFILEP FILE]) ) (DECLARE%: EVAL@COMPILE (RPAQQ MULTIPLE.STREAMS.PER.FILE.ALLOWED T) (CONSTANTS (MULTIPLE.STREAMS.PER.FILE.ALLOWED T)) ) (MOVD? 'SIMPLE.FINDFILE 'FINDFILE NIL T) (DECLARE%: DONTEVAL@LOAD DOCOPY (* ;; "for the benefit of the call to PATHNAMEP in OPENSTREAM. PATHNAMEP (and pathnames) get defined much later in the loadup.") (MOVD? 'NILL 'CL:PATHNAMEP) ) (DEFINEQ (UNPACKFILENAME [LAMBDA (FILE ONEFIELDFLG OSTYPE) (* ; "Edited 6-Jan-88 13:13 by bvm:") (UNPACKFILENAME.STRING FILE ONEFIELDFLG NIL OSTYPE T]) (UNPACKFILENAME.STRING [LAMBDA (FILE ONEFIELDFLG DIRFLG OSTYPE PACKFLG CLFLG) (* ; "Edited 30-Mar-90 22:37 by nm") (* ;;; "Given a string or atom representation of a file name, unpack it into its component parts") (PROG ((POS 1) (LEN (NCHARS FILE)) TEM BEYONDNAME BEYONDEXT VAL CODE HOSTP SUBDIREND FIRSTDOT SECONDDOT USEDSEMI) (COND ((NULL FILE) (RETURN NIL)) ((OR (LITATOM FILE) (STRINGP FILE) (NUMBERP FILE))) ((TYPEP FILE 'PATHNAME) (RETURN (UNPACKPATHNAME.STRING FILE ONEFIELDFLG DIRFLG PACKFLG))) [(STREAMP FILE) (* ;  "For streams, use full name. If anonymous, fake it") (SETQ FILE (OR (ffetch FULLFILENAME of FILE) (RETURN (COND (ONEFIELDFLG (AND (EQ ONEFIELDFLG 'NAME) FILE)) (T (LIST 'NAME FILE] (T (\ILLEGAL.ARG FILE))) (COND ((SELCHARQ (NTHCHARCODE FILE 1) ({ (* ; "normal use in Interlisp-D") (SETQ TEM (SUB1 (OR (\UPF.NEXTPOS (CHARCODE }) FILE 2) 0)))) (%[ (* ;  "some Xerox and Arpanet systems use '[' for host") (SETQ TEM (SUB1 (OR (\UPF.NEXTPOS (CHARCODE "]") FILE 2) 0)))) (%( (* ;  "this is the 'proposed standard' for Xerox servers") (SETQ TEM (SUB1 (OR (\UPF.NEXTPOS (CHARCODE ")") FILE 2) 0)))) NIL) (UNPACKFILE1 'HOST 2 TEM) [COND ((EQ TEM -1) (* ;  "Started with the host field delimiter, but there was no corresponding terminating delimiter .") (* ;  "I'm not sure why the name is dealt with the host name.") (RETURN (DREVERSE VAL] (SETQ POS (IPLUS TEM 2)) [if (EQ OSTYPE T) then (* ;  "Use actual host to determine os type") (SETQ OSTYPE (GETHOSTINFO (CAR VAL) 'OSTYPE] (SETQ HOSTP T))) (COND ((SETQ TEM (LASTCHPOS (CHARCODE %:) FILE POS)) (* ;  "all device returned have DEVICE.END on it so that NIL: will work") (UNPACKFILE1 'DEVICE POS (if CLFLG then (SUB1 TEM) else TEM)) (SETQ POS (ADD1 TEM)) (SETQ HOSTP T))) (COND ((EQ DIRFLG 'RETURN) (* ; "assert that this is a directory; more forgiving about missing trailing delimiter. There are two distinct cases for the missing initial delimiter. If HOST is also specified, it is dealt with as the true %"relative pathname%" by device dependent manner, otherwise it is dealt with following the %"incomplete file names%" convention. In the first case, returns RELATIVEDIRECTORY instead of DIRECTORY and in the second case, returns SUBDIRECTORY.") (LET ((TYPE 'DIRECTORY) (START (SELCHARQ (NTHCHARCODE FILE POS) (NIL (* ; "just host, return") (RETURN (DREVERSE VAL))) ((/ <) (* ;  "Started with the initial directory delimiter.") (ADD1 POS)) POS)) END) (SETQ END (SELCHARQ (NTHCHARCODE FILE -1) ((/ >) [COND ((EQ START POS) (* ;  "Didn't start with a directory delimiter,") (COND ((NOT HOSTP) (* ; "%"Incomplete file names%" case defined in IRM. This is a subdirectory of the current connected directory") (SETQ TYPE 'SUBDIRECTORY)) (T (* ; "True %"relative pathname%". The way to deal with it is dependent on the device on which HOST is implemented.") (SETQ TYPE 'RELATIVEDIRECTORY] (COND ((EQ LEN POS) (* ;  "Only the initial directory is specified (i.e. %"{DSK}/%").") (SETQ START POS) -1) (T -2))) (PROGN [COND [(EQ START POS) (* ;  "Both of the initial and trail delimiters are omitted.") (COND ((NOT HOSTP) (* ; "%"Incomplete file names%" case defined in IRM. This is a subdirectory of the current connected directory") (SETQ TYPE 'SUBDIRECTORY)) (T (* ; "True %"relative pathname%". The way to deal with it is dependent on the device on which HOST is implemented.") (SETQ TYPE 'RELATIVEDIRECTORY] (T (COND ((EQ LEN POS) (* ;  "Only the initial directory is specified (i.e. %"{DSK}<%").") (SETQ START POS] -1))) (UNPACKFILE1.DIRECTORY TYPE START END)) (RETURN (DREVERSE VAL))) ((SELCHARQ (NTHCHARCODE FILE POS) (/ (* ;  "unix and the 'xerox standard' use / for delimiter") (* ;  "In the case of the {DSK}/FOO>BAR, FOO should be dealt with as a directory.") (SETQ TEM (LASTCHPOS (CHARCODE (/ >)) FILE (ADD1 POS))) T) ((< >) (* ;  "Interlisp-D and most other Xerox systems, and Tops-20/Tenex use <>. Jericho uses >>") (* ;  "In the case of the {DSK} /)) FILE (ADD1 POS))) T) NIL) (* ;; "allow {DSK}/etc to be a directory specification.") (if TEM then (UNPACKFILE1.DIRECTORY 'DIRECTORY (ADD1 POS) (SUB1 TEM)) (SETQ POS (ADD1 TEM)) else (* ;; "{DSK}/foo: the directory is /, the name is foo") (UNPACKFILE1.DIRECTORY 'DIRECTORY POS POS) (SETQ POS (ADD1 POS))) (SETQ HOSTP T)) ((SETQ TEM (LASTCHPOS (CHARCODE (/ >)) FILE POS)) (* ; " {eris}abc> relative") (* ;;  " This is the true %"relative pathname%". Returns RELATIVEDIRECTORY instead of DIRECTORY.") [COND ((NOT HOSTP) (* ; "%"Incomplete file names%" case.") (UNPACKFILE1.DIRECTORY (if (EQ DIRFLG 'FIELD) then 'DIRECTORY else 'SUBDIRECTORY) POS (SUB1 TEM))) (T (* ; "True %"relative pathname%".") (UNPACKFILE1.DIRECTORY (if (EQ DIRFLG 'FIELD) then 'DIRECTORY else 'RELATIVEDIRECTORY) POS (SUB1 TEM] (SETQ POS (ADD1 TEM)) (SETQ HOSTP T))) (OR (SETQ CODE (NTHCHARCODE FILE (SETQ TEM POS))) (RETURN (DREVERSE VAL))) (if (EQ OSTYPE T) then (* ;  "There wasn't a host field in the name, so we have no clue") (SETQ OSTYPE NIL)) NAMELP (* ;; "At this point, CODE is the TEM'th char of file name. POS is the first character of the field we are currently working on.") (SELCHARQ CODE (%. (* ;  "Note position for later--we only want to deal with the last set of dots") (if BEYONDNAME then (* ;  "no longer of interest (probably a bad name, too)") elseif FIRSTDOT then (* ; "We're recording the second dot") (if SECONDDOT then (* ;  "Note only the two most recent dots") (SETQ FIRSTDOT SECONDDOT)) (SETQ SECONDDOT TEM) else (SETQ FIRSTDOT TEM))) ((! ; NIL) (* ;  "SUBDIRECTORY, NAME and EXTENSION fields definitely terminated by now") (if (SELCHARQ CODE (! (* ;  "! is only a delimiter on IFS, so ignore it if we know the ostype is something else") (AND OSTYPE (NEQ OSTYPE 'IFS))) (; (* ; "If we've already parsed the extension, then we have a semi in the middle of the version. Skip it unless it's ;T or ;S") [AND BEYONDEXT (NOT (\UPF.TEMPFILEP FILE (ADD1 TEM]) NIL) then (GO NEXTCHAR)) (if FIRSTDOT then (* ;  "Have a name and/or extension to parse now") (if [AND SECONDDOT (NOT (if OSTYPE then (* ;  "Known OS type must be Tops20 for second dot to mean version") (EQ OSTYPE 'TOPS20) else (* ;  "Unknown OS type, so check that %"version%" is numeric or wildcard") (AND [for I from (ADD1 SECONDDOT) to (SUB1 TEM) bind CH always (OR (DIGITCHARP (SETQ CH (NTHCHARCODE FILE I))) (EQ CH (CHARCODE *] (SELCHARQ CODE (NIL (* ; "end of file name, ok") T) (; (* ;  "This semi-colon better not be introducing a version") (\UPF.TEMPFILEP FILE (ADD1 TEM))) NIL] then (* ;  "Second dot is not intoducing a version") (SETQ FIRSTDOT SECONDDOT) (SETQ SECONDDOT NIL)) (UNPACKFILE1 'NAME POS (SUB1 FIRSTDOT)) (SETQ POS (ADD1 (if SECONDDOT then (UNPACKFILE1 'EXTENSION (ADD1 FIRSTDOT) (SUB1 SECONDDOT)) (SETQ BEYONDEXT T) SECONDDOT else FIRSTDOT))) (SETQ BEYONDNAME T) (SETQ FIRSTDOT NIL)) (UNPACKFILE1 (COND ((NOT BEYONDNAME) (SETQQ BEYONDNAME NAME)) ((NOT BEYONDEXT) 'EXTENSION) ((AND (EQ BEYONDEXT (CHARCODE ";")) (\UPF.TEMPFILEP FILE POS))) (T (* ;  "Everything after the semi was version") 'VERSION)) POS (SUB1 TEM)) (if (NULL CODE) then (* ; "End of string") (RETURN (DREVERSE VAL))) (SETQ BEYONDEXT CODE) (* ;  "Note the character that terminated the name/ext") (SETQ POS (ADD1 TEM))) (%' (* ; "Quoter") (add TEM 1)) NIL) NEXTCHAR (SETQ CODE (NTHCHARCODE FILE (add TEM 1))) (GO NAMELP]) (LASTCHPOS [LAMBDA (CH STR START) (* ; "Edited 17-May-88 13:43 by MASINTER") (PROG (RESULT NC) (OR START (SETQ START 1)) (while (SETQ NC (NTHCHARCODE STR START)) do (COND ((EQMEMB NC CH) (SETQ RESULT START)) ((EQ NC (CHARCODE %')) (add START 1))) (add START 1)) (RETURN RESULT]) (\UPF.NEXTPOS [LAMBDA (CHAR STRING POS) (* lmm " 5-Oct-84 18:41") (bind NCH while (SETQ NCH (NTHCHARCODE STRING POS)) do (COND ((EQMEMB NCH CHAR) (RETURN POS)) ((EQ NCH (CHARCODE %')) (add POS 1))) (add POS 1]) (\UPF.TEMPFILEP [LAMBDA (FILENAME START) (* ; "Edited 6-Jan-88 13:12 by bvm:") (* ;; "Checks whether START denotes a temporary mark for Twenex filename beginning at START. Returns the appropriate field name if so. Not sure we should parse this junk any more, but this at least localizes it.") (SELCHARQ (NTHCHARCODE FILENAME START) ((T S) (* ; "Funny temp stuff") (AND (EQ START (NCHARS FILENAME)) 'TEMPORARY)) NIL]) (FILENAMEFIELD [LAMBDA (FILE FIELDNAME) (* ; "Edited 6-Mar-90 19:38 by nm") (UNPACKFILENAME.STRING FILE (SELECTQ FIELDNAME ((VERSION GENERATION) 'VERSION) ((DEVICE STRUCTURE) 'DEVICE) FIELDNAME) 'FIELD NIL T]) (PACKFILENAME [LAMBDA N (* bvm%: " 5-Jul-85 15:40") (COND ((AND (EQ N 1) (LISTP (ARG N 1))) (* ; "spread argument list") (APPLY (FUNCTION PACKFILENAME) (ARG N 1))) (T (PACK (PACKFILENAME.ASSEMBLE]) (PACKFILENAME.STRING [LAMBDA N (* bvm%: " 5-Jul-85 15:41") (COND ((AND (EQ N 1) (LISTP (ARG N 1))) (* ; "spread argument list") (APPLY (FUNCTION PACKFILENAME.STRING) (ARG N 1))) (T (CONCATLIST (PACKFILENAME.ASSEMBLE]) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS CANONICAL.DIRECTORY MACRO [OPENLAMBDA (SRCSTRING) (AND SRCSTRING (LET ((LEN (NCHARS SRCSTRING))) (COND ((EQ LEN 1) (if (STREQUAL SRCSTRING "/") then "<" else SRCSTRING)) (T (LET* ((FATP (ffetch (STRINGP FATSTRINGP) of SRCSTRING)) (DSTSTRING (ALLOCSTRING LEN NIL NIL (AND FATP T))) (DSTBASE (ffetch (STRINGP BASE) of DSTSTRING)) (DSTPOS 0) (NEXTPOS -1)) (if (NOT FATP) then [for SRCPOS from 1 to LEN bind CODE first (while (EQMEMB (NTHCHARCODE SRCSTRING SRCPOS) (CHARCODE (< / >))) do (add SRCPOS 1)) (if (> SRCPOS LEN) then (RETURN "<")) do (SELCHARQ (SETQ CODE (NTHCHARCODE SRCSTRING SRCPOS)) ((> /) (if (> DSTPOS NEXTPOS) then (\PUTBASETHIN DSTBASE DSTPOS (CHARCODE >)) (SETQ NEXTPOS (add DSTPOS 1)))) (%' (\PUTBASETHIN DSTBASE DSTPOS CODE) (add DSTPOS 1) (if (NEQ SRCPOS LEN) then (\PUTBASETHIN DSTBASE DSTPOS (NTHCHARCODE SRCSTRING (add SRCPOS 1))) (add DSTPOS 1))) (PROGN (\PUTBASETHIN DSTBASE DSTPOS CODE) (add DSTPOS 1))) finally (RETURN (if (EQ DSTPOS LEN) then (if (EQMEMB (NTHCHARCODE DSTSTRING -1) (CHARCODE (> /))) then (SUBSTRING DSTSTRING 1 -2) else DSTSTRING) elseif (EQMEMB (NTHCHARCODE DSTSTRING DSTPOS) (CHARCODE (> /))) then (SUBSTRING DSTSTRING 1 (SUB1 DSTPOS)) else (SUBSTRING DSTSTRING 1 DSTPOS] else (for SRCPOS from 1 to LEN bind CODE first (while (EQMEMB (NTHCHARCODE SRCSTRING SRCPOS) (CHARCODE (< / >))) do (add SRCPOS 1)) do (SELCHARQ (SETQ CODE (NTHCHARCODE SRCSTRING SRCPOS)) ((> /) (if (> DSTPOS NEXTPOS) then (\PUTBASEFAT DSTBASE DSTPOS (CHARCODE >)) (SETQ NEXTPOS (add DSTPOS 1)))) (%' (\PUTBASEFAT DSTBASE DSTPOS CODE) (add DSTPOS 1) (if (NEQ SRCPOS LEN) then (\PUTBASEFAT DSTBASE DSTPOS (NTHCHARCODE SRCSTRING (add SRCPOS 1) )) (add DSTPOS 1))) (PROGN (\PUTBASEFAT DSTBASE DSTPOS CODE) (add DSTPOS 1))) finally (RETURN (if (EQ DSTPOS LEN) then (if (EQMEMB (NTHCHARCODE DSTSTRING -1) (CHARCODE (> /))) then (SUBSTRING DSTSTRING 1 -2) else DSTSTRING) elseif (EQMEMB (NTHCHARCODE DSTSTRING DSTPOS) (CHARCODE (> /))) then (SUBSTRING DSTSTRING 1 (SUB1 DSTPOS)) else (SUBSTRING DSTSTRING 1 DSTPOS]) (PUTPROPS UNPACKFILE1.DIRECTORY MACRO [OPENLAMBDA (NAM ST END) (LET* ((OLDDIR (SUBSTRING FILE ST END)) (NEWDIR (CANONICAL.DIRECTORY OLDDIR))) (COND [(NOT ONEFIELDFLG) (SETQ VAL (CONS (COND (PACKFLG (AND NEWDIR (MKATOM NEWDIR))) (T (OR NEWDIR ""))) (CONS NAM VAL] ((EQMEMB NAM ONEFIELDFLG) (RETURN (COND (PACKFLG (AND NEWDIR (MKATOM NEWDIR))) (T (OR NEWDIR ""]) (PUTPROPS PACKFILENAME.ASSEMBLE MACRO [NIL (PROG ((BLIP "") (I 1) HOST DEVICE STRUCTURE DIRECTORY SUBDIRECTORY RELATIVEDIRECTORY NAME EXTENSION VERSION TEMPORARY PROTECTION ACCOUNT PACKLIST VAR VAL TEMP) (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY SUBDIRECTORY NAME EXTENSION VERSION TEMPORARY PROTECTION ACCOUNT)) LP (COND ((<= I N) (* ;; "Grab the next field-name / value pair and fold it into the filename:") (COND ((LISTP (SETQ VAR (ARG N I))) (SETQ VAL (CDR VAR)) (SETQ VAR (CAR VAR))) ((<= (SETQ I (ADD1 I)) N) (SETQ VAL (ARG N I))) (T (SETQ VAL))) (OR (STRINGP VAL) (ATOM VAL) (EQ VAR 'BODY) (\ILLEGAL.ARG VAL)) (SELECTQ VAR (BODY (MAP (UNPACKFILENAME.STRING (COND ((LISTP VAL) (PACKFILENAME.STRING VAL)) (T VAL)) NIL 'OK) [FUNCTION (LAMBDA (X) (SELECTQ (CAR X) (HOST (OR HOST (SETQ HOST (OR (CADR X) BLIP)))) (DEVICE (OR DEVICE (SETQ DEVICE (OR (CADR X) BLIP)))) (DIRECTORY [OR DIRECTORY (COND (RELATIVEDIRECTORY (SETQ DIRECTORY BLIP)) (T (SETQ DIRECTORY (OR (CADR X) BLIP]) (SUBDIRECTORY (OR SUBDIRECTORY (SETQ SUBDIRECTORY (OR (CADR X) BLIP)))) (RELATIVEDIRECTORY [OR RELATIVEDIRECTORY (COND (DIRECTORY (SETQ RELATIVEDIRECTORY BLIP)) (T (SETQ RELATIVEDIRECTORY (OR (CADR X) BLIP]) (NAME (OR NAME (SETQ NAME (OR (CADR X) BLIP)))) (EXTENSION (OR EXTENSION (SETQ EXTENSION (OR (CADR X) BLIP)))) (VERSION (OR VERSION (SETQ VERSION (OR (CADR X) BLIP)))) (SHOULDNT] (FUNCTION CDDR))) (HOST [OR HOST (SETQ HOST (COND (VAL (SELCHARQ (CHCON1 VAL) (({ %[ %() (SUBSTRING VAL 2 (SELCHARQ (NTHCHARCODE VAL -1) ((} %] %)) -2) -1))) VAL)) (T BLIP]) ((PATHNAME DIRECTORY) [COND (VAL (for X on (SETQ VAL (UNPACKFILENAME.STRING VAL NIL 'RETURN)) by (CDDR X) do (SELECTQ (CAR X) (HOST [COND ((NOT HOST) (SETQ HOST (OR (CADR X) BLIP]) (DEVICE [COND ((NOT DEVICE) (SETQ DEVICE (OR (CADR X) BLIP]) (SUBDIRECTORY [OR DIRECTORY (COND (RELATIVEDIRECTORY (SETQ DIRECTORY BLIP)) (T (SETQ DIRECTORY (OR (CADR X) BLIP]) (RELATIVEDIRECTORY (* ;; "This used to set RELATIVEDIRECTORY to BLIP if DIRECTORY was already specified. It really should act as a subdirectory in that case? JDS") (OR RELATIVEDIRECTORY (SETQ RELATIVEDIRECTORY (OR (CADR X) BLIP)))) (DIRECTORY [OR DIRECTORY (COND (RELATIVEDIRECTORY (SETQ DIRECTORY BLIP)) (T (SETQ DIRECTORY (OR (CADR X) BLIP]) (ERROR "Illegal field in DIRECTORY slot" VAL))) (for X on VAL by (CDDR X) do (SELECTQ (CAR X) (HOST (OR DEVICE (SETQ DEVICE BLIP)) (OR DIRECTORY (SETQ DIRECTORY BLIP))) (DEVICE (OR DIRECTORY (SETQ DIRECTORY BLIP))) NIL))) (T (OR DIRECTORY (SETQ DIRECTORY BLIP]) (SUBDIRECTORY (OR SUBDIRECTORY (SETQ SUBDIRECTORY (OR VAL BLIP)))) (RELATIVEDIRECTORY (* ;; "This used to set RELATIVEDIRECTORY to BLIP if DIRECTORY was already specified. It really should act as a subdirectory in that case? JDS") (OR RELATIVEDIRECTORY (SETQ RELATIVEDIRECTORY (OR VAL BLIP)))) (DEVICE (OR DEVICE (SETQ DEVICE (OR VAL BLIP)))) (NAME (OR NAME (SETQ NAME (OR VAL BLIP)))) (EXTENSION (OR EXTENSION (SETQ EXTENSION (OR VAL BLIP)))) (VERSION (OR VERSION (SETQ VERSION (OR VAL BLIP)))) (TEMPORARY (OR TEMPORARY (SETQ TEMPORARY (OR VAL BLIP)))) (\ILLEGAL.ARG VAR)) (SETQ I (ADD1 I)) (GO LP))) (COND ((EQ HOST BLIP) (SETQ HOST NIL))) (COND ((EQ DEVICE BLIP) (SETQ DEVICE NIL))) (COND ((EQ DIRECTORY BLIP) (SETQ DIRECTORY NIL))) [COND ((EQ SUBDIRECTORY BLIP) (SETQ SUBDIRECTORY NIL)) ((AND NIL SUBDIRECTORY) (COND ((AND (NULL DIRECTORY) (OR HOST DEVICE)) (SETQ DIRECTORY SUBDIRECTORY) (SETQ SUBDIRECTORY NIL] (COND ((EQ RELATIVEDIRECTORY BLIP) (SETQ RELATIVEDIRECTORY NIL))) (RETURN (NCONC (AND HOST (LIST "{" HOST "}")) [AND DEVICE (COND ((AND (SETQ TEMP (LASTCHPOS (CHARCODE %:) DEVICE 1)) (EQ TEMP (NCHARS DEVICE))) (LIST DEVICE)) (T (LIST DEVICE ":"] [COND (DIRECTORY (COND [[OR (STREQUAL DIRECTORY "<") (AND (SETQ TEMP (LASTCHPOS (CHARCODE (> /)) DIRECTORY 1)) (EQ TEMP (NCHARS DIRECTORY] (COND ((EQMEMB (NTHCHARCODE DIRECTORY 1) (CHARCODE (< /))) (LIST DIRECTORY)) (T (LIST (CL:FIRST \FILENAME.SYNTAX) DIRECTORY] (T (LIST (CL:FIRST \FILENAME.SYNTAX) DIRECTORY (CL:SECOND \FILENAME.SYNTAX] [COND (RELATIVEDIRECTORY (COND ((AND (SETQ TEMP (LASTCHPOS (CHARCODE (> /)) RELATIVEDIRECTORY 1)) (EQ TEMP (NCHARS RELATIVEDIRECTORY))) (LIST RELATIVEDIRECTORY)) (T (LIST RELATIVEDIRECTORY (CL:SECOND \FILENAME.SYNTAX ] [COND (SUBDIRECTORY (LIST SUBDIRECTORY (CL:SECOND \FILENAME.SYNTAX] (AND NAME (NEQ NAME BLIP) (LIST NAME)) (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP)) (AND VERSION (NEQ VERSION BLIP))) (LIST (COND ((AND EXTENSION (EQ (CHCON1 EXTENSION) (CHARCODE %.))) BLIP) (T '%.)) (OR EXTENSION BLIP))) (AND VERSION (NEQ VERSION BLIP) (LIST (CL:THIRD \FILENAME.SYNTAX) (COND ((FIXP VERSION) VERSION) (T (SELCHARQ (CHCON1 VERSION) ((%. ! ;) (SUBSTRING VERSION 2 -1)) VERSION]) (PUTPROPS UNPACKFILE1 MACRO [OPENLAMBDA (NAM ST END) (* lmm "22-APR-81 22:21") (COND [(NOT ONEFIELDFLG) (SETQ VAL (CONS (COND (PACKFLG (SUBATOM FILE ST END)) (T (OR (SUBSTRING FILE ST END) ""))) (CONS NAM VAL] ((EQMEMB NAM ONEFIELDFLG) (RETURN (COND (PACKFLG (SUBATOM FILE ST END)) (T (OR (SUBSTRING FILE ST END) ""]) ) ) (RPAQQ \FILENAME.SYNTAX ("<" ">" ";")) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \FILENAME.SYNTAX) ) (* ; "saving and restoring system state") (DEFINEQ (LOGOUT [LAMBDA (FAST) (* hdj "23-May-86 16:20") (\USEREVENT 'BEFORELOGOUT) (COND ((OR (EQ FAST T) (\FLUSHVMOK? 'LOGOUT)) (* ;  "Check that we have a vmem file before allowing LOGOUT") (\PROCESS.BEFORE.LOGOUT) (\DEVICEEVENT 'BEFORELOGOUT) (\SETTOTALTIME) (* ;  "update the total time that this sysout has been running.") (\LOGOUT0 FAST) (* ;; "Must re-establish the state of devices and of previously open files that might have been modified at the EXEC.") (\RESETKEYBOARD) (\DEVICEEVENT 'AFTERLOGOUT) (\OPENLINEBUF) (\PROCESS.AFTER.EXIT 'AFTERLOGOUT) (\USEREVENT 'AFTERLOGOUT) (INTERPRET.REM.CM) NIL]) (MAKESYS [LAMBDA (FILE NAME) (DECLARE (GLOBALVARS \MISCSTATS) (SPECVARS FILE NAME)) (* ; "Edited 13-Oct-2020 22:51 by rmk:") (* ; "Edited 28-Jul-88 18:16 by drc:") (\FLUSHVMOK? 'MAKESYS) (\USEREVENT 'BEFOREMAKESYS) (HERALD (CONCAT (OR NAME (CL:STRING-CAPITALIZE MAKESYSNAME)) " " (SUBSTRING (SETQ MAKESYSDATE (DATE)) 1 11) " ...")) (\DEVICEEVENT 'BEFOREMAKESYS) (* ;; "RMK: make sysout on a temp file, then rename it in order to get version numbers") (LET [(NEWFILE (\COPYSYS (CONCAT (PACKFILENAME 'VERSION NIL 'BODY (OUTFILEP FILE)) "-TEMP"] (COND ((NLISTP NEWFILE) (* ;  "Coming back from doing the MAKESYS, so just set up to keep going.,") (\DEVICEEVENT 'AFTERDOMAKESYS) (\USEREVENT 'AFTERDOMAKESYS) (RENAMEFILE NEWFILE (SETQ FILE (OUTFILEP FILE))) FILE) (T (* ;  "Coming back in the MAKESYS'd sysout, so restart the world.") (\DEVICEEVENT 'AFTERMAKESYS) (\PROCESS.AFTER.EXIT 'AFTERMAKESYS) (PRIN1 HERALDSTRING T) (\USEREVENT 'AFTERMAKESYS) (INTERPRET.REM.CM) (* ;  "Run the commands in the file REM.CM") (RESET]) (SYSOUT [LAMBDA (FILE) (* ; "Edited 14-Oct-2020 11:13 by rmk:") (* hdj "29-Sep-86 12:14") (DECLARE (GLOBALVARS \MISCSTATS) (SPECVARS FILE)) (* ;  "FILE is special so that BEFORESYSOUTFORMS can alter it") (\FLUSHVMOK? 'SYSOUT) (\USEREVENT 'BEFORESYSOUT) (\DEVICEEVENT 'BEFORESYSOUT) (* ;;  "RMK: Fix it so that sysouts are versioned. Temp file goes to same place as eventual sysout.") (LET ((TOTALTIMESAVE (fetch TOTALTIME of \MISCSTATS)) NEWFILE) (* ;  "update the total time field so that the run time in the sysout will be right.") (\SETTOTALTIME) (SETQ NEWFILE (\COPYSYS (CONCAT (PACKFILENAME 'VERSION NIL 'BODY (OUTFILEP FILE)) "-TEMP"))) (RENAMEFILE NEWFILE (SETQ FILE (OUTFILEP FILE))) [COND ((NLISTP NEWFILE) (* ;; "Continuing in same sysout; reset TOTALTIME in misc stats page to not include the time before the sysout.") (replace TOTALTIME of \MISCSTATS with TOTALTIMESAVE) (\DEVICEEVENT 'AFTERDOSYSOUT) (\USEREVENT 'AFTERDOSYSOUT)) (T (* ; "restarting") (\DEVICEEVENT 'AFTERSYSOUT) (\PROCESS.AFTER.EXIT 'AFTERSYSOUT) (INTERPRET.REM.CM) (\USEREVENT 'AFTERSYSOUT] FILE]) (SAVEVM [LAMBDA (RELEASEFLG) (* hdj "23-May-86 16:20") (* ;; "Save the virtual memory. This is similar to logging out, then back in, but is much faster, since it doesn't lose any pages. Conceptually, this is like doing a sysout to Lisp.virtualmem") (\FLUSHVMOK? 'SAVEVM) (\USEREVENT 'BEFORESAVEVM) (\DEVICEEVENT 'BEFORESAVEVM) (COND ((\FLUSHVM) (\RESETKEYBOARD) (* ;  "Returns T when starting up fresh") (\DEVICEEVENT 'AFTERSAVEVM) (\PROCESS.AFTER.EXIT 'AFTERSAVEVM) (\USEREVENT 'AFTERSAVEVM) T) (T (\DEVICEEVENT 'AFTERDOSAVEVM) (\USEREVENT 'AFTERDOSAVEVM]) (HERALD [LAMBDA (STR) (* wt%: " 2-MAY-79 15:38") (AND STR (SETQ HERALDSTRING STR)) HERALDSTRING]) (INTERPRET.REM.CM [LAMBDA (RETFLG) (* ; "Edited 22-Feb-2021 15:31 by larry") (DECLARE (GLOBALVARS STARTUPFORM)) (* ;;; "Looks at REM.CM and evaluates the form there if the first character of the file is open paren or doublequote. If it's a string, it will be unread,, else the form will be evaluated at the next prompt. For use in INIT.LISP, among others. If RETFLG is true, the expression read is simply returned") (PROG ((FILE (UNIX-GETENV "LDEINIT")) COM) (OR FILE (RETURN)) (SETQ FILE (OPENSTREAM FILE 'INPUT)) [COND ([AND (IGREATERP (GETFILEINFO FILE 'LENGTH) 0) (EQ (SKIPSEPRS FILE T) '%") (SETQ COM (CAR (NLSETQ (READ FILE T] (CLOSEF FILE) (COND (RETFLG (* ; "Save it to return")) (T (* ; "Unread a string") (* ;  "RMK: Replace CR and LF by space to avoid EOL convention issues") (for I from 1 to (NCHARS COM) when (FMEMB (NTHCHARCODE COM I) (CHARCODE (CR LF EOL))) do (RPLCHARCODE COM I (CHARCODE EOL))) (BKSYSBUF COM] (RETURN (COND (RETFLG COM) (COM T]) (\USEREVENT [LAMBDA (EVENT) (DECLARE (GLOBALVARS AROUNDEXITFNS)) (* bvm%: "16-Dec-83 15:27") (for FN in (SELECTQ EVENT ((BEFORELOGOUT BEFORESYSOUT BEFORESAVEVM BEFOREMAKESYS) AROUNDEXITFNS) (REVERSE AROUNDEXITFNS)) do (APPLY* FN EVENT]) ) (ADDTOVAR AROUNDEXITFNS ) (RPAQ? HERALDSTRING "") (RPAQ? \USERNAME ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS HERALDSTRING USERNAME \USERNAME AROUNDEXITFNS) ) (DEFINEQ (USERNAME [LAMBDA (FLG STRPTR PRESERVECASE) (* lmm "28-MAR-82 14:10") (* ;  "On 10, USERNAME can take a user number as arg") (PROG (ADDR NAME) (SETQ NAME (COND (FLG NIL) ((NEQ 0 (SETQ ADDR (fetch (IFPAGE UserNameAddr) of \InterfacePage))) (GetBcplString (\ADDBASE (EMADDRESS 0) ADDR) (EQ STRPTR T))) (T \USERNAME))) (OR PRESERVECASE (NULL NAME) (SETQ NAME (U-CASE NAME))) (RETURN (COND ((NULL NAME) NIL) ((STRINGP STRPTR) (SUBSTRING NAME 1 -1 STRPTR)) (T NAME]) (SETUSERNAME [LAMBDA (NAME) (* lmm "28-MAR-82 14:11") (* ;  "Changed interpretation of UserName0") (COND (NAME (PROG ((ADDR (fetch (IFPAGE UserNameAddr) of \InterfacePage))) (RETURN (COND ((NEQ ADDR 0) (SetBcplString (\ADDBASE (EMADDRESS 0) ADDR) NAME) (SETQ USERNAME (USERNAME NIL T))) (T (SETQ \USERNAME (CONCAT NAME]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILESLOAD (LOADCOMP) FILEIO) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA PACKFILENAME.STRING PACKFILENAME) ) (PUTPROPS ADIR COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1990 1991 1992 1920 2017 2020 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (2705 9399 (DELFILE 2715 . 2876) (FULLNAME 2878 . 3245) (INFILE 3247 . 3395) (INFILEP 3397 . 3532) (IOFILE 3534 . 3674) (OPENFILE 3676 . 4076) (OPENSTREAM 4078 . 8386) (OUTFILE 8388 . 8539 ) (OUTFILEP 8541 . 8677) (RENAMEFILE 8679 . 8985) (SIMPLE.FINDFILE 8987 . 9397)) (9771 29362 ( UNPACKFILENAME 9781 . 9967) (UNPACKFILENAME.STRING 9969 . 26241) (LASTCHPOS 26243 . 26937) ( \UPF.NEXTPOS 26939 . 27584) (\UPF.TEMPFILEP 27586 . 28163) (FILENAMEFIELD 28165 . 28650) (PACKFILENAME 28652 . 28995) (PACKFILENAME.STRING 28997 . 29360)) (51803 59344 (LOGOUT 51813 . 52774) (MAKESYS 52776 . 54547) (SYSOUT 54549 . 56296) (SAVEVM 56298 . 57110) (HERALD 57112 . 57272) (INTERPRET.REM.CM 57274 . 58967) (\USEREVENT 58969 . 59342)) (59526 61253 (USERNAME 59536 . 60492) (SETUSERNAME 60494 . 61251))))) STOP \ No newline at end of file diff --git a/sources/ADIR.LCOM b/sources/ADIR.LCOM index 1593d04807d02fa83bdc88d13a5294e8ebd6d99e..527f9214afbe3b3755405a29dc74c1107c71aa77 100644 GIT binary patch delta 1051 zcma)5-A~g{6z`Y`f;1VBC?P>knvgKeW^cE3TQ!8T-ENn)x3#x`L}CQCz+^DPM+`BB z_~@I`#Kc$QgPNGg#}hv6!9T#n_;(PD|A4oJ2!1^9a(X^~=bYa;=k~*4MptUpMr~_! zy}7xzP+K3>i^NUdLMRTR^hd?CCM%kpmtcOa_PgZ5(%kA|ZGA`svQ0hgIxhB-F1C^d z3+lX`6&43DHX99KTfE5zDCmr5GMSV_sLpM0deZp-N^3~f6h(@Q!v-;N!Nt0ViyZXd zDfv|Pg~kFEWlvW4iMdmTfE5^!`zOPIJZ~|u9S5OxxlM>PgMm5%(T$?z>YH8R<6>ZS z2I6k@On>-;$DWt#VIXuL?`?I*EI

    z=fN?sY16cFl6dK?Yeod1;#cJb>;{DBZkJZb-kWjeYb`2XW^ IkrGq<1srP<3IG5A delta 2006 zcmbtV&2Jk;6!!;el@v!#sA%g0JS-~Nkzzc%>(5jn8+$e}ncdm!t`jN+g_nL}-fVZ=o*o6yHC2Qu*%zMB0e&cz+ z{rX|}+h4*T>3yQi@y7m~l$EkTNSP>Qg(M-BY;~444+qV~3r?K5$xYcU5TZeKcx6pQb-9~4xwb1Jv>@`}w1+`kUGV_Hr#+T;Q?j9z| zVv=GxOUkm8guPay(+{%5S|4=VZo}PgA6_kkeck4D2V6|83w*!?pdGZ^U>_p@!p;btZaqb7CvvLxigCi(KIh%)A zV`uyJjaCo#JIErX8FoM=4c)!g`)=o;Ckn;Gpoq2L=CkFTQuc~?j+@S>V^zuq;pnBo z`G_%NhC-pp;_o?PT=14V ziN*_JD;`Qoh-y;92f(zl3}u5`y2^l*e0T+xxU&K!|DUm_o~h{bWbgyK5|#$X?B_`Z zJRV?zJh-Pr9m}be%d-Zvsk5drb$J$#2+W!muTWZ@tEe`$y}hh(^!?`6RaU2<0m=Ty z6E_JWztTrT0)){`r?R428rEs2A^c=A8VXOxL+^UzHZCUIjxb(MOh==&3D2GpbWa{f zS7yS~YZI*b#e?uqVsFwrzWEf_pEFl1n!fK>!F+${-W%@V`G>48PQ)PYarnP;zJu{^ zF5Z6-`b2L=A8JE^A*vif>dnU&o9@YXa{R{&VprcuB=F}paS&ENamlN8<8q>L`Dj%T z+ue!}x2A?X&Zqu&YG}ui;#J%V-8~XN;HN{@w>f|Rw?A5!njQ}Q1V6C#D_+?W;zxw zWeEC8EOR4Ar3e*nUSGQIP#c@+SwDRC2;x0s5hh{S$d?rS9_foN1G$tNPbn7*fDJEN zKrUua3zM;ZHcd)bmud#cguv1&>giHl1F4h;%VgdQuJ9_wHqL?Jtc=!Jo8hf&AZXSM zhgzmZolM{FJr(s^!j?EIxn^h_3fOk5HPfah#^p+;uy*ZgkZlb*ik}VvIW1* z6~w+{aQtXgxJB=Rj6$SU={kx|KNkoMNHRfFwVb-?H6cjZBCOT9Ls2vcu$pbYO|hZz zE0f25MFv0$p2e39SOURCES>LLSUBRS.;15| 21492 changes to%: (RECORDS MISCN-UFN-ENTRY) previous date%: "21-Feb-92 12:54:44" |{PELE:MV:ENVOS}SOURCES>LLSUBRS.;14|) (* ; " Copyright (c) 1983, 1984, 1985, 1986, 1988, 1989, 1990, 1991, 1992 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT LLSUBRSCOMS) (RPAQQ LLSUBRSCOMS ((DECLARE%: EVAL@COMPILE DONTCOPY (ADDVARS (DONTCOMPILEFNS SUBRCALL MISCN FIX-SUBR-NAME WRITECALLSUBRS))) (* ;;; "MISCN Vars & Functions") (EXPORT (VARS \MISCN-TABLE-LIST)) (FUNCTIONS MISCN) (OPTIMIZERS MISCN) (FNS MISCN-NUMBER \MISCN.UFN \UNDEFINED-MISCN-UFN MISCN-COLLECT \GET-MY-BF \INIT-MISCN-TABLE) (PROP ARGNAMES MISCN) (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS MISCN-UFN-SPEC MISCN-UFN-ENTRY)) (* ;;; " USER-SUBR Vars & Functions") (EXPORT (VARS \USER-SUBR-LIST)) (FUNCTIONS USER-SUBR ADD-USER-SUBR) (FNS \USER-SUBR-UFN \INIT-USER-SUBR-TABLE \UNDEFINED-USER-SUBR-UFN USER-SUBR-NUMBER EQ-TO-CAR EQ-TO-CADR) (PROP ARGNAMES USER-SUBR) (* ;;; "SUBRCALL Vars & Functions") (EXPORT (VARS \INITSUBRS)) (FUNCTIONS SUBRCALL) (OPTIMIZERS SUBRCALL) (FNS SUBRNUMBER) (* ;; "use this to make a subrs.h file for Maiko ") (FNS WRITECALLSUBRS FIX-SUBR-NAME) (PROP ARGNAMES SUBRCALL) (DECLARE%: DONTCOPY (RESOURCES UNIXSTRING)) (INITRESOURCES UNIXSTRING) (FNS \MOREVMEMFILE \WRITEMAP \COPYSYS0SUBR \PUPLEVEL1STATE SHOWDISPLAY SETSCREENCOLOR \WRITERAWPBI \READRAWPBI RAID \LISPFINISH \GETPACKETBUFFER \GATHERSTATS \DSPRATE DSPBOUT DISKPARTITION \CHECKBCPLPASSWORD SUSPEND-LISP UNIX-USERNAME UNIX-FULLNAME UNIX-GETENV UNIX-GETPARM) (IFPROP ARGNAMES SHOWDISPLAY SETSCREENCOLOR \WRITERAWPBI \READRAWPBI RAID \LISPFINISH \GETPACKETBUFFER \GATHERSTATS \DSPRATE DSPBOUT DISKPARTITION \CHECKBCPLPASSWORD) (PROPS (LLSUBRS FILETYPE)))) (DECLARE%: EVAL@COMPILE DONTCOPY (ADDTOVAR DONTCOMPILEFNS SUBRCALL MISCN FIX-SUBR-NAME WRITECALLSUBRS) ) (* ;;; "MISCN Vars & Functions") (* "FOLLOWING DEFINITIONS EXPORTED") (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))) (* "END EXPORTED DEFINITIONS") (DEFMACRO MISCN (NAME &REST ARGS) [LET [(ARGNAMES (MAPCAR ARGS #'(LAMBDA (X) (GENSYM] `(CL:FUNCALL [CL:COMPILE NIL '(LAMBDA ,ARGNAMES ((OPCODES MISCN ,(MISCN-NUMBER NAME) ,(LENGTH ARGS)) ,@ARGNAMES] ,@ARGS]) (DEFOPTIMIZER MISCN (NAME &REST ARGS) `((OPCODES MISCN ,(MISCN-NUMBER NAME) ,(LENGTH ARGS)) ,@ARGS)) (DEFINEQ (MISCN-NUMBER (LAMBDA (NAME) (* ; "Edited 7-Nov-88 15:21 by krivacic") (CADR (OR (ASSOC NAME \MISCN-TABLE-LIST) (ERROR NAME " not a MISCN index")))) ) (\MISCN.UFN (LAMBDA (ALPHA-BETA) (* ; "Edited 8-Jun-89 16:57 by jds") (* ;; "The UFN for the MISCN opcode.") (DECLARE (GLOBALVARS \MISCN-TABLE)) (* ;; "Get the misc index & number of args from the code stream") (LET ((INDEX (LRSH ALPHA-BETA 8)) (ARG-COUNT (LOGAND ALPHA-BETA 255))) (* ;; "compute the position of the real IVARS on the stack. Create a pointer to these args and pass it to the Handler routine.") (COND ((NOT (AND (BOUNDP (QUOTE \MISCN-TABLE)) \MISCN-TABLE)) (\INIT-MISCN-TABLE))) (LET* ((CALLER (\MYALINK)) (MY-BF (\GET-MY-BF)) (MY-IVAR (fetch (BF IVAR) of MY-BF)) (RESULT-IVAR (- MY-IVAR (LLSH ARG-COUNT 1))) (MY-PARMS-PTR (\VAG2 1 RESULT-IVAR)) (UFN-ENTRY (\ADDBASE \MISCN-TABLE (LLSH INDEX 1)))) (COND ((fetch (MISCN-UFN-ENTRY MISCN-MVS) OF UFN-ENTRY) (* ;; "This UFN can return Multiple values, so we need to preserve them.") (CL:UNWIND-PROTECT (APPLY* (\GETBASEPTR UFN-ENTRY 0) INDEX ARG-COUNT MY-PARMS-PTR) (replace (BF IVAR) of MY-BF with RESULT-IVAR) (REPLACE (FX NEXTBLOCK) OF CALLER WITH RESULT-IVAR))) (T (* ;; "He said no MVs are possible, so don't even TRY to preserve them. This is an expanded and cleaned up version of CL:UNWIND-PROTECT, so watch it!") (PROG1 (.UNWIND.PROTECT. (FUNCTION (LAMBDA NIL (replace (BF IVAR) of MY-BF with RESULT-IVAR))) (APPLY* (\GETBASEPTR UFN-ENTRY 0) INDEX ARG-COUNT MY-PARMS-PTR)) (replace (BF IVAR) of MY-BF with RESULT-IVAR) (REPLACE (FX NEXTBLOCK) OF CALLER WITH RESULT-IVAR))))))) ) (\UNDEFINED-MISCN-UFN (LAMBDA (INDEX ARG-COUNT ARG-PTR) (* ; "Edited 3-Nov-88 15:56 by krivacic") (PRINTOUT T "index " INDEX ", arg count " ARG-COUNT T) (ERROR (CL:FORMAT T "Undefined MISCN[~d] with ~d args." INDEX ARG-COUNT) (MISCN-COLLECT ARG-COUNT ARG-PTR))) ) (MISCN-COLLECT (LAMBDA (ARG-COUNT ARG-PTR) (* ; "Edited 3-Nov-88 11:52 by krivacic") (FOR I FROM 0 TO (- ARG-COUNT 1) COLLECT (\GETBASEPTR ARG-PTR (LLSH I 1)))) ) (\GET-MY-BF (LAMBDA NIL (* ; "Edited 3-Nov-88 11:08 by krivacic") (* ;; "Returns the stack index of the caller's BF.") (- (\MYALINK) 2)) ) (\INIT-MISCN-TABLE (LAMBDA NIL (DECLARE (GLOBALVARS \MISCN-TABLE-LIST \MISCN-TABLE)) (* ; "Edited 7-Mar-89 09:43 by jds") (LET ((OP-NUMBER 36) (OP-LENGTH 3) BASE) (SETQ \MISCN-TABLE (ARRAY 256 (QUOTE POINTER) (QUOTE \UNDEFINED-MISCN-UFN) 0)) (SETQ BASE (FETCH (ARRAYP BASE) OF \MISCN-TABLE)) (for MISCN-ENTRY in \MISCN-TABLE-LIST do (SETA \MISCN-TABLE (CADR MISCN-ENTRY) (CADDR MISCN-ENTRY)) (REPLACE (MISCN-UFN-ENTRY MISCN-MVS) OF (\ADDBASE2 BASE (FETCH (MISCN-UFN-SPEC INDEX) OF MISCN-ENTRY)) WITH (FETCH (MISCN-UFN-SPEC MVS) OF MISCN-ENTRY))) (SETQ \MISCN-TABLE BASE))) ) ) (PUTPROPS MISCN ARGNAMES (NAME &REST ARGS)) (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (RECORD MISCN-UFN-SPEC ( (* ;;  "This is the description for a MISCN opcode's UFN, as placed in \MISCN-TABLE-LIST.") NAME (* ;  "Name of the MISCN, for the MISCN macro's use.") INDEX (* ; "Sub-opcode index.") UFN-NAME (* ; "Name of the UFN") MVS (* ;  "T if the UFN can returnmultiple values. If this is NIL, MVs WILL NOT BE PRESERVED.") )) (BLOCKRECORD MISCN-UFN-ENTRY ((MISCN-MVS FLAG) (NIL BITS 3) (MISCN-UFN POINTER))) ) ) (* ;;; " USER-SUBR Vars & Functions") (* "FOLLOWING DEFINITIONS EXPORTED") (RPAQQ \USER-SUBR-LIST ((DUMMY 10 DUMMY-UFN) (SAMPLE-USER-SUBR 0 SAMPLE-USER-SUBR-UFN))) (* "END EXPORTED DEFINITIONS") (DEFMACRO USER-SUBR (USER-SUBR-NAME &REST ARGS) `(MISCN USER-SUBR ,(USER-SUBR-NUMBER USER-SUBR-NAME) ,@ARGS)) (CL:DEFUN ADD-USER-SUBR (USER-SUBR-NAME USER-SUBR-INDEX USER-SUBR-UFN) (DECLARE (GLOBALVARS \USER-SUBR-TABLE \USER-SUBR-LIST)) (* ;; "Make Sure \USER-SUBR-TABLE is made") (IF (NOT (AND (BOUNDP '\USER-SUBR-TABLE) \USER-SUBR-TABLE)) THEN (\INIT-USER-SUBR-TABLE)) (* ;; "See if the Name is already defined") [AND (FASSOC USER-SUBR-NAME \USER-SUBR-LIST) (CL:CERROR "Delete old User-subr" "User-subr ~S already defined" USER-SUBR-NAME) (SETA \USER-SUBR-TABLE (CADR (FASSOC USER-SUBR-NAME \USER-SUBR-LIST)) '\UNDEFINED-USER-SUBR-UFN) (SETQ \USER-SUBR-LIST (CL:REMOVE USER-SUBR-NAME \USER-SUBR-LIST :TEST 'EQ-TO-CAR] (* ;; "See if the UFN is already defined") [AND (OR (NEQ (ELT \USER-SUBR-TABLE USER-SUBR-INDEX) '\UNDEFINED-USER-SUBR-UFN) (CL:FIND USER-SUBR-INDEX \USER-SUBR-LIST :KEY #'CL:SECOND)) (CL:CERROR "Delete old User-subr" " User-subr index ~d already defined" USER-SUBR-INDEX) (SETQ \USER-SUBR-LIST (CL:REMOVE USER-SUBR-INDEX \USER-SUBR-LIST :TEST 'EQ-TO-CADR] (CL:PUSH (LIST USER-SUBR-NAME USER-SUBR-INDEX (OR USER-SUBR-UFN '\UNDEFINED-USER-SUBR-UFN)) \USER-SUBR-LIST) (\INIT-USER-SUBR-TABLE)) (DEFINEQ (\USER-SUBR-UFN (LAMBDA (INDEX ARG-COUNT ARG-PTR) (DECLARE (GLOBALVARS \USER-SUBR-TABLE)) (* ; "Edited 4-Nov-88 18:43 by krivacic") (IF (NOT (AND (BOUNDP (QUOTE \USER-SUBR-TABLE)) \USER-SUBR-TABLE)) THEN (\INIT-USER-SUBR-TABLE)) (LET ((USER-SUBR-INDEX (\GETBASE ARG-PTR 1))) (* ;; "User SUBR ufn. Index on the User subr indexes") (APPLY* (ELT \USER-SUBR-TABLE USER-SUBR-INDEX) USER-SUBR-INDEX (- ARG-COUNT 1) (\ADDBASE ARG-PTR 2)))) ) (\INIT-USER-SUBR-TABLE (LAMBDA NIL (DECLARE (GLOBALVARS \USER-SUBR-TABLE \USER-SUBR-LIST)) (* ; "Edited 4-Nov-88 18:58 by krivacic") (SETQ \USER-SUBR-TABLE (ARRAY 256 (QUOTE POINTER) (QUOTE \UNDEFINED-USER-SUBR-UFN) 0)) (for SUBR-ENTRY in \USER-SUBR-LIST do (SETA \USER-SUBR-TABLE (CADR SUBR-ENTRY) (CADDR SUBR-ENTRY)))) ) (\UNDEFINED-USER-SUBR-UFN (LAMBDA (USER-SUBR-INDEX ARG-COUNT ARG-PTR) (* ; "Edited 7-Nov-88 14:33 by krivacic") (* ;; "User SUBR ufn. Index on the User subr indexes") (ERROR (CL:FORMAT NIL "Undefined USER-SUBR[~d] with ~d args." USER-SUBR-INDEX ARG-COUNT) (MISCN-COLLECT ARG-COUNT ARG-PTR))) ) (USER-SUBR-NUMBER (LAMBDA (NAME) (* ; "Edited 4-Nov-88 18:42 by krivacic") (CADR (OR (ASSOC NAME \USER-SUBR-LIST) (ERROR NAME " not a USER-SUBR index")))) ) (EQ-TO-CAR (LAMBDA (ITEM LIST) (EQ ITEM (CAR LIST)))) (EQ-TO-CADR (LAMBDA (ITEM LIST) (EQ ITEM (CADR LIST)))) ) (PUTPROPS USER-SUBR ARGNAMES (USER-SUBR-NAME &REST ARGS)) (* ;;; "SUBRCALL Vars & Functions") (* "FOLLOWING DEFINITIONS EXPORTED") (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))) (* "END EXPORTED DEFINITIONS") (DEFMACRO SUBRCALL (NAME &REST ARGS) [LET [(ARGNAMES (MAPCAR ARGS #'(LAMBDA (X) (GENSYM] `(CL:FUNCALL [CL:COMPILE NIL '(LAMBDA ,ARGNAMES ((OPCODES SUBRCALL ,(SUBRNUMBER NAME) ,(LENGTH ARGS)) ,@ARGNAMES] ,@ARGS]) (DEFOPTIMIZER SUBRCALL (NAME &REST ARGS) `((OPCODES SUBRCALL ,(SUBRNUMBER NAME) ,(LENGTH ARGS)) ,@ARGS)) (DEFINEQ (SUBRNUMBER [LAMBDA (NAME) (* ; "Edited 5-Feb-92 16:49 by jds") (* ;; "Given a SUBR's NAME or number, return the corresponding subr number.") (LET (NUMBER) (COND ((FIXP NAME) (CL:WARN "SUBR name (~d) is a number; should be abstracted." NAME) NAME) ((CADR (ASSOC NAME \INITSUBRS))) ([SETQ NUMBER (CADR (CL:ASSOC NAME \INITSUBRS :TEST (FUNCTION STRING.EQUAL] (CL:WARN "SUBR name ~s is in wrong package. Using ~d as subr number." NAME NUMBER)) (T (ERROR NAME " not a SUBR"]) ) (* ;; "use this to make a subrs.h file for Maiko ") (DEFINEQ (WRITECALLSUBRS (LAMBDA NIL (* ; "Edited 6-Nov-89 15:39 by jds") (CL:WITH-OPEN-FILE (*STANDARD-OUTPUT* "subrs.h" :DIRECTION :OUTPUT :IF-EXISTS :NEW-VERSION) (CL:FORMAT T "/* This file written from LLSUBRS on ~A */~&" (DATE)) (CL:FORMAT T "/* Do not edit this file! Instead, edit the list \initsubrs */~&") (CL:FORMAT T "/* on the lisp file LLSUBRS and then call WRITECALLSUBRS to */~&") (CL:FORMAT T "/* generate a new version. */~&") (for X in \INITSUBRS do (CL:FORMAT T "#define sb_~A 0~O~&" (FIX-SUBR-NAME (CAR X)) (CADR X))) (CL:FORMAT T "~&~&/* MISCN opcodes */~&") (for X in \MISCN-TABLE-LIST do (CL:FORMAT T "#define miscn_~A 0~O~&" (FIX-SUBR-NAME (CAR X)) (CADR X))) (CL:FORMAT T "~&~&/* Assigned USER SUBR numbers */~&") (for X in \USER-SUBR-LIST do (CL:FORMAT T "#define user_subr_~A 0~O~&" (FIX-SUBR-NAME (CAR X)) (CADR X))))) ) (FIX-SUBR-NAME (LAMBDA (NAME) (* ; "Edited 13-Feb-89 16:17 by jds") (* ;; "Fix up a SUBR name for use as a symbol in the C code, by:") (* ;; "Converting all -'s to _'s") (* ;; "Converting all .'s to _'s") (* ;; "Removing all \'s.") (* ;; "This allows us to use fairly normal Lisp symbols for SUBR names (like \TEDIT.BLTCHAR), while having them translate pleasantly.") (CONCATCODES (DREMOVE (CHARCODE \) (SUBST (CHARCODE _) (CHARCODE %.) (SUBST (CHARCODE _) (CHARCODE -) (CHCON NAME)))))) ) ) (PUTPROPS SUBRCALL ARGNAMES (NAME &REST ARGS)) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE [PUTDEF 'UNIXSTRING 'RESOURCES '(NEW (ALLOCSTRING 512] ) ) (/SETTOPVAL '\UNIXSTRING.GLOBALRESOURCE NIL) (DEFINEQ (\MOREVMEMFILE (LAMBDA (FILEPAGE) (* ; "Edited 27-Apr-88 13:36 by MASINTER") (SUBRCALL MOREVMEMFILE FILEPAGE))) (\WRITEMAP (LAMBDA (VP RP FLAGS) (* ; "Edited 27-Apr-88 13:37 by MASINTER") (SUBRCALL WRITEMAP VP RP FLAGS))) (\COPYSYS0SUBR (LAMBDA (FID) (* ; "Edited 20-Apr-88 12:36 by MASINTER") (SUBRCALL COPYSYS0SUBR FID))) (\PUPLEVEL1STATE (LAMBDA (FLG) (* ; "Edited 20-Apr-88 12:37 by MASINTER") (SUBRCALL PUPLEVEL1STATE FLG))) (SHOWDISPLAY (LAMBDA (BASE RASTERWIDTH) (* ; "Edited 27-Apr-88 13:40 by MASINTER") (* ;; "comments are done with semicolons one comment is at the right margin, it automatically do you type ") (SUBRCALL SHOWDISPLAY BASE RASTERWIDTH)) ) (SETSCREENCOLOR (LAMBDA (FLG) (* ; "Edited 20-Apr-88 12:37 by MASINTER") (SUBRCALL SETSCREENCOLOR FLG))) (\WRITERAWPBI (LAMBDA (PBI) (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL WRITERAWPBI PBI))) (\READRAWPBI (LAMBDA NIL (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL READRAWPBI))) (RAID (LAMBDA (MESS1 MESS2 FLG) (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL RAID MESS1 MESS2 FLG))) (\LISPFINISH (LAMBDA (DUMMY) (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL LISPFINISH DUMMY))) (\GETPACKETBUFFER (LAMBDA NIL (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL GETPACKETBUFFER))) (\GATHERSTATS (LAMBDA (FID) (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL GATHERSTATS FID))) (\DSPRATE (LAMBDA (AC0 AC1 AC2) (* ; "Edited 20-Apr-88 12:39 by MASINTER") (* ; "Edited 20-Apr-88 12:39 by MASINTER") (SUBRCALL DSPRATE AC0 AC1 AC2)) ) (DSPBOUT (LAMBDA (CHARCODE) (* ; "Edited 20-Apr-88 12:39 by MASINTER") (SUBRCALL DSPBOUT CHARCODE))) (DISKPARTITION (LAMBDA NIL (* ; "Edited 20-Apr-88 12:39 by MASINTER") (SELECTQ (MACHINETYPE) ((DORADO DOLPHIN) (SUBRCALL DISKPARTITION)) ((DANDELION DOVE) (\DFSCurrentVolume)) NIL)) ) (\CHECKBCPLPASSWORD (LAMBDA (USER PASSWORD) (* ; "Edited 14-Jun-88 13:33 by drc:") (SUBRCALL CHECKBCPLPASSWORD USER PASSWORD)) ) (SUSPEND-LISP (LAMBDA NIL (* ; "Edited 20-Jun-88 15:24 by greep") (if (EQ (MACHINETYPE) (QUOTE MAIKO)) then (SUBRCALL SUSPEND-LISP) T else NIL)) ) (UNIX-USERNAME (LAMBDA NIL (* ; "Edited 1-Aug-88 23:22 by masinter") (if (EQ \MACHINETYPE \MAIKO) then (WITH-RESOURCE UNIXSTRING (if (SUBRCALL UNIX-USERNAME UNIXSTRING) then (CONCAT (SUBSTRING UNIXSTRING 1 (CL:POSITION #\Null UNIXSTRING))))))) ) (UNIX-FULLNAME (LAMBDA NIL (* ; "Edited 18-Jul-88 03:47 by masinter") (if (EQ \MACHINETYPE \MAIKO) then (WITH-RESOURCES UNIXSTRING (if (SUBRCALL UNIX-FULLNAME UNIXSTRING) then (CONCAT (SUBSTRING UNIXSTRING 1 (CL:POSITION #\Null UNIXSTRING))))))) ) (UNIX-GETENV (LAMBDA (NAME) (* ; "Edited 1-Aug-88 23:13 by masinter") (if (EQ \MACHINETYPE \MAIKO) then (WITH-RESOURCE UNIXSTRING (if (SUBRCALL UNIX-GETENV (MKSTRING NAME) UNIXSTRING) then (CONCAT (SUBSTRING UNIXSTRING 1 (CL:POSITION #\Null UNIXSTRING))))))) ) (UNIX-GETPARM (LAMBDA (NAME) (* ; "Edited 27-Feb-91 17:11 by nm") (* ;; "Read information from the C emulator. Usually gets info about configuration of the machine we're running on.") (* ;; "Used to use CL:POSITION, but now called in the INIT if you're on a Sun, so I changed it to STRPOS.") (* ;; "SUBRCALL UNIX-GETPARM now returns the length of the string.") (if (EQ \MACHINETYPE \MAIKO) then (LET (LEN) (WITH-RESOURCE UNIXSTRING (SETQ LEN (SUBRCALL UNIX-GETPARM (MKSTRING NAME) UNIXSTRING)) (COND ((SMALLP LEN) (if (> LEN 0) then (CONCAT (SUBSTRING UNIXSTRING 1 LEN)))) (LEN (CONCAT (SUBSTRING UNIXSTRING 1 (SUB1 (STRPOS #\Null UNIXSTRING)))))))))) ) ) (PUTPROPS SHOWDISPLAY ARGNAMES (BASE RASTERWIDTH)) (PUTPROPS SETSCREENCOLOR ARGNAMES (FLG)) (PUTPROPS \WRITERAWPBI ARGNAMES (PBI)) (PUTPROPS \READRAWPBI ARGNAMES NIL) (PUTPROPS RAID ARGNAMES (MESS1 MESS2 FLG)) (PUTPROPS \LISPFINISH ARGNAMES (DUMMY)) (PUTPROPS \GETPACKETBUFFER ARGNAMES NIL) (PUTPROPS \GATHERSTATS ARGNAMES (FID)) (PUTPROPS \DSPRATE ARGNAMES (AC0 AC1 AC2)) (PUTPROPS DSPBOUT ARGNAMES (CHARCODE)) (PUTPROPS DISKPARTITION ARGNAMES NIL) (PUTPROPS \CHECKBCPLPASSWORD ARGNAMES (PASS CL:VECTOR)) (PUTPROPS LLSUBRS FILETYPE CL:COMPILE-FILE) (PUTPROPS LLSUBRS COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1988 1989 1990 1991 1992) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (3665 6454 (MISCN-NUMBER 3675 . 3830) (\MISCN.UFN 3832 . 5287) (\UNDEFINED-MISCN-UFN 5289 . 5557) (MISCN-COLLECT 5559 . 5726) (\GET-MY-BF 5728 . 5871) (\INIT-MISCN-TABLE 5873 . 6452)) ( 9128 10493 (\USER-SUBR-UFN 9138 . 9578) (\INIT-USER-SUBR-TABLE 9580 . 9907) (\UNDEFINED-USER-SUBR-UFN 9909 . 10208) (USER-SUBR-NUMBER 10210 . 10371) (EQ-TO-CAR 10373 . 10430) (EQ-TO-CADR 10432 . 10491)) ( 14756 15405 (SUBRNUMBER 14766 . 15403)) (15466 16873 (WRITECALLSUBRS 15476 . 16376) (FIX-SUBR-NAME 16378 . 16871)) (17082 20697 (\MOREVMEMFILE 17092 . 17207) (\WRITEMAP 17209 . 17322) (\COPYSYS0SUBR 17324 . 17429) (\PUPLEVEL1STATE 17431 . 17540) (SHOWDISPLAY 17542 . 17780) (SETSCREENCOLOR 17782 . 17890) (\WRITERAWPBI 17892 . 17995) (\READRAWPBI 17997 . 18092) (RAID 18094 . 18206) (\LISPFINISH 18208 . 18313) (\GETPACKETBUFFER 18315 . 18420) (\GATHERSTATS 18422 . 18525) (\DSPRATE 18527 . 18682) (DSPBOUT 18684 . 18788) (DISKPARTITION 18790 . 18977) (\CHECKBCPLPASSWORD 18979 . 19111) (SUSPEND-LISP 19113 . 19263) (UNIX-USERNAME 19265 . 19515) (UNIX-FULLNAME 19517 . 19768) (UNIX-GETENV 19770 . 20035 ) (UNIX-GETPARM 20037 . 20695))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "21-Feb-2021 21:20:11" {DSK}larry>medley>sources>LLSUBRS.;2 21799 changes to%: (FNS UNIX-GETENV) previous date%: "17-Dec-92 14:28:41" {DSK}larry>medley>sources>LLSUBRS.;1) (* ; " Copyright (c) 1983, 1984, 1985, 1986, 1988, 1989, 1990, 1991, 1992, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT LLSUBRSCOMS) (RPAQQ LLSUBRSCOMS ((DECLARE%: EVAL@COMPILE DONTCOPY (ADDVARS (DONTCOMPILEFNS SUBRCALL MISCN FIX-SUBR-NAME WRITECALLSUBRS))) (* ;;; "MISCN Vars & Functions") (EXPORT (VARS \MISCN-TABLE-LIST)) (FUNCTIONS MISCN) (OPTIMIZERS MISCN) (FNS MISCN-NUMBER \MISCN.UFN \UNDEFINED-MISCN-UFN MISCN-COLLECT \GET-MY-BF \INIT-MISCN-TABLE) (PROP ARGNAMES MISCN) (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS MISCN-UFN-SPEC MISCN-UFN-ENTRY)) (* ;;; " USER-SUBR Vars & Functions") (EXPORT (VARS \USER-SUBR-LIST)) (FUNCTIONS USER-SUBR ADD-USER-SUBR) (FNS \USER-SUBR-UFN \INIT-USER-SUBR-TABLE \UNDEFINED-USER-SUBR-UFN USER-SUBR-NUMBER EQ-TO-CAR EQ-TO-CADR) (PROP ARGNAMES USER-SUBR) (* ;;; "SUBRCALL Vars & Functions") (EXPORT (VARS \INITSUBRS)) (FUNCTIONS SUBRCALL) (OPTIMIZERS SUBRCALL) (FNS SUBRNUMBER) (* ;; "use this to make a subrs.h file for Maiko ") (FNS WRITECALLSUBRS FIX-SUBR-NAME) (PROP ARGNAMES SUBRCALL) (DECLARE%: DONTCOPY (RESOURCES UNIXSTRING)) (INITRESOURCES UNIXSTRING) (FNS \MOREVMEMFILE \WRITEMAP \COPYSYS0SUBR \PUPLEVEL1STATE SHOWDISPLAY SETSCREENCOLOR \WRITERAWPBI \READRAWPBI RAID \LISPFINISH \GETPACKETBUFFER \GATHERSTATS \DSPRATE DSPBOUT DISKPARTITION \CHECKBCPLPASSWORD SUSPEND-LISP UNIX-USERNAME UNIX-FULLNAME UNIX-GETENV UNIX-GETPARM) (IFPROP ARGNAMES SHOWDISPLAY SETSCREENCOLOR \WRITERAWPBI \READRAWPBI RAID \LISPFINISH \GETPACKETBUFFER \GATHERSTATS \DSPRATE DSPBOUT DISKPARTITION \CHECKBCPLPASSWORD) (PROPS (LLSUBRS FILETYPE)))) (DECLARE%: EVAL@COMPILE DONTCOPY (ADDTOVAR DONTCOMPILEFNS SUBRCALL MISCN FIX-SUBR-NAME WRITECALLSUBRS) ) (* ;;; "MISCN Vars & Functions") (* "FOLLOWING DEFINITIONS EXPORTED") (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))) (* "END EXPORTED DEFINITIONS") (DEFMACRO MISCN (NAME &REST ARGS) [LET [(ARGNAMES (MAPCAR ARGS #'(LAMBDA (X) (GENSYM] `(CL:FUNCALL [CL:COMPILE NIL '(LAMBDA ,ARGNAMES ((OPCODES MISCN ,(MISCN-NUMBER NAME) ,(LENGTH ARGS)) ,@ARGNAMES] ,@ARGS]) (DEFOPTIMIZER MISCN (NAME &REST ARGS) `((OPCODES MISCN ,(MISCN-NUMBER NAME) ,(LENGTH ARGS)) ,@ARGS)) (DEFINEQ (MISCN-NUMBER (LAMBDA (NAME) (* ; "Edited 7-Nov-88 15:21 by krivacic") (CADR (OR (ASSOC NAME \MISCN-TABLE-LIST) (ERROR NAME " not a MISCN index")))) ) (\MISCN.UFN (LAMBDA (ALPHA-BETA) (* ; "Edited 8-Jun-89 16:57 by jds") (* ;; "The UFN for the MISCN opcode.") (DECLARE (GLOBALVARS \MISCN-TABLE)) (* ;; "Get the misc index & number of args from the code stream") (LET ((INDEX (LRSH ALPHA-BETA 8)) (ARG-COUNT (LOGAND ALPHA-BETA 255))) (* ;; "compute the position of the real IVARS on the stack. Create a pointer to these args and pass it to the Handler routine.") (COND ((NOT (AND (BOUNDP (QUOTE \MISCN-TABLE)) \MISCN-TABLE)) (\INIT-MISCN-TABLE))) (LET* ((CALLER (\MYALINK)) (MY-BF (\GET-MY-BF)) (MY-IVAR (fetch (BF IVAR) of MY-BF)) (RESULT-IVAR (- MY-IVAR (LLSH ARG-COUNT 1))) (MY-PARMS-PTR (\VAG2 1 RESULT-IVAR)) (UFN-ENTRY (\ADDBASE \MISCN-TABLE (LLSH INDEX 1)))) (COND ((fetch (MISCN-UFN-ENTRY MISCN-MVS) OF UFN-ENTRY) (* ;; "This UFN can return Multiple values, so we need to preserve them.") (CL:UNWIND-PROTECT (APPLY* (\GETBASEPTR UFN-ENTRY 0) INDEX ARG-COUNT MY-PARMS-PTR) (replace (BF IVAR) of MY-BF with RESULT-IVAR) (REPLACE (FX NEXTBLOCK) OF CALLER WITH RESULT-IVAR))) (T (* ;; "He said no MVs are possible, so don't even TRY to preserve them. This is an expanded and cleaned up version of CL:UNWIND-PROTECT, so watch it!") (PROG1 (.UNWIND.PROTECT. (FUNCTION (LAMBDA NIL (replace (BF IVAR) of MY-BF with RESULT-IVAR))) (APPLY* (\GETBASEPTR UFN-ENTRY 0) INDEX ARG-COUNT MY-PARMS-PTR)) (replace (BF IVAR) of MY-BF with RESULT-IVAR) (REPLACE (FX NEXTBLOCK) OF CALLER WITH RESULT-IVAR))))))) ) (\UNDEFINED-MISCN-UFN (LAMBDA (INDEX ARG-COUNT ARG-PTR) (* ; "Edited 3-Nov-88 15:56 by krivacic") (PRINTOUT T "index " INDEX ", arg count " ARG-COUNT T) (ERROR (CL:FORMAT T "Undefined MISCN[~d] with ~d args." INDEX ARG-COUNT) (MISCN-COLLECT ARG-COUNT ARG-PTR))) ) (MISCN-COLLECT (LAMBDA (ARG-COUNT ARG-PTR) (* ; "Edited 3-Nov-88 11:52 by krivacic") (FOR I FROM 0 TO (- ARG-COUNT 1) COLLECT (\GETBASEPTR ARG-PTR (LLSH I 1)))) ) (\GET-MY-BF (LAMBDA NIL (* ; "Edited 3-Nov-88 11:08 by krivacic") (* ;; "Returns the stack index of the caller's BF.") (- (\MYALINK) 2)) ) (\INIT-MISCN-TABLE (LAMBDA NIL (DECLARE (GLOBALVARS \MISCN-TABLE-LIST \MISCN-TABLE)) (* ; "Edited 7-Mar-89 09:43 by jds") (LET ((OP-NUMBER 36) (OP-LENGTH 3) BASE) (SETQ \MISCN-TABLE (ARRAY 256 (QUOTE POINTER) (QUOTE \UNDEFINED-MISCN-UFN) 0)) (SETQ BASE (FETCH (ARRAYP BASE) OF \MISCN-TABLE)) (for MISCN-ENTRY in \MISCN-TABLE-LIST do (SETA \MISCN-TABLE (CADR MISCN-ENTRY) (CADDR MISCN-ENTRY)) (REPLACE (MISCN-UFN-ENTRY MISCN-MVS) OF (\ADDBASE2 BASE (FETCH (MISCN-UFN-SPEC INDEX) OF MISCN-ENTRY)) WITH (FETCH (MISCN-UFN-SPEC MVS) OF MISCN-ENTRY))) (SETQ \MISCN-TABLE BASE))) ) ) (PUTPROPS MISCN ARGNAMES (NAME &REST ARGS)) (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (RECORD MISCN-UFN-SPEC ( (* ;;  "This is the description for a MISCN opcode's UFN, as placed in \MISCN-TABLE-LIST.") NAME (* ;  "Name of the MISCN, for the MISCN macro's use.") INDEX (* ; "Sub-opcode index.") UFN-NAME (* ; "Name of the UFN") MVS (* ;  "T if the UFN can returnmultiple values. If this is NIL, MVs WILL NOT BE PRESERVED.") )) (BLOCKRECORD MISCN-UFN-ENTRY ((MISCN-MVS FLAG) (NIL BITS 3) (MISCN-UFN POINTER))) ) ) (* ;;; " USER-SUBR Vars & Functions") (* "FOLLOWING DEFINITIONS EXPORTED") (RPAQQ \USER-SUBR-LIST ((DUMMY 10 DUMMY-UFN) (SAMPLE-USER-SUBR 0 SAMPLE-USER-SUBR-UFN))) (* "END EXPORTED DEFINITIONS") (DEFMACRO USER-SUBR (USER-SUBR-NAME &REST ARGS) `(MISCN USER-SUBR ,(USER-SUBR-NUMBER USER-SUBR-NAME) ,@ARGS)) (CL:DEFUN ADD-USER-SUBR (USER-SUBR-NAME USER-SUBR-INDEX USER-SUBR-UFN) (DECLARE (GLOBALVARS \USER-SUBR-TABLE \USER-SUBR-LIST)) (* ;; "Make Sure \USER-SUBR-TABLE is made") (IF (NOT (AND (BOUNDP '\USER-SUBR-TABLE) \USER-SUBR-TABLE)) THEN (\INIT-USER-SUBR-TABLE)) (* ;; "See if the Name is already defined") [AND (FASSOC USER-SUBR-NAME \USER-SUBR-LIST) (CL:CERROR "Delete old User-subr" "User-subr ~S already defined" USER-SUBR-NAME) (SETA \USER-SUBR-TABLE (CADR (FASSOC USER-SUBR-NAME \USER-SUBR-LIST)) '\UNDEFINED-USER-SUBR-UFN) (SETQ \USER-SUBR-LIST (CL:REMOVE USER-SUBR-NAME \USER-SUBR-LIST :TEST 'EQ-TO-CAR] (* ;; "See if the UFN is already defined") [AND (OR (NEQ (ELT \USER-SUBR-TABLE USER-SUBR-INDEX) '\UNDEFINED-USER-SUBR-UFN) (CL:FIND USER-SUBR-INDEX \USER-SUBR-LIST :KEY #'CL:SECOND)) (CL:CERROR "Delete old User-subr" " User-subr index ~d already defined" USER-SUBR-INDEX) (SETQ \USER-SUBR-LIST (CL:REMOVE USER-SUBR-INDEX \USER-SUBR-LIST :TEST 'EQ-TO-CADR] (CL:PUSH (LIST USER-SUBR-NAME USER-SUBR-INDEX (OR USER-SUBR-UFN '\UNDEFINED-USER-SUBR-UFN)) \USER-SUBR-LIST) (\INIT-USER-SUBR-TABLE)) (DEFINEQ (\USER-SUBR-UFN (LAMBDA (INDEX ARG-COUNT ARG-PTR) (DECLARE (GLOBALVARS \USER-SUBR-TABLE)) (* ; "Edited 4-Nov-88 18:43 by krivacic") (IF (NOT (AND (BOUNDP (QUOTE \USER-SUBR-TABLE)) \USER-SUBR-TABLE)) THEN (\INIT-USER-SUBR-TABLE)) (LET ((USER-SUBR-INDEX (\GETBASE ARG-PTR 1))) (* ;; "User SUBR ufn. Index on the User subr indexes") (APPLY* (ELT \USER-SUBR-TABLE USER-SUBR-INDEX) USER-SUBR-INDEX (- ARG-COUNT 1) (\ADDBASE ARG-PTR 2)))) ) (\INIT-USER-SUBR-TABLE (LAMBDA NIL (DECLARE (GLOBALVARS \USER-SUBR-TABLE \USER-SUBR-LIST)) (* ; "Edited 4-Nov-88 18:58 by krivacic") (SETQ \USER-SUBR-TABLE (ARRAY 256 (QUOTE POINTER) (QUOTE \UNDEFINED-USER-SUBR-UFN) 0)) (for SUBR-ENTRY in \USER-SUBR-LIST do (SETA \USER-SUBR-TABLE (CADR SUBR-ENTRY) (CADDR SUBR-ENTRY)))) ) (\UNDEFINED-USER-SUBR-UFN (LAMBDA (USER-SUBR-INDEX ARG-COUNT ARG-PTR) (* ; "Edited 7-Nov-88 14:33 by krivacic") (* ;; "User SUBR ufn. Index on the User subr indexes") (ERROR (CL:FORMAT NIL "Undefined USER-SUBR[~d] with ~d args." USER-SUBR-INDEX ARG-COUNT) (MISCN-COLLECT ARG-COUNT ARG-PTR))) ) (USER-SUBR-NUMBER (LAMBDA (NAME) (* ; "Edited 4-Nov-88 18:42 by krivacic") (CADR (OR (ASSOC NAME \USER-SUBR-LIST) (ERROR NAME " not a USER-SUBR index")))) ) (EQ-TO-CAR (LAMBDA (ITEM LIST) (EQ ITEM (CAR LIST)))) (EQ-TO-CADR (LAMBDA (ITEM LIST) (EQ ITEM (CADR LIST)))) ) (PUTPROPS USER-SUBR ARGNAMES (USER-SUBR-NAME &REST ARGS)) (* ;;; "SUBRCALL Vars & Functions") (* "FOLLOWING DEFINITIONS EXPORTED") (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))) (* "END EXPORTED DEFINITIONS") (DEFMACRO SUBRCALL (NAME &REST ARGS) [LET [(ARGNAMES (MAPCAR ARGS #'(LAMBDA (X) (GENSYM] `(CL:FUNCALL [CL:COMPILE NIL '(LAMBDA ,ARGNAMES ((OPCODES SUBRCALL ,(SUBRNUMBER NAME) ,(LENGTH ARGS)) ,@ARGNAMES] ,@ARGS]) (DEFOPTIMIZER SUBRCALL (NAME &REST ARGS) `((OPCODES SUBRCALL ,(SUBRNUMBER NAME) ,(LENGTH ARGS)) ,@ARGS)) (DEFINEQ (SUBRNUMBER [LAMBDA (NAME) (* ; "Edited 5-Feb-92 16:49 by jds") (* ;; "Given a SUBR's NAME or number, return the corresponding subr number.") (LET (NUMBER) (COND ((FIXP NAME) (CL:WARN "SUBR name (~d) is a number; should be abstracted." NAME) NAME) ((CADR (ASSOC NAME \INITSUBRS))) ([SETQ NUMBER (CADR (CL:ASSOC NAME \INITSUBRS :TEST (FUNCTION STRING.EQUAL] (CL:WARN "SUBR name ~s is in wrong package. Using ~d as subr number." NAME NUMBER)) (T (ERROR NAME " not a SUBR"]) ) (* ;; "use this to make a subrs.h file for Maiko ") (DEFINEQ (WRITECALLSUBRS (LAMBDA NIL (* ; "Edited 6-Nov-89 15:39 by jds") (CL:WITH-OPEN-FILE (*STANDARD-OUTPUT* "subrs.h" :DIRECTION :OUTPUT :IF-EXISTS :NEW-VERSION) (CL:FORMAT T "/* This file written from LLSUBRS on ~A */~&" (DATE)) (CL:FORMAT T "/* Do not edit this file! Instead, edit the list \initsubrs */~&") (CL:FORMAT T "/* on the lisp file LLSUBRS and then call WRITECALLSUBRS to */~&") (CL:FORMAT T "/* generate a new version. */~&") (for X in \INITSUBRS do (CL:FORMAT T "#define sb_~A 0~O~&" (FIX-SUBR-NAME (CAR X)) (CADR X))) (CL:FORMAT T "~&~&/* MISCN opcodes */~&") (for X in \MISCN-TABLE-LIST do (CL:FORMAT T "#define miscn_~A 0~O~&" (FIX-SUBR-NAME (CAR X)) (CADR X))) (CL:FORMAT T "~&~&/* Assigned USER SUBR numbers */~&") (for X in \USER-SUBR-LIST do (CL:FORMAT T "#define user_subr_~A 0~O~&" (FIX-SUBR-NAME (CAR X)) (CADR X))))) ) (FIX-SUBR-NAME (LAMBDA (NAME) (* ; "Edited 13-Feb-89 16:17 by jds") (* ;; "Fix up a SUBR name for use as a symbol in the C code, by:") (* ;; "Converting all -'s to _'s") (* ;; "Converting all .'s to _'s") (* ;; "Removing all \'s.") (* ;; "This allows us to use fairly normal Lisp symbols for SUBR names (like \TEDIT.BLTCHAR), while having them translate pleasantly.") (CONCATCODES (DREMOVE (CHARCODE \) (SUBST (CHARCODE _) (CHARCODE %.) (SUBST (CHARCODE _) (CHARCODE -) (CHCON NAME)))))) ) ) (PUTPROPS SUBRCALL ARGNAMES (NAME &REST ARGS)) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE [PUTDEF 'UNIXSTRING 'RESOURCES '(NEW (ALLOCSTRING 512] ) ) (/SETTOPVAL '\UNIXSTRING.GLOBALRESOURCE NIL) (DEFINEQ (\MOREVMEMFILE (LAMBDA (FILEPAGE) (* ; "Edited 27-Apr-88 13:36 by MASINTER") (SUBRCALL MOREVMEMFILE FILEPAGE))) (\WRITEMAP (LAMBDA (VP RP FLAGS) (* ; "Edited 27-Apr-88 13:37 by MASINTER") (SUBRCALL WRITEMAP VP RP FLAGS))) (\COPYSYS0SUBR (LAMBDA (FID) (* ; "Edited 20-Apr-88 12:36 by MASINTER") (SUBRCALL COPYSYS0SUBR FID))) (\PUPLEVEL1STATE (LAMBDA (FLG) (* ; "Edited 20-Apr-88 12:37 by MASINTER") (SUBRCALL PUPLEVEL1STATE FLG))) (SHOWDISPLAY (LAMBDA (BASE RASTERWIDTH) (* ; "Edited 27-Apr-88 13:40 by MASINTER") (* ;; "comments are done with semicolons one comment is at the right margin, it automatically do you type ") (SUBRCALL SHOWDISPLAY BASE RASTERWIDTH)) ) (SETSCREENCOLOR (LAMBDA (FLG) (* ; "Edited 20-Apr-88 12:37 by MASINTER") (SUBRCALL SETSCREENCOLOR FLG))) (\WRITERAWPBI (LAMBDA (PBI) (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL WRITERAWPBI PBI))) (\READRAWPBI (LAMBDA NIL (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL READRAWPBI))) (RAID (LAMBDA (MESS1 MESS2 FLG) (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL RAID MESS1 MESS2 FLG))) (\LISPFINISH (LAMBDA (DUMMY) (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL LISPFINISH DUMMY))) (\GETPACKETBUFFER (LAMBDA NIL (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL GETPACKETBUFFER))) (\GATHERSTATS (LAMBDA (FID) (* ; "Edited 20-Apr-88 12:38 by MASINTER") (SUBRCALL GATHERSTATS FID))) (\DSPRATE (LAMBDA (AC0 AC1 AC2) (* ; "Edited 20-Apr-88 12:39 by MASINTER") (* ; "Edited 20-Apr-88 12:39 by MASINTER") (SUBRCALL DSPRATE AC0 AC1 AC2)) ) (DSPBOUT (LAMBDA (CHARCODE) (* ; "Edited 20-Apr-88 12:39 by MASINTER") (SUBRCALL DSPBOUT CHARCODE))) (DISKPARTITION (LAMBDA NIL (* ; "Edited 20-Apr-88 12:39 by MASINTER") (SELECTQ (MACHINETYPE) ((DORADO DOLPHIN) (SUBRCALL DISKPARTITION)) ((DANDELION DOVE) (\DFSCurrentVolume)) NIL)) ) (\CHECKBCPLPASSWORD (LAMBDA (USER PASSWORD) (* ; "Edited 14-Jun-88 13:33 by drc:") (SUBRCALL CHECKBCPLPASSWORD USER PASSWORD)) ) (SUSPEND-LISP (LAMBDA NIL (* ; "Edited 20-Jun-88 15:24 by greep") (if (EQ (MACHINETYPE) (QUOTE MAIKO)) then (SUBRCALL SUSPEND-LISP) T else NIL)) ) (UNIX-USERNAME (LAMBDA NIL (* ; "Edited 1-Aug-88 23:22 by masinter") (if (EQ \MACHINETYPE \MAIKO) then (WITH-RESOURCE UNIXSTRING (if (SUBRCALL UNIX-USERNAME UNIXSTRING) then (CONCAT (SUBSTRING UNIXSTRING 1 (CL:POSITION #\Null UNIXSTRING))))))) ) (UNIX-FULLNAME (LAMBDA NIL (* ; "Edited 18-Jul-88 03:47 by masinter") (if (EQ \MACHINETYPE \MAIKO) then (WITH-RESOURCES UNIXSTRING (if (SUBRCALL UNIX-FULLNAME UNIXSTRING) then (CONCAT (SUBSTRING UNIXSTRING 1 (CL:POSITION #\Null UNIXSTRING))))))) ) (UNIX-GETENV [LAMBDA (NAME) (* ; "Edited 21-Feb-2021 21:09 by larry") (WITH-RESOURCES UNIXSTRING (LET ((X UNIXSTRING)) (if (SUBRCALL UNIX-GETENV (MKSTRING NAME) X) then (CONCAT (SUBSTRING X 1 (for I from 1 do (if (FMEMB (NTHCHARCODE X I) '(0 NIL)) then (RETURN (SUB1 I]) (UNIX-GETPARM (LAMBDA (NAME) (* ; "Edited 27-Feb-91 17:11 by nm") (* ;; "Read information from the C emulator. Usually gets info about configuration of the machine we're running on.") (* ;; "Used to use CL:POSITION, but now called in the INIT if you're on a Sun, so I changed it to STRPOS.") (* ;; "SUBRCALL UNIX-GETPARM now returns the length of the string.") (if (EQ \MACHINETYPE \MAIKO) then (LET (LEN) (WITH-RESOURCE UNIXSTRING (SETQ LEN (SUBRCALL UNIX-GETPARM (MKSTRING NAME) UNIXSTRING)) (COND ((SMALLP LEN) (if (> LEN 0) then (CONCAT (SUBSTRING UNIXSTRING 1 LEN)))) (LEN (CONCAT (SUBSTRING UNIXSTRING 1 (SUB1 (STRPOS #\Null UNIXSTRING)))))))))) ) ) (PUTPROPS SHOWDISPLAY ARGNAMES (BASE RASTERWIDTH)) (PUTPROPS SETSCREENCOLOR ARGNAMES (FLG)) (PUTPROPS \WRITERAWPBI ARGNAMES (PBI)) (PUTPROPS \READRAWPBI ARGNAMES NIL) (PUTPROPS RAID ARGNAMES (MESS1 MESS2 FLG)) (PUTPROPS \LISPFINISH ARGNAMES (DUMMY)) (PUTPROPS \GETPACKETBUFFER ARGNAMES NIL) (PUTPROPS \GATHERSTATS ARGNAMES (FID)) (PUTPROPS \DSPRATE ARGNAMES (AC0 AC1 AC2)) (PUTPROPS DSPBOUT ARGNAMES (CHARCODE)) (PUTPROPS DISKPARTITION ARGNAMES NIL) (PUTPROPS \CHECKBCPLPASSWORD ARGNAMES (PASS CL:VECTOR)) (PUTPROPS LLSUBRS FILETYPE CL:COMPILE-FILE) (PUTPROPS LLSUBRS COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1988 1989 1990 1991 1992 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (3635 6424 (MISCN-NUMBER 3645 . 3800) (\MISCN.UFN 3802 . 5257) (\UNDEFINED-MISCN-UFN 5259 . 5527) (MISCN-COLLECT 5529 . 5696) (\GET-MY-BF 5698 . 5841) (\INIT-MISCN-TABLE 5843 . 6422)) ( 7808 9097 (ADD-USER-SUBR 7808 . 9097)) (9098 10463 (\USER-SUBR-UFN 9108 . 9548) (\INIT-USER-SUBR-TABLE 9550 . 9877) (\UNDEFINED-USER-SUBR-UFN 9879 . 10178) (USER-SUBR-NUMBER 10180 . 10341) (EQ-TO-CAR 10343 . 10400) (EQ-TO-CADR 10402 . 10461)) (14726 15375 (SUBRNUMBER 14736 . 15373)) (15436 16843 ( WRITECALLSUBRS 15446 . 16346) (FIX-SUBR-NAME 16348 . 16841)) (17052 20999 (\MOREVMEMFILE 17062 . 17177 ) (\WRITEMAP 17179 . 17292) (\COPYSYS0SUBR 17294 . 17399) (\PUPLEVEL1STATE 17401 . 17510) (SHOWDISPLAY 17512 . 17750) (SETSCREENCOLOR 17752 . 17860) (\WRITERAWPBI 17862 . 17965) (\READRAWPBI 17967 . 18062 ) (RAID 18064 . 18176) (\LISPFINISH 18178 . 18283) (\GETPACKETBUFFER 18285 . 18390) (\GATHERSTATS 18392 . 18495) (\DSPRATE 18497 . 18652) (DSPBOUT 18654 . 18758) (DISKPARTITION 18760 . 18947) ( \CHECKBCPLPASSWORD 18949 . 19081) (SUSPEND-LISP 19083 . 19233) (UNIX-USERNAME 19235 . 19485) ( UNIX-FULLNAME 19487 . 19738) (UNIX-GETENV 19740 . 20337) (UNIX-GETPARM 20339 . 20997))))) STOP \ No newline at end of file diff --git a/sources/LLSUBRS.LCOM b/sources/LLSUBRS.LCOM index 7330734dd31059cd0456248330002565e6ca343a..f488950964660fc088827561a3003d3c6b16c678 100644 GIT binary patch delta 709 zcmaJbUbM_=%))6?Gs{qb}V%y3+ zB2&u2{kq|(7Vj!$Qv*?2#kp0?n}*}gFJ9WcKE+_bHXzs|R#?h#T-&fVNmu|&scRfi z%_K$9O^TfNsGp$D#a=2!S3lfYy2fEX@h)d{{S=)rYUksu|M2H4|MjBttbI9#i=!`# z_S-A9?zi-X7%$tZacY}dtkt?-KOTLeGDQK@hNUVl6!Jj6#W4|41k0_eRmD~t6)jd> w-#Shq5fsyGsDB~ZLvelfUAUIWOYudE#9mF3@ccRckz|00KP$&EmSHk~0Cda2!vFvP delta 623 zcmb7>L5tHs6vxvo%6bUudQcGL85J62N-~|K>9`crbn3=UlbT7pEbPIW4QnAbrP&Iy zEql|ODETPWi(kR7;Kgs?#hVAGt)P2!F7w`h-v7<-&HPG#rXLOl26{RiqlN`~ooWrL zX$n-7ID0i2rO7d5V^H9%&G#3(=_sGX*)(b9*=!modDHWFzZLT8BV7eqscEP?oT7#S zSfjO%U+$jk1lhBbl~S!%6*wNAiiXNxRW~TEQ(`HqT9fk7t} zTa@Su%+GqvW3)S<%pU}NvFo|K=L8{Z@}M6&jQ@jU%mM4l`19%C-5CR0;3M% zGkFxc{u3~S?9pDp-N+4msMVmm|K|u3usttuHmRVmo5cj*E`w>U_Tr|Fw@tWrM{ Q`5u2SZ>zE@`>rSd2GsMU6#xJL diff --git a/sources/LOADUP-GREET b/sources/LOADUP-GREET deleted file mode 100644 index 6a452c18..00000000 --- a/sources/LOADUP-GREET +++ /dev/null @@ -1 +0,0 @@ -() diff --git a/sources/YREM.CM b/sources/YREM.CM new file mode 100644 index 00000000..5536f3d0 --- /dev/null +++ b/sources/YREM.CM @@ -0,0 +1,6 @@ +" +(PROGN(LOAD(CONCAT (QUOTE {DSK}) (UNIX-GETENV (QUOTE MEDLEYDIR)) (QUOTE /sources/LOADUP.LISP)))(HARDRESET)) +SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /loadups/lisp.sysout))))) +(IL:LOGOUT T) + +" From 43706dc31128a82bcd50c3ccba364f6cafdc95ba Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Mon, 15 Feb 2021 20:31:14 -0800 Subject: [PATCH 23/37] First commit of wheel-mouse scrolling --- lispusers/WHEELSCROLL | 1 + lispusers/WHEELSCROLL.LCOM | Bin 0 -> 2313 bytes 2 files changed, 1 insertion(+) create mode 100644 lispusers/WHEELSCROLL create mode 100644 lispusers/WHEELSCROLL.LCOM diff --git a/lispusers/WHEELSCROLL b/lispusers/WHEELSCROLL new file mode 100644 index 00000000..d2a49393 --- /dev/null +++ b/lispusers/WHEELSCROLL @@ -0,0 +1 @@ +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "15-Feb-2021 18:24:12"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;1 3088 changes to%: (VARS WHEELSCROLLCOMS) (FNS ENABLEWHEELSCROLL INSTALL-WHEELSCROLL) previous date%: "15-Feb-2021 16:52:28" {DSK}kaplan>lisp>WHEELSCROLL.;8) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL) (INITVARS (WHEELSCROLLDELTA 10)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (UP) (* ; "Edited 15-Feb-2021 16:23 by rmk:") (LET ((W (WHICHW))) (CL:WHEN W (SCROLLW W 0 (CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 15-Feb-2021 18:18 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (INTERRUPTCHAR 520 '(WHEELSCROLL T) T) (INTERRUPTCHAR 521 '(WHEELSCROLL NIL) T) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;;  "This doesn't seem to help the fact that it doesn't scroll when the caret is in the Tedit window.") (TEDIT.SETFUNCTION 520 [FUNCTION (LAMBDA NIL (WHEELSCROLL T] TEDIT.READTABLE) (TEDIT.SETFUNCTION 521 [FUNCTION (LAMBDA NIL (WHEELSCROLL NIL] TEDIT.READTABLE)) (CL:WHEN (GETP 'SEDIT 'FILEDATES) (SEDIT:ADD-COMMAND 520 '(WHEELSCROLL T)) (SEDIT:ADD-COMMAND 521 '(WHEELSCROLL)) (SEDIT:RESET-COMMANDS))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 15-Feb-2021 14:50 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND [LIST (LIST 520 '(WHEELSCROLL T)) (LIST 521 '(WHEELSCROLL] (LISPINTERRUPTS.WSORIG]) ) (RPAQ? WHEELSCROLLDELTA 10) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (792 2943 (ENABLEWHEELSCROLL 802 . 1227) (WHEELSCROLL 1229 . 1538) (INSTALL-WHEELSCROLL 1540 . 2590) (LISPINTERRUPTS.WHEELSCROLL 2592 . 2941))))) STOP \ No newline at end of file diff --git a/lispusers/WHEELSCROLL.LCOM b/lispusers/WHEELSCROLL.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..f9f48f1dcff73a227a2a63755d6b0799db37e38c GIT binary patch literal 2313 zcmb_d!EW0|5T$ZTS`bLDJ_Hj2LCJ#%?oyN}rBJ*kS2kgqq)Ez#fm~Eeu+=J(V95o7 zqCo$l*B<)?LGSsF{!M3>mc63X1_f%!lx8^lW@qNjj2ZGllT*@_my!lmPL2wAFKc15D$3@nJcg zO~$a8g8}-_VR8D)cf-}>Zq@&Bw49CR{djRbn)N?S#NeT(4*fZf@aK@8OA&u9{LQ`{!xY_}NlZXc7~IchP<&i1?$M&Ll2SfCwgn$|e{^!f(BwS{mBSka-&j&L)PSTu%4b=||TJ9bt?SN@|NNN1H6k|fA-a);i z=qH4dwPfqf|*4VE8yC zqSAgGFc|h9TH}Ef684iJ86Y2$FQ4o3{MmEKrm0NK{MiddlC~8Npq&&mY4;foRk4Qp z=j#oubh<&6f=nG2fV2q|;{Lsy7rbm@3!bqgEP#0JhZigiH)$K}N1-AoYV?1880BqE4jjiw> zu(9fIi!_gpfwXHckoa}Wr;Q+bns@|E1=|9G13=Y4X+hiDR$+r!P&i8oz literal 0 HcmV?d00001 From 28783fe5108e919b8e53f717aaa0eb9fb7acebcb Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Tue, 16 Feb 2021 15:44:08 -0800 Subject: [PATCH 24/37] Better behavior when the wheel moves inside a scroll bar --- lispusers/WHEELSCROLL | 2 +- lispusers/WHEELSCROLL.LCOM | Bin 2313 -> 3267 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lispusers/WHEELSCROLL b/lispusers/WHEELSCROLL index d2a49393..256f0ee4 100644 --- a/lispusers/WHEELSCROLL +++ b/lispusers/WHEELSCROLL @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "15-Feb-2021 18:24:12"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;1 3088 changes to%: (VARS WHEELSCROLLCOMS) (FNS ENABLEWHEELSCROLL INSTALL-WHEELSCROLL) previous date%: "15-Feb-2021 16:52:28" {DSK}kaplan>lisp>WHEELSCROLL.;8) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL) (INITVARS (WHEELSCROLLDELTA 10)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (UP) (* ; "Edited 15-Feb-2021 16:23 by rmk:") (LET ((W (WHICHW))) (CL:WHEN W (SCROLLW W 0 (CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 15-Feb-2021 18:18 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (INTERRUPTCHAR 520 '(WHEELSCROLL T) T) (INTERRUPTCHAR 521 '(WHEELSCROLL NIL) T) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;;  "This doesn't seem to help the fact that it doesn't scroll when the caret is in the Tedit window.") (TEDIT.SETFUNCTION 520 [FUNCTION (LAMBDA NIL (WHEELSCROLL T] TEDIT.READTABLE) (TEDIT.SETFUNCTION 521 [FUNCTION (LAMBDA NIL (WHEELSCROLL NIL] TEDIT.READTABLE)) (CL:WHEN (GETP 'SEDIT 'FILEDATES) (SEDIT:ADD-COMMAND 520 '(WHEELSCROLL T)) (SEDIT:ADD-COMMAND 521 '(WHEELSCROLL)) (SEDIT:RESET-COMMANDS))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 15-Feb-2021 14:50 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND [LIST (LIST 520 '(WHEELSCROLL T)) (LIST 521 '(WHEELSCROLL] (LISPINTERRUPTS.WSORIG]) ) (RPAQ? WHEELSCROLLDELTA 10) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (792 2943 (ENABLEWHEELSCROLL 802 . 1227) (WHEELSCROLL 1229 . 1538) (INSTALL-WHEELSCROLL 1540 . 2590) (LISPINTERRUPTS.WHEELSCROLL 2592 . 2941))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "16-Feb-2021 15:37:58"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;7 5064 changes to%: (VARS WHEELSCROLLCOMS) (FNS WHEELSCROLL \SCROLLBARTOMAIN? \TEDIT.WHEELSCROLL) previous date%: "16-Feb-2021 15:12:14" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;6) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL CREATESCROLLBARWINDOW \SCROLLBARTOMAIN?) (FNS \TEDIT.WHEELSCROLL) (INITVARS (WHEELSCROLLDELTA 10)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (UP) (* ; "Edited 16-Feb-2021 15:35 by rmk:") (LET ((W (\SCROLLBARTOMAIN?))) (CL:WHEN W (SCROLLW W 0 (CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 16-Feb-2021 14:38 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (INTERRUPTCHAR 520 '(WHEELSCROLL T) T) (INTERRUPTCHAR 521 '(WHEELSCROLL NIL) T) (CHANGENAME 'SCROLL.HANDLER 'CREATEW 'CREATESCROLLBARWINDOW) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;; "These actions are invoked when the caret is in the Tedit window. Otherwise the generic function is called on the Tedit window if the cursor is inside it.") (TEDIT.SETFUNCTION 520 [FUNCTION (LAMBDA NIL (\TEDIT.WHEELSCROLL T] TEDIT.READTABLE) (TEDIT.SETFUNCTION 521 [FUNCTION (LAMBDA NIL (\TEDIT.WHEELSCROLL NIL] TEDIT.READTABLE)) (CL:WHEN (GETP 'SEDIT 'FILEDATES) (SEDIT:ADD-COMMAND 520 '(WHEELSCROLL T)) (SEDIT:ADD-COMMAND 521 '(WHEELSCROLL)) (SEDIT:RESET-COMMANDS))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 15-Feb-2021 14:50 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND [LIST (LIST 520 '(WHEELSCROLL T)) (LIST 521 '(WHEELSCROLL] (LISPINTERRUPTS.WSORIG]) (CREATESCROLLBARWINDOW [LAMBDA (REGION TITLE BORDERSIZE NOOPENFLG PROPS) (* ; "Edited 16-Feb-2021 14:37 by rmk:") (* ;; "This replaces CREATEW inside SCROLL.HANDLER. WINDOW should be bound to the window that this scroll bar will control. The purpose is to create an unreferenced (LOC) pointer from the controller to the controllee, so that wheel scrolling in the scrollbar can be redirected to the controllee.") (DECLARE (USEDFREE WINDOW)) (LET ((SBW (CREATEW REGION TITLE BORDERSIZE NOOPENFLG PROPS))) (WINDOWPROP SBW 'CONTROLLEELOC (LOC WINDOW)) SBW]) (\SCROLLBARTOMAIN? [LAMBDA NIL (* ; "Edited 16-Feb-2021 15:37 by rmk:") (* ;; "Returns the window that that should be wheel scrolled, moving from a scrollbar to its scrollee if necessary.") (LET ((W (WHICHW))) (CL:WHEN W (CL:WHEN (WINDOWPROP W 'CONTROLLEELOC) [SETQ W (VAG (WINDOWPROP W 'CONTROLLEELOC] (GETMOUSESTATE) (\CURSORPOSITION [IPLUS 10 (FETCH LEFT OF (WINDOWPROP W 'REGION] LASTMOUSEY) (SETCURSOR DEFAULTCURSOR) (GETMOUSESTATE))) W]) ) (DEFINEQ (\TEDIT.WHEELSCROLL [LAMBDA (UP) (* ; "Edited 16-Feb-2021 15:35 by rmk:") (* ;; "Called from the TEDIT.READTABLE when the wheel moves and the caret is in the TEDIT (WHICHW) window.") (\TEDIT.SCROLLFN (\SCROLLBARTOMAIN?) 0 (CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)]) ) (RPAQ? WHEELSCROLLDELTA 10) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (929 4504 (ENABLEWHEELSCROLL 939 . 1364) (WHEELSCROLL 1366 . 1690) (INSTALL-WHEELSCROLL 1692 . 2873) (LISPINTERRUPTS.WHEELSCROLL 2875 . 3224) (CREATESCROLLBARWINDOW 3226 . 3839) ( \SCROLLBARTOMAIN? 3841 . 4502)) (4505 4919 (\TEDIT.WHEELSCROLL 4515 . 4917))))) STOP \ No newline at end of file diff --git a/lispusers/WHEELSCROLL.LCOM b/lispusers/WHEELSCROLL.LCOM index f9f48f1dcff73a227a2a63755d6b0799db37e38c..16e609ed7adac2b132880cd1193583644c71d3af 100644 GIT binary patch delta 1342 zcmZ`(OK;Oa5VlJiN|7Z>LA(TvDj^a0)0$d70>VXUV13(<$pD; z#xKLNpgt29MuXPxgR%8vX?DC$ed}STSc9tR*z%Qr?#$?^|E8AT^^-@9Ir4WpVl{|8 z2Xba&R$kXF-FaJ^80a%&S>%U37xxZ9%1ec_@>JpUi0$dy@>!ubeOtpz-Q=gjie8uJ zCyx$l4kTH34cGVQy|CMLxevst?B=!W(54~+Qn4T(NkT;{<(^<62SRGQc})V%Fy(#( z3k1B5%iEN@T?#b?+Th=@_Jqyh~JE5lVGhM3^4DkF5BpHZy6Qt8vToJa3kbvyXe@ihC$k8pG(uAuB_n?p zzYTUz*YN8`DFPFcW*->X5XE7X;9CWF7)F%0f;L(fwjKL4PS`byCIP_&qGWh5rtNHC zEp+A(%b?Bax;A;mZF;^jnejBEYlDs=tG6$+_h+}x0j*RqAxcGlE~^Yy6@t(MV*c*3 zY?R0Xcp(>=o>ADLhpw_QrW^RvN?(ETY0FIm;iYjB#$_02DT30bvdRdjv-*Z9K+~Dy z&0>yD84BUH3f#Fn-BIS}qWiy%iaq*eg>En1%@qwG< zfUbg-&95{vKwOF4CYo=7ygYIEW*XrP&Cx%JPXpm1wTCoa(^cbluE^Es>(fY)i9^7R z8Ln-v$`(gCjnPy#I17xDe7E;S_dgOJKLe!}Pkv|rOWY;KnOJh;#E`wIMYUkBr;g}` I+@9+F0zg?wF#rGn delta 422 zcmZvYOG^S#9L1Tz85g?pQQ8Ck1fdd|_fG0KN-*j*2Zr%6*Thymln^YRwTsr#Ci#DW zHf?LuE@%;bf}mCV_Vo=?Xd%?%Y!2uA;GEasmFLFtB%;OkVU)%x0itSjOH(HMO@U0F zmfYi`-bue3YC-1|a8=m#{>c(L8I)uKN?cX(UDz<0rRPl6C^2T*`C8dD!LV$un`U&* zi$H(aKJWC-M$kGKx7RgTBlGB_mY^C{CxZoVw=?Q*&sAd?_3>7`6y!$9$d?+p>B!)~ zQJgA-pNsFo{Wed`& ze@vA?u3WbY6|BnnAXT7fn5>|4W=|<9*fR={INr<4Vw&KC9PklHC4WgZrWg3^4vac4 qya@u~xgilC3O+kOP;p(mA`mt#gYW7!8(r=!zBzoj=U&92yZQt7%yhc| From 0b541fbecd70ffa4c3508f82bad7d4a335859ade Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Tue, 16 Feb 2021 22:37:49 -0800 Subject: [PATCH 25/37] Tedit scrolling executed in mouse process --- lispusers/WHEELSCROLL | 2 +- lispusers/WHEELSCROLL.LCOM | Bin 3267 -> 3301 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lispusers/WHEELSCROLL b/lispusers/WHEELSCROLL index 256f0ee4..e71d6c40 100644 --- a/lispusers/WHEELSCROLL +++ b/lispusers/WHEELSCROLL @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "16-Feb-2021 15:37:58"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;7 5064 changes to%: (VARS WHEELSCROLLCOMS) (FNS WHEELSCROLL \SCROLLBARTOMAIN? \TEDIT.WHEELSCROLL) previous date%: "16-Feb-2021 15:12:14" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;6) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL CREATESCROLLBARWINDOW \SCROLLBARTOMAIN?) (FNS \TEDIT.WHEELSCROLL) (INITVARS (WHEELSCROLLDELTA 10)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (UP) (* ; "Edited 16-Feb-2021 15:35 by rmk:") (LET ((W (\SCROLLBARTOMAIN?))) (CL:WHEN W (SCROLLW W 0 (CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 16-Feb-2021 14:38 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (INTERRUPTCHAR 520 '(WHEELSCROLL T) T) (INTERRUPTCHAR 521 '(WHEELSCROLL NIL) T) (CHANGENAME 'SCROLL.HANDLER 'CREATEW 'CREATESCROLLBARWINDOW) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;; "These actions are invoked when the caret is in the Tedit window. Otherwise the generic function is called on the Tedit window if the cursor is inside it.") (TEDIT.SETFUNCTION 520 [FUNCTION (LAMBDA NIL (\TEDIT.WHEELSCROLL T] TEDIT.READTABLE) (TEDIT.SETFUNCTION 521 [FUNCTION (LAMBDA NIL (\TEDIT.WHEELSCROLL NIL] TEDIT.READTABLE)) (CL:WHEN (GETP 'SEDIT 'FILEDATES) (SEDIT:ADD-COMMAND 520 '(WHEELSCROLL T)) (SEDIT:ADD-COMMAND 521 '(WHEELSCROLL)) (SEDIT:RESET-COMMANDS))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 15-Feb-2021 14:50 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND [LIST (LIST 520 '(WHEELSCROLL T)) (LIST 521 '(WHEELSCROLL] (LISPINTERRUPTS.WSORIG]) (CREATESCROLLBARWINDOW [LAMBDA (REGION TITLE BORDERSIZE NOOPENFLG PROPS) (* ; "Edited 16-Feb-2021 14:37 by rmk:") (* ;; "This replaces CREATEW inside SCROLL.HANDLER. WINDOW should be bound to the window that this scroll bar will control. The purpose is to create an unreferenced (LOC) pointer from the controller to the controllee, so that wheel scrolling in the scrollbar can be redirected to the controllee.") (DECLARE (USEDFREE WINDOW)) (LET ((SBW (CREATEW REGION TITLE BORDERSIZE NOOPENFLG PROPS))) (WINDOWPROP SBW 'CONTROLLEELOC (LOC WINDOW)) SBW]) (\SCROLLBARTOMAIN? [LAMBDA NIL (* ; "Edited 16-Feb-2021 15:37 by rmk:") (* ;; "Returns the window that that should be wheel scrolled, moving from a scrollbar to its scrollee if necessary.") (LET ((W (WHICHW))) (CL:WHEN W (CL:WHEN (WINDOWPROP W 'CONTROLLEELOC) [SETQ W (VAG (WINDOWPROP W 'CONTROLLEELOC] (GETMOUSESTATE) (\CURSORPOSITION [IPLUS 10 (FETCH LEFT OF (WINDOWPROP W 'REGION] LASTMOUSEY) (SETCURSOR DEFAULTCURSOR) (GETMOUSESTATE))) W]) ) (DEFINEQ (\TEDIT.WHEELSCROLL [LAMBDA (UP) (* ; "Edited 16-Feb-2021 15:35 by rmk:") (* ;; "Called from the TEDIT.READTABLE when the wheel moves and the caret is in the TEDIT (WHICHW) window.") (\TEDIT.SCROLLFN (\SCROLLBARTOMAIN?) 0 (CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)]) ) (RPAQ? WHEELSCROLLDELTA 10) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (929 4504 (ENABLEWHEELSCROLL 939 . 1364) (WHEELSCROLL 1366 . 1690) (INSTALL-WHEELSCROLL 1692 . 2873) (LISPINTERRUPTS.WHEELSCROLL 2875 . 3224) (CREATESCROLLBARWINDOW 3226 . 3839) ( \SCROLLBARTOMAIN? 3841 . 4502)) (4505 4919 (\TEDIT.WHEELSCROLL 4515 . 4917))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "16-Feb-2021 22:36:05"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;11 5620 changes to%: (FNS \TEDIT.WHEELSCROLL \SCROLLBARTOMAIN?) previous date%: "16-Feb-2021 16:10:43" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;8) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL CREATESCROLLBARWINDOW \SCROLLBARTOMAIN?) (FNS \TEDIT.WHEELSCROLL) (INITVARS (WHEELSCROLLDELTA 10)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (UP) (* ; "Edited 16-Feb-2021 15:35 by rmk:") (LET ((W (\SCROLLBARTOMAIN?))) (CL:WHEN W (SCROLLW W 0 (CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 16-Feb-2021 14:38 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (INTERRUPTCHAR 520 '(WHEELSCROLL T) T) (INTERRUPTCHAR 521 '(WHEELSCROLL NIL) T) (CHANGENAME 'SCROLL.HANDLER 'CREATEW 'CREATESCROLLBARWINDOW) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;; "These actions are invoked when the caret is in the Tedit window. Otherwise the generic function is called on the Tedit window if the cursor is inside it.") (TEDIT.SETFUNCTION 520 [FUNCTION (LAMBDA NIL (\TEDIT.WHEELSCROLL T] TEDIT.READTABLE) (TEDIT.SETFUNCTION 521 [FUNCTION (LAMBDA NIL (\TEDIT.WHEELSCROLL NIL] TEDIT.READTABLE)) (CL:WHEN (GETP 'SEDIT 'FILEDATES) (SEDIT:ADD-COMMAND 520 '(WHEELSCROLL T)) (SEDIT:ADD-COMMAND 521 '(WHEELSCROLL)) (SEDIT:RESET-COMMANDS))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 15-Feb-2021 14:50 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND [LIST (LIST 520 '(WHEELSCROLL T)) (LIST 521 '(WHEELSCROLL] (LISPINTERRUPTS.WSORIG]) (CREATESCROLLBARWINDOW [LAMBDA (REGION TITLE BORDERSIZE NOOPENFLG PROPS) (* ; "Edited 16-Feb-2021 14:37 by rmk:") (* ;; "This replaces CREATEW inside SCROLL.HANDLER. WINDOW should be bound to the window that this scroll bar will control. The purpose is to create an unreferenced (LOC) pointer from the controller to the controllee, so that wheel scrolling in the scrollbar can be redirected to the controllee.") (DECLARE (USEDFREE WINDOW)) (LET ((SBW (CREATEW REGION TITLE BORDERSIZE NOOPENFLG PROPS))) (WINDOWPROP SBW 'CONTROLLEELOC (LOC WINDOW)) SBW]) (\SCROLLBARTOMAIN? [LAMBDA NIL (* ; "Edited 16-Feb-2021 22:13 by rmk:") (* ;; "Returns the window that should be wheel scrolled, moving from a scrollbar to its scrollee if necessary.") (LET ((W (WHICHW))) (CL:WHEN W (CL:WHEN (WINDOWPROP W 'CONTROLLEELOC) [SETQ W (VAG (WINDOWPROP W 'CONTROLLEELOC] (GETMOUSESTATE) (\CURSORPOSITION [IPLUS 10 (FETCH LEFT OF (WINDOWPROP W 'REGION] LASTMOUSEY) (SETCURSOR DEFAULTCURSOR) (GETMOUSESTATE))) (* ;; "IN/SCROLL/BAR? in WINDOWSCROLL does nothing if the window doesn't have a SCROLLFN, even though SCROLLW applies SCROLLBYREPAINTFN as a default in that case. So a direct call to SCROLLW might scroll a window that can't be scrolled by moving the mouse into the scrollbar (or so it seems). If we don't exclude this, then odd things like menus would be scrolled that shouldn't be.") (AND (WINDOWPROP W 'SCROLLFN) W]) ) (DEFINEQ (\TEDIT.WHEELSCROLL [LAMBDA (UP) (* ; "Edited 16-Feb-2021 22:35 by rmk:") (* ;; "Called from the TEDIT.READTABLE when the wheel moves and the caret is in the TEDIT (WHICHW) window or its scrollbar.") (LET ((WINDOW (\SCROLLBARTOMAIN?))) (CL:WHEN WINDOW [PROCESS.EVAL (FIND.PROCESS 'MOUSE) `(SCROLLW ,WINDOW 0 ,(CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)])]) ) (RPAQ? WHEELSCROLLDELTA 10) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (875 4891 (ENABLEWHEELSCROLL 885 . 1310) (WHEELSCROLL 1312 . 1636) (INSTALL-WHEELSCROLL 1638 . 2819) (LISPINTERRUPTS.WHEELSCROLL 2821 . 3170) (CREATESCROLLBARWINDOW 3172 . 3785) ( \SCROLLBARTOMAIN? 3787 . 4889)) (4892 5475 (\TEDIT.WHEELSCROLL 4902 . 5473))))) STOP \ No newline at end of file diff --git a/lispusers/WHEELSCROLL.LCOM b/lispusers/WHEELSCROLL.LCOM index 16e609ed7adac2b132880cd1193583644c71d3af..4dca4a1dcb9ed46a749d9d56e26f087b90b278cf 100644 GIT binary patch delta 376 zcmX>s`BZX3B!`iam9d$Xf$7A=2qr_riM#Z~VnSS9JVW%tJzQOVf}Ml>eS8!$^Ask_ zGU_w(PWE9mLTD-UP%<=BFf}tWP)N>5%u7!#Rw&6=wNlV<^9xqsg_<+@KclR=rb0nc zYFTD}X|X~|Vo54cjgq06u3Ku7u91O}p@N~Am7#%^iSfij4@Qg4^O?T0$tEx|GB9v3 z0D&MQgGb6HuXGTb3q)+PoxGXTN@2eTCx~}aZVR)A0E32wg+h#{UvOxUYq+PMi+{Mn z%sl~*^2uAaXyY=M4JzQOVf}Ml>eS8#RAheTXP>8>;qo<#} z!sLlu!YrA23cM5l>rd8aG(zYv^r$yiFf}kUQAo~6%u7!#Rw&6=wNlUsa|{Yr;6*ak z+21!$`&arFst)Kp*)VPIrn1RIp)FgYdQWI From e468314846126ce1824b0c74848248160f4f52cc Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 17 Feb 2021 08:55:59 -0800 Subject: [PATCH 26/37] DINFO: removed compile-time declarations from compiled file --- lispusers/DINFO | 2 +- lispusers/DINFO.LCOM | Bin 31368 -> 30047 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lispusers/DINFO b/lispusers/DINFO index 88b13c0b..fc75f867 100644 --- a/lispusers/DINFO +++ b/lispusers/DINFO @@ -1 +1 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "27-Nov-2020 09:14:02" {DSK}larry>ilisp>medley>lispusers>DINFO.;3 63476 changes to%: (VARS DINFOCOMS) (TEMPLATES DINFOGRAPHPROP) previous date%: " 1-Oct-87 10:11:04" {DSK}larry>ilisp>medley>lispusers>DINFO.;1) (* ; " Copyright (c) 1985, 1986, 1987, 2020 by Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT DINFOCOMS) (RPAQQ DINFOCOMS ((FILES TEDIT GRAPHER) (DECLARE%: EVAL@COMPILE (RECORDS DINFOGRAPH DINFONODE) (FUNCTIONS DINFOGRAPHPROP)) (FNS (* ; "Primary functions") DINFO DINFO.UPDATE DINFOGRAPH DINFO.SPECIAL.UPDATE DINFO.READ.GRAPH DINFO.WRITE.GRAPH DINFO.SELECT.GRAPH DINFO.DEFAULT.MENU DINFO.FIND DINFO.LOOKUP) (FNS (* ; "Koto compatability") DINFO.READ.KOTO.GRAPH) (FNS (* ; "Window functions") DINFO.SETUP.WINDOW DINFO.CLOSEFN DINFO.SHRINKFN DINFO.EXPANDFN DINFO.ICONFN) (FNS (* ; "FreeMenu functions") DINFO.ADD.FMENU DINFO.CREATE.FMENU DINFO.FMW.CLOSEFN DINFO.FMENU.HANDLER DINFO.UPDATE.FMENU DINFO.TOGGLE.MENU DINFO.TOGGLE.GRAPH DINFO.TOGGLE.HISTORY DINFO.TOGGLE.TEXT) (FNS (* ; "Other menu functions") DINFO.UPDATE.MENU.DISPLAY DINFO.UPDATE.FROM.MENU DINFO.UPDATE.HISTORY DINFO.HISTORIC.UPDATE) (FNS (* ; "Interface to GRAPHER") DINFO.UPDATE.GRAPH.DISPLAY DINFO.UPDATE.FROM.GRAPH DINFO.GET.GRAPH.WINDOW DINFO.CREATE.GRAPH.WINDOW DINFO.SHOWGRAPH DINFO.INVERT.NODE DINFO.LAYOUTGRAPH) (FNS (* ; "Interface to TEdit") DINFO.UPDATE.TEXT.DISPLAY DINFO.TITLEMENUFN DINFO.OPENTEXTSTREAM DINFO.SHOWSEL DINFO.GET.FILENAME) (ADDVARS (BackgroundMenuCommands (DInfo (DINFO.SELECT.GRAPH) "Open a DInfo window for browsing documentation."))) (VARS (BackgroundMenu)) (INITVARS (DINFO.GRAPHS) (DINFOMODES '(TEXT GRAPH)) (DINFO.HISTORY.LENGTH 20) (\DINFO.MAX.MENU.LEN 10)) (GLOBALVARS DINFO.GRAPH.FILES DINFOMODES DINFO.HISTORY.LENGTH \DINFO.MAX.MENU.LEN) (PROP (FILETYPE) DINFO) (TEMPLATES DINFOGRAPHPROP))) (FILESLOAD TEDIT GRAPHER) (DECLARE%: EVAL@COMPILE (DECLARE%: EVAL@COMPILE (DATATYPE DINFOGRAPH (NAME NODELST TOPNODEID CURRENTNODE USERDATA TEXTPROPS FREEMENUITEMS LOOKUPFN MENUFN DEFAULTHOST DEFAULTDEVICE DEFAULTDIR MONITORLOCK DINFO.MENU WINDOW MENUFONT FMENU.WINDOW GRAPH.WINDOW HISTORY.MENU.WINDOW SUBNODE.MENU.WINDOW LAST.TEXT LAST.INVERTED.NODE LAST.GRAPH.LOCATION HISTORY.ITEMS FIND.STRING LOOKUP.STRING) (SYSTEM)) (RECORD DINFONODE (ID LABEL FILE FROMBYTE TOBYTE PARENT CHILDREN NEXTNODE PREVIOUSNODE USERDATA) (SYSTEM)) ) (/DECLAREDATATYPE 'DINFOGRAPH '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER) '((DINFOGRAPH 0 POINTER) (DINFOGRAPH 2 POINTER) (DINFOGRAPH 4 POINTER) (DINFOGRAPH 6 POINTER) (DINFOGRAPH 8 POINTER) (DINFOGRAPH 10 POINTER) (DINFOGRAPH 12 POINTER) (DINFOGRAPH 14 POINTER) (DINFOGRAPH 16 POINTER) (DINFOGRAPH 18 POINTER) (DINFOGRAPH 20 POINTER) (DINFOGRAPH 22 POINTER) (DINFOGRAPH 24 POINTER) (DINFOGRAPH 26 POINTER) (DINFOGRAPH 28 POINTER) (DINFOGRAPH 30 POINTER) (DINFOGRAPH 32 POINTER) (DINFOGRAPH 34 POINTER) (DINFOGRAPH 36 POINTER) (DINFOGRAPH 38 POINTER) (DINFOGRAPH 40 POINTER) (DINFOGRAPH 42 POINTER) (DINFOGRAPH 44 POINTER) (DINFOGRAPH 46 POINTER) (DINFOGRAPH 48 POINTER) (DINFOGRAPH 50 POINTER)) '52) (DEFMACRO DINFOGRAPHPROP (GRAPH PROP &OPTIONAL (NEW-VALUE NIL NEW-VALUE-SUPPLIED)) [LET [(REAL-FIELD (AND (LISTP PROP) (EQ (CAR PROP) 'QUOTE) (FMEMB (CADR PROP) (RECORDFIELDNAMES 'DINFOGRAPH T)) (CADR PROP] (IF NEW-VALUE-SUPPLIED THEN [IF REAL-FIELD THEN `(REPLACE (DINFOGRAPH ,REAL-FIELD) OF ,GRAPH WITH ,NEW-VALUE) ELSE `(LET* ((SI::$GRAPH$ ,GRAPH) (SI::$USERDATA$ (FETCH (DINFOGRAPH USERDATA) OF SI::$GRAPH$)) (SI::$PROP$ ,PROP) (SI::$NEW-VALUE$ ,NEW-VALUE)) (IF (LISTP SI::$USERDATA$) THEN (LISTPUT SI::$USERDATA$ SI::$PROP$ SI::$NEW-VALUE$) ELSE (REPLACE (DINFOGRAPH USERDATA) OF SI::$GRAPH$ WITH (LIST SI::$PROP$ SI::$NEW-VALUE$)) SI::$NEW-VALUE$] ELSE (IF REAL-FIELD THEN `(FETCH (DINFOGRAPH ,REAL-FIELD) OF ,GRAPH) ELSE `(LISTGET (FETCH (DINFOGRAPH USERDATA) OF ,GRAPH) ,PROP]) ) (DEFINEQ (DINFO [LAMBDA (GRAPH.OR.FILE WINDOW.OR.REGION SETUP.ONLY? NO.FREEMENU?) (* drc%: "25-Jan-86 18:23") (* Starts a DInfo browser.) (RESETLST (LET ((W (OR (WINDOWP WINDOW.OR.REGION) (AND (REGIONP WINDOW.OR.REGION) (CREATEW WINDOW.OR.REGION "DInfo" NIL T)) (AND (type? DINFOGRAPH GRAPH.OR.FILE) (WINDOWP (fetch (DINFOGRAPH WINDOW) of GRAPH.OR.FILE))) (CREATEW NIL "DInfo"))) GRAPH MONITORLOCK) (OPENW W) [SETQ GRAPH (if (type? DINFOGRAPH GRAPH.OR.FILE) then GRAPH.OR.FILE else (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW W)) (DINFO.READ.GRAPH GRAPH.OR.FILE] [SETQ MONITORLOCK (OR (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) (replace (DINFOGRAPH MONITORLOCK) of GRAPH with (CREATE.MONITORLOCK "DInfo"] (RESETSAVE NIL (LIST 'RELEASE.MONITORLOCK MONITORLOCK)) (OBTAIN.MONITORLOCK MONITORLOCK) (DINFO.SETUP.WINDOW GRAPH W NO.FREEMENU?) (OR SETUP.ONLY? (DINFO.UPDATE GRAPH NIL NIL T)) GRAPH]) (DINFO.UPDATE [LAMBDA (GRAPH NEW.NODE SEL FORCE?) (* jow "20-May-86 15:14") (* * Called to visit a NEW.NODE in GRAPH, or to just make sure that the display  of GRAPH is current.) (LET ([NODE (OR NEW.NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH) (FASSOC (fetch (DINFOGRAPH TOPNODEID) of GRAPH) (fetch (DINFOGRAPH NODELST) of GRAPH] (PREVIOUS.NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) (WINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (OPENW WINDOW) (WINDOWPROP WINDOW 'DINFOGRAPH GRAPH) (OR (FMEMB NODE (fetch (DINFOGRAPH NODELST) of GRAPH)) (ERROR NODE "NOT IN NODELST")) (LET ((FMENU.WINDOW (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH)) (MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH))) [RESETLST (RESETSAVE NIL (LIST 'RELEASE.MONITORLOCK MONITORLOCK)) (if (NOT (OBTAIN.MONITORLOCK MONITORLOCK T)) then (* somebody else is messing with this  graph.) (FLASHWINDOW WINDOW) (PROMPTPRINT "DInfo is busy") elseif (NULL FMENU.WINDOW) then (replace (DINFOGRAPH CURRENTNODE) of GRAPH with NODE) (* FreeMenu turned off, so just  display text) (DINFO.UPDATE.TEXT.DISPLAY GRAPH NODE SEL) else (* We've got a FreeMenu, so update  away!) (DINFO.UPDATE.FMENU GRAPH NODE) (LET ((STATUS (FM.GETSTATE FMENU.WINDOW))) (replace (DINFOGRAPH CURRENTNODE) of GRAPH with NODE) (AND (LISTGET STATUS 'GRAPH) (DINFO.UPDATE.GRAPH.DISPLAY GRAPH NODE FORCE?)) (AND (LISTGET STATUS 'MENU) (DINFO.UPDATE.MENU.DISPLAY GRAPH NODE)) (AND (LISTGET STATUS 'TEXT) (DINFO.UPDATE.TEXT.DISPLAY GRAPH NODE SEL)) (DINFO.UPDATE.HISTORY GRAPH NODE SEL (LISTGET STATUS 'HISTORY] (CLEARW (GETPROMPTWINDOW WINDOW]) (DINFOGRAPH [LAMBDA (X) (* drc%: " 8-Jan-86 11:12") (if (type? DINFOGRAPH X) then X elseif (AND (WINDOWP X) (WINDOWPROP X 'DINFOGRAPH)) elseif (AND (WINDOWP X) (WINDOWPROP X 'MAINWINDOW)) then (WINDOWPROP (WINDOWPROP X 'MAINWINDOW) 'DINFOGRAPH]) (DINFO.SPECIAL.UPDATE [LAMBDA (TYPE GRAPH) (* drc%: "25-Jan-86 18:26") (* * Do a TYPE update of Graph, where TYPE is one of Top, Parent, Previous or  Next.) (LET* [(DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (CURRENT.NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) (NEW.NODE (FASSOC (SELECTQ TYPE (Top (fetch (DINFOGRAPH TOPNODEID) of GRAPH)) (Parent (fetch (DINFONODE PARENT) of CURRENT.NODE)) (Next (fetch (DINFONODE NEXTNODE) of CURRENT.NODE)) (Previous (fetch (DINFONODE PREVIOUSNODE) of CURRENT.NODE)) NIL) (fetch (DINFOGRAPH NODELST) of GRAPH] (if (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T) then (if NEW.NODE then (PROCESSPROP (THIS.PROCESS) 'NAME (CONCAT "DInfo " TYPE)) (DINFO.UPDATE GRAPH NEW.NODE) else (* TYPE of Top! or Node! will sound silly here, but should never happen.) (printout (GETPROMPTWINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) T "This node has no " TYPE)) else (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy"]) (DINFO.READ.GRAPH [LAMBDA (FILE QUIETFLG) (* drc%: "25-Jan-86 18:17") (* Reads a file written by DINFO.WRITE.GRAPH.  Returns the DInfo graph stored on FILE.) (OR QUIETFLG (printout T T "Reading " (FILENAMEFIELD FILE 'NAME) " graph...")) (LET* ((FULLFILENAME (INFILEP FILE)) [DATA (CDR (READFILE (OR FULLFILENAME (ERROR "FILE NOT FOUND" FILE] (GRAPH (create DINFOGRAPH))) (* fields stored on file) (replace (DINFOGRAPH TOPNODEID) of GRAPH with (LISTGET DATA 'TOPNODEID)) (replace (DINFOGRAPH TEXTPROPS) of GRAPH with (LISTGET DATA 'TEXTPROPS)) (replace (DINFOGRAPH LOOKUPFN) of GRAPH with (LISTGET DATA 'LOOKUPFN)) (replace (DINFOGRAPH MENUFN) of GRAPH with (LISTGET DATA 'MENUFN)) (replace (DINFOGRAPH FREEMENUITEMS) of GRAPH with (LISTGET DATA 'FREEMENUITEMS)) (replace (DINFOGRAPH NODELST) of GRAPH with (LISTGET DATA 'NODELST)) (replace (DINFOGRAPH USERDATA) of GRAPH with (LISTGET DATA 'USERDATA)) (* fields filled in at read time) (replace (DINFOGRAPH NAME) of GRAPH with (FILENAMEFIELD FULLFILENAME 'NAME)) (replace (DINFOGRAPH DEFAULTHOST) of GRAPH with (FILENAMEFIELD FULLFILENAME 'HOST)) (replace (DINFOGRAPH DEFAULTDEVICE) of GRAPH with (FILENAMEFIELD FULLFILENAME 'DEVICE)) (replace (DINFOGRAPH DEFAULTDIR) of GRAPH with (FILENAMEFIELD FULLFILENAME 'DIRECTORY)) (OR QUIETFLG (printout T "OK.")) GRAPH]) (DINFO.WRITE.GRAPH [LAMBDA (GRAPH FILE) (* drc%: "25-Jan-86 18:16") (* Writes a DInfo graph to a file for reading by DINFO.READ.GRAPH.  Returns the full file name of the file.) (* dump it out as a props list) (WRITEFILE (LIST 'TOPNODEID (fetch (DINFOGRAPH TOPNODEID) of GRAPH) 'TEXTPROPS (fetch (DINFOGRAPH TEXTPROPS) of GRAPH) 'LOOKUPFN (fetch (DINFOGRAPH LOOKUPFN) of GRAPH) 'MENUFN (fetch (DINFOGRAPH MENUFN) of GRAPH) 'FREEMENUITEMS (fetch (DINFOGRAPH FREEMENUITEMS) of GRAPH) 'NODELST (fetch (DINFOGRAPH NODELST) of GRAPH) 'USERDATA (fetch (DINFOGRAPH USERDATA) of GRAPH)) FILE]) (DINFO.SELECT.GRAPH [LAMBDA NIL (* drc%: "24-Jan-86 13:25") (* * This is called when DInfo is selected from the Background Menu.) (DECLARE (GLOBALVARS DINFO.GRAPHS)) (ALLOW.BUTTON.EVENTS) (RESETFORM (TTY.PROCESS (THIS.PROCESS)) (LET [(GRAPH (if (NULL DINFO.GRAPHS) then (PROMPTPRINT "No Graphs installed -- load HelpSys or DInfoEdit") elseif (NULL (CDR DINFO.GRAPHS)) then (EVAL (CADAR DINFO.GRAPHS)) else (MENU (create MENU CENTERFLG _ T TITLE _ "Select Graph" ITEMS _ DINFO.GRAPHS] (AND GRAPH (DINFO GRAPH]) (DINFO.DEFAULT.MENU [LAMBDA (GRAPH) (* jow "15-Jul-86 17:36") (* * This is the default MENUFN for DInfo graphs.) (LET ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (CLEARW (GETPROMPTWINDOW DINFOW)) (LET [(TYPE (MENU (OR (fetch (DINFOGRAPH DINFO.MENU) of GRAPH) (replace (DINFOGRAPH DINFO.MENU) of GRAPH with (create MENU ITEMS _ '(("Top" 'Top "Visit the top node in the graph" ) ("Parent" 'Parent "Visit the parent of the current node" ) ("Previous" 'Previous "Visit the node before this node") ("Next " 'Next "Visit the node following this node") ("Find" 'Find "Search the text of this node") ("Lookup" 'Lookup "Lookup a new term in this graph") ("Expanded Menu" 'FreeMenu "Add an expanded options menu.")) CENTERFLG _ T MENUFONT _ (FONTCREATE 'HELVETICA 10 'BOLD] (if TYPE then (PROCESSPROP (THIS.PROCESS) 'NAME (CONCAT "DInfo " TYPE)) (SELECTQ TYPE ((Top Parent Previous Next) (DINFO.SPECIAL.UPDATE TYPE GRAPH)) (Find (DINFO.FIND GRAPH)) (Lookup (DINFO.LOOKUP GRAPH '(LEFT))) (FreeMenu (DINFO.ADD.FMENU GRAPH) (DINFO.UPDATE GRAPH)) NIL]) (DINFO.FIND [LAMBDA (GRAPH BUTTONS) (* drc%: "25-Jan-86 18:23") (LET ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (if (NOT (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T)) then (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy") else (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW)) (TERPRI T) (LET ([STRING (if (AND (FMEMB 'MIDDLE BUTTONS) (fetch (DINFOGRAPH FIND.STRING) of GRAPH)) else (PROMPTFORWORD "Find: " (fetch (DINFOGRAPH FIND.STRING) of GRAPH) NIL NIL NIL 'TTY (CONSTANT (CHARCODE (EOL ESCAPE LF] (TEXTSTREAM (WINDOWPROP DINFOW 'TEXTSTREAM)) PAIR) (replace (DINFOGRAPH FIND.STRING) of GRAPH with STRING) (if STRING then (PRINTOUT T " Searching...") (if (SETQ PAIR (TEDIT.FIND TEXTSTREAM STRING NIL NIL T)) then (printout T "OK.") (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SHOWSEL TEXTSTREAM T (TEDIT.SETSEL TEXTSTREAM (CAR PAIR) (NCHARS STRING) 'RIGHT T))) else (printout T "not found.") (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM 0 0]) (DINFO.LOOKUP [LAMBDA (GRAPH BUTTONS) (* drc%: "25-Jan-86 18:22") (LET ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (if (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T) then [RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW)) (LET ((LOOKUPFN (fetch (DINFOGRAPH LOOKUPFN) of GRAPH))) (if LOOKUPFN then (CLEARW T) (LET* [(OLD.STRING (fetch (DINFOGRAPH LOOKUP.STRING) of GRAPH)) (STRING (if (AND OLD.STRING (FMEMB 'MIDDLE BUTTONS)) then OLD.STRING else (PROMPTFORWORD "Lookup: " OLD.STRING NIL NIL NIL 'TTY (CONSTANT (CHARCODE (EOL ESCAPE LF] (replace (DINFOGRAPH LOOKUP.STRING) of GRAPH with STRING) (AND STRING (APPLY* LOOKUPFN STRING GRAPH))) else (PRINTOUT T T "The " (fetch (DINFOGRAPH NAME) of GRAPH) " graph has no LOOKUPFN."] else (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy"]) ) (DEFINEQ (DINFO.READ.KOTO.GRAPH [LAMBDA (FILE QUIETFLG) (* drc%: " 4-Feb-86 11:27") (* Reads a file written by Koto DINFO.WRITE.GRAPH and returns a Lute  DINFOGRAPH. Thus, (DINFO.WRITE.GRAPH (DINFO.READ.KOTO.GRAPH ) )  will convert the Koto format graph in to a Lute format graph in  .) (OR QUIETFLG (printout T T "Reading " (FILENAMEFIELD FILE 'NAME) " graph...")) (LET* ((FULLFILENAME (INFILEP FILE)) [DATA (CDR (READFILE (OR FULLFILENAME (ERROR "FILE NOT FOUND" FILE] (GRAPH (create DINFOGRAPH))) (* in Koto we just wrote out the  DINFOGRAPH record) (for FIELD in DATA as N from 1 to 11 do (* fields stored on file) (SELECTQ N ((1 4 5 6 10 11)) (2 (replace (DINFOGRAPH NODELST) of GRAPH with FIELD)) (3 (replace (DINFOGRAPH TOPNODEID) of GRAPH with FIELD)) (7 (replace (DINFOGRAPH TEXTPROPS) of GRAPH with FIELD)) (8 (replace (DINFOGRAPH LOOKUPFN) of GRAPH with FIELD)) (9 (replace (DINFOGRAPH MENUFN) of GRAPH with FIELD)) (SHOULDNT))) (* fields filled in at read time) (replace (DINFOGRAPH NAME) of GRAPH with (FILENAMEFIELD FULLFILENAME 'NAME)) (replace (DINFOGRAPH DEFAULTHOST) of GRAPH with (FILENAMEFIELD FULLFILENAME 'HOST)) (replace (DINFOGRAPH DEFAULTDEVICE) of GRAPH with (FILENAMEFIELD FULLFILENAME 'DEVICE)) (replace (DINFOGRAPH DEFAULTDIR) of GRAPH with (FILENAMEFIELD FULLFILENAME 'DIRECTORY)) (OR QUIETFLG (printout T "OK.")) GRAPH]) ) (DEFINEQ (DINFO.SETUP.WINDOW [LAMBDA (GRAPH WINDOW NO.FREEMENU?) (* jow "10-Jun-86 15:29") (replace (DINFOGRAPH WINDOW) of GRAPH with WINDOW) (WINDOWPROP WINDOW 'DINFOGRAPH GRAPH) (DETACHALLWINDOWS WINDOW) (if (NOT NO.FREEMENU?) then (DINFO.ADD.FMENU GRAPH)) (DINFO.UPDATE.TEXT.DISPLAY GRAPH NIL NIL T) (WINDOWPROP WINDOW 'TITLE (CONCAT (fetch (DINFOGRAPH NAME) of GRAPH) " DInfo")) (WINDOWADDPROP WINDOW 'CLOSEFN 'DINFO.CLOSEFN) (WINDOWADDPROP WINDOW 'SHRINKFN 'DINFO.SHRINKFN) (WINDOWADDPROP WINDOW 'EXPANDFN 'DINFO.EXPANDFN]) (DINFO.CLOSEFN [LAMBDA (W) (* drc%: "25-Jan-86 18:26") (LET [(GRAPH (WINDOWPROP W 'DINFOGRAPH] (if (type? DINFOGRAPH GRAPH) then (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH)) (* remove circularity...) (WINDOWPROP W 'DINFOGRAPH NIL]) (DINFO.SHRINKFN [LAMBDA (W) (* drc%: "25-Jan-86 18:26") (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of (DINFOGRAPH W]) (DINFO.EXPANDFN [LAMBDA (W) (* jow "15-Jul-86 17:00") (LET* ((GRAPH (DINFOGRAPH W)) (FMENU (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH))) (if (AND FMENU (LISTGET (FM.GETSTATE FMENU) 'GRAPH)) then (LET ((GRAPHW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH))) (OPENW GRAPHW) (TOTOPW W) (WINDOWPROP GRAPHW 'DINFOGRAPH GRAPH]) (DINFO.ICONFN [LAMBDA (W) (* drc%: "25-Jan-86 16:33") (OR (WINDOWPROP WINDOW 'ICON) (WINDOWPROP WINDOW 'ICON (TITLEDICONW TEDIT.TITLED.ICON.TEMPLATE (WINDOWPROP WINDOW 'TITLE) TEDIT.ICON.FONT NIL T)) (WINDOWPROP WINDOW 'ICON]) ) (DEFINEQ (DINFO.ADD.FMENU [LAMBDA (GRAPH) (* jow "20-May-86 15:41") (* * Add a DInfo FreeMenu to WINDOW. then update the FreeMenu's display.) (LET ((WINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (FM.WINDOW (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH))) (if [AND (WINDOWP FM.WINDOW) (FMEMB FM.WINDOW (WINDOWPROP WINDOW 'ATTACHEDWINDOWS] then (OPENW FM.WINDOW) else (REMOVEPROMPTWINDOW WINDOW) (SETQ FM.WINDOW (OR (WINDOWP FM.WINDOW) (DINFO.CREATE.FMENU GRAPH))) (replace (DINFOGRAPH FMENU.WINDOW) of GRAPH with FM.WINDOW) (ATTACHWINDOW FM.WINDOW WINDOW) (WINDOWPROP FM.WINDOW 'FM.PROMPTWINDOW (GETPROMPTWINDOW WINDOW)) (WINDOWDELPROP FM.WINDOW 'PASSTOMAINCOMS 'CLOSEW) (WINDOWADDPROP FM.WINDOW 'CLOSEFN 'DINFO.FMW.CLOSEFN T) (DINFO.UPDATE.FMENU GRAPH]) (DINFO.CREATE.FMENU [LAMBDA (GRAPH) (* jow "15-Jul-86 17:39") (* * Makes a DInfo FreeMenu for GRAPH) (LET* [(ADD.ITEMS (fetch (DINFOGRAPH FREEMENUITEMS) of GRAPH)) (FONT (OR (FONTP (fetch (DINFOGRAPH MENUFONT) of GRAPH)) MENUFONT)) (FM (FREEMENU `((PROPS FONT %, FONT) ((LABEL Node%: TYPE DISPLAY FONT (HELVETICA 10)) (ID NODE LABEL "" TYPE DISPLAY)) ((LABEL Top! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Visit the top node") (ID TOP LABEL "" TYPE DISPLAY)) ((LABEL Parent! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Visit the parent of the current node") (ID PARENT LABEL "" TYPE DISPLAY)) ((LABEL Previous! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Visit the node previous to the current node") (ID PREVIOUS LABEL "" TYPE DISPLAY)) ((LABEL Next! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Visit the node after the current node") (ID NEXT LABEL "" TYPE DISPLAY)) ((LABEL Display%: TYPE DISPLAY FONT (HELVETICA 10)) (LABEL Graph ID GRAPH INITSTATE %, (MEMB 'GRAPH DINFOMODES) TYPE TOGGLE SELECTEDFN DINFO.TOGGLE.GRAPH FONT (HELVETICA 10 BOLD) MESSAGE "Toggle display of the graph") (LABEL Menu ID MENU INITSTATE %, (MEMB 'MENU DINFOMODES) TYPE TOGGLE SELECTEDFN DINFO.TOGGLE.MENU FONT (HELVETICA 10 BOLD) MESSAGE "Toggle display of the subnode menu") (LABEL Text ID TEXT INITSTATE %, (MEMB 'TEXT DINFOMODES) TYPE TOGGLE SELECTEDFN DINFO.TOGGLE.TEXT FONT (HELVETICA 10 BOLD) MESSAGE "Toggle display of the text of the current node") (LABEL History ID HISTORY INITSTATE %, (MEMB 'HISTORY DINFOMODES) TYPE TOGGLE FONT (HELVETICA 10 BOLD) SELECTEDFN DINFO.TOGGLE.HISTORY MESSAGE "Toggle the display of the History Menu")) %, (APPEND '((LABEL Find! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Perform a string search in the selected text of the current node" ) (LABEL Lookup! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Lookup a term in this graph. LEFT for new term, MIDDLE to repeat last." )) ADD.ITEMS] (WINDOWPROP FM 'FM.DONTRESHAPE T) FM]) (DINFO.FMW.CLOSEFN [LAMBDA (W) (* drc%: "25-Jan-86 18:19") (* * CLOSEFN for a DInfo FreeMenu window.) (LET* ((DINFOW (WINDOWPROP W 'MAINWINDOW)) (GRAPH (DINFOGRAPH DINFOW))) (if GRAPH then (DETACHWINDOW W) (replace (DINFOGRAPH FMENU.WINDOW) of GRAPH with NIL) (DETACHWINDOW (fetch (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH)) (CLOSEW (fetch (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH)) (DETACHWINDOW (fetch (DINFOGRAPH HISTORY.MENU.WINDOW) of GRAPH)) (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH)) (REMOVEPROMPTWINDOW DINFOW]) (DINFO.FMENU.HANDLER [LAMBDA (ITEM WINDOW BUTTONS) (* drc%: "16-Jan-86 11:42") (* * Handle a command from the FreeMenu.) (LET [(GRAPH (WINDOWPROP (WINDOWPROP WINDOW 'MAINWINDOW) 'DINFOGRAPH)) (TYPE (MKATOM (SUBSTRING (FM.ITEMPROP ITEM 'LABEL) 1 -2] (SELECTQ TYPE ((Top Parent Previous Next) (DINFO.SPECIAL.UPDATE TYPE GRAPH)) (Find (DINFO.FIND GRAPH BUTTONS)) (Lookup (DINFO.LOOKUP GRAPH BUTTONS)) (SHOULDNT]) (DINFO.UPDATE.FMENU [LAMBDA (GRAPH NEW.NODE) (* jow "20-May-86 15:13") (* * Update the display of GRAPH's FreeMenu.  If NEW.NODE is not specified, use Top node of GRAPH, and change Top node title.) (LET* [(W (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH)) (NODELST (fetch (DINFOGRAPH NODELST) of GRAPH)) (NODE (OR NEW.NODE (FASSOC (fetch (DINFONODE ID) of (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) NODELST) (FASSOC (fetch (DINFOGRAPH TOPNODEID) of GRAPH) NODELST] (OR NEW.NODE (FM.CHANGELABEL (FM.GETITEM 'TOP NIL W) (fetch (DINFONODE LABEL) of (FASSOC (fetch (DINFOGRAPH TOPNODEID) of GRAPH) (fetch (DINFOGRAPH NODELST) of GRAPH))) W)) (FM.CHANGELABEL (FM.GETITEM 'NODE NIL W) (fetch (DINFONODE LABEL) of NODE) W) (FM.CHANGELABEL (FM.GETITEM 'PARENT NIL W) (fetch (DINFONODE LABEL) of NODE (FASSOC (fetch (DINFONODE PARENT) of NODE) NODELST)) W) (FM.CHANGELABEL (FM.GETITEM 'NEXT NIL W) (fetch (DINFONODE LABEL) of NODE (FASSOC (fetch (DINFONODE NEXTNODE) of NODE) NODELST)) W) (FM.CHANGELABEL (FM.GETITEM 'PREVIOUS NIL W) (fetch (DINFONODE LABEL) of NODE (FASSOC (fetch (DINFONODE PREVIOUSNODE) of NODE) NODELST)) W]) (DINFO.TOGGLE.MENU [LAMBDA (ITEM WINDOW) (* jow "10-Jun-86 14:15") (LET [(GRAPH (WINDOWPROP (WINDOWPROP WINDOW 'MAINWINDOW) 'DINFOGRAPH] (if (FM.ITEMPROP ITEM 'STATE) then (DINFO.UPDATE.MENU.DISPLAY GRAPH (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) else (LET ((SUBNODE.MENU.WINDOW (fetch (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH))) (DETACHWINDOW SUBNODE.MENU.WINDOW) (CLOSEW SUBNODE.MENU.WINDOW]) (DINFO.TOGGLE.GRAPH [LAMBDA (ITEM WINDOW) (* ; "Edited 1-Oct-87 09:56 by drc:") (LET [(GRAPH (WINDOWPROP (WINDOWPROP WINDOW 'MAINWINDOW) 'DINFOGRAPH] (if (FM.ITEMPROP ITEM 'STATE) then (DINFO.UPDATE.GRAPH.DISPLAY GRAPH (fetch CURRENTNODE of GRAPH) T) else (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH))) ITEM]) (DINFO.TOGGLE.HISTORY [LAMBDA (ITEM WINDOW) (* jow "10-Jun-86 14:22") (LET [(GRAPH (WINDOWPROP (WINDOWPROP WINDOW 'MAINWINDOW) 'DINFOGRAPH] (if (FM.ITEMPROP ITEM 'STATE) then (DINFO.UPDATE.HISTORY GRAPH NIL NIL T) else (LET ((HISTORY.MENU.WINDOW (fetch (DINFOGRAPH HISTORY.MENU.WINDOW) of GRAPH))) (DETACHWINDOW HISTORY.MENU.WINDOW) (CLOSEW HISTORY.MENU.WINDOW]) (DINFO.TOGGLE.TEXT [LAMBDA (ITEM WINDOW) (* drc%: "25-Jan-86 18:26") (LET* ((DINFOW (WINDOWPROP WINDOW 'MAINWINDOW)) (GRAPH (WINDOWPROP DINFOW 'DINFOGRAPH)) (MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH))) (if (NOT (OBTAIN.MONITORLOCK MONITORLOCK T)) then (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy") elseif (FM.ITEMPROP ITEM 'STATE) then (DINFO.UPDATE.TEXT.DISPLAY GRAPH (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) (RELEASE.MONITORLOCK MONITORLOCK) else (DINFO.UPDATE.TEXT.DISPLAY GRAPH (fetch (DINFOGRAPH CURRENTNODE) of GRAPH) NIL T) (RELEASE.MONITORLOCK MONITORLOCK]) ) (DEFINEQ (DINFO.UPDATE.MENU.DISPLAY [LAMBDA (GRAPH NODE) (* drc%: "25-Jan-86 18:20") (LET* [(DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (WINDOW (fetch (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH)) [CHILDREN (DREVERSE (for ID in (fetch (DINFONODE CHILDREN) of NODE) bind (NODELST _ (fetch (DINFOGRAPH NODELST) of GRAPH)) collect (FASSOC ID NODELST] (LENGTH (FLENGTH CHILDREN)) (SCROLLABLE (GREATERP LENGTH \DINFO.MAX.MENU.LEN)) (MENU (create MENU MENUFONT _ (OR (FONTP (fetch (DINFOGRAPH MENUFONT) of GRAPH)) MENUFONT) ITEMWIDTH _ (WINDOWPROP DINFOW 'WIDTH) CENTERFLG _ T MENUCOLUMNS _ 1 MENUOUTLINESIZE _ 0 ITEMS _ (for CHILD in CHILDREN collect (LIST (fetch (DINFONODE LABEL) of CHILD) CHILD "Will visit this node if selected." )) WHENSELECTEDFN _ (FUNCTION DINFO.UPDATE.FROM.MENU] (AND WINDOW (PROGN (DETACHWINDOW WINDOW) (CLOSEW WINDOW))) (if CHILDREN then (UPDATE/MENU/IMAGE MENU) (SETQ WINDOW (CREATEW (create REGION LEFT _ 0 BOTTOM _ 0 WIDTH _ (WINDOWPROP DINFOW 'WIDTH) HEIGHT _ (HEIGHTIFWINDOW (if SCROLLABLE then (TIMES \DINFO.MAX.MENU.LEN (fetch (MENU ITEMHEIGHT) of MENU)) else (fetch (MENU IMAGEHEIGHT) of MENU)) T)) "Subnodes" NIL T)) (ADDMENU MENU WINDOW (create POSITION XCOORD _ 0 YCOORD _ (if SCROLLABLE then (TIMES (DIFFERENCE \DINFO.MAX.MENU.LEN LENGTH) (fetch (MENU ITEMHEIGHT) of MENU)) else 0)) T) (ATTACHWINDOW WINDOW DINFOW 'BOTTOM) (REDISPLAYW WINDOW) (replace (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH with WINDOW) (LET [(BITS (fetch (REGION BOTTOM) of (WINDOWPROP WINDOW 'REGION] (* Slide DINFOW up if our new menu is off the screen) (AND (ILESSP BITS 0) (RELMOVEW DINFOW (create POSITION XCOORD _ 0 YCOORD _ (IDIFFERENCE 0 BITS]) (DINFO.UPDATE.FROM.MENU [LAMBDA (ITEM MENU BUTTONS) (* drc%: "12-Dec-85 14:49") (DINFO.UPDATE (WINDOWPROP (WINDOWPROP (WFROMMENU MENU) 'MAINWINDOW) 'DINFOGRAPH) (CADR ITEM]) (DINFO.UPDATE.HISTORY [LAMBDA (GRAPH NODE SEL DISPLAY?) (* drc%: "25-Jan-86 18:21") (LET* ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (OLDWINDOW (fetch (DINFOGRAPH HISTORY.MENU.WINDOW) of GRAPH)) (OLDITEMS (fetch (DINFOGRAPH HISTORY.ITEMS) of GRAPH)) (NEWITEM (if SEL then (LIST (if (LISTP SEL) then (CAR SEL) else SEL) (LIST (fetch (DINFONODE ID) of NODE) SEL) "Will re-lookup this term") elseif NODE then (LIST (fetch (DINFONODE LABEL) of NODE) (LIST (fetch (DINFONODE ID) of NODE) SEL) "Will re-visit this node"))) (ITEMS (if [AND NEWITEM (NOT (EQUAL NEWITEM (CAR OLDITEMS] then (CONS NEWITEM (for ITEM in OLDITEMS as I from 2 to DINFO.HISTORY.LENGTH collect ITEM)) else OLDITEMS))) (replace (DINFOGRAPH HISTORY.ITEMS) of GRAPH with ITEMS) (AND OLDWINDOW (PROGN (DETACHWINDOW OLDWINDOW) (CLOSEW OLDWINDOW))) (AND DISPLAY? ITEMS (LET [(HISTORYW (ATTACHMENU (create MENU MENUFONT _ (OR (FONTP (fetch (DINFOGRAPH MENUFONT) of GRAPH)) MENUFONT) TITLE _ "History" CENTERFLG _ T MENUCOLUMNS _ 1 ITEMS _ ITEMS WHENSELECTEDFN _ (FUNCTION DINFO.HISTORIC.UPDATE)) DINFOW 'LEFT 'TOP] (replace (DINFOGRAPH HISTORY.MENU.WINDOW) of GRAPH with HISTORYW]) (DINFO.HISTORIC.UPDATE [LAMBDA (ITEM MENU BUTTONS) (* drc%: "25-Jan-86 18:24") (LET* [(ID (CAADR ITEM)) (SEL (CADADR ITEM)) (WINDOW (WINDOWPROP (WFROMMENU MENU) 'MAINWINDOW)) (GRAPH (WINDOWPROP WINDOW 'DINFOGRAPH)) (NODE (FASSOC ID (fetch (DINFOGRAPH NODELST) of GRAPH] (if (NOT (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T)) then (FLASHWINDOW WINDOW) (PROMPTPRINT "DInfo is busy") elseif (NULL NODE) then (PRINTOUT (GETPROMPTWINDOW WINDOW) T "This node no longer exists") else (DINFO.UPDATE GRAPH NODE SEL]) ) (DEFINEQ (DINFO.UPDATE.GRAPH.DISPLAY [LAMBDA (DINFO.GRAPH NODE FORCE?) (* drc%: "27-Jan-86 16:19") (LET [(DINFOW (fetch (DINFOGRAPH WINDOW) of DINFO.GRAPH)) (LOCATION (CONS (fetch (DINFONODE PARENT) of NODE) (fetch (DINFONODE CHILDREN) of NODE] (if (AND (NOT FORCE?) (EQUAL LOCATION (fetch (DINFOGRAPH LAST.GRAPH.LOCATION) of DINFO.GRAPH))) then (* don't need to relayout grapher display --  just change which node is inverted.) (DINFO.INVERT.NODE (fetch (DINFOGRAPH GRAPH.WINDOW) of DINFO.GRAPH) NODE DINFO.GRAPH) else (DINFO.SHOWGRAPH (DINFO.LAYOUTGRAPH DINFO.GRAPH NODE) DINFO.GRAPH)) (replace (DINFOGRAPH LAST.GRAPH.LOCATION) of DINFO.GRAPH with LOCATION) (WINDOWPROP (fetch (DINFOGRAPH GRAPH.WINDOW) of DINFO.GRAPH) 'TITLE (CONCAT (fetch (DINFOGRAPH NAME) of DINFO.GRAPH) " - " (fetch (DINFONODE LABEL) of (fetch (DINFOGRAPH CURRENTNODE) of DINFO.GRAPH]) (DINFO.UPDATE.FROM.GRAPH [LAMBDA (GRAPHER.NODE GRAPH.WINDOW) (* drc%: "12-Dec-85 18:34") (AND GRAPHER.NODE (ADD.PROCESS `(DINFO.UPDATE (QUOTE %, (WINDOWPROP GRAPH.WINDOW 'DINFOGRAPH)) (QUOTE %, (fetch (GRAPHNODE NODEID) of GRAPHER.NODE))) 'NAME "DInfo From Graph"]) (DINFO.GET.GRAPH.WINDOW [LAMBDA (GRAPH REGION) (* drc%: "25-Jan-86 18:05") (LET ((W (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH))) (COND ((WINDOWP W)) (T (SETQ W (DINFO.CREATE.GRAPH.WINDOW GRAPH REGION)) [WINDOWPROP W 'CLOSEFN (FUNCTION (LAMBDA (W) (WINDOWPROP W 'DINFOGRAPH NIL] (replace (DINFOGRAPH GRAPH.WINDOW) of GRAPH with W))) (WINDOWPROP W 'DINFOGRAPH GRAPH) W]) (DINFO.CREATE.GRAPH.WINDOW [LAMBDA (GRAPH REGION) (* drc%: "25-Jan-86 17:49") (LET* ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (DINFOREGION (WINDOWPROP DINFOW 'REGION)) (LEFT (DIFFERENCE (DIFFERENCE (fetch (REGION LEFT) of DINFOREGION) (fetch (REGION WIDTH) of REGION)) 10)) (BOTTOM (DIFFERENCE (DIFFERENCE (fetch (REGION BOTTOM) of DINFOREGION) (fetch (REGION HEIGHT) of REGION)) 50))) (CREATEW (CREATEREGION (if (GEQ LEFT 0) then LEFT else (RAND 0 10)) (if (GEQ BOTTOM 0) then BOTTOM else (RAND 0 10)) (fetch (REGION WIDTH) of REGION) (fetch (REGION HEIGHT) of REGION)) NIL NIL T]) (DINFO.SHOWGRAPH [LAMBDA (GRAPHER.GRAPH DINFO.GRAPH) (* drc%: "27-Jan-86 16:15") (LET* [(GRAPH.REGION (GRAPHREGION GRAPHER.GRAPH)) (GRAPH.WINDOW (DINFO.GET.GRAPH.WINDOW DINFO.GRAPH GRAPH.REGION)) (WINDOW.REGION (WINDOWPROP GRAPH.WINDOW 'REGION] [SHAPEW GRAPH.WINDOW (LET [(LEFT (fetch (REGION LEFT) of WINDOW.REGION)) (BOTTOM (fetch (REGION BOTTOM) of WINDOW.REGION)) (HEIGHT (HEIGHTIFWINDOW (fetch (REGION HEIGHT) of GRAPH.REGION) T)) (WIDTH (WIDTHIFWINDOW (fetch (REGION WIDTH) of GRAPH.REGION] (create REGION LEFT _ LEFT BOTTOM _ BOTTOM HEIGHT _ (if (GEQ (IPLUS BOTTOM HEIGHT) SCREENHEIGHT) then (IDIFFERENCE SCREENHEIGHT BOTTOM) else HEIGHT) WIDTH _ (if (GEQ (IPLUS LEFT WIDTH) SCREENWIDTH) then (IDIFFERENCE SCREENWIDTH LEFT) else WIDTH] (SHOWGRAPH GRAPHER.GRAPH GRAPH.WINDOW (FUNCTION DINFO.UPDATE.FROM.GRAPH) (FUNCTION DINFO.UPDATE.FROM.GRAPH]) (DINFO.INVERT.NODE [LAMBDA (WINDOW DINFO.NODE DINFO.GRAPH) (* drc%: "25-Jan-86 18:24") (LET* ((NODE (for NODE in (fetch (GRAPH GRAPHNODES) of (WINDOWPROP WINDOW 'GRAPH)) thereis (EQ (fetch (GRAPHNODE NODEID) of NODE) DINFO.NODE))) (LAST.NODE (fetch (DINFOGRAPH LAST.INVERTED.NODE) of DINFO.GRAPH))) (replace (DINFOGRAPH LAST.INVERTED.NODE) of DINFO.GRAPH with NODE) (if (NEQ NODE LAST.NODE) then (replace (GRAPHNODE NODELABELSHADE) of NODE with BLACKSHADE) (* (PRINTDISPLAYNODE NODE  (create POSITION XCOORD _ 0 YCOORD _ 0)  WINDOW)) (replace (GRAPHNODE NODELABELSHADE) of LAST.NODE with WHITESHADE) (* (PRINTDISPLAYNODE LAST.NODE  (create POSITION XCOORD _ 0 YCOORD _ 0)  WINDOW)) (REDISPLAYW WINDOW) else (OPENW WINDOW]) (DINFO.LAYOUTGRAPH [LAMBDA (DINFO.GRAPH NODE) (* drc%: "25-Jan-86 18:20") (LET* [(WINDOW (fetch (DINFOGRAPH WINDOW) of DINFO.GRAPH)) (FONT (OR (FONTP (fetch (DINFOGRAPH MENUFONT) of DINFO.GRAPH)) MENUFONT)) (NODELST (fetch (DINFOGRAPH NODELST) of DINFO.GRAPH)) (CHILDREN (for ID in (fetch (DINFONODE CHILDREN) of NODE) collect (FASSOC ID NODELST))) [CHILD.GRAPHER.NODES (for CHILD in CHILDREN collect (create GRAPHNODE NODEID _ CHILD NODELABEL _ (fetch (DINFONODE LABEL) of CHILD] (GRAPHER.NODE (create GRAPHNODE NODELABELSHADE _ BLACKSHADE NODEID _ NODE TONODES _ CHILDREN NODELABEL _ (fetch (DINFONODE LABEL) of NODE] (replace (DINFOGRAPH LAST.INVERTED.NODE) of DINFO.GRAPH with GRAPHER.NODE) (* so DINFO.INVERT.NODE will work  right) (if (fetch (DINFONODE PARENT) of NODE) then (LET* ((PARENT (FASSOC (fetch (DINFONODE PARENT) of NODE) NODELST)) (SIBLINGS (for ID in (fetch (DINFONODE CHILDREN) of PARENT) collect (FASSOC ID NODELST))) [SIBLING.GRAPHER.NODES (for SIBLING in SIBLINGS collect (if (EQ (fetch (DINFONODE ID) of SIBLING) (fetch (DINFONODE ID) of NODE)) then GRAPHER.NODE else (create GRAPHNODE NODEID _ SIBLING NODELABEL _ (fetch (DINFONODE LABEL) of SIBLING] (PARENT.GRAPHER.NODE (create GRAPHNODE NODEID _ PARENT NODELABEL _ (fetch (DINFONODE LABEL) of PARENT) TONODES _ SIBLINGS))) (LAYOUTGRAPH (CONS PARENT.GRAPHER.NODE (NCONC SIBLING.GRAPHER.NODES CHILD.GRAPHER.NODES)) (LIST PARENT) NIL FONT)) else (LAYOUTGRAPH (CONS GRAPHER.NODE CHILD.GRAPHER.NODES) (LIST NODE) NIL FONT]) ) (DEFINEQ (DINFO.UPDATE.TEXT.DISPLAY [LAMBDA (GRAPH NODE SEL OFF?) (* drc%: "25-Jan-86 18:18") (LET ((WINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (FILENAME (DINFO.GET.FILENAME GRAPH NODE)) (FROM (fetch (DINFONODE FROMBYTE) of NODE)) (TO (fetch (DINFONODE TOBYTE) of NODE)) (PROPS (APPEND (LIST 'READONLY T 'NOTITLE T 'TITLEMENUFN 'DINFO.TITLEMENUFN) (fetch (DINFOGRAPH TEXTPROPS) of GRAPH))) (OLD.TEXTSTREAM (WINDOWPROP (fetch (DINFOGRAPH WINDOW) of GRAPH) 'TEXTSTREAM)) TEXTSTREAM FULLFILENAME) (* Default directory and host.) (if (OR OFF? (NULL FILENAME)) then (OPENTEXTSTREAM (if OFF? then "" else "This node has no text") WINDOW NIL NIL PROPS) (replace (DINFOGRAPH LAST.TEXT) of GRAPH with NIL) elseif (SETQ FULLFILENAME (MKATOM (INFILEP FILENAME))) then (SETQ TEXTSTREAM (DINFO.OPENTEXTSTREAM FULLFILENAME WINDOW FROM TO PROPS)) (DINFO.SHOWSEL TEXTSTREAM SEL) else (OPENTEXTSTREAM (CONCAT "Sorry, can't find the text for this node." (MKSTRING (CHARACTER (CHARCODE CR))) "Missing file is: " FILENAME) WINDOW NIL NIL PROPS) (replace (DINFOGRAPH LAST.TEXT) of GRAPH with NIL)) (CLOSEF? OLD.TEXTSTREAM) (WINDOWPROP WINDOW 'ICONFN 'DINFO.ICONFN) (WINDOWPROP WINDOW 'TEDIT.TITLEMENUFN 'DINFO.TITLEMENUFN]) (DINFO.TITLEMENUFN [LAMBDA (DINFOW) (* drc%: "25-Jan-86 18:19") (* * This is the TEdit TITLEMENUFN for a DInfo Window.  Uses the MENUFN of graph, defaulting to DINFO.DEFAULT.MENU.) (LET [(GRAPH (WINDOWPROP DINFOW 'DINFOGRAPH] (if (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T) then [LET ((MENUFN (fetch (DINFOGRAPH MENUFN) of GRAPH))) (if (FGETD MENUFN) then (OR (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH) (DINFO.ADD.FMENU GRAPH)) (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW)) (APPLY* MENUFN GRAPH)) else (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW)) (DINFO.DEFAULT.MENU GRAPH] else (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy"]) (DINFO.OPENTEXTSTREAM [LAMBDA (FILE WINDOW FROM TO PROPS) (* drc%: "25-Jan-86 18:24") (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW WINDOW)) (LET ((TEXTSTREAM (WINDOWPROP WINDOW 'TEXTSTREAM)) (THIS.TEXT (LIST FILE FROM TO))) (if (AND (EQUAL THIS.TEXT (fetch (DINFOGRAPH LAST.TEXT) of (DINFOGRAPH WINDOW))) TEXTSTREAM) then (* Same text, and its still there, so  do nothing.) TEXTSTREAM else (AND TEXTSTREAM (TEDIT.KILL TEXTSTREAM)) (CLEARW T) (CLEARW WINDOW) [RESETSAVE NIL `(AND RESETSTATE (WINDOWPROP %, WINDOW 'LAST.TEXT NIL] (PRINTOUT T "Fetching text from " FILE "...") (PROG1 (OPENTEXTSTREAM FILE WINDOW FROM TO PROPS) (PRINTOUT T "OK.") (replace (DINFOGRAPH LAST.TEXT) of (DINFOGRAPH WINDOW) with THIS.TEXT]) (DINFO.SHOWSEL [LAMBDA (TEXTSTREAM SEL) (* drc%: "16-Jan-86 21:30") (if (LISTP SEL) then (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM (CADR SEL) 0)) elseif (STRINGP SEL) then [LET ((CHAR# (TEDIT.FIND TEXTSTREAM SEL))) (if CHAR# then (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM CHAR# (NCHARS SEL) NIL T] else (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM 0 0]) (DINFO.GET.FILENAME [LAMBDA (GRAPH NODE) (* drc%: "10-Jan-86 14:47") (* * returns the filename of the documentation for NODE in GRAPH.  Defaults HOST and DIRECTORY to that of graph) (LET ((FILE (fetch (DINFONODE FILE) of NODE))) (AND FILE (PACKFILENAME 'HOST (OR (FILENAMEFIELD FILE 'HOST) (fetch (DINFOGRAPH DEFAULTHOST) of GRAPH)) 'DEVICE (OR (FILENAMEFIELD FILE 'DEVICE) (fetch (DINFOGRAPH DEFAULTDEVICE) of GRAPH)) 'DIRECTORY (OR (FILENAMEFIELD FILE 'DIRECTORY) (fetch (DINFOGRAPH DEFAULTDIR) of GRAPH)) 'BODY FILE]) ) (ADDTOVAR BackgroundMenuCommands (DInfo (DINFO.SELECT.GRAPH) "Open a DInfo window for browsing documentation.")) (RPAQQ BackgroundMenu NIL) (RPAQ? DINFO.GRAPHS ) (RPAQ? DINFOMODES '(TEXT GRAPH)) (RPAQ? DINFO.HISTORY.LENGTH 20) (RPAQ? \DINFO.MAX.MENU.LEN 10) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DINFO.GRAPH.FILES DINFOMODES DINFO.HISTORY.LENGTH \DINFO.MAX.MENU.LEN) ) (PUTPROPS DINFO FILETYPE :COMPILE-FILE) (SETTEMPLATE 'DINFOGRAPHPROP 'MACRO) (PUTPROPS DINFO COPYRIGHT ("Xerox Corporation" 1985 1986 1987 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (6436 23262 (DINFO 6446 . 8060) (DINFO.UPDATE 8062 . 10926) (DINFOGRAPH 10928 . 11346) ( DINFO.SPECIAL.UPDATE 11348 . 13046) (DINFO.READ.GRAPH 13048 . 14903) (DINFO.WRITE.GRAPH 14905 . 15995) (DINFO.SELECT.GRAPH 15997 . 16904) (DINFO.DEFAULT.MENU 16906 . 19430) (DINFO.FIND 19432 . 21816) ( DINFO.LOOKUP 21818 . 23260)) (23263 25957 (DINFO.READ.KOTO.GRAPH 23273 . 25955)) (25958 28272 ( DINFO.SETUP.WINDOW 25968 . 26649) (DINFO.CLOSEFN 26651 . 27084) (DINFO.SHRINKFN 27086 . 27282) ( DINFO.EXPANDFN 27284 . 27841) (DINFO.ICONFN 27843 . 28270)) (28273 39121 (DINFO.ADD.FMENU 28283 . 29378) (DINFO.CREATE.FMENU 29380 . 32917) (DINFO.FMW.CLOSEFN 32919 . 33764) (DINFO.FMENU.HANDLER 33766 . 34405) (DINFO.UPDATE.FMENU 34407 . 36612) (DINFO.TOGGLE.MENU 36614 . 37204) (DINFO.TOGGLE.GRAPH 37206 . 37705) (DINFO.TOGGLE.HISTORY 37707 . 38251) (DINFO.TOGGLE.TEXT 38253 . 39119)) (39122 46820 ( DINFO.UPDATE.MENU.DISPLAY 39132 . 43152) (DINFO.UPDATE.FROM.MENU 43154 . 43453) (DINFO.UPDATE.HISTORY 43455 . 45989) (DINFO.HISTORIC.UPDATE 45991 . 46818)) (46821 56987 (DINFO.UPDATE.GRAPH.DISPLAY 46831 . 48149) (DINFO.UPDATE.FROM.GRAPH 48151 . 48594) (DINFO.GET.GRAPH.WINDOW 48596 . 49181) ( DINFO.CREATE.GRAPH.WINDOW 49183 . 50300) (DINFO.SHOWGRAPH 50302 . 52027) (DINFO.INVERT.NODE 52029 . 53417) (DINFO.LAYOUTGRAPH 53419 . 56985)) (56988 62844 (DINFO.UPDATE.TEXT.DISPLAY 56998 . 58859) ( DINFO.TITLEMENUFN 58861 . 59986) (DINFO.OPENTEXTSTREAM 59988 . 61204) (DINFO.SHOWSEL 61206 . 61939) ( DINFO.GET.FILENAME 61941 . 62842))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "14-Feb-2021 23:11:36"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>DINFO.;5 64800 changes to%: (VARS DINFOCOMS) previous date%: "14-Feb-2021 14:55:19" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>DINFO.;4) (* ; " Copyright (c) 1985, 1986, 1987, 2020, 2021 by Xerox Corporation. ") (PRETTYCOMPRINT DINFOCOMS) (RPAQQ DINFOCOMS ((FILES TEDIT GRAPHER) (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS DINFOGRAPH DINFONODE) (FUNCTIONS DINFOGRAPHPROP)) (INITRECORDS DINFOGRAPH) (FNS (* ; "Primary functions") DINFO DINFO.UPDATE DINFOGRAPH DINFO.SPECIAL.UPDATE DINFO.READ.GRAPH DINFO.WRITE.GRAPH DINFO.SELECT.GRAPH DINFO.DEFAULT.MENU DINFO.FIND DINFO.LOOKUP) (FNS (* ; "Koto compatability") DINFO.READ.KOTO.GRAPH) (FNS (* ; "Window functions") DINFO.SETUP.WINDOW DINFO.CLOSEFN DINFO.SHRINKFN DINFO.EXPANDFN DINFO.ICONFN) (FNS (* ; "FreeMenu functions") DINFO.ADD.FMENU DINFO.CREATE.FMENU DINFO.FMW.CLOSEFN DINFO.FMENU.HANDLER DINFO.UPDATE.FMENU DINFO.TOGGLE.MENU DINFO.TOGGLE.GRAPH DINFO.TOGGLE.HISTORY DINFO.TOGGLE.TEXT) (FNS (* ; "Other menu functions") DINFO.UPDATE.MENU.DISPLAY DINFO.UPDATE.FROM.MENU DINFO.UPDATE.HISTORY DINFO.HISTORIC.UPDATE) (FNS (* ; "Interface to GRAPHER") DINFO.UPDATE.GRAPH.DISPLAY DINFO.UPDATE.FROM.GRAPH DINFO.GET.GRAPH.WINDOW DINFO.CREATE.GRAPH.WINDOW DINFO.SHOWGRAPH DINFO.INVERT.NODE DINFO.LAYOUTGRAPH) (FNS (* ; "Interface to TEdit") DINFO.UPDATE.TEXT.DISPLAY DINFO.TITLEMENUFN DINFO.OPENTEXTSTREAM DINFO.SHOWSEL DINFO.GET.FILENAME) (ADDVARS (BackgroundMenuCommands (DInfo (DINFO.SELECT.GRAPH) "Open a DInfo window for browsing documentation."))) (VARS (BackgroundMenu)) (INITVARS (DINFO.GRAPHS) (DINFOMODES '(TEXT GRAPH)) (DINFO.HISTORY.LENGTH 20) (\DINFO.MAX.MENU.LEN 10)) (GLOBALVARS DINFO.GRAPH.FILES DINFOMODES DINFO.HISTORY.LENGTH \DINFO.MAX.MENU.LEN) (PROP (FILETYPE) DINFO) (DECLARE%: DONTCOPY (TEMPLATES DINFOGRAPHPROP)))) (FILESLOAD TEDIT GRAPHER) (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (DATATYPE DINFOGRAPH (NAME NODELST TOPNODEID CURRENTNODE USERDATA TEXTPROPS FREEMENUITEMS LOOKUPFN MENUFN DEFAULTHOST DEFAULTDEVICE DEFAULTDIR MONITORLOCK DINFO.MENU WINDOW MENUFONT FMENU.WINDOW GRAPH.WINDOW HISTORY.MENU.WINDOW SUBNODE.MENU.WINDOW LAST.TEXT LAST.INVERTED.NODE LAST.GRAPH.LOCATION HISTORY.ITEMS FIND.STRING LOOKUP.STRING) (SYSTEM)) (RECORD DINFONODE (ID LABEL FILE FROMBYTE TOBYTE PARENT CHILDREN NEXTNODE PREVIOUSNODE USERDATA) (SYSTEM)) ) (/DECLAREDATATYPE 'DINFOGRAPH '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER) '((DINFOGRAPH 0 POINTER) (DINFOGRAPH 2 POINTER) (DINFOGRAPH 4 POINTER) (DINFOGRAPH 6 POINTER) (DINFOGRAPH 8 POINTER) (DINFOGRAPH 10 POINTER) (DINFOGRAPH 12 POINTER) (DINFOGRAPH 14 POINTER) (DINFOGRAPH 16 POINTER) (DINFOGRAPH 18 POINTER) (DINFOGRAPH 20 POINTER) (DINFOGRAPH 22 POINTER) (DINFOGRAPH 24 POINTER) (DINFOGRAPH 26 POINTER) (DINFOGRAPH 28 POINTER) (DINFOGRAPH 30 POINTER) (DINFOGRAPH 32 POINTER) (DINFOGRAPH 34 POINTER) (DINFOGRAPH 36 POINTER) (DINFOGRAPH 38 POINTER) (DINFOGRAPH 40 POINTER) (DINFOGRAPH 42 POINTER) (DINFOGRAPH 44 POINTER) (DINFOGRAPH 46 POINTER) (DINFOGRAPH 48 POINTER) (DINFOGRAPH 50 POINTER)) '52) (DEFMACRO DINFOGRAPHPROP (GRAPH PROP &OPTIONAL (NEW-VALUE NIL NEW-VALUE-SUPPLIED)) [LET [(REAL-FIELD (AND (LISTP PROP) (EQ (CAR PROP) 'QUOTE) (FMEMB (CADR PROP) (RECORDFIELDNAMES 'DINFOGRAPH T)) (CADR PROP] (IF NEW-VALUE-SUPPLIED THEN [IF REAL-FIELD THEN `(REPLACE (DINFOGRAPH ,REAL-FIELD) OF ,GRAPH WITH ,NEW-VALUE) ELSE `(LET* ((SI::$GRAPH$ ,GRAPH) (SI::$USERDATA$ (FETCH (DINFOGRAPH USERDATA) OF SI::$GRAPH$)) (SI::$PROP$ ,PROP) (SI::$NEW-VALUE$ ,NEW-VALUE)) (IF (LISTP SI::$USERDATA$) THEN (LISTPUT SI::$USERDATA$ SI::$PROP$ SI::$NEW-VALUE$) ELSE (REPLACE (DINFOGRAPH USERDATA) OF SI::$GRAPH$ WITH (LIST SI::$PROP$ SI::$NEW-VALUE$)) SI::$NEW-VALUE$] ELSE (IF REAL-FIELD THEN `(FETCH (DINFOGRAPH ,REAL-FIELD) OF ,GRAPH) ELSE `(LISTGET (FETCH (DINFOGRAPH USERDATA) OF ,GRAPH) ,PROP]) ) (/DECLAREDATATYPE 'DINFOGRAPH '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER) '((DINFOGRAPH 0 POINTER) (DINFOGRAPH 2 POINTER) (DINFOGRAPH 4 POINTER) (DINFOGRAPH 6 POINTER) (DINFOGRAPH 8 POINTER) (DINFOGRAPH 10 POINTER) (DINFOGRAPH 12 POINTER) (DINFOGRAPH 14 POINTER) (DINFOGRAPH 16 POINTER) (DINFOGRAPH 18 POINTER) (DINFOGRAPH 20 POINTER) (DINFOGRAPH 22 POINTER) (DINFOGRAPH 24 POINTER) (DINFOGRAPH 26 POINTER) (DINFOGRAPH 28 POINTER) (DINFOGRAPH 30 POINTER) (DINFOGRAPH 32 POINTER) (DINFOGRAPH 34 POINTER) (DINFOGRAPH 36 POINTER) (DINFOGRAPH 38 POINTER) (DINFOGRAPH 40 POINTER) (DINFOGRAPH 42 POINTER) (DINFOGRAPH 44 POINTER) (DINFOGRAPH 46 POINTER) (DINFOGRAPH 48 POINTER) (DINFOGRAPH 50 POINTER)) '52) (DEFINEQ (DINFO [LAMBDA (GRAPH.OR.FILE WINDOW.OR.REGION SETUP.ONLY? NO.FREEMENU?) (* drc%: "25-Jan-86 18:23") (* Starts a DInfo browser.) (RESETLST (LET ((W (OR (WINDOWP WINDOW.OR.REGION) (AND (REGIONP WINDOW.OR.REGION) (CREATEW WINDOW.OR.REGION "DInfo" NIL T)) (AND (type? DINFOGRAPH GRAPH.OR.FILE) (WINDOWP (fetch (DINFOGRAPH WINDOW) of GRAPH.OR.FILE))) (CREATEW NIL "DInfo"))) GRAPH MONITORLOCK) (OPENW W) [SETQ GRAPH (if (type? DINFOGRAPH GRAPH.OR.FILE) then GRAPH.OR.FILE else (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW W)) (DINFO.READ.GRAPH GRAPH.OR.FILE] [SETQ MONITORLOCK (OR (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) (replace (DINFOGRAPH MONITORLOCK) of GRAPH with (CREATE.MONITORLOCK "DInfo"] (RESETSAVE NIL (LIST 'RELEASE.MONITORLOCK MONITORLOCK)) (OBTAIN.MONITORLOCK MONITORLOCK) (DINFO.SETUP.WINDOW GRAPH W NO.FREEMENU?) (OR SETUP.ONLY? (DINFO.UPDATE GRAPH NIL NIL T)) GRAPH]) (DINFO.UPDATE [LAMBDA (GRAPH NEW.NODE SEL FORCE?) (* jow "20-May-86 15:14") (* * Called to visit a NEW.NODE in GRAPH, or to just make sure that the display  of GRAPH is current.) (LET ([NODE (OR NEW.NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH) (FASSOC (fetch (DINFOGRAPH TOPNODEID) of GRAPH) (fetch (DINFOGRAPH NODELST) of GRAPH] (PREVIOUS.NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) (WINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (OPENW WINDOW) (WINDOWPROP WINDOW 'DINFOGRAPH GRAPH) (OR (FMEMB NODE (fetch (DINFOGRAPH NODELST) of GRAPH)) (ERROR NODE "NOT IN NODELST")) (LET ((FMENU.WINDOW (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH)) (MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH))) [RESETLST (RESETSAVE NIL (LIST 'RELEASE.MONITORLOCK MONITORLOCK)) (if (NOT (OBTAIN.MONITORLOCK MONITORLOCK T)) then (* somebody else is messing with this  graph.) (FLASHWINDOW WINDOW) (PROMPTPRINT "DInfo is busy") elseif (NULL FMENU.WINDOW) then (replace (DINFOGRAPH CURRENTNODE) of GRAPH with NODE) (* FreeMenu turned off, so just  display text) (DINFO.UPDATE.TEXT.DISPLAY GRAPH NODE SEL) else (* We've got a FreeMenu, so update  away!) (DINFO.UPDATE.FMENU GRAPH NODE) (LET ((STATUS (FM.GETSTATE FMENU.WINDOW))) (replace (DINFOGRAPH CURRENTNODE) of GRAPH with NODE) (AND (LISTGET STATUS 'GRAPH) (DINFO.UPDATE.GRAPH.DISPLAY GRAPH NODE FORCE?)) (AND (LISTGET STATUS 'MENU) (DINFO.UPDATE.MENU.DISPLAY GRAPH NODE)) (AND (LISTGET STATUS 'TEXT) (DINFO.UPDATE.TEXT.DISPLAY GRAPH NODE SEL)) (DINFO.UPDATE.HISTORY GRAPH NODE SEL (LISTGET STATUS 'HISTORY] (CLEARW (GETPROMPTWINDOW WINDOW]) (DINFOGRAPH [LAMBDA (X) (* drc%: " 8-Jan-86 11:12") (if (type? DINFOGRAPH X) then X elseif (AND (WINDOWP X) (WINDOWPROP X 'DINFOGRAPH)) elseif (AND (WINDOWP X) (WINDOWPROP X 'MAINWINDOW)) then (WINDOWPROP (WINDOWPROP X 'MAINWINDOW) 'DINFOGRAPH]) (DINFO.SPECIAL.UPDATE [LAMBDA (TYPE GRAPH) (* drc%: "25-Jan-86 18:26") (* * Do a TYPE update of Graph, where TYPE is one of Top, Parent, Previous or  Next.) (LET* [(DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (CURRENT.NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) (NEW.NODE (FASSOC (SELECTQ TYPE (Top (fetch (DINFOGRAPH TOPNODEID) of GRAPH)) (Parent (fetch (DINFONODE PARENT) of CURRENT.NODE)) (Next (fetch (DINFONODE NEXTNODE) of CURRENT.NODE)) (Previous (fetch (DINFONODE PREVIOUSNODE) of CURRENT.NODE)) NIL) (fetch (DINFOGRAPH NODELST) of GRAPH] (if (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T) then (if NEW.NODE then (PROCESSPROP (THIS.PROCESS) 'NAME (CONCAT "DInfo " TYPE)) (DINFO.UPDATE GRAPH NEW.NODE) else (* TYPE of Top! or Node! will sound silly here, but should never happen.) (printout (GETPROMPTWINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) T "This node has no " TYPE)) else (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy"]) (DINFO.READ.GRAPH [LAMBDA (FILE QUIETFLG) (* drc%: "25-Jan-86 18:17") (* Reads a file written by DINFO.WRITE.GRAPH.  Returns the DInfo graph stored on FILE.) (OR QUIETFLG (printout T T "Reading " (FILENAMEFIELD FILE 'NAME) " graph...")) (LET* ((FULLFILENAME (INFILEP FILE)) [DATA (CDR (READFILE (OR FULLFILENAME (ERROR "FILE NOT FOUND" FILE] (GRAPH (create DINFOGRAPH))) (* fields stored on file) (replace (DINFOGRAPH TOPNODEID) of GRAPH with (LISTGET DATA 'TOPNODEID)) (replace (DINFOGRAPH TEXTPROPS) of GRAPH with (LISTGET DATA 'TEXTPROPS)) (replace (DINFOGRAPH LOOKUPFN) of GRAPH with (LISTGET DATA 'LOOKUPFN)) (replace (DINFOGRAPH MENUFN) of GRAPH with (LISTGET DATA 'MENUFN)) (replace (DINFOGRAPH FREEMENUITEMS) of GRAPH with (LISTGET DATA 'FREEMENUITEMS)) (replace (DINFOGRAPH NODELST) of GRAPH with (LISTGET DATA 'NODELST)) (replace (DINFOGRAPH USERDATA) of GRAPH with (LISTGET DATA 'USERDATA)) (* fields filled in at read time) (replace (DINFOGRAPH NAME) of GRAPH with (FILENAMEFIELD FULLFILENAME 'NAME)) (replace (DINFOGRAPH DEFAULTHOST) of GRAPH with (FILENAMEFIELD FULLFILENAME 'HOST)) (replace (DINFOGRAPH DEFAULTDEVICE) of GRAPH with (FILENAMEFIELD FULLFILENAME 'DEVICE)) (replace (DINFOGRAPH DEFAULTDIR) of GRAPH with (FILENAMEFIELD FULLFILENAME 'DIRECTORY)) (OR QUIETFLG (printout T "OK.")) GRAPH]) (DINFO.WRITE.GRAPH [LAMBDA (GRAPH FILE) (* drc%: "25-Jan-86 18:16") (* Writes a DInfo graph to a file for reading by DINFO.READ.GRAPH.  Returns the full file name of the file.) (* dump it out as a props list) (WRITEFILE (LIST 'TOPNODEID (fetch (DINFOGRAPH TOPNODEID) of GRAPH) 'TEXTPROPS (fetch (DINFOGRAPH TEXTPROPS) of GRAPH) 'LOOKUPFN (fetch (DINFOGRAPH LOOKUPFN) of GRAPH) 'MENUFN (fetch (DINFOGRAPH MENUFN) of GRAPH) 'FREEMENUITEMS (fetch (DINFOGRAPH FREEMENUITEMS) of GRAPH) 'NODELST (fetch (DINFOGRAPH NODELST) of GRAPH) 'USERDATA (fetch (DINFOGRAPH USERDATA) of GRAPH)) FILE]) (DINFO.SELECT.GRAPH [LAMBDA NIL (* drc%: "24-Jan-86 13:25") (* * This is called when DInfo is selected from the Background Menu.) (DECLARE (GLOBALVARS DINFO.GRAPHS)) (ALLOW.BUTTON.EVENTS) (RESETFORM (TTY.PROCESS (THIS.PROCESS)) (LET [(GRAPH (if (NULL DINFO.GRAPHS) then (PROMPTPRINT "No Graphs installed -- load HelpSys or DInfoEdit") elseif (NULL (CDR DINFO.GRAPHS)) then (EVAL (CADAR DINFO.GRAPHS)) else (MENU (create MENU CENTERFLG _ T TITLE _ "Select Graph" ITEMS _ DINFO.GRAPHS] (AND GRAPH (DINFO GRAPH]) (DINFO.DEFAULT.MENU [LAMBDA (GRAPH) (* jow "15-Jul-86 17:36") (* * This is the default MENUFN for DInfo graphs.) (LET ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (CLEARW (GETPROMPTWINDOW DINFOW)) (LET [(TYPE (MENU (OR (fetch (DINFOGRAPH DINFO.MENU) of GRAPH) (replace (DINFOGRAPH DINFO.MENU) of GRAPH with (create MENU ITEMS _ '(("Top" 'Top "Visit the top node in the graph" ) ("Parent" 'Parent "Visit the parent of the current node" ) ("Previous" 'Previous "Visit the node before this node") ("Next " 'Next "Visit the node following this node") ("Find" 'Find "Search the text of this node") ("Lookup" 'Lookup "Lookup a new term in this graph") ("Expanded Menu" 'FreeMenu "Add an expanded options menu.")) CENTERFLG _ T MENUFONT _ (FONTCREATE 'HELVETICA 10 'BOLD] (if TYPE then (PROCESSPROP (THIS.PROCESS) 'NAME (CONCAT "DInfo " TYPE)) (SELECTQ TYPE ((Top Parent Previous Next) (DINFO.SPECIAL.UPDATE TYPE GRAPH)) (Find (DINFO.FIND GRAPH)) (Lookup (DINFO.LOOKUP GRAPH '(LEFT))) (FreeMenu (DINFO.ADD.FMENU GRAPH) (DINFO.UPDATE GRAPH)) NIL]) (DINFO.FIND [LAMBDA (GRAPH BUTTONS) (* drc%: "25-Jan-86 18:23") (LET ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (if (NOT (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T)) then (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy") else (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW)) (TERPRI T) (LET ([STRING (if (AND (FMEMB 'MIDDLE BUTTONS) (fetch (DINFOGRAPH FIND.STRING) of GRAPH)) else (PROMPTFORWORD "Find: " (fetch (DINFOGRAPH FIND.STRING) of GRAPH) NIL NIL NIL 'TTY (CONSTANT (CHARCODE (EOL ESCAPE LF] (TEXTSTREAM (WINDOWPROP DINFOW 'TEXTSTREAM)) PAIR) (replace (DINFOGRAPH FIND.STRING) of GRAPH with STRING) (if STRING then (PRINTOUT T " Searching...") (if (SETQ PAIR (TEDIT.FIND TEXTSTREAM STRING NIL NIL T)) then (printout T "OK.") (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SHOWSEL TEXTSTREAM T (TEDIT.SETSEL TEXTSTREAM (CAR PAIR) (NCHARS STRING) 'RIGHT T))) else (printout T "not found.") (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM 0 0]) (DINFO.LOOKUP [LAMBDA (GRAPH BUTTONS) (* drc%: "25-Jan-86 18:22") (LET ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (if (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T) then [RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW)) (LET ((LOOKUPFN (fetch (DINFOGRAPH LOOKUPFN) of GRAPH))) (if LOOKUPFN then (CLEARW T) (LET* [(OLD.STRING (fetch (DINFOGRAPH LOOKUP.STRING) of GRAPH)) (STRING (if (AND OLD.STRING (FMEMB 'MIDDLE BUTTONS)) then OLD.STRING else (PROMPTFORWORD "Lookup: " OLD.STRING NIL NIL NIL 'TTY (CONSTANT (CHARCODE (EOL ESCAPE LF] (replace (DINFOGRAPH LOOKUP.STRING) of GRAPH with STRING) (AND STRING (APPLY* LOOKUPFN STRING GRAPH))) else (PRINTOUT T T "The " (fetch (DINFOGRAPH NAME) of GRAPH) " graph has no LOOKUPFN."] else (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy"]) ) (DEFINEQ (DINFO.READ.KOTO.GRAPH [LAMBDA (FILE QUIETFLG) (* drc%: " 4-Feb-86 11:27") (* Reads a file written by Koto DINFO.WRITE.GRAPH and returns a Lute  DINFOGRAPH. Thus, (DINFO.WRITE.GRAPH (DINFO.READ.KOTO.GRAPH ) )  will convert the Koto format graph in to a Lute format graph in  .) (OR QUIETFLG (printout T T "Reading " (FILENAMEFIELD FILE 'NAME) " graph...")) (LET* ((FULLFILENAME (INFILEP FILE)) [DATA (CDR (READFILE (OR FULLFILENAME (ERROR "FILE NOT FOUND" FILE] (GRAPH (create DINFOGRAPH))) (* in Koto we just wrote out the  DINFOGRAPH record) (for FIELD in DATA as N from 1 to 11 do (* fields stored on file) (SELECTQ N ((1 4 5 6 10 11)) (2 (replace (DINFOGRAPH NODELST) of GRAPH with FIELD)) (3 (replace (DINFOGRAPH TOPNODEID) of GRAPH with FIELD)) (7 (replace (DINFOGRAPH TEXTPROPS) of GRAPH with FIELD)) (8 (replace (DINFOGRAPH LOOKUPFN) of GRAPH with FIELD)) (9 (replace (DINFOGRAPH MENUFN) of GRAPH with FIELD)) (SHOULDNT))) (* fields filled in at read time) (replace (DINFOGRAPH NAME) of GRAPH with (FILENAMEFIELD FULLFILENAME 'NAME)) (replace (DINFOGRAPH DEFAULTHOST) of GRAPH with (FILENAMEFIELD FULLFILENAME 'HOST)) (replace (DINFOGRAPH DEFAULTDEVICE) of GRAPH with (FILENAMEFIELD FULLFILENAME 'DEVICE)) (replace (DINFOGRAPH DEFAULTDIR) of GRAPH with (FILENAMEFIELD FULLFILENAME 'DIRECTORY)) (OR QUIETFLG (printout T "OK.")) GRAPH]) ) (DEFINEQ (DINFO.SETUP.WINDOW [LAMBDA (GRAPH WINDOW NO.FREEMENU?) (* jow "10-Jun-86 15:29") (replace (DINFOGRAPH WINDOW) of GRAPH with WINDOW) (WINDOWPROP WINDOW 'DINFOGRAPH GRAPH) (DETACHALLWINDOWS WINDOW) (if (NOT NO.FREEMENU?) then (DINFO.ADD.FMENU GRAPH)) (DINFO.UPDATE.TEXT.DISPLAY GRAPH NIL NIL T) (WINDOWPROP WINDOW 'TITLE (CONCAT (fetch (DINFOGRAPH NAME) of GRAPH) " DInfo")) (WINDOWADDPROP WINDOW 'CLOSEFN 'DINFO.CLOSEFN) (WINDOWADDPROP WINDOW 'SHRINKFN 'DINFO.SHRINKFN) (WINDOWADDPROP WINDOW 'EXPANDFN 'DINFO.EXPANDFN]) (DINFO.CLOSEFN [LAMBDA (W) (* drc%: "25-Jan-86 18:26") (LET [(GRAPH (WINDOWPROP W 'DINFOGRAPH] (if (type? DINFOGRAPH GRAPH) then (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH)) (* remove circularity...) (WINDOWPROP W 'DINFOGRAPH NIL]) (DINFO.SHRINKFN [LAMBDA (W) (* drc%: "25-Jan-86 18:26") (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of (DINFOGRAPH W]) (DINFO.EXPANDFN [LAMBDA (W) (* jow "15-Jul-86 17:00") (LET* ((GRAPH (DINFOGRAPH W)) (FMENU (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH))) (if (AND FMENU (LISTGET (FM.GETSTATE FMENU) 'GRAPH)) then (LET ((GRAPHW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH))) (OPENW GRAPHW) (TOTOPW W) (WINDOWPROP GRAPHW 'DINFOGRAPH GRAPH]) (DINFO.ICONFN [LAMBDA (W) (* drc%: "25-Jan-86 16:33") (OR (WINDOWPROP WINDOW 'ICON) (WINDOWPROP WINDOW 'ICON (TITLEDICONW TEDIT.TITLED.ICON.TEMPLATE (WINDOWPROP WINDOW 'TITLE) TEDIT.ICON.FONT NIL T)) (WINDOWPROP WINDOW 'ICON]) ) (DEFINEQ (DINFO.ADD.FMENU [LAMBDA (GRAPH) (* jow "20-May-86 15:41") (* * Add a DInfo FreeMenu to WINDOW. then update the FreeMenu's display.) (LET ((WINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (FM.WINDOW (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH))) (if [AND (WINDOWP FM.WINDOW) (FMEMB FM.WINDOW (WINDOWPROP WINDOW 'ATTACHEDWINDOWS] then (OPENW FM.WINDOW) else (REMOVEPROMPTWINDOW WINDOW) (SETQ FM.WINDOW (OR (WINDOWP FM.WINDOW) (DINFO.CREATE.FMENU GRAPH))) (replace (DINFOGRAPH FMENU.WINDOW) of GRAPH with FM.WINDOW) (ATTACHWINDOW FM.WINDOW WINDOW) (WINDOWPROP FM.WINDOW 'FM.PROMPTWINDOW (GETPROMPTWINDOW WINDOW)) (WINDOWDELPROP FM.WINDOW 'PASSTOMAINCOMS 'CLOSEW) (WINDOWADDPROP FM.WINDOW 'CLOSEFN 'DINFO.FMW.CLOSEFN T) (DINFO.UPDATE.FMENU GRAPH]) (DINFO.CREATE.FMENU [LAMBDA (GRAPH) (* jow "15-Jul-86 17:39") (* * Makes a DInfo FreeMenu for GRAPH) (LET* [(ADD.ITEMS (fetch (DINFOGRAPH FREEMENUITEMS) of GRAPH)) (FONT (OR (FONTP (fetch (DINFOGRAPH MENUFONT) of GRAPH)) MENUFONT)) (FM (FREEMENU `((PROPS FONT %, FONT) ((LABEL Node%: TYPE DISPLAY FONT (HELVETICA 10)) (ID NODE LABEL "" TYPE DISPLAY)) ((LABEL Top! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Visit the top node") (ID TOP LABEL "" TYPE DISPLAY)) ((LABEL Parent! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Visit the parent of the current node") (ID PARENT LABEL "" TYPE DISPLAY)) ((LABEL Previous! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Visit the node previous to the current node") (ID PREVIOUS LABEL "" TYPE DISPLAY)) ((LABEL Next! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Visit the node after the current node") (ID NEXT LABEL "" TYPE DISPLAY)) ((LABEL Display%: TYPE DISPLAY FONT (HELVETICA 10)) (LABEL Graph ID GRAPH INITSTATE %, (MEMB 'GRAPH DINFOMODES) TYPE TOGGLE SELECTEDFN DINFO.TOGGLE.GRAPH FONT (HELVETICA 10 BOLD) MESSAGE "Toggle display of the graph") (LABEL Menu ID MENU INITSTATE %, (MEMB 'MENU DINFOMODES) TYPE TOGGLE SELECTEDFN DINFO.TOGGLE.MENU FONT (HELVETICA 10 BOLD) MESSAGE "Toggle display of the subnode menu") (LABEL Text ID TEXT INITSTATE %, (MEMB 'TEXT DINFOMODES) TYPE TOGGLE SELECTEDFN DINFO.TOGGLE.TEXT FONT (HELVETICA 10 BOLD) MESSAGE "Toggle display of the text of the current node") (LABEL History ID HISTORY INITSTATE %, (MEMB 'HISTORY DINFOMODES) TYPE TOGGLE FONT (HELVETICA 10 BOLD) SELECTEDFN DINFO.TOGGLE.HISTORY MESSAGE "Toggle the display of the History Menu")) %, (APPEND '((LABEL Find! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Perform a string search in the selected text of the current node" ) (LABEL Lookup! SELECTEDFN DINFO.FMENU.HANDLER FONT (HELVETICA 10 BOLD) MESSAGE "Lookup a term in this graph. LEFT for new term, MIDDLE to repeat last." )) ADD.ITEMS] (WINDOWPROP FM 'FM.DONTRESHAPE T) FM]) (DINFO.FMW.CLOSEFN [LAMBDA (W) (* drc%: "25-Jan-86 18:19") (* * CLOSEFN for a DInfo FreeMenu window.) (LET* ((DINFOW (WINDOWPROP W 'MAINWINDOW)) (GRAPH (DINFOGRAPH DINFOW))) (if GRAPH then (DETACHWINDOW W) (replace (DINFOGRAPH FMENU.WINDOW) of GRAPH with NIL) (DETACHWINDOW (fetch (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH)) (CLOSEW (fetch (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH)) (DETACHWINDOW (fetch (DINFOGRAPH HISTORY.MENU.WINDOW) of GRAPH)) (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH)) (REMOVEPROMPTWINDOW DINFOW]) (DINFO.FMENU.HANDLER [LAMBDA (ITEM WINDOW BUTTONS) (* drc%: "16-Jan-86 11:42") (* * Handle a command from the FreeMenu.) (LET [(GRAPH (WINDOWPROP (WINDOWPROP WINDOW 'MAINWINDOW) 'DINFOGRAPH)) (TYPE (MKATOM (SUBSTRING (FM.ITEMPROP ITEM 'LABEL) 1 -2] (SELECTQ TYPE ((Top Parent Previous Next) (DINFO.SPECIAL.UPDATE TYPE GRAPH)) (Find (DINFO.FIND GRAPH BUTTONS)) (Lookup (DINFO.LOOKUP GRAPH BUTTONS)) (SHOULDNT]) (DINFO.UPDATE.FMENU [LAMBDA (GRAPH NEW.NODE) (* jow "20-May-86 15:13") (* * Update the display of GRAPH's FreeMenu.  If NEW.NODE is not specified, use Top node of GRAPH, and change Top node title.) (LET* [(W (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH)) (NODELST (fetch (DINFOGRAPH NODELST) of GRAPH)) (NODE (OR NEW.NODE (FASSOC (fetch (DINFONODE ID) of (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) NODELST) (FASSOC (fetch (DINFOGRAPH TOPNODEID) of GRAPH) NODELST] (OR NEW.NODE (FM.CHANGELABEL (FM.GETITEM 'TOP NIL W) (fetch (DINFONODE LABEL) of (FASSOC (fetch (DINFOGRAPH TOPNODEID) of GRAPH) (fetch (DINFOGRAPH NODELST) of GRAPH))) W)) (FM.CHANGELABEL (FM.GETITEM 'NODE NIL W) (fetch (DINFONODE LABEL) of NODE) W) (FM.CHANGELABEL (FM.GETITEM 'PARENT NIL W) (fetch (DINFONODE LABEL) of NODE (FASSOC (fetch (DINFONODE PARENT) of NODE) NODELST)) W) (FM.CHANGELABEL (FM.GETITEM 'NEXT NIL W) (fetch (DINFONODE LABEL) of NODE (FASSOC (fetch (DINFONODE NEXTNODE) of NODE) NODELST)) W) (FM.CHANGELABEL (FM.GETITEM 'PREVIOUS NIL W) (fetch (DINFONODE LABEL) of NODE (FASSOC (fetch (DINFONODE PREVIOUSNODE) of NODE) NODELST)) W]) (DINFO.TOGGLE.MENU [LAMBDA (ITEM WINDOW) (* jow "10-Jun-86 14:15") (LET [(GRAPH (WINDOWPROP (WINDOWPROP WINDOW 'MAINWINDOW) 'DINFOGRAPH] (if (FM.ITEMPROP ITEM 'STATE) then (DINFO.UPDATE.MENU.DISPLAY GRAPH (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) else (LET ((SUBNODE.MENU.WINDOW (fetch (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH))) (DETACHWINDOW SUBNODE.MENU.WINDOW) (CLOSEW SUBNODE.MENU.WINDOW]) (DINFO.TOGGLE.GRAPH [LAMBDA (ITEM WINDOW) (* ; "Edited 1-Oct-87 09:56 by drc:") (LET [(GRAPH (WINDOWPROP (WINDOWPROP WINDOW 'MAINWINDOW) 'DINFOGRAPH] (if (FM.ITEMPROP ITEM 'STATE) then (DINFO.UPDATE.GRAPH.DISPLAY GRAPH (fetch CURRENTNODE of GRAPH) T) else (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH))) ITEM]) (DINFO.TOGGLE.HISTORY [LAMBDA (ITEM WINDOW) (* jow "10-Jun-86 14:22") (LET [(GRAPH (WINDOWPROP (WINDOWPROP WINDOW 'MAINWINDOW) 'DINFOGRAPH] (if (FM.ITEMPROP ITEM 'STATE) then (DINFO.UPDATE.HISTORY GRAPH NIL NIL T) else (LET ((HISTORY.MENU.WINDOW (fetch (DINFOGRAPH HISTORY.MENU.WINDOW) of GRAPH))) (DETACHWINDOW HISTORY.MENU.WINDOW) (CLOSEW HISTORY.MENU.WINDOW]) (DINFO.TOGGLE.TEXT [LAMBDA (ITEM WINDOW) (* drc%: "25-Jan-86 18:26") (LET* ((DINFOW (WINDOWPROP WINDOW 'MAINWINDOW)) (GRAPH (WINDOWPROP DINFOW 'DINFOGRAPH)) (MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH))) (if (NOT (OBTAIN.MONITORLOCK MONITORLOCK T)) then (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy") elseif (FM.ITEMPROP ITEM 'STATE) then (DINFO.UPDATE.TEXT.DISPLAY GRAPH (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) (RELEASE.MONITORLOCK MONITORLOCK) else (DINFO.UPDATE.TEXT.DISPLAY GRAPH (fetch (DINFOGRAPH CURRENTNODE) of GRAPH) NIL T) (RELEASE.MONITORLOCK MONITORLOCK]) ) (DEFINEQ (DINFO.UPDATE.MENU.DISPLAY [LAMBDA (GRAPH NODE) (* drc%: "25-Jan-86 18:20") (LET* [(DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (WINDOW (fetch (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH)) [CHILDREN (DREVERSE (for ID in (fetch (DINFONODE CHILDREN) of NODE) bind (NODELST _ (fetch (DINFOGRAPH NODELST) of GRAPH)) collect (FASSOC ID NODELST] (LENGTH (FLENGTH CHILDREN)) (SCROLLABLE (GREATERP LENGTH \DINFO.MAX.MENU.LEN)) (MENU (create MENU MENUFONT _ (OR (FONTP (fetch (DINFOGRAPH MENUFONT) of GRAPH)) MENUFONT) ITEMWIDTH _ (WINDOWPROP DINFOW 'WIDTH) CENTERFLG _ T MENUCOLUMNS _ 1 MENUOUTLINESIZE _ 0 ITEMS _ (for CHILD in CHILDREN collect (LIST (fetch (DINFONODE LABEL) of CHILD) CHILD "Will visit this node if selected." )) WHENSELECTEDFN _ (FUNCTION DINFO.UPDATE.FROM.MENU] (AND WINDOW (PROGN (DETACHWINDOW WINDOW) (CLOSEW WINDOW))) (if CHILDREN then (UPDATE/MENU/IMAGE MENU) (SETQ WINDOW (CREATEW (create REGION LEFT _ 0 BOTTOM _ 0 WIDTH _ (WINDOWPROP DINFOW 'WIDTH) HEIGHT _ (HEIGHTIFWINDOW (if SCROLLABLE then (TIMES \DINFO.MAX.MENU.LEN (fetch (MENU ITEMHEIGHT) of MENU)) else (fetch (MENU IMAGEHEIGHT) of MENU)) T)) "Subnodes" NIL T)) (ADDMENU MENU WINDOW (create POSITION XCOORD _ 0 YCOORD _ (if SCROLLABLE then (TIMES (DIFFERENCE \DINFO.MAX.MENU.LEN LENGTH) (fetch (MENU ITEMHEIGHT) of MENU)) else 0)) T) (ATTACHWINDOW WINDOW DINFOW 'BOTTOM) (REDISPLAYW WINDOW) (replace (DINFOGRAPH SUBNODE.MENU.WINDOW) of GRAPH with WINDOW) (LET [(BITS (fetch (REGION BOTTOM) of (WINDOWPROP WINDOW 'REGION] (* Slide DINFOW up if our new menu is off the screen) (AND (ILESSP BITS 0) (RELMOVEW DINFOW (create POSITION XCOORD _ 0 YCOORD _ (IDIFFERENCE 0 BITS]) (DINFO.UPDATE.FROM.MENU [LAMBDA (ITEM MENU BUTTONS) (* drc%: "12-Dec-85 14:49") (DINFO.UPDATE (WINDOWPROP (WINDOWPROP (WFROMMENU MENU) 'MAINWINDOW) 'DINFOGRAPH) (CADR ITEM]) (DINFO.UPDATE.HISTORY [LAMBDA (GRAPH NODE SEL DISPLAY?) (* drc%: "25-Jan-86 18:21") (LET* ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (OLDWINDOW (fetch (DINFOGRAPH HISTORY.MENU.WINDOW) of GRAPH)) (OLDITEMS (fetch (DINFOGRAPH HISTORY.ITEMS) of GRAPH)) (NEWITEM (if SEL then (LIST (if (LISTP SEL) then (CAR SEL) else SEL) (LIST (fetch (DINFONODE ID) of NODE) SEL) "Will re-lookup this term") elseif NODE then (LIST (fetch (DINFONODE LABEL) of NODE) (LIST (fetch (DINFONODE ID) of NODE) SEL) "Will re-visit this node"))) (ITEMS (if [AND NEWITEM (NOT (EQUAL NEWITEM (CAR OLDITEMS] then (CONS NEWITEM (for ITEM in OLDITEMS as I from 2 to DINFO.HISTORY.LENGTH collect ITEM)) else OLDITEMS))) (replace (DINFOGRAPH HISTORY.ITEMS) of GRAPH with ITEMS) (AND OLDWINDOW (PROGN (DETACHWINDOW OLDWINDOW) (CLOSEW OLDWINDOW))) (AND DISPLAY? ITEMS (LET [(HISTORYW (ATTACHMENU (create MENU MENUFONT _ (OR (FONTP (fetch (DINFOGRAPH MENUFONT) of GRAPH)) MENUFONT) TITLE _ "History" CENTERFLG _ T MENUCOLUMNS _ 1 ITEMS _ ITEMS WHENSELECTEDFN _ (FUNCTION DINFO.HISTORIC.UPDATE)) DINFOW 'LEFT 'TOP] (replace (DINFOGRAPH HISTORY.MENU.WINDOW) of GRAPH with HISTORYW]) (DINFO.HISTORIC.UPDATE [LAMBDA (ITEM MENU BUTTONS) (* drc%: "25-Jan-86 18:24") (LET* [(ID (CAADR ITEM)) (SEL (CADADR ITEM)) (WINDOW (WINDOWPROP (WFROMMENU MENU) 'MAINWINDOW)) (GRAPH (WINDOWPROP WINDOW 'DINFOGRAPH)) (NODE (FASSOC ID (fetch (DINFOGRAPH NODELST) of GRAPH] (if (NOT (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T)) then (FLASHWINDOW WINDOW) (PROMPTPRINT "DInfo is busy") elseif (NULL NODE) then (PRINTOUT (GETPROMPTWINDOW WINDOW) T "This node no longer exists") else (DINFO.UPDATE GRAPH NODE SEL]) ) (DEFINEQ (DINFO.UPDATE.GRAPH.DISPLAY [LAMBDA (DINFO.GRAPH NODE FORCE?) (* drc%: "27-Jan-86 16:19") (LET [(DINFOW (fetch (DINFOGRAPH WINDOW) of DINFO.GRAPH)) (LOCATION (CONS (fetch (DINFONODE PARENT) of NODE) (fetch (DINFONODE CHILDREN) of NODE] (if (AND (NOT FORCE?) (EQUAL LOCATION (fetch (DINFOGRAPH LAST.GRAPH.LOCATION) of DINFO.GRAPH))) then (* don't need to relayout grapher display --  just change which node is inverted.) (DINFO.INVERT.NODE (fetch (DINFOGRAPH GRAPH.WINDOW) of DINFO.GRAPH) NODE DINFO.GRAPH) else (DINFO.SHOWGRAPH (DINFO.LAYOUTGRAPH DINFO.GRAPH NODE) DINFO.GRAPH)) (replace (DINFOGRAPH LAST.GRAPH.LOCATION) of DINFO.GRAPH with LOCATION) (WINDOWPROP (fetch (DINFOGRAPH GRAPH.WINDOW) of DINFO.GRAPH) 'TITLE (CONCAT (fetch (DINFOGRAPH NAME) of DINFO.GRAPH) " - " (fetch (DINFONODE LABEL) of (fetch (DINFOGRAPH CURRENTNODE) of DINFO.GRAPH]) (DINFO.UPDATE.FROM.GRAPH [LAMBDA (GRAPHER.NODE GRAPH.WINDOW) (* drc%: "12-Dec-85 18:34") (AND GRAPHER.NODE (ADD.PROCESS `(DINFO.UPDATE (QUOTE %, (WINDOWPROP GRAPH.WINDOW 'DINFOGRAPH)) (QUOTE %, (fetch (GRAPHNODE NODEID) of GRAPHER.NODE))) 'NAME "DInfo From Graph"]) (DINFO.GET.GRAPH.WINDOW [LAMBDA (GRAPH REGION) (* drc%: "25-Jan-86 18:05") (LET ((W (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH))) (COND ((WINDOWP W)) (T (SETQ W (DINFO.CREATE.GRAPH.WINDOW GRAPH REGION)) [WINDOWPROP W 'CLOSEFN (FUNCTION (LAMBDA (W) (WINDOWPROP W 'DINFOGRAPH NIL] (replace (DINFOGRAPH GRAPH.WINDOW) of GRAPH with W))) (WINDOWPROP W 'DINFOGRAPH GRAPH) W]) (DINFO.CREATE.GRAPH.WINDOW [LAMBDA (GRAPH REGION) (* drc%: "25-Jan-86 17:49") (LET* ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (DINFOREGION (WINDOWPROP DINFOW 'REGION)) (LEFT (DIFFERENCE (DIFFERENCE (fetch (REGION LEFT) of DINFOREGION) (fetch (REGION WIDTH) of REGION)) 10)) (BOTTOM (DIFFERENCE (DIFFERENCE (fetch (REGION BOTTOM) of DINFOREGION) (fetch (REGION HEIGHT) of REGION)) 50))) (CREATEW (CREATEREGION (if (GEQ LEFT 0) then LEFT else (RAND 0 10)) (if (GEQ BOTTOM 0) then BOTTOM else (RAND 0 10)) (fetch (REGION WIDTH) of REGION) (fetch (REGION HEIGHT) of REGION)) NIL NIL T]) (DINFO.SHOWGRAPH [LAMBDA (GRAPHER.GRAPH DINFO.GRAPH) (* drc%: "27-Jan-86 16:15") (LET* [(GRAPH.REGION (GRAPHREGION GRAPHER.GRAPH)) (GRAPH.WINDOW (DINFO.GET.GRAPH.WINDOW DINFO.GRAPH GRAPH.REGION)) (WINDOW.REGION (WINDOWPROP GRAPH.WINDOW 'REGION] [SHAPEW GRAPH.WINDOW (LET [(LEFT (fetch (REGION LEFT) of WINDOW.REGION)) (BOTTOM (fetch (REGION BOTTOM) of WINDOW.REGION)) (HEIGHT (HEIGHTIFWINDOW (fetch (REGION HEIGHT) of GRAPH.REGION) T)) (WIDTH (WIDTHIFWINDOW (fetch (REGION WIDTH) of GRAPH.REGION] (create REGION LEFT _ LEFT BOTTOM _ BOTTOM HEIGHT _ (if (GEQ (IPLUS BOTTOM HEIGHT) SCREENHEIGHT) then (IDIFFERENCE SCREENHEIGHT BOTTOM) else HEIGHT) WIDTH _ (if (GEQ (IPLUS LEFT WIDTH) SCREENWIDTH) then (IDIFFERENCE SCREENWIDTH LEFT) else WIDTH] (SHOWGRAPH GRAPHER.GRAPH GRAPH.WINDOW (FUNCTION DINFO.UPDATE.FROM.GRAPH) (FUNCTION DINFO.UPDATE.FROM.GRAPH]) (DINFO.INVERT.NODE [LAMBDA (WINDOW DINFO.NODE DINFO.GRAPH) (* drc%: "25-Jan-86 18:24") (LET* ((NODE (for NODE in (fetch (GRAPH GRAPHNODES) of (WINDOWPROP WINDOW 'GRAPH)) thereis (EQ (fetch (GRAPHNODE NODEID) of NODE) DINFO.NODE))) (LAST.NODE (fetch (DINFOGRAPH LAST.INVERTED.NODE) of DINFO.GRAPH))) (replace (DINFOGRAPH LAST.INVERTED.NODE) of DINFO.GRAPH with NODE) (if (NEQ NODE LAST.NODE) then (replace (GRAPHNODE NODELABELSHADE) of NODE with BLACKSHADE) (* (PRINTDISPLAYNODE NODE  (create POSITION XCOORD _ 0 YCOORD _ 0)  WINDOW)) (replace (GRAPHNODE NODELABELSHADE) of LAST.NODE with WHITESHADE) (* (PRINTDISPLAYNODE LAST.NODE  (create POSITION XCOORD _ 0 YCOORD _ 0)  WINDOW)) (REDISPLAYW WINDOW) else (OPENW WINDOW]) (DINFO.LAYOUTGRAPH [LAMBDA (DINFO.GRAPH NODE) (* drc%: "25-Jan-86 18:20") (LET* [(WINDOW (fetch (DINFOGRAPH WINDOW) of DINFO.GRAPH)) (FONT (OR (FONTP (fetch (DINFOGRAPH MENUFONT) of DINFO.GRAPH)) MENUFONT)) (NODELST (fetch (DINFOGRAPH NODELST) of DINFO.GRAPH)) (CHILDREN (for ID in (fetch (DINFONODE CHILDREN) of NODE) collect (FASSOC ID NODELST))) [CHILD.GRAPHER.NODES (for CHILD in CHILDREN collect (create GRAPHNODE NODEID _ CHILD NODELABEL _ (fetch (DINFONODE LABEL) of CHILD] (GRAPHER.NODE (create GRAPHNODE NODELABELSHADE _ BLACKSHADE NODEID _ NODE TONODES _ CHILDREN NODELABEL _ (fetch (DINFONODE LABEL) of NODE] (replace (DINFOGRAPH LAST.INVERTED.NODE) of DINFO.GRAPH with GRAPHER.NODE) (* so DINFO.INVERT.NODE will work  right) (if (fetch (DINFONODE PARENT) of NODE) then (LET* ((PARENT (FASSOC (fetch (DINFONODE PARENT) of NODE) NODELST)) (SIBLINGS (for ID in (fetch (DINFONODE CHILDREN) of PARENT) collect (FASSOC ID NODELST))) [SIBLING.GRAPHER.NODES (for SIBLING in SIBLINGS collect (if (EQ (fetch (DINFONODE ID) of SIBLING) (fetch (DINFONODE ID) of NODE)) then GRAPHER.NODE else (create GRAPHNODE NODEID _ SIBLING NODELABEL _ (fetch (DINFONODE LABEL) of SIBLING] (PARENT.GRAPHER.NODE (create GRAPHNODE NODEID _ PARENT NODELABEL _ (fetch (DINFONODE LABEL) of PARENT) TONODES _ SIBLINGS))) (LAYOUTGRAPH (CONS PARENT.GRAPHER.NODE (NCONC SIBLING.GRAPHER.NODES CHILD.GRAPHER.NODES)) (LIST PARENT) NIL FONT)) else (LAYOUTGRAPH (CONS GRAPHER.NODE CHILD.GRAPHER.NODES) (LIST NODE) NIL FONT]) ) (DEFINEQ (DINFO.UPDATE.TEXT.DISPLAY [LAMBDA (GRAPH NODE SEL OFF?) (* drc%: "25-Jan-86 18:18") (LET ((WINDOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (FILENAME (DINFO.GET.FILENAME GRAPH NODE)) (FROM (fetch (DINFONODE FROMBYTE) of NODE)) (TO (fetch (DINFONODE TOBYTE) of NODE)) (PROPS (APPEND (LIST 'READONLY T 'NOTITLE T 'TITLEMENUFN 'DINFO.TITLEMENUFN) (fetch (DINFOGRAPH TEXTPROPS) of GRAPH))) (OLD.TEXTSTREAM (WINDOWPROP (fetch (DINFOGRAPH WINDOW) of GRAPH) 'TEXTSTREAM)) TEXTSTREAM FULLFILENAME) (* Default directory and host.) (if (OR OFF? (NULL FILENAME)) then (OPENTEXTSTREAM (if OFF? then "" else "This node has no text") WINDOW NIL NIL PROPS) (replace (DINFOGRAPH LAST.TEXT) of GRAPH with NIL) elseif (SETQ FULLFILENAME (MKATOM (INFILEP FILENAME))) then (SETQ TEXTSTREAM (DINFO.OPENTEXTSTREAM FULLFILENAME WINDOW FROM TO PROPS)) (DINFO.SHOWSEL TEXTSTREAM SEL) else (OPENTEXTSTREAM (CONCAT "Sorry, can't find the text for this node." (MKSTRING (CHARACTER (CHARCODE CR))) "Missing file is: " FILENAME) WINDOW NIL NIL PROPS) (replace (DINFOGRAPH LAST.TEXT) of GRAPH with NIL)) (CLOSEF? OLD.TEXTSTREAM) (WINDOWPROP WINDOW 'ICONFN 'DINFO.ICONFN) (WINDOWPROP WINDOW 'TEDIT.TITLEMENUFN 'DINFO.TITLEMENUFN]) (DINFO.TITLEMENUFN [LAMBDA (DINFOW) (* drc%: "25-Jan-86 18:19") (* * This is the TEdit TITLEMENUFN for a DInfo Window.  Uses the MENUFN of graph, defaulting to DINFO.DEFAULT.MENU.) (LET [(GRAPH (WINDOWPROP DINFOW 'DINFOGRAPH] (if (OBTAIN.MONITORLOCK (fetch (DINFOGRAPH MONITORLOCK) of GRAPH) T) then [LET ((MENUFN (fetch (DINFOGRAPH MENUFN) of GRAPH))) (if (FGETD MENUFN) then (OR (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH) (DINFO.ADD.FMENU GRAPH)) (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW)) (APPLY* MENUFN GRAPH)) else (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW)) (DINFO.DEFAULT.MENU GRAPH] else (FLASHWINDOW DINFOW) (PROMPTPRINT "DInfo is busy"]) (DINFO.OPENTEXTSTREAM [LAMBDA (FILE WINDOW FROM TO PROPS) (* drc%: "25-Jan-86 18:24") (RESETFORM (TTYDISPLAYSTREAM (GETPROMPTWINDOW WINDOW)) (LET ((TEXTSTREAM (WINDOWPROP WINDOW 'TEXTSTREAM)) (THIS.TEXT (LIST FILE FROM TO))) (if (AND (EQUAL THIS.TEXT (fetch (DINFOGRAPH LAST.TEXT) of (DINFOGRAPH WINDOW))) TEXTSTREAM) then (* Same text, and its still there, so  do nothing.) TEXTSTREAM else (AND TEXTSTREAM (TEDIT.KILL TEXTSTREAM)) (CLEARW T) (CLEARW WINDOW) [RESETSAVE NIL `(AND RESETSTATE (WINDOWPROP %, WINDOW 'LAST.TEXT NIL] (PRINTOUT T "Fetching text from " FILE "...") (PROG1 (OPENTEXTSTREAM FILE WINDOW FROM TO PROPS) (PRINTOUT T "OK.") (replace (DINFOGRAPH LAST.TEXT) of (DINFOGRAPH WINDOW) with THIS.TEXT]) (DINFO.SHOWSEL [LAMBDA (TEXTSTREAM SEL) (* drc%: "16-Jan-86 21:30") (if (LISTP SEL) then (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM (CADR SEL) 0)) elseif (STRINGP SEL) then [LET ((CHAR# (TEDIT.FIND TEXTSTREAM SEL))) (if CHAR# then (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM CHAR# (NCHARS SEL) NIL T] else (TEDIT.NORMALIZECARET TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM 0 0]) (DINFO.GET.FILENAME [LAMBDA (GRAPH NODE) (* drc%: "10-Jan-86 14:47") (* * returns the filename of the documentation for NODE in GRAPH.  Defaults HOST and DIRECTORY to that of graph) (LET ((FILE (fetch (DINFONODE FILE) of NODE))) (AND FILE (PACKFILENAME 'HOST (OR (FILENAMEFIELD FILE 'HOST) (fetch (DINFOGRAPH DEFAULTHOST) of GRAPH)) 'DEVICE (OR (FILENAMEFIELD FILE 'DEVICE) (fetch (DINFOGRAPH DEFAULTDEVICE) of GRAPH)) 'DIRECTORY (OR (FILENAMEFIELD FILE 'DIRECTORY) (fetch (DINFOGRAPH DEFAULTDIR) of GRAPH)) 'BODY FILE]) ) (ADDTOVAR BackgroundMenuCommands (DInfo (DINFO.SELECT.GRAPH) "Open a DInfo window for browsing documentation.")) (RPAQQ BackgroundMenu NIL) (RPAQ? DINFO.GRAPHS ) (RPAQ? DINFOMODES '(TEXT GRAPH)) (RPAQ? DINFO.HISTORY.LENGTH 20) (RPAQ? \DINFO.MAX.MENU.LEN 10) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DINFO.GRAPH.FILES DINFOMODES DINFO.HISTORY.LENGTH \DINFO.MAX.MENU.LEN) ) (PUTPROPS DINFO FILETYPE :COMPILE-FILE) (DECLARE%: DONTCOPY (SETTEMPLATE 'DINFOGRAPHPROP 'MACRO) ) (PUTPROPS DINFO COPYRIGHT ("Xerox Corporation" 1985 1986 1987 2020 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (7732 24558 (DINFO 7742 . 9356) (DINFO.UPDATE 9358 . 12222) (DINFOGRAPH 12224 . 12642) ( DINFO.SPECIAL.UPDATE 12644 . 14342) (DINFO.READ.GRAPH 14344 . 16199) (DINFO.WRITE.GRAPH 16201 . 17291) (DINFO.SELECT.GRAPH 17293 . 18200) (DINFO.DEFAULT.MENU 18202 . 20726) (DINFO.FIND 20728 . 23112) ( DINFO.LOOKUP 23114 . 24556)) (24559 27253 (DINFO.READ.KOTO.GRAPH 24569 . 27251)) (27254 29568 ( DINFO.SETUP.WINDOW 27264 . 27945) (DINFO.CLOSEFN 27947 . 28380) (DINFO.SHRINKFN 28382 . 28578) ( DINFO.EXPANDFN 28580 . 29137) (DINFO.ICONFN 29139 . 29566)) (29569 40417 (DINFO.ADD.FMENU 29579 . 30674) (DINFO.CREATE.FMENU 30676 . 34213) (DINFO.FMW.CLOSEFN 34215 . 35060) (DINFO.FMENU.HANDLER 35062 . 35701) (DINFO.UPDATE.FMENU 35703 . 37908) (DINFO.TOGGLE.MENU 37910 . 38500) (DINFO.TOGGLE.GRAPH 38502 . 39001) (DINFO.TOGGLE.HISTORY 39003 . 39547) (DINFO.TOGGLE.TEXT 39549 . 40415)) (40418 48116 ( DINFO.UPDATE.MENU.DISPLAY 40428 . 44448) (DINFO.UPDATE.FROM.MENU 44450 . 44749) (DINFO.UPDATE.HISTORY 44751 . 47285) (DINFO.HISTORIC.UPDATE 47287 . 48114)) (48117 58283 (DINFO.UPDATE.GRAPH.DISPLAY 48127 . 49445) (DINFO.UPDATE.FROM.GRAPH 49447 . 49890) (DINFO.GET.GRAPH.WINDOW 49892 . 50477) ( DINFO.CREATE.GRAPH.WINDOW 50479 . 51596) (DINFO.SHOWGRAPH 51598 . 53323) (DINFO.INVERT.NODE 53325 . 54713) (DINFO.LAYOUTGRAPH 54715 . 58281)) (58284 64140 (DINFO.UPDATE.TEXT.DISPLAY 58294 . 60155) ( DINFO.TITLEMENUFN 60157 . 61282) (DINFO.OPENTEXTSTREAM 61284 . 62500) (DINFO.SHOWSEL 62502 . 63235) ( DINFO.GET.FILENAME 63237 . 64138))))) STOP \ No newline at end of file diff --git a/lispusers/DINFO.LCOM b/lispusers/DINFO.LCOM index 0cd47c56b1760a43f48f182a4a706708b256d70b..fb87677cb12bce45ed1991af8c6c1cc3d6292470 100644 GIT binary patch delta 768 zcmb7?&x_MQ6vv5+uq@6(ZM!b+E(}pI5gMANsT!qg$d5LfCfPJy6$PnnY`aa9+E%HG zdexijyZSfip?5*>;zh)x3ZA@(3wrS8!P#zCs$TT=nD>3(_nGg^gYVSG&(x!Ji_fNX z|7t3e&hR)RNIWlz0*x8E7InIq8t4&5rO^yTstO|zt_SziM$u8y?K82yxF7N6L#kO>7n}>AaP1~Um;2;4nX5&x{q=OSX&n^^9 zjq|h%-bBm5lb}SztFuX1D|Ar{K(Oc^}^XyR$ZydLSfLlhpr+ zlS&mrd*IR|)qDUx073%7wc;D}8z2N1Brb>p2RQL&#_K!?_?e)8Z!%ll2`aQ_O=T5x+#l}Iu+pctW zkB{$H4m*d#L8aT?@3ik%gnc?}9}g>z7r4~8RnCL<@Ta%Ve=1NqSN9+OwUlBZx_6=q z8HSOA{oNCU*K*T=(hYO9Y?f~1@|x~?KCvTWG2(!@G(&UMEUvr|tp&*o*2=5vYp{2) z+q=^qg2um_dy~I2xZH%nar@q3|8yv6y=P+2CCT^0bto0hQpqf$EZPg|P&zZt6%Y8G zqbo1xLD%?$qb2_6X!(+oDG42H4y3agSz!(N{Cl*`fB59$IW${$cP_X=4Ei;=h3=1c z<9U_m*)(ti1Qbz?FLpv+UZ3Z0Y|L}sG5O=pr8$lN-l_9Hw-(Ua>fYp!&M%_%b=TvM zyRWmiO1bnMb%t#GDOJ+SHo0_qSyX257D zOwR#3i6Rm(;Xx9UNaO+|AG0u`A$IFVgw#opc#PCz@G0F+LN@?$l;XETTr2TejUwpC zc1Xjsv9^jhUIcX-c#K9qwYQb{hDe8|7dW&Dns8hiFmQ!sjE<#VnN#y(1Zc^;>?}@` zs-Qh{=vy%}1bxt?=>-iE;X)g-L3yNrk&MMW8bAiE8g!A95wpk(Hb>2lJe+>qicy3- zS`o2nAU4Af{^LVWKPC^m-Y%uujC0qixZrKr?T5B;n(AC08`+XXUUM(N=fHVuZED7#{ z=Oc}gSBR4^^gZH;_I$!X$0jYm;CjS&a67F4KYg4+2m%o=ksZ)&D@rq8agv_`17}&U ziW^Rp-B7AYM6ryx^eSia9`hP7kvz%D3)gd>K@?aGb<|S~PBB%7RRxSKguaEls833O ze)~FTlMKYCt~``_<#8)nP5NVP1P6RI2$SKWK-W;A*fY&^S>`QIK_FvIgqE{$V$dbb zM%XDHSy0xO*Aohxrro}tPNd1S8qH~zLVl!|oMFOXHmY1zQAQ?J z@SjCB|12?+I8{FxPj)eqQB->#HiAD{Zld<{COg(M#s5FG>0+?|KUeMPAtJX;vFT&1 zG1Sa#1g_c*90A&D8b~vbZ__&aZCIQu#)RQd11=jr%cr(lCS=F*t>*dbr_QUGk8e=> E4@m+z>Hq)$ From ac08f3ab1a215222346c5ce63af6036d245a33c2 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 17 Feb 2021 14:00:23 -0800 Subject: [PATCH 27/37] Added 2 lines in SCROLL.HANDLER in WINDOWSCROLL so that vertical and horizontal scrollbar windows are recognizable and recognizably related to their main windows. This allows WHEELSCROLL to provide better wheel-scrolling behavior --- sources/WINDOWSCROLL | 361 +++----------------------------------- sources/WINDOWSCROLL.LCOM | Bin 15468 -> 15321 bytes 2 files changed, 28 insertions(+), 333 deletions(-) diff --git a/sources/WINDOWSCROLL b/sources/WINDOWSCROLL index f874f61c..2be029a0 100644 --- a/sources/WINDOWSCROLL +++ b/sources/WINDOWSCROLL @@ -1,54 +1,4 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") -(FILECREATED "16-Feb-94 12:36:43" {DSK}nilsson>mnw>WINDOWSCROLL.;1 54529 - - changes to%: (FNS SCROLLW SCROLLBYREPAINTFN ADJUSTOFFSETS CREATESCROLLINGW IN/SCROLL/BAR? - RELDSPXOFFSET RELDSPYOFFSET SCROLL.HANDLER \SCROLL.HANDLER.DOIT - \DECODE.EXTENT.USE \UPDATE.EXTENT.IMAGE EXTENDPASTHORIZBOUNDARIES - EXTENDPASTVERTBOUNDARIES FILLWITHBACKGROUND UPDATE/SCROLL/REG WTODSX WTODSY - WXOFFSET WYOFFSET BITMAPSCROLLFN SCROLLBITMAP REDISPLAYBITMAP - ULREDISPLAYBITMAP EXTENDEXTENT WIDTHIFWINDOW HEIGHTIFWINDOW) - (VARS WINDOWSCROLLCOMS) - - previous date%: "29-Sep-93 14:57:22" {DSK}export>lispcore>sources>WINDOWSCROLL.;1) - - -(* ; " -Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights reserved. -") - -(PRETTYCOMPRINT WINDOWSCROLLCOMS) - -(RPAQQ WINDOWSCROLLCOMS - [ (* ; "Scrolling stuff") - (FNS SCROLLW SCROLLBYREPAINTFN ADJUSTOFFSETS CREATESCROLLINGW IN/SCROLL/BAR? RELDSPXOFFSET - RELDSPYOFFSET SCROLL.HANDLER \SCROLL.HANDLER.DOIT \DECODE.EXTENT.USE - \UPDATE.EXTENT.IMAGE EXTENDPASTHORIZBOUNDARIES EXTENDPASTVERTBOUNDARIES REDISPLAYW - FILLWITHBACKGROUND UPDATE/SCROLL/REG WTODSX WTODSY WXOFFSET WYOFFSET BITMAPSCROLLFN - SCROLLBITMAP REDISPLAYBITMAP ULREDISPLAYBITMAP EXTENDEXTENT WIDTHIFWINDOW HEIGHTIFWINDOW - ) - (* ; - "this function should be on LLDISPLAY but Ron has it checked out. Move it later - rrb.") - (FNS \DSPUNTRANSFORMREGION) - (CURSORS VertScrollCursor ScrollUpCursor ScrollDownCursor HorizScrollCursor ScrollLeftCursor - ScrollRightCursor VertThumbCursor HorizThumbCursor WAITINGCURSOR) - (GLOBALVARS \LastInWindow VertScrollCursor ScrollUpCursor ScrollDownCursor ScrollLeftCursor - ScrollRightCursor HorizScrollCursor) - (INITVARS (SCROLLBARWIDTH 24) - (SCROLLWAITTIME 100) - (SCROLLBARSHADE 32800) - (WAITBEFORESCROLLTIME 750) - (WAITBETWEENSCROLLTIME 100)) - (DECLARE%: DONTEVAL@LOAD DOCOPY (ADDVARS (GLOBALVARS SCROLLBARWIDTH SCROLLWAITTIME - SCROLLBARSHADE WAITBEFORESCROLLTIME - WAITBETWEENSCROLLTIME WAITINGCURSOR]) - - - -(* ; "Scrolling stuff") - -(DEFINEQ - -(SCROLLW +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "17-Feb-2021 13:49:06"  {DSK}kaplan>Local>medley3.5>git-medley>sources>WINDOWSCROLL.;2 54471 changes to%: (FNS SCROLL.HANDLER) previous date%: "16-Feb-94 12:36:43" {DSK}kaplan>Local>medley3.5>git-medley>sources>WINDOWSCROLL.;1) (* ; " Copyright (c) 1986, 1990, 1993, 1994, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT WINDOWSCROLLCOMS) (RPAQQ WINDOWSCROLLCOMS [ (* ; "Scrolling stuff") (FNS SCROLLW SCROLLBYREPAINTFN ADJUSTOFFSETS CREATESCROLLINGW IN/SCROLL/BAR? RELDSPXOFFSET RELDSPYOFFSET SCROLL.HANDLER \SCROLL.HANDLER.DOIT \DECODE.EXTENT.USE \UPDATE.EXTENT.IMAGE EXTENDPASTHORIZBOUNDARIES EXTENDPASTVERTBOUNDARIES REDISPLAYW FILLWITHBACKGROUND UPDATE/SCROLL/REG WTODSX WTODSY WXOFFSET WYOFFSET BITMAPSCROLLFN SCROLLBITMAP REDISPLAYBITMAP ULREDISPLAYBITMAP EXTENDEXTENT WIDTHIFWINDOW HEIGHTIFWINDOW ) (* ;  "this function should be on LLDISPLAY but Ron has it checked out. Move it later - rrb.") (FNS \DSPUNTRANSFORMREGION) (CURSORS VertScrollCursor ScrollUpCursor ScrollDownCursor HorizScrollCursor ScrollLeftCursor ScrollRightCursor VertThumbCursor HorizThumbCursor WAITINGCURSOR) (GLOBALVARS \LastInWindow VertScrollCursor ScrollUpCursor ScrollDownCursor ScrollLeftCursor ScrollRightCursor HorizScrollCursor) (INITVARS (SCROLLBARWIDTH 24) (SCROLLWAITTIME 100) (SCROLLBARSHADE 32800) (WAITBEFORESCROLLTIME 750) (WAITBETWEENSCROLLTIME 100)) (DECLARE%: DONTEVAL@LOAD DOCOPY (ADDVARS (GLOBALVARS SCROLLBARWIDTH SCROLLWAITTIME SCROLLBARSHADE WAITBEFORESCROLLTIME WAITBETWEENSCROLLTIME WAITINGCURSOR]) (* ; "Scrolling stuff") (DEFINEQ (SCROLLW [LAMBDA (WINDOW DX DY CONTINUOUSFLG) (* ; "Edited 16-Feb-94 11:58 by nilsson") (* ;; "scrolls a window by DX in the X direction and DY in the Y direction. If CONTINUOUSFLG is non-NIL, this is part of a continuous scroll so that the window scrolling function can decide for example to scroll a constant smount.") @@ -56,9 +6,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (\CHECKCARET WINDOW) (APPLY* (OR (fetch SCROLLFN of WINDOW) (FUNCTION SCROLLBYREPAINTFN)) - WINDOW DX DY CONTINUOUSFLG]) - -(SCROLLBYREPAINTFN + WINDOW DX DY CONTINUOUSFLG]) (SCROLLBYREPAINTFN [LAMBDA (WINDOW XDELTA YDELTA CONTINUOUSFLG) (* ; "Edited 16-Feb-94 12:26 by nilsson") (* ;; "standard scrolling function that scrolls by blting existing bits and then calling the windows repaintfn to repaint the newly exposed bits.") @@ -263,23 +211,17 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (IMIN (IMINUS YDELTA) ONSHEIGHT] T))) - (RETURN]) - -(ADJUSTOFFSETS + (RETURN]) (ADJUSTOFFSETS [LAMBDA (WINDOW XDELTA YDELTA) (* ; "Edited 16-Feb-94 12:27 by nilsson") (PROG [(DSP (WINDOWPROP WINDOW 'DSP] (* ;  "determine the change in offsets caused by the scroll. and redisplay the graph.") (WYOFFSET YDELTA DSP) (WXOFFSET XDELTA DSP) - (RETURN]) - -(CREATESCROLLINGW + (RETURN]) (CREATESCROLLINGW [LAMBDA (TITLE BORDER) (* ; "Edited 16-Feb-94 12:27 by nilsson") (WINDOWPROP (CREATEW NIL TITLE BORDER) 'SCROLLFN - (FUNCTION SCROLLBYREPAINTFN]) - -(IN/SCROLL/BAR? + (FUNCTION SCROLLBYREPAINTFN]) (IN/SCROLL/BAR? [LAMBDA (WINDOW X Y) (* ; "Edited 16-Feb-94 12:27 by nilsson") (* ;  "is X, Y in the scroll bar for WINDOW?") @@ -325,165 +267,15 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (T (\DECODE.EXTENT.USE EXTENTUSE))) 'LIMIT] (T (EXTENDPASTHORIZBOUNDARIES (DSPCLIPPINGREGION NIL WINDOW) - EXTENT]) - -(RELDSPXOFFSET + EXTENT]) (RELDSPXOFFSET [LAMBDA (DX DISPLAYSTREAM) (* ; "Edited 16-Feb-94 12:28 by nilsson") (* ; "relative offsetting function.") (DSPXOFFSET (IPLUS DX (DSPXOFFSET NIL DISPLAYSTREAM)) - DISPLAYSTREAM]) - -(RELDSPYOFFSET + DISPLAYSTREAM]) (RELDSPYOFFSET [LAMBDA (DY DISPLAYSTREAM) (* ; "Edited 16-Feb-94 12:28 by nilsson") (* ; "relative offsetting function.") (DSPYOFFSET (IPLUS DY (DSPYOFFSET NIL DISPLAYSTREAM)) - DISPLAYSTREAM]) - -(SCROLL.HANDLER - [LAMBDA (WINDOW) (* ; "Edited 16-Feb-94 12:29 by nilsson") - - (* ;; "cursor has moved into scroll region. region of a window that has a scrollfn and has been IN/SCROLL/BAR? Handle interaction to determine type of scroll, if any, desired.") - (* ; - "returns non-NIL if scrolling was applicable.") - (PROG (SCROLLREG SCROLLW BUTTON DIRECTION SCROLLCURSOR LEFTCURSOR RIGHTCURSOR MIDDLECURSOR - TIMEDOWN CONTINUOUSSCROLL? TIMEIN TIMEINTIMER) - (* ; - "create a window as the easiest thing to do. Fairly inefficient.") - - (* ;; "if the main window is not open, it was probably closed before we got control here. Don't do anything.") - - (OR (OPENWP WINDOW) - (RETURN)) - (GETMOUSESTATE) - (COND - ((AND (INSIDE? (SETQ SCROLLREG (fetch (WINDOW VERTSCROLLREG) of WINDOW)) - LASTMOUSEX LASTMOUSEY) - (PROGN (DISMISS SCROLLWAITTIME) - (GETMOUSESTATE) - (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY))) - [COND - ((SETQ SCROLLW (fetch (WINDOW VERTSCROLLWINDOW) of WINDOW)) - (* ; - "if there is one already, reopen it.") - (OPENW SCROLLW)) - ((SETQ SCROLLW (replace (WINDOW VERTSCROLLWINDOW) of WINDOW - with (CREATEW SCROLLREG NIL 2] - (SETQ DIRECTION 'VERT) - (SETQ SCROLLCURSOR VertScrollCursor) - (SETQ LEFTCURSOR ScrollUpCursor) - (SETQ RIGHTCURSOR ScrollDownCursor) - (SETQ MIDDLECURSOR VertThumbCursor)) - ((AND (INSIDE? (SETQ SCROLLREG (fetch (WINDOW HORIZSCROLLREG) of WINDOW)) - LASTMOUSEX LASTMOUSEY) - (PROGN (DISMISS SCROLLWAITTIME) - (GETMOUSESTATE) - (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY))) - [COND - ((SETQ SCROLLW (fetch (WINDOW HORIZSCROLLWINDOW) of WINDOW)) - (* ; - "if there is one already, reopen it.") - (OPENW SCROLLW)) - ((SETQ SCROLLW (replace (WINDOW HORIZSCROLLWINDOW) of WINDOW - with (CREATEW SCROLLREG NIL 2] - (SETQ DIRECTION 'HORIZ) - (SETQ SCROLLCURSOR HorizScrollCursor) - (SETQ LEFTCURSOR ScrollLeftCursor) - (SETQ MIDDLECURSOR HorizThumbCursor) - (SETQ RIGHTCURSOR ScrollRightCursor)) - (T (* ; "moved out quickly") - (RETURN NIL))) - (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW) - - (* ;; "set up the timer for when to bring the window to the top. This gives the user a chance to notice that the scroll bar has come up and get out of it if it was unintentional.") - - (SETQ TIMEIN (SETUPTIMER 1200)) - (RETURN (RESETFORM (CURSOR SCROLLCURSOR) - (PROG NIL - LP (GETMOUSESTATE) - (COND - ((NOT (OPENWP WINDOW)) (* ; - "the user closed the window, quit.") - (CLOSEW SCROLLW) - (SETQ \LastInWindow NIL) - (RETURN T))) - (COND - ((AND TIMEIN (TIMEREXPIRED? TIMEIN)) - - (* ;; "after a little while, bring the window to the top. This avoids bringing it up if nothing is happening.") - - (SETQ TIMEIN NIL) - (TOTOPW WINDOW))) - (COND - ((NOT (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY)) - (* ; - "if cursor is no longer in scroll region quit.") - (CLOSEW SCROLLW) - - (* ;; "if the mouse is in the window, set last in window so window will get control again. If it is outside, don't set it so that the cursoroutfn for WINDOW will get called.") - - (AND (INSIDE? (WINDOWPROP WINDOW 'REGION) - LASTMOUSEX LASTMOUSEY) - (SETQ \LastInWindow NIL)) - (RETURN T))) (* ; - "bring the scroll window to the top so that it will be visible.") - (TOTOPW SCROLLW) - [COND - [(LASTMOUSESTATE UP) (* ; - "no buttons down; if there was one down, take action; otherwise, wait for one to go down.") - (COND - (BUTTON (COND - (CONTINUOUSSCROLL? - (* ; - "were continuously scrolling, stop it.") - (SETQ CONTINUOUSSCROLL? NIL)) - (T (\SCROLL.HANDLER.DOIT WINDOW BUTTON DIRECTION - SCROLLREG LASTMOUSEX LASTMOUSEY) - (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION - WINDOW))) - (CURSOR SCROLLCURSOR) - (SETQ BUTTON) (* ; - "if a button went up, reset the timedown for scrolling.") - (SETQ TIMEDOWN) - (SETQ CONTINUOUSSCROLL? NIL)) - (T (BLOCK] - [(LASTMOUSESTATE (OR LEFT RIGHT)) - (COND - ((AND (LASTMOUSESTATE LEFT) - (NEQ BUTTON 'LEFT)) - (* ; "LEFT button just when down.") - (SETQ BUTTON 'LEFT) - (SETQ TIMEDOWN (CLOCK 0)) - (CURSOR LEFTCURSOR)) - ((AND (LASTMOUSESTATE RIGHT) - (NEQ BUTTON 'RIGHT)) - (* ; "RIGHT button just when down.") - (SETQ BUTTON 'RIGHT) - (SETQ TIMEDOWN (CLOCK 0)) - (CURSOR RIGHTCURSOR)) - ((AND CONTINUOUSSCROLL? (\CLOCKGREATERP TIMEDOWN - WAITBETWEENSCROLLTIME)) - (* ; - "button is still down, keep scrolling.") - (* ; - "note time before calling scroll fn so time to display is included in the wait time.") - (SETQ TIMEDOWN (\CLOCK0 TIMEDOWN)) - (\SCROLL.HANDLER.DOIT WINDOW BUTTON DIRECTION SCROLLREG - LASTMOUSEX LASTMOUSEY T) - (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW)) - ((\CLOCKGREATERP TIMEDOWN WAITBEFORESCROLLTIME) - (* ; - "has enough time past to start continuous scroll?") - (SETQ CONTINUOUSSCROLL? T] - ((LASTMOUSESTATE MIDDLE) - (COND - ((NEQ BUTTON 'MIDDLE) (* ; "MIDDLE button just when down.") - (SETQ BUTTON 'MIDDLE) (* ; - "don't keep track of time down for middle buttons.") - (CURSOR MIDDLECURSOR)) - (T NIL] - (GO LP]) - -(\SCROLL.HANDLER.DOIT + DISPLAYSTREAM]) (SCROLL.HANDLER [LAMBDA (WINDOW) (* ; "Edited 17-Feb-2021 13:48 by rmk:") (* ;  "Edited 16-Feb-94 12:29 by nilsson") (* ;; "cursor has moved into scroll region. region of a window that has a scrollfn and has been IN/SCROLL/BAR? Handle interaction to determine type of scroll, if any, desired.") (* ;  "returns non-NIL if scrolling was applicable.") (PROG (SCROLLREG SCROLLW BUTTON DIRECTION SCROLLCURSOR LEFTCURSOR RIGHTCURSOR MIDDLECURSOR TIMEDOWN CONTINUOUSSCROLL? TIMEIN TIMEINTIMER) (* ;  "create a window as the easiest thing to do. Fairly inefficient.") (* ;; "if the main window is not open, it was probably closed before we got control here. Don't do anything.") (OR (OPENWP WINDOW) (RETURN)) (GETMOUSESTATE) (COND ((AND (INSIDE? (SETQ SCROLLREG (fetch (WINDOW VERTSCROLLREG) of WINDOW)) LASTMOUSEX LASTMOUSEY) (PROGN (DISMISS SCROLLWAITTIME) (GETMOUSESTATE) (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY))) [COND ((SETQ SCROLLW (fetch (WINDOW VERTSCROLLWINDOW) of WINDOW)) (* ;  "if there is one already, reopen it.") (OPENW SCROLLW)) ((SETQ SCROLLW (replace (WINDOW VERTSCROLLWINDOW) of WINDOW with (CREATEW SCROLLREG NIL 2))) (* ;;  "RMK: So that the scroll bar is recognizable and connected (unreferenced) to its scrollee window") (WINDOWPROP SCROLLW 'VERTICALSCROLLBARFOR (LOC WINDOW] (SETQ DIRECTION 'VERT) (SETQ SCROLLCURSOR VertScrollCursor) (SETQ LEFTCURSOR ScrollUpCursor) (SETQ RIGHTCURSOR ScrollDownCursor) (SETQ MIDDLECURSOR VertThumbCursor)) ((AND (INSIDE? (SETQ SCROLLREG (fetch (WINDOW HORIZSCROLLREG) of WINDOW)) LASTMOUSEX LASTMOUSEY) (PROGN (DISMISS SCROLLWAITTIME) (GETMOUSESTATE) (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY))) [COND ((SETQ SCROLLW (fetch (WINDOW HORIZSCROLLWINDOW) of WINDOW)) (* ;  "if there is one already, reopen it.") (OPENW SCROLLW)) ((SETQ SCROLLW (replace (WINDOW HORIZSCROLLWINDOW) of WINDOW with (CREATEW SCROLLREG NIL 2))) (WINDOWPROP SCROLLW 'HORIZONTALSCROLLBARFOR (LOC WINDOW] (SETQ DIRECTION 'HORIZ) (SETQ SCROLLCURSOR HorizScrollCursor) (SETQ LEFTCURSOR ScrollLeftCursor) (SETQ MIDDLECURSOR HorizThumbCursor) (SETQ RIGHTCURSOR ScrollRightCursor)) (T (* ; "moved out quickly") (RETURN NIL))) (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW) (* ;; "set up the timer for when to bring the window to the top. This gives the user a chance to notice that the scroll bar has come up and get out of it if it was unintentional.") (SETQ TIMEIN (SETUPTIMER 1200)) (RETURN (RESETFORM (CURSOR SCROLLCURSOR) (PROG NIL LP (GETMOUSESTATE) (COND ((NOT (OPENWP WINDOW)) (* ;  "the user closed the window, quit.") (CLOSEW SCROLLW) (SETQ \LastInWindow NIL) (RETURN T))) (COND ((AND TIMEIN (TIMEREXPIRED? TIMEIN)) (* ;; "after a little while, bring the window to the top. This avoids bringing it up if nothing is happening.") (SETQ TIMEIN NIL) (TOTOPW WINDOW))) (COND ((NOT (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY)) (* ;  "if cursor is no longer in scroll region quit.") (CLOSEW SCROLLW) (* ;; "if the mouse is in the window, set last in window so window will get control again. If it is outside, don't set it so that the cursoroutfn for WINDOW will get called.") (AND (INSIDE? (WINDOWPROP WINDOW 'REGION) LASTMOUSEX LASTMOUSEY) (SETQ \LastInWindow NIL)) (RETURN T))) (* ;  "bring the scroll window to the top so that it will be visible.") (TOTOPW SCROLLW) [COND [(LASTMOUSESTATE UP) (* ;  "no buttons down; if there was one down, take action; otherwise, wait for one to go down.") (COND (BUTTON (COND (CONTINUOUSSCROLL? (* ;  "were continuously scrolling, stop it.") (SETQ CONTINUOUSSCROLL? NIL)) (T (\SCROLL.HANDLER.DOIT WINDOW BUTTON DIRECTION SCROLLREG LASTMOUSEX LASTMOUSEY) (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW))) (CURSOR SCROLLCURSOR) (SETQ BUTTON) (* ;  "if a button went up, reset the timedown for scrolling.") (SETQ TIMEDOWN) (SETQ CONTINUOUSSCROLL? NIL)) (T (BLOCK] [(LASTMOUSESTATE (OR LEFT RIGHT)) (COND ((AND (LASTMOUSESTATE LEFT) (NEQ BUTTON 'LEFT)) (* ; "LEFT button just when down.") (SETQ BUTTON 'LEFT) (SETQ TIMEDOWN (CLOCK 0)) (CURSOR LEFTCURSOR)) ((AND (LASTMOUSESTATE RIGHT) (NEQ BUTTON 'RIGHT)) (* ; "RIGHT button just when down.") (SETQ BUTTON 'RIGHT) (SETQ TIMEDOWN (CLOCK 0)) (CURSOR RIGHTCURSOR)) ((AND CONTINUOUSSCROLL? (\CLOCKGREATERP TIMEDOWN WAITBETWEENSCROLLTIME)) (* ;  "button is still down, keep scrolling.") (* ;  "note time before calling scroll fn so time to display is included in the wait time.") (SETQ TIMEDOWN (\CLOCK0 TIMEDOWN)) (\SCROLL.HANDLER.DOIT WINDOW BUTTON DIRECTION SCROLLREG LASTMOUSEX LASTMOUSEY T) (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW)) ((\CLOCKGREATERP TIMEDOWN WAITBEFORESCROLLTIME) (* ;  "has enough time past to start continuous scroll?") (SETQ CONTINUOUSSCROLL? T] ((LASTMOUSESTATE MIDDLE) (COND ((NEQ BUTTON 'MIDDLE) (* ; "MIDDLE button just when down.") (SETQ BUTTON 'MIDDLE) (* ;  "don't keep track of time down for middle buttons.") (CURSOR MIDDLECURSOR)) (T NIL] (GO LP]) (\SCROLL.HANDLER.DOIT [LAMBDA (WINDOW BUTTON DIRECTION SCROLLREGION XPOS YPOS CONTINUOUS?) (* ; "Edited 16-Feb-94 12:29 by nilsson") @@ -548,9 +340,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (IPLUS 4 SIZEOFORIGIN]) (SHOULDNT))) (T 0)) - CONTINUOUS?]) - -(\DECODE.EXTENT.USE + CONTINUOUS?]) (\DECODE.EXTENT.USE [LAMBDA (EXTENTUSE) (* ; "Edited 16-Feb-94 12:30 by nilsson") (* ;;; "decodes an indicator of how the extent should be used to limit scrolling.") @@ -560,9 +350,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r ((LIMIT T + - +-) EXTENTUSE) (-+ '+-) - T]) - -(\UPDATE.EXTENT.IMAGE + T]) (\UPDATE.EXTENT.IMAGE [LAMBDA (SCROLLBARW DIRECTION SCROLLINGW) (* ; "Edited 16-Feb-94 12:32 by nilsson") (* ;  "paints the appropriate grey region in the scrolling bar window.") @@ -634,40 +422,30 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r 'TEXTURE 'REPLACE (OR (TEXTUREP SCROLLBARSHADE) - 32800]) - -(EXTENDPASTHORIZBOUNDARIES + 32800]) (EXTENDPASTHORIZBOUNDARIES [LAMBDA (VIEW EXTENT) (* ; "Edited 16-Feb-94 12:32 by nilsson") (* ;  "does VIEW entirely cover the hoizontal dimensions of EXTENT?") (OR (IGREATERP (fetch (REGION LEFT) of VIEW) (fetch (REGION LEFT) of EXTENT)) (IGREATERP (fetch (REGION RIGHT) of EXTENT) - (fetch (REGION RIGHT) of VIEW]) - -(EXTENDPASTVERTBOUNDARIES + (fetch (REGION RIGHT) of VIEW]) (EXTENDPASTVERTBOUNDARIES [LAMBDA (VIEW EXTENT) (* ; "Edited 16-Feb-94 12:33 by nilsson") (* ;  "does VIEW entirely cover the vertical dimensions of EXTENT?") (OR (IGREATERP (fetch (REGION BOTTOM) of VIEW) (fetch (REGION BOTTOM) of EXTENT)) (IGREATERP (fetch (REGION TOP) of EXTENT) - (fetch (REGION TOP) of VIEW]) - -(REDISPLAYW + (fetch (REGION TOP) of VIEW]) (REDISPLAYW [LAMBDA (WINDOW REGION ALWAYSFLG) (WINDOWOP 'REDISPLAYFN (fetch (WINDOW SCREEN) of WINDOW) - WINDOW REGION ALWAYSFLG]) - -(FILLWITHBACKGROUND + WINDOW REGION ALWAYSFLG]) (FILLWITHBACKGROUND [LAMBDA (WIN REG) (* ; "Edited 16-Feb-94 12:33 by nilsson") (* ;  "fills a window with its background. This is the default window repainting function.") (DSPFILL REG (DSPTEXTURE NIL WIN) 'REPLACE - (WINDOWPROP WIN 'DSP]) - -(UPDATE/SCROLL/REG + (WINDOWPROP WIN 'DSP]) (UPDATE/SCROLL/REG [LAMBDA (WINDOW) (* ; "Edited 16-Feb-94 12:34 by nilsson") (* ;  "updates the scroll region field of the WINDOW") @@ -706,23 +484,17 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r of IMAGEREG) SCROLLBARWIDTH)) WIDTH _ (fetch (REGION WIDTH) of IMAGEREG) - HEIGHT _ SCROLLBARWIDTH]) - -(WTODSX + HEIGHT _ SCROLLBARWIDTH]) (WTODSX [LAMBDA (WX WINDOW) (* ; "Edited 16-Feb-94 12:34 by nilsson") (* ;; "converts from the window natural coordinates which have 0,0 at lower left corner of the window and the displaystreams coordinates.") - (IPLUS WX (fetch (REGION LEFT) of (DSPCLIPPINGREGION NIL (fetch DSP of WINDOW]) - -(WTODSY + (IPLUS WX (fetch (REGION LEFT) of (DSPCLIPPINGREGION NIL (fetch DSP of WINDOW]) (WTODSY [LAMBDA (WY WINDOW) (* ; "Edited 16-Feb-94 12:34 by nilsson") (* ;; "converts from the window natural coordinates which have 0,0 at lower left corner of the window and the displaystreams coordinates.") - (IPLUS WY (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL (fetch DSP of WINDOW]) - -(WXOFFSET + (IPLUS WY (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL (fetch DSP of WINDOW]) (WXOFFSET [LAMBDA (DX WINDOW) (* ; "Edited 16-Feb-94 12:26 by nilsson") (* ;; "offsets a displaystream by a given delta but leaves its clipping region where it was. Used for offsetting display streams under window.") @@ -738,9 +510,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (add (fetch (REGION LEFT) of CR) (IMINUS DX)) (* ;  "recall DSPCLIPPINGREGION to update dependent fields in DS.") - (DSPCLIPPINGREGION CR DS))))]) - -(WYOFFSET + (DSPCLIPPINGREGION CR DS))))]) (WYOFFSET [LAMBDA (DY WINDOW) (* ; "Edited 16-Feb-94 12:26 by nilsson") (* ;; "offsets a displaystream by a given delta but leaves its clipping region where it was. Used for offsetting display streams under window.") @@ -756,15 +526,11 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (add (fetch (REGION BOTTOM) of CR) (IMINUS DY)) (* ;  "recall DSPCLIPPINGREGION to update dependent fields in DS.") - (DSPCLIPPINGREGION CR DS))))]) - -(BITMAPSCROLLFN + (DSPCLIPPINGREGION CR DS))))]) (BITMAPSCROLLFN [LAMBDA (WINDOW XDELTA YDELTA) (* ; "Edited 16-Feb-94 12:34 by nilsson") (* ; "scrolls a bitmap under a window") (SCROLLBITMAP (WINDOWPROP WINDOW 'BITMAP) - WINDOW XDELTA YDELTA]) - -(SCROLLBITMAP + WINDOW XDELTA YDELTA]) (SCROLLBITMAP [LAMBDA (BITMAP WINDOW XDELTA YDELTA) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;  "scrolls a bitmap under a window.") @@ -785,9 +551,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (IDIFFERENCE (fetch (REGION WIDTH) of REGION) (fetch (BITMAP BITMAPWIDTH) of BITMAP))) DSP) (* ; "stuff new image over old") - (BITBLT BITMAP 0 0 DSP]) - -(REDISPLAYBITMAP + (BITBLT BITMAP 0 0 DSP]) (REDISPLAYBITMAP [LAMBDA (BITMAP WINDOW) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;; "blts a bitmap into a window so that the lower left corner of the bitmap is in the lower left corner of the window.") @@ -798,9 +562,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r WREGION) (SETQ WREGION (DSPCLIPPINGREGION NIL DSP)) (RETURN (BITBLT BITMAP 0 0 DSP (fetch (REGION LEFT) of WREGION) - (fetch (REGION BOTTOM) of WREGION]) - -(ULREDISPLAYBITMAP + (fetch (REGION BOTTOM) of WREGION]) (ULREDISPLAYBITMAP [LAMBDA (BITMAP WNEW) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;; "blts a bitmap into a window so that the upper left corner of the bitmap is in the upper left corner of the window.") @@ -813,24 +575,18 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (RETURN (BITBLT BITMAP 0 0 DSP (fetch (REGION LEFT) of REGION) (IDIFFERENCE (IPLUS (fetch (REGION BOTTOM) of REGION) (fetch (REGION HEIGHT) of REGION)) - (fetch BITMAPHEIGHT of BITMAP]) - -(EXTENDEXTENT + (fetch BITMAPHEIGHT of BITMAP]) (EXTENDEXTENT [LAMBDA (WINDOW INCLUDEREGION) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;  "destructively changes the EXTENT region of a WINDOW to include INCLUDEREGION") (PROG [(EXTENT (WINDOWPROP WINDOW 'EXTENT] (RETURN (COND (EXTENT (EXTENDREGION EXTENT INCLUDEREGION)) - (T (WINDOWPROP WINDOW 'EXTENT (create REGION using INCLUDEREGION]) - -(WIDTHIFWINDOW + (T (WINDOWPROP WINDOW 'EXTENT (create REGION using INCLUDEREGION]) (WIDTHIFWINDOW [LAMBDA (INTERIORWIDTH BORDER) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;  "returns the exterior width of a window with interior dimension INTERIORWIDTH") - (IPLUS INTERIORWIDTH (ITIMES 2 (OR BORDER WBorder]) - -(HEIGHTIFWINDOW + (IPLUS INTERIORWIDTH (ITIMES 2 (OR BORDER WBorder]) (HEIGHTIFWINDOW [LAMBDA (INTERIORHEIGHT TITLEFLG BORDER SCREEN) (* ; "Edited 16-Feb-94 12:36 by nilsson") (* ;  "returns the exterior height of a window which has interior height dimension INTERIORHEIGHT") @@ -839,16 +595,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r [TITLEFLG (IMINUS (DSPLINEFEED NIL (fetch (SCREEN SCTITLEDS) of SCREEN] (T 0)) - (ITIMES 2 (OR BORDER WBorder]) -) - - - -(* ; "this function should be on LLDISPLAY but Ron has it checked out. Move it later - rrb.") - -(DEFINEQ - -(\DSPUNTRANSFORMREGION + (ITIMES 2 (OR BORDER WBorder]) ) (* ; "this function should be on LLDISPLAY but Ron has it checked out. Move it later - rrb.") (DEFINEQ (\DSPUNTRANSFORMREGION [LAMBDA (REGION DISPLAYDATA) (* rmk%: "30-AUG-83 13:19") (* translates a region from  destination coordinates into display @@ -858,56 +605,4 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (\DSPUNTRANSFORMY (fetch (REGION BOTTOM) of REGION) DISPLAYDATA) (fetch (REGION WIDTH) of REGION) - (fetch (REGION HEIGHT) of REGION]) -) -(RPAQ VertScrollCursor (CURSORCREATE (QUOTE #*(16 16)@A@@@CH@@CH@@GL@@GL@@ON@@CH@@CH@@CH@@CH@@ON@@GL@@GL@@CH@@CH@@A@@ -) (QUOTE NIL) 7 15)) -(RPAQ ScrollUpCursor (CURSORCREATE (QUOTE #*(16 16)@A@@@CH@@CH@@GL@@GL@@ON@@ON@AOO@AOO@@CH@@CH@@CH@@CH@@CH@@CH@@CH@ -) (QUOTE NIL) 7 15)) -(RPAQ ScrollDownCursor (CURSORCREATE (QUOTE #*(16 16)@CH@@CH@@CH@@CH@@CH@@CH@@CH@AOO@AOO@@ON@@ON@@GL@@GL@@CH@@CH@@A@@ -) (QUOTE NIL) 7 15)) -(RPAQ HorizScrollCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@HB@AHC@CHCHGHCLOOONOOONGHCLCHCHAHC@@HB@ -) (QUOTE NIL) 7 5)) -(RPAQ ScrollLeftCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@@H@@CH@@OH@COH@OOOOOOOOCOH@@OH@@CH@@@H@ -) (QUOTE NIL) 8 5)) -(RPAQ ScrollRightCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@A@@@AL@@AO@@AOLOOOOOOOO@AOL@AO@@AL@@A@@ -) (QUOTE NIL) 7 5)) -(RPAQ VertThumbCursor (CURSORCREATE (QUOTE #*(16 16)@@@@OH@@@@@@OO@@@@@@OON@@@@@OOOH@@@@OON@@@@@OO@@@@@@OH@@@@@@@@@@ -) (QUOTE NIL) 6 8)) -(RPAQ HorizThumbCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@B@@@B@@@JH@@JH@@JH@BJJ@BJJ@BJJ@JJJHJJJHJJJHJJJHJJJH -) (QUOTE NIL) 6 6)) -(RPAQ WAITINGCURSOR (CURSORCREATE (QUOTE #*(16 16)OOONL@@FF@ALCMGHAOO@@ON@@FL@@CH@@BH@@FL@@MF@AIC@CGMHFGNLOOONOOON -) (QUOTE NIL) 7 8)) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS \LastInWindow VertScrollCursor ScrollUpCursor ScrollDownCursor ScrollLeftCursor - ScrollRightCursor HorizScrollCursor) -) - -(RPAQ? SCROLLBARWIDTH 24) - -(RPAQ? SCROLLWAITTIME 100) - -(RPAQ? SCROLLBARSHADE 32800) - -(RPAQ? WAITBEFORESCROLLTIME 750) - -(RPAQ? WAITBETWEENSCROLLTIME 100) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(ADDTOVAR GLOBALVARS SCROLLBARWIDTH SCROLLWAITTIME SCROLLBARSHADE WAITBEFORESCROLLTIME - WAITBETWEENSCROLLTIME WAITINGCURSOR) -) -(PUTPROPS WINDOWSCROLL COPYRIGHT ("Venue & Xerox Corporation" 1986 1990 1993 1994)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (2653 51801 (SCROLLW 2663 . 3186) (SCROLLBYREPAINTFN 3188 . 16871) (ADJUSTOFFSETS 16873 - . 17264) (CREATESCROLLINGW 17266 . 17497) (IN/SCROLL/BAR? 17499 . 20160) (RELDSPXOFFSET 20162 . 20473 -) (RELDSPYOFFSET 20475 . 20786) (SCROLL.HANDLER 20788 . 30242) (\SCROLL.HANDLER.DOIT 30244 . 34675) ( -\DECODE.EXTENT.USE 34677 . 35019) (\UPDATE.EXTENT.IMAGE 35021 . 40034) (EXTENDPASTHORIZBOUNDARIES -40036 . 40575) (EXTENDPASTVERTBOUNDARIES 40577 . 41115) (REDISPLAYW 41117 . 41274) (FILLWITHBACKGROUND - 41276 . 41672) (UPDATE/SCROLL/REG 41674 . 44559) (WTODSX 44561 . 44927) (WTODSY 44929 . 45297) ( -WXOFFSET 45299 . 46264) (WYOFFSET 46266 . 47235) (BITMAPSCROLLFN 47237 . 47550) (SCROLLBITMAP 47552 . -48907) (REDISPLAYBITMAP 48909 . 49506) (ULREDISPLAYBITMAP 49508 . 50280) (EXTENDEXTENT 50282 . 50813) -(WIDTHIFWINDOW 50815 . 51170) (HEIGHTIFWINDOW 51172 . 51799)) (51904 52636 (\DSPUNTRANSFORMREGION -51914 . 52634))))) -STOP + (fetch (REGION HEIGHT) of REGION]) ) (RPAQ VertScrollCursor (CURSORCREATE (QUOTE #*(16 16)@A@@@CH@@CH@@GL@@GL@@ON@@CH@@CH@@CH@@CH@@ON@@GL@@GL@@CH@@CH@@A@@ ) (QUOTE NIL) 7 15)) (RPAQ ScrollUpCursor (CURSORCREATE (QUOTE #*(16 16)@A@@@CH@@CH@@GL@@GL@@ON@@ON@AOO@AOO@@CH@@CH@@CH@@CH@@CH@@CH@@CH@ ) (QUOTE NIL) 7 15)) (RPAQ ScrollDownCursor (CURSORCREATE (QUOTE #*(16 16)@CH@@CH@@CH@@CH@@CH@@CH@@CH@AOO@AOO@@ON@@ON@@GL@@GL@@CH@@CH@@A@@ ) (QUOTE NIL) 7 15)) (RPAQ HorizScrollCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@HB@AHC@CHCHGHCLOOONOOONGHCLCHCHAHC@@HB@ ) (QUOTE NIL) 7 5)) (RPAQ ScrollLeftCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@@H@@CH@@OH@COH@OOOOOOOOCOH@@OH@@CH@@@H@ ) (QUOTE NIL) 8 5)) (RPAQ ScrollRightCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@A@@@AL@@AO@@AOLOOOOOOOO@AOL@AO@@AL@@A@@ ) (QUOTE NIL) 7 5)) (RPAQ VertThumbCursor (CURSORCREATE (QUOTE #*(16 16)@@@@OH@@@@@@OO@@@@@@OON@@@@@OOOH@@@@OON@@@@@OO@@@@@@OH@@@@@@@@@@ ) (QUOTE NIL) 6 8)) (RPAQ HorizThumbCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@B@@@B@@@JH@@JH@@JH@BJJ@BJJ@BJJ@JJJHJJJHJJJHJJJHJJJH ) (QUOTE NIL) 6 6)) (RPAQ WAITINGCURSOR (CURSORCREATE (QUOTE #*(16 16)OOONL@@FF@ALCMGHAOO@@ON@@FL@@CH@@BH@@FL@@MF@AIC@CGMHFGNLOOONOOON ) (QUOTE NIL) 7 8)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \LastInWindow VertScrollCursor ScrollUpCursor ScrollDownCursor ScrollLeftCursor ScrollRightCursor HorizScrollCursor) ) (RPAQ? SCROLLBARWIDTH 24) (RPAQ? SCROLLWAITTIME 100) (RPAQ? SCROLLBARSHADE 32800) (RPAQ? WAITBEFORESCROLLTIME 750) (RPAQ? WAITBETWEENSCROLLTIME 100) (DECLARE%: DONTEVAL@LOAD DOCOPY (ADDTOVAR GLOBALVARS SCROLLBARWIDTH SCROLLWAITTIME SCROLLBARSHADE WAITBEFORESCROLLTIME WAITBETWEENSCROLLTIME WAITINGCURSOR) ) (PUTPROPS WINDOWSCROLL COPYRIGHT ("Venue & Xerox Corporation" 1986 1990 1993 1994 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (2131 51738 (SCROLLW 2141 . 2664) (SCROLLBYREPAINTFN 2666 . 16349) (ADJUSTOFFSETS 16351 . 16742) (CREATESCROLLINGW 16744 . 16975) (IN/SCROLL/BAR? 16977 . 19638) (RELDSPXOFFSET 19640 . 19951 ) (RELDSPYOFFSET 19953 . 20264) (SCROLL.HANDLER 20266 . 30179) (\SCROLL.HANDLER.DOIT 30181 . 34612) ( \DECODE.EXTENT.USE 34614 . 34956) (\UPDATE.EXTENT.IMAGE 34958 . 39971) (EXTENDPASTHORIZBOUNDARIES 39973 . 40512) (EXTENDPASTVERTBOUNDARIES 40514 . 41052) (REDISPLAYW 41054 . 41211) (FILLWITHBACKGROUND 41213 . 41609) (UPDATE/SCROLL/REG 41611 . 44496) (WTODSX 44498 . 44864) (WTODSY 44866 . 45234) ( WXOFFSET 45236 . 46201) (WYOFFSET 46203 . 47172) (BITMAPSCROLLFN 47174 . 47487) (SCROLLBITMAP 47489 . 48844) (REDISPLAYBITMAP 48846 . 49443) (ULREDISPLAYBITMAP 49445 . 50217) (EXTENDEXTENT 50219 . 50750) (WIDTHIFWINDOW 50752 . 51107) (HEIGHTIFWINDOW 51109 . 51736)) (51841 52573 (\DSPUNTRANSFORMREGION 51851 . 52571))))) STOP \ No newline at end of file diff --git a/sources/WINDOWSCROLL.LCOM b/sources/WINDOWSCROLL.LCOM index d279a7f5426d4e8f6c034e20a3b1cb876d41165b..3ea83382a93f7bb06657a633abe78d94d6dcecbb 100644 GIT binary patch delta 1315 zcmbVLzi-n}5N;_T5JUn|k+y(1j4CxlBER=+CpIWFBo49a*p=-xO;xE%Q`1Jcb>yU! z7NJN;upl9jCq|eUDOKloLrl#41uP8w2k;U*4gDboJXm-4?tS-tclUli`M&X{IE<3< zyuBF5EJlEc#EB9syj>V=mzuWMOh2kNoa$Oyb!$~8y=pHx_9jX2>E(JW9(d`dyYAKO zX1c6sIlXLV4P8|ecW?|C5aXGKN0C_;P)cHvL@)!9MbECetBty2FF|dky0&aL$0Z0a z7BX5+l?|x3*MKQ@>j5nY`E|zubCVWp0pj|M6Nv-^OVt*|iZFj4U?lNaB7})WCi03Z zXAL=H$vI$7(o0!A&6!ir?)F8u|4TLS9G65rS^^sVdcefr}6h~60dOaX8CzoTbjuR>6! zvODyAd*IDc;IUz5Pamu7)_i@WY9Gga9pb(mnBZ6r^l4cu0}%z7E?L1MO&j_&jUZ6< zERZA*rXop(Y|2(i>txUv3-iSpRWU6f0uTQFrQtEc@sKSUrfvYiDVWdF+fyvHS-*;} zwsDd`un1+qBngUUDmnQcV9de;*(&NKQ#LKSCx8(LImIk0rU^()9b_Up-GD6;$Pu=P zPj%TMmXheMTN#r5A_9B)ND-d%-;bhpiid)3D08}IWz=9#?q`gAM}xo~*GdPyw?7G)BZOMcb*4TGoVauQ+WlJ> NsVa4krQKZ14S#02*6=Iys{zy03Z_YU@6-@b2u ziWT9T-bm2OfQT;3x+Fd5t(_eN$<4~l;L4AKWD-STQVIK{5(de*AH_Z?i4Xo<-6uuh zi742;SkPp^qE3h|N<7@?N4Lh|`2hqY;CR~~g#H~sl2F|p&H_uN5)Xsk#2)~^K#{Ct zRhP6op$)1fujv8>WX1hOP!4f;F1(a=v|5`C#dq0yqir2;CXZM3n>r4P}$^l!AuyvN*H zdIlS(xlPlvt5-9cMhh}010nqte;sg5!@Sb;%trQL5en_9OX2P3YmQBeFpmA7f@n86 zOqjjSV@;s`SkMToh%T!-#yoIYJ~xBWu;SkyNAcvi)U3`=t1AbeEeGl6Ibr3mD7A9@ zmUa1qCAMBd_nDr#&7E-N;~926e+s5fzB?VxcK>`ov(FFhi$nWw=gjp_rcajceKb3H z{D1mi?)37b^mXp5bHB}5`R=p3@3O9+;-}7fcbZ;Y?J3#SKb8taR>8Syv^qc}6{xA} zu0aiNyEQ8W!!TU4+m=Z^AVhtb&#fU9YTGV#Tp*$d*J_qi+Y$k5IK7Zx-Io-|zP$q& zNnp09SvM{L(p0!&c($`m4eGJ3U z9blr)`vovoj@*4LYG74qmTi|!m9*G?3#hEjyRlO>JeJuX OH^2C>Smau!#k~RRG(9E& From 795983e8f5a768a30940b91983e672fc5e0b0fbf Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 17 Feb 2021 22:52:31 -0800 Subject: [PATCH 28/37] WHEELSCROLL: no action if the wheel moves while in a pop-up scroll bar --- lispusers/WHEELSCROLL | 2 +- lispusers/WHEELSCROLL.LCOM | Bin 3301 -> 2587 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lispusers/WHEELSCROLL b/lispusers/WHEELSCROLL index e71d6c40..5cb1b473 100644 --- a/lispusers/WHEELSCROLL +++ b/lispusers/WHEELSCROLL @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "16-Feb-2021 22:36:05"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;11 5620 changes to%: (FNS \TEDIT.WHEELSCROLL \SCROLLBARTOMAIN?) previous date%: "16-Feb-2021 16:10:43" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;8) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL CREATESCROLLBARWINDOW \SCROLLBARTOMAIN?) (FNS \TEDIT.WHEELSCROLL) (INITVARS (WHEELSCROLLDELTA 10)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (UP) (* ; "Edited 16-Feb-2021 15:35 by rmk:") (LET ((W (\SCROLLBARTOMAIN?))) (CL:WHEN W (SCROLLW W 0 (CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 16-Feb-2021 14:38 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (INTERRUPTCHAR 520 '(WHEELSCROLL T) T) (INTERRUPTCHAR 521 '(WHEELSCROLL NIL) T) (CHANGENAME 'SCROLL.HANDLER 'CREATEW 'CREATESCROLLBARWINDOW) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;; "These actions are invoked when the caret is in the Tedit window. Otherwise the generic function is called on the Tedit window if the cursor is inside it.") (TEDIT.SETFUNCTION 520 [FUNCTION (LAMBDA NIL (\TEDIT.WHEELSCROLL T] TEDIT.READTABLE) (TEDIT.SETFUNCTION 521 [FUNCTION (LAMBDA NIL (\TEDIT.WHEELSCROLL NIL] TEDIT.READTABLE)) (CL:WHEN (GETP 'SEDIT 'FILEDATES) (SEDIT:ADD-COMMAND 520 '(WHEELSCROLL T)) (SEDIT:ADD-COMMAND 521 '(WHEELSCROLL)) (SEDIT:RESET-COMMANDS))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 15-Feb-2021 14:50 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND [LIST (LIST 520 '(WHEELSCROLL T)) (LIST 521 '(WHEELSCROLL] (LISPINTERRUPTS.WSORIG]) (CREATESCROLLBARWINDOW [LAMBDA (REGION TITLE BORDERSIZE NOOPENFLG PROPS) (* ; "Edited 16-Feb-2021 14:37 by rmk:") (* ;; "This replaces CREATEW inside SCROLL.HANDLER. WINDOW should be bound to the window that this scroll bar will control. The purpose is to create an unreferenced (LOC) pointer from the controller to the controllee, so that wheel scrolling in the scrollbar can be redirected to the controllee.") (DECLARE (USEDFREE WINDOW)) (LET ((SBW (CREATEW REGION TITLE BORDERSIZE NOOPENFLG PROPS))) (WINDOWPROP SBW 'CONTROLLEELOC (LOC WINDOW)) SBW]) (\SCROLLBARTOMAIN? [LAMBDA NIL (* ; "Edited 16-Feb-2021 22:13 by rmk:") (* ;; "Returns the window that should be wheel scrolled, moving from a scrollbar to its scrollee if necessary.") (LET ((W (WHICHW))) (CL:WHEN W (CL:WHEN (WINDOWPROP W 'CONTROLLEELOC) [SETQ W (VAG (WINDOWPROP W 'CONTROLLEELOC] (GETMOUSESTATE) (\CURSORPOSITION [IPLUS 10 (FETCH LEFT OF (WINDOWPROP W 'REGION] LASTMOUSEY) (SETCURSOR DEFAULTCURSOR) (GETMOUSESTATE))) (* ;; "IN/SCROLL/BAR? in WINDOWSCROLL does nothing if the window doesn't have a SCROLLFN, even though SCROLLW applies SCROLLBYREPAINTFN as a default in that case. So a direct call to SCROLLW might scroll a window that can't be scrolled by moving the mouse into the scrollbar (or so it seems). If we don't exclude this, then odd things like menus would be scrolled that shouldn't be.") (AND (WINDOWPROP W 'SCROLLFN) W]) ) (DEFINEQ (\TEDIT.WHEELSCROLL [LAMBDA (UP) (* ; "Edited 16-Feb-2021 22:35 by rmk:") (* ;; "Called from the TEDIT.READTABLE when the wheel moves and the caret is in the TEDIT (WHICHW) window or its scrollbar.") (LET ((WINDOW (\SCROLLBARTOMAIN?))) (CL:WHEN WINDOW [PROCESS.EVAL (FIND.PROCESS 'MOUSE) `(SCROLLW ,WINDOW 0 ,(CL:IF UP (IMINUS WHEELSCROLLDELTA) WHEELSCROLLDELTA)])]) ) (RPAQ? WHEELSCROLLDELTA 10) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (875 4891 (ENABLEWHEELSCROLL 885 . 1310) (WHEELSCROLL 1312 . 1636) (INSTALL-WHEELSCROLL 1638 . 2819) (LISPINTERRUPTS.WHEELSCROLL 2821 . 3170) (CREATESCROLLBARWINDOW 3172 . 3785) ( \SCROLLBARTOMAIN? 3787 . 4889)) (4892 5475 (\TEDIT.WHEELSCROLL 4902 . 5473))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "17-Feb-2021 22:37:01"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;31 5760 changes to%: (FNS WHEELSCROLL) previous date%: "17-Feb-2021 22:22:29" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;28) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL) [VARS (WHEELSCROLLINTERRUPTS '((520 (WHEELSCROLL 'VERTICAL WHEELSCROLLDELTA) T) (521 (WHEELSCROLL 'VERTICAL (IMINUS WHEELSCROLLDELTA)) T] (GLOBALVARS WHEELSCROLLDELTA WHEELSCROLLSETTLETIME) (INITVARS (WHEELSCROLLDELTA 10) (WHEELSCROLLSETTLETIME 50)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (DIRECTION DELTA) (* ; "Edited 17-Feb-2021 22:35 by rmk:") (* ;; "The wheel may accidentally turn (giving the interrupt) when the users intention is simply to push the middle button. And there may be another accidental turn (also giving an interrupt) when the user is releasing the middle button. Here we try to detect and ignore wheel motions in the first case, we don't yet have the information to solve the second. (This should not be an issue with a trackpad)") (* ;; "") (* ;; "Below we ignore a motion interrupt if it is received when a mouse button is down. We also ignore if the MIDDLE shows up within an interval of WHEELSCROLLSETTLETIME milliseconds.") (CL:WHEN (LET ((W (WHICHW))) (* ;; "Returns the window that should be wheel scrolled, skipping windows that have no SCROLLFN or are pop-up scrollbar window for some other window. ") (* ;; "The behavior of pop-up scrollbars (via IN/SCROLL/BAR? in WINDOWSCROLL) is inconsistent with a direct call to SCROLLW in that SCROLLW uses SCROLLBYREPAINTFN for a window without a SCROLLFN while the pop-up does nothing. We implement th pop-up behavior, otherwise odd windows like those holding menus would scroll in a funky way.") (CL:WHEN [AND W (WINDOWPROP W 'SCROLLFN) (NOT (WINDOWPROP W (CL:IF (EQ DIRECTION 'VERTICAL) 'VERTICALSCROLLBARFOR 'HORIZONTALSCROLLBARFOR)] (CL:WHEN [OR T (AND (MOUSESTATE UP) (NOT (UNTILMOUSESTATE (ONLY MIDDLE) WHEELSCROLLSETTLETIME] (* ;; "Always scroll from the MOUSE process. Need the KWOTE because PROCESS.EVAL uses CL:EVAL which doesn't like raw windows") [PROCESS.EVAL (FIND.PROCESS 'MOUSE) (CL:IF (EQ DIRECTION 'VERTICAL) `(SCROLLW ,(KWOTE W) 0 ,DELTA) `(SCROLLW ,(KWOTE W) ,DELTA 0))]))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 17-Feb-2021 11:53 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (FOR I IN WHEELSCROLLINTERRUPTS DO (INTERRUPTCHAR (CAR I) (CADR I) (CADDR I)) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;; "These actions are invoked when the caret is in the Tedit window, because TEDIT disables the interrupts") (TEDIT.SETFUNCTION (CAR I) `[LAMBDA NIL ,(CADR I] TEDIT.READTABLE))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 17-Feb-2021 11:09 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND WHEELSCROLLINTERRUPTS (LISPINTERRUPTS.WSORIG]) ) (RPAQQ WHEELSCROLLINTERRUPTS ((520 (WHEELSCROLL 'VERTICAL WHEELSCROLLDELTA) T) (521 (WHEELSCROLL 'VERTICAL (IMINUS WHEELSCROLLDELTA)) T))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS WHEELSCROLLDELTA WHEELSCROLLSETTLETIME) ) (RPAQ? WHEELSCROLLDELTA 10) (RPAQ? WHEELSCROLLSETTLETIME 50) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (1046 5231 (ENABLEWHEELSCROLL 1056 . 1481) (WHEELSCROLL 1483 . 3887) ( INSTALL-WHEELSCROLL 3889 . 4952) (LISPINTERRUPTS.WHEELSCROLL 4954 . 5229))))) STOP \ No newline at end of file diff --git a/lispusers/WHEELSCROLL.LCOM b/lispusers/WHEELSCROLL.LCOM index 4dca4a1dcb9ed46a749d9d56e26f087b90b278cf..f3c48249f5b7fd0308ab6d52cb58f4996952a6cd 100644 GIT binary patch literal 2587 zcmb_dPjBN?5O>N2SXnCC3(BDyA|cs_SpE~oNkHAc*e}gf9ow~?MvE$>ZWFbEw27J) zu^?{y1vu~pICEGEd*+DvHv18n_nb{$lCoN)jU3xEZ{EC_-*0BD1+>E=TJ5lqR$0`E zVK1d5$Voe-P+?I{(~xCJ1@;o+ACbc~rLJmxpN~6o8bHPJs-4lZs%_d9*mleDTBcP2 zt#UrSnvEx;Axy8K0_u-JcJ$Mi{rTu-zW?pnY;tzJA5PEDCi_>T;bipOG2H!&@olw` z_9x@{>`vGYx|D{QpT=QmeBoF+`f66m>;?}sO|TkxTFbHVfM++O<&mTBXE*cDTOe(Q zF^16-X8|4tox8~dvgh;Z-7Ux|7=}@S;n^()uCC=~IW5=1tMYCDysw18_39>^U!GlG zjOK7V#jLbWlz}Scro-%J^xb%RHy4qk$y(&d3cs4~iv_!(t2E-pBE>%al$7r9*WZ;FA93lQy+42G9tccc{~{hQ#9biy z$JgRr7%pt?D?-&B-aj6WU;pOpzIs$BF3aU_$YuHETh@u-s9Y`!=ew5(y;UeL7SwVI0dJ^G%vg^^mcQp=WJV8 zESjn7Dh7xy!s=Gxa*h~ukRxeHOv1FETk|Uv$=>Pqj{$v6^-H5 zp&j?5AOXa08MWUfDaWoCp9Emn#q$X?;j|e4L4wdUTnI_89T4!W%>=>mfPV*;4l_U; z*ENO&7hscYu4c&FAz1Z|1uTwD%hjC6uypmmmy4$A@TOYrS;dI7s0wyeB08!lXDntD zPDzr`2&V$3yq1+Q5K-!C#6o_wmZUV#pZakxNzt!-4C*p8NE32=ys5`=zz6g8WR${0 za<&WbExGEToscvGP4cly6||zM_fi+c7b~U literal 3301 zcmb_e&2HO95SCh`NKz0;uRa75p#jK)R4pm$udQR6TuE#wk|rq&E_{d+3yE6AGAz4j zP!#Ap^xCH|a>&i+zCrso{dQNfsGp=ok-(uiv%{I4*>ApC-QyiUu{Y;-Z({qf{{a&opCOkbQ#c3+Q9C!;r3#om26zAP(g zcQT%xUrF0xkMkgPlPCx(Uo&RFSF7xtUm#$$O03zgvbJR+!1IgIZOGBj=NGfbZ92vd z{j8GnL1XNuFGCVyQs-(iq4dpcdUZ*xw#=kbsg&sStyG3fka^wW5HHIpgf+m%ye^){=v zYu3j)rKX|rP+%!v_qNy6bf2meg$5P&3xz^)@A}b8{1&F-abG;v#0P8gn)slg*DZR= zj~qAiqmXLNoM4$bfi;!_&ds(cc07};ruY@GRdPd$Fd(~0y59|>gj0poi$OJOi_&b6 zuG_#q{u?=CW=ee(`f5&ZXd6X|QIsKx(hOqi5Tl%h$Aip4y>^PlLh-IB(HF%+@AQu! z_I^J-`1`km&xHzgFfCGtKBO9Lp1&6Qfu`7JXXcu-SO3?U^rLrB7uChL6oq=cD-`Ewk>0OM5*qR$fpoJjpM7#y!fY%ncJ|4= zoV2u+Z_+}(Dc^)|r5MYV8+@D><-2^y$ZsDlLP>EENeZ&KI4#y>lnQ2QCp_g@*^T;r zC-hQcjrx4S@w|na7*MXvSG0h8muE3CKwVV`zB+?YH3I|Yw`g(J`_UluVrnsRdrsIz ztM)lH7)jnw25|;;LUvzzzYLFObxA~=nimhr^ zMg*F9eKm~|zl(!dTR^j|TQ0|y;1Pzp>bY(+hzV-RX(%(OZm+7)i3ZuLU&7AN-XCn) zbdN>vE-?6NXJ>&xyy8znP=XOSw7?Zk9PbrcLqV`4iZ!fTY82qDFT%wef`~%6|TQko0FB78+<2E;%0KcC&fQM zEB^INzTa+~nE#K`8Q8Uo`S{h!e0=+*th_9&eCsXdB|2bdX9543grdvSw89UafN;UWwb-j5 zO`+UANp;|7F>09&Dnwyq4tkvMEIR_1#|fw=KgFR-VUxtp!NIy7w*+yI+q^L4n`;Y4 z(uc@kdn0ZD+E91M%_}4p{Ls%1og~#(+Fag8&^rb!JnjZg!f~7Q&^w}ndqL!QklZLf lB0UyPHn<%hZswX9nt^|+L{IW1x($fS;}&Pyc4y+c^A9(m2#Wv! From ea64c5e612df163bab08032ddc90b1d614ad8f31 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 17 Feb 2021 23:41:40 -0800 Subject: [PATCH 29/37] MACINTERFACE: more consistent recognition of corner and titlebar clicking, and more appropriate ghost regions of reshaping and moving --- lispusers/MACINTERFACE | 2 +- lispusers/MACINTERFACE.LCOM | Bin 6027 -> 7715 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lispusers/MACINTERFACE b/lispusers/MACINTERFACE index 7546fc94..76123d56 100644 --- a/lispusers/MACINTERFACE +++ b/lispusers/MACINTERFACE @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "27-Dec-2020 12:06:04"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>MACINTERFACE.;54 15486 previous date%: "13-Dec-2020 21:50:49" {DSK}kaplan>Local>medley3.5>lispcore>lispusers>MACINTERFACE.;57) (PRETTYCOMPRINT MACINTERFACECOMS) (RPAQQ MACINTERFACECOMS [ (* ;; "Externals") (COMS (FNS MACWINDOW MACWINDOW.SETUP UNMACWINDOW MACWINDOW.UNSETUP) (INITVARS (MACINTERFACECORNERMARGIN 25))) (* ;; "Internals") [COMS (FNS INTITLEBAR INCORNER MACWINDOW.BUTTONEVENTFN MACWINDOW.BUTTONEVENTFN.ANYWHERE) (* ;; "Behavior for some known window creators") (FNS MACINT-ADD-EXEC MACINT-SNAPW) (FNS TEDIT.MACINTERFACE TEDIT.SELECTALL) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (TEDIT.MACINTERFACE) (* ;; "Inspector") (MACWINDOW.SETUP '\ITEM.WINDOW.BUTTON.HANDLER) (* ;; "Commonlisp array inspector. If you move the main window, the little attached window doesn't move. But if you move the attached window, it all works. Needs a special definition. Shaping doesn't work either") (* (MACWINDOW.SETUP 'ONEDINSPECT.BUTTONEVENTFN)) (MACWINDOW.SETUP 'ICMLARRAY.TITLECOMMANDFN) (* ;; "Freemenu") (MACWINDOW.SETUP '\FM.BUTTONEVENTFN) (* ;; "SEDIT") (MACWINDOW.SETUP 'SEDIT::BUTTONEVENTFN) (* ;; "Debugger") (MACWINDOW.SETUP 'DBG::DEBUGGER-BUTTON-EVENT) (* ;; "Snap") (MACWINDOW.SETUP 'SNAPW 'MACINT-SNAPW) (* ;; "New execs") (MACWINDOW.SETUP 'ADD-EXEC 'MACINT-ADD-EXEC) (* ;; "Existing exec of the load") (MACWINDOW (PROCESSPROP (TTY.PROCESS) 'WINDOW] (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA MACINT-ADD-EXEC]) (* ;; "Externals") (DEFINEQ (MACWINDOW [LAMBDA (WINDOW ANYWHERE) (* ; "Edited 23-Jun-2020 16:01 by rmk:") (* ;; "This can be applied to windows that have been created with an unknown or unmodifiable buttoneventfn.") (CL:UNLESS (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN) (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN (WINDOWPROP WINDOW 'BUTTONEVENTFN)) (WINDOWPROP WINDOW 'BUTTONEVENTFN (IF ANYWHERE THEN (FUNCTION MACWINDOW.BUTTONEVENTFN.ANYWHERE) ELSE (FUNCTION MACWINDOW.BUTTONEVENTFN)))) WINDOW]) (MACWINDOW.SETUP [LAMBDA (ORIGFN MACWINDOWFN ANYWHERE) (* ; "Edited 24-Jun-2020 15:09 by rmk:") (* ;; "ORIGFN is either a function that creates windows of a given type (e.g. SNAPW or ADD-EXEC) or the known BUTTONEVENTFN of a class of windows.") (* ;; "Moves ORIGNFN to a new name, prefixed with MACORIG-.") (* ;; "If MACWINDOWFN is given, then that replaces the original definition of ORIGFN, and presumably knows how to call the renamed ORIGFN under the write circumstances. This is typically the case where ORIGFN is a window creator.") (* ;; "Otherwise, ORIGFN is taken to be the BUTTONEVENTFN for a class of windows, and its new definition is defaulted to one that maps left-clicks in appropriate areas into Mac window operations. If not in appropriate areas, then the renamed ORIGNFN is called to give the original button behavior.") (* ;; "If ANYWHERE, moving will happen for any click not in one of the shaping corners.") (* ;; "The renamed function has arguments in addition to WINDOW: the new name for the original function, if MACWINDOFN is provided, and the value specified here for ANYWHERE.") (LET [RENAMEDORIG (PKGNAME (CL:PACKAGE-NAME (CL:SYMBOL-PACKAGE ORIGFN] (* ;; "The renamed version of XCL symbols go into Interlisp, so there is less confusion about accessing it") (CL:WHEN (STREQUAL PKGNAME "XEROX-COMMON-LISP") (SETQ PKGNAME "INTERLISP")) (SETQ RENAMEDORIG (CL:INTERN (CONCAT 'MACORIG- ORIGFN) PKGNAME)) (MOVD? ORIGFN RENAMEDORIG) (IF MACWINDOWFN THEN (MOVD MACWINDOWFN ORIGFN) ELSE (PUTD ORIGFN `(LAMBDA (WINDOW) (MACWINDOW.BUTTONEVENTFN WINDOW (FUNCTION ,RENAMEDORIG) ,ANYWHERE]) (UNMACWINDOW [LAMBDA (WINDOW) (* ; "Edited 7-Dec-2020 17:57 by rmk:") (* ;; "Restores original window behavior") (CL:WHEN (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN) (WINDOWPROP WINDOW 'BUTTONEVENTFN (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN)) (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN NIL)) WINDOW]) (MACWINDOW.UNSETUP [LAMBDA (ORIGFN) (* ; "Edited 6-Jul-2020 13:04 by rmk:") (* ; "Edited 24-Jun-2020 15:09 by rmk:") (* ;; "Moves the renamed original function back to its original name") (LET [RENAMEDORIG (PKGNAME (CL:PACKAGE-NAME (CL:SYMBOL-PACKAGE ORIGFN] (* ;; "The renamed version of XCL symbols go into Interlisp, so there is less confusion about accessing it") (CL:WHEN (STREQUAL PKGNAME "XEROX-COMMON-LISP") (SETQ PKGNAME "INTERLISP")) (SETQ RENAMEDORIG (CL:INTERN (CONCAT 'MACORIG- ORIGFN) PKGNAME)) (CL:WHEN (GETD RENAMEDORIG) (MOVD RENAMEDORIG ORIGFN]) ) (RPAQ? MACINTERFACECORNERMARGIN 25) (* ;; "Internals") (DEFINEQ (INTITLEBAR [LAMBDA (WINDOW) (* ; "Edited 3-May-2020 20:38 by rmk:") (IGREATERP (LASTMOUSEY WINDOW) (FETCH TOP OF (DSPCLIPPINGREGION NIL WINDOW]) (INCORNER [LAMBDA (WINDOW MARGIN) (* ; "Edited 13-Dec-2020 21:45 by rmk:") (* ; "Edited 13-May-2020 14:26 by rmk:") (* ; "Edited 10-May-2020 12:41 by rmk:") (* ; "Edited 3-May-2020 20:43 by rmk:") (* ;; "X and Y in window coordinates") (CL:UNLESS MARGIN (SETQ MARGIN MACINTERFACECORNERMARGIN)) (LET ((CR (DSPCLIPPINGREGION NIL WINDOW)) (X (LASTMOUSEX WINDOW)) (Y (LASTMOUSEY WINDOW))) (IF (ILEQ (IABS (IDIFFERENCE X (FETCH LEFT OF CR))) MARGIN) THEN (* ;; "GREATERP puts it in title bar") (IF (IGREATERP Y (FETCH TOP OF CR)) THEN 'LEFTTOP ELSEIF (ILEQ (IABS (IDIFFERENCE Y (FETCH BOTTOM OF CR))) MARGIN) THEN 'LEFTBOTTOM) ELSEIF (ILEQ (IABS (IDIFFERENCE X (FETCH RIGHT OF CR))) MARGIN) THEN (IF (IGREATERP Y (FETCH TOP OF CR)) THEN 'RIGHTTOP ELSEIF (ILEQ (IABS (IDIFFERENCE Y (FETCH BOTTOM OF CR))) MARGIN) THEN 'RIGHTBOTTOM]) (MACWINDOW.BUTTONEVENTFN [LAMBDA (WINDOW ORIGFUNCTION ANYWHERE) (* ; "Edited 13-Dec-2020 20:35 by rmk:") (* ; "Edited 24-Jun-2020 20:23 by rmk:") (* ; "Edited 23-May-2020 08:34 by rmk:") (* ; "Edited 10-May-2020 03:35 by rmk:") (* ; "Edited 3-May-2020 21:18 by rmk:") (IF (AND (MOUSESTATE (ONLY LEFT)) (EQ LASTKEYBOARD 0)) THEN (TOTOPW WINDOW) (LET (REGION CORNER (MOUSEX LASTMOUSEX) (MOUSEY LASTMOUSEY)) (SETQ CORNER (INCORNER WINDOW)) (IF CORNER THEN (* ;;  "The upper corners may be in the title bar, near the side, so test corners before titlebar.") (* ;; "WINDOWREGION includes the attached windows") (SETQ REGION (WINDOWREGION WINDOW 'SHAPEW)) (LET ((LEFT (FETCH LEFT OF REGION)) (RIGHT (FETCH RIGHT OF REGION)) (TOP (FETCH TOP OF REGION)) (BOTTOM (FETCH BOTTOM OF REGION)) STARTINGREGION) (* ;;  "The hot cornerr of the starting region is the mouse position") [SETQ STARTINGREGION (GETREGION NIL NIL NIL NIL NIL (SELECTQ CORNER (RIGHTBOTTOM (LIST LEFT TOP MOUSEX MOUSEY)) (LEFTBOTTOM (LIST RIGHT TOP MOUSEX MOUSEY)) (RIGHTTOP (LIST LEFT BOTTOM MOUSEX MOUSEY)) (LEFTTOP (LIST RIGHT BOTTOM MOUSEX MOUSEY)) (SHOULDNT] (SHAPEW WINDOW STARTINGREGION)) T ELSEIF (OR ANYWHERE (INTITLEBAR WINDOW)) THEN (MOVEW WINDOW) T ELSEIF [OR ORIGFUNCTION (SETQ ORIGFUNCTION (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN] THEN (APPLY* ORIGFUNCTION WINDOW))) ELSEIF [OR ORIGFUNCTION (SETQ ORIGFUNCTION (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN] THEN (APPLY* ORIGFUNCTION WINDOW]) (MACWINDOW.BUTTONEVENTFN.ANYWHERE [LAMBDA (WINDOW) (* ; "Edited 3-Dec-2020 14:24 by rmk:") (* ; "Edited 24-Jun-2020 13:24 by rmk:") (* ;; "Move if left-click anywhere, not just titlebar") (MACWINDOW.BUTTONEVENTFN WINDOW NIL T]) ) (* ;; "Behavior for some known window creators") (DEFINEQ (MACINT-ADD-EXEC [LAMBDA U (* ; "Edited 24-Jun-2020 14:23 by rmk:") (LET [(PROC (APPLY (FUNCTION MACORIG-ADD-EXEC) (FOR N FROM 1 TO U COLLECT (ARG U N] (* ;; "For some reason, the window may not be there immediately") (DISMISS 100) (MACWINDOW (PROCESSPROP PROC 'WINDOW)) PROC]) (MACINT-SNAPW [LAMBDA NIL (* ; "Edited 24-Jun-2020 13:19 by rmk:") (* ;; "No point in shaping a snap window, just move it.;;") (* ;; "This changes the creation function (SNAPW), since snap windows otherwise don't have a BUTTONEVENTN") (LET ((W (MACORIG-SNAPW))) [WINDOWPROP W 'BUTTONEVENTFN (FUNCTION (LAMBDA (W) (TOTOPW W) (MOVEW W] W]) ) (DEFINEQ (TEDIT.MACINTERFACE [LAMBDA NIL (* ; "Edited 8-Aug-2020 07:58 by rmk:") (MACWINDOW.SETUP '\TEDIT.BUTTONEVENTFN) (* ;; "All") (TEDIT.SETFUNCTION (CHARCODE "1,a") (FUNCTION TEDIT.SELECTALL) TEDIT.READTABLE) (TEDIT.SETFUNCTION (CHARCODE "1,A") (FUNCTION TEDIT.SELECTALL) TEDIT.READTABLE) (* ;; "Quit") (TEDIT.SETFUNCTION (CHARCODE "1,q") (FUNCTION TEDIT.QUIT) TEDIT.READTABLE) (TEDIT.SETFUNCTION (CHARCODE "1,Q") (FUNCTION TEDIT.QUIT) TEDIT.READTABLE]) (TEDIT.SELECTALL [LAMBDA (STREAM TEXTOBJ SEL) (* ; "Edited 3-May-2020 17:29 by rmk:") (LET [(TEXTSTREAM (TEXTSTREAM (TTY.PROCESS] (CL:WHEN TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM 0 (ADD1 (fetch TEXTLEN of (TEXTOBJ TEXTSTREAM))) 'LEFT))]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (TEDIT.MACINTERFACE) (* ;; "Inspector") (MACWINDOW.SETUP '\ITEM.WINDOW.BUTTON.HANDLER) (* ;; "Commonlisp array inspector. If you move the main window, the little attached window doesn't move. But if you move the attached window, it all works. Needs a special definition. Shaping doesn't work either") (* (MACWINDOW.SETUP  (QUOTE ONEDINSPECT.BUTTONEVENTFN))) (MACWINDOW.SETUP 'ICMLARRAY.TITLECOMMANDFN) (* ;; "Freemenu") (MACWINDOW.SETUP '\FM.BUTTONEVENTFN) (* ;; "SEDIT") (MACWINDOW.SETUP 'SEDIT::BUTTONEVENTFN) (* ;; "Debugger") (MACWINDOW.SETUP 'DBG::DEBUGGER-BUTTON-EVENT) (* ;; "Snap") (MACWINDOW.SETUP 'SNAPW 'MACINT-SNAPW) (* ;; "New execs") (MACWINDOW.SETUP 'ADD-EXEC 'MACINT-ADD-EXEC) (* ;; "Existing exec of the load") (MACWINDOW (PROCESSPROP (TTY.PROCESS) 'WINDOW)) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA MACINT-ADD-EXEC) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (3314 7073 (MACWINDOW 3324 . 3965) (MACWINDOW.SETUP 3967 . 5883) (UNMACWINDOW 5885 . 6264) (MACWINDOW.UNSETUP 6266 . 7071)) (7142 12254 (INTITLEBAR 7152 . 7372) (INCORNER 7374 . 8947) ( MACWINDOW.BUTTONEVENTFN 8949 . 11885) (MACWINDOW.BUTTONEVENTFN.ANYWHERE 11887 . 12252)) (12312 13289 ( MACINT-ADD-EXEC 12322 . 12746) (MACINT-SNAPW 12748 . 13287)) (13290 14249 (TEDIT.MACINTERFACE 13300 . 13918) (TEDIT.SELECTALL 13920 . 14247))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "15-Feb-2021 20:50:07"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>MACINTERFACE.;75 21496 changes to%: (FNS MACWINDOW.BUTTONEVENTFN) previous date%: "14-Feb-2021 21:51:47" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>MACINTERFACE.;74) (PRETTYCOMPRINT MACINTERFACECOMS) (RPAQQ MACINTERFACECOMS [ (* ;; "Externals") (COMS (FNS MACWINDOW MACWINDOW.SETUP UNMACWINDOW MACWINDOW.UNSETUP) (INITVARS (MACWINDOWMARGIN 25))) (* ;; "Internals") [COMS (FNS MACWINDOW.BUTTONEVENTFN MACWINDOW.BUTTONEVENTFN.ANYWHERE NEARTOP NEARESTCORNER INCORNER.REGION) (* ;; "Behavior for some known window creators") (FNS MACINT-ADD-EXEC MACINT-SNAPW) (FNS TEDIT.MACINTERFACE TEDIT.SELECTALL) (FNS FB.MAKEHEADINGWINDOW.MACINTERFACE TOTOPW.MACINTERFACE) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (TEDIT.MACINTERFACE) (* ;; "Inspector") (MACWINDOW.SETUP '\ITEM.WINDOW.BUTTON.HANDLER) (* ;; "Commonlisp array inspector. If you move the main window, the little attached window doesn't move. But if you move the attached window, it all works. Needs a special definition. Shaping doesn't work either") (* (MACWINDOW.SETUP 'ONEDINSPECT.BUTTONEVENTFN)) (MACWINDOW.SETUP 'ICMLARRAY.TITLECOMMANDFN) (* ;; "Freemenu") (MACWINDOW.SETUP '\FM.BUTTONEVENTFN) (* ;; "SEDIT") (MACWINDOW.SETUP 'SEDIT::BUTTONEVENTFN) (* ;; "Debugger") (MACWINDOW.SETUP 'DBG::DEBUGGER-BUTTON-EVENT) (* ;; "Snap") (MACWINDOW.SETUP 'SNAPW 'MACINT-SNAPW) (* ;; "New execs") (MACWINDOW.SETUP 'ADD-EXEC 'MACINT-ADD-EXEC) (* ;; "Existing exec of the load") (MACWINDOW (PROCESSPROP (TTY.PROCESS) 'WINDOW)) (* ;; "Table browser (specialized to filebrowser)") (MACWINDOW.SETUP 'FB.MAKEHEADINGWINDOW 'FB.MAKEHEADINGWINDOW.MACINTERFACE) (MACWINDOW.SETUP 'TB.BUTTONEVENTFN) (* ;; "Grapher") (MACWINDOW.SETUP 'APPLYTOSELECTEDNODE) (* ;; "Promptwindow") (MACWINDOW PROMPTWINDOW T] (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA MACINT-ADD-EXEC]) (* ;; "Externals") (DEFINEQ (MACWINDOW [LAMBDA (WINDOW ANYWHERE) (* ; "Edited 23-Jun-2020 16:01 by rmk:") (* ;; "This can be applied to windows that have been created with an unknown or unmodifiable buttoneventfn.") (CL:UNLESS (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN) (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN (WINDOWPROP WINDOW 'BUTTONEVENTFN)) (WINDOWPROP WINDOW 'BUTTONEVENTFN (IF ANYWHERE THEN (FUNCTION MACWINDOW.BUTTONEVENTFN.ANYWHERE) ELSE (FUNCTION MACWINDOW.BUTTONEVENTFN)))) WINDOW]) (MACWINDOW.SETUP [LAMBDA (ORIGFN MACWINDOWFN ANYWHERE) (* ; "Edited 13-Feb-2021 19:53 by rmk:") (* ;; "ORIGFN is either a function that creates windows of a given type (e.g. SNAPW or ADD-EXEC) or the known BUTTONEVENTFN of a class of windows.") (* ;; "Moves ORIGNFN to a new name, prefixed with MACORIG-.") (* ;; "If MACWINDOWFN is given, then that replaces the original definition of ORIGFN, and presumably knows how to call the renamed ORIGFN under the right circumstances. This is typically the case where ORIGFN is a window creator.") (* ;; "Otherwise, ORIGFN is taken to be the BUTTONEVENTFN for a class of windows, and its new definition is defaulted to one that maps left-clicks in appropriate areas into Mac window operations. If not in appropriate areas, then the renamed ORIGNFN is called to give the original button behavior.") (* ;; "If ANYWHERE, moving will happen for any click not in one of the shaping corners.") (* ;; "The renamed function has arguments in addition to WINDOW: the new name for the original function, if MACWINDOFN is provided, and the value specified here for ANYWHERE.") (LET [RENAMEDORIG (PKGNAME (CL:PACKAGE-NAME (CL:SYMBOL-PACKAGE ORIGFN] (* ;; "The renamed version of XCL symbols go into Interlisp, so there is less confusion about accessing it") (CL:WHEN (STREQUAL PKGNAME "XEROX-COMMON-LISP") (SETQ PKGNAME "INTERLISP")) (SETQ RENAMEDORIG (CL:INTERN (CONCAT 'MACORIG- ORIGFN) PKGNAME)) (MOVD? ORIGFN RENAMEDORIG) (IF MACWINDOWFN THEN (MOVD MACWINDOWFN ORIGFN) ELSE (PUTD ORIGFN `(LAMBDA (WINDOW) (MACWINDOW.BUTTONEVENTFN WINDOW (FUNCTION ,RENAMEDORIG) ,ANYWHERE]) (UNMACWINDOW [LAMBDA (WINDOW) (* ; "Edited 7-Dec-2020 17:57 by rmk:") (* ;; "Restores original window behavior") (CL:WHEN (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN) (WINDOWPROP WINDOW 'BUTTONEVENTFN (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN)) (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN NIL)) WINDOW]) (MACWINDOW.UNSETUP [LAMBDA (ORIGFN) (* ; "Edited 6-Jul-2020 13:04 by rmk:") (* ; "Edited 24-Jun-2020 15:09 by rmk:") (* ;; "Moves the renamed original function back to its original name") (LET [RENAMEDORIG (PKGNAME (CL:PACKAGE-NAME (CL:SYMBOL-PACKAGE ORIGFN] (* ;; "The renamed version of XCL symbols go into Interlisp, so there is less confusion about accessing it") (CL:WHEN (STREQUAL PKGNAME "XEROX-COMMON-LISP") (SETQ PKGNAME "INTERLISP")) (SETQ RENAMEDORIG (CL:INTERN (CONCAT 'MACORIG- ORIGFN) PKGNAME)) (CL:WHEN (GETD RENAMEDORIG) (MOVD RENAMEDORIG ORIGFN]) ) (RPAQ? MACWINDOWMARGIN 25) (* ;; "Internals") (DEFINEQ (MACWINDOW.BUTTONEVENTFN [LAMBDA (WINDOW ORIGFUNCTION ANYWHERE) (* ; "Edited 14-Feb-2021 21:51 by rmk:") (* ; "Edited 24-Jun-2020 20:23 by rmk:") (* ; "Edited 23-May-2020 08:34 by rmk:") (* ; "Edited 10-May-2020 03:35 by rmk:") (* ; "Edited 3-May-2020 21:18 by rmk:") (IF (AND (MOUSESTATE (ONLY LEFT)) (EQ LASTKEYBOARD 0)) THEN (TOTOPW WINDOW) (LET [CORNER TOPMARGIN (MAINREGION (WINDOWPROP WINDOW 'REGION)) (ATTACHEDREGION (WINDOWREGION WINDOW 'SHAPEW] (* ;; "If the window has a TOPMARGIN property, that tells us that it does not have a canonical title but may still have a title-like attached window just above the main window. The TOPMARGIN should be 0 in that case.") (* ;; "This is particularly the case of FILEBROWSER windows, where the the modified ATTACHEDWINDOWTOTOPFN drives the click here. ") (SETQ TOPMARGIN (IF (WINDOWPROP WINDOW 'TOPMARGIN) ELSEIF (WINDOWPROP WINDOW 'TITLE) THEN (FONTPROP WindowTitleDisplayStream 'HEIGHT) ELSE MACWINDOWMARGIN)) (SETQ CORNER (INCORNER.REGION MAINREGION TOPMARGIN)) (IF CORNER THEN (* ;;  "The upper corners may be in the title bar, near the side, so test corners before titlebar.") (* ;; "We are in the corner of the main window, so we are reshaping. But the ghost region should include all of the attached windows, and the starting cursor should be positioned at the corner closest to the selected corner of the main window.") (* ;; "WINDOWREGION includes the attached windows") (LET ((LEFT (FETCH LEFT OF ATTACHEDREGION)) (RIGHT (FETCH RIGHT OF ATTACHEDREGION)) (TOP (FETCH TOP OF ATTACHEDREGION)) (BOTTOM (FETCH BOTTOM OF ATTACHEDREGION)) STARTINGREGION) (* ;; "\CURSORPOSITION moves the mouse to the tracking corner of the ghost region, in screen coordinates, so that the mouse starts out at the tracking corner of the ghost region, even if there are attached windows (as in the filebrowser) that overhang the corner and the initiating click was at the corner of the mainwindow.") (CL:UNLESS (EQ 'DON'T (WINDOWPROP WINDOW 'RESHAPEFN)) [SETQ STARTINGREGION (GETREGION NIL NIL NIL NIL NIL (SELECTQ CORNER (RIGHTBOTTOM (\CURSORPOSITION RIGHT BOTTOM) (GETMOUSESTATE) (LIST LEFT TOP RIGHT BOTTOM)) (LEFTBOTTOM (\CURSORPOSITION LEFT BOTTOM) (GETMOUSESTATE) (LIST RIGHT TOP LEFT BOTTOM)) (RIGHTTOP (\CURSORPOSITION RIGHT TOP) (GETMOUSESTATE) (LIST LEFT BOTTOM RIGHT TOP)) (LEFTTOP (\CURSORPOSITION LEFT TOP) (GETMOUSESTATE) (LIST RIGHT BOTTOM LEFT TOP)) (SHOULDNT]) (SHAPEW WINDOW STARTINGREGION)) T ELSEIF (OR ANYWHERE (NEARTOP MAINREGION TOPMARGIN)) THEN (NEARESTCORNER ATTACHEDREGION) (MOVEW WINDOW) T ELSEIF [OR ORIGFUNCTION (SETQ ORIGFUNCTION (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN] THEN (APPLY* ORIGFUNCTION WINDOW))) ELSEIF [OR ORIGFUNCTION (SETQ ORIGFUNCTION (WINDOWPROP WINDOW 'PREMACBUTTONEVENTFN] THEN (APPLY* ORIGFUNCTION WINDOW]) (MACWINDOW.BUTTONEVENTFN.ANYWHERE [LAMBDA (WINDOW) (* ; "Edited 3-Dec-2020 14:24 by rmk:") (* ; "Edited 24-Jun-2020 13:24 by rmk:") (* ;; "Move if left-click anywhere, not just titlebar") (MACWINDOW.BUTTONEVENTFN WINDOW NIL T]) (NEARTOP [LAMBDA (MAINREGION TOPMARGIN) (* ; "Edited 12-Feb-2021 23:19 by rmk:") (* ;; "True if the MOUSEY is near the top of MAINREGION. That means in the title bar for titled windows, otherwise a short distance below the top of the window. (Could be in the border?)") (IGREATERP LASTMOUSEY (IDIFFERENCE (FETCH TOP OF MAINREGION) TOPMARGIN]) (NEARESTCORNER [LAMBDA (REGION) (* ; "Edited 14-Feb-2021 21:46 by rmk:") (* ;; "Moves the cursor to the corner of REGION that is closest to the current LASTMOUSEX AND LASTMOUSEY") (\CURSORPOSITION (CL:IF (ILESSP (IDIFFERENCE LASTMOUSEX (FETCH LEFT OF REGION)) (IDIFFERENCE (FETCH RIGHT OF REGION) LASTMOUSEX)) (FETCH LEFT OF REGION) (FETCH RIGHT OF REGION)) (CL:IF (ILESSP (IDIFFERENCE LASTMOUSEY (FETCH BOTTOM OF REGION)) (IDIFFERENCE (FETCH TOP OF REGION) LASTMOUSEY)) (FETCH BOTTOM OF REGION) (FETCH TOP OF REGION))]) (INCORNER.REGION [LAMBDA (MAINREGION TOPMARGIN) (* ; "Edited 12-Feb-2021 23:22 by rmk:") (* ;; "MAINREGION, LASTMOUSEX, LASTMOUSEY in screen coordinates.") (* ;; "TOPMARGIN is the height of the titlebar for titled windows, otherwise the margin at the top of the window's content that we regard as the top. ") (IF (ILEQ (IABS (IDIFFERENCE LASTMOUSEX (FETCH LEFT OF MAINREGION))) MACWINDOWMARGIN) THEN (IF (NEARTOP MAINREGION TOPMARGIN) THEN 'LEFTTOP ELSEIF (ILEQ LASTMOUSEY (IPLUS MACWINDOWMARGIN (FETCH BOTTOM OF MAINREGION ))) THEN 'LEFTBOTTOM) ELSEIF (ILEQ (IABS (IDIFFERENCE LASTMOUSEX (FETCH RIGHT OF MAINREGION))) MACWINDOWMARGIN) THEN (IF (NEARTOP MAINREGION TOPMARGIN) THEN 'RIGHTTOP ELSEIF (ILEQ LASTMOUSEY (IPLUS MACWINDOWMARGIN (FETCH BOTTOM OF MAINREGION ))) THEN 'RIGHTBOTTOM]) ) (* ;; "Behavior for some known window creators") (DEFINEQ (MACINT-ADD-EXEC [LAMBDA U (* ; "Edited 24-Jun-2020 14:23 by rmk:") (LET [(PROC (APPLY (FUNCTION MACORIG-ADD-EXEC) (FOR N FROM 1 TO U COLLECT (ARG U N] (* ;; "For some reason, the window may not be there immediately") (DISMISS 100) (MACWINDOW (PROCESSPROP PROC 'WINDOW)) PROC]) (MACINT-SNAPW [LAMBDA NIL (* ; "Edited 24-Jun-2020 13:19 by rmk:") (* ;; "No point in shaping a snap window, just move it.;;") (* ;; "This changes the creation function (SNAPW), since snap windows otherwise don't have a BUTTONEVENTN") (LET ((W (MACORIG-SNAPW))) [WINDOWPROP W 'BUTTONEVENTFN (FUNCTION (LAMBDA (W) (TOTOPW W) (MOVEW W] W]) ) (DEFINEQ (TEDIT.MACINTERFACE [LAMBDA NIL (* ; "Edited 8-Aug-2020 07:58 by rmk:") (MACWINDOW.SETUP '\TEDIT.BUTTONEVENTFN) (* ;; "All") (TEDIT.SETFUNCTION (CHARCODE "1,a") (FUNCTION TEDIT.SELECTALL) TEDIT.READTABLE) (TEDIT.SETFUNCTION (CHARCODE "1,A") (FUNCTION TEDIT.SELECTALL) TEDIT.READTABLE) (* ;; "Quit") (TEDIT.SETFUNCTION (CHARCODE "1,q") (FUNCTION TEDIT.QUIT) TEDIT.READTABLE) (TEDIT.SETFUNCTION (CHARCODE "1,Q") (FUNCTION TEDIT.QUIT) TEDIT.READTABLE]) (TEDIT.SELECTALL [LAMBDA (STREAM TEXTOBJ SEL) (* ; "Edited 3-May-2020 17:29 by rmk:") (LET [(TEXTSTREAM (TEXTSTREAM (TTY.PROCESS] (CL:WHEN TEXTSTREAM (TEDIT.SETSEL TEXTSTREAM 0 (ADD1 (fetch TEXTLEN of (TEXTOBJ TEXTSTREAM))) 'LEFT))]) ) (DEFINEQ (FB.MAKEHEADINGWINDOW.MACINTERFACE [LAMBDA (BROWSERWINDOW WIDTH HEIGHT FONT) (* ; "Edited 13-Feb-2021 23:21 by rmk:") (* ;; "This makes the heading window for a filebrowser, the little black window that has the column headings over the main window. It looks like a titlebar of the main window, our goal here is to make clicking in the heading window behave as if the click had happened in a true title window, so that corners will cause a SHAPE and middle will cause a MOVE. This is achieved by replacing the TOTOPW BUTTONEVENTFN of this window by a function that does the TOTOPW and then invokes the BUTTONEVENTFN of the main window") (* ;; "This function essentially advises the FB.MAKEHEADINGWINDOW in FILEBROWSER--works only if FILEBROWSER was loaded first.") (LET ((HW (MACORIG-FB.MAKEHEADINGWINDOW BROWSERWINDOW WIDTH HEIGHT FONT))) (* ;; "We also mark the height of the attached %"title%" window as the TOPMARGIN of the main window, so that MACWINDOW.BUTTONEVENTFN knows to look outside the putative region.") (WINDOWPROP HW 'BUTTONEVENTFN 'TOTOPW.MACINTERFACE) (WINDOWPROP BROWSERWINDOW 'TOPMARGIN 0) HW]) (TOTOPW.MACINTERFACE [LAMBDA (WINDOW) (* ; "Edited 13-Feb-2021 23:27 by rmk:") (* ;; "This replaces the TOTOPW BUTTONEVENTFN on an attached window where the click is then directed to the MAINWINDOW.") (TOTOPW WINDOW) (LET ((MAIN (MAINWINDOW WINDOW T))) (CL:WHEN MAIN (MACWINDOW.BUTTONEVENTFN MAIN (WINDOWPROP MAIN 'BUTTONEVENTFN)))]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (TEDIT.MACINTERFACE) (* ;; "Inspector") (MACWINDOW.SETUP '\ITEM.WINDOW.BUTTON.HANDLER) (* ;; "Commonlisp array inspector. If you move the main window, the little attached window doesn't move. But if you move the attached window, it all works. Needs a special definition. Shaping doesn't work either") (* (MACWINDOW.SETUP  (QUOTE ONEDINSPECT.BUTTONEVENTFN))) (MACWINDOW.SETUP 'ICMLARRAY.TITLECOMMANDFN) (* ;; "Freemenu") (MACWINDOW.SETUP '\FM.BUTTONEVENTFN) (* ;; "SEDIT") (MACWINDOW.SETUP 'SEDIT::BUTTONEVENTFN) (* ;; "Debugger") (MACWINDOW.SETUP 'DBG::DEBUGGER-BUTTON-EVENT) (* ;; "Snap") (MACWINDOW.SETUP 'SNAPW 'MACINT-SNAPW) (* ;; "New execs") (MACWINDOW.SETUP 'ADD-EXEC 'MACINT-ADD-EXEC) (* ;; "Existing exec of the load") (MACWINDOW (PROCESSPROP (TTY.PROCESS) 'WINDOW)) (* ;; "Table browser (specialized to filebrowser)") (MACWINDOW.SETUP 'FB.MAKEHEADINGWINDOW 'FB.MAKEHEADINGWINDOW.MACINTERFACE) (MACWINDOW.SETUP 'TB.BUTTONEVENTFN) (* ;; "Grapher") (MACWINDOW.SETUP 'APPLYTOSELECTEDNODE) (* ;; "Promptwindow") (MACWINDOW PROMPTWINDOW T) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA MACINT-ADD-EXEC) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (4304 8063 (MACWINDOW 4314 . 4955) (MACWINDOW.SETUP 4957 . 6873) (UNMACWINDOW 6875 . 7254) (MACWINDOW.UNSETUP 7256 . 8061)) (8123 16305 (MACWINDOW.BUTTONEVENTFN 8133 . 13155) ( MACWINDOW.BUTTONEVENTFN.ANYWHERE 13157 . 13522) (NEARTOP 13524 . 13960) (NEARESTCORNER 13962 . 14841) (INCORNER.REGION 14843 . 16303)) (16363 17340 (MACINT-ADD-EXEC 16373 . 16797) (MACINT-SNAPW 16799 . 17338)) (17341 18300 (TEDIT.MACINTERFACE 17351 . 17969) (TEDIT.SELECTALL 17971 . 18298)) (18301 19950 (FB.MAKEHEADINGWINDOW.MACINTERFACE 18311 . 19518) (TOTOPW.MACINTERFACE 19520 . 19948))))) STOP \ No newline at end of file diff --git a/lispusers/MACINTERFACE.LCOM b/lispusers/MACINTERFACE.LCOM index 72cc73fb3494ead7d92491498fbb494f4acfa099..71a2a9eeed84acc4a890206543d6d9b489b420fe 100644 GIT binary patch delta 2810 zcmai0-H#Jh6rX7kmXE@A*-UrMrp=-EC#N7PfR( zQ6FsN%@B<+A;v@>#1J24-S}cOYodwa4=`bUAwKxdzG;lnbMH()DRG)i=bm%!`TU)8 z?~NC}Jo|BWoC};zRu@k5ex3u~9|`y)e(7d;-XR5Uem`|^p;=vAx!kDLs}-oe-Ds{J zkC^L@BlEQ@;K?LY(7StPX2t`R@*0YIdg)v!!b=g3^Y~oeq?%FUc||sqM88nS^i_3Q z3INZE;UFw7m9Jc?uEN^N@d$X6S^>=8M-HF#L8DoHtG4pyDm8~Z4=46S!9@aGM3in` zRUMMJ@h9tg%5?5KWd1c04;p$dE9X>FR5BWFIhHxz<#*f!8k`4 zd^RtVcYW6%^&OAyth0-BxlBIiqPq#pdf(p}y+l@f$jj|D1~%jb-SgrzBb?o}GL(9ul4OjbjJC6n!FI=Y$F`V{H=vzjI3we?JA`Xta$Ml;Xt zIdgSab2qFiXBIlKYVV7DE zL`p#%fWQk-NXt1Q$WcXh@dbYn8G133&R_*w7=B!e3lWEVrO@)AE)MngOSL#jdRz>nyP#@?VqUTG0^u;Inic7c9ZM(# zNnJD2ikeCrAcY2YNd6%S3=n%=Y&%TNaTNxmjuWtNrR-8 z7ebIH7U{yzQASM1Wfr(#z~Z&nVh9qtcG3W3bo(>F*~Kw`+xt>o>r`0A1;eBfJwh0AMSD8Z$;e9sgb*pMj;T65%zMnFAoTPUV$0Am z!=?VPI0<4!_q3m=ve#6t5NWf2rHje=(N8-((VYs zyyuvDo)`N^58%8c2eYLP$iyIiViT(w^T6ocofgCVY4jA{6^@wGZaC3_PJg2hbclJz zeLYO>7{e0OpNAn4o8P&oS(o{%TQDcb51BCbH0#8p!JgH{6u~cn(kl-?BCl6)hTrM+j=miCDXm~x-^n~K;Navb(3tYQKZ$D&9 z=cWS)w`|Ua9vD7+h{7M-Q)X!*h8g*E;+S2NjbA2yWX;^<;TMPbj@zurhB5mC%T7)^ UjF|bxq%SbkY1fn8BQSCO2T^R!>;M1& delta 1368 zcmZux&2JM&6yMzdPTCq06o(Ka@o?4R6(a1c*Xs}UkY&BLCt2@W>!nUW6@@q=StU*Q z>aDWsYo)5`sH*xQRc`q>aG~4j$H*eniz4!K) z5573}Rc%_$oh_}co>di90i+fcy@(3CS5~B~w)<%A>aEr7t)0!&E!g-3Qg*olNE?~Y z&(Eizb>-Gt3sU=WC0|q&>M141(`9U1re_(xRf5#(Zz1{LJEi|y*s|SadT&N`^MUC_qdeJ^{^B_*v5{JecL*3cu*|m z<7o^EG_g~1n=%L>3WB&WA<(tH@D}@<5{0THRwYRipKks8^ypwxNFx_p)8rF&&cd#8#%W>?OuIE_8r|O_Wdj;x%V43a;m>ytys2N@bJ5-D! zfimPMYSLIOuWXnW_rmRHnD=9%AQ^X>hp$TgVVpc@zE7Ela8=y~R=P~%^8q02yp?i-4d(gEzflUqXa(sP~dZ1Z{N$>q0)CS#JC#W$`&xfAg;OKGS z47yGyaG2d=?ny|i`>DAMs4!w`8BpeRE@@LBT>}qSs{VP`_uU#bEAX@L)}f$)ZIvUH zu7@Y8p!a0b7iY;<%sf3Lo^d{`5aXTKCnP@gJa*3-?or}YO??xp(q?l%w3?vO3Ewv#DpH_PHR@D@3I%p^$RsLcsKUKqmmD8*nc@6I zgP;R`KkEBT4t$rErU@FmA9CLC>8#UQsXF=m?U^w(lOul~OniiLv`=VRS%pzHJ1RHI za7EM#NdI4J==mr}EjQ|{6`;AkoXBMod*{nu^2mcRa(lXaXEPZwPK?=E@<;MS@7c^h(xfcQkS Date: Fri, 19 Feb 2021 11:46:03 -0800 Subject: [PATCH 30/37] EMACS: Removed outdated copies of Tedit functions and dependency on old BQUOTE emulation, so that it now at least loads and compiles. But it doesn't work. --- lispusers/EMACS | 2 +- lispusers/EMACS.LCOM | Bin 38635 -> 33639 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lispusers/EMACS b/lispusers/EMACS index 4b9abe8a..b543c34e 100644 --- a/lispusers/EMACS +++ b/lispusers/EMACS @@ -1 +1 @@ -(FILECREATED "27-Jul-86 17:26:37" {ERIS}LISPCORE>EMACS.;7 102965 changes to: (FNS EMACS.OPERATE) previous date: "12-Jul-86 16:55:09" {ERIS}LISPCORE>EMACS.;6) (* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT EMACSCOMS) (RPAQQ EMACSCOMS ((* EMACS -- By Kelly Roach *) (COMS (* EMACS *) (INITVARS (BytesPerPage 512) (EMACS.COMMANDS NIL) (EMACS.MCOMMANDS NIL) (EMACS.XCOMMANDS NIL) (EMACS.LIST '((1 EMACS.GOTO.BOL) (2 EMACS.BACK.BYTE) (4 EMACS.FWD.DELETE.BYTE) (5 EMACS.GOTO.EOL) (6 EMACS.FWD.BYTE) (9 EMACS.TAB) (11 EMACS.KILL.LINE) (12 EMACS.REDISPLAY) (14 EMACS.NEXT.LINE) (16 EMACS.PREVIOUS.LINE) (17 EMACS.QUOTE.BYTE) (19 EMACS.SEARCH) (20 EMACS.TRANSPOSE.BYTES) (22 EMACS.NEXT.SCREENFULL) (24 EMACS.CX) (26 EMACS.CZ) (41 EMACS.RPAREN) (93 EMACS.RBRACKET) (125 EMACS.RBRACE) (127 EMACS.BACK.DELETE.BYTE))) (EMACS.MLIST '((1 EMACS.GOTO.BOD) (2 EMACS.SAFE.BACK.SEXPR) (5 EMACS.GOTO.EOD) (6 EMACS.FWD.SEXPR) (11 EMACS.KILL.SEXPR) (60 EMACS.GOTO.BOF) (62 EMACS.GOTO.EOF) (66 EMACS.BACK.WORD) (68 EMACS.FWD.DELETE.WORD) (69 EMACS.EDIT) (70 EMACS.FWD.WORD) (71 EMACS.GRIND) (52 EMACS.SNARF) (86 EMACS.PREVIOUS.SCREENFULL) (94 EMACS.JOIN.LINES) (127 EMACS.BACK.DELETE.WORD))) (EMACS.XLIST '((22 EMACS.CXCV) (23 EMACS.CXCW) (26 EMACS.CXCZ))) (\BQUOTE.LEVEL 0)) (RECORDS EMACSSTREAM) (FNS EMACS.INIT EMACS.INIT.BACKGROUND DEDITEmacs EMACS.INIT.COMMANDS EMACS.COMMAND EMACS.OPERATE EMACS.GETKEY EMACS EMACS.PROCESS EMACS.TEDIT1 EMACS.WINDOW EMACS.SETFILEPTR EMACS.GETCARETPTR EMACS.SETCARETPTR EMACS.SHOWCARET EMACS.BOL EMACS.EOL EMACS.DELETE.BYTES EMACS.BOFP EMACS.EOFP EMACS.CCHAR EMACS.PEEKBIN EMACS.FBYTE EMACS.FWORD EMACS.BYTEP EMACS.FSKIP EMACS.FSKIPTO EMACS.BBYTE EMACS.BCHAR EMACS.BPEEKCHAR EMACS.BWORD EMACS.BSKIP EMACS.BSKIPTO EMACS.SET.EOF EMACS.GOTO.BOL EMACS.BACK.BYTE EMACS.FWD.DELETE.BYTE EMACS.GOTO.EOL EMACS.FWD.BYTE EMACS.KILL.LINE EMACS.DELETE.CHARS EMACS.REDISPLAY EMACS.NEXT.LINE EMACS.PREVIOUS.LINE EMACS.QUOTE.BYTE EMACS.SEARCH EMACS.TRANSPOSE.BYTES EMACS.NEXT.SCREENFULL EMACS.CXCV EMACS.CXCW EMACS.CXCZ EMACS.FWD.SEXPR EMACS.BACK.DELETE.BYTE EMACS.GOTO.BOD EMACS.BOD EMACS.GOTO.EOD EMACS.EOD EMACS.KILL.SEXPR EMACS.GOTO.BOF EMACS.GOTO.EOF EMACS.BACK.WORD EMACS.FWD.DELETE.WORD EMACS.EDIT EMACS.FWD.WORD EMACS.GRIND EMACS.SNARF EMACS.MT EMACS.PREVIOUS.SCREENFULL EMACS.JOIN.LINES EMACS.BACK.DELETE.WORD NEW.TEDIT.SELECT.LINE.SCANNER) (FNS \TEDIT1 \TEDIT.COMMAND.LOOP)) (COMS (* BALANCE *) (PROPS (ACCESSFNS EMACS.TAB) (DATATYPE EMACS.TAB) (DEFEXPR EMACS.TAB) (DEFFEXPR EMACS.TAB) (DEFVAR EMACS.TAB) (DO EMACS.TAB) (FOR EMACS.TAB) (LAMBDA EMACS.TAB) (PROG EMACS.TAB) (RECORD EMACS.TAB) (SELECT EMACS.TAB) (SELECTQ EMACS.TAB) (UNTIL EMACS.TAB) (WHILE EMACS.TAB)) (INITVARS (EMACS.DELIMS NIL) (EMACS.SDELIMS NIL) (EMACS.LDELIMS NIL) (EMACS.RDELIMS NIL) (EMACS.SCACHE NIL) (EMACS.BCACHE NIL) (EMACS.SYNTAX NIL) (EMACS.CR 1) (EMACS.WS 2) (EMACS.SD 4) (EMACS.NONCR 8) (EMACS.NONWS 16) (EMACS.NONSD 32) (EMACS.BQ 64) (EMACS.ALPHA 128) (EMACS.BD 256) (EMACS.SPACE 512)) (FNS EMACS.DELIMS EMACS.CR EMACS.RPAREN EMACS.RBRACKET EMACS.RBRACE EMACS.RANGLE EMACS.SDELIM.COMMAND EMACS.LDELIM.COMMAND EMACS.RDELIM.COMMAND EMACS.SDELIM EMACS.LDELIM EMACS.RDELIM EMACS.OPEN.STRING EMACS.CLOSE.STRING EMACS.OPEN.BALANCE EMACS.CLOSE.BALANCE EMACS.FLUSH.CACHE EMACS.SCACHE EMACS.BCACHE EMACS.SAFE.BACK.SEXPRS EMACS.SAFE.BACK.SEXPR EMACS.BACK.SEXPR EMACS.BACK.WORD EMACS.BACK.SKIPSEPRS EMACS.BACK.ESCAPEDP EMACS.TAB EMACS.TAB.INDENT EMACS.INIT.SYNTAX)) (DECLARE: DONTEVAL@LOAD DOCOPY (P (EMACS.INIT) (MOVD? 'TEDIT.SELECT.LINE.SCANNER ' OLD.TEDIT.SELECT.LINE.SCANNER) (MOVD 'NEW.TEDIT.SELECT.LINE.SCANNER ' TEDIT.SELECT.LINE.SCANNER) (MOVD 'EMACS 'TEDIT))))) (* EMACS -- By Kelly Roach *) (* EMACS *) (RPAQ? BytesPerPage 512) (RPAQ? EMACS.COMMANDS NIL) (RPAQ? EMACS.MCOMMANDS NIL) (RPAQ? EMACS.XCOMMANDS NIL) (RPAQ? EMACS.LIST '((1 EMACS.GOTO.BOL) (2 EMACS.BACK.BYTE) (4 EMACS.FWD.DELETE.BYTE) (5 EMACS.GOTO.EOL) (6 EMACS.FWD.BYTE) (9 EMACS.TAB) (11 EMACS.KILL.LINE) (12 EMACS.REDISPLAY) (14 EMACS.NEXT.LINE) (16 EMACS.PREVIOUS.LINE) (17 EMACS.QUOTE.BYTE) (19 EMACS.SEARCH) (20 EMACS.TRANSPOSE.BYTES) (22 EMACS.NEXT.SCREENFULL) (24 EMACS.CX) (26 EMACS.CZ) (41 EMACS.RPAREN) (93 EMACS.RBRACKET) (125 EMACS.RBRACE) (127 EMACS.BACK.DELETE.BYTE))) (RPAQ? EMACS.MLIST '((1 EMACS.GOTO.BOD) (2 EMACS.SAFE.BACK.SEXPR) (5 EMACS.GOTO.EOD) (6 EMACS.FWD.SEXPR) (11 EMACS.KILL.SEXPR) (60 EMACS.GOTO.BOF) (62 EMACS.GOTO.EOF) (66 EMACS.BACK.WORD) (68 EMACS.FWD.DELETE.WORD) (69 EMACS.EDIT) (70 EMACS.FWD.WORD) (71 EMACS.GRIND) (52 EMACS.SNARF) (86 EMACS.PREVIOUS.SCREENFULL) (94 EMACS.JOIN.LINES) (127 EMACS.BACK.DELETE.WORD))) (RPAQ? EMACS.XLIST '((22 EMACS.CXCV) (23 EMACS.CXCW) (26 EMACS.CXCZ))) (RPAQ? \BQUOTE.LEVEL 0) [DECLARE: EVAL@COMPILE (ACCESSFNS EMACSSTREAM ((TEXTOBJ (fetch (STREAM F3) of DATUM)) (WINDOW (fetch (TEXTOBJ SELWINDOW) of (fetch (EMACSSTREAM TEXTOBJ) of DATUM))) (SELECTION (fetch (TEXTOBJ SEL) of (fetch (EMACSSTREAM TEXTOBJ) of DATUM))) (CARETPTR (EMACS.GETCARETPTR DATUM)) (FILEPTR (GETFILEPTR DATUM)) (DIRTY (fetch (TEXTOBJ \DIRTY) of (fetch (EMACSSTREAM TEXTOBJ) of DATUM))) (BCACHE (EMACS.BCACHE DATUM)) (SCACHE (EMACS.SCACHE DATUM)))) ] (DEFINEQ (EMACS.INIT (LAMBDA NIL (* kbr: "12-Jul-86 16:54") (* Initializes EMACS.  *) (PROG NIL (SETQ TEDIT.INTERRUPTS (QUOTE ((7 HELP)))) (SETQ EMACS.READTABLE (COPYREADTABLE FILERDTBL)) (EMACS.INIT.COMMANDS) (EMACS.INIT.SYNTAX) (EMACS.INIT.BACKGROUND) (ADDTOVAR *DEDIT-MENU-COMMANDS* (Emacs DEDITEmacs)) (CHANGECCODE (QUOTE NILL) (QUOTE TTYDISPLAYSTREAM) (QUOTE \TEDIT.COMMAND.LOOP))))) (EMACS.INIT.BACKGROUND (LAMBDA NIL (* kbr: "24-Jul-85 16:36") (* Fix up BackgroundMenu. *) (PROG NIL (SETQ BackgroundMenuCommands (FOR BUCKET IN BackgroundMenuCommands WHEN (NOT (EQ (CAR BUCKET) (QUOTE TEdit))) COLLECT BUCKET)) (ADDTOVAR BackgroundMenuCommands (EMACS (QUOTE (EMACS)) "Opens an Edit Window.")) (SETQ BackgroundMenu NIL) (* BackgroundMenu recreated by WINDOW package next time user buttons background. *) ))) (DEDITEmacs (LAMBDA NIL (* kbr: "24-Jul-85 16:36") (* Fn to let DEDIT call EMACS on DEDIT top selection. *) (PROG (EXPR) (CURSOR T) (SETQ EXPR (CAR (TOPSELECTION))) (SETQ EXPR (READ (EMACS (MKSTRING EXPR) NIL T) EMACS.READTABLE)) (DEDITZAPCAR (TOPSELECTION) EXPR)))) (EMACS.INIT.COMMANDS (LAMBDA NIL (* kbr: "24-Jul-85 16:36") (* Initialize TEDIT.READTABLE. *) (PROG NIL (SETQ EMACS.COMMANDS (ARRAY 128 (QUOTE POINTER) NIL 0)) (SETQ EMACS.MCOMMANDS (ARRAY 128 (QUOTE POINTER) NIL 0)) (SETQ EMACS.XCOMMANDS (ARRAY 128 (QUOTE POINTER) NIL 0)) (FOR BUCKET IN EMACS.LIST DO (SETA EMACS.COMMANDS (CAR BUCKET) (CADR BUCKET))) (FOR BUCKET IN EMACS.MLIST DO (SETA EMACS.MCOMMANDS (CAR BUCKET) (CADR BUCKET))) (FOR BUCKET IN EMACS.XLIST DO (SETA EMACS.XCOMMANDS (CAR BUCKET) (CADR BUCKET))) (FOR I FROM 0 TO 255 DO (TEDIT.SETFUNCTION I (EMACS.COMMAND I) TEDIT.READTABLE))))) (EMACS.COMMAND (LAMBDA (I) (* kbr: "24-Jul-85 16:36") (BQUOTE (LAMBDA (STREAM) (EMACS.OPERATE (\, I) STREAM))))) (EMACS.OPERATE (LAMBDA (STREAM) (* kbr: "27-Jul-86 17:26") (* Accept token from user *) (PROG (TEXTOBJ I N FN PTR CH) (TTYDISPLAYSTREAM (fetch (EMACSSTREAM WINDOW) of STREAM)) (SETQ TEXTOBJ (fetch (EMACSSTREAM TEXTOBJ) of STREAM)) (while (\SYSBUFP) do (* Handle user type-in) (SETQ I (\GETKEY)) (SETFILEPTR STREAM (fetch (EMACSSTREAM CARETPTR) of STREAM)) (SETQ N 1) (while (EQ I (CHARCODE ^U)) do (SETQ N (ITIMES 4 N)) (SETQ I (\GETKEY))) (SELCHARQ I ((ESC ^Z) (SETQ FN (ELT EMACS.MCOMMANDS (\GETKEY)))) (^X (SETQ FN (ELT EMACS.XCOMMANDS (\GETKEY)))) (COND ((ILESSP I 128) (SETQ FN (ELT EMACS.COMMANDS I))) ((ILESSP I 256) (SETQ FN (ELT EMACS.MCOMMANDS (IDIFFERENCE I 128)))))) (COND ((NULL FN) (* Insert char I N times. *) (* Handle blue pending delete, if there is one.) (TEDIT.DO.BLUEPENDINGDELETE SEL TEXTOBJ) (SETQ PTR (GETFILEPTR STREAM)) (COND ((AND (NOT (ZEROP PTR)) (EQ (\BACKPEEKBIN STREAM) (CHARCODE CR)) (NOT (MEMB I (CHARCODE (SP TAB))))) (* Start of a def *) (EMACS.FLUSH.CACHE))) (COND ((IEQP N 1) (TEDIT.\INSERT I SEL TEXTOBJ)) (T (SETQ CH (MKSTRING (CHARACTER I))) (TEDIT.INSERT STREAM (ALLOCSTRING N CH)))) (SETFILEPTR STREAM (IPLUS PTR N))) (T (for J from 1 to N do (APPLY* FN STREAM)) (COND ((AND (ILESSP I 256) (NOT (BITTEST (ELT EMACS.SYNTAX I) (LOGOR EMACS.CR EMACS.SD EMACS.BD)))) (EMACS.FLUSH.CACHE)))))) (EMACS.SHOWCARET STREAM)))) (EMACS.GETKEY (LAMBDA NIL (* kbr: "24-Jul-85 16:36") (PROG (CODE) (CARET (QUOTE OFF)) (SETQ CODE (\GETKEY)) (CARET T) (RETURN CODE)))) (EMACS (LAMBDA (TEXT WINDOW DONTSPAWN PROPS) (* kbr: "24-Jul-85 16:36") (PROG (PROCESS) (* Get TEXT. *) (COND ((AND (NOT (NULL TEXT)) (LITATOM TEXT)) (SETQ TEXT (OPENFILE TEXT (QUOTE INPUT) (QUOTE OLD))))) (* Get WINDOW. *) (COND ((NULL WINDOW) (SETQ WINDOW (EMACS.WINDOW DONTSPAWN PROPS)))) (COND (DONTSPAWN (* Don't spawn a process. *) (RETURN (EMACS.TEDIT1 TEXT WINDOW T PROPS))) (T (* Spawn a process. *) (SETQ PROCESS (ADD.PROCESS (BQUOTE (EMACS.PROCESS (QUOTE (\, TEXT)) (QUOTE (\, WINDOW)) (QUOTE (\, PROPS)))) (QUOTE EMACS) (QUOTE NO))) (TTY.PROCESS PROCESS) (RETURN PROCESS)))))) (EMACS.PROCESS (LAMBDA (TEXT WINDOW PROPS) (* kbr: "24-Jul-85 16:36") (PROG NIL (WINDOWPROP WINDOW (QUOTE PROCESS) (THIS.PROCESS)) (RETURN (EMACS.TEDIT1 TEXT WINDOW NIL PROPS))))) (EMACS.TEDIT1 (LAMBDA (TEXT WINDOW UNSPAWNED PROPS) (* kbr: "24-Jul-85 16:36") (PROG (ANSWER) (RESETLST (RESETSAVE (TTYDISPLAYSTREAM WINDOW)) (RESETSAVE NIL (LIST (QUOTE INPUT) (INFILE T))) (RESETSAVE NIL (LIST (QUOTE OUTPUT) (OUTFILE T))) (SETQ ANSWER (\TEDIT1 TEXT WINDOW UNSPAWNED PROPS))) (RETURN ANSWER)))) (EMACS.WINDOW (LAMBDA (DONTSPAWN PROPS) (* kbr: "24-Jul-85 16:36") (PROG (WINDOW) (COND ((AND DONTSPAWN TEDIT.DEFAULT.WINDOW) (SETQ WINDOW TEDIT.DEFAULT.WINDOW)) (T (SETQ WINDOW (TEDIT.CREATEW "Indicate region for EMACS")))) (WINDOWPROP WINDOW (QUOTE TEDIT.PROPS) PROPS) (RETURN WINDOW)))) (EMACS.SETFILEPTR (LAMBDA (STREAM PTR) (* kbr: "24-Jul-85 16:36") (* Patch around bug in TEDIT SETFILEPTR. *) (PROG NIL (COND ((IGREATERP (GETEOFPTR STREAM) 0) (SETFILEPTR STREAM PTR) (SETFILEPTR STREAM PTR)))))) (EMACS.GETCARETPTR (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (PROG (SELECTION ANSWER) (SETQ SELECTION (fetch (EMACSSTREAM SELECTION) of STREAM)) (SETQ ANSWER (SELECTQ (fetch (SELECTION POINT) of SELECTION) (LEFT (SUB1 (fetch (SELECTION CH#) of SELECTION))) (RIGHT (fetch (SELECTION CHLIM) of SELECTION)) (SHOULDNT))) (RETURN ANSWER)))) (EMACS.SETCARETPTR (LAMBDA (STREAM PTR) (* kbr: "24-Jul-85 16:36") (* Move caret to new filepos. *) (PROG (EOF) (SETQ EOF (GETEOFPTR STREAM)) (SETQ PTR (IMIN (IMAX PTR 0) EOF)) (TEDIT.SETSEL STREAM (ADD1 PTR) 0 (QUOTE LEFT)) (EMACS.SETFILEPTR STREAM PTR)))) (EMACS.SHOWCARET (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.SETCARETPTR STREAM PTR) (TEDIT.NORMALIZECARET (fetch (EMACSSTREAM TEXTOBJ) of STREAM)) (EMACS.SETFILEPTR STREAM PTR)))) (EMACS.BOL (LAMBDA (STREAM PTR) (* kbr: "24-Jul-85 16:36") (* Beginning of line wrt filepos PTR. *) (PROG (OLDPTR BOL) (SETQ OLDPTR (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM PTR) (EMACS.BSKIP STREAM EMACS.NONCR) (SETQ BOL (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM OLDPTR) (RETURN BOL)))) (EMACS.EOL (LAMBDA (STREAM PTR) (* kbr: "24-Jul-85 16:36") (* End of line wrt filepos PTR. *) (PROG (OLDPTR EOL) (SETQ OLDPTR (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM PTR) (EMACS.FSKIP STREAM EMACS.NONCR) (SETQ EOL (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM OLDPTR) (RETURN EOL)))) (EMACS.DELETE.BYTES (LAMBDA (STREAM PTR1 PTR2) (* kbr: "19-Feb-85 15:11") (* Delete between PTR1 & PTR2 inclusive. *) (PROG (PTR LENGTH) (SETQ PTR (GETFILEPTR STREAM)) (SETQ PTR1 (IMAX 0 PTR1)) (SETQ PTR2 (IMIN (GETEOFPTR STREAM) PTR2)) (SETQ LENGTH (IPLUS PTR2 (IMINUS PTR1) 1)) (TEDIT.DELETE STREAM (ADD1 PTR1) LENGTH) (COND ((ILEQ PTR PTR1) (EMACS.SETFILEPTR STREAM PTR)) ((ILEQ PTR PTR2) (EMACS.SETFILEPTR STREAM PTR1)) (T (EMACS.SETFILEPTR STREAM (IDIFFERENCE PTR LENGTH))))))) (EMACS.BOFP (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (ZEROP (GETFILEPTR STREAM)))) (EMACS.EOFP (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (IEQP (GETFILEPTR STREAM) (GETEOFPTR STREAM)))) (EMACS.CCHAR (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Caret char. Char being pointed at by caret. *) (PROG (ANSWER) (SETQ ANSWER (\BIN STREAM)) (\BACKBIN STREAM) (RETURN ANSWER)))) (EMACS.PEEKBIN (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (PROG (PTR ANSWER) (SETQ PTR (GETFILEPTR STREAM)) (SETQ ANSWER (\BIN STREAM)) (EMACS.SETFILEPTR STREAM PTR) (RETURN ANSWER)))) (EMACS.FBYTE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:11") (* Forward a char. *) (COND ((NOT (EMACS.EOFP STREAM)) (\BIN STREAM))))) (EMACS.FWORD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Forward a word. *) (PROG NIL (EMACS.FSKIP STREAM EMACS.WS) (EMACS.FSKIP STREAM EMACS.NONWS)))) (EMACS.BYTEP (LAMBDA (N) (* kbr: "24-Jul-85 16:38") (AND (SMALLP N) (ILESSP N 256) N))) (EMACS.FSKIP (LAMBDA (STREAM CLASS LIMIT) (* kbr: "24-Jul-85 16:36") (* Skip chars in CLASS. *) (COND ((NULL LIMIT) (SETQ LIMIT (GETEOFPTR STREAM)))) (PROG NIL (while (AND (ILESSP (GETFILEPTR STREAM) LIMIT) (BITTEST (ELT EMACS.SYNTAX (OR (EMACS.BYTEP (EMACS.PEEKBIN STREAM)) 256)) CLASS)) do (\BIN STREAM))))) (EMACS.FSKIPTO (LAMBDA (STREAM CLASS) (* kbr: "24-Jul-85 16:36") (* Skip chars in CLASS. *) (PROG NIL (WHILE (AND (NOT (EMACS.EOFP STREAM)) (NOT (BITTEST (ELT EMACS.SYNTAX (OR (EMACS.BYTEP (\BIN STREAM)) 256)) CLASS))) DO (* Continue reading. *))))) (EMACS.BBYTE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Backward a byte. *) (COND ((NOT (EMACS.BOFP STREAM)) (\BACKBIN STREAM))))) (EMACS.BCHAR (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Backward a char. *) (PROG NIL (COND ((NOT (EMACS.BOFP STREAM)) (\BACKBIN STREAM)))))) (EMACS.BPEEKCHAR (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Backwards peek at char. *) (PROG (PTR BYTE) (SETQ PTR (GETFILEPTR STREAM)) (SETQ BYTE (EMACS.BCHAR STREAM)) (SETFILEPTR STREAM PTR) (RETURN BYTE)))) (EMACS.BWORD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Backward a word. *) (PROG NIL (EMACS.BSKIP STREAM EMACS.WS) (EMACS.BSKIP STREAM EMACS.NONWS)))) (EMACS.BSKIP (LAMBDA (STREAM CLASS LIMIT) (* kbr: "24-Jul-85 16:36") (* Skip chars in CLASS. *) (COND ((NULL LIMIT) (SETQ LIMIT 0))) (PROG NIL (while (AND (IGREATERP (GETFILEPTR STREAM) LIMIT) (BITTEST (ELT EMACS.SYNTAX (OR (EMACS.BYTEP (\BACKPEEKBIN STREAM)) 256)) CLASS)) do (\BACKBIN STREAM))))) (EMACS.BSKIPTO (LAMBDA (STREAM CLASS) (* kbr: "24-Jul-85 16:36") (* Skip chars in CLASS. *) (PROG NIL (WHILE (AND (NOT (EMACS.BOFP STREAM)) (NOT (BITTEST (ELT EMACS.SYNTAX (OR (EMACS.BYTEP (\BACKBIN STREAM)) 256)) CLASS))) DO (* Continue reading. *))))) (EMACS.SET.EOF (LAMBDA (STREAM PTR) (* kbr: "19-Feb-85 15:12") (* Temporarily reset eof of STREAM. *) (PROG NIL (replace (STREAM EPAGE) of STREAM with (LRSH PTR 8)) (replace (STREAM EOFFSET) of STREAM with (LOGAND PTR 255)) (replace (TEXTOBJ TEXTLEN) of (fetch (EMACSSTREAM TEXTOBJ) of STREAM) with PTR)))) (EMACS.GOTO.BOL (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go to beginning of line. *) (PROG NIL (EMACS.BSKIP STREAM EMACS.NONCR)))) (EMACS.BACK.BYTE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Go back a byte. *) (PROG NIL (EMACS.BBYTE STREAM)))) (EMACS.FWD.DELETE.BYTE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Delete byte. *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.DELETE.BYTES STREAM PTR PTR)))) (EMACS.GOTO.EOL (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go to end of line. *) (PROG NIL (EMACS.FSKIP STREAM EMACS.NONCR)))) (EMACS.FWD.BYTE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Go forward a byte. *) (PROG NIL (EMACS.FBYTE STREAM)))) (EMACS.KILL.LINE (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Delete a line. *) (PROG (PTR EOL) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.FSKIP STREAM EMACS.NONCR) (SETQ EOL (GETFILEPTR STREAM)) (COND ((IGREATERP EOL PTR) (EMACS.DELETE.CHARS STREAM PTR (SUB1 EOL))) ((ILESSP EOL (GETEOFPTR STREAM)) (EMACS.DELETE.CHARS STREAM EOL EOL))) (EMACS.SETFILEPTR STREAM PTR)))) (EMACS.DELETE.CHARS (LAMBDA (STREAM PTR1 PTR2) (* kbr: "18-Jun-86 23:23") (* Delete between PTR1 & PTR2 inclusive. *) (PROG (PTR LENGTH) (SETQ PTR (GETFILEPTR STREAM)) (SETQ PTR1 (IMAX 0 PTR1)) (SETQ PTR2 (IMIN (GETEOFPTR STREAM) PTR2)) (SETQ LENGTH (IPLUS PTR2 (IMINUS PTR1) 1)) (TEDIT.DELETE STREAM (ADD1 PTR1) LENGTH) (COND ((ILEQ PTR PTR1) (SETFILEPTR STREAM PTR)) ((ILEQ PTR PTR2) (SETFILEPTR STREAM PTR1)) (T (SETFILEPTR STREAM (IDIFFERENCE PTR LENGTH))))))) (EMACS.REDISPLAY (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Redisplay EMACS screen. *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (REDISPLAYW (fetch (EMACSSTREAM WINDOW) of STREAM)) (EMACS.SETFILEPTR STREAM PTR)))) (EMACS.NEXT.LINE (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go down a line. *) (PROG (PTR BOL EOL NBOL NEOL OFFSET) (SETQ PTR (GETFILEPTR STREAM)) (SETQ BOL (EMACS.BOL STREAM PTR)) (* First char on line is at OFFSET = 0.0 *) (SETQ OFFSET (IPLUS PTR (IMINUS BOL))) (SETQ EOL (EMACS.EOL STREAM PTR)) (SETQ NBOL (ADD1 EOL)) (COND ((ILEQ (GETEOFPTR STREAM) NBOL) (EMACS.SETFILEPTR STREAM (GETEOFPTR STREAM))) (T (SETQ NEOL (EMACS.EOL STREAM NBOL)) (SETQ OFFSET (IMIN OFFSET (IDIFFERENCE NEOL NBOL))) (EMACS.SETFILEPTR STREAM (IPLUS NBOL OFFSET))))))) (EMACS.PREVIOUS.LINE (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go up a line. *) (PROG (PTR BOL PBOL PEOL OFFSET) (SETQ PTR (GETFILEPTR STREAM)) (SETQ BOL (EMACS.BOL STREAM PTR)) (* First char on line is at OFFSET = 0.0 *) (SETQ OFFSET (IPLUS PTR (IMINUS BOL))) (SETQ PEOL (SUB1 BOL)) (COND ((IGEQ 0 PEOL) (EMACS.SETFILEPTR STREAM 0)) (T (SETQ PBOL (EMACS.BOL STREAM PEOL)) (SETQ OFFSET (IMIN OFFSET (IDIFFERENCE PEOL PBOL))) (EMACS.SETFILEPTR STREAM (IPLUS PBOL OFFSET))))))) (EMACS.QUOTE.BYTE (LAMBDA (STREAM) (* kbr: "18-Jun-86 22:59") (* Quote next byte. *) (PROG (PTR CH) (* TBW: Fix use TEDIT's use of terminal table. *) (SETQ PTR (GETFILEPTR STREAM)) (SETQ CH (\GETKEY)) (TEDIT.INSERT STREAM CH (ADD1 PTR)) (EMACS.SETFILEPTR STREAM (ADD1 PTR))))) (EMACS.SEARCH (LAMBDA (STREAM) (* kbr: "18-Jun-86 23:12") (* Case sensitive search, with "*" and "#" wildcards  *) (PROG (PTR TEXTOBJ W OFILE SEL CH) (SETQ PTR (GETFILEPTR STREAM)) (SETQ TEXTOBJ (fetch (EMACSSTREAM TEXTOBJ) of STREAM)) (SETQ W (fetch (EMACSSTREAM WINDOW) of STREAM)) (ERSETQ (RESETLST (RESETSAVE (\TEDIT.MARKACTIVE TEXTOBJ) (QUOTE (AND (\TEDIT.MARKINACTIVE OLDVALUE)))) (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with (QUOTE Find)) (SETQ OFILE (WINDOWPROP W (QUOTE TEDIT.LAST.FIND.STRING))) (SETQ OFILE (TEDIT.GETINPUT STREAM "Text to find: " OFILE (CHARCODE (EOL LF ESC ^S)))) (COND (OFILE (WINDOWPROP W (QUOTE TEDIT.LAST.FIND.STRING) OFILE) (SETQ SEL (fetch (TEXTOBJ SEL) of TEXTOBJ)) (\SHOWSEL SEL NIL NIL) (RESETLST (RESETSAVE (CURSOR WAITINGCURSOR)) (SETQ CH (TEDIT.FIND TEXTOBJ (MKSTRING OFILE) NIL NIL T))) (COND (CH (* We found the target text.) (* Set up SELECTION to be the found text) (replace (SELECTION CH#) of SEL with (CAR CH)) (replace (SELECTION CHLIM) of SEL with (CADR CH)) (replace (SELECTION DCH) of SEL with (ADD1 (IDIFFERENCE (CADR CH) (CAR CH)))) (replace (SELECTION POINT) of SEL with (QUOTE RIGHT)) (TEDIT.RESET.EXTEND.PENDING.DELETE SEL) (* And never pending a deletion.) (\FIXSEL SEL TEXTOBJ) (TEDIT.NORMALIZECARET TEXTOBJ) (\SHOWSEL SEL NIL T) (EMACS.SETFILEPTR STREAM (EMACS.GETCARETPTR STREAM)) (* And get it into the window *) ) (T (FRESHLINE PROMPTWINDOW) (printout PROMPTWINDOW "String '" OFILE "' not found." T) (\SHOWSEL SEL NIL T) (EMACS.SETFILEPTR STREAM PTR))))) (replace (TEXTOBJ \INSERTNEXTCH) of TEXTOBJ with -1)))))) (EMACS.TRANSPOSE.BYTES (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Transpose bytes. *) (PROG (PTR CODE CH) (COND ((OR (EMACS.BOFP STREAM) (EMACS.EOFP STREAM)) (RETURN))) (SETQ PTR (GETFILEPTR STREAM)) (SETQ CODE (\BIN STREAM)) (COND ((NUMBERP CODE) (SETQ CH (MKSTRING (CHARACTER CODE)))) (T (* IMAGEOBJ *) (SETQ CH CODE))) (EMACS.DELETE.BYTES STREAM PTR PTR) (EMACS.SETFILEPTR STREAM (SUB1 PTR)) (TEDIT.INSERT STREAM CH PTR) (EMACS.SETFILEPTR STREAM (ADD1 PTR))))) (EMACS.NEXT.SCREENFULL (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Forward one screenfull. *) (PROG (WINDOW DELTAX DELTAY) (SETQ WINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (SETQ DELTAX 0) (SETQ DELTAY (IDIFFERENCE (WINDOWPROP WINDOW (QUOTE HEIGHT)) (FONTPROP (DSPFONT NIL WINDOW) (QUOTE HEIGHT)))) (replace (TEXTOBJ EDITOPACTIVE) of (fetch (EMACSSTREAM TEXTOBJ) of STREAM) with NIL) (\TEDIT.SCROLLFN WINDOW DELTAX DELTAY)))) (EMACS.CXCV (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Visit a file. *) (PROG (FILE) (SETQ FILE (TEDIT.GETINPUT (fetch (EMACSSTREAM TEXTOBJ) of STREAM) "File to GET:")) (COND ((NULL FILE) (RETURN))) (COND ((fetch (EMACSSTREAM DIRTY) of STREAM) (EMACS.CXCW STREAM))) (TEDIT.GET (fetch (EMACSSTREAM TEXTOBJ) of STREAM) FILE) (EMACS.SETFILEPTR STREAM 0)))) (EMACS.CXCW (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Write buffer out to file. *) (PROG NIL (TEDIT.PUT (fetch (EMACSSTREAM TEXTOBJ) of STREAM))))) (EMACS.CXCZ (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Eval FORM in front of caret in lisp EXEC process. *) (PROG (FORM) (SETQ FORM (READ STREAM EMACS.READTABLE)) (PROCESS.EVAL (QUOTE EXEC) FORM)))) (EMACS.FWD.SEXPR (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go forward a sexpr. *) (PROG NIL (RESETLST (* Accept uncaught BQUOTE commas. *) (RESETSAVE \BQUOTELEVEL (IQUOTIENT MAX.FIXP 2)) (READ STREAM EMACS.READTABLE))))) (EMACS.BACK.DELETE.BYTE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Delete byte in backwards direction. *) (* TBW: Delete selection if there is a selection. *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.DELETE.BYTES STREAM (SUB1 PTR) (SUB1 PTR))))) (EMACS.GOTO.BOD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go to top of definition. *) (PROG (CODE) (* Find non-WS immediately preceded by CR. *) (EMACS.BCHAR STREAM) (DO (COND ((EMACS.BOFP STREAM) (RETURN))) (EMACS.BSKIP STREAM EMACS.NONCR) (COND ((BITTEST (ELT EMACS.SYNTAX (EMACS.CCHAR STREAM)) EMACS.NONWS) (RETURN))) (EMACS.BCHAR STREAM))))) (EMACS.BOD (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Determine top of definition. *) (PROG (PTR ANSWER) (SETQ PTR (GETFILEPTR STREAM)) (* Find lparen preceded by CR. *) (EMACS.BSKIP STREAM EMACS.CR) (DO (COND ((EMACS.BOFP STREAM) (RETURN))) (EMACS.BSKIP STREAM EMACS.NONCR) (COND ((EMACS.BOFP STREAM) (RETURN))) (COND ((OR (EMACS.BOFP STREAM) (EQ (\PEEKBIN STREAM) (CHARCODE "("))) (RETURN))) (EMACS.BBYTE STREAM)) (SETQ ANSWER (GETFILEPTR STREAM)) (SETFILEPTR STREAM PTR) (RETURN ANSWER)))) (EMACS.GOTO.EOD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go to top of next definition. *) (PROG (CODE) (* Find non-WS immediately preceded by CR. *) (EMACS.FCHAR STREAM) (DO (COND ((EMACS.EOFP STREAM) (RETURN))) (EMACS.FSKIP STREAM EMACS.NONCR) (EMACS.FCHAR STREAM) (COND ((BITTEST (ELT EMACS.SYNTAX (EMACS.CCHAR STREAM)) EMACS.NONWS) (RETURN))))))) (EMACS.EOD (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:12") (* Determine top of next definition. *) (PROG (PTR ANSWER) (SETQ PTR (GETFILEPTR STREAM)) (* Find two CRs. *) (EMACS.FSKIP STREAM EMACS.CR) (DO (COND ((EMACS.EOFP STREAM) (RETURN))) (EMACS.FSKIP STREAM EMACS.NONCR) (COND ((EMACS.EOFP STREAM) (RETURN))) (EMACS.FBYTE STREAM) (COND ((OR (EMACS.EOFP STREAM) (EQ (\PEEKBIN STREAM) (CHARCODE CR))) (\BACKBIN STREAM) (RETURN)))) (SETQ ANSWER (GETFILEPTR STREAM)) (SETFILEPTR STREAM PTR) (RETURN ANSWER)))) (EMACS.KILL.SEXPR (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Delete expression. *) (PROG (PTR1 PTR2) (SETQ PTR1 (GETFILEPTR STREAM)) (READ STREAM EMACS.READTABLE) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (EMACS.SETFILEPTR STREAM PTR1)))) (EMACS.GOTO.BOF (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go to beginning of file. *) (PROG NIL (EMACS.SETFILEPTR STREAM 0)))) (EMACS.GOTO.EOF (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Go to end of file. *) (PROG NIL (EMACS.SETFILEPTR STREAM (GETEOFPTR STREAM))))) (EMACS.BACK.WORD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Backward a word. *) (PROG NIL (EMACS.BWORD STREAM)))) (EMACS.FWD.DELETE.WORD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Delete word. *) (PROG (PTR1 PTR2) (SETQ PTR1 (GETFILEPTR STREAM)) (EMACS.FSKIP STREAM EMACS.WS) (EMACS.FSKIP STREAM EMACS.NONWS) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (EMACS.SETFILEPTR STREAM PTR1)))) (EMACS.EDIT (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* DEDIT expression. *) (PROG (EXPR PTR1 PTR2) (SKIPSEPRS STREAM) (SETQ PTR1 (GETFILEPTR STREAM)) (SETQ EXPR (READ STREAM EMACS.READTABLE)) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (SETQ EXPR (EDITE EXPR)) (PRINTDEF EXPR NIL NIL NIL NIL STREAM)))) (EMACS.FWD.WORD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Forward a word. *) (PROG NIL (EMACS.FWORD STREAM)))) (EMACS.GRIND (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Grind expression. *) (PROG (EXPR PTR1 PTR2) (SKIPSEPRS STREAM) (SETQ PTR1 (GETFILEPTR STREAM)) (SETQ EXPR (READ STREAM EMACS.READTABLE)) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (PRINTDEF EXPR NIL NIL NIL NIL STREAM)))) (EMACS.SNARF (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Snarf expression from DEDIT window. *) (PROG (EXPR) (SETQ EXPR (CAR (TOPSELECTION))) (PRINTDEF EXPR NIL NIL NIL NIL STREAM)))) (EMACS.MT (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Transpose words. *) (PROG (PTR BPTR1 BPTR2 FPTR1 FPTR2) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.BSKIP STREAM EMACS.WS) (SETQ BPTR2 (GETFILEPTR STREAM)) (EMACS.BWORD) (SETQ BPTR1 (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM PTR) (EMACS.FSKIP STREAM EMACS.WS) (SETQ FPTR1 (GETFILEPTR STREAM)) (EMACS.FWORD STREAM) (SETQ FPTR2 (GETFILEPTR STREAM)) (* How do I move? *) ))) (EMACS.PREVIOUS.SCREENFULL (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Backwards a screenfull. *) (PROG (WINDOW DELTAX DELTAY) (SETQ WINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (SETQ DELTAX 0) (SETQ DELTAY (IDIFFERENCE (FONTPROP (DSPFONT NIL WINDOW) (QUOTE HEIGHT)) (WINDOWPROP WINDOW (QUOTE HEIGHT)))) (replace (TEXTOBJ EDITOPACTIVE) of (fetch (EMACSSTREAM TEXTOBJ) of STREAM) with NIL) (\TEDIT.SCROLLFN WINDOW DELTAX DELTAY)))) (EMACS.JOIN.LINES (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Move current line up *) (PROG (PTR BOL EOL PBOL PEOL PTR1 PTR2) (SETQ PTR (GETFILEPTR STREAM)) (SETQ BOL (EMACS.BOL STREAM PTR)) (SETQ EOL (EMACS.EOL STREAM PTR)) (COND ((ZEROP BOL) (RETURN))) (SETQ PEOL (SUB1 BOL)) (SETQ PBOL (EMACS.BOL STREAM PEOL)) (EMACS.SETFILEPTR STREAM BOL) (EMACS.BSKIP STREAM EMACS.WS) (SETQ PTR1 (IMAX (GETFILEPTR STREAM) PBOL)) (EMACS.SETFILEPTR STREAM BOL) (EMACS.FSKIP STREAM EMACS.WS) (SETQ PTR2 (IMIN (GETFILEPTR STREAM) (ADD1 EOL))) (EMACS.SETFILEPTR STREAM PTR1) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (\BOUT STREAM (CHARCODE SP)) (EMACS.SETFILEPTR STREAM (ADD1 PTR1))))) (EMACS.BACK.DELETE.WORD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Delete backward a word. *) (PROG (PTR1 PTR2) (SETQ PTR1 (GETFILEPTR STREAM)) (EMACS.BWORD STREAM) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR2 (SUB1 PTR1))))) (NEW.TEDIT.SELECT.LINE.SCANNER (LAMBDA (X Y TEXTOBJ LINE.LIST REGION WORDSELFLG SELOPERATION WINDOW) (* kbr: "24-Jul-85 16:49") (PROG (SELECTION PTR) (SETQ SELECTION (OLD.TEDIT.SELECT.LINE.SCANNER X Y TEXTOBJ LINE.LIST REGION WORDSELFLG SELOPERATION WINDOW)) (COND ((EQ (TYPENAME SELECTION) (QUOTE SELECTION)) (replace (SELECTION POINT) of SELECTION with (QUOTE LEFT)) (EMACS.SETFILEPTR (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ) (SUB1 (fetch (SELECTION CH#) of SELECTION))))) (EMACS.FLUSH.CACHE) (RETURN SELECTION)))) ) (DEFINEQ (\TEDIT1 (LAMBDA (TEXT WINDOW UNSPAWNED PROPS) (* kbr: "11-Jun-86 23:06") (* Does the actual editing work, and  re-coercion or process kill when done.  Called by TEDIT directly, or  ADD.PROCESSed by it.) (SETQ TEXT (OPENTEXTSTREAM TEXT WINDOW NIL NIL PROPS)) (* Open the text for editing) (\TEDIT.COMMAND.LOOP TEXT) (* Run the editing engine) (CLOSEW WINDOW) (replace \WINDOW of (fetch (TEXTSTREAM TEXTOBJ) of TEXT) with NIL) (AND (TEXTPROP (fetch (TEXTSTREAM TEXTOBJ) of TEXT) (QUOTE AFTERQUITFN)) (APPLY* (TEXTPROP (fetch (TEXTSTREAM TEXTOBJ) of TEXT) (QUOTE AFTERQUITFN)) WINDOW TEXT)) (* Apply any post-window-close  (and post-QUIT) function) (COND (UNSPAWNED (* We're not a distinct process: Send  back the edited text in some suitable  form) (COND ((NEQ (fetch EDITFINISHEDFLG of (fetch (TEXTSTREAM TEXTOBJ) of TEXT)) T) (PROG1 (fetch EDITFINISHEDFLG of (fetch (TEXTSTREAM TEXTOBJ) of TEXT)) (replace EDITFINISHEDFLG of (fetch (TEXTSTREAM TEXTOBJ) of TEXT) with NIL))) ((STRINGP (fetch TXTFILE of (fetch (TEXTSTREAM TEXTOBJ) of TEXT))) (COERCETEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TEXT) (QUOTE STRINGP))) (T TEXT)))))) (\TEDIT.COMMAND.LOOP (LAMBDA (STREAM RTBL) (* kbr: " 9-Jul-86 18:03") (* Main command loop for the TEDIT  editor. Includes keyboard polling and  command dispatch) (PROG (TEXTOBJ ISCRSTRING SEL WINDOW LINES IPASSSTRING TTYWINDOW) (COND ((type? STREAM STREAM) (SETQ TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of STREAM))) ((type? TEXTOBJ STREAM) (SETQ TEXTOBJ STREAM) (SETQ STREAM (TEXTSTREAM TEXTOBJ))) (T (HELP))) (SETQ ISCRSTRING (ALLOCSTRING \SCRATCHLEN " ")) (SETQ SEL (fetch (TEXTOBJ SEL) of TEXTOBJ)) (SETQ WINDOW (fetch (TEXTOBJ \WINDOW) of TEXTOBJ)) (SETQ LINES (fetch (TEXTOBJ LINES) of TEXTOBJ)) (SETQ IPASSSTRING (SUBSTRING ISCRSTRING 1)) (* Used inside \INSERT\TTY\BUFFER) (SETQ RTBL (OR RTBL (fetch (TEXTOBJ TXTRTBL) of TEXTOBJ) TEDIT.READTABLE)) (* Used to derive command characters  from type-in) (for WW inside WINDOW do (WINDOWPROP WW (QUOTE PROCESS) (THIS.PROCESS))) (* And the window to this process) (while (NOT (TTY.PROCESSP)) do (* Wait until we really have the TTY  before proceeding.) (DISMISS 250)) (TTYDISPLAYSTREAM (fetch (EMACSSTREAM WINDOW) of STREAM)) (RESETLST (RESETSAVE (\TEDIT.COMMAND.RESET.SETUP (LIST TEXTOBJ WINDOW) T)) (PROG (CH FN TCH DIRTY BLANKSEEN INSCH# CRSEEN TLEN CHNO READSA TERMSA TEDITSA TEDITFNHASH LOOPFN CHARFN COMMANDFN) (SETQ DIRTY NIL) (SETQ BLANKSEEN NIL) (SETQ CRSEEN NIL) (SETQ READSA (fetch (READTABLEP READSA) of #CURRENTRDTBL#)) (SETQ TERMSA (OR (fetch (TEXTOBJ TXTTERMSA) of TEXTOBJ) \PRIMTERMSA)) (SETQ TEDITSA (fetch (READTABLEP READSA) of RTBL)) (SETQ TEDITFNHASH (fetch (READTABLEP READMACRODEFS) of RTBL)) (SETQ LOOPFN (TEXTPROP TEXTOBJ (QUOTE LOOPFN))) (SETQ CHARFN (TEXTPROP TEXTOBJ (QUOTE CHARFN))) (while (NOT (fetch (TEXTOBJ EDITFINISHEDFLG) of TEXTOBJ)) do (ERSETQ (PROGN (\WAITFORSYSBUFP 25) (* Await type-in or mouse action) (while (OR TEDIT.SELPENDING (fetch (TEXTOBJ EDITOPACTIVE) of TEXTOBJ)) do (* Don't do anything while he's  selecting or one of the lock-out ops  is active.) (COND ((EQ TEDIT.SELPENDING TEXTOBJ) (* (OR (EQ TEDIT.SELPENDING TEXTOBJ)  (fetch TCUP of (fetch CARET of TEXTOBJ)))) (* If this TEdit is the one being  selected in, or the caret is  explicitly visible, flash it) (TEDIT.FLASHCARET (fetch (TEXTOBJ CARET) of TEXTOBJ)) )) (BLOCK)) (COND ((fetch (TEXTOBJ EDITFINISHEDFLG) of TEXTOBJ)) (T (COND ((fetch (TEXTOBJ TXTNEEDSUPDATE) of TEXTOBJ) (* We got here somehow with the window  not in sync with the text.  Run an update.) (\SHOWSEL SEL NIL NIL) (TEDIT.UPDATE.SCREEN TEXTOBJ NIL T) (\FIXSEL SEL TEXTOBJ) (\SHOWSEL SEL NIL T))) (TEDIT.FLASHCARET (fetch (TEXTOBJ CARET) of TEXTOBJ)) (* Flash the caret periodically  (BUT not while we're here only to  cleanup and quit.)) (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with T) (* Before starting to work, note that  we're doing something.) (* Process any pending selections) (ERSETQ (COND (TEDIT.COPY.PENDING (* Have to copy the shifted SEL to  caret.) (SETQ TEDIT.COPY.PENDING NIL) (\COPYSEL TEDIT.SHIFTEDSELECTION (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ)) (TEDIT.COPY (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ) (fetch (TEXTOBJ SEL) of TEXTOBJ)) (replace (SELECTION SET) of TEDIT.SHIFTEDSELECTION with NIL) (replace (SELECTION L1) of TEDIT.SHIFTEDSELECTION with NIL) (replace (SELECTION LN) of TEDIT.SHIFTEDSELECTION with NIL) (\COPYSEL TEDIT.SHIFTEDSELECTION (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))) (TEDIT.COPYLOOKS.PENDING (* Have to copy the shifted SEL to  caret.) (SETQ TEDIT.COPYLOOKS.PENDING NIL) (\COPYSEL TEDIT.COPYLOOKSSELECTION (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ)) (COND ((EQ (QUOTE PARA) (fetch (SELECTION SELKIND) of (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))) (* copy the paragraph looks, since the  source selection type was paragraph) (TEDIT.COPY.PARALOOKS TEXTOBJ (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ) (fetch (TEXTOBJ SEL) of TEXTOBJ))) (T (* copy the character looks) (TEDIT.COPY.LOOKS TEXTOBJ (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ) (fetch (TEXTOBJ SEL) of TEXTOBJ)))) (\SHOWSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ) NIL NIL) (replace (SELECTION SET) of TEDIT.COPYLOOKSSELECTION with NIL) (replace (SELECTION L1) of TEDIT.COPYLOOKSSELECTION with NIL) (replace (SELECTION LN) of TEDIT.COPYLOOKSSELECTION with NIL) (\COPYSEL TEDIT.COPYLOOKSSELECTION (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))) (TEDIT.MOVE.PENDING (* Have to move the ctrl-shift SEL to  caret.) (SETQ TEDIT.MOVE.PENDING NIL) (\COPYSEL TEDIT.MOVESELECTION (fetch (TEXTOBJ MOVESEL) of TEXTOBJ)) (TEDIT.DO.BLUEPENDINGDELETE SEL TEXTOBJ ) (TEDIT.MOVE (fetch (TEXTOBJ MOVESEL) of TEXTOBJ) (fetch (TEXTOBJ SEL) of TEXTOBJ)) (replace (SELECTION SET) of TEDIT.MOVESELECTION with NIL) (replace (SELECTION L1) of TEDIT.MOVESELECTION with NIL) (replace (SELECTION LN) of TEDIT.MOVESELECTION with NIL) (\COPYSEL TEDIT.MOVESELECTION (fetch (TEXTOBJ MOVESEL) of TEXTOBJ))) (TEDIT.DEL.PENDING (* Delete the current selection.) (SETQ TEDIT.DEL.PENDING NIL) (* Above all, reset the demand flag  first) (COND ((fetch (SELECTION SET) of TEDIT.DELETESELECTION ) (* Only try the deletion if he really  set the selection.) (\SHOWSEL (fetch (TEXTOBJ DELETESEL) of TEXTOBJ) NIL NIL) (* Turn off the selection highlights) (\SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) NIL NIL) (replace (SELECTION SET) of (fetch (TEXTOBJ DELETESEL) of TEXTOBJ) with NIL) (\COPYSEL TEDIT.DELETESELECTION (fetch (TEXTOBJ SEL) of TEXTOBJ)) (\TEDIT.SET.SEL.LOOKS (fetch (TEXTOBJ SEL) of TEXTOBJ) (QUOTE NORMAL)) (* Grab the selection we're to use) (\TEDIT.DELETE (fetch (TEXTOBJ SEL) of TEXTOBJ) (fetch (SELECTION \TEXTOBJ) of (fetch (TEXTOBJ SEL) of TEXTOBJ)) NIL) (replace (SELECTION L1) of TEDIT.DELETESELECTION with NIL) (replace (SELECTION LN) of TEDIT.DELETESELECTION with NIL)))))) (UNINTERRUPTABLY (replace (STRINGP OFFST) of ISCRSTRING with 0) (replace (STRINGP LENGTH) of ISCRSTRING with \SCRATCHLEN )) (COND ((\SYSBUFP) (ERSETQ (EMACS.OPERATE STREAM)))))) (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with NIL))) (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with NIL))))))) ) (* BALANCE *) (PUTPROPS ACCESSFNS EMACS.TAB 2) (PUTPROPS DATATYPE EMACS.TAB 2) (PUTPROPS DEFEXPR EMACS.TAB 2) (PUTPROPS DEFFEXPR EMACS.TAB 2) (PUTPROPS DEFVAR EMACS.TAB 2) (PUTPROPS DO EMACS.TAB 1) (PUTPROPS FOR EMACS.TAB 1) (PUTPROPS LAMBDA EMACS.TAB 2) (PUTPROPS PROG EMACS.TAB 2) (PUTPROPS RECORD EMACS.TAB 2) (PUTPROPS SELECT EMACS.TAB 2) (PUTPROPS SELECTQ EMACS.TAB 2) (PUTPROPS UNTIL EMACS.TAB 1) (PUTPROPS WHILE EMACS.TAB 1) (RPAQ? EMACS.DELIMS NIL) (RPAQ? EMACS.SDELIMS NIL) (RPAQ? EMACS.LDELIMS NIL) (RPAQ? EMACS.RDELIMS NIL) (RPAQ? EMACS.SCACHE NIL) (RPAQ? EMACS.BCACHE NIL) (RPAQ? EMACS.SYNTAX NIL) (RPAQ? EMACS.CR 1) (RPAQ? EMACS.WS 2) (RPAQ? EMACS.SD 4) (RPAQ? EMACS.NONCR 8) (RPAQ? EMACS.NONWS 16) (RPAQ? EMACS.NONSD 32) (RPAQ? EMACS.BQ 64) (RPAQ? EMACS.ALPHA 128) (RPAQ? EMACS.BD 256) (RPAQ? EMACS.SPACE 512) (DEFINEQ (EMACS.DELIMS (LAMBDA (LCHARCODE RCHARCODE) (* kbr: "19-Feb-85 15:13") (* Make LCHARCODE & RCHARCODE into delimiters. If LCHARCODE = RCHARCODE, then string style. Otherwise paren style. *) (PROG (BUCKET) (SETQ BUCKET (CONS LCHARCODE RCHARCODE)) (COND ((MEMBER BUCKET EMACS.DELIMS) (* Already there. *) (RETURN))) (PUSH EMACS.DELIMS BUCKET) (COND ((IEQP LCHARCODE RCHARCODE) (SETSYNTAX LCHARCODE (QUOTE STRINGDELIM) EMACS.READTABLE) (SETA EMACS.SYNTAX LCHARCODE (LOGOR EMACS.NONWS EMACS.NONCR EMACS.SD)) (SETA EMACS.COMMANDS LCHARCODE (EMACS.SDELIM.COMMAND (MKSTRING (CHARACTER LCHARCODE)))) (PUSH EMACS.SDELIMS LCHARCODE)) (T (SETSYNTAX LCHARCODE (QUOTE LEFTPAREN) EMACS.READTABLE) (SETSYNTAX RCHARCODE (QUOTE RIGHTPAREN) EMACS.READTABLE) (FOR I IN (LIST LCHARCODE RCHARCODE) DO (SETA EMACS.SYNTAX I (LOGOR EMACS.NONCR EMACS.NONWS EMACS.NONSD EMACS.BD))) (SETA EMACS.COMMANDS LCHARCODE (EMACS.LDELIM.COMMAND (MKSTRING (CHARACTER LCHARCODE)))) (SETA EMACS.COMMANDS RCHARCODE (EMACS.RDELIM.COMMAND (MKSTRING (CHARACTER RCHARCODE)))) (PUSH EMACS.LDELIMS LCHARCODE) (PUSH EMACS.RDELIMS RCHARCODE)))))) (EMACS.CR (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM (CHARACTER (CHARCODE CR))) (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((NOT (EQ (EMACS.SCACHE STREAM) (QUOTE OUTSIDE))) (FLASHWINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (EMACS.SETCARETPTR STREAM EMACS.SCACHE) (DISMISS 1000) (EMACS.SETCARETPTR STREAM (ADD1 PTR)) (SETQ EMACS.SCACHE (QUOTE OUTSIDE)) (SETQ EMACS.BCACHE NIL)))))) (EMACS.RPAREN (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM ")") (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EQ (EMACS.SCACHE STREAM) (QUOTE OUTSIDE)) (EMACS.CLOSE.BALANCE STREAM)))))) (EMACS.RBRACKET (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM "]") (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EQ (EMACS.SCACHE STREAM) (QUOTE OUTSIDE)) (EMACS.CLOSE.BALANCE STREAM)))))) (EMACS.RBRACE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM "}") (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EQ (EMACS.SCACHE STREAM) (QUOTE OUTSIDE)) (EMACS.CLOSE.BALANCE STREAM)))))) (EMACS.RANGLE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM ">") (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EQ (EMACS.SCACHE STREAM) (QUOTE OUTSIDE)) (EMACS.CLOSE.BALANCE STREAM)))))) (EMACS.SDELIM.COMMAND (LAMBDA (SDELIM) (* kbr: "19-Feb-85 15:14") (* Return sdelim fn to be inserted in EMACS.COMMANDS. SDELIM = 1 letter string. *) (PROG (ANSWER) (SETQ ANSWER (\BQUOTE (LAMBDA (STREAM) (EMACS.SDELIM (\COMMA SDELIM) STREAM)))) (RETURN ANSWER)))) (EMACS.LDELIM.COMMAND (LAMBDA (LDELIM) (* kbr: "19-Feb-85 15:14") (* Return LDELIM fn to be inserted in EMACS.COMMANDS. LDELIM = 1 letter string. *) (PROG (ANSWER) (SETQ ANSWER (\BQUOTE (LAMBDA (STREAM) (EMACS.LDELIM (\COMMA LDELIM) STREAM)))) (RETURN ANSWER)))) (EMACS.RDELIM.COMMAND (LAMBDA (RDELIM) (* kbr: "19-Feb-85 15:14") (* Return RDELIM fn to be inserted in EMACS.COMMANDS. RDELIM = 1 letter string. *) (PROG (ANSWER) (SETQ ANSWER (\BQUOTE (LAMBDA (STREAM) (EMACS.RDELIM (\COMMA RDELIM) STREAM)))) (RETURN ANSWER)))) (EMACS.SDELIM (LAMBDA (SDELIM STREAM) (* kbr: "19-Feb-85 15:14") (* Insert string delimiter SDELIM & update caches. SDELIM = 1 letter string *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM SDELIM) (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EMACS.BACK.ESCAPEDP STREAM) (RETURN))) (COND ((EQ (EMACS.SCACHE STREAM) (QUOTE OUTSIDE)) (EMACS.OPEN.STRING STREAM)) (T (EMACS.CLOSE.STRING STREAM)))))) (EMACS.LDELIM (LAMBDA (LDELIM STREAM) (* kbr: "19-Feb-85 15:14") (* Insert LDELIM & update caches. LDELIM = 1 letter string *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM LDELIM) (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EMACS.BACK.ESCAPEDP STREAM) (RETURN))) (COND ((EQ (EMACS.SCACHE STREAM) (QUOTE OUTSIDE)) (EMACS.OPEN.BALANCE STREAM)))))) (EMACS.RDELIM (LAMBDA (RDELIM STREAM) (* kbr: "19-Feb-85 15:14") (* Insert RDELIM & update caches. RDELIM = 1 letter string *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM RDELIM) (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EMACS.BACK.ESCAPEDP STREAM) (RETURN))) (COND ((EQ (EMACS.SCACHE STREAM) (QUOTE OUTSIDE)) (EMACS.CLOSE.BALANCE STREAM)))))) (EMACS.OPEN.STRING (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (LPTR) (* We should be 1 char after left delim. *) (SETQ LPTR (SUB1 (GETFILEPTR STREAM))) (SETQ EMACS.SCACHE LPTR)))) (EMACS.CLOSE.STRING (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (LPTR RPTR LDELIM RDELIM MATCHED) (* We should be 1 char after right delim. *) (SETQ EMACS.SCACHE (QUOTE OUTSIDE)) (SETQ RPTR (SUB1 (GETFILEPTR STREAM))) (EMACS.SETFILEPTR STREAM RPTR) (SETQ RDELIM (\PEEKBIN STREAM)) (EMACS.BSKIP STREAM EMACS.NONSD) (EMACS.BBYTE STREAM) (SETQ LPTR (GETFILEPTR STREAM)) (SETQ LDELIM (\PEEKBIN STREAM)) (SETQ MATCHED (IEQP LDELIM RDELIM)) (COND (MATCHED (EMACS.SETCARETPTR STREAM LPTR) (DISMISS 200)) (T (FLASHWINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (EMACS.SETCARETPTR STREAM LPTR) (DISMISS 1000))) (EMACS.SETCARETPTR STREAM (ADD1 RPTR)) (EMACS.SETFILEPTR STREAM (ADD1 RPTR))))) (EMACS.OPEN.BALANCE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (LPTR) (* We should be 1 char after left delim. *) (SETQ LPTR (SUB1 (GETFILEPTR STREAM))) (COND ((NUMBERP EMACS.BCACHE) (* We were at top level. *) (SETQ EMACS.BCACHE (LIST LPTR))) (T (push EMACS.BCACHE LPTR)))))) (EMACS.CLOSE.BALANCE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (PTR LPTR RPTR LDELIM RDELIM BALANCED) (* LPTR & RPTR point at balancing delims *) (SETQ PTR (GETFILEPTR STREAM)) (SETQ RPTR (SUB1 PTR)) (EMACS.SETFILEPTR STREAM RPTR) (SETQ RDELIM (\PEEKBIN STREAM)) (EMACS.BCACHE STREAM) (SETQ BALANCED (NOT (NUMBERP EMACS.BCACHE))) (COND (BALANCED (SETQ LPTR (CAR EMACS.BCACHE)) (EMACS.SETFILEPTR STREAM LPTR) (SETQ LDELIM (\PEEKBIN STREAM)) (EMACS.SETCARETPTR STREAM LPTR) (COND ((IEQP (CDR (ASSOC LDELIM EMACS.DELIMS)) RDELIM) (* Correct match *) (DISMISS 200)) (T (* Flash incorrect match. *) (FLASHWINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (DISMISS 1000))) (pop EMACS.BCACHE)) (T (* Flash beginning of non-list def. *) (EMACS.SETCARETPTR STREAM EMACS.BCACHE) (FLASHWINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (DISMISS 1000))) (EMACS.SETCARETPTR STREAM PTR) (EMACS.SETFILEPTR STREAM PTR)))) (EMACS.FLUSH.CACHE (LAMBDA NIL (* kbr: "19-Feb-85 15:14") (* Lose cached info about string & paren balancing. *) (PROG NIL (* Hopefully we can change things so that not all  commands flush all of cache. *) (SETQ EMACS.SCACHE NIL) (SETQ EMACS.BCACHE NIL)))) (EMACS.SCACHE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (* Return or OUTSIDE, computing if necessary. *) (PROG (PTR ANSWER) (COND (EMACS.SCACHE (RETURN EMACS.SCACHE))) (* Recompute. *) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM (EMACS.BOL STREAM PTR)) (SETQ ANSWER (QUOTE OUTSIDE)) (while (ILESSP (GETFILEPTR STREAM) PTR) do (* Find opening. *) (EMACS.FSKIP STREAM EMACS.NONSD PTR) (EMACS.FBYTE STREAM) (COND ((IGEQ (GETFILEPTR STREAM) PTR) (RETURN))) (SETQ ANSWER (GETFILEPTR STREAM)) (* Find closing. *) (EMACS.FSKIP STREAM EMACS.NONSD PTR) (EMACS.FBYTE STREAM) (COND ((IGEQ (GETFILEPTR STREAM) PTR) (RETURN))) (SETQ ANSWER (QUOTE OUTSIDE))) (* Store ANSWER, restore fileptr, & return *) (SETQ EMACS.SCACHE ANSWER) (EMACS.SETFILEPTR STREAM PTR) (RETURN ANSWER)))) (EMACS.BCACHE (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (* Return ( ... ) or OUTSIDE *) (PROG (PTR SCACHE ANSWER) (COND (EMACS.BCACHE (RETURN EMACS.BCACHE))) (* Recompute. *) (SETQ PTR (GETFILEPTR STREAM)) (SETQ SCACHE (EMACS.SCACHE STREAM)) (COND ((NOT (EQ SCACHE (QUOTE OUTSIDE))) (* Move off string. *) (EMACS.SETFILEPTR STREAM SCACHE) (COND ((OR (EMACS.BOFP STREAM) (IEQP (\BACKPEEKBIN STREAM) (CHARCODE CR))) (* A string def! *) (SETQ ANSWER SCACHE) (GO EXIT))))) (COND ((NULL (EMACS.SAFE.BACK.SEXPRS STREAM)) (* Unsuccessful read = unbalanced parens. Treat as if top level. *) (SETQ ANSWER (GETFILEPTR STREAM))) ((OR (ZEROP (GETFILEPTR STREAM)) (IEQP (\BACKPEEKBIN STREAM) (CHARCODE CR))) (* Top level. *) (SETQ ANSWER (GETFILEPTR STREAM))) (T (* Opening delim present. *) (SETQ ANSWER (LIST (SUB1 (GETFILEPTR STREAM)))))) EXIT(EMACS.SETFILEPTR STREAM PTR) (SETQ EMACS.BCACHE ANSWER) (RETURN ANSWER)))) (EMACS.SAFE.BACK.SEXPRS (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (* Backwards read sexprs up to but not including opening delim. Return T if successful backwards read. Otherwise NIL & leave fileptr near failure point. *) (PROG (ANSWER) (DO (EMACS.BACK.SKIPSEPRS STREAM) (COND ((OR (ZEROP (GETFILEPTR STREAM)) (IEQP (\BACKPEEKBIN STREAM) (CHARCODE CR)) (AND (FMEMB (\BACKPEEKBIN STREAM) EMACS.LDELIMS) (NOT (EMACS.BACK.ESCAPEDP STREAM)))) (* Up against delimiter. *) (SETQ ANSWER T) (RETURN)) ((NULL (NLSETQ (EMACS.BACK.SEXPR STREAM))) (* Error reading backwards. *) (FLASHWINDOW STREAM) (RETURN)))) (RETURN ANSWER)))) (EMACS.SAFE.BACK.SEXPR (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (* Return T if successful backwards read. Otherwise NIL & leave fileptr near failure point. *) (PROG NIL (COND ((NULL (NLSETQ (EMACS.BACK.SEXPR STREAM))) (* Error reading backwards. *) (FLASHWINDOW STREAM) (RETURN NIL))) (RETURN T)))) (EMACS.BACK.SEXPR (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (PROG (RDELIM LDELIM) (EMACS.BACK.SKIPSEPRS STREAM) (COND ((EMACS.BOFP STREAM) (ERROR!)) ((EMACS.BACK.ESCAPEDP STREAM) (* Atom *) (EMACS.BACK.WORD STREAM) (RETURN))) (SETQ RDELIM (\BACKPEEKBIN STREAM)) (SETQ LDELIM (for BUCKET in EMACS.DELIMS when (IEQP (CDR BUCKET) RDELIM) do (RETURN (CAR BUCKET)))) (COND ((NULL LDELIM) (* Atom *) (EMACS.BACK.WORD STREAM)) ((IEQP LDELIM RDELIM) (* String delimiters *) (\BACKBIN STREAM) (WHILE (AND (NOT (EMACS.BOFP STREAM)) (OR (NOT (IEQP (\BACKPEEKBIN STREAM) LDELIM)) (EMACS.BACK.ESCAPEDP STREAM))) DO (\BACKBIN STREAM)) (COND ((EMACS.BOFP STREAM) (ERROR!))) (\BACKBIN STREAM)) (T (* Left Right delimters *) (\BACKBIN STREAM) (do (EMACS.BACK.SKIPSEPRS STREAM) (COND ((EMACS.BOFP STREAM) (ERROR!)) ((AND (FMEMB (\BACKPEEKBIN STREAM) EMACS.LDELIMS) (NOT (EMACS.BACK.ESCAPEDP STREAM))) (RETURN))) (EMACS.BACK.SEXPR STREAM) (COND ((OR (EMACS.BOFP STREAM) (IEQP (\BACKPEEKBIN STREAM) (CHARCODE CR))) (* At top of definition in middle of read. *) (ERROR!)))) (\BACKBIN STREAM) (EMACS.BSKIP STREAM EMACS.BQ)))))) (EMACS.BACK.WORD (LAMBDA (STREAM) (* kbr: "24-Jul-85 16:36") (* Backward a word. *) (PROG NIL (EMACS.BWORD STREAM)))) (EMACS.BACK.SKIPSEPRS (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (* Backwards SKIPSEPRS. *) (PROG (SA CH SNX) (SETQ SA (fetch (READTABLEP READSA) of EMACS.READTABLE)) (COND ((EMACS.BOFP STREAM) (RETURN))) (SETQ CH (\BACKPEEKBIN STREAM)) (SETQ SNX (\GETBASEBYTE SA CH)) (COND ((NOT (EQ SNX SEPRCHAR.RC)) (RETURN))) (\BACKBIN STREAM) (do (COND ((EMACS.BOFP STREAM) (RETURN))) (SETQ CH (\BACKPEEKBIN STREAM)) (SETQ SNX (\GETBASEBYTE SA CH)) (COND ((EQ SNX SEPRCHAR.RC) (\BACKBIN STREAM)) ((EQ SNX ESCAPE.RC) (\BIN STREAM) (COND ((NOT (EMACS.BACK.ESCAPEDP STREAM)) (\BACKBIN STREAM))) (RETURN)) (T (RETURN))))))) (EMACS.BACK.ESCAPEDP (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (* Is the previous byte escaped? *) (PROG (PTR SA CH SNX ANSWER) (* T if previous byte preceded by odd number of %%'s. *) (SETQ PTR (GETFILEPTR STREAM)) (COND ((ILEQ PTR 1) (RETURN NIL))) (SETQ SA (fetch (READTABLEP READSA) of EMACS.READTABLE)) (\BACKBIN STREAM) (do (SETQ CH (\BACKBIN STREAM)) (SETQ SNX (\GETBASEBYTE SA CH)) (COND ((EQ SNX ESCAPE.RC) (SETQ ANSWER (NOT ANSWER))) (T (RETURN))) (COND ((EMACS.BOFP STREAM) (RETURN)))) (SETFILEPTR STREAM PTR) (RETURN ANSWER)))) (EMACS.TAB (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (* Lisp indent. *) (PROG (PTR BOL EOL CODE INDENT OFFSET TABFLG) (* INDENT = how much we want to indent. OFFSET = how many chars to nonws. TABFLG = any tabs present at beginning of line. *) (SETQ PTR (GETFILEPTR STREAM)) (SETQ INDENT (EMACS.TAB.INDENT STREAM)) (SETQ BOL (EMACS.BOL STREAM PTR)) (* Calc OFFSET. *) (SETQ EOL (EMACS.EOL STREAM PTR)) (EMACS.SETFILEPTR STREAM BOL) (SETQ OFFSET 0) (for I from BOL to (SUB1 EOL) do (SETQ CODE (\BIN STREAM)) (COND ((EQUAL CODE (CHARCODE TAB)) (SETQ TABFLG T))) (COND ((NOT (BITTEST (ELT EMACS.SYNTAX (OR (NUMBERP CODE) 256)) EMACS.WS)) (RETURN))) (SETQ OFFSET (ADD1 OFFSET))) (* Insert and/or delete whitespace. *) (COND (TABFLG (EMACS.DELETE.BYTES STREAM BOL (IPLUS BOL OFFSET -1)) (COND ((NOT (ZEROP INDENT)) (TEDIT.INSERT STREAM (ALLOCSTRING INDENT " ") (ADD1 BOL))))) ((IEQP OFFSET INDENT) (* Do nothing. *) ) ((IGREATERP OFFSET INDENT) (EMACS.DELETE.BYTES STREAM BOL (IPLUS BOL (IDIFFERENCE OFFSET INDENT) -1))) ((ILESSP OFFSET INDENT) (TEDIT.INSERT STREAM (ALLOCSTRING (IDIFFERENCE INDENT OFFSET) " ") (ADD1 BOL))) (T (SHOULDNT))) (* Reposition fileptr. *) (COND ((ILEQ PTR (IPLUS BOL OFFSET)) (EMACS.SETFILEPTR STREAM (IPLUS BOL INDENT))) (T (EMACS.SETFILEPTR STREAM (IPLUS PTR (IDIFFERENCE INDENT OFFSET)))))))) (EMACS.TAB.INDENT (LAMBDA (STREAM) (* kbr: "19-Feb-85 15:14") (* Amount to indent for Lisp indent. *) (PROG (PTR BOD SISTER1PTR SISTER2PTR LDELIMFLG SISTER1 SISTERPTR OFFSET BOL ANSWER) (SETQ PTR (GETFILEPTR STREAM)) (* SETQ BOD (EMACS.BOD STREAM PTR)) (SETQ BOD 0) (EMACS.SETFILEPTR STREAM (EMACS.BOL STREAM PTR)) (EMACS.BSKIP STREAM EMACS.WS BOD) (* Get SISTER1PTR, SISTER2PTR, & LDELIMFLG *) (do (EMACS.BSKIP STREAM EMACS.SPACE) (COND ((ILEQ (GETFILEPTR STREAM) BOD) (RETURN))) (COND ((AND (FMEMB (\BACKPEEKBIN STREAM) EMACS.LDELIMS) (NOT (EMACS.BACK.ESCAPEDP STREAM))) (SETQ LDELIMFLG T) (RETURN))) (EMACS.SAFE.BACK.SEXPR STREAM) (SETQ SISTER2PTR SISTER1PTR) (SETQ SISTER1PTR (GETFILEPTR STREAM))) (* Get SISTER1. *) (COND (SISTER1PTR (EMACS.SETFILEPTR STREAM SISTER1PTR) (SETQ SISTER1 (RATOM STREAM)))) (* Get SISTERPTR & OFFSET. *) (SETQ SISTERPTR (OR SISTER1PTR (GETFILEPTR STREAM))) (COND ((AND SISTER1 (LITATOM SISTER1)) (SETQ OFFSET (GETPROP SISTER1 (QUOTE EMACS.TAB))))) (COND (OFFSET (SETQ OFFSET (SUB1 OFFSET))) ((NULL SISTER1) (SETQ OFFSET 1)) ((NULL LDELIMFLG) (SETQ OFFSET 0)) ((NULL SISTER2PTR) (SETQ OFFSET 0)) (T (SETQ SISTERPTR SISTER2PTR) (SETQ OFFSET 0))) (* Get ANSWER. *) (SETQ BOL (EMACS.BOL STREAM SISTERPTR)) (EMACS.SETFILEPTR STREAM BOL) (SETQ ANSWER OFFSET) (for I from BOL to (SUB1 SISTERPTR) do (COND ((IEQP (\BIN STREAM) (CHARCODE TAB)) (SETQ ANSWER (IPLUS ANSWER 8))) (T (SETQ ANSWER (ADD1 ANSWER))))) EXIT(EMACS.SETFILEPTR STREAM PTR) (RETURN ANSWER)))) (EMACS.INIT.SYNTAX (LAMBDA NIL (* kbr: "19-Feb-85 15:14") (PROG NIL (* "Character" 256 is used to handle IMAGEOBJs. *) (SETQ EMACS.SYNTAX (ARRAY 257 (QUOTE WORD) 0 0)) (FOR I FROM 0 TO 256 DO (SETA EMACS.SYNTAX I (LOGOR EMACS.NONCR EMACS.NONWS EMACS.NONSD EMACS.ALPHA))) (FOR I IN (CHARCODE (TAB LF SP)) DO (SETA EMACS.SYNTAX I (LOGOR EMACS.WS EMACS.NONCR EMACS.NONSD EMACS.SPACE))) (SETA EMACS.SYNTAX (CHARCODE CR) (LOGOR EMACS.WS EMACS.CR EMACS.NONSD)) (FOR I IN (QUOTE (39 44 64 96)) DO (SETA EMACS.SYNTAX I (LOGOR EMACS.NONWS EMACS.NONCR EMACS.NONSD EMACS.BQ EMACS.ALPHA))) (SETQ EMACS.DELIMS NIL) (SETQ EMACS.SDELIMS NIL) (SETQ EMACS.LDELIMS NIL) (SETQ EMACS.RDELIMS NIL) (EMACS.DELIMS (CHARCODE "(") (CHARCODE ")")) (EMACS.DELIMS (CHARCODE "[") (CHARCODE "]")) (EMACS.DELIMS (CHARCODE "{") (CHARCODE "}")) (EMACS.DELIMS 34 34)))) ) (DECLARE: DONTEVAL@LOAD DOCOPY (EMACS.INIT) (MOVD? 'TEDIT.SELECT.LINE.SCANNER 'OLD.TEDIT.SELECT.LINE.SCANNER) (MOVD 'NEW.TEDIT.SELECT.LINE.SCANNER 'TEDIT.SELECT.LINE.SCANNER) (MOVD 'EMACS 'TEDIT) ) (PUTPROPS EMACS COPYRIGHT ("Xerox Corporation" 1985 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (9473 52815 (EMACS.INIT 9483 . 10172) (EMACS.INIT.BACKGROUND 10174 . 10893) (DEDITEmacs 10895 . 11408) (EMACS.INIT.COMMANDS 11410 . 12431) (EMACS.COMMAND 12433 . 12629) (EMACS.OPERATE 12631 . 15717) (EMACS.GETKEY 15719 . 15982) (EMACS 15984 . 17010) (EMACS.PROCESS 17012 . 17288) ( EMACS.TEDIT1 17290 . 17746) (EMACS.WINDOW 17748 . 18175) (EMACS.SETFILEPTR 18177 . 18578) ( EMACS.GETCARETPTR 18580 . 19075) (EMACS.SETCARETPTR 19077 . 19692) (EMACS.SHOWCARET 19694 . 20060) ( EMACS.BOL 20062 . 20647) (EMACS.EOL 20649 . 21228) (EMACS.DELETE.BYTES 21230 . 22211) (EMACS.BOFP 22213 . 22362) (EMACS.EOFP 22364 . 22538) (EMACS.CCHAR 22540 . 22913) (EMACS.PEEKBIN 22915 . 23232) ( EMACS.FBYTE 23234 . 23507) (EMACS.FWORD 23509 . 23816) (EMACS.BYTEP 23818 . 23982) (EMACS.FSKIP 23984 . 24527) (EMACS.FSKIPTO 24529 . 25027) (EMACS.BBYTE 25029 . 25307) (EMACS.BCHAR 25309 . 25617) ( EMACS.BPEEKCHAR 25619 . 26020) (EMACS.BWORD 26022 . 26330) (EMACS.BSKIP 26332 . 26856) (EMACS.BSKIPTO 26858 . 27360) (EMACS.SET.EOF 27362 . 27891) (EMACS.GOTO.BOL 27893 . 28168) (EMACS.BACK.BYTE 28170 . 28425) (EMACS.FWD.DELETE.BYTE 28427 . 28751) (EMACS.GOTO.EOL 28753 . 29022) (EMACS.FWD.BYTE 29024 . 29281) (EMACS.KILL.LINE 29283 . 29939) (EMACS.DELETE.CHARS 29941 . 30904) (EMACS.REDISPLAY 30906 . 31309) (EMACS.NEXT.LINE 31311 . 32266) (EMACS.PREVIOUS.LINE 32268 . 33102) (EMACS.QUOTE.BYTE 33104 . 33694) (EMACS.SEARCH 33696 . 38017) (EMACS.TRANSPOSE.BYTES 38019 . 38951) (EMACS.NEXT.SCREENFULL 38953 . 39650) (EMACS.CXCV 39652 . 40382) (EMACS.CXCW 40384 . 40699) (EMACS.CXCZ 40701 . 41083) ( EMACS.FWD.SEXPR 41085 . 41534) (EMACS.BACK.DELETE.BYTE 41536 . 42065) (EMACS.GOTO.BOD 42067 . 42708) ( EMACS.BOD 42710 . 43596) (EMACS.GOTO.EOD 43598 . 44260) (EMACS.EOD 44262 . 45148) (EMACS.KILL.SEXPR 45150 . 45640) (EMACS.GOTO.BOF 45642 . 45979) (EMACS.GOTO.EOF 45981 . 46268) (EMACS.BACK.WORD 46270 . 46526) (EMACS.FWD.DELETE.WORD 46528 . 47066) (EMACS.EDIT 47068 . 47650) (EMACS.FWD.WORD 47652 . 47906) (EMACS.GRIND 47908 . 48448) (EMACS.SNARF 48450 . 48813) (EMACS.MT 48815 . 49569) ( EMACS.PREVIOUS.SCREENFULL 49571 . 50272) (EMACS.JOIN.LINES 50274 . 51483) (EMACS.BACK.DELETE.WORD 51485 . 51926) (NEW.TEDIT.SELECT.LINE.SCANNER 51928 . 52813)) (52816 73467 (\TEDIT1 52826 . 54975) ( \TEDIT.COMMAND.LOOP 54977 . 73465)) (74455 102685 (EMACS.DELIMS 74465 . 76054) (EMACS.CR 76056 . 76838 ) (EMACS.RPAREN 76840 . 77286) (EMACS.RBRACKET 77288 . 77736) (EMACS.RBRACE 77738 . 78184) ( EMACS.RANGLE 78186 . 78632) (EMACS.SDELIM.COMMAND 78634 . 79085) (EMACS.LDELIM.COMMAND 79087 . 79538) (EMACS.RDELIM.COMMAND 79540 . 79991) (EMACS.SDELIM 79993 . 80800) (EMACS.LDELIM 80802 . 81543) ( EMACS.RDELIM 81545 . 82287) (EMACS.OPEN.STRING 82289 . 82635) (EMACS.CLOSE.STRING 82637 . 83809) ( EMACS.OPEN.BALANCE 83811 . 84316) (EMACS.CLOSE.BALANCE 84318 . 86090) (EMACS.FLUSH.CACHE 86092 . 86605 ) (EMACS.SCACHE 86607 . 88255) (EMACS.BCACHE 88257 . 90050) (EMACS.SAFE.BACK.SEXPRS 90052 . 90992) ( EMACS.SAFE.BACK.SEXPR 90994 . 91529) (EMACS.BACK.SEXPR 91531 . 93407) (EMACS.BACK.WORD 93409 . 93665) (EMACS.BACK.SKIPSEPRS 93667 . 94698) (EMACS.BACK.ESCAPEDP 94700 . 95631) (EMACS.TAB 95633 . 98287) ( EMACS.TAB.INDENT 98289 . 101361) (EMACS.INIT.SYNTAX 101363 . 102683))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "19-Feb-2021 11:40:35"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>EMACS.;9 86790 changes to%: (VARS EMACSCOMS) previous date%: "19-Feb-2021 11:24:35" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>EMACS.;6) (* ; " Copyright (c) 1985, 1986, 2021 by Xerox Corporation. ") (PRETTYCOMPRINT EMACSCOMS) (RPAQQ EMACSCOMS [(* EMACS -- By Kelly Roach *) (* ;; "Patched by Ron Kaplan (2021) to require TEDIT and to eliminate a dependency on a historical attempt at BQUOTE.") (* ;; "So it loads, but it really doesn't work.") (* ;; "This has to be compiled with EXPORTS.ALL") (DECLARE%: (FILES TEDIT)) (COMS (* EMACS *) (INITVARS (BytesPerPage 512) (EMACS.COMMANDS NIL) (EMACS.MCOMMANDS NIL) (EMACS.XCOMMANDS NIL) (EMACS.LIST %' ((1 EMACS.GOTO.BOL) (2 EMACS.BACK.BYTE) (4 EMACS.FWD.DELETE.BYTE) (5 EMACS.GOTO.EOL) (6 EMACS.FWD.BYTE) (9 EMACS.TAB) (11 EMACS.KILL.LINE) (12 EMACS.REDISPLAY) (14 EMACS.NEXT.LINE) (16 EMACS.PREVIOUS.LINE) (17 EMACS.QUOTE.BYTE) (19 EMACS.SEARCH) (20 EMACS.TRANSPOSE.BYTES) (22 EMACS.NEXT.SCREENFULL) (24 EMACS.CX) (26 EMACS.CZ) (41 EMACS.RPAREN) (93 EMACS.RBRACKET) (125 EMACS.RBRACE) (127 EMACS.BACK.DELETE.BYTE))) (EMACS.MLIST %' ((1 EMACS.GOTO.BOD) (2 EMACS.SAFE.BACK.SEXPR) (5 EMACS.GOTO.EOD) (6 EMACS.FWD.SEXPR) (11 EMACS.KILL.SEXPR) (60 EMACS.GOTO.BOF) (62 EMACS.GOTO.EOF) (66 EMACS.BACK.WORD) (68 EMACS.FWD.DELETE.WORD) (69 EMACS.EDIT) (70 EMACS.FWD.WORD) (71 EMACS.GRIND) (52 EMACS.SNARF) (86 EMACS.PREVIOUS.SCREENFULL) (94 EMACS.JOIN.LINES) (127 EMACS.BACK.DELETE.WORD))) (EMACS.XLIST %' ((22 EMACS.CXCV) (23 EMACS.CXCW) (26 EMACS.CXCZ))) (\BQUOTE.LEVEL 0)) (RECORDS EMACSSTREAM) (FNS EMACS.INIT EMACS.INIT.BACKGROUND DEDITEmacs EMACS.INIT.COMMANDS EMACS.COMMAND EMACS.OPERATE EMACS.GETKEY EMACS EMACS.PROCESS EMACS.TEDIT1 EMACS.WINDOW EMACS.SETFILEPTR EMACS.GETCARETPTR EMACS.SETCARETPTR EMACS.SHOWCARET EMACS.BOL EMACS.EOL EMACS.DELETE.BYTES EMACS.BOFP EMACS.EOFP EMACS.CCHAR EMACS.PEEKBIN EMACS.FBYTE EMACS.FWORD EMACS.BYTEP EMACS.FSKIP EMACS.FSKIPTO EMACS.BBYTE EMACS.BCHAR EMACS.BPEEKCHAR EMACS.BWORD EMACS.BSKIP EMACS.BSKIPTO EMACS.SET.EOF EMACS.GOTO.BOL EMACS.BACK.BYTE EMACS.FWD.DELETE.BYTE EMACS.GOTO.EOL EMACS.FWD.BYTE EMACS.KILL.LINE EMACS.DELETE.CHARS EMACS.REDISPLAY EMACS.NEXT.LINE EMACS.PREVIOUS.LINE EMACS.QUOTE.BYTE EMACS.SEARCH EMACS.TRANSPOSE.BYTES EMACS.NEXT.SCREENFULL EMACS.CXCV EMACS.CXCW EMACS.CXCZ EMACS.FWD.SEXPR EMACS.BACK.DELETE.BYTE EMACS.GOTO.BOD EMACS.BOD EMACS.GOTO.EOD EMACS.EOD EMACS.KILL.SEXPR EMACS.GOTO.BOF EMACS.GOTO.EOF EMACS.BACK.WORD EMACS.FWD.DELETE.WORD EMACS.EDIT EMACS.FWD.WORD EMACS.GRIND EMACS.SNARF EMACS.MT EMACS.PREVIOUS.SCREENFULL EMACS.JOIN.LINES EMACS.BACK.DELETE.WORD NEW.TEDIT.SELECT.LINE.SCANNER)) (COMS (* BALANCE *) (PROPS (ACCESSFNS EMACS.TAB) (DATATYPE EMACS.TAB) (DEFEXPR EMACS.TAB) (DEFFEXPR EMACS.TAB) (DEFVAR EMACS.TAB) (DO EMACS.TAB) (FOR EMACS.TAB) [LAMBDA EMACS.TAB] (PROG EMACS.TAB) (RECORD EMACS.TAB) (SELECT EMACS.TAB) (SELECTQ EMACS.TAB) (UNTIL EMACS.TAB) (WHILE EMACS.TAB)) (INITVARS (EMACS.DELIMS NIL) (EMACS.SDELIMS NIL) (EMACS.LDELIMS NIL) (EMACS.RDELIMS NIL) (EMACS.SCACHE NIL) (EMACS.BCACHE NIL) (EMACS.SYNTAX NIL) (EMACS.CR 1) (EMACS.WS 2) (EMACS.SD 4) (EMACS.NONCR 8) (EMACS.NONWS 16) (EMACS.NONSD 32) (EMACS.BQ 64) (EMACS.ALPHA 128) (EMACS.BD 256) (EMACS.SPACE 512)) (FNS EMACS.DELIMS EMACS.CR EMACS.RPAREN EMACS.RBRACKET EMACS.RBRACE EMACS.RANGLE EMACS.SDELIM.COMMAND EMACS.LDELIM.COMMAND EMACS.RDELIM.COMMAND EMACS.SDELIM EMACS.LDELIM EMACS.RDELIM EMACS.OPEN.STRING EMACS.CLOSE.STRING EMACS.OPEN.BALANCE EMACS.CLOSE.BALANCE EMACS.FLUSH.CACHE EMACS.SCACHE EMACS.BCACHE EMACS.SAFE.BACK.SEXPRS EMACS.SAFE.BACK.SEXPR EMACS.BACK.SEXPR EMACS.BACK.SKIPSEPRS EMACS.BACK.ESCAPEDP EMACS.TAB EMACS.TAB.INDENT EMACS.INIT.SYNTAX)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (EMACS.INIT) (MOVD? %'TEDIT.SELECT.LINE.SCANNER %' OLD.TEDIT.SELECT.LINE.SCANNER) (MOVD %'NEW.TEDIT.SELECT.LINE.SCANNER %' TEDIT.SELECT.LINE.SCANNER) (MOVD %'EMACS %'TEDIT]) (* EMACS -- By Kelly Roach *) (* ;; "Patched by Ron Kaplan (2021) to require TEDIT and to eliminate a dependency on a historical attempt at BQUOTE." ) (* ;; "So it loads, but it really doesn't work.") (* ;; "This has to be compiled with EXPORTS.ALL") (DECLARE%: (FILESLOAD TEDIT) ) (* EMACS *) (RPAQ? BytesPerPage 512) (RPAQ? EMACS.COMMANDS NIL) (RPAQ? EMACS.MCOMMANDS NIL) (RPAQ? EMACS.XCOMMANDS NIL) (RPAQ? EMACS.LIST %' ((1 EMACS.GOTO.BOL) (2 EMACS.BACK.BYTE) (4 EMACS.FWD.DELETE.BYTE) (5 EMACS.GOTO.EOL) (6 EMACS.FWD.BYTE) (9 EMACS.TAB) (11 EMACS.KILL.LINE) (12 EMACS.REDISPLAY) (14 EMACS.NEXT.LINE) (16 EMACS.PREVIOUS.LINE) (17 EMACS.QUOTE.BYTE) (19 EMACS.SEARCH) (20 EMACS.TRANSPOSE.BYTES) (22 EMACS.NEXT.SCREENFULL) (24 EMACS.CX) (26 EMACS.CZ) (41 EMACS.RPAREN) (93 EMACS.RBRACKET) (125 EMACS.RBRACE) (127 EMACS.BACK.DELETE.BYTE))) (RPAQ? EMACS.MLIST %' ((1 EMACS.GOTO.BOD) (2 EMACS.SAFE.BACK.SEXPR) (5 EMACS.GOTO.EOD) (6 EMACS.FWD.SEXPR) (11 EMACS.KILL.SEXPR) (60 EMACS.GOTO.BOF) (62 EMACS.GOTO.EOF) (66 EMACS.BACK.WORD) (68 EMACS.FWD.DELETE.WORD) (69 EMACS.EDIT) (70 EMACS.FWD.WORD) (71 EMACS.GRIND) (52 EMACS.SNARF) (86 EMACS.PREVIOUS.SCREENFULL) (94 EMACS.JOIN.LINES) (127 EMACS.BACK.DELETE.WORD))) (RPAQ? EMACS.XLIST %' ((22 EMACS.CXCV) (23 EMACS.CXCW) (26 EMACS.CXCZ))) (RPAQ? \BQUOTE.LEVEL 0) (DECLARE%: EVAL@COMPILE (ACCESSFNS EMACSSTREAM ((TEXTOBJ (fetch (STREAM F3) of DATUM)) (WINDOW (fetch (TEXTOBJ SELWINDOW) of (fetch (EMACSSTREAM TEXTOBJ) of DATUM))) (SELECTION (fetch (TEXTOBJ SEL) of (fetch (EMACSSTREAM TEXTOBJ) of DATUM))) (CARETPTR (EMACS.GETCARETPTR DATUM)) (FILEPTR (GETFILEPTR DATUM)) (DIRTY (fetch (TEXTOBJ \DIRTY) of (fetch (EMACSSTREAM TEXTOBJ ) of DATUM))) (BCACHE (EMACS.BCACHE DATUM)) (SCACHE (EMACS.SCACHE DATUM)))) ) (DEFINEQ (EMACS.INIT [LAMBDA NIL (* kbr%: "12-Jul-86 16:54") (* Initializes EMACS.  *) (PROG NIL [SETQ TEDIT.INTERRUPTS '((7 HELP] (SETQ EMACS.READTABLE (COPYREADTABLE FILERDTBL)) (EMACS.INIT.COMMANDS) (EMACS.INIT.SYNTAX) (EMACS.INIT.BACKGROUND) (ADDTOVAR *DEDIT-MENU-COMMANDS* (Emacs DEDITEmacs)) (CHANGECCODE 'NILL 'TTYDISPLAYSTREAM '\TEDIT.COMMAND.LOOP]) (EMACS.INIT.BACKGROUND [LAMBDA NIL (* kbr%: "24-Jul-85 16:36") (* Fix up BackgroundMenu.  *) (PROG NIL (SETQ BackgroundMenuCommands (FOR BUCKET IN BackgroundMenuCommands WHEN (NOT (EQ (CAR BUCKET) 'TEdit)) COLLECT BUCKET)) (ADDTOVAR BackgroundMenuCommands (EMACS '(EMACS) "Opens an Edit Window.")) (SETQ BackgroundMenu NIL) (* BackgroundMenu recreated by  WINDOW package next time user  buttons background.  *) ]) (DEDITEmacs [LAMBDA NIL (* kbr%: "24-Jul-85 16:36") (* Fn to let DEDIT call EMACS on  DEDIT top selection.  *) (PROG (EXPR) (CURSOR T) (SETQ EXPR (CAR (TOPSELECTION))) (SETQ EXPR (READ (EMACS (MKSTRING EXPR) NIL T) EMACS.READTABLE)) (DEDITZAPCAR (TOPSELECTION) EXPR]) (EMACS.INIT.COMMANDS [LAMBDA NIL (* kbr%: "24-Jul-85 16:36") (* Initialize TEDIT.READTABLE.  *) (PROG NIL (SETQ EMACS.COMMANDS (ARRAY 128 'POINTER NIL 0)) (SETQ EMACS.MCOMMANDS (ARRAY 128 'POINTER NIL 0)) (SETQ EMACS.XCOMMANDS (ARRAY 128 'POINTER NIL 0)) (FOR BUCKET IN EMACS.LIST DO (SETA EMACS.COMMANDS (CAR BUCKET) (CADR BUCKET))) (FOR BUCKET IN EMACS.MLIST DO (SETA EMACS.MCOMMANDS (CAR BUCKET) (CADR BUCKET))) (FOR BUCKET IN EMACS.XLIST DO (SETA EMACS.XCOMMANDS (CAR BUCKET) (CADR BUCKET))) (FOR I FROM 0 TO 255 DO (TEDIT.SETFUNCTION I (EMACS.COMMAND I) TEDIT.READTABLE]) (EMACS.COMMAND [LAMBDA (I) (* kbr%: "24-Jul-85 16:36") `(LAMBDA (STREAM) (EMACS.OPERATE ,I STREAM]) (EMACS.OPERATE [LAMBDA (STREAM) (* kbr%: "27-Jul-86 17:26") (* Accept token from user *) (PROG (TEXTOBJ I N FN PTR CH) (TTYDISPLAYSTREAM (fetch (EMACSSTREAM WINDOW) of STREAM)) (SETQ TEXTOBJ (fetch (EMACSSTREAM TEXTOBJ) of STREAM)) [while (\SYSBUFP) do (* Handle user type-in) (SETQ I (\GETKEY)) (SETFILEPTR STREAM (fetch (EMACSSTREAM CARETPTR) of STREAM)) (SETQ N 1) (while (EQ I (CHARCODE ^U)) do (SETQ N (ITIMES 4 N)) (SETQ I (\GETKEY))) [SELCHARQ I ((ESC ^Z) (SETQ FN (ELT EMACS.MCOMMANDS (\GETKEY)))) (^X (SETQ FN (ELT EMACS.XCOMMANDS (\GETKEY)))) (COND ((ILESSP I 128) (SETQ FN (ELT EMACS.COMMANDS I))) ((ILESSP I 256) (SETQ FN (ELT EMACS.MCOMMANDS (IDIFFERENCE I 128] (COND ((NULL FN) (* Insert char I N times.  *) (* Handle blue pending delete, if  there is one.) (TEDIT.DO.BLUEPENDINGDELETE SEL TEXTOBJ) (SETQ PTR (GETFILEPTR STREAM)) (COND ([AND (NOT (ZEROP PTR)) (EQ (\BACKPEEKBIN STREAM) (CHARCODE CR)) (NOT (MEMB I (CHARCODE (SP TAB] (* Start of a def *) (EMACS.FLUSH.CACHE))) [COND ((IEQP N 1) (TEDIT.\INSERT I SEL TEXTOBJ)) (T (SETQ CH (MKSTRING (CHARACTER I))) (TEDIT.INSERT STREAM (ALLOCSTRING N CH] (SETFILEPTR STREAM (IPLUS PTR N))) (T (for J from 1 to N do (APPLY* FN STREAM)) (COND ([AND (ILESSP I 256) (NOT (BITTEST (ELT EMACS.SYNTAX I) (LOGOR EMACS.CR EMACS.SD EMACS.BD] (EMACS.FLUSH.CACHE] (EMACS.SHOWCARET STREAM]) (EMACS.GETKEY [LAMBDA NIL (* kbr%: "24-Jul-85 16:36") (PROG (CODE) (CARET 'OFF) (SETQ CODE (\GETKEY)) (CARET T) (RETURN CODE]) (EMACS [LAMBDA (TEXT WINDOW DONTSPAWN PROPS) (* kbr%: "24-Jul-85 16:36") (PROG (PROCESS) (* Get TEXT. *) [COND ((AND (NOT (NULL TEXT)) (LITATOM TEXT)) (SETQ TEXT (OPENFILE TEXT 'INPUT 'OLD] (* Get WINDOW. *) [COND ((NULL WINDOW) (SETQ WINDOW (EMACS.WINDOW DONTSPAWN PROPS] (COND (DONTSPAWN (* Don't spawn a process.  *) (RETURN (EMACS.TEDIT1 TEXT WINDOW T PROPS))) (T (* Spawn a process.  *) (SETQ PROCESS (ADD.PROCESS `(EMACS.PROCESS ',TEXT ',WINDOW ',PROPS) 'EMACS 'NO)) (TTY.PROCESS PROCESS) (RETURN PROCESS]) (EMACS.PROCESS [LAMBDA (TEXT WINDOW PROPS) (* kbr%: "24-Jul-85 16:36") (PROG NIL (WINDOWPROP WINDOW 'PROCESS (THIS.PROCESS)) (RETURN (EMACS.TEDIT1 TEXT WINDOW NIL PROPS]) (EMACS.TEDIT1 [LAMBDA (TEXT WINDOW UNSPAWNED PROPS) (* kbr%: "24-Jul-85 16:36") (PROG (ANSWER) (RESETLST (RESETSAVE (TTYDISPLAYSTREAM WINDOW)) (RESETSAVE NIL (LIST 'INPUT (INFILE T))) (RESETSAVE NIL (LIST 'OUTPUT (OUTFILE T))) (SETQ ANSWER (\TEDIT1 TEXT WINDOW UNSPAWNED PROPS))) (RETURN ANSWER]) (EMACS.WINDOW [LAMBDA (DONTSPAWN PROPS) (* kbr%: "24-Jul-85 16:36") (PROG (WINDOW) [COND ((AND DONTSPAWN TEDIT.DEFAULT.WINDOW) (SETQ WINDOW TEDIT.DEFAULT.WINDOW)) (T (SETQ WINDOW (TEDIT.CREATEW "Indicate region for EMACS"] (WINDOWPROP WINDOW 'TEDIT.PROPS PROPS) (RETURN WINDOW]) (EMACS.SETFILEPTR [LAMBDA (STREAM PTR) (* kbr%: "24-Jul-85 16:36") (* Patch around bug in TEDIT  SETFILEPTR. *) (PROG NIL (COND ((IGREATERP (GETEOFPTR STREAM) 0) (SETFILEPTR STREAM PTR) (SETFILEPTR STREAM PTR]) (EMACS.GETCARETPTR [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (PROG (SELECTION ANSWER) (SETQ SELECTION (fetch (EMACSSTREAM SELECTION) of STREAM)) (SETQ ANSWER (SELECTQ (fetch (SELECTION POINT) of SELECTION) (LEFT (SUB1 (fetch (SELECTION CH#) of SELECTION))) (RIGHT (fetch (SELECTION CHLIM) of SELECTION)) (SHOULDNT))) (RETURN ANSWER]) (EMACS.SETCARETPTR [LAMBDA (STREAM PTR) (* kbr%: "24-Jul-85 16:36") (* Move caret to new filepos.  *) (PROG (EOF) (SETQ EOF (GETEOFPTR STREAM)) (SETQ PTR (IMIN (IMAX PTR 0) EOF)) (TEDIT.SETSEL STREAM (ADD1 PTR) 0 'LEFT) (EMACS.SETFILEPTR STREAM PTR]) (EMACS.SHOWCARET [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.SETCARETPTR STREAM PTR) (TEDIT.NORMALIZECARET (fetch (EMACSSTREAM TEXTOBJ) of STREAM)) (EMACS.SETFILEPTR STREAM PTR]) (EMACS.BOL [LAMBDA (STREAM PTR) (* kbr%: "24-Jul-85 16:36") (* Beginning of line wrt filepos  PTR. *) (PROG (OLDPTR BOL) (SETQ OLDPTR (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM PTR) (EMACS.BSKIP STREAM EMACS.NONCR) (SETQ BOL (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM OLDPTR) (RETURN BOL]) (EMACS.EOL [LAMBDA (STREAM PTR) (* kbr%: "24-Jul-85 16:36") (* End of line wrt filepos PTR.  *) (PROG (OLDPTR EOL) (SETQ OLDPTR (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM PTR) (EMACS.FSKIP STREAM EMACS.NONCR) (SETQ EOL (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM OLDPTR) (RETURN EOL]) (EMACS.DELETE.BYTES [LAMBDA (STREAM PTR1 PTR2) (* kbr%: "19-Feb-85 15:11") (* Delete between PTR1 & PTR2  inclusive. *) (PROG (PTR LENGTH) (SETQ PTR (GETFILEPTR STREAM)) (SETQ PTR1 (IMAX 0 PTR1)) (SETQ PTR2 (IMIN (GETEOFPTR STREAM) PTR2)) (SETQ LENGTH (IPLUS PTR2 (IMINUS PTR1) 1)) (TEDIT.DELETE STREAM (ADD1 PTR1) LENGTH) (COND ((ILEQ PTR PTR1) (EMACS.SETFILEPTR STREAM PTR)) ((ILEQ PTR PTR2) (EMACS.SETFILEPTR STREAM PTR1)) (T (EMACS.SETFILEPTR STREAM (IDIFFERENCE PTR LENGTH]) (EMACS.BOFP [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (ZEROP (GETFILEPTR STREAM]) (EMACS.EOFP [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (IEQP (GETFILEPTR STREAM) (GETEOFPTR STREAM]) (EMACS.CCHAR [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Caret char. Char being pointed at  by caret. *) (PROG (ANSWER) (SETQ ANSWER (\BIN STREAM)) (\BACKBIN STREAM) (RETURN ANSWER]) (EMACS.PEEKBIN [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (PROG (PTR ANSWER) (SETQ PTR (GETFILEPTR STREAM)) (SETQ ANSWER (\BIN STREAM)) (EMACS.SETFILEPTR STREAM PTR) (RETURN ANSWER]) (EMACS.FBYTE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:11") (* Forward a char.  *) (COND ((NOT (EMACS.EOFP STREAM)) (\BIN STREAM]) (EMACS.FWORD [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Forward a word.  *) (PROG NIL (EMACS.FSKIP STREAM EMACS.WS) (EMACS.FSKIP STREAM EMACS.NONWS]) (EMACS.BYTEP [LAMBDA (N) (* kbr%: "24-Jul-85 16:38") (AND (SMALLP N) (ILESSP N 256) N]) (EMACS.FSKIP [LAMBDA (STREAM CLASS LIMIT) (* kbr%: "24-Jul-85 16:36") (* Skip chars in CLASS.  *) [COND ((NULL LIMIT) (SETQ LIMIT (GETEOFPTR STREAM] (PROG NIL (while (AND (ILESSP (GETFILEPTR STREAM) LIMIT) (BITTEST (ELT EMACS.SYNTAX (OR (EMACS.BYTEP (EMACS.PEEKBIN STREAM)) 256)) CLASS)) do (\BIN STREAM]) (EMACS.FSKIPTO [LAMBDA (STREAM CLASS) (* kbr%: "24-Jul-85 16:36") (* Skip chars in CLASS.  *) (PROG NIL (WHILE (AND (NOT (EMACS.EOFP STREAM)) (NOT (BITTEST (ELT EMACS.SYNTAX (OR (EMACS.BYTEP (\BIN STREAM)) 256)) CLASS))) DO (* Continue reading.  *)]) (EMACS.BBYTE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Backward a byte.  *) (COND ((NOT (EMACS.BOFP STREAM)) (\BACKBIN STREAM]) (EMACS.BCHAR [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Backward a char.  *) (PROG NIL (COND ((NOT (EMACS.BOFP STREAM)) (\BACKBIN STREAM]) (EMACS.BPEEKCHAR [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Backwards peek at char.  *) (PROG (PTR BYTE) (SETQ PTR (GETFILEPTR STREAM)) (SETQ BYTE (EMACS.BCHAR STREAM)) (SETFILEPTR STREAM PTR) (RETURN BYTE]) (EMACS.BWORD [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Backward a word.  *) (PROG NIL (EMACS.BSKIP STREAM EMACS.WS) (EMACS.BSKIP STREAM EMACS.NONWS]) (EMACS.BSKIP [LAMBDA (STREAM CLASS LIMIT) (* kbr%: "24-Jul-85 16:36") (* Skip chars in CLASS.  *) (COND ((NULL LIMIT) (SETQ LIMIT 0))) (PROG NIL (while (AND (IGREATERP (GETFILEPTR STREAM) LIMIT) (BITTEST (ELT EMACS.SYNTAX (OR (EMACS.BYTEP (\BACKPEEKBIN STREAM)) 256)) CLASS)) do (\BACKBIN STREAM]) (EMACS.BSKIPTO [LAMBDA (STREAM CLASS) (* kbr%: "24-Jul-85 16:36") (* Skip chars in CLASS.  *) (PROG NIL (WHILE (AND (NOT (EMACS.BOFP STREAM)) (NOT (BITTEST (ELT EMACS.SYNTAX (OR (EMACS.BYTEP (\BACKBIN STREAM)) 256)) CLASS))) DO (* Continue reading.  *)]) (EMACS.SET.EOF [LAMBDA (STREAM PTR) (* kbr%: "19-Feb-85 15:12") (* Temporarily reset eof of STREAM.  *) (PROG NIL (replace (STREAM EPAGE) of STREAM with (LRSH PTR 8)) (replace (STREAM EOFFSET) of STREAM with (LOGAND PTR 255)) (replace (TEXTOBJ TEXTLEN) of (fetch (EMACSSTREAM TEXTOBJ) of STREAM) with PTR]) (EMACS.GOTO.BOL [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go to beginning of line.  *) (PROG NIL (EMACS.BSKIP STREAM EMACS.NONCR]) (EMACS.BACK.BYTE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Go back a byte.  *) (PROG NIL (EMACS.BBYTE STREAM]) (EMACS.FWD.DELETE.BYTE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Delete byte. *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.DELETE.BYTES STREAM PTR PTR]) (EMACS.GOTO.EOL [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go to end of line.  *) (PROG NIL (EMACS.FSKIP STREAM EMACS.NONCR]) (EMACS.FWD.BYTE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Go forward a byte.  *) (PROG NIL (EMACS.FBYTE STREAM]) (EMACS.KILL.LINE [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Delete a line. *) (PROG (PTR EOL) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.FSKIP STREAM EMACS.NONCR) (SETQ EOL (GETFILEPTR STREAM)) (COND ((IGREATERP EOL PTR) (EMACS.DELETE.CHARS STREAM PTR (SUB1 EOL))) ((ILESSP EOL (GETEOFPTR STREAM)) (EMACS.DELETE.CHARS STREAM EOL EOL))) (EMACS.SETFILEPTR STREAM PTR]) (EMACS.DELETE.CHARS [LAMBDA (STREAM PTR1 PTR2) (* kbr%: "18-Jun-86 23:23") (* Delete between PTR1 & PTR2  inclusive. *) (PROG (PTR LENGTH) (SETQ PTR (GETFILEPTR STREAM)) (SETQ PTR1 (IMAX 0 PTR1)) (SETQ PTR2 (IMIN (GETEOFPTR STREAM) PTR2)) (SETQ LENGTH (IPLUS PTR2 (IMINUS PTR1) 1)) (TEDIT.DELETE STREAM (ADD1 PTR1) LENGTH) (COND ((ILEQ PTR PTR1) (SETFILEPTR STREAM PTR)) ((ILEQ PTR PTR2) (SETFILEPTR STREAM PTR1)) (T (SETFILEPTR STREAM (IDIFFERENCE PTR LENGTH]) (EMACS.REDISPLAY [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Redisplay EMACS screen.  *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (REDISPLAYW (fetch (EMACSSTREAM WINDOW) of STREAM)) (EMACS.SETFILEPTR STREAM PTR]) (EMACS.NEXT.LINE [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go down a line.  *) (PROG (PTR BOL EOL NBOL NEOL OFFSET) (SETQ PTR (GETFILEPTR STREAM)) (SETQ BOL (EMACS.BOL STREAM PTR)) (* First char on line is at OFFSET =  0.0 *) (SETQ OFFSET (IPLUS PTR (IMINUS BOL))) (SETQ EOL (EMACS.EOL STREAM PTR)) (SETQ NBOL (ADD1 EOL)) (COND ((ILEQ (GETEOFPTR STREAM) NBOL) (EMACS.SETFILEPTR STREAM (GETEOFPTR STREAM))) (T (SETQ NEOL (EMACS.EOL STREAM NBOL)) (SETQ OFFSET (IMIN OFFSET (IDIFFERENCE NEOL NBOL))) (EMACS.SETFILEPTR STREAM (IPLUS NBOL OFFSET]) (EMACS.PREVIOUS.LINE [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go up a line. *) (PROG (PTR BOL PBOL PEOL OFFSET) (SETQ PTR (GETFILEPTR STREAM)) (SETQ BOL (EMACS.BOL STREAM PTR)) (* First char on line is at OFFSET =  0.0 *) (SETQ OFFSET (IPLUS PTR (IMINUS BOL))) (SETQ PEOL (SUB1 BOL)) (COND ((IGEQ 0 PEOL) (EMACS.SETFILEPTR STREAM 0)) (T (SETQ PBOL (EMACS.BOL STREAM PEOL)) (SETQ OFFSET (IMIN OFFSET (IDIFFERENCE PEOL PBOL))) (EMACS.SETFILEPTR STREAM (IPLUS PBOL OFFSET]) (EMACS.QUOTE.BYTE [LAMBDA (STREAM) (* kbr%: "18-Jun-86 22:59") (* Quote next byte.  *) (PROG (PTR CH) (* TBW%: Fix use TEDIT's use of  terminal table. *) (SETQ PTR (GETFILEPTR STREAM)) (SETQ CH (\GETKEY)) (TEDIT.INSERT STREAM CH (ADD1 PTR)) (EMACS.SETFILEPTR STREAM (ADD1 PTR]) (EMACS.SEARCH [LAMBDA (STREAM) (* kbr%: "18-Jun-86 23:12") (* Case sensitive search, with "*"  and "#" wildcards *) (PROG (PTR TEXTOBJ W OFILE SEL CH) (SETQ PTR (GETFILEPTR STREAM)) (SETQ TEXTOBJ (fetch (EMACSSTREAM TEXTOBJ) of STREAM)) (SETQ W (fetch (EMACSSTREAM WINDOW) of STREAM)) (ERSETQ (RESETLST [RESETSAVE (\TEDIT.MARKACTIVE TEXTOBJ) '(AND (\TEDIT.MARKINACTIVE OLDVALUE] (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with 'Find) (SETQ OFILE (WINDOWPROP W 'TEDIT.LAST.FIND.STRING)) [SETQ OFILE (TEDIT.GETINPUT STREAM "Text to find: " OFILE (CHARCODE (EOL LF ESC ^S] [COND (OFILE (WINDOWPROP W 'TEDIT.LAST.FIND.STRING OFILE) (SETQ SEL (fetch (TEXTOBJ SEL) of TEXTOBJ)) (\SHOWSEL SEL NIL NIL) (RESETLST (RESETSAVE (CURSOR WAITINGCURSOR)) (SETQ CH (TEDIT.FIND TEXTOBJ (MKSTRING OFILE) NIL NIL T))) (COND (CH (* We found the target text.) (* Set up SELECTION to be the found  text) (replace (SELECTION CH#) of SEL with (CAR CH)) (replace (SELECTION CHLIM) of SEL with (CADR CH)) [replace (SELECTION DCH) of SEL with (ADD1 (IDIFFERENCE (CADR CH) (CAR CH] (replace (SELECTION POINT) of SEL with 'RIGHT) (TEDIT.RESET.EXTEND.PENDING.DELETE SEL) (* And never pending a deletion.) (\FIXSEL SEL TEXTOBJ) (TEDIT.NORMALIZECARET TEXTOBJ) (\SHOWSEL SEL NIL T) (EMACS.SETFILEPTR STREAM (EMACS.GETCARETPTR STREAM)) (* And get it into the window *) ) (T (FRESHLINE PROMPTWINDOW) (printout PROMPTWINDOW "String '" OFILE "' not found." T) (\SHOWSEL SEL NIL T) (EMACS.SETFILEPTR STREAM PTR] (replace (TEXTOBJ \INSERTNEXTCH) of TEXTOBJ with -1))]) (EMACS.TRANSPOSE.BYTES [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Transpose bytes.  *) (PROG (PTR CODE CH) (COND ((OR (EMACS.BOFP STREAM) (EMACS.EOFP STREAM)) (RETURN))) (SETQ PTR (GETFILEPTR STREAM)) (SETQ CODE (\BIN STREAM)) (COND [(NUMBERP CODE) (SETQ CH (MKSTRING (CHARACTER CODE] (T (* IMAGEOBJ *) (SETQ CH CODE))) (EMACS.DELETE.BYTES STREAM PTR PTR) (EMACS.SETFILEPTR STREAM (SUB1 PTR)) (TEDIT.INSERT STREAM CH PTR) (EMACS.SETFILEPTR STREAM (ADD1 PTR]) (EMACS.NEXT.SCREENFULL [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Forward one screenfull.  *) (PROG (WINDOW DELTAX DELTAY) (SETQ WINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (SETQ DELTAX 0) [SETQ DELTAY (IDIFFERENCE (WINDOWPROP WINDOW 'HEIGHT) (FONTPROP (DSPFONT NIL WINDOW) 'HEIGHT] (replace (TEXTOBJ EDITOPACTIVE) of (fetch (EMACSSTREAM TEXTOBJ) of STREAM) with NIL) (\TEDIT.SCROLLFN WINDOW DELTAX DELTAY]) (EMACS.CXCV [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Visit a file. *) (PROG (FILE) (SETQ FILE (TEDIT.GETINPUT (fetch (EMACSSTREAM TEXTOBJ) of STREAM) "File to GET:")) (COND ((NULL FILE) (RETURN))) (COND ((fetch (EMACSSTREAM DIRTY) of STREAM) (EMACS.CXCW STREAM))) (TEDIT.GET (fetch (EMACSSTREAM TEXTOBJ) of STREAM) FILE) (EMACS.SETFILEPTR STREAM 0]) (EMACS.CXCW [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Write buffer out to file.  *) (PROG NIL (TEDIT.PUT (fetch (EMACSSTREAM TEXTOBJ) of STREAM]) (EMACS.CXCZ [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Eval FORM in front of caret in  lisp EXEC process.  *) (PROG (FORM) (SETQ FORM (READ STREAM EMACS.READTABLE)) (PROCESS.EVAL 'EXEC FORM]) (EMACS.FWD.SEXPR [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go forward a sexpr.  *) (PROG NIL (RESETLST (* Accept uncaught BQUOTE commas.  *) (RESETSAVE \BQUOTELEVEL (IQUOTIENT MAX.FIXP 2)) (READ STREAM EMACS.READTABLE))]) (EMACS.BACK.DELETE.BYTE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Delete byte in backwards  direction. *) (* TBW%: Delete selection if there  is a selection. *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.DELETE.BYTES STREAM (SUB1 PTR) (SUB1 PTR]) (EMACS.GOTO.BOD [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go to top of definition.  *) (PROG (CODE) (* Find non-WS immediately preceded  by CR. *) (EMACS.BCHAR STREAM) (DO (COND ((EMACS.BOFP STREAM) (RETURN))) (EMACS.BSKIP STREAM EMACS.NONCR) (COND ((BITTEST (ELT EMACS.SYNTAX (EMACS.CCHAR STREAM)) EMACS.NONWS) (RETURN))) (EMACS.BCHAR STREAM]) (EMACS.BOD [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Determine top of definition.  *) (PROG (PTR ANSWER) (SETQ PTR (GETFILEPTR STREAM)) (* Find lparen preceded by CR.  *) (EMACS.BSKIP STREAM EMACS.CR) (DO (COND ((EMACS.BOFP STREAM) (RETURN))) (EMACS.BSKIP STREAM EMACS.NONCR) (COND ((EMACS.BOFP STREAM) (RETURN))) (COND ((OR (EMACS.BOFP STREAM) (EQ (\PEEKBIN STREAM) (CHARCODE "("))) (RETURN))) (EMACS.BBYTE STREAM)) (SETQ ANSWER (GETFILEPTR STREAM)) (SETFILEPTR STREAM PTR) (RETURN ANSWER]) (EMACS.GOTO.EOD [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go to top of next definition.  *) (PROG (CODE) (* Find non-WS immediately preceded  by CR. *) (EMACS.FCHAR STREAM) (DO (COND ((EMACS.EOFP STREAM) (RETURN))) (EMACS.FSKIP STREAM EMACS.NONCR) (EMACS.FCHAR STREAM) (COND ((BITTEST (ELT EMACS.SYNTAX (EMACS.CCHAR STREAM)) EMACS.NONWS) (RETURN]) (EMACS.EOD [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:12") (* Determine top of next definition.  *) (PROG (PTR ANSWER) (SETQ PTR (GETFILEPTR STREAM)) (* Find two CRs. *) (EMACS.FSKIP STREAM EMACS.CR) [DO (COND ((EMACS.EOFP STREAM) (RETURN))) (EMACS.FSKIP STREAM EMACS.NONCR) (COND ((EMACS.EOFP STREAM) (RETURN))) (EMACS.FBYTE STREAM) (COND ((OR (EMACS.EOFP STREAM) (EQ (\PEEKBIN STREAM) (CHARCODE CR))) (\BACKBIN STREAM) (RETURN] (SETQ ANSWER (GETFILEPTR STREAM)) (SETFILEPTR STREAM PTR) (RETURN ANSWER]) (EMACS.KILL.SEXPR [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Delete expression.  *) (PROG (PTR1 PTR2) (SETQ PTR1 (GETFILEPTR STREAM)) (READ STREAM EMACS.READTABLE) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (EMACS.SETFILEPTR STREAM PTR1]) (EMACS.GOTO.BOF [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go to beginning of file.  *) (PROG NIL (EMACS.SETFILEPTR STREAM 0]) (EMACS.GOTO.EOF [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Go to end of file.  *) (PROG NIL (EMACS.SETFILEPTR STREAM (GETEOFPTR STREAM]) (EMACS.BACK.WORD [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Backward a word.  *) (PROG NIL (EMACS.BWORD STREAM]) (EMACS.FWD.DELETE.WORD [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Delete word. *) (PROG (PTR1 PTR2) (SETQ PTR1 (GETFILEPTR STREAM)) (EMACS.FSKIP STREAM EMACS.WS) (EMACS.FSKIP STREAM EMACS.NONWS) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (EMACS.SETFILEPTR STREAM PTR1]) (EMACS.EDIT [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* DEDIT expression.  *) (PROG (EXPR PTR1 PTR2) (SKIPSEPRS STREAM) (SETQ PTR1 (GETFILEPTR STREAM)) (SETQ EXPR (READ STREAM EMACS.READTABLE)) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (SETQ EXPR (EDITE EXPR)) (PRINTDEF EXPR NIL NIL NIL NIL STREAM]) (EMACS.FWD.WORD [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Forward a word.  *) (PROG NIL (EMACS.FWORD STREAM]) (EMACS.GRIND [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Grind expression.  *) (PROG (EXPR PTR1 PTR2) (SKIPSEPRS STREAM) (SETQ PTR1 (GETFILEPTR STREAM)) (SETQ EXPR (READ STREAM EMACS.READTABLE)) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (PRINTDEF EXPR NIL NIL NIL NIL STREAM]) (EMACS.SNARF [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Snarf expression from DEDIT  window. *) (PROG (EXPR) (SETQ EXPR (CAR (TOPSELECTION))) (PRINTDEF EXPR NIL NIL NIL NIL STREAM]) (EMACS.MT [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Transpose words.  *) (PROG (PTR BPTR1 BPTR2 FPTR1 FPTR2) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.BSKIP STREAM EMACS.WS) (SETQ BPTR2 (GETFILEPTR STREAM)) (EMACS.BWORD) (SETQ BPTR1 (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM PTR) (EMACS.FSKIP STREAM EMACS.WS) (SETQ FPTR1 (GETFILEPTR STREAM)) (EMACS.FWORD STREAM) (SETQ FPTR2 (GETFILEPTR STREAM)) (* How do I move? *) ]) (EMACS.PREVIOUS.SCREENFULL [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Backwards a screenfull.  *) (PROG (WINDOW DELTAX DELTAY) (SETQ WINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (SETQ DELTAX 0) [SETQ DELTAY (IDIFFERENCE (FONTPROP (DSPFONT NIL WINDOW) 'HEIGHT) (WINDOWPROP WINDOW 'HEIGHT] (replace (TEXTOBJ EDITOPACTIVE) of (fetch (EMACSSTREAM TEXTOBJ) of STREAM) with NIL) (\TEDIT.SCROLLFN WINDOW DELTAX DELTAY]) (EMACS.JOIN.LINES [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Move current line up *) (PROG (PTR BOL EOL PBOL PEOL PTR1 PTR2) (SETQ PTR (GETFILEPTR STREAM)) (SETQ BOL (EMACS.BOL STREAM PTR)) (SETQ EOL (EMACS.EOL STREAM PTR)) (COND ((ZEROP BOL) (RETURN))) (SETQ PEOL (SUB1 BOL)) (SETQ PBOL (EMACS.BOL STREAM PEOL)) (EMACS.SETFILEPTR STREAM BOL) (EMACS.BSKIP STREAM EMACS.WS) (SETQ PTR1 (IMAX (GETFILEPTR STREAM) PBOL)) (EMACS.SETFILEPTR STREAM BOL) (EMACS.FSKIP STREAM EMACS.WS) (SETQ PTR2 (IMIN (GETFILEPTR STREAM) (ADD1 EOL))) (EMACS.SETFILEPTR STREAM PTR1) (EMACS.DELETE.CHARS STREAM PTR1 (SUB1 PTR2)) (\BOUT STREAM (CHARCODE SP)) (EMACS.SETFILEPTR STREAM (ADD1 PTR1]) (EMACS.BACK.DELETE.WORD [LAMBDA (STREAM) (* kbr%: "24-Jul-85 16:36") (* Delete backward a word.  *) (PROG (PTR1 PTR2) (SETQ PTR1 (GETFILEPTR STREAM)) (EMACS.BWORD STREAM) (SETQ PTR2 (GETFILEPTR STREAM)) (EMACS.DELETE.CHARS STREAM PTR2 (SUB1 PTR1]) (NEW.TEDIT.SELECT.LINE.SCANNER [LAMBDA (X Y TEXTOBJ LINE.LIST REGION WORDSELFLG SELOPERATION WINDOW) (* kbr%: "24-Jul-85 16:49") (PROG (SELECTION PTR) (SETQ SELECTION (OLD.TEDIT.SELECT.LINE.SCANNER X Y TEXTOBJ LINE.LIST REGION WORDSELFLG SELOPERATION WINDOW)) [COND ((EQ (TYPENAME SELECTION) 'SELECTION) (replace (SELECTION POINT) of SELECTION with 'LEFT) (EMACS.SETFILEPTR (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ) (SUB1 (fetch (SELECTION CH#) of SELECTION] (EMACS.FLUSH.CACHE) (RETURN SELECTION]) ) (* BALANCE *) (PUTPROPS ACCESSFNS EMACS.TAB 2) (PUTPROPS DATATYPE EMACS.TAB 2) (PUTPROPS DEFEXPR EMACS.TAB 2) (PUTPROPS DEFFEXPR EMACS.TAB 2) (PUTPROPS DEFVAR EMACS.TAB 2) (PUTPROPS DO EMACS.TAB 1) (PUTPROPS FOR EMACS.TAB 1) (PUTPROPS LAMBDA EMACS.TAB 2) (PUTPROPS PROG EMACS.TAB 2) (PUTPROPS RECORD EMACS.TAB 2) (PUTPROPS SELECT EMACS.TAB 2) (PUTPROPS SELECTQ EMACS.TAB 2) (PUTPROPS UNTIL EMACS.TAB 1) (PUTPROPS WHILE EMACS.TAB 1) (RPAQ? EMACS.DELIMS NIL) (RPAQ? EMACS.SDELIMS NIL) (RPAQ? EMACS.LDELIMS NIL) (RPAQ? EMACS.RDELIMS NIL) (RPAQ? EMACS.SCACHE NIL) (RPAQ? EMACS.BCACHE NIL) (RPAQ? EMACS.SYNTAX NIL) (RPAQ? EMACS.CR 1) (RPAQ? EMACS.WS 2) (RPAQ? EMACS.SD 4) (RPAQ? EMACS.NONCR 8) (RPAQ? EMACS.NONWS 16) (RPAQ? EMACS.NONSD 32) (RPAQ? EMACS.BQ 64) (RPAQ? EMACS.ALPHA 128) (RPAQ? EMACS.BD 256) (RPAQ? EMACS.SPACE 512) (DEFINEQ (EMACS.DELIMS [LAMBDA (LCHARCODE RCHARCODE) (* kbr%: "19-Feb-85 15:13") (* Make LCHARCODE & RCHARCODE into delimiters.  If LCHARCODE = RCHARCODE, then string style.  Otherwise paren style. *) (PROG (BUCKET) (SETQ BUCKET (CONS LCHARCODE RCHARCODE)) (COND ((MEMBER BUCKET EMACS.DELIMS) (* Already there. *) (RETURN))) (PUSH EMACS.DELIMS BUCKET) (COND ((IEQP LCHARCODE RCHARCODE) (SETSYNTAX LCHARCODE 'STRINGDELIM EMACS.READTABLE) (SETA EMACS.SYNTAX LCHARCODE (LOGOR EMACS.NONWS EMACS.NONCR EMACS.SD)) [SETA EMACS.COMMANDS LCHARCODE (EMACS.SDELIM.COMMAND (MKSTRING (CHARACTER LCHARCODE ] (PUSH EMACS.SDELIMS LCHARCODE)) (T (SETSYNTAX LCHARCODE 'LEFTPAREN EMACS.READTABLE) (SETSYNTAX RCHARCODE 'RIGHTPAREN EMACS.READTABLE) (FOR I IN (LIST LCHARCODE RCHARCODE) DO (SETA EMACS.SYNTAX I (LOGOR EMACS.NONCR EMACS.NONWS EMACS.NONSD EMACS.BD))) [SETA EMACS.COMMANDS LCHARCODE (EMACS.LDELIM.COMMAND (MKSTRING (CHARACTER LCHARCODE] [SETA EMACS.COMMANDS RCHARCODE (EMACS.RDELIM.COMMAND (MKSTRING (CHARACTER RCHARCODE] (PUSH EMACS.LDELIMS LCHARCODE) (PUSH EMACS.RDELIMS RCHARCODE]) (EMACS.CR [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM (CHARACTER (CHARCODE CR))) (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((NOT (EQ (EMACS.SCACHE STREAM) 'OUTSIDE)) (FLASHWINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (EMACS.SETCARETPTR STREAM EMACS.SCACHE) (DISMISS 1000) (EMACS.SETCARETPTR STREAM (ADD1 PTR)) (SETQ EMACS.SCACHE 'OUTSIDE) (SETQ EMACS.BCACHE NIL]) (EMACS.RPAREN [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM ")") (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EQ (EMACS.SCACHE STREAM) 'OUTSIDE) (EMACS.CLOSE.BALANCE STREAM]) (EMACS.RBRACKET [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM "]") (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EQ (EMACS.SCACHE STREAM) 'OUTSIDE) (EMACS.CLOSE.BALANCE STREAM]) (EMACS.RBRACE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM "}") (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EQ (EMACS.SCACHE STREAM) 'OUTSIDE) (EMACS.CLOSE.BALANCE STREAM]) (EMACS.RANGLE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM ">") (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EQ (EMACS.SCACHE STREAM) 'OUTSIDE) (EMACS.CLOSE.BALANCE STREAM]) (EMACS.SDELIM.COMMAND [LAMBDA (SDELIM) (* ; "Edited 19-Feb-2021 11:21 by rmk:") (* kbr%: "19-Feb-85 15:14") (* Return sdelim fn to be inserted  in EMACS.COMMANDS.  SDELIM = 1 letter string.  *) `(LAMBDA (STREAM) (EMACS.SDELIM ,SDELIM STREAM]) (EMACS.LDELIM.COMMAND [LAMBDA (LDELIM) (* ; "Edited 19-Feb-2021 11:20 by rmk:") (* kbr%: "19-Feb-85 15:14") (* Return LDELIM fn to be inserted  in EMACS.COMMANDS.  LDELIM = 1 letter string.  *) `(LAMBDA (STREAM) (EMACS.LDELIM ,LDELIM STREAM]) (EMACS.RDELIM.COMMAND [LAMBDA (RDELIM) (* ; "Edited 19-Feb-2021 11:20 by rmk:") (* kbr%: "19-Feb-85 15:14") (* Return RDELIM fn to be inserted  in EMACS.COMMANDS.  RDELIM = 1 letter string.  *) `(LAMBDA (STREAM) (EMACS.RDELIM ,RDELIM STREAM]) (EMACS.SDELIM [LAMBDA (SDELIM STREAM) (* kbr%: "19-Feb-85 15:14") (* Insert string delimiter SDELIM &  update caches. SDELIM = 1 letter  string *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM SDELIM) (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EMACS.BACK.ESCAPEDP STREAM) (RETURN))) (COND ((EQ (EMACS.SCACHE STREAM) 'OUTSIDE) (EMACS.OPEN.STRING STREAM)) (T (EMACS.CLOSE.STRING STREAM]) (EMACS.LDELIM [LAMBDA (LDELIM STREAM) (* kbr%: "19-Feb-85 15:14") (* Insert LDELIM & update caches.  LDELIM = 1 letter string *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM LDELIM) (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EMACS.BACK.ESCAPEDP STREAM) (RETURN))) (COND ((EQ (EMACS.SCACHE STREAM) 'OUTSIDE) (EMACS.OPEN.BALANCE STREAM]) (EMACS.RDELIM [LAMBDA (RDELIM STREAM) (* kbr%: "19-Feb-85 15:14") (* Insert RDELIM & update caches.  RDELIM = 1 letter string *) (PROG (PTR) (SETQ PTR (GETFILEPTR STREAM)) (TEDIT.INSERT STREAM RDELIM) (EMACS.SETFILEPTR STREAM (ADD1 PTR)) (COND ((EMACS.BACK.ESCAPEDP STREAM) (RETURN))) (COND ((EQ (EMACS.SCACHE STREAM) 'OUTSIDE) (EMACS.CLOSE.BALANCE STREAM]) (EMACS.OPEN.STRING [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (LPTR) (* We should be 1 char after left  delim. *) (SETQ LPTR (SUB1 (GETFILEPTR STREAM))) (SETQ EMACS.SCACHE LPTR]) (EMACS.CLOSE.STRING [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (LPTR RPTR LDELIM RDELIM MATCHED) (* We should be 1 char after right  delim. *) (SETQ EMACS.SCACHE 'OUTSIDE) (SETQ RPTR (SUB1 (GETFILEPTR STREAM))) (EMACS.SETFILEPTR STREAM RPTR) (SETQ RDELIM (\PEEKBIN STREAM)) (EMACS.BSKIP STREAM EMACS.NONSD) (EMACS.BBYTE STREAM) (SETQ LPTR (GETFILEPTR STREAM)) (SETQ LDELIM (\PEEKBIN STREAM)) (SETQ MATCHED (IEQP LDELIM RDELIM)) (COND (MATCHED (EMACS.SETCARETPTR STREAM LPTR) (DISMISS 200)) (T (FLASHWINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (EMACS.SETCARETPTR STREAM LPTR) (DISMISS 1000))) (EMACS.SETCARETPTR STREAM (ADD1 RPTR)) (EMACS.SETFILEPTR STREAM (ADD1 RPTR]) (EMACS.OPEN.BALANCE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (LPTR) (* We should be 1 char after left  delim. *) (SETQ LPTR (SUB1 (GETFILEPTR STREAM))) (COND ((NUMBERP EMACS.BCACHE) (* We were at top level.  *) (SETQ EMACS.BCACHE (LIST LPTR))) (T (push EMACS.BCACHE LPTR]) (EMACS.CLOSE.BALANCE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (PTR LPTR RPTR LDELIM RDELIM BALANCED) (* LPTR & RPTR point at balancing  delims *) (SETQ PTR (GETFILEPTR STREAM)) (SETQ RPTR (SUB1 PTR)) (EMACS.SETFILEPTR STREAM RPTR) (SETQ RDELIM (\PEEKBIN STREAM)) (EMACS.BCACHE STREAM) (SETQ BALANCED (NOT (NUMBERP EMACS.BCACHE))) (COND (BALANCED (SETQ LPTR (CAR EMACS.BCACHE)) (EMACS.SETFILEPTR STREAM LPTR) (SETQ LDELIM (\PEEKBIN STREAM)) (EMACS.SETCARETPTR STREAM LPTR) (COND ((IEQP (CDR (ASSOC LDELIM EMACS.DELIMS)) RDELIM) (* Correct match *) (DISMISS 200)) (T (* Flash incorrect match.  *) (FLASHWINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (DISMISS 1000))) (pop EMACS.BCACHE)) (T (* Flash beginning of non-list def.  *) (EMACS.SETCARETPTR STREAM EMACS.BCACHE) (FLASHWINDOW (fetch (EMACSSTREAM WINDOW) of STREAM)) (DISMISS 1000))) (EMACS.SETCARETPTR STREAM PTR) (EMACS.SETFILEPTR STREAM PTR]) (EMACS.FLUSH.CACHE [LAMBDA NIL (* kbr%: "19-Feb-85 15:14") (* Lose cached info about string &  paren balancing. *) (PROG NIL (* Hopefully we can change things so that not all commands flush all of cache.  *) (SETQ EMACS.SCACHE NIL) (SETQ EMACS.BCACHE NIL]) (EMACS.SCACHE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (* Return or OUTSIDE,  computing if necessary.  *) (PROG (PTR ANSWER) (COND (EMACS.SCACHE (RETURN EMACS.SCACHE))) (* Recompute. *) (SETQ PTR (GETFILEPTR STREAM)) (EMACS.SETFILEPTR STREAM (EMACS.BOL STREAM PTR)) (SETQ ANSWER 'OUTSIDE) (while (ILESSP (GETFILEPTR STREAM) PTR) do (* Find opening. *) (EMACS.FSKIP STREAM EMACS.NONSD PTR) (EMACS.FBYTE STREAM) (COND ((IGEQ (GETFILEPTR STREAM) PTR) (RETURN))) (SETQ ANSWER (GETFILEPTR STREAM)) (* Find closing. *) (EMACS.FSKIP STREAM EMACS.NONSD PTR) (EMACS.FBYTE STREAM) (COND ((IGEQ (GETFILEPTR STREAM) PTR) (RETURN))) (SETQ ANSWER 'OUTSIDE)) (* Store ANSWER, restore fileptr, &  return *) (SETQ EMACS.SCACHE ANSWER) (EMACS.SETFILEPTR STREAM PTR) (RETURN ANSWER]) (EMACS.BCACHE [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (* Return ( |...|  ) or OUTSIDE *) (PROG (PTR SCACHE ANSWER) (COND (EMACS.BCACHE (RETURN EMACS.BCACHE))) (* Recompute. *) (SETQ PTR (GETFILEPTR STREAM)) (SETQ SCACHE (EMACS.SCACHE STREAM)) [COND ((NOT (EQ SCACHE 'OUTSIDE)) (* Move off string.  *) (EMACS.SETFILEPTR STREAM SCACHE) (COND ((OR (EMACS.BOFP STREAM) (IEQP (\BACKPEEKBIN STREAM) (CHARCODE CR))) (* A string def! *) (SETQ ANSWER SCACHE) (GO EXIT] [COND ((NULL (EMACS.SAFE.BACK.SEXPRS STREAM)) (* Unsuccessful read = unbalanced  parens. Treat as if top level.  *) (SETQ ANSWER (GETFILEPTR STREAM))) ((OR (ZEROP (GETFILEPTR STREAM)) (IEQP (\BACKPEEKBIN STREAM) (CHARCODE CR))) (* Top level. *) (SETQ ANSWER (GETFILEPTR STREAM))) (T (* Opening delim present.  *) (SETQ ANSWER (LIST (SUB1 (GETFILEPTR STREAM] EXIT (EMACS.SETFILEPTR STREAM PTR) (SETQ EMACS.BCACHE ANSWER) (RETURN ANSWER]) (EMACS.SAFE.BACK.SEXPRS [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (* Backwards read sexprs up to but not including opening delim.  Return T if successful backwards read. Otherwise NIL & leave fileptr near  failure point. *) (PROG (ANSWER) [DO (EMACS.BACK.SKIPSEPRS STREAM) (COND ([OR (ZEROP (GETFILEPTR STREAM)) (IEQP (\BACKPEEKBIN STREAM) (CHARCODE CR)) (AND (FMEMB (\BACKPEEKBIN STREAM) EMACS.LDELIMS) (NOT (EMACS.BACK.ESCAPEDP STREAM] (* Up against delimiter.  *) (SETQ ANSWER T) (RETURN)) ((NULL (NLSETQ (EMACS.BACK.SEXPR STREAM))) (* Error reading backwards.  *) (FLASHWINDOW STREAM) (RETURN] (RETURN ANSWER]) (EMACS.SAFE.BACK.SEXPR [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (* Return T if successful backwards read.  Otherwise NIL & leave fileptr near failure point.  *) (PROG NIL (COND ((NULL (NLSETQ (EMACS.BACK.SEXPR STREAM))) (* Error reading backwards.  *) (FLASHWINDOW STREAM) (RETURN NIL))) (RETURN T]) (EMACS.BACK.SEXPR [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (PROG (RDELIM LDELIM) (EMACS.BACK.SKIPSEPRS STREAM) (COND ((EMACS.BOFP STREAM) (ERROR!)) ((EMACS.BACK.ESCAPEDP STREAM) (* Atom *) (EMACS.BACK.WORD STREAM) (RETURN))) (SETQ RDELIM (\BACKPEEKBIN STREAM)) [SETQ LDELIM (for BUCKET in EMACS.DELIMS when (IEQP (CDR BUCKET) RDELIM) do (RETURN (CAR BUCKET] (COND ((NULL LDELIM) (* Atom *) (EMACS.BACK.WORD STREAM)) ((IEQP LDELIM RDELIM) (* String delimiters *) (\BACKBIN STREAM) (WHILE (AND (NOT (EMACS.BOFP STREAM)) (OR (NOT (IEQP (\BACKPEEKBIN STREAM) LDELIM)) (EMACS.BACK.ESCAPEDP STREAM))) DO (\BACKBIN STREAM)) (COND ((EMACS.BOFP STREAM) (ERROR!))) (\BACKBIN STREAM)) (T (* Left Right delimters *) (\BACKBIN STREAM) [do (EMACS.BACK.SKIPSEPRS STREAM) (COND ((EMACS.BOFP STREAM) (ERROR!)) ((AND (FMEMB (\BACKPEEKBIN STREAM) EMACS.LDELIMS) (NOT (EMACS.BACK.ESCAPEDP STREAM))) (RETURN))) (EMACS.BACK.SEXPR STREAM) (COND ((OR (EMACS.BOFP STREAM) (IEQP (\BACKPEEKBIN STREAM) (CHARCODE CR))) (* At top of definition in middle of  read. *) (ERROR!] (\BACKBIN STREAM) (EMACS.BSKIP STREAM EMACS.BQ]) (EMACS.BACK.SKIPSEPRS [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (* Backwards SKIPSEPRS.  *) (PROG (SA CH SNX) (SETQ SA (fetch (READTABLEP READSA) of EMACS.READTABLE)) (COND ((EMACS.BOFP STREAM) (RETURN))) (SETQ CH (\BACKPEEKBIN STREAM)) (SETQ SNX (\GETBASEBYTE SA CH)) (COND ((NOT (EQ SNX SEPRCHAR.RC)) (RETURN))) (\BACKBIN STREAM) (do (COND ((EMACS.BOFP STREAM) (RETURN))) (SETQ CH (\BACKPEEKBIN STREAM)) (SETQ SNX (\GETBASEBYTE SA CH)) (COND ((EQ SNX SEPRCHAR.RC) (\BACKBIN STREAM)) ((EQ SNX ESCAPE.RC) (\BIN STREAM) (COND ((NOT (EMACS.BACK.ESCAPEDP STREAM)) (\BACKBIN STREAM))) (RETURN)) (T (RETURN]) (EMACS.BACK.ESCAPEDP [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (* Is the previous byte escaped? *) (PROG (PTR SA CH SNX ANSWER) (* T if previous byte preceded by  odd number of %%'s.  *) (SETQ PTR (GETFILEPTR STREAM)) (COND ((ILEQ PTR 1) (RETURN NIL))) (SETQ SA (fetch (READTABLEP READSA) of EMACS.READTABLE)) (\BACKBIN STREAM) [do (SETQ CH (\BACKBIN STREAM)) (SETQ SNX (\GETBASEBYTE SA CH)) (COND ((EQ SNX ESCAPE.RC) (SETQ ANSWER (NOT ANSWER))) (T (RETURN))) (COND ((EMACS.BOFP STREAM) (RETURN] (SETFILEPTR STREAM PTR) (RETURN ANSWER]) (EMACS.TAB [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (* Lisp indent. *) (PROG (PTR BOL EOL CODE INDENT OFFSET TABFLG) (* INDENT = how much we want to indent.  OFFSET = how many chars to nonws. TABFLG = any tabs present at beginning of  line. *) (SETQ PTR (GETFILEPTR STREAM)) (SETQ INDENT (EMACS.TAB.INDENT STREAM)) (SETQ BOL (EMACS.BOL STREAM PTR)) (* Calc OFFSET. *) (SETQ EOL (EMACS.EOL STREAM PTR)) (EMACS.SETFILEPTR STREAM BOL) (SETQ OFFSET 0) (for I from BOL to (SUB1 EOL) do (SETQ CODE (\BIN STREAM)) (COND ((EQUAL CODE (CHARCODE TAB)) (SETQ TABFLG T))) (COND ((NOT (BITTEST (ELT EMACS.SYNTAX (OR (NUMBERP CODE) 256)) EMACS.WS)) (RETURN))) (SETQ OFFSET (ADD1 OFFSET))) (* Insert and/or delete whitespace.  *) (COND [TABFLG (EMACS.DELETE.BYTES STREAM BOL (IPLUS BOL OFFSET -1)) (COND ((NOT (ZEROP INDENT)) (TEDIT.INSERT STREAM (ALLOCSTRING INDENT " ") (ADD1 BOL] ((IEQP OFFSET INDENT) (* Do nothing. *) ) ((IGREATERP OFFSET INDENT) (EMACS.DELETE.BYTES STREAM BOL (IPLUS BOL (IDIFFERENCE OFFSET INDENT) -1))) ((ILESSP OFFSET INDENT) (TEDIT.INSERT STREAM (ALLOCSTRING (IDIFFERENCE INDENT OFFSET) " ") (ADD1 BOL))) (T (SHOULDNT))) (* Reposition fileptr.  *) (COND ((ILEQ PTR (IPLUS BOL OFFSET)) (EMACS.SETFILEPTR STREAM (IPLUS BOL INDENT))) (T (EMACS.SETFILEPTR STREAM (IPLUS PTR (IDIFFERENCE INDENT OFFSET]) (EMACS.TAB.INDENT [LAMBDA (STREAM) (* kbr%: "19-Feb-85 15:14") (* Amount to indent for Lisp indent.  *) (PROG (PTR BOD SISTER1PTR SISTER2PTR LDELIMFLG SISTER1 SISTERPTR OFFSET BOL ANSWER) (SETQ PTR (GETFILEPTR STREAM)) (* SETQ BOD (EMACS.BOD STREAM PTR)) (SETQ BOD 0) (EMACS.SETFILEPTR STREAM (EMACS.BOL STREAM PTR)) (EMACS.BSKIP STREAM EMACS.WS BOD) (* Get SISTER1PTR, SISTER2PTR, &  LDELIMFLG *) (do (EMACS.BSKIP STREAM EMACS.SPACE) (COND ((ILEQ (GETFILEPTR STREAM) BOD) (RETURN))) (COND ((AND (FMEMB (\BACKPEEKBIN STREAM) EMACS.LDELIMS) (NOT (EMACS.BACK.ESCAPEDP STREAM))) (SETQ LDELIMFLG T) (RETURN))) (EMACS.SAFE.BACK.SEXPR STREAM) (SETQ SISTER2PTR SISTER1PTR) (SETQ SISTER1PTR (GETFILEPTR STREAM))) (* Get SISTER1. *) [COND (SISTER1PTR (EMACS.SETFILEPTR STREAM SISTER1PTR) (SETQ SISTER1 (RATOM STREAM] (* Get SISTERPTR & OFFSET.  *) (SETQ SISTERPTR (OR SISTER1PTR (GETFILEPTR STREAM))) [COND ((AND SISTER1 (LITATOM SISTER1)) (SETQ OFFSET (GETPROP SISTER1 'EMACS.TAB] (COND (OFFSET (SETQ OFFSET (SUB1 OFFSET))) ((NULL SISTER1) (SETQ OFFSET 1)) ((NULL LDELIMFLG) (SETQ OFFSET 0)) ((NULL SISTER2PTR) (SETQ OFFSET 0)) (T (SETQ SISTERPTR SISTER2PTR) (SETQ OFFSET 0))) (* Get ANSWER. *) (SETQ BOL (EMACS.BOL STREAM SISTERPTR)) (EMACS.SETFILEPTR STREAM BOL) (SETQ ANSWER OFFSET) [for I from BOL to (SUB1 SISTERPTR) do (COND ((IEQP (\BIN STREAM) (CHARCODE TAB)) (SETQ ANSWER (IPLUS ANSWER 8))) (T (SETQ ANSWER (ADD1 ANSWER] EXIT (EMACS.SETFILEPTR STREAM PTR) (RETURN ANSWER]) (EMACS.INIT.SYNTAX [LAMBDA NIL (* kbr%: "19-Feb-85 15:14") (PROG NIL (* "Character" 256 is used to handle  IMAGEOBJs. *) (SETQ EMACS.SYNTAX (ARRAY 257 'WORD 0 0)) (FOR I FROM 0 TO 256 DO (SETA EMACS.SYNTAX I (LOGOR EMACS.NONCR EMACS.NONWS EMACS.NONSD EMACS.ALPHA ))) (FOR I IN (CHARCODE (TAB LF SP)) DO (SETA EMACS.SYNTAX I (LOGOR EMACS.WS EMACS.NONCR EMACS.NONSD EMACS.SPACE))) (SETA EMACS.SYNTAX (CHARCODE CR) (LOGOR EMACS.WS EMACS.CR EMACS.NONSD)) (FOR I IN '(39 44 64 96) DO (SETA EMACS.SYNTAX I (LOGOR EMACS.NONWS EMACS.NONCR EMACS.NONSD EMACS.BQ EMACS.ALPHA))) (SETQ EMACS.DELIMS NIL) (SETQ EMACS.SDELIMS NIL) (SETQ EMACS.LDELIMS NIL) (SETQ EMACS.RDELIMS NIL) (EMACS.DELIMS (CHARCODE "(") (CHARCODE ")")) (EMACS.DELIMS (CHARCODE "[") (CHARCODE "]")) (EMACS.DELIMS (CHARCODE "{") (CHARCODE "}")) (EMACS.DELIMS 34 34]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (EMACS.INIT) (MOVD? %'TEDIT.SELECT.LINE.SCANNER %' OLD.TEDIT.SELECT.LINE.SCANNER) (MOVD %'NEW.TEDIT.SELECT.LINE.SCANNER %' TEDIT.SELECT.LINE.SCANNER) (MOVD %'EMACS %'TEDIT) ) (PUTPROPS EMACS COPYRIGHT ("Xerox Corporation" 1985 1986 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (10504 55835 (EMACS.INIT 10514 . 11136) (EMACS.INIT.BACKGROUND 11138 . 12168) ( DEDITEmacs 12170 . 12810) (EMACS.INIT.COMMANDS 12812 . 13932) (EMACS.COMMAND 13934 . 14105) ( EMACS.OPERATE 14107 . 17725) (EMACS.GETKEY 17727 . 17954) (EMACS 17956 . 19057) (EMACS.PROCESS 19059 . 19298) (EMACS.TEDIT1 19300 . 19707) (EMACS.WINDOW 19709 . 20104) (EMACS.SETFILEPTR 20106 . 20568) ( EMACS.GETCARETPTR 20570 . 21105) (EMACS.SETCARETPTR 21107 . 21640) (EMACS.SHOWCARET 21642 . 21983) ( EMACS.BOL 21985 . 22532) (EMACS.EOL 22534 . 23074) (EMACS.DELETE.BYTES 23076 . 23942) (EMACS.BOFP 23944 . 24084) (EMACS.EOFP 24086 . 24254) (EMACS.CCHAR 24256 . 24656) (EMACS.PEEKBIN 24658 . 24942) ( EMACS.FBYTE 24944 . 25274) (EMACS.FWORD 25276 . 25641) (EMACS.BYTEP 25643 . 25809) (EMACS.FSKIP 25811 . 26481) (EMACS.FSKIPTO 26483 . 27135) (EMACS.BBYTE 27137 . 27472) (EMACS.BCHAR 27474 . 27841) ( EMACS.BPEEKCHAR 27843 . 28282) (EMACS.BWORD 28284 . 28650) (EMACS.BSKIP 28652 . 29310) (EMACS.BSKIPTO 29312 . 29968) (EMACS.SET.EOF 29970 . 30542) (EMACS.GOTO.BOL 30544 . 30877) (EMACS.BACK.BYTE 30879 . 31192) (EMACS.FWD.DELETE.BYTE 31194 . 31505) (EMACS.GOTO.EOL 31507 . 31834) (EMACS.FWD.BYTE 31836 . 32151) (EMACS.KILL.LINE 32153 . 32760) (EMACS.DELETE.CHARS 32762 . 33598) (EMACS.REDISPLAY 33600 . 34043) (EMACS.NEXT.LINE 34045 . 35028) (EMACS.PREVIOUS.LINE 35030 . 35846) (EMACS.QUOTE.BYTE 35848 . 36461) (EMACS.SEARCH 36463 . 39929) (EMACS.TRANSPOSE.BYTES 39931 . 40827) (EMACS.NEXT.SCREENFULL 40829 . 41585) (EMACS.CXCV 41587 . 42245) (EMACS.CXCW 42247 . 42599) (EMACS.CXCZ 42601 . 43063) ( EMACS.FWD.SEXPR 43065 . 43620) (EMACS.BACK.DELETE.BYTE 43622 . 44234) (EMACS.GOTO.BOD 44236 . 45087) ( EMACS.BOD 45089 . 46190) (EMACS.GOTO.EOD 46192 . 47038) (EMACS.EOD 47040 . 48104) (EMACS.KILL.SEXPR 48106 . 48624) (EMACS.GOTO.BOF 48626 . 48954) (EMACS.GOTO.EOF 48956 . 49294) (EMACS.BACK.WORD 49296 . 49610) (EMACS.FWD.DELETE.WORD 49612 . 50117) (EMACS.EDIT 50119 . 50715) (EMACS.FWD.WORD 50717 . 51029) (EMACS.GRIND 51031 . 51593) (EMACS.SNARF 51595 . 51985) (EMACS.MT 51987 . 52744) ( EMACS.PREVIOUS.SCREENFULL 52746 . 53512) (EMACS.JOIN.LINES 53514 . 54590) (EMACS.BACK.DELETE.WORD 54592 . 55070) (NEW.TEDIT.SELECT.LINE.SCANNER 55072 . 55833)) (56879 86487 (EMACS.DELIMS 56889 . 58630 ) (EMACS.CR 58632 . 59303) (EMACS.RPAREN 59305 . 59695) (EMACS.RBRACKET 59697 . 60089) (EMACS.RBRACE 60091 . 60481) (EMACS.RANGLE 60483 . 60873) (EMACS.SDELIM.COMMAND 60875 . 61500) (EMACS.LDELIM.COMMAND 61502 . 62127) (EMACS.RDELIM.COMMAND 62129 . 62754) (EMACS.SDELIM 62756 . 63556) (EMACS.LDELIM 63558 . 64228) (EMACS.RDELIM 64230 . 64901) (EMACS.OPEN.STRING 64903 . 65276) (EMACS.CLOSE.STRING 65278 . 66331) (EMACS.OPEN.BALANCE 66333 . 66936) (EMACS.CLOSE.BALANCE 66938 . 68685) (EMACS.FLUSH.CACHE 68687 . 69177) (EMACS.SCACHE 69179 . 71172) (EMACS.BCACHE 71174 . 73054) (EMACS.SAFE.BACK.SEXPRS 73056 . 74344) (EMACS.SAFE.BACK.SEXPR 74346 . 74872) (EMACS.BACK.SEXPR 74874 . 77224) (EMACS.BACK.SKIPSEPRS 77226 . 78450) (EMACS.BACK.ESCAPEDP 78452 . 79535) (EMACS.TAB 79537 . 81988) (EMACS.TAB.INDENT 81990 . 84821) (EMACS.INIT.SYNTAX 84823 . 86485))))) STOP \ No newline at end of file diff --git a/lispusers/EMACS.LCOM b/lispusers/EMACS.LCOM index 451dc12ea44bcdc34c791643845cfef6e3f2509a..94431df2dd0dfe9bbcd48d511396a95bb83c802c 100644 GIT binary patch delta 3249 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 delta 8085 zcmbtZYj9h~bp}A{;n0Kt5`2LYwWKT&q(m6^;z59t6<)kVh#&yn3lM}wSr3vG=ujjj zihA0EL~Z@Z*tO$rQ@6DzX;P(4Gp;4U>MN7db|+)Y6F<^)GM*-xX3|NVX?{d$JN48} z>VCWT1;|PqPdLN9XV30E=j`5dzH@f*&O^4JJZGzTlBskeCMTqPB2M~9WJsA?9*P8r zFESDkN5nuM@$}6somie6BmQBSmXK4*gL~2`C09@qva**^v8dshnOKA)aJLAU`?6#9oAXvan`;07hm0fy?MOszPGeCW}CY5#`unVue@vVh+!hdjIn?V*3t_zi1MwY=`D)+WBBH1YUIioQP{pvN|hVCdNm|IvVXPc|Jv=VwjF zt>~1RpRx1V8EGOxlvEGK@9J>(^bE$*2`N*^4JEVkgfd9j2C?C4z`mZnxO-EV4U;D~ zJ;5IDZ1S_mX2%u`jX2&yJG7;X-sPMH^{DelXqQ|59PNv#E}HFiP^tAH^j>X!6YbNk zx6z(#`wrTP_Csj5xHr>R+F>)bbtq_;3%&GgM*-C99SO9V?hHNJ=>hfW&IsDCcZcYE zoqqu8$*#xHZgI1@EAA<@-*A5lZKnGS+OK!NiuTE_UG(oap8_?s%67Zlm* zp~0TJKruU4dYF_`o61v zgd7n_Y>f79Yp4Ic?Xi!x)%2yi{`S^49^Sr#ZS?cod)eckwkPqZx_9iivFC4j?y)lV z<$)h;<{vc&|B(|)BCq5TJtRl`>L>o2ZLPZ$9C>xJ!NNTQ%?pTT}l%{ zoB#CAEzO$1uqxr@o&9X`Pj`RjJ(T72I%K^ck%uxeQ)=lf%@E@Ijn!(Jqi=L-sE`Uaa1bL#+uhLR5@mu;TIGnq7W4 zza~U9>>`2?sObENpGe7kLOxJP<&znLq^G|;9MI<=tJTg4hK)G^!y5mv!SwUZP?t2I zxrH~DotTg^ac?@C%}G9=+b5v)iLCLfF2i7kgEvCD0`QI(CMHS@x`$#?J~qbSTQqbe z0Rw8TQ^r!TKdvNDY~)kf45kINp;$Iog1&L3c93lv%aIe=NuY}P5?eUq$HB{2>W0|T z*btNF#YcaOmEw_MYE+S9Fa6+Y+wH(i!Bl`OmPrWS0DTV!0d{$pmTHdrzC7FGks#wY{ z$6CD+SFKIOmTR-+nU=MJrmsh}uGlWunc1V8qjC$T8kJ;fbjopyu&b8KMb`_JhD%p1 z&z5IgYm@xt*IbtSZ$5R^@~9@cPhWzr>6U(jL25+*A6s?M7rfsnz0A9>+hEbhh?5(q@dG;?F-ZUG@grj@a5 zk#_)UM#oMr zAF4??LDLigJCnmFL=9G}LBJ8hcoo`on){WyE0wxkVL8t*2%c$n0_OUV>U2Q@^H(ki zPVmbzkePts8CqeeCZNHX^i-*XRbO4DZS1kP6e#MaHTc!Svo}Nq%-ec@T6QQ~HNis}QN=#PE51y5DQ(Jo>foLp@ZaPd0vIKqGM7+aEH#)UKdpblNAo6^RB&XPKWIX%Pz%sx6|1; z&c|C?osM-y`)f7_6!aJE_j74i`iic}o6puu+Q{C$`hE_RUT;_{+7}v&Et(Pbh4m)A z&hd27UTi75T^rY0H(G*t>ssgSb*l=>u&q2>1IJ=Wq`eKU3M*}lA_qPuqA;6QN=mel z%n=b@G@UEtquBFgY6=VnjLIT;o9q2wJ$+A=$ z$|jTOAkrY010wY_G}qgJLQC-Ja9JaY!Kt1G5aH9Xhq(|(J_gW*TpTAaFT5!MPeL#n zv*A6{MG1vtR@N4VkPsn5L)|uH0}~p=Ai$CNJWf|_sA|o~7Z|o_BNddVCguu0Gs5w@ z9^rlyK>+!`POz(yXxtDC7BaeQN#&~d} zoSd4_76wM}R-D1%@UL4pSggDdD()!mD!bkDJbpox-9?Xk#^bzccRDte56)JmXYVU| zITqZo9BwJ@P{}>l8;icfuHv9R(yo)X!=1$)93#{r?HGC3eOvBkU7)YJ!|8AwVOUWV zfio@HJ}#uarB$24!u`s($|$>pke|i*q#5V(+~?IpFh5}3k{0!Iq_GchUj#BU zv%>9!qu#u;!D4eRuOIzK<{5vi-wRA#=~Ov?G&;rI_yeM4SeatrQbZ*T0?AKGRN0`cIc*~oc*Y4Bxt8({q)y2)u z-X?lNbXOX_l(iqm5#f=n-HK<{ZaZvW%Q|?RaS3YLyYhPr@9{U+t~`o64OD3HlroW0 z6a;sWAQPz{1OSOmMh0RZlYd|pIf36u1QV0kCuAMenY!!H!GjD=6lqG?JXwMZGwN>V#b;Gxt{CU?~NFG%Xi0890QOmn+OnqzRqo*CM8Y z6=plWq8SgY6x9q6P$^EsEJF|rtPe;R0C68=;*g}r9j<(IvZl%o@krjoZ-vavgq_f} z>-RKR6+x)?5&Zn1{yu>7Q))sXJ=M>~*0DS87gOzYNp7lsEji7u-d;?-NdIN5RipkY z<>b^iwZ1&w#qat(ECi&CQcTDy*mJ4Or8NWK&A8pQSe*_Fchynu0|&Sp@`m@>Ef)%j z=z#*#BSZ7FG!c!XkdF}6SVfhK%T=7WfN98575#JJ_XbvWs}s|FqJI6OgGHT<>XhHu z#>xkb)CAWWd0QLh54TaB@+)neL!4SZ@-ZUlelpkoR4#`**#o)twp!jsdO^nT5Y;zig#ZaT`qhX!m94#x2^i+xOw)d zI|0QvXf+*ubE?}$dgzx*JJ|%BU+}2@yi~Cox9F((v}&%SbvQyiv2+iPK3SP~RsIVH zcYXwI?mKj^@zdu@WW9Dp|I#$Sz5n;=zq9LSe4~iOO@E!j?;PsIDt~e4&W82HtQ?2+ z>K(X?9+uY8g@bosK~>k$eQaZ=kKrb~nxFX$cB%TKx&LF2AC@oK=#hoHtGv-t>D!A=ObI`bZ^VU7GnJOQ=~o{3Y`Z>liqGsP9snSQ4?Q?UhnFLGV|lrQKC+zI zq{Wzyg7k;WS*ONh1-*Jwpox={_GT?^lhG0antu6Y$zVnKmQcs3eI44n$zoi)N%E@G z7f z>QB#Zr7xWw0rkIUchR37Z=?5|>+G#vg;HagxvV1x+vtUJF8ai|&3N}K=Qh(<&kfl~ zKb6kA*Y`J*Y&uRqb-H^4@!;+md-LX{t@NjtHg^$EGiUU3{~-Om1{=U1y?p+YaI~SS va^W#+_4^lBt<}i~1M93@Vq?E9ui2D`p`Tsq-JnUL-M>A$VPJs$0NnilMaaP~ From d4169488ec6e3ccd0b81d47e5e7da16aa50fdddb Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Fri, 19 Feb 2021 14:38:24 -0800 Subject: [PATCH 31/37] TWODINSPECTOR: fixed error in 2D layout, synchronized scrolling of values and indexes --- sources/TWODINSPECTOR | 100 ++----------------------------------- sources/TWODINSPECTOR.LCOM | Bin 0 -> 55515 bytes 2 files changed, 5 insertions(+), 95 deletions(-) create mode 100644 sources/TWODINSPECTOR.LCOM diff --git a/sources/TWODINSPECTOR b/sources/TWODINSPECTOR index 79095a83..4554c3d0 100644 --- a/sources/TWODINSPECTOR +++ b/sources/TWODINSPECTOR @@ -1,4 +1,4 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "11-Aug-2020 11:22:30"  {DSK}kaplan>Local>medley3.5>lispcore>sources>TWODINSPECTOR.;2 111972 changes to%: (FNS ONEDINSPECT.PROPWIDTH ONEDINSPECT.ARRANGEWINDOWS RIGHTW.REPAINTFN) previous date%: "31-Dec-93 12:04:36" {DSK}kaplan>Local>medley3.5>lispcore>sources>TWODINSPECTOR.;1) (* ; " Copyright (c) 1985, 1900, 1987, 1990, 1992, 1993, 2020 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT TWODINSPECTORCOMS) (RPAQQ TWODINSPECTORCOMS ( (* ;; "Substrate for two-dimensional inspectors. Used in inspecting arrays.") (COMS (* ;; "Added by yabu.fx, for SUNLOADUP without DWIM. They compute load time constants, and must come first in the file.") (FNS \CREATE.TWODINSPECTOR.TITLEMENU \CREATE.TWODINSPECTOR.SETMENU \CREATE.TWODINSPECTOR.INSPECTMENU)) (* ;; "Oned-inspector ") (FNS ONEDINSPECTW.CREATE GET-ONED-DISPLAYW ONEDINSPECT.ARRANGEWINDOWS ONEDINSPECT.REPAINTFN ONEDINSPECT.PRINTELEMENT ONEDINSPECT.RESHAPEFN ONEDINSPECT.MAKEREGIONS ONEDINSPECT.BUTTONEVENTFN ONEDINSPECT.COPYBUTTONFN ONEDINSPECT.SCROLLFN ONEDINSPECT.CLOSEFN ONEDINSPECT.REDISPLAY ONEDINSPECT.REPLACE ONEDINSPECT.SELECTITEM ONEDINSPECT.SELECTPROP ONEDINSPECT.ADJUSTSELECTION ONEDINSPECT.PROPWIDTH ONEDINSPECT.VALUEWIDTH ONEDINSPECT.DEFAULT.TITLECOMMANDFN ONEDINSPECT.DEFAULT.VALUECOMMANDFN ONEDINSPECT.SETELT) (* ;; "Twod-inspector") (FNS TWODINSPECTW.CREATE GET-TWOD-DISPLAYW GET-CORNERW TWODINSPECT.ARRANGEWINDOWS TWODINSPECT.REPAINTFN TWODINSPECT.PRINTELEMENT TWODINSPECT.RESHAPEFN TWODINSPECT.MAKEREGIONS TWODINSPECT.BUTTONEVENTFN TWODINSPECT.COPYBUTTONFN TWODINSPECT.DOWINDOWCOMFN TWODINSPECT.SCROLLFN TWODINSPECT.CLOSEFN TWODINSPECT.REDISPLAY TWODINSPECT.REPLACE TWODINSPECT.SELECTITEM TWODINSPECT.SELECTROWPROP TWODINSPECT.SELECTCOLUMNPROP TWODINSPECT.ADJUSTSELECTION TWODINSPECT.DEFAULT.TITLECOMMANDFN TWODINSPECT.DEFAULT.VALUECOMMANDFN TWODINSPECT.SETELT TWODINSPECT.ROWPROPWIDTH TWODINSPECT.COLUMNWIDTHS TWODINSPECT.COLUMNWIDTH TWODINSPECT.TOTALWIDTH) (* ;; "Right window fns") (FNS GET-RIGHTW RIGHTW.REPAINTFN RIGHTW.RESHAPEFN RIGHTW.BUTTONEVENTFN RIGHTW.ADJUSTSELECTION ) (* ;; "Top window fns") (FNS GET-TOPW TOPW.REPAINTFN TOPW.RESHAPEFN TOPW.ADJUSTSELECTION TOPW.BUTTONEVENTFN) (* ;; "Title window fns") (FNS GET-TITLEW TITLEW.REPAINTFN TITLEW.BUTTONEVENTFN) (* ;; "Utilites ") (FNS ONED.TRACKCURSOR TWOD.TRACKCURSOR INSPECT.INVERTSELECTION INSPECT.INVERTREGION INSPECT.FLIPSELECTION) (INITVARS INSPECTORFONT) (GLOBALVARS INSPECTORFONT) (DECLARE%: DOEVAL@COMPILE DONTCOPY (RECORDS INSPECT.SELECTION ONED.SELECTION TWOD.SELECTION)) (INITRECORDS ONED.SELECTION TWOD.SELECTION) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (LOCALVARS . T)))) (* ;; "Substrate for two-dimensional inspectors. Used in inspecting arrays.") (* ;; "Added by yabu.fx, for SUNLOADUP without DWIM. They compute load time constants, and must come first in the file." ) (DEFINEQ (\CREATE.TWODINSPECTOR.TITLEMENU [LAMBDA NIL (create MENU ITEMS _ '(("Refetch" 'REFETCH "Refetch the datum") ("IT _ Datum" 'IT "Bind IT to the inspected datum"]) (\CREATE.TWODINSPECTOR.SETMENU [LAMBDA NIL (create MENU ITEMS _ '(("IT _ Selection" 'IT "Bind IT to the value of the selected entry") ("Set" 'SET "Set the selected entry"]) (\CREATE.TWODINSPECTOR.INSPECTMENU [LAMBDA NIL (create MENU ITEMS _ '(("Inspect" 'INSPECT "Inspect the value of the selected entry") ("IT _ Selection" 'IT "Bind IT to the value of the selected entry") ("Set" 'SET "Set the selected entry"]) ) (* ;; "Oned-inspector ") (DEFINEQ (ONEDINSPECTW.CREATE [LAMBDA (DATUM PROPS FETCHFN STOREFN VALUECOMMANDFN PROPCOMMANDFN TITLE TITLECOMMANDFN WHERE TOPRIGHT) (* ; "Edited 6-Apr-87 17:03 by jop") (* ;;  "If where is a window, it may be the result of a previous call, so try to reuse all windows") (PROG ((PROFILE (MAKE-INSPECTOR-PROFILE)) [FONT (OR INSPECTORFONT (DEFAULTFONT 'DISPLAY] [TITLEFONT (OR (DSPFONT NIL WindowTitleDisplayStream) '(HELVETICA 8 MRR] DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT WINDOWGROUP) (WITH-INSPECTOR-ENV PROFILE (if (LITATOM PROPS) then (SETQ PROPS (APPLY* PROPS DATUM))) (* ;  "DISPLAYWINDOW is the central and main window of the group") (SETQ DISPLAYWINDOW (GET-ONED-DISPLAYW WHERE DATUM FETCHFN STOREFN VALUECOMMANDFN PROPCOMMANDFN TITLECOMMANDFN PROPS PROFILE FONT)) (* ;  "RIGHTWINDOW records the ROWPROPS") (SETQ RIGHTWINDOW (GET-RIGHTW DISPLAYWINDOW FONT)) (* ;  "TITLEWINDOW will only hold a title") (SETQ TITLEWINDOW (GET-TITLEW DISPLAYWINDOW TITLE TITLEFONT DATUM)) (* ; "Put up the window group") [if (NOT (POSITIONP TOPRIGHT)) then (LET ((REGION (if (WINDOWP WHERE) then (WINDOWPROP WHERE 'REGION) elseif (REGIONP WHERE) then WHERE))) (if REGION then (SETQ GLEFT (fetch (REGION LEFT) of REGION)) (SETQ GBOTTOM (fetch (REGION BOTTOM) of REGION)) (SETQ GWIDTH (fetch (REGION WIDTH) of REGION)) (SETQ GHEIGHT (fetch (REGION HEIGHT) of REGION)) elseif (POSITIONP WHERE) then (SETQ GLEFT (fetch (POSITION XCOORD) of WHERE)) (SETQ GBOTTOM (fetch (POSITION YCOORD) of WHERE] (SETQ WINDOWGROUP (ONEDINSPECT.ARRANGEWINDOWS DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT TOPRIGHT)) (* ;; "Display the group") (ONEDINSPECT.RESHAPEFN DISPLAYWINDOW) (RIGHTW.RESHAPEFN RIGHTWINDOW) (TITLEW.REPAINTFN TITLEWINDOW) (* ;; "then establish reshapefns for windows in group") (WINDOWPROP DISPLAYWINDOW 'RESHAPEFN (FUNCTION ONEDINSPECT.RESHAPEFN)) (WINDOWPROP RIGHTWINDOW 'RESHAPEFN (FUNCTION RIGHTW.RESHAPEFN)) (WINDOWPROP TITLEWINDOW 'RESHAPEFN (FUNCTION TITLEW.REPAINTFN))) (* ;; "finally return the group") (RETURN WINDOWGROUP]) (GET-ONED-DISPLAYW [LAMBDA (WHERE DATUM FETCHFN STOREFN VALUECOMMANDFN PROPCOMMANDFN TITLECOMMANDFN PROPS PROFILE FONT) (* ; "Edited 6-Apr-87 14:57 by jop") (LET [(DISPLAYWINDOW (if (WINDOWP WHERE) then WHERE else (CREATEW (CREATEREGION 0 0 100 100) NIL 2 T] (WINDOWPROP DISPLAYWINDOW 'REPAINTFN (FUNCTION ONEDINSPECT.REPAINTFN)) (WINDOWPROP DISPLAYWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP DISPLAYWINDOW 'SCROLLFN (FUNCTION ONEDINSPECT.SCROLLFN)) (WINDOWPROP DISPLAYWINDOW 'BUTTONEVENTFN (FUNCTION ONEDINSPECT.BUTTONEVENTFN)) (WINDOWPROP DISPLAYWINDOW 'COPYBUTTONEVENTFN (FUNCTION ONEDINSPECT.COPYBUTTONFN)) (WINDOWPROP DISPLAYWINDOW 'CLOSEFN (FUNCTION ONEDINSPECT.CLOSEFN)) (DSPRIGHTMARGIN MAX.SMALLP DISPLAYWINDOW) (DSPFONT FONT DISPLAYWINDOW) (WINDOWPROP DISPLAYWINDOW 'DATUM DATUM) (WINDOWPROP DISPLAYWINDOW 'FETCHFN FETCHFN) (WINDOWPROP DISPLAYWINDOW 'STOREFN STOREFN) (WINDOWPROP DISPLAYWINDOW 'VALUECOMMANDFN (OR VALUECOMMANDFN (FUNCTION ONEDINSPECT.DEFAULT.VALUECOMMANDFN ))) (WINDOWPROP DISPLAYWINDOW 'ROWPROPCOMMANDFN PROPCOMMANDFN) (WINDOWPROP DISPLAYWINDOW 'TITLECOMMANDFN (OR TITLECOMMANDFN (FUNCTION ONEDINSPECT.DEFAULT.TITLECOMMANDFN ))) (WINDOWPROP DISPLAYWINDOW 'ROWPROPS PROPS) (WINDOWPROP DISPLAYWINDOW 'ROWPROPSPACE " ") (WINDOWPROP DISPLAYWINDOW 'VALUEWIDTH (ONEDINSPECT.VALUEWIDTH DATUM PROPS FETCHFN FONT)) (WINDOWPROP DISPLAYWINDOW 'VALUESPACE " ") (WINDOWPROP DISPLAYWINDOW 'PROFILE PROFILE) DISPLAYWINDOW]) (ONEDINSPECT.ARRANGEWINDOWS [LAMBDA (DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW TOTALLEFT TOTALBOTTOM TOTALWIDTH TOTALHEIGHT TOPRIGHT) (* ; "Edited 11-Aug-2020 11:21 by rmk:") (* ; "Edited 6-Apr-87 15:08 by jop") (* ;; "RMK: Save the ROWPROPWIDTH for future right-adjusting of the right (props) window") (* ;; "REGION should be the total available area") (PROG ((ROWPROPS (WINDOWPROP DISPLAYWINDOW 'ROWPROPS)) (ROWPROPSPACE (WINDOWPROP DISPLAYWINDOW 'ROWPROPSPACE)) (VALUEWIDTH (WINDOWPROP DISPLAYWINDOW 'VALUEWIDTH)) (VALUESPACE (WINDOWPROP DISPLAYWINDOW 'VALUESPACE)) TOTALRIGHT TOTALTOP DWHEIGHT DWWIDTH TITLEHEIGHT RWWIDTH DWLEFT DWBOTTOM ROWPROPWIDTH) [SETQ TITLEHEIGHT (HEIGHTIFWINDOW (FONTPROP TITLEWINDOW 'HEIGHT) NIL (WINDOWPROP TITLEWINDOW 'BORDER] (SETQ ROWPROPWIDTH (ONEDINSPECT.PROPWIDTH (WINDOWPROP DISPLAYWINDOW 'ROWPROPS) DISPLAYWINDOW)) [SETQ RWWIDTH (WIDTHIFWINDOW (IPLUS (STRINGWIDTH ROWPROPSPACE RIGHTWINDOW) ROWPROPWIDTH) (WINDOWPROP RIGHTWINDOW 'BORDER] (if (NULL TOTALHEIGHT) then [SETQ DWHEIGHT (IMIN 500 (HEIGHTIFWINDOW (ITIMES (FONTPROP DISPLAYWINDOW 'HEIGHT) (LENGTH ROWPROPS)) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER] (SETQ TOTALHEIGHT (IPLUS TITLEHEIGHT DWHEIGHT)) else (SETQ DWHEIGHT (IDIFFERENCE TOTALHEIGHT TITLEHEIGHT))) (if (NULL TOTALWIDTH) then [SETQ DWWIDTH (IMIN 200 (WIDTHIFWINDOW (IPLUS VALUEWIDTH (STRINGWIDTH VALUESPACE DISPLAYWINDOW) ) (WINDOWPROP DISPLAYWINDOW 'BORDER] (SETQ TOTALWIDTH (IPLUS RWWIDTH DWWIDTH)) else (SETQ DWWIDTH (IDIFFERENCE TOTALWIDTH RWWIDTH))) [if (POSITIONP TOPRIGHT) then (SETQ TOTALRIGHT (fetch (POSITION XCOORD) of TOPRIGHT)) (SETQ TOTALTOP (fetch (POSITION YCOORD) of TOPRIGHT)) elseif (AND TOTALLEFT TOTALBOTTOM) then (SETQ TOTALRIGHT (IPLUS TOTALLEFT (SUB1 TOTALWIDTH))) (SETQ TOTALTOP (IPLUS TOTALBOTTOM (SUB1 TOTALHEIGHT))) else (LET ((REGION (GETBOXREGION TOTALWIDTH TOTALHEIGHT NIL NIL NIL "Position Inspector window"))) (SETQ TOTALTOP (fetch (REGION TOP) of REGION)) (SETQ TOTALRIGHT (fetch (REGION RIGHT) of REGION] [SETQ DWLEFT (DIFFERENCE TOTALRIGHT (SUB1 (PLUS DWWIDTH RWWIDTH] (if (ILESSP DWLEFT 0) then (SETQ DWLEFT 0) (SETQ DWWIDTH (DIFFERENCE (ADD1 TOTALRIGHT) RWWIDTH))) [SETQ DWBOTTOM (DIFFERENCE TOTALTOP (SUB1 (PLUS DWHEIGHT TITLEHEIGHT] (if (LESSP DWBOTTOM 0) then (SETQ DWBOTTOM 0) (SETQ DWHEIGHT (DIFFERENCE (ADD1 TOTALTOP) TITLEHEIGHT))) (* ;; "put up the window group") (WINDOWPROP DISPLAYWINDOW 'MINSIZE (CONS 0 0)) (SHAPEW DISPLAYWINDOW (CREATEREGION DWLEFT DWBOTTOM DWWIDTH DWHEIGHT)) (* ;  "Need to set the Minsize BEFORE reshaping else we catch the default minsize") (WINDOWPROP RIGHTWINDOW 'MINSIZE (CONS RWWIDTH 0)) (WINDOWPROP RIGHTWINDOW 'MAXSIZE (CONS RWWIDTH MAX.SMALLP)) (WINDOWPROP RIGHTWINDOW 'ROWPROPWIDTH ROWPROPWIDTH) (SHAPEW RIGHTWINDOW (CREATEREGION [ADD1 (fetch (REGION RIGHT) of (WINDOWPROP DISPLAYWINDOW 'REGION] DWBOTTOM RWWIDTH DWHEIGHT)) (ATTACHWINDOW RIGHTWINDOW DISPLAYWINDOW 'RIGHT) (WINDOWPROP TITLEWINDOW 'MINSIZE (CONS 0 TITLEHEIGHT)) (WINDOWPROP TITLEWINDOW 'MAXSIZE (CONS MAX.SMALLP TITLEHEIGHT)) (SHAPEW TITLEWINDOW (CREATEREGION DWLEFT [ADD1 (fetch (REGION TOP) (WINDOWPROP DISPLAYWINDOW 'REGION] TOTALWIDTH TITLEHEIGHT)) (ATTACHWINDOW TITLEWINDOW DISPLAYWINDOW 'TOP) (RETURN DISPLAYWINDOW]) (ONEDINSPECT.REPAINTFN +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "19-Feb-2021 14:31:33"  {DSK}kaplan>Local>medley3.5>git-medley>sources>TWODINSPECTOR.;6 113157 changes to%: (FNS TWODINSPECT.ARRANGEWINDOWS RIGHTW.REPAINTFN TWODINSPECT.SCROLLFN GET-RIGHTW ONEDINSPECT.SCROLLFN) previous date%: "11-Aug-2020 11:22:30" {DSK}kaplan>Local>medley3.5>git-medley>sources>TWODINSPECTOR.;2) (* ; " Copyright (c) 1985, 1900, 1987, 1990, 1992, 1993, 2020, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT TWODINSPECTORCOMS) (RPAQQ TWODINSPECTORCOMS ( (* ;; "Substrate for two-dimensional inspectors. Used in inspecting arrays.") (COMS (* ;; "Added by yabu.fx, for SUNLOADUP without DWIM. They compute load time constants, and must come first in the file.") (FNS \CREATE.TWODINSPECTOR.TITLEMENU \CREATE.TWODINSPECTOR.SETMENU \CREATE.TWODINSPECTOR.INSPECTMENU)) (* ;; "Oned-inspector ") (FNS ONEDINSPECTW.CREATE GET-ONED-DISPLAYW ONEDINSPECT.ARRANGEWINDOWS ONEDINSPECT.REPAINTFN ONEDINSPECT.PRINTELEMENT ONEDINSPECT.RESHAPEFN ONEDINSPECT.MAKEREGIONS ONEDINSPECT.BUTTONEVENTFN ONEDINSPECT.COPYBUTTONFN ONEDINSPECT.SCROLLFN ONEDINSPECT.CLOSEFN ONEDINSPECT.REDISPLAY ONEDINSPECT.REPLACE ONEDINSPECT.SELECTITEM ONEDINSPECT.SELECTPROP ONEDINSPECT.ADJUSTSELECTION ONEDINSPECT.PROPWIDTH ONEDINSPECT.VALUEWIDTH ONEDINSPECT.DEFAULT.TITLECOMMANDFN ONEDINSPECT.DEFAULT.VALUECOMMANDFN ONEDINSPECT.SETELT) (* ;; "Twod-inspector") (FNS TWODINSPECTW.CREATE GET-TWOD-DISPLAYW GET-CORNERW TWODINSPECT.ARRANGEWINDOWS TWODINSPECT.REPAINTFN TWODINSPECT.PRINTELEMENT TWODINSPECT.RESHAPEFN TWODINSPECT.MAKEREGIONS TWODINSPECT.BUTTONEVENTFN TWODINSPECT.COPYBUTTONFN TWODINSPECT.DOWINDOWCOMFN TWODINSPECT.SCROLLFN TWODINSPECT.CLOSEFN TWODINSPECT.REDISPLAY TWODINSPECT.REPLACE TWODINSPECT.SELECTITEM TWODINSPECT.SELECTROWPROP TWODINSPECT.SELECTCOLUMNPROP TWODINSPECT.ADJUSTSELECTION TWODINSPECT.DEFAULT.TITLECOMMANDFN TWODINSPECT.DEFAULT.VALUECOMMANDFN TWODINSPECT.SETELT TWODINSPECT.ROWPROPWIDTH TWODINSPECT.COLUMNWIDTHS TWODINSPECT.COLUMNWIDTH TWODINSPECT.TOTALWIDTH) (* ;; "Right window fns") (FNS GET-RIGHTW RIGHTW.REPAINTFN RIGHTW.RESHAPEFN RIGHTW.BUTTONEVENTFN RIGHTW.ADJUSTSELECTION ) (* ;; "Top window fns") (FNS GET-TOPW TOPW.REPAINTFN TOPW.RESHAPEFN TOPW.ADJUSTSELECTION TOPW.BUTTONEVENTFN) (* ;; "Title window fns") (FNS GET-TITLEW TITLEW.REPAINTFN TITLEW.BUTTONEVENTFN) (* ;; "Utilites ") (FNS ONED.TRACKCURSOR TWOD.TRACKCURSOR INSPECT.INVERTSELECTION INSPECT.INVERTREGION INSPECT.FLIPSELECTION) (INITVARS INSPECTORFONT) (GLOBALVARS INSPECTORFONT) (DECLARE%: DOEVAL@COMPILE DONTCOPY (RECORDS INSPECT.SELECTION ONED.SELECTION TWOD.SELECTION)) (INITRECORDS ONED.SELECTION TWOD.SELECTION) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (LOCALVARS . T)))) (* ;; "Substrate for two-dimensional inspectors. Used in inspecting arrays.") (* ;; "Added by yabu.fx, for SUNLOADUP without DWIM. They compute load time constants, and must come first in the file." ) (DEFINEQ (\CREATE.TWODINSPECTOR.TITLEMENU [LAMBDA NIL (create MENU ITEMS _ '(("Refetch" 'REFETCH "Refetch the datum") ("IT _ Datum" 'IT "Bind IT to the inspected datum"]) (\CREATE.TWODINSPECTOR.SETMENU [LAMBDA NIL (create MENU ITEMS _ '(("IT _ Selection" 'IT "Bind IT to the value of the selected entry") ("Set" 'SET "Set the selected entry"]) (\CREATE.TWODINSPECTOR.INSPECTMENU [LAMBDA NIL (create MENU ITEMS _ '(("Inspect" 'INSPECT "Inspect the value of the selected entry") ("IT _ Selection" 'IT "Bind IT to the value of the selected entry") ("Set" 'SET "Set the selected entry"]) ) (* ;; "Oned-inspector ") (DEFINEQ (ONEDINSPECTW.CREATE [LAMBDA (DATUM PROPS FETCHFN STOREFN VALUECOMMANDFN PROPCOMMANDFN TITLE TITLECOMMANDFN WHERE TOPRIGHT) (* ; "Edited 6-Apr-87 17:03 by jop") (* ;;  "If where is a window, it may be the result of a previous call, so try to reuse all windows") (PROG ((PROFILE (MAKE-INSPECTOR-PROFILE)) [FONT (OR INSPECTORFONT (DEFAULTFONT 'DISPLAY] [TITLEFONT (OR (DSPFONT NIL WindowTitleDisplayStream) '(HELVETICA 8 MRR] DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT WINDOWGROUP) (WITH-INSPECTOR-ENV PROFILE (if (LITATOM PROPS) then (SETQ PROPS (APPLY* PROPS DATUM))) (* ;  "DISPLAYWINDOW is the central and main window of the group") (SETQ DISPLAYWINDOW (GET-ONED-DISPLAYW WHERE DATUM FETCHFN STOREFN VALUECOMMANDFN PROPCOMMANDFN TITLECOMMANDFN PROPS PROFILE FONT)) (* ;  "RIGHTWINDOW records the ROWPROPS") (SETQ RIGHTWINDOW (GET-RIGHTW DISPLAYWINDOW FONT)) (* ;  "TITLEWINDOW will only hold a title") (SETQ TITLEWINDOW (GET-TITLEW DISPLAYWINDOW TITLE TITLEFONT DATUM)) (* ; "Put up the window group") [if (NOT (POSITIONP TOPRIGHT)) then (LET ((REGION (if (WINDOWP WHERE) then (WINDOWPROP WHERE 'REGION) elseif (REGIONP WHERE) then WHERE))) (if REGION then (SETQ GLEFT (fetch (REGION LEFT) of REGION)) (SETQ GBOTTOM (fetch (REGION BOTTOM) of REGION)) (SETQ GWIDTH (fetch (REGION WIDTH) of REGION)) (SETQ GHEIGHT (fetch (REGION HEIGHT) of REGION)) elseif (POSITIONP WHERE) then (SETQ GLEFT (fetch (POSITION XCOORD) of WHERE)) (SETQ GBOTTOM (fetch (POSITION YCOORD) of WHERE] (SETQ WINDOWGROUP (ONEDINSPECT.ARRANGEWINDOWS DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT TOPRIGHT)) (* ;; "Display the group") (ONEDINSPECT.RESHAPEFN DISPLAYWINDOW) (RIGHTW.RESHAPEFN RIGHTWINDOW) (TITLEW.REPAINTFN TITLEWINDOW) (* ;; "then establish reshapefns for windows in group") (WINDOWPROP DISPLAYWINDOW 'RESHAPEFN (FUNCTION ONEDINSPECT.RESHAPEFN)) (WINDOWPROP RIGHTWINDOW 'RESHAPEFN (FUNCTION RIGHTW.RESHAPEFN)) (WINDOWPROP TITLEWINDOW 'RESHAPEFN (FUNCTION TITLEW.REPAINTFN))) (* ;; "finally return the group") (RETURN WINDOWGROUP]) (GET-ONED-DISPLAYW [LAMBDA (WHERE DATUM FETCHFN STOREFN VALUECOMMANDFN PROPCOMMANDFN TITLECOMMANDFN PROPS PROFILE FONT) (* ; "Edited 6-Apr-87 14:57 by jop") (LET [(DISPLAYWINDOW (if (WINDOWP WHERE) then WHERE else (CREATEW (CREATEREGION 0 0 100 100) NIL 2 T] (WINDOWPROP DISPLAYWINDOW 'REPAINTFN (FUNCTION ONEDINSPECT.REPAINTFN)) (WINDOWPROP DISPLAYWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP DISPLAYWINDOW 'SCROLLFN (FUNCTION ONEDINSPECT.SCROLLFN)) (WINDOWPROP DISPLAYWINDOW 'BUTTONEVENTFN (FUNCTION ONEDINSPECT.BUTTONEVENTFN)) (WINDOWPROP DISPLAYWINDOW 'COPYBUTTONEVENTFN (FUNCTION ONEDINSPECT.COPYBUTTONFN)) (WINDOWPROP DISPLAYWINDOW 'CLOSEFN (FUNCTION ONEDINSPECT.CLOSEFN)) (DSPRIGHTMARGIN MAX.SMALLP DISPLAYWINDOW) (DSPFONT FONT DISPLAYWINDOW) (WINDOWPROP DISPLAYWINDOW 'DATUM DATUM) (WINDOWPROP DISPLAYWINDOW 'FETCHFN FETCHFN) (WINDOWPROP DISPLAYWINDOW 'STOREFN STOREFN) (WINDOWPROP DISPLAYWINDOW 'VALUECOMMANDFN (OR VALUECOMMANDFN (FUNCTION ONEDINSPECT.DEFAULT.VALUECOMMANDFN ))) (WINDOWPROP DISPLAYWINDOW 'ROWPROPCOMMANDFN PROPCOMMANDFN) (WINDOWPROP DISPLAYWINDOW 'TITLECOMMANDFN (OR TITLECOMMANDFN (FUNCTION ONEDINSPECT.DEFAULT.TITLECOMMANDFN ))) (WINDOWPROP DISPLAYWINDOW 'ROWPROPS PROPS) (WINDOWPROP DISPLAYWINDOW 'ROWPROPSPACE " ") (WINDOWPROP DISPLAYWINDOW 'VALUEWIDTH (ONEDINSPECT.VALUEWIDTH DATUM PROPS FETCHFN FONT)) (WINDOWPROP DISPLAYWINDOW 'VALUESPACE " ") (WINDOWPROP DISPLAYWINDOW 'PROFILE PROFILE) DISPLAYWINDOW]) (ONEDINSPECT.ARRANGEWINDOWS [LAMBDA (DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW TOTALLEFT TOTALBOTTOM TOTALWIDTH TOTALHEIGHT TOPRIGHT) (* ; "Edited 11-Aug-2020 11:21 by rmk:") (* ; "Edited 6-Apr-87 15:08 by jop") (* ;; "RMK: Save the ROWPROPWIDTH for future right-adjusting of the right (props) window") (* ;; "REGION should be the total available area") (PROG ((ROWPROPS (WINDOWPROP DISPLAYWINDOW 'ROWPROPS)) (ROWPROPSPACE (WINDOWPROP DISPLAYWINDOW 'ROWPROPSPACE)) (VALUEWIDTH (WINDOWPROP DISPLAYWINDOW 'VALUEWIDTH)) (VALUESPACE (WINDOWPROP DISPLAYWINDOW 'VALUESPACE)) TOTALRIGHT TOTALTOP DWHEIGHT DWWIDTH TITLEHEIGHT RWWIDTH DWLEFT DWBOTTOM ROWPROPWIDTH) [SETQ TITLEHEIGHT (HEIGHTIFWINDOW (FONTPROP TITLEWINDOW 'HEIGHT) NIL (WINDOWPROP TITLEWINDOW 'BORDER] (SETQ ROWPROPWIDTH (ONEDINSPECT.PROPWIDTH (WINDOWPROP DISPLAYWINDOW 'ROWPROPS) DISPLAYWINDOW)) [SETQ RWWIDTH (WIDTHIFWINDOW (IPLUS (STRINGWIDTH ROWPROPSPACE RIGHTWINDOW) ROWPROPWIDTH) (WINDOWPROP RIGHTWINDOW 'BORDER] (if (NULL TOTALHEIGHT) then [SETQ DWHEIGHT (IMIN 500 (HEIGHTIFWINDOW (ITIMES (FONTPROP DISPLAYWINDOW 'HEIGHT) (LENGTH ROWPROPS)) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER] (SETQ TOTALHEIGHT (IPLUS TITLEHEIGHT DWHEIGHT)) else (SETQ DWHEIGHT (IDIFFERENCE TOTALHEIGHT TITLEHEIGHT))) (if (NULL TOTALWIDTH) then [SETQ DWWIDTH (IMIN 200 (WIDTHIFWINDOW (IPLUS VALUEWIDTH (STRINGWIDTH VALUESPACE DISPLAYWINDOW) ) (WINDOWPROP DISPLAYWINDOW 'BORDER] (SETQ TOTALWIDTH (IPLUS RWWIDTH DWWIDTH)) else (SETQ DWWIDTH (IDIFFERENCE TOTALWIDTH RWWIDTH))) [if (POSITIONP TOPRIGHT) then (SETQ TOTALRIGHT (fetch (POSITION XCOORD) of TOPRIGHT)) (SETQ TOTALTOP (fetch (POSITION YCOORD) of TOPRIGHT)) elseif (AND TOTALLEFT TOTALBOTTOM) then (SETQ TOTALRIGHT (IPLUS TOTALLEFT (SUB1 TOTALWIDTH))) (SETQ TOTALTOP (IPLUS TOTALBOTTOM (SUB1 TOTALHEIGHT))) else (LET ((REGION (GETBOXREGION TOTALWIDTH TOTALHEIGHT NIL NIL NIL "Position Inspector window"))) (SETQ TOTALTOP (fetch (REGION TOP) of REGION)) (SETQ TOTALRIGHT (fetch (REGION RIGHT) of REGION] [SETQ DWLEFT (DIFFERENCE TOTALRIGHT (SUB1 (PLUS DWWIDTH RWWIDTH] (if (ILESSP DWLEFT 0) then (SETQ DWLEFT 0) (SETQ DWWIDTH (DIFFERENCE (ADD1 TOTALRIGHT) RWWIDTH))) [SETQ DWBOTTOM (DIFFERENCE TOTALTOP (SUB1 (PLUS DWHEIGHT TITLEHEIGHT] (if (LESSP DWBOTTOM 0) then (SETQ DWBOTTOM 0) (SETQ DWHEIGHT (DIFFERENCE (ADD1 TOTALTOP) TITLEHEIGHT))) (* ;; "put up the window group") (WINDOWPROP DISPLAYWINDOW 'MINSIZE (CONS 0 0)) (SHAPEW DISPLAYWINDOW (CREATEREGION DWLEFT DWBOTTOM DWWIDTH DWHEIGHT)) (* ;  "Need to set the Minsize BEFORE reshaping else we catch the default minsize") (WINDOWPROP RIGHTWINDOW 'MINSIZE (CONS RWWIDTH 0)) (WINDOWPROP RIGHTWINDOW 'MAXSIZE (CONS RWWIDTH MAX.SMALLP)) (WINDOWPROP RIGHTWINDOW 'ROWPROPWIDTH ROWPROPWIDTH) (SHAPEW RIGHTWINDOW (CREATEREGION [ADD1 (fetch (REGION RIGHT) of (WINDOWPROP DISPLAYWINDOW 'REGION] DWBOTTOM RWWIDTH DWHEIGHT)) (ATTACHWINDOW RIGHTWINDOW DISPLAYWINDOW 'RIGHT) (WINDOWPROP TITLEWINDOW 'MINSIZE (CONS 0 TITLEHEIGHT)) (WINDOWPROP TITLEWINDOW 'MAXSIZE (CONS MAX.SMALLP TITLEHEIGHT)) (SHAPEW TITLEWINDOW (CREATEREGION DWLEFT [ADD1 (fetch (REGION TOP) (WINDOWPROP DISPLAYWINDOW 'REGION] TOTALWIDTH TITLEHEIGHT)) (ATTACHWINDOW TITLEWINDOW DISPLAYWINDOW 'TOP) (RETURN DISPLAYWINDOW]) (ONEDINSPECT.REPAINTFN [LAMBDA (WINDOW WINDOWREGION) (* ; "Edited 19-Apr-90 10:41 by mitani") (if (NULL WINDOWREGION) then (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW))) @@ -23,7 +23,7 @@ do (ONEDINSPECT.PRINTELEMENT (APPLY* FETCHFN DATUM (CAR PROP)) VMARK DESCENT WINDOW] - (INSPECT.INVERTSELECTION WINDOW]) (ONEDINSPECT.PRINTELEMENT [LAMBDA (ELT BOTTOM SUB1DESCENT WINDOW) (* ; "Edited 19-Apr-90 10:42 by mitani") (MOVETO 0 (IPLUS BOTTOM SUB1DESCENT) WINDOW) (PRIN2 ELT WINDOW]) (ONEDINSPECT.RESHAPEFN [LAMBDA (WINDOW) (* jop%: " 6-Oct-85 18:34") (CLEARW WINDOW) (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (ONEDINSPECT.MAKEREGIONS WINDOW) (ONEDINSPECT.ADJUSTSELECTION WINDOW) (ONEDINSPECT.REPAINTFN WINDOW]) (ONEDINSPECT.MAKEREGIONS [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:01 by jop") (* ;; "Sets up windowprops and activeregions") (PROG ((ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VALUEWIDTH (WINDOWPROP WINDOW 'VALUEWIDTH)) (VALUESPACE (WINDOWPROP WINDOW 'VALUESPACE)) (WINDOWHEIGHT (WINDOWPROP WINDOW 'HEIGHT)) (LF (DSPLINEFEED NIL WINDOW)) VERTMARKS) (if (NULL VALUEWIDTH) then (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (SETQ VALUEWIDTH (ONEDINSPECT.VALUEWIDTH (WINDOWPROP WINDOW 'DATUM) ROWPROPS (WINDOWPROP WINDOW 'FETCHFN) WINDOW)) (WINDOWPROP WINDOW 'VALUEWIDTH VALUEWIDTH))) (* ; "VERTMARKS mark endpoints") (SETQ VERTMARKS (for I from 1 to (LENGTH ROWPROPS) as MARK from (IPLUS WINDOWHEIGHT LF) by LF collect MARK)) (WINDOWPROP WINDOW 'VERTMARKS VERTMARKS) [WINDOWPROP WINDOW 'EXTENT (CREATEREGION 0 (CAR (LAST VERTMARKS)) (IPLUS VALUEWIDTH (STRINGWIDTH VALUESPACE WINDOW)) (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS] (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'EXTENT (CREATEREGION 0 (CAR (LAST VERTMARKS)) (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'WIDTH) (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS]) (ONEDINSPECT.BUTTONEVENTFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:03 by jop") (TOTOPW WINDOW) (LET [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (if (MOUSESTATE LEFT) then (WINDOWPROP WINDOW 'SELECTION (ONED.TRACKCURSOR WINDOW SELECTION (WINDOWPROP WINDOW 'ROWPROPS) (WINDOWPROP WINDOW 'VERTMARKS) 0 NIL (FONTPROP WINDOW 'HEIGHT) [FUNCTION (LAMBDA (P W) (CL:FUNCALL (WINDOWPROP W 'FETCHFN) (WINDOWPROP W 'DATUM) P] (FUNCTION INSPECT.INVERTREGION))) else (* ; "MOUSESTATE MIDDLE") (if SELECTION then (LET [(SELECTEDPROP (CAR (fetch (ONED.SELECTION PROP) of SELECTION))) (DATUM (WINDOWPROP WINDOW 'DATUM] (CL:FUNCALL (WINDOWPROP WINDOW 'VALUECOMMANDFN) (CL:FUNCALL (WINDOWPROP WINDOW 'FETCHFN) DATUM SELECTEDPROP) SELECTEDPROP DATUM WINDOW]) (ONEDINSPECT.COPYBUTTONFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:09 by jop") (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (TOTOPW WINDOW) (bind SELECTION while (.COPYKEYDOWNP.) do (BLOCK) (SETQ SELECTION (ONED.TRACKCURSOR WINDOW SELECTION (WINDOWPROP WINDOW 'ROWPROPS) (WINDOWPROP WINDOW 'VERTMARKS) 0 NIL 2 [FUNCTION (LAMBDA (P W) (CL:FUNCALL (WINDOWPROP W 'FETCHFN) (WINDOWPROP W 'DATUM) P] (FUNCTION INSPECT.FLIPSELECTION))) finally (if SELECTION then (INSPECT.FLIPSELECTION (fetch (ONED.SELECTION ELTLEFT) of SELECTION) (fetch (ONED.SELECTION ELTBOTTOM) of SELECTION) (fetch (ONED.SELECTION ELTWIDTH) of SELECTION) 2 WINDOW) (BKSYSBUF.GENERAL (CL:FUNCALL (WINDOWPROP WINDOW 'FETCHFN) (WINDOWPROP WINDOW 'DATUM) (CAR (fetch (ONED.SELECTION PROP) of SELECTION]) (ONEDINSPECT.SCROLLFN [LAMBDA (WINDOW DX DY FLG) (* jop%: " 1-Oct-85 22:41") (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW 'RIGHTWINDOW] (if (OR (NOT (EQP 0 DY)) (FLOATP DY)) then (APPLY* (WINDOWPROP RIGHTWINDOW 'SCROLLFN) RIGHTWINDOW 0 DY FLG)) (SCROLLBYREPAINTFN WINDOW DX DY FLG]) (ONEDINSPECT.CLOSEFN [LAMBDA (WINDOW) (* jop%: " 4-Oct-85 17:52") (DETACHALLWINDOWS WINDOW) (WINDOWPROP WINDOW 'SELECTION NIL) (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'SELECTION NIL]) (ONEDINSPECT.REDISPLAY [LAMBDA (WINDOW ELTPROPS) (* ; "Edited 8-Apr-87 17:00 by jop") (* ;; "ELTPROPS may be a single entries, a list, or NIL. If NIL than the whole inspector is refetched and redisplayed") (if (AND ELTPROPS (NLISTP ELTPROPS)) then (SETQ ELTPROPS (LIST ELTPROPS))) (PROG ((FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (DATUM (WINDOWPROP WINDOW 'DATUM)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VALUEWIDTH (WINDOWPROP WINDOW 'VALUEWIDTH)) (SELECTION (WINDOWPROP WINDOW 'SELECTION)) ELTS ELTBOTTOMS) (SETQ ELTS (for PROP in ELTPROPS collect (APPLY* FETCHFN DATUM PROP))) [SETQ ELTBOTTOMS (for ELTPROP in ELTPROPS collect (for VMARK in VERTMARKS as PROP in ROWPROPS thereis (EQUAL PROP ELTPROP] (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (if (AND ELTS (for ELTWIDTH in (for ELT in ELTS collect (STRINGWIDTH ELT WINDOW T) ) never (IGREATERP ELTWIDTH VALUEWIDTH))) then (INSPECT.INVERTSELECTION WINDOW) (bind (FHEIGHT _ (FONTPROP WINDOW 'HEIGHT)) (FDESCENT _ (FONTPROP WINDOW 'DESCENT)) for ELT in ELTS as BOTTOM in ELTBOTTOMS do (BITBLT NIL NIL NIL WINDOW 0 BOTTOM VALUEWIDTH FHEIGHT 'TEXTURE 'REPLACE WHITESHADE) (ONEDINSPECT.PRINTELEMENT ELT BOTTOM FDESCENT WINDOW)) (ONEDINSPECT.ADJUSTSELECTION WINDOW) (INSPECT.INVERTSELECTION WINDOW) else (* ; "Recompute the whole picture") (WINDOWPROP WINDOW 'VALUEWIDTH NIL) (ONEDINSPECT.MAKEREGIONS WINDOW) (ONEDINSPECT.ADJUSTSELECTION WINDOW) (DSPRESET WINDOW) (ONEDINSPECT.REPAINTFN WINDOW) (DSPRESET (WINDOWPROP WINDOW 'RIGHTWINDOW)) (RIGHTW.REPAINTFN (WINDOWPROP WINDOW 'RIGHTWINDOW]) (ONEDINSPECT.REPLACE [LAMBDA (WINDOW PROP NEWVALUE) (* jop%: " 2-Oct-85 00:06") (PROG [(DATUM (WINDOWPROP WINDOW 'DATUM)) (STOREFN (WINDOWPROP WINDOW 'STOREFN] (APPLY* STOREFN NEWVALUE DATUM PROP) (ONEDINSPECT.REDISPLAY WINDOW PROP]) (ONEDINSPECT.SELECTITEM [LAMBDA (WINDOW PROP) (* ; "Edited 6-Apr-87 11:36 by jop") (if (WINDOWPROP WINDOW 'SELECTION) then (INSPECT.INVERTSELECTION WINDOW)) (if PROP then (PROG ((DATUM (WINDOWPROP WINDOW 'DATUM)) (FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) SELECTEDPROP SELECTEDELTBOTTOM SELECTEDELTWIDTH) (SETQ SELECTEDPROP (for PRP on ROWPROPS thereis (EQUAL (CAR PRP) PROP))) (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as PRP on ROWPROPS thereis (EQ PRP SELECTEDPROP))) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (APPLY* FETCHFN DATUM PROP) WINDOW T))) (INSPECT.INVERTREGION 0 SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) WINDOW) (WINDOWPROP WINDOW 'SELECTION (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ 0 ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDPROP]) (ONEDINSPECT.SELECTPROP [LAMBDA (WINDOW PROP) (* ; "Edited 6-Apr-87 11:37 by jop") (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW 'RIGHTWINDOW] (if (WINDOWPROP RIGHTWINDOW 'SELECTION) then (INSPECT.INVERTSELECTION RIGHTWINDOW)) (PROG ((ROWPROPSPACE (WINDOWPROP WINDOW 'ROWPROPSPACE)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) SELECTEDPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (SETQ SELECTEDPROP (for PRP on ROWPROPS thereis (EQUAL (CAR PRP) PROP))) (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as PRP on ROWPROPS thereis (EQ PRP SELECTEDPROP))) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (CAR SELECTEDPROP) WINDOW T))) (SETQ SELECTEDELTLEFT (STRINGWIDTH ROWPROPSPACE WINDOW)) (INSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) RIGHTWINDOW) (WINDOWPROP RIGHTWINDOW 'SELECTION (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDPROP]) (ONEDINSPECT.ADJUSTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:34 by jop") (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (if SELECTION then (PROG ((DATUM (WINDOWPROP WINDOW 'DATUM)) (FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (SELPROP (fetch (ONED.SELECTION PROP) of SELECTION))) (WINDOWPROP WINDOW 'SELECTION (create ONED.SELECTION ELTBOTTOM _ (for VMARK in VERTMARKS as PROP on ROWPROPS thereis (EQ PROP SELPROP)) ELTWIDTH _ (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (APPLY* FETCHFN DATUM (CAR SELPROP)) WINDOW T)) ELTLEFT _ 0 PROP _ SELPROP]) (ONEDINSPECT.PROPWIDTH [LAMBDA (PROPS FONT) (* ; "Edited 11-Aug-2020 11:04 by rmk:") (* ; "Edited 5-Apr-87 16:18 by jop") (* ;; "Computes the MIN fieldwidth for the COLUMNPROP column of SLICE") (* ;; "RMK: Added more SPACE: wasn't wide enough for large indexes") (for PROP in PROPS largest (STRINGWIDTH PROP FONT T) finally (RETURN (IPLUS (CHARWIDTH (CHARCODE SPACE) T) $$EXTREME]) (ONEDINSPECT.VALUEWIDTH [LAMBDA (DATUM PROPS FETCHFN FONT) (* ; "Edited 5-Apr-87 16:20 by jop") (* ;; "Computes the MIN fieldwidth for the COLUMNPROP column of SLICE") (for PROP in PROPS largest (STRINGWIDTH (APPLY* FETCHFN DATUM PROP) FONT T) finally (RETURN $$EXTREME]) (ONEDINSPECT.DEFAULT.TITLECOMMANDFN [LAMBDA (WINDOW) (* ; "Edited 20-Jul-90 20:47 by yabu") (if (MOUSESTATE MIDDLE) then (PROG [(TITLEMENU (CONSTANT (\CREATE.TWODINSPECTOR.TITLEMENU))) (* ; "Original was (create MENU ITEMS _ '((%"Refetch%" 'REFETCH %"Refetch the datum%") (%"IT _ Datum%" 'IT %"Bind IT to the inspected datum%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") (DATUM (WINDOWPROP WINDOW 'DATUM] (SELECTQ (MENU TITLEMENU) (REFETCH (ONEDINSPECT.REDISPLAY WINDOW)) (IT (SETQ IT DATUM) (PROMPTPRINT "IT bound to " DATUM)) NIL]) (ONEDINSPECT.DEFAULT.VALUECOMMANDFN [LAMBDA (VALUE PROP DATUM WINDOW) (* ; "Edited 20-Jul-90 20:51 by yabu") (PROG ((SETMENU (CONSTANT (\CREATE.TWODINSPECTOR.SETMENU))) (* ; "Original was (create MENU ITEMS _ '((%"IT _ Selection%" 'IT %"Bind IT to the value of the selected entry%") (%"Set%" 'SET %"Set the selected entry%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") (INSPECTMENU (CONSTANT (\CREATE.TWODINSPECTOR.INSPECTMENU))) (* ; "Original was (create MENU ITEMS _ '((%"Inspect%" 'INSPECT %"Inspect the value of the selected entry%") (%"IT _ Selection%" 'IT %"Bind IT to the value of the selected entry%") (%"Set%" 'SET %"Set the selected entry%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") ) (SELECTQ (if (OR (NULL VALUE) (NUMBERP VALUE)) then (MENU SETMENU) else (MENU INSPECTMENU)) (INSPECT (INSPECT VALUE)) (IT (SETQ IT VALUE) (PROMPTPRINT "IT bound to " IT)) (SET (ONEDINSPECT.SETELT PROP WINDOW)) NIL]) (ONEDINSPECT.SETELT + (INSPECT.INVERTSELECTION WINDOW]) (ONEDINSPECT.PRINTELEMENT [LAMBDA (ELT BOTTOM SUB1DESCENT WINDOW) (* ; "Edited 19-Apr-90 10:42 by mitani") (MOVETO 0 (IPLUS BOTTOM SUB1DESCENT) WINDOW) (PRIN2 ELT WINDOW]) (ONEDINSPECT.RESHAPEFN [LAMBDA (WINDOW) (* jop%: " 6-Oct-85 18:34") (CLEARW WINDOW) (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (ONEDINSPECT.MAKEREGIONS WINDOW) (ONEDINSPECT.ADJUSTSELECTION WINDOW) (ONEDINSPECT.REPAINTFN WINDOW]) (ONEDINSPECT.MAKEREGIONS [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:01 by jop") (* ;; "Sets up windowprops and activeregions") (PROG ((ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VALUEWIDTH (WINDOWPROP WINDOW 'VALUEWIDTH)) (VALUESPACE (WINDOWPROP WINDOW 'VALUESPACE)) (WINDOWHEIGHT (WINDOWPROP WINDOW 'HEIGHT)) (LF (DSPLINEFEED NIL WINDOW)) VERTMARKS) (if (NULL VALUEWIDTH) then (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (SETQ VALUEWIDTH (ONEDINSPECT.VALUEWIDTH (WINDOWPROP WINDOW 'DATUM) ROWPROPS (WINDOWPROP WINDOW 'FETCHFN) WINDOW)) (WINDOWPROP WINDOW 'VALUEWIDTH VALUEWIDTH))) (* ; "VERTMARKS mark endpoints") (SETQ VERTMARKS (for I from 1 to (LENGTH ROWPROPS) as MARK from (IPLUS WINDOWHEIGHT LF) by LF collect MARK)) (WINDOWPROP WINDOW 'VERTMARKS VERTMARKS) [WINDOWPROP WINDOW 'EXTENT (CREATEREGION 0 (CAR (LAST VERTMARKS)) (IPLUS VALUEWIDTH (STRINGWIDTH VALUESPACE WINDOW)) (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS] (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'EXTENT (CREATEREGION 0 (CAR (LAST VERTMARKS)) (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'WIDTH) (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS]) (ONEDINSPECT.BUTTONEVENTFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:03 by jop") (TOTOPW WINDOW) (LET [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (if (MOUSESTATE LEFT) then (WINDOWPROP WINDOW 'SELECTION (ONED.TRACKCURSOR WINDOW SELECTION (WINDOWPROP WINDOW 'ROWPROPS) (WINDOWPROP WINDOW 'VERTMARKS) 0 NIL (FONTPROP WINDOW 'HEIGHT) [FUNCTION (LAMBDA (P W) (CL:FUNCALL (WINDOWPROP W 'FETCHFN) (WINDOWPROP W 'DATUM) P] (FUNCTION INSPECT.INVERTREGION))) else (* ; "MOUSESTATE MIDDLE") (if SELECTION then (LET [(SELECTEDPROP (CAR (fetch (ONED.SELECTION PROP) of SELECTION))) (DATUM (WINDOWPROP WINDOW 'DATUM] (CL:FUNCALL (WINDOWPROP WINDOW 'VALUECOMMANDFN) (CL:FUNCALL (WINDOWPROP WINDOW 'FETCHFN) DATUM SELECTEDPROP) SELECTEDPROP DATUM WINDOW]) (ONEDINSPECT.COPYBUTTONFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:09 by jop") (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (TOTOPW WINDOW) (bind SELECTION while (.COPYKEYDOWNP.) do (BLOCK) (SETQ SELECTION (ONED.TRACKCURSOR WINDOW SELECTION (WINDOWPROP WINDOW 'ROWPROPS) (WINDOWPROP WINDOW 'VERTMARKS) 0 NIL 2 [FUNCTION (LAMBDA (P W) (CL:FUNCALL (WINDOWPROP W 'FETCHFN) (WINDOWPROP W 'DATUM) P] (FUNCTION INSPECT.FLIPSELECTION))) finally (if SELECTION then (INSPECT.FLIPSELECTION (fetch (ONED.SELECTION ELTLEFT) of SELECTION) (fetch (ONED.SELECTION ELTBOTTOM) of SELECTION) (fetch (ONED.SELECTION ELTWIDTH) of SELECTION) 2 WINDOW) (BKSYSBUF.GENERAL (CL:FUNCALL (WINDOWPROP WINDOW 'FETCHFN) (WINDOWPROP WINDOW 'DATUM) (CAR (fetch (ONED.SELECTION PROP) of SELECTION]) (ONEDINSPECT.SCROLLFN [LAMBDA (WINDOW DX DY FLG) (* ; "Edited 19-Feb-2021 12:09 by rmk:") (* jop%: " 1-Oct-85 22:41") (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW 'RIGHTWINDOW] (if (OR (NOT (EQP 0 DY)) (FLOATP DY)) then (APPLY* (OR (WINDOWPROP RIGHTWINDOW 'SCROLLFN) (FUNCTION SCROLLBYREPAINTFN)) RIGHTWINDOW 0 DY FLG)) (SCROLLBYREPAINTFN WINDOW DX DY FLG]) (ONEDINSPECT.CLOSEFN [LAMBDA (WINDOW) (* jop%: " 4-Oct-85 17:52") (DETACHALLWINDOWS WINDOW) (WINDOWPROP WINDOW 'SELECTION NIL) (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'SELECTION NIL]) (ONEDINSPECT.REDISPLAY [LAMBDA (WINDOW ELTPROPS) (* ; "Edited 8-Apr-87 17:00 by jop") (* ;; "ELTPROPS may be a single entries, a list, or NIL. If NIL than the whole inspector is refetched and redisplayed") (if (AND ELTPROPS (NLISTP ELTPROPS)) then (SETQ ELTPROPS (LIST ELTPROPS))) (PROG ((FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (DATUM (WINDOWPROP WINDOW 'DATUM)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VALUEWIDTH (WINDOWPROP WINDOW 'VALUEWIDTH)) (SELECTION (WINDOWPROP WINDOW 'SELECTION)) ELTS ELTBOTTOMS) (SETQ ELTS (for PROP in ELTPROPS collect (APPLY* FETCHFN DATUM PROP))) [SETQ ELTBOTTOMS (for ELTPROP in ELTPROPS collect (for VMARK in VERTMARKS as PROP in ROWPROPS thereis (EQUAL PROP ELTPROP] (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (if (AND ELTS (for ELTWIDTH in (for ELT in ELTS collect (STRINGWIDTH ELT WINDOW T) ) never (IGREATERP ELTWIDTH VALUEWIDTH))) then (INSPECT.INVERTSELECTION WINDOW) (bind (FHEIGHT _ (FONTPROP WINDOW 'HEIGHT)) (FDESCENT _ (FONTPROP WINDOW 'DESCENT)) for ELT in ELTS as BOTTOM in ELTBOTTOMS do (BITBLT NIL NIL NIL WINDOW 0 BOTTOM VALUEWIDTH FHEIGHT 'TEXTURE 'REPLACE WHITESHADE) (ONEDINSPECT.PRINTELEMENT ELT BOTTOM FDESCENT WINDOW)) (ONEDINSPECT.ADJUSTSELECTION WINDOW) (INSPECT.INVERTSELECTION WINDOW) else (* ; "Recompute the whole picture") (WINDOWPROP WINDOW 'VALUEWIDTH NIL) (ONEDINSPECT.MAKEREGIONS WINDOW) (ONEDINSPECT.ADJUSTSELECTION WINDOW) (DSPRESET WINDOW) (ONEDINSPECT.REPAINTFN WINDOW) (DSPRESET (WINDOWPROP WINDOW 'RIGHTWINDOW)) (RIGHTW.REPAINTFN (WINDOWPROP WINDOW 'RIGHTWINDOW]) (ONEDINSPECT.REPLACE [LAMBDA (WINDOW PROP NEWVALUE) (* jop%: " 2-Oct-85 00:06") (PROG [(DATUM (WINDOWPROP WINDOW 'DATUM)) (STOREFN (WINDOWPROP WINDOW 'STOREFN] (APPLY* STOREFN NEWVALUE DATUM PROP) (ONEDINSPECT.REDISPLAY WINDOW PROP]) (ONEDINSPECT.SELECTITEM [LAMBDA (WINDOW PROP) (* ; "Edited 6-Apr-87 11:36 by jop") (if (WINDOWPROP WINDOW 'SELECTION) then (INSPECT.INVERTSELECTION WINDOW)) (if PROP then (PROG ((DATUM (WINDOWPROP WINDOW 'DATUM)) (FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) SELECTEDPROP SELECTEDELTBOTTOM SELECTEDELTWIDTH) (SETQ SELECTEDPROP (for PRP on ROWPROPS thereis (EQUAL (CAR PRP) PROP))) (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as PRP on ROWPROPS thereis (EQ PRP SELECTEDPROP))) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (APPLY* FETCHFN DATUM PROP) WINDOW T))) (INSPECT.INVERTREGION 0 SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) WINDOW) (WINDOWPROP WINDOW 'SELECTION (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ 0 ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDPROP]) (ONEDINSPECT.SELECTPROP [LAMBDA (WINDOW PROP) (* ; "Edited 6-Apr-87 11:37 by jop") (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW 'RIGHTWINDOW] (if (WINDOWPROP RIGHTWINDOW 'SELECTION) then (INSPECT.INVERTSELECTION RIGHTWINDOW)) (PROG ((ROWPROPSPACE (WINDOWPROP WINDOW 'ROWPROPSPACE)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) SELECTEDPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (SETQ SELECTEDPROP (for PRP on ROWPROPS thereis (EQUAL (CAR PRP) PROP))) (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as PRP on ROWPROPS thereis (EQ PRP SELECTEDPROP))) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (CAR SELECTEDPROP) WINDOW T))) (SETQ SELECTEDELTLEFT (STRINGWIDTH ROWPROPSPACE WINDOW)) (INSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) RIGHTWINDOW) (WINDOWPROP RIGHTWINDOW 'SELECTION (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDPROP]) (ONEDINSPECT.ADJUSTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:34 by jop") (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (if SELECTION then (PROG ((DATUM (WINDOWPROP WINDOW 'DATUM)) (FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (SELPROP (fetch (ONED.SELECTION PROP) of SELECTION))) (WINDOWPROP WINDOW 'SELECTION (create ONED.SELECTION ELTBOTTOM _ (for VMARK in VERTMARKS as PROP on ROWPROPS thereis (EQ PROP SELPROP)) ELTWIDTH _ (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (APPLY* FETCHFN DATUM (CAR SELPROP)) WINDOW T)) ELTLEFT _ 0 PROP _ SELPROP]) (ONEDINSPECT.PROPWIDTH [LAMBDA (PROPS FONT) (* ; "Edited 11-Aug-2020 11:04 by rmk:") (* ; "Edited 5-Apr-87 16:18 by jop") (* ;; "Computes the MIN fieldwidth for the COLUMNPROP column of SLICE") (* ;; "RMK: Added more SPACE: wasn't wide enough for large indexes") (for PROP in PROPS largest (STRINGWIDTH PROP FONT T) finally (RETURN (IPLUS (CHARWIDTH (CHARCODE SPACE) T) $$EXTREME]) (ONEDINSPECT.VALUEWIDTH [LAMBDA (DATUM PROPS FETCHFN FONT) (* ; "Edited 5-Apr-87 16:20 by jop") (* ;; "Computes the MIN fieldwidth for the COLUMNPROP column of SLICE") (for PROP in PROPS largest (STRINGWIDTH (APPLY* FETCHFN DATUM PROP) FONT T) finally (RETURN $$EXTREME]) (ONEDINSPECT.DEFAULT.TITLECOMMANDFN [LAMBDA (WINDOW) (* ; "Edited 20-Jul-90 20:47 by yabu") (if (MOUSESTATE MIDDLE) then (PROG [(TITLEMENU (CONSTANT (\CREATE.TWODINSPECTOR.TITLEMENU))) (* ; "Original was (create MENU ITEMS _ '((%"Refetch%" 'REFETCH %"Refetch the datum%") (%"IT _ Datum%" 'IT %"Bind IT to the inspected datum%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") (DATUM (WINDOWPROP WINDOW 'DATUM] (SELECTQ (MENU TITLEMENU) (REFETCH (ONEDINSPECT.REDISPLAY WINDOW)) (IT (SETQ IT DATUM) (PROMPTPRINT "IT bound to " DATUM)) NIL]) (ONEDINSPECT.DEFAULT.VALUECOMMANDFN [LAMBDA (VALUE PROP DATUM WINDOW) (* ; "Edited 20-Jul-90 20:51 by yabu") (PROG ((SETMENU (CONSTANT (\CREATE.TWODINSPECTOR.SETMENU))) (* ; "Original was (create MENU ITEMS _ '((%"IT _ Selection%" 'IT %"Bind IT to the value of the selected entry%") (%"Set%" 'SET %"Set the selected entry%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") (INSPECTMENU (CONSTANT (\CREATE.TWODINSPECTOR.INSPECTMENU))) (* ; "Original was (create MENU ITEMS _ '((%"Inspect%" 'INSPECT %"Inspect the value of the selected entry%") (%"IT _ Selection%" 'IT %"Bind IT to the value of the selected entry%") (%"Set%" 'SET %"Set the selected entry%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") ) (SELECTQ (if (OR (NULL VALUE) (NUMBERP VALUE)) then (MENU SETMENU) else (MENU INSPECTMENU)) (INSPECT (INSPECT VALUE)) (IT (SETQ IT VALUE) (PROMPTPRINT "IT bound to " IT)) (SET (ONEDINSPECT.SETELT PROP WINDOW)) NIL]) (ONEDINSPECT.SETELT [LAMBDA (PROP WINDOW) (* ; "Edited 5-Apr-87 16:29 by jop") (PROG ((PRTWINDOW (GETPROMPTWINDOW WINDOW (if (ILESSP (fetch (REGION WIDTH) of (WINDOWREGION WINDOW)) @@ -46,97 +46,7 @@  "clear tty buffer because it sometimes has stuff left.") (CLEARBUF T T))) (REMOVEPROMPTWINDOW WINDOW) - (ONEDINSPECT.REPLACE WINDOW PROP NEWVALUE]) ) (* ;; "Twod-inspector") (DEFINEQ (TWODINSPECTW.CREATE [LAMBDA (DATUM ROWPROPS COLUMNPROPS FETCHFN STOREFN VALUECOMMANDFN ROWPROPCOMMANDFN COLUMNPROPCOMMANDFN TITLE TITLECOMMANDFN WHERE TOPRIGHT) (* ; "Edited 6-Apr-87 17:03 by jop") (* ;;  "If where is a window, it may be the result of a previous call, so try to reuse all windows") (PROG ((PROFILE (MAKE-INSPECTOR-PROFILE)) [FONT (OR INSPECTORFONT (DEFAULTFONT 'DISPLAY] [TITLEFONT (OR (DSPFONT NIL WindowTitleDisplayStream) '(HELVETICA 8 MRR] DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT WINDOWGROUP) (if (LITATOM ROWPROPS) then (SETQ ROWPROPS (APPLY* ROWPROPS DATUM))) (if (LITATOM COLUMNPROPS) then (SETQ COLUMNPROPS (APPLY* COLUMNPROPS DATUM))) (WITH-INSPECTOR-ENV PROFILE (* ;  "DISPLAYWINDOW is the central and main window of the group") (SETQ DISPLAYWINDOW (GET-TWOD-DISPLAYW WHERE DATUM FETCHFN STOREFN VALUECOMMANDFN ROWPROPCOMMANDFN COLUMNPROPCOMMANDFN TITLECOMMANDFN ROWPROPS COLUMNPROPS PROFILE FONT)) (* ;  "TOPWINDOW simply records the COLUMNPROPS") (SETQ TOPWINDOW (GET-TOPW DISPLAYWINDOW FONT)) (* ;  "RIGHTWINDOW records the ROWPROPS") (SETQ RIGHTWINDOW (GET-RIGHTW DISPLAYWINDOW FONT)) (* ;  "CORNERWINDOW is just a place holder") (SETQ CORNERWINDOW (GET-CORNERW DISPLAYWINDOW FONT)) (* ;  "TITLEWINDOW will only hold a title") (SETQ TITLEWINDOW (GET-TITLEW DISPLAYWINDOW TITLE TITLEFONT DATUM)) (* ; "Put up the window group") [if (NOT (POSITIONP TOPRIGHT)) then (LET ((REGION (if (WINDOWP WHERE) then (WINDOWPROP WHERE 'REGION) elseif (REGIONP WHERE) then WHERE))) (if REGION then (SETQ GLEFT (fetch (REGION LEFT) of REGION)) (SETQ GBOTTOM (fetch (REGION BOTTOM) of REGION)) (SETQ GWIDTH (fetch (REGION WIDTH) of REGION)) (SETQ GHEIGHT (fetch (REGION HEIGHT) of REGION)) elseif (POSITIONP WHERE) then (SETQ GLEFT (fetch (POSITION XCOORD) of WHERE)) (SETQ GBOTTOM (fetch (POSITION YCOORD) of WHERE] (SETQ WINDOWGROUP (TWODINSPECT.ARRANGEWINDOWS DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT TOPRIGHT)) (* ;; " Display the group") (TWODINSPECT.RESHAPEFN DISPLAYWINDOW) (TOPW.RESHAPEFN TOPWINDOW) (RIGHTW.RESHAPEFN RIGHTWINDOW) (TITLEW.REPAINTFN TITLEWINDOW) (* ;; "then establish reshapefns on the windows of the window group") (WINDOWPROP DISPLAYWINDOW 'RESHAPEFN (FUNCTION TWODINSPECT.RESHAPEFN)) (WINDOWPROP TOPWINDOW 'RESHAPEFN (FUNCTION TOPW.RESHAPEFN)) (WINDOWPROP RIGHTWINDOW 'RESHAPEFN (FUNCTION RIGHTW.RESHAPEFN)) (WINDOWPROP TITLEWINDOW 'RESHAPEFN (FUNCTION TITLEW.REPAINTFN))) (* ;; "finally return the group") (RETURN WINDOWGROUP]) (GET-TWOD-DISPLAYW [LAMBDA (WHERE DATUM FETCHFN STOREFN VALUECOMMANDFN ROWPROPCOMMANDFN COLUMNPROPCOMMANDFN TITLECOMMANDFN ROWPROPS COLUMNPROPS PROFILE FONT) (* ; "Edited 6-Apr-87 14:51 by jop") (LET [(DISPLAYWINDOW (if (WINDOWP WHERE) then WHERE else (CREATEW (CREATEREGION 0 0 100 100) NIL 2 T] (WINDOWPROP DISPLAYWINDOW 'REPAINTFN (FUNCTION TWODINSPECT.REPAINTFN)) (* ;  "Smash the reshapefn because we don't want to rely on shapew to repaint the windows") (WINDOWPROP DISPLAYWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP DISPLAYWINDOW 'SCROLLFN (FUNCTION TWODINSPECT.SCROLLFN)) (WINDOWPROP DISPLAYWINDOW 'BUTTONEVENTFN (FUNCTION TWODINSPECT.BUTTONEVENTFN)) (WINDOWPROP DISPLAYWINDOW 'COPYBUTTONEVENTFN (FUNCTION TWODINSPECT.COPYBUTTONFN)) (WINDOWPROP DISPLAYWINDOW 'CLOSEFN (FUNCTION TWODINSPECT.CLOSEFN)) (DSPRIGHTMARGIN MAX.SMALLP DISPLAYWINDOW) (DSPFONT FONT DISPLAYWINDOW) (WINDOWPROP DISPLAYWINDOW 'DATUM DATUM) (WINDOWPROP DISPLAYWINDOW 'FETCHFN FETCHFN) (WINDOWPROP DISPLAYWINDOW 'STOREFN STOREFN) (WINDOWPROP DISPLAYWINDOW 'VALUECOMMANDFN (OR VALUECOMMANDFN (FUNCTION TWODINSPECT.DEFAULT.VALUECOMMANDFN ))) (WINDOWPROP DISPLAYWINDOW 'ROWPROPCOMMANDFN ROWPROPCOMMANDFN) (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPCOMMANDFN COLUMNPROPCOMMANDFN) (WINDOWPROP DISPLAYWINDOW 'TITLECOMMANDFN (OR TITLECOMMANDFN (FUNCTION TWODINSPECT.DEFAULT.TITLECOMMANDFN ))) (WINDOWPROP DISPLAYWINDOW 'ROWPROPS ROWPROPS) (WINDOWPROP DISPLAYWINDOW 'ROWPROPWIDTH (TWODINSPECT.ROWPROPWIDTH ROWPROPS FONT)) (WINDOWPROP DISPLAYWINDOW 'ROWPROPSPACE " ") (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPS COLUMNPROPS) (WINDOWPROP DISPLAYWINDOW 'COLUMNWIDTHS (TWODINSPECT.COLUMNWIDTHS DATUM ROWPROPS COLUMNPROPS FETCHFN FONT)) (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPSPACE " ") (WINDOWPROP DISPLAYWINDOW 'PROFILE PROFILE) DISPLAYWINDOW]) (GET-CORNERW [LAMBDA (DISPLAYWINDOW FONT) (* ; "Edited 6-Apr-87 14:52 by jop") (LET [(CORNERWINDOW (OR (WINDOWPROP DISPLAYWINDOW 'CORNERWINDOW) (CREATEW (CREATEREGION 0 0 100 100) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER) T] (DSPFONT FONT CORNERWINDOW) (WINDOWPROP CORNERWINDOW 'REPAINTFN (FUNCTION CLEARW)) (WINDOWPROP CORNERWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP CORNERWINDOW 'BUTTONEVENTFN NIL) (WINDOWPROP DISPLAYWINDOW 'CORNERWINDOW CORNERWINDOW) CORNERWINDOW]) (TWODINSPECT.ARRANGEWINDOWS - [LAMBDA (DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW TITLEWINDOW TOTALLEFT TOTALBOTTOM - TOTALWIDTH TOTALHEIGHT TOPRIGHT) (* ; "Edited 6-Apr-87 15:10 by jop") - - (* ;; "REGION should be the total available area") - - (PROG ((ROWPROPS (WINDOWPROP DISPLAYWINDOW 'ROWPROPS)) - (COLUMNPROPS (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPS)) - (ROWPROPSPACE (WINDOWPROP DISPLAYWINDOW 'ROWPROPSPACE)) - (COLUMNWIDTHS (WINDOWPROP DISPLAYWINDOW 'COLUMNWIDTHS)) - (COLUMNPROPSPACE (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPSPACE)) - TOTALRIGHT TOTALTOP DWHEIGHT DWWIDTH TITLEHEIGHT TWHEIGHT RWWIDTH DWLEFT DWBOTTOM) - [SETQ TITLEHEIGHT (HEIGHTIFWINDOW (FONTPROP TITLEWINDOW 'HEIGHT) - NIL - (WINDOWPROP TITLEWINDOW 'BORDER] - [SETQ TWHEIGHT (HEIGHTIFWINDOW (FONTPROP TOPWINDOW 'HEIGHT) - NIL - (WINDOWPROP TOPWINDOW 'BORDER] - [SETQ RWWIDTH (WIDTHIFWINDOW (IPLUS (STRINGWIDTH ROWPROPSPACE RIGHTWINDOW) - (TWODINSPECT.ROWPROPWIDTH ROWPROPS RIGHTWINDOW)) - (WINDOWPROP RIGHTWINDOW 'BORDER] - [if (NULL TOTALHEIGHT) - then [SETQ DWHEIGHT (IMIN 500 (HEIGHTIFWINDOW (ITIMES (FONTPROP DISPLAYWINDOW - 'HEIGHT) - (LENGTH ROWPROPS)) - NIL - (WINDOWPROP DISPLAYWINDOW 'BORDER] - (SETQ TOTALHEIGHT (IPLUS TITLEHEIGHT TWHEIGHT DWHEIGHT)) - else (SETQ DWHEIGHT (IDIFFERENCE TOTALHEIGHT (IPLUS TWHEIGHT TITLEHEIGHT] - (if (NULL TOTALWIDTH) - then [SETQ DWWIDTH (IMIN 400 (WIDTHIFWINDOW (TWODINSPECT.TOTALWIDTH - COLUMNWIDTHS COLUMNPROPSPACE - (DSPFONT DISPLAYWINDOW)) - (WINDOWPROP DISPLAYWINDOW 'BORDER] - (SETQ TOTALWIDTH (IPLUS RWWIDTH DWWIDTH)) - else (SETQ DWWIDTH (IDIFFERENCE TOTALWIDTH RWWIDTH))) - [if (POSITIONP TOPRIGHT) - then (SETQ TOTALRIGHT (fetch (POSITION XCOORD) of TOPRIGHT)) - (SETQ TOTALTOP (fetch (POSITION YCOORD) of TOPRIGHT)) - elseif (AND TOTALLEFT TOTALBOTTOM) - then (SETQ TOTALRIGHT (IPLUS TOTALLEFT (SUB1 TOTALWIDTH))) - (SETQ TOTALTOP (IPLUS TOTALBOTTOM (SUB1 TOTALHEIGHT))) - else (LET ((REGION (GETBOXREGION TOTALWIDTH TOTALHEIGHT NIL NIL NIL - "Position Inspector window"))) - (SETQ TOTALTOP (fetch (REGION TOP) of REGION)) - (SETQ TOTALRIGHT (fetch (REGION RIGHT) of REGION] - [SETQ DWLEFT (DIFFERENCE TOTALRIGHT (SUB1 (PLUS DWWIDTH RWWIDTH] - (if (ILESSP DWLEFT 0) - then (SETQ DWLEFT 0) - (SETQ DWWIDTH (DIFFERENCE (ADD1 TOTALRIGHT) - RWWIDTH))) - [SETQ DWBOTTOM (DIFFERENCE TOTALTOP (SUB1 (PLUS DWHEIGHT TWHEIGHT TITLEHEIGHT] - [if (LESSP DWBOTTOM 0) - then (SETQ DWBOTTOM 0) - (SETQ DWHEIGHT (DIFFERENCE (ADD1 TOTALTOP) - (PLUS TWHEIGHT TITLEHEIGHT] - - (* ;; "put up the window group") - - (WINDOWPROP DISPLAYWINDOW 'MINSIZE (CONS 0 0)) - (SHAPEW DISPLAYWINDOW (CREATEREGION DWLEFT DWBOTTOM DWWIDTH DWHEIGHT)) - (* ; - "Need to set the Minsize BEFORE reshaping else we catch the default minsize") - (WINDOWPROP TOPWINDOW 'MINSIZE (CONS 0 TWHEIGHT)) - (WINDOWPROP TOPWINDOW 'MAXSIZE (CONS MAX.SMALLP TWHEIGHT)) - (SHAPEW TOPWINDOW (CREATEREGION DWLEFT [ADD1 (fetch (REGION TOP) - of (WINDOWPROP DISPLAYWINDOW - 'REGION] - DWWIDTH TWHEIGHT)) - (ATTACHWINDOW TOPWINDOW DISPLAYWINDOW 'TOP) - (WINDOWPROP RIGHTWINDOW 'MINSIZE (CONS RWWIDTH 0)) - (WINDOWPROP RIGHTWINDOW 'MAXSIZE (CONS RWWIDTH MAX.SMALLP)) - (SHAPEW RIGHTWINDOW (CREATEREGION [ADD1 (fetch (REGION RIGHT) - of (WINDOWPROP DISPLAYWINDOW 'REGION] - DWBOTTOM RWWIDTH DWHEIGHT)) - (WINDOWPROP CORNERWINDOW 'MINSIZE (CONS RWWIDTH TWHEIGHT)) - (WINDOWPROP CORNERWINDOW 'MAXSIZE (CONS RWWIDTH TWHEIGHT)) - (SHAPEW CORNERWINDOW (CREATEREGION [ADD1 (fetch (REGION RIGHT) - of (WINDOWPROP DISPLAYWINDOW 'REGION] - [ADD1 (fetch (REGION TOP) of (WINDOWPROP DISPLAYWINDOW - 'REGION] - RWWIDTH TWHEIGHT)) - (ATTACHWINDOW CORNERWINDOW RIGHTWINDOW 'TOP) - (ATTACHWINDOW RIGHTWINDOW DISPLAYWINDOW 'RIGHT) - (WINDOWPROP TITLEWINDOW 'MINSIZE (CONS 0 TITLEHEIGHT)) - (WINDOWPROP TITLEWINDOW 'MAXSIZE (CONS MAX.SMALLP TITLEHEIGHT)) - (SHAPEW TITLEWINDOW (CREATEREGION DWLEFT [ADD1 (fetch (REGION TOP) - (WINDOWPROP TOPWINDOW 'REGION] - TOTALWIDTH TITLEHEIGHT)) - (ATTACHWINDOW TITLEWINDOW DISPLAYWINDOW 'TOP) - (RETURN DISPLAYWINDOW]) (TWODINSPECT.REPAINTFN + (ONEDINSPECT.REPLACE WINDOW PROP NEWVALUE]) ) (* ;; "Twod-inspector") (DEFINEQ (TWODINSPECTW.CREATE [LAMBDA (DATUM ROWPROPS COLUMNPROPS FETCHFN STOREFN VALUECOMMANDFN ROWPROPCOMMANDFN COLUMNPROPCOMMANDFN TITLE TITLECOMMANDFN WHERE TOPRIGHT) (* ; "Edited 6-Apr-87 17:03 by jop") (* ;;  "If where is a window, it may be the result of a previous call, so try to reuse all windows") (PROG ((PROFILE (MAKE-INSPECTOR-PROFILE)) [FONT (OR INSPECTORFONT (DEFAULTFONT 'DISPLAY] [TITLEFONT (OR (DSPFONT NIL WindowTitleDisplayStream) '(HELVETICA 8 MRR] DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT WINDOWGROUP) (if (LITATOM ROWPROPS) then (SETQ ROWPROPS (APPLY* ROWPROPS DATUM))) (if (LITATOM COLUMNPROPS) then (SETQ COLUMNPROPS (APPLY* COLUMNPROPS DATUM))) (WITH-INSPECTOR-ENV PROFILE (* ;  "DISPLAYWINDOW is the central and main window of the group") (SETQ DISPLAYWINDOW (GET-TWOD-DISPLAYW WHERE DATUM FETCHFN STOREFN VALUECOMMANDFN ROWPROPCOMMANDFN COLUMNPROPCOMMANDFN TITLECOMMANDFN ROWPROPS COLUMNPROPS PROFILE FONT)) (* ;  "TOPWINDOW simply records the COLUMNPROPS") (SETQ TOPWINDOW (GET-TOPW DISPLAYWINDOW FONT)) (* ;  "RIGHTWINDOW records the ROWPROPS") (SETQ RIGHTWINDOW (GET-RIGHTW DISPLAYWINDOW FONT)) (* ;  "CORNERWINDOW is just a place holder") (SETQ CORNERWINDOW (GET-CORNERW DISPLAYWINDOW FONT)) (* ;  "TITLEWINDOW will only hold a title") (SETQ TITLEWINDOW (GET-TITLEW DISPLAYWINDOW TITLE TITLEFONT DATUM)) (* ; "Put up the window group") [if (NOT (POSITIONP TOPRIGHT)) then (LET ((REGION (if (WINDOWP WHERE) then (WINDOWPROP WHERE 'REGION) elseif (REGIONP WHERE) then WHERE))) (if REGION then (SETQ GLEFT (fetch (REGION LEFT) of REGION)) (SETQ GBOTTOM (fetch (REGION BOTTOM) of REGION)) (SETQ GWIDTH (fetch (REGION WIDTH) of REGION)) (SETQ GHEIGHT (fetch (REGION HEIGHT) of REGION)) elseif (POSITIONP WHERE) then (SETQ GLEFT (fetch (POSITION XCOORD) of WHERE)) (SETQ GBOTTOM (fetch (POSITION YCOORD) of WHERE] (SETQ WINDOWGROUP (TWODINSPECT.ARRANGEWINDOWS DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT TOPRIGHT)) (* ;; " Display the group") (TWODINSPECT.RESHAPEFN DISPLAYWINDOW) (TOPW.RESHAPEFN TOPWINDOW) (RIGHTW.RESHAPEFN RIGHTWINDOW) (TITLEW.REPAINTFN TITLEWINDOW) (* ;; "then establish reshapefns on the windows of the window group") (WINDOWPROP DISPLAYWINDOW 'RESHAPEFN (FUNCTION TWODINSPECT.RESHAPEFN)) (WINDOWPROP TOPWINDOW 'RESHAPEFN (FUNCTION TOPW.RESHAPEFN)) (WINDOWPROP RIGHTWINDOW 'RESHAPEFN (FUNCTION RIGHTW.RESHAPEFN)) (WINDOWPROP TITLEWINDOW 'RESHAPEFN (FUNCTION TITLEW.REPAINTFN))) (* ;; "finally return the group") (RETURN WINDOWGROUP]) (GET-TWOD-DISPLAYW [LAMBDA (WHERE DATUM FETCHFN STOREFN VALUECOMMANDFN ROWPROPCOMMANDFN COLUMNPROPCOMMANDFN TITLECOMMANDFN ROWPROPS COLUMNPROPS PROFILE FONT) (* ; "Edited 6-Apr-87 14:51 by jop") (LET [(DISPLAYWINDOW (if (WINDOWP WHERE) then WHERE else (CREATEW (CREATEREGION 0 0 100 100) NIL 2 T] (WINDOWPROP DISPLAYWINDOW 'REPAINTFN (FUNCTION TWODINSPECT.REPAINTFN)) (* ;  "Smash the reshapefn because we don't want to rely on shapew to repaint the windows") (WINDOWPROP DISPLAYWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP DISPLAYWINDOW 'SCROLLFN (FUNCTION TWODINSPECT.SCROLLFN)) (WINDOWPROP DISPLAYWINDOW 'BUTTONEVENTFN (FUNCTION TWODINSPECT.BUTTONEVENTFN)) (WINDOWPROP DISPLAYWINDOW 'COPYBUTTONEVENTFN (FUNCTION TWODINSPECT.COPYBUTTONFN)) (WINDOWPROP DISPLAYWINDOW 'CLOSEFN (FUNCTION TWODINSPECT.CLOSEFN)) (DSPRIGHTMARGIN MAX.SMALLP DISPLAYWINDOW) (DSPFONT FONT DISPLAYWINDOW) (WINDOWPROP DISPLAYWINDOW 'DATUM DATUM) (WINDOWPROP DISPLAYWINDOW 'FETCHFN FETCHFN) (WINDOWPROP DISPLAYWINDOW 'STOREFN STOREFN) (WINDOWPROP DISPLAYWINDOW 'VALUECOMMANDFN (OR VALUECOMMANDFN (FUNCTION TWODINSPECT.DEFAULT.VALUECOMMANDFN ))) (WINDOWPROP DISPLAYWINDOW 'ROWPROPCOMMANDFN ROWPROPCOMMANDFN) (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPCOMMANDFN COLUMNPROPCOMMANDFN) (WINDOWPROP DISPLAYWINDOW 'TITLECOMMANDFN (OR TITLECOMMANDFN (FUNCTION TWODINSPECT.DEFAULT.TITLECOMMANDFN ))) (WINDOWPROP DISPLAYWINDOW 'ROWPROPS ROWPROPS) (WINDOWPROP DISPLAYWINDOW 'ROWPROPWIDTH (TWODINSPECT.ROWPROPWIDTH ROWPROPS FONT)) (WINDOWPROP DISPLAYWINDOW 'ROWPROPSPACE " ") (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPS COLUMNPROPS) (WINDOWPROP DISPLAYWINDOW 'COLUMNWIDTHS (TWODINSPECT.COLUMNWIDTHS DATUM ROWPROPS COLUMNPROPS FETCHFN FONT)) (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPSPACE " ") (WINDOWPROP DISPLAYWINDOW 'PROFILE PROFILE) DISPLAYWINDOW]) (GET-CORNERW [LAMBDA (DISPLAYWINDOW FONT) (* ; "Edited 6-Apr-87 14:52 by jop") (LET [(CORNERWINDOW (OR (WINDOWPROP DISPLAYWINDOW 'CORNERWINDOW) (CREATEW (CREATEREGION 0 0 100 100) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER) T] (DSPFONT FONT CORNERWINDOW) (WINDOWPROP CORNERWINDOW 'REPAINTFN (FUNCTION CLEARW)) (WINDOWPROP CORNERWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP CORNERWINDOW 'BUTTONEVENTFN NIL) (WINDOWPROP DISPLAYWINDOW 'CORNERWINDOW CORNERWINDOW) CORNERWINDOW]) (TWODINSPECT.ARRANGEWINDOWS [LAMBDA (DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW TITLEWINDOW TOTALLEFT TOTALBOTTOM TOTALWIDTH TOTALHEIGHT TOPRIGHT) (* ; "Edited 19-Feb-2021 14:29 by rmk:") (* ; "Edited 6-Apr-87 15:10 by jop") (* ;; "REGION should be the total available area") (PROG ((ROWPROPS (WINDOWPROP DISPLAYWINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPS)) (ROWPROPSPACE (WINDOWPROP DISPLAYWINDOW 'ROWPROPSPACE)) (COLUMNWIDTHS (WINDOWPROP DISPLAYWINDOW 'COLUMNWIDTHS)) (COLUMNPROPSPACE (WINDOWPROP DISPLAYWINDOW 'COLUMNPROPSPACE)) TOTALRIGHT TOTALTOP DWHEIGHT DWWIDTH TITLEHEIGHT TWHEIGHT RWWIDTH DWLEFT DWBOTTOM ROWPROPWIDTH) [SETQ TITLEHEIGHT (HEIGHTIFWINDOW (FONTPROP TITLEWINDOW 'HEIGHT) NIL (WINDOWPROP TITLEWINDOW 'BORDER] (SETQ ROWPROPWIDTH (TWODINSPECT.ROWPROPWIDTH ROWPROPS RIGHTWINDOW)) [SETQ TWHEIGHT (HEIGHTIFWINDOW (FONTPROP TOPWINDOW 'HEIGHT) NIL (WINDOWPROP TOPWINDOW 'BORDER] [SETQ RWWIDTH (WIDTHIFWINDOW (IPLUS (STRINGWIDTH ROWPROPSPACE RIGHTWINDOW) ROWPROPWIDTH) (WINDOWPROP RIGHTWINDOW 'BORDER] [if (NULL TOTALHEIGHT) then [SETQ DWHEIGHT (IMIN 500 (HEIGHTIFWINDOW (ITIMES (FONTPROP DISPLAYWINDOW 'HEIGHT) (LENGTH ROWPROPS)) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER] (SETQ TOTALHEIGHT (IPLUS TITLEHEIGHT TWHEIGHT DWHEIGHT)) else (SETQ DWHEIGHT (IDIFFERENCE TOTALHEIGHT (IPLUS TWHEIGHT TITLEHEIGHT] (if (NULL TOTALWIDTH) then [SETQ DWWIDTH (IMIN 400 (WIDTHIFWINDOW (TWODINSPECT.TOTALWIDTH COLUMNWIDTHS COLUMNPROPSPACE (DSPFONT DISPLAYWINDOW)) (WINDOWPROP DISPLAYWINDOW 'BORDER] (SETQ TOTALWIDTH (IPLUS RWWIDTH DWWIDTH)) else (SETQ DWWIDTH (IDIFFERENCE TOTALWIDTH RWWIDTH))) [if (POSITIONP TOPRIGHT) then (SETQ TOTALRIGHT (fetch (POSITION XCOORD) of TOPRIGHT)) (SETQ TOTALTOP (fetch (POSITION YCOORD) of TOPRIGHT)) elseif (AND TOTALLEFT TOTALBOTTOM) then (SETQ TOTALRIGHT (IPLUS TOTALLEFT (SUB1 TOTALWIDTH))) (SETQ TOTALTOP (IPLUS TOTALBOTTOM (SUB1 TOTALHEIGHT))) else (LET ((REGION (GETBOXREGION TOTALWIDTH TOTALHEIGHT NIL NIL NIL "Position Inspector window"))) (SETQ TOTALTOP (fetch (REGION TOP) of REGION)) (SETQ TOTALRIGHT (fetch (REGION RIGHT) of REGION] [SETQ DWLEFT (DIFFERENCE TOTALRIGHT (SUB1 (PLUS DWWIDTH RWWIDTH] (if (ILESSP DWLEFT 0) then (SETQ DWLEFT 0) (SETQ DWWIDTH (DIFFERENCE (ADD1 TOTALRIGHT) RWWIDTH))) [SETQ DWBOTTOM (DIFFERENCE TOTALTOP (SUB1 (PLUS DWHEIGHT TWHEIGHT TITLEHEIGHT] [if (LESSP DWBOTTOM 0) then (SETQ DWBOTTOM 0) (SETQ DWHEIGHT (DIFFERENCE (ADD1 TOTALTOP) (PLUS TWHEIGHT TITLEHEIGHT] (* ;; "put up the window group") (WINDOWPROP DISPLAYWINDOW 'MINSIZE (CONS 0 0)) (SHAPEW DISPLAYWINDOW (CREATEREGION DWLEFT DWBOTTOM DWWIDTH DWHEIGHT)) (* ;  "Need to set the Minsize BEFORE reshaping else we catch the default minsize") (WINDOWPROP TOPWINDOW 'MINSIZE (CONS 0 TWHEIGHT)) (WINDOWPROP TOPWINDOW 'MAXSIZE (CONS MAX.SMALLP TWHEIGHT)) (SHAPEW TOPWINDOW (CREATEREGION DWLEFT [ADD1 (fetch (REGION TOP) of (WINDOWPROP DISPLAYWINDOW 'REGION] DWWIDTH TWHEIGHT)) (ATTACHWINDOW TOPWINDOW DISPLAYWINDOW 'TOP) (WINDOWPROP RIGHTWINDOW 'MINSIZE (CONS RWWIDTH 0)) (WINDOWPROP RIGHTWINDOW 'MAXSIZE (CONS RWWIDTH MAX.SMALLP)) (WINDOWPROP RIGHTWINDOW 'ROWPROPWIDTH ROWPROPWIDTH) (SHAPEW RIGHTWINDOW (CREATEREGION [ADD1 (fetch (REGION RIGHT) of (WINDOWPROP DISPLAYWINDOW 'REGION] DWBOTTOM RWWIDTH DWHEIGHT)) (WINDOWPROP CORNERWINDOW 'MINSIZE (CONS RWWIDTH TWHEIGHT)) (WINDOWPROP CORNERWINDOW 'MAXSIZE (CONS RWWIDTH TWHEIGHT)) (SHAPEW CORNERWINDOW (CREATEREGION [ADD1 (fetch (REGION RIGHT) of (WINDOWPROP DISPLAYWINDOW 'REGION] [ADD1 (fetch (REGION TOP) of (WINDOWPROP DISPLAYWINDOW 'REGION] RWWIDTH TWHEIGHT)) (ATTACHWINDOW CORNERWINDOW RIGHTWINDOW 'TOP) (ATTACHWINDOW RIGHTWINDOW DISPLAYWINDOW 'RIGHT) (WINDOWPROP TITLEWINDOW 'MINSIZE (CONS 0 TITLEHEIGHT)) (WINDOWPROP TITLEWINDOW 'MAXSIZE (CONS MAX.SMALLP TITLEHEIGHT)) (SHAPEW TITLEWINDOW (CREATEREGION DWLEFT [ADD1 (fetch (REGION TOP) (WINDOWPROP TOPWINDOW 'REGION] TOTALWIDTH TITLEHEIGHT)) (ATTACHWINDOW TITLEWINDOW DISPLAYWINDOW 'TOP) (RETURN DISPLAYWINDOW]) (TWODINSPECT.REPAINTFN [LAMBDA (WINDOW WINDOWREGION) (* ; "Edited 6-Apr-87 11:12 by jop") (if (NULL WINDOWREGION) then (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW))) @@ -178,7 +88,7 @@ COLUMNPROP )) HMARK VMARK FDESCENT WINDOW] - (INSPECT.INVERTSELECTION WINDOW]) (TWODINSPECT.PRINTELEMENT [LAMBDA (ELT RIGHT BOTTOM FDESCENT WINDOW) (* ; "Edited 5-Apr-87 15:17 by jop") (MOVETO (ADD1 (DIFFERENCE RIGHT (STRINGWIDTH ELT WINDOW T))) (IPLUS BOTTOM FDESCENT) WINDOW) (PRIN2 ELT WINDOW]) (TWODINSPECT.RESHAPEFN [LAMBDA (WINDOW) (* jop%: " 6-Oct-85 18:33") (CLEARW WINDOW) (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (TWODINSPECT.MAKEREGIONS WINDOW) (TWODINSPECT.ADJUSTSELECTION WINDOW) (TWODINSPECT.REPAINTFN WINDOW]) (TWODINSPECT.MAKEREGIONS [LAMBDA (WINDOW) (* ; "Edited 5-Apr-87 16:31 by jop") (* ;; "Sets up windowprops and activeregions") (PROG ((ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (COLUMNWIDTHS (WINDOWPROP WINDOW 'COLUMNWIDTHS)) (SPACE (STRINGWIDTH (WINDOWPROP WINDOW 'COLUMNPROPSPACE) WINDOW)) (WINDOWHEIGHT (WINDOWPROP WINDOW 'HEIGHT)) (LF (DSPLINEFEED NIL WINDOW)) VERTMARKS HORZMARKS) (if (NULL COLUMNWIDTHS) then (SETQ COLUMNWIDTHS (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (TWODINSPECT.COLUMNWIDTHS (WINDOWPROP WINDOW 'DATUM) ROWPROPS COLUMNPROPS (WINDOWPROP WINDOW 'FETCHFN) WINDOW))) (WINDOWPROP WINDOW 'COLUMNWIDTHS COLUMNWIDTHS)) (* ;  "VERTMARKS and HORZMARKS mark endpoints") (SETQ VERTMARKS (for I from 1 to (LENGTH ROWPROPS) as MARK from (IPLUS WINDOWHEIGHT LF) by LF collect MARK)) [SETQ HORZMARKS (bind (MARK _ -1) for I from 1 to (LENGTH COLUMNPROPS) as COLUMNWIDTH in COLUMNWIDTHS collect (SETQ MARK (IPLUS MARK SPACE COLUMNWIDTH] (WINDOWPROP WINDOW 'VERTMARKS VERTMARKS) (WINDOWPROP WINDOW 'HORZMARKS HORZMARKS) [WINDOWPROP WINDOW 'EXTENT (CREATEREGION 0 (CAR (LAST VERTMARKS)) (CAR (LAST HORZMARKS)) (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS] [WINDOWPROP (WINDOWPROP WINDOW 'TOPWINDOW) 'EXTENT (CREATEREGION 0 0 (CAR (LAST HORZMARKS)) (WINDOWPROP (WINDOWPROP WINDOW 'TOPWINDOW) 'HEIGHT] (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'EXTENT (CREATEREGION 0 (CAR (LAST VERTMARKS)) (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'WIDTH) (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS]) (TWODINSPECT.BUTTONEVENTFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:28 by jop") (TOTOPW WINDOW) (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (if (MOUSESTATE LEFT) then (WINDOWPROP WINDOW 'SELECTION (TWOD.TRACKCURSOR WINDOW SELECTION (WINDOWPROP WINDOW 'ROWPROPS) (WINDOWPROP WINDOW 'VERTMARKS) (WINDOWPROP WINDOW 'COLUMNPROPS) (WINDOWPROP WINDOW 'HORZMARKS) (FONTPROP WINDOW 'HEIGHT) [FUNCTION (LAMBDA (RP CP W) (CL:FUNCALL (WINDOWPROP W 'FETCHFN) (WINDOWPROP W 'DATUM) RP CP] (FUNCTION INSPECT.INVERTREGION))) else (* ; "MOUSESTATE MIDDLE") (if SELECTION then (LET [(DATUM (WINDOWPROP WINDOW 'DATUM)) (SELECTEDROWPROP (CAR (fetch (TWOD.SELECTION ROWPROP) of SELECTION))) (SELECTEDCOLUMNPROP (CAR (fetch (TWOD.SELECTION COLUMNPROP) of SELECTION] (CL:FUNCALL (WINDOWPROP WINDOW 'VALUECOMMANDFN) (CL:FUNCALL (WINDOWPROP WINDOW 'FETCHFN) DATUM SELECTEDROWPROP SELECTEDCOLUMNPROP) SELECTEDROWPROP SELECTEDCOLUMNPROP DATUM WINDOW]) (TWODINSPECT.COPYBUTTONFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:32 by jop") (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (TOTOPW WINDOW) (bind SELECTION while (.COPYKEYDOWNP.) do (BLOCK) (SETQ SELECTION (TWOD.TRACKCURSOR WINDOW SELECTION (WINDOWPROP WINDOW 'ROWPROPS) (WINDOWPROP WINDOW 'VERTMARKS) (WINDOWPROP WINDOW 'COLUMNPROPS) (WINDOWPROP WINDOW 'HORZMARKS) 2 [FUNCTION (LAMBDA (RP CP W) (CL:FUNCALL (WINDOWPROP W 'FETCHFN) (WINDOWPROP W 'DATUM) RP CP] (FUNCTION INSPECT.FLIPSELECTION))) finally (if SELECTION then (INSPECT.FLIPSELECTION (fetch (TWOD.SELECTION ELTLEFT) of SELECTION) (fetch (TWOD.SELECTION ELTBOTTOM) of SELECTION) (fetch (TWOD.SELECTION ELTWIDTH) of SELECTION) 2 WINDOW) (BKSYSBUF.GENERAL (CL:FUNCALL (WINDOWPROP WINDOW 'FETCHFN) (WINDOWPROP WINDOW 'DATUM) (CAR (fetch (TWOD.SELECTION ROWPROP) of SELECTION)) (CAR (fetch (TWOD.SELECTION COLUMNPROP) of SELECTION]) (TWODINSPECT.DOWINDOWCOMFN [LAMBDA (TWODWINDOW) (* ; "Edited 6-Apr-87 12:05 by jop") (* ;; "Pass on the usual comms, except for SHAPEW") (PROG (COM) (SETQ COM (MENU WindowMenu)) (SELECTQ COM (NIL NIL) (SHAPEW [SHAPEW TWODWINDOW (GETREGION NIL NIL NIL (FUNCTION ICMLARRAY.GETREGIONFN) (CONS TWODWINDOW 'CLOSED]) ((MOVEW CLOSEW SHRINKW BURYW) (APPLY* COM (MAINWINDOW TWODWINDOW))) (APPLY* COM TWODWINDOW]) (TWODINSPECT.SCROLLFN [LAMBDA (WINDOW DX DY FLG) (* jop%: "18-Jul-85 13:50") (PROG [(TOPWINDOW (WINDOWPROP WINDOW 'TOPWINDOW)) (RIGHTWINDOW (WINDOWPROP WINDOW 'RIGHTWINDOW] (if (OR (NOT (EQP 0 DX)) (FLOATP DX)) then (APPLY* (WINDOWPROP TOPWINDOW 'SCROLLFN) TOPWINDOW DX 0 FLG)) (if (OR (NOT (EQP 0 DY)) (FLOATP DY)) then (APPLY* (WINDOWPROP RIGHTWINDOW 'SCROLLFN) RIGHTWINDOW 0 DY FLG)) (SCROLLBYREPAINTFN WINDOW DX DY FLG]) (TWODINSPECT.CLOSEFN [LAMBDA (WINDOW) (* jop%: " 4-Oct-85 17:51") (DETACHALLWINDOWS (WINDOWPROP WINDOW 'RIGHTWINDOW)) (DETACHALLWINDOWS WINDOW) (WINDOWPROP WINDOW 'SELECTION NIL) (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'SELECTION NIL) (WINDOWPROP (WINDOWPROP WINDOW 'TOPWINDOW) 'SELECTION NIL]) (TWODINSPECT.REDISPLAY [LAMBDA (WINDOW ELTROWPROPS ELTCOLUMNPROPS) (* ; "Edited 8-Apr-87 17:00 by jop") (* ;; "ELTROWPROPS and ELTCOLUMNPROPS may be single entries, lists, or NIL. If NIL than the whole inspector is refetched and redisplayed") (if (AND ELTROWPROPS (NLISTP ELTROWPROPS)) then (SETQ ELTROWPROPS (LIST ELTROWPROPS))) (if (AND ELTCOLUMNPROPS (NLISTP ELTCOLUMNPROPS)) then (SETQ ELTCOLUMNPROPS (LIST ELTCOLUMNPROPS))) (PROG ((FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (DATUM (WINDOWPROP WINDOW 'DATUM)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (COLUMNWIDTHS (WINDOWPROP WINDOW 'COLUMNWIDTHS)) (SELECTION (WINDOWPROP WINDOW 'SELECTION)) ELTCOLUMNWIDTHS ELTS ELTRIGHTS ELTBOTTOMS) [SETQ ELTS (for RPROP in ELTROWPROPS join (for CPROP in ELTCOLUMNPROPS collect (APPLY* FETCHFN DATUM RPROP CPROP] [SETQ ELTCOLUMNWIDTHS (for RPROP in ELTROWPROPS join (for CPROP in ELTCOLUMNPROPS collect (for COLWIDTH in COLUMNWIDTHS as COLPROP in COLUMNPROPS thereis (EQUAL COLPROP CPROP] [SETQ ELTRIGHTS (for RPROP in ELTROWPROPS join (for CPROP in ELTCOLUMNPROPS collect (for HMARK in HORZMARKS as COLPROP in COLUMNPROPS thereis (EQUAL COLPROP CPROP] [SETQ ELTBOTTOMS (for RPROP in ELTROWPROPS join (for CPROP in ELTCOLUMNPROPS collect (for VMARK in VERTMARKS as ROWPROP in ROWPROPS thereis (EQUAL ROWPROP RPROP] (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (if (AND ELTS (for ELT in ELTS as COLUMNWIDTH in ELTCOLUMNWIDTHS never (IGREATERP (STRINGWIDTH ELT WINDOW T) COLUMNWIDTH))) then (INSPECT.INVERTSELECTION WINDOW) (bind (FHEIGHT _ (FONTPROP WINDOW 'HEIGHT)) (FDESCENT _ (FONTPROP WINDOW 'DESCENT)) for ELT in ELTS as RIGHT in ELTRIGHTS as BOTTOM in ELTBOTTOMS as COLUMNWIDTH in ELTCOLUMNWIDTHS do (BITBLT NIL NIL NIL WINDOW (IDIFFERENCE (ADD1 RIGHT) COLUMNWIDTH) BOTTOM COLUMNWIDTH FHEIGHT 'TEXTURE 'REPLACE WHITESHADE) (TWODINSPECT.PRINTELEMENT ELT RIGHT BOTTOM FDESCENT WINDOW)) (TWODINSPECT.ADJUSTSELECTION WINDOW) (INSPECT.INVERTSELECTION WINDOW) else (* ; "Recompute the whole picture") (WINDOWPROP WINDOW 'COLUMNWIDTHS NIL) (TWODINSPECT.MAKEREGIONS WINDOW) (TWODINSPECT.ADJUSTSELECTION WINDOW) (DSPRESET WINDOW) (TWODINSPECT.REPAINTFN WINDOW) (DSPRESET (WINDOWPROP WINDOW 'TOPWINDOW)) (TOPW.REPAINTFN (WINDOWPROP WINDOW 'TOPWINDOW)) (DSPRESET (WINDOWPROP WINDOW 'RIGHTWINDOW)) (RIGHTW.REPAINTFN (WINDOWPROP WINDOW 'RIGHTWINDOW]) (TWODINSPECT.REPLACE [LAMBDA (WINDOW ROWPROP COLUMNPROP NEWVALUE) (* jop%: "30-Sep-85 20:44") (PROG [(DATUM (WINDOWPROP WINDOW 'DATUM)) (STOREFN (WINDOWPROP WINDOW 'STOREFN] (APPLY* STOREFN NEWVALUE DATUM ROWPROP COLUMNPROP) (TWODINSPECT.REDISPLAY WINDOW ROWPROP COLUMNPROP]) (TWODINSPECT.SELECTITEM [LAMBDA (WINDOW ROWPROP COLUMNPROP) (* ; "Edited 6-Apr-87 12:05 by jop") (if (WINDOWPROP WINDOW 'SELECTION) then (INSPECT.INVERTSELECTION WINDOW)) (if (AND ROWPROP COLUMNPROP) then (PROG ((DATUM (WINDOWPROP WINDOW 'DATUM)) (FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) SELECTEDROWPROP SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (SETQ SELECTEDROWPROP (for RPROP on ROWPROPS thereis (EQUAL (CAR RPROP) ROWPROP))) (SETQ SELECTEDCOLUMNPROP (for CPROP on COLUMNPROPS thereis (EQUAL (CAR CPROP) COLUMNPROP))) (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as RPROP on ROWPROPS thereis (EQ RPROP SELECTEDROWPROP))) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (APPLY* FETCHFN DATUM ROWPROP COLUMNPROP) WINDOW T))) (SETQ SELECTEDELTLEFT (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as CPROP on COLUMNPROPS thereis (EQ CPROP SELECTEDCOLUMNPROP))) SELECTEDELTWIDTH)) (INSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) WINDOW) (WINDOWPROP WINDOW 'SELECTION (create TWOD.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM ROWPROP _ SELECTEDROWPROP COLUMNPROP _ SELECTEDCOLUMNPROP]) (TWODINSPECT.SELECTROWPROP [LAMBDA (WINDOW ROWPROP) (* ; "Edited 6-Apr-87 12:07 by jop") (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW 'RIGHTWINDOW] (if (WINDOWPROP RIGHTWINDOW 'SELECTION) then (INSPECT.INVERTSELECTION RIGHTWINDOW)) (PROG ((ROWPROPSPACE (WINDOWPROP WINDOW 'ROWPROPSPACE)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) SELECTEDROWPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (SETQ SELECTEDROWPROP (for RPROP on ROWPROPS thereis (EQUAL (CAR RPROP) ROWPROP))) (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as RPROP on ROWPROPS thereis (EQ RPROP SELECTEDROWPROP))) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (CAR SELECTEDROWPROP) WINDOW T))) (SETQ SELECTEDELTLEFT (STRINGWIDTH ROWPROPSPACE WINDOW)) (INSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) RIGHTWINDOW) (WINDOWPROP RIGHTWINDOW 'SELECTION (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDROWPROP]) (TWODINSPECT.SELECTCOLUMNPROP [LAMBDA (WINDOW COLUMNPROP) (* ; "Edited 6-Apr-87 12:08 by jop") (PROG [(TOPWINDOW (WINDOWPROP WINDOW 'TOPWINDOW] (if (WINDOWPROP TOPWINDOW 'SELECTION) then (INSPECT.INVERTSELECTION TOPWINDOW)) (PROG ((COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (SETQ SELECTEDCOLUMNPROP (for CPROP on COLUMNPROPS thereis (EQUAL (CAR CPROP) COLUMNPROP))) (SETQ SELECTEDELTBOTTOM 0) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (CAR SELECTEDCOLUMNPROP) WINDOW T))) (SETQ SELECTEDELTLEFT (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as CPROP on COLUMNPROPS thereis (EQ CPROP SELECTEDCOLUMNPROP) )) SELECTEDELTWIDTH)) (INSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) TOPWINDOW) (WINDOWPROP TOPWINDOW 'SELECTION (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDCOLUMNPROP]) (TWODINSPECT.ADJUSTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 12:06 by jop") (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (if SELECTION then (PROG ((DATUM (WINDOWPROP WINDOW 'DATUM)) (FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) (SELROWPROP (fetch (TWOD.SELECTION ROWPROP) of SELECTION)) (SELCOLPROP (fetch (TWOD.SELECTION COLUMNPROP) of SELECTION)) SELBOTTOM SELWIDTH SELLEFT) (SETQ SELBOTTOM (for VMARK in VERTMARKS as ROWPROP on ROWPROPS thereis (EQ ROWPROP SELROWPROP))) (SETQ SELWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (APPLY* FETCHFN DATUM (CAR SELROWPROP ) (CAR SELCOLPROP)) WINDOW T))) (SETQ SELLEFT (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as COLPROP on COLUMNPROPS thereis (EQ COLPROP SELCOLPROP))) SELWIDTH)) (WINDOWPROP WINDOW 'SELECTION (create TWOD.SELECTION ELTBOTTOM _ SELBOTTOM ELTWIDTH _ SELWIDTH ELTLEFT _ SELLEFT ROWPROP _ SELROWPROP COLUMNPROP _ SELCOLPROP]) (TWODINSPECT.DEFAULT.TITLECOMMANDFN [LAMBDA (WINDOW) (* ; "Edited 20-Jul-90 20:54 by yabu") (if (MOUSESTATE MIDDLE) then (PROG [(TITLEMENU (CONSTANT (\CREATE.TWODINSPECTOR.TITLEMENU))) (* ; "Original was (create MENU ITEMS _ '((%"Refetch%" 'REFETCH %"Refetch the datum%") (%"IT _ Datum%" 'IT %"Bind IT to the inspected datum%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") (DATUM (WINDOWPROP WINDOW 'DATUM] (SELECTQ (MENU TITLEMENU) (REFETCH (TWODINSPECT.REDISPLAY WINDOW)) (IT (SETQ IT DATUM) (PROMPTPRINT "IT bound to " DATUM)) NIL]) (TWODINSPECT.DEFAULT.VALUECOMMANDFN [LAMBDA (VALUE ROWPROP COLUMNPROP DATUM WINDOW) (* ; "Edited 20-Jul-90 21:03 by yabu") (PROG ((SETMENU (CONSTANT (\CREATE.TWODINSPECTOR.SETMENU))) (* ; "Original was (create MENU ITEMS _ '((%"IT _ Selection%" 'IT %"Bind IT to the value of the selected entry%") (%"Set%" 'SET %"Set the selected entry%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") (INSPECTMENU (CONSTANT (\CREATE.TWODINSPECTOR.INSPECTMENU))) (* ; "Original was (create MENU ITEMS _ '((%"Inspect%" 'INSPECT %"Inspect the value of the selected entry%") (%"IT _ Selection%" 'IT %"Bind IT to the value of the selected entry%") (%"Set%" 'SET %"Set the selected entry%"))).") (* ;  " Changed by yabu.fx, for SUNLOADUP without DWIM.") ) (SELECTQ (if (OR (NULL VALUE) (NUMBERP VALUE)) then (MENU SETMENU) else (MENU INSPECTMENU)) (INSPECT (INSPECT VALUE)) (IT (SETQ IT VALUE) (PROMPTPRINT "IT bound to " IT)) (SET (TWODINSPECT.SETELT ROWPROP COLUMNPROP WINDOW)) NIL]) (TWODINSPECT.SETELT [LAMBDA (ROWPROP COLUMNPROP WINDOW) (* ; "Edited 5-Apr-87 16:41 by jop") (PROG ((PRTWINDOW (GETPROMPTWINDOW WINDOW)) (NEWVALUE (APPLY* (WINDOWPROP WINDOW 'FETCHFN) (WINDOWPROP WINDOW 'DATUM) ROWPROP COLUMNPROP))) (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (RESETLST (RESETSAVE (TTYDISPLAYSTREAM PRTWINDOW)) (RESETSAVE (TTY.PROCESS (THIS.PROCESS))) (CLEARBUF T T) (printout T "Eval> ") (SETQ NEWVALUE (CL:FUNCALL XCL:*EVAL-FUNCTION* (LISPXREAD T T))) (* ;  "clear tty buffer because it sometimes has stuff left.") (CLEARBUF T T))) (REMOVEPROMPTWINDOW WINDOW) (TWODINSPECT.REPLACE WINDOW ROWPROP COLUMNPROP NEWVALUE]) (TWODINSPECT.ROWPROPWIDTH [LAMBDA (ROWPROPS FONT) (* ; "Edited 5-Apr-87 16:33 by jop") (for ROWPROP in ROWPROPS largest (STRINGWIDTH ROWPROP FONT T) finally (RETURN $$EXTREME]) (TWODINSPECT.COLUMNWIDTHS [LAMBDA (DATUM ROWPROPS COLUMNPROPS FETCHFN FONT) (* ; "Edited 5-Apr-87 15:38 by jop") (* ;; "Computes the MIN fieldwidth for the jth column of SLICE") (for COLUMNPROP in COLUMNPROPS collect (TWODINSPECT.COLUMNWIDTH DATUM ROWPROPS COLUMNPROP FETCHFN FONT]) (TWODINSPECT.COLUMNWIDTH [LAMBDA (DATUM ROWPROPS COLUMNPROP FETCHFN FONT) (* ; "Edited 5-Apr-87 16:29 by jop") (* ;; "Computes the MIN fieldwidth for the COLUMNPROP column of SLICE") (IMAX (STRINGWIDTH COLUMNPROP FONT T) (for ROWPROP in ROWPROPS largest (STRINGWIDTH (APPLY* FETCHFN DATUM ROWPROP COLUMNPROP) FONT T) finally (RETURN $$EXTREME]) (TWODINSPECT.TOTALWIDTH [LAMBDA (COLUMNWIDTHS SPACE FONT) (* jop%: "25-Sep-85 13:21") (IPLUS (ITIMES (LENGTH COLUMNWIDTHS) (STRINGWIDTH SPACE FONT)) (for COLUMN in COLUMNWIDTHS sum COLUMN]) ) (* ;; "Right window fns") (DEFINEQ (GET-RIGHTW [LAMBDA (DISPLAYWINDOW FONT) (* ; "Edited 6-Apr-87 12:14 by jop") (LET [(RIGHTWINDOW (OR (WINDOWPROP DISPLAYWINDOW 'RIGHTWINDOW) (CREATEW (CREATEREGION 0 0 100 100) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER) T] (WINDOWPROP RIGHTWINDOW 'REPAINTFN (FUNCTION RIGHTW.REPAINTFN)) (WINDOWPROP RIGHTWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP RIGHTWINDOW 'BUTTONEVENTFN (FUNCTION RIGHTW.BUTTONEVENTFN)) (WINDOWPROP RIGHTWINDOW 'SCROLLFN (FUNCTION SCROLLBYREPAINTFN)) (WINDOWPROP RIGHTWINDOW 'NOSCROLLBARS T) (DSPFONT FONT RIGHTWINDOW) (WINDOWPROP DISPLAYWINDOW 'RIGHTWINDOW RIGHTWINDOW) RIGHTWINDOW]) (RIGHTW.REPAINTFN [LAMBDA (WINDOW WINDOWREGION) (* ; "Edited 11-Aug-2020 11:20 by rmk:") (* ; "Edited 22-May-92 17:37 by jds") (* ;; "RMK: Right justify the PROP in its window (assuming its a numeric index)") (* ;;  "REPAINT the right-hand window of a two-d inspector. This window contains the element indices.") [COND ((NULL WINDOWREGION) (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW] (LET [(DISPLAYW (MAINWINDOW WINDOW)) (TOP (fetch (REGION TOP) of WINDOWREGION)) (BOTTOM (fetch (REGION BOTTOM) of WINDOWREGION)) (ROWPROPWIDTH (WINDOWPROP WINDOW 'ROWPROPWIDTH] (LET ((VERTMARKS (WINDOWPROP DISPLAYW 'VERTMARKS)) (ROWPROPS (WINDOWPROP DISPLAYW 'ROWPROPS)) (SPACE (STRINGWIDTH (WINDOWPROP DISPLAYW 'ROWPROPSPACE) WINDOW)) STARTROWPROPS LASTROWPROP STARTVERTMARKS) (for ROWPROP on ROWPROPS as MARK on VERTMARKS until (ILESSP (CAR MARK) TOP) finally (SETQ STARTROWPROPS ROWPROP) (SETQ STARTVERTMARKS MARK)) (for ROWPROP on STARTROWPROPS as MARK in STARTVERTMARKS until (ILESSP MARK BOTTOM) finally (SETQ LASTROWPROP ROWPROP)) [COND (STARTROWPROPS (WITH-INSPECTOR-ENV (WINDOWPROP DISPLAYW 'PROFILE) (bind [FDESCENT _ (SUB1 (FONTPROP WINDOW 'DESCENT] for ROWPROP on STARTROWPROPS as VERTMARK in STARTVERTMARKS repeatuntil (EQ ROWPROP LASTROWPROP) do (MOVETO (- ROWPROPWIDTH (STRINGWIDTH (CAR ROWPROP) WINDOW)) (IPLUS VERTMARK FDESCENT) WINDOW) (PRIN2 (CAR ROWPROP) WINDOW] (INSPECT.INVERTSELECTION WINDOW]) (RIGHTW.RESHAPEFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 10:37 by jop") (CLEARW WINDOW) (RIGHTW.ADJUSTSELECTION WINDOW) (RIGHTW.REPAINTFN WINDOW]) (RIGHTW.BUTTONEVENTFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:48 by jop") (TOTOPW WINDOW) (LET* [(SELECTION (WINDOWPROP WINDOW 'SELECTION)) (MAINWINDOW (MAINWINDOW WINDOW)) (ROWPROPCOMMANDFN (WINDOWPROP MAINWINDOW 'ROWPROPCOMMANDFN] (if ROWPROPCOMMANDFN then (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (if (MOUSESTATE LEFT) then (WINDOWPROP WINDOW 'SELECTION (ONED.TRACKCURSOR WINDOW SELECTION (WINDOWPROP MAINWINDOW 'ROWPROPS) (WINDOWPROP MAINWINDOW 'VERTMARKS) (STRINGWIDTH (WINDOWPROP MAINWINDOW 'ROWPROPSPACE) WINDOW) NIL (FONTPROP WINDOW 'HEIGHT) [FUNCTION (LAMBDA (P W) P] (FUNCTION INSPECT.INVERTREGION))) else (* ; "MOUSESTATE MIDDLE") (if SELECTION then (CL:FUNCALL ROWPROPCOMMANDFN (CAR (fetch (ONED.SELECTION PROP) of SELECTION )) (WINDOWPROP MAINWINDOW 'DATUM) MAINWINDOW]) (RIGHTW.ADJUSTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 10:31 by jop") (PROG ((SELECTION (WINDOWPROP WINDOW 'SELECTION)) (MAINWINDOW (MAINWINDOW WINDOW))) (if SELECTION then (PROG ((ROWPROPSPACE (WINDOWPROP MAINWINDOW 'ROWPROPSPACE)) (ROWPROPS (WINDOWPROP MAINWINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP MAINWINDOW 'VERTMARKS)) (SELROWPROP (fetch (ONED.SELECTION PROP) of SELECTION)) SELBOTTOM SELWIDTH SELLEFT) (SETQ SELBOTTOM (for VMARK in VERTMARKS as ROWPROP on ROWPROPS thereis (EQ ROWPROP SELROWPROP))) (SETQ SELWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (STRINGWIDTH (CAR SELROWPROP) WINDOW T))) (SETQ SELLEFT (STRINGWIDTH ROWPROPSPACE WINDOW)) (WINDOWPROP WINDOW 'SELECTION (create ONED.SELECTION ELTBOTTOM _ SELBOTTOM ELTWIDTH _ SELWIDTH ELTLEFT _ SELLEFT PROP _ SELROWPROP smashing SELECTION]) ) (* ;; "Top window fns") (DEFINEQ (GET-TOPW [LAMBDA (DISPLAYWINDOW FONT) (* ; "Edited 6-Apr-87 14:43 by jop") (LET [(TOPWINDOW (OR (WINDOWPROP DISPLAYWINDOW 'TOPWINDOW) (CREATEW (CREATEREGION 0 0 100 100) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER) T] (WINDOWPROP TOPWINDOW 'REPAINTFN (FUNCTION TOPW.REPAINTFN)) (WINDOWPROP TOPWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP TOPWINDOW 'BUTTONEVENTFN (FUNCTION TOPW.BUTTONEVENTFN)) (WINDOWPROP TOPWINDOW 'SCROLLFN (FUNCTION SCROLLBYREPAINTFN)) (DSPRIGHTMARGIN MAX.SMALLP TOPWINDOW) (* ;  "TOPWINDOW will scroll under program control") (WINDOWPROP TOPWINDOW 'NOSCROLLBARS T) (DSPFONT FONT TOPWINDOW) (WINDOWPROP DISPLAYWINDOW 'TOPWINDOW TOPWINDOW) TOPWINDOW]) (TOPW.REPAINTFN + (INSPECT.INVERTSELECTION WINDOW]) (TWODINSPECT.PRINTELEMENT [LAMBDA (ELT RIGHT BOTTOM FDESCENT WINDOW) (* ; "Edited 5-Apr-87 15:17 by jop") (MOVETO (ADD1 (DIFFERENCE RIGHT (STRINGWIDTH ELT WINDOW T))) (IPLUS BOTTOM FDESCENT) WINDOW) (PRIN2 ELT WINDOW]) (TWODINSPECT.RESHAPEFN [LAMBDA (WINDOW) (* jop%: " 6-Oct-85 18:33") (CLEARW WINDOW) (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (TWODINSPECT.MAKEREGIONS WINDOW) (TWODINSPECT.ADJUSTSELECTION WINDOW) (TWODINSPECT.REPAINTFN WINDOW]) (TWODINSPECT.MAKEREGIONS [LAMBDA (WINDOW) (* ; "Edited 5-Apr-87 16:31 by jop") (* ;; "Sets up windowprops and activeregions") (PROG ((ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (COLUMNWIDTHS (WINDOWPROP WINDOW 'COLUMNWIDTHS)) (SPACE (STRINGWIDTH (WINDOWPROP WINDOW 'COLUMNPROPSPACE) WINDOW)) (WINDOWHEIGHT (WINDOWPROP WINDOW 'HEIGHT)) (LF (DSPLINEFEED NIL WINDOW)) VERTMARKS HORZMARKS) (if (NULL COLUMNWIDTHS) then (SETQ COLUMNWIDTHS (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (TWODINSPECT.COLUMNWIDTHS (WINDOWPROP WINDOW 'DATUM) ROWPROPS COLUMNPROPS (WINDOWPROP WINDOW 'FETCHFN) WINDOW))) (WINDOWPROP WINDOW 'COLUMNWIDTHS COLUMNWIDTHS)) (* ;  "VERTMARKS and HORZMARKS mark endpoints") (SETQ VERTMARKS (for I from 1 to (LENGTH ROWPROPS) as MARK from (IPLUS WINDOWHEIGHT LF) by LF collect MARK)) [SETQ HORZMARKS (bind (MARK _ -1) for I from 1 to (LENGTH COLUMNPROPS) as COLUMNWIDTH in COLUMNWIDTHS collect (SETQ MARK (IPLUS MARK SPACE COLUMNWIDTH] (WINDOWPROP WINDOW 'VERTMARKS VERTMARKS) (WINDOWPROP WINDOW 'HORZMARKS HORZMARKS) [WINDOWPROP WINDOW 'EXTENT (CREATEREGION 0 (CAR (LAST VERTMARKS)) (CAR (LAST HORZMARKS)) (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS] [WINDOWPROP (WINDOWPROP WINDOW 'TOPWINDOW) 'EXTENT (CREATEREGION 0 0 (CAR (LAST HORZMARKS)) (WINDOWPROP (WINDOWPROP WINDOW 'TOPWINDOW) 'HEIGHT] (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'EXTENT (CREATEREGION 0 (CAR (LAST VERTMARKS)) (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'WIDTH) (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS]) (TWODINSPECT.BUTTONEVENTFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:28 by jop") (TOTOPW WINDOW) (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (if (MOUSESTATE LEFT) then (WINDOWPROP WINDOW 'SELECTION (TWOD.TRACKCURSOR WINDOW SELECTION (WINDOWPROP WINDOW 'ROWPROPS) (WINDOWPROP WINDOW 'VERTMARKS) (WINDOWPROP WINDOW 'COLUMNPROPS) (WINDOWPROP WINDOW 'HORZMARKS) (FONTPROP WINDOW 'HEIGHT) [FUNCTION (LAMBDA (RP CP W) (CL:FUNCALL (WINDOWPROP W 'FETCHFN) (WINDOWPROP W 'DATUM) RP CP] (FUNCTION INSPECT.INVERTREGION))) else (* ; "MOUSESTATE MIDDLE") (if SELECTION then (LET [(DATUM (WINDOWPROP WINDOW 'DATUM)) (SELECTEDROWPROP (CAR (fetch (TWOD.SELECTION ROWPROP) of SELECTION))) (SELECTEDCOLUMNPROP (CAR (fetch (TWOD.SELECTION COLUMNPROP) of SELECTION] (CL:FUNCALL (WINDOWPROP WINDOW 'VALUECOMMANDFN) (CL:FUNCALL (WINDOWPROP WINDOW 'FETCHFN) DATUM SELECTEDROWPROP SELECTEDCOLUMNPROP) SELECTEDROWPROP SELECTEDCOLUMNPROP DATUM WINDOW]) (TWODINSPECT.COPYBUTTONFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:32 by jop") (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (TOTOPW WINDOW) (bind SELECTION while (.COPYKEYDOWNP.) do (BLOCK) (SETQ SELECTION (TWOD.TRACKCURSOR WINDOW SELECTION (WINDOWPROP WINDOW 'ROWPROPS) (WINDOWPROP WINDOW 'VERTMARKS) (WINDOWPROP WINDOW 'COLUMNPROPS) (WINDOWPROP WINDOW 'HORZMARKS) 2 [FUNCTION (LAMBDA (RP CP W) (CL:FUNCALL (WINDOWPROP W 'FETCHFN) (WINDOWPROP W 'DATUM) RP CP] (FUNCTION INSPECT.FLIPSELECTION))) finally (if SELECTION then (INSPECT.FLIPSELECTION (fetch (TWOD.SELECTION ELTLEFT) of SELECTION) (fetch (TWOD.SELECTION ELTBOTTOM) of SELECTION) (fetch (TWOD.SELECTION ELTWIDTH) of SELECTION) 2 WINDOW) (BKSYSBUF.GENERAL (CL:FUNCALL (WINDOWPROP WINDOW 'FETCHFN) (WINDOWPROP WINDOW 'DATUM) (CAR (fetch (TWOD.SELECTION ROWPROP) of SELECTION)) (CAR (fetch (TWOD.SELECTION COLUMNPROP) of SELECTION]) (TWODINSPECT.DOWINDOWCOMFN [LAMBDA (TWODWINDOW) (* ; "Edited 6-Apr-87 12:05 by jop") (* ;; "Pass on the usual comms, except for SHAPEW") (PROG (COM) (SETQ COM (MENU WindowMenu)) (SELECTQ COM (NIL NIL) (SHAPEW [SHAPEW TWODWINDOW (GETREGION NIL NIL NIL (FUNCTION ICMLARRAY.GETREGIONFN) (CONS TWODWINDOW 'CLOSED]) ((MOVEW CLOSEW SHRINKW BURYW) (APPLY* COM (MAINWINDOW TWODWINDOW))) (APPLY* COM TWODWINDOW]) (TWODINSPECT.SCROLLFN [LAMBDA (WINDOW DX DY FLG) (* ; "Edited 19-Feb-2021 13:38 by rmk:") (* jop%: "18-Jul-85 13:50") (PROG [(TOPWINDOW (WINDOWPROP WINDOW 'TOPWINDOW)) (RIGHTWINDOW (WINDOWPROP WINDOW 'RIGHTWINDOW] (if (OR (NOT (EQP 0 DX)) (FLOATP DX)) then (APPLY* (WINDOWPROP TOPWINDOW 'SCROLLFN) TOPWINDOW DX 0 FLG)) (if (OR (NOT (EQP 0 DY)) (FLOATP DY)) then (APPLY* (OR (WINDOWPROP RIGHTWINDOW 'SCROLLFN) (FUNCTION SCROLLBYREPAINTFN)) RIGHTWINDOW 0 DY FLG)) (SCROLLBYREPAINTFN WINDOW DX DY FLG]) (TWODINSPECT.CLOSEFN [LAMBDA (WINDOW) (* jop%: " 4-Oct-85 17:51") (DETACHALLWINDOWS (WINDOWPROP WINDOW 'RIGHTWINDOW)) (DETACHALLWINDOWS WINDOW) (WINDOWPROP WINDOW 'SELECTION NIL) (WINDOWPROP (WINDOWPROP WINDOW 'RIGHTWINDOW) 'SELECTION NIL) (WINDOWPROP (WINDOWPROP WINDOW 'TOPWINDOW) 'SELECTION NIL]) (TWODINSPECT.REDISPLAY [LAMBDA (WINDOW ELTROWPROPS ELTCOLUMNPROPS) (* ; "Edited 8-Apr-87 17:00 by jop") (* ;; "ELTROWPROPS and ELTCOLUMNPROPS may be single entries, lists, or NIL. If NIL than the whole inspector is refetched and redisplayed") (if (AND ELTROWPROPS (NLISTP ELTROWPROPS)) then (SETQ ELTROWPROPS (LIST ELTROWPROPS))) (if (AND ELTCOLUMNPROPS (NLISTP ELTCOLUMNPROPS)) then (SETQ ELTCOLUMNPROPS (LIST ELTCOLUMNPROPS))) (PROG ((FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (DATUM (WINDOWPROP WINDOW 'DATUM)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (COLUMNWIDTHS (WINDOWPROP WINDOW 'COLUMNWIDTHS)) (SELECTION (WINDOWPROP WINDOW 'SELECTION)) ELTCOLUMNWIDTHS ELTS ELTRIGHTS ELTBOTTOMS) [SETQ ELTS (for RPROP in ELTROWPROPS join (for CPROP in ELTCOLUMNPROPS collect (APPLY* FETCHFN DATUM RPROP CPROP] [SETQ ELTCOLUMNWIDTHS (for RPROP in ELTROWPROPS join (for CPROP in ELTCOLUMNPROPS collect (for COLWIDTH in COLUMNWIDTHS as COLPROP in COLUMNPROPS thereis (EQUAL COLPROP CPROP] [SETQ ELTRIGHTS (for RPROP in ELTROWPROPS join (for CPROP in ELTCOLUMNPROPS collect (for HMARK in HORZMARKS as COLPROP in COLUMNPROPS thereis (EQUAL COLPROP CPROP] [SETQ ELTBOTTOMS (for RPROP in ELTROWPROPS join (for CPROP in ELTCOLUMNPROPS collect (for VMARK in VERTMARKS as ROWPROP in ROWPROPS thereis (EQUAL ROWPROP RPROP] (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (if (AND ELTS (for ELT in ELTS as COLUMNWIDTH in ELTCOLUMNWIDTHS never (IGREATERP (STRINGWIDTH ELT WINDOW T) COLUMNWIDTH))) then (INSPECT.INVERTSELECTION WINDOW) (bind (FHEIGHT _ (FONTPROP WINDOW 'HEIGHT)) (FDESCENT _ (FONTPROP WINDOW 'DESCENT)) for ELT in ELTS as RIGHT in ELTRIGHTS as BOTTOM in ELTBOTTOMS as COLUMNWIDTH in ELTCOLUMNWIDTHS do (BITBLT NIL NIL NIL WINDOW (IDIFFERENCE (ADD1 RIGHT) COLUMNWIDTH) BOTTOM COLUMNWIDTH FHEIGHT 'TEXTURE 'REPLACE WHITESHADE) (TWODINSPECT.PRINTELEMENT ELT RIGHT BOTTOM FDESCENT WINDOW)) (TWODINSPECT.ADJUSTSELECTION WINDOW) (INSPECT.INVERTSELECTION WINDOW) else (* ; "Recompute the whole picture") (WINDOWPROP WINDOW 'COLUMNWIDTHS NIL) (TWODINSPECT.MAKEREGIONS WINDOW) (TWODINSPECT.ADJUSTSELECTION WINDOW) (DSPRESET WINDOW) (TWODINSPECT.REPAINTFN WINDOW) (DSPRESET (WINDOWPROP WINDOW 'TOPWINDOW)) (TOPW.REPAINTFN (WINDOWPROP WINDOW 'TOPWINDOW)) (DSPRESET (WINDOWPROP WINDOW 'RIGHTWINDOW)) (RIGHTW.REPAINTFN (WINDOWPROP WINDOW 'RIGHTWINDOW]) (TWODINSPECT.REPLACE [LAMBDA (WINDOW ROWPROP COLUMNPROP NEWVALUE) (* jop%: "30-Sep-85 20:44") (PROG [(DATUM (WINDOWPROP WINDOW 'DATUM)) (STOREFN (WINDOWPROP WINDOW 'STOREFN] (APPLY* STOREFN NEWVALUE DATUM ROWPROP COLUMNPROP) (TWODINSPECT.REDISPLAY WINDOW ROWPROP COLUMNPROP]) (TWODINSPECT.SELECTITEM [LAMBDA (WINDOW ROWPROP COLUMNPROP) (* ; "Edited 6-Apr-87 12:05 by jop") (if (WINDOWPROP WINDOW 'SELECTION) then (INSPECT.INVERTSELECTION WINDOW)) (if (AND ROWPROP COLUMNPROP) then (PROG ((DATUM (WINDOWPROP WINDOW 'DATUM)) (FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) SELECTEDROWPROP SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (SETQ SELECTEDROWPROP (for RPROP on ROWPROPS thereis (EQUAL (CAR RPROP) ROWPROP))) (SETQ SELECTEDCOLUMNPROP (for CPROP on COLUMNPROPS thereis (EQUAL (CAR CPROP) COLUMNPROP))) (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as RPROP on ROWPROPS thereis (EQ RPROP SELECTEDROWPROP))) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (APPLY* FETCHFN DATUM ROWPROP COLUMNPROP) WINDOW T))) (SETQ SELECTEDELTLEFT (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as CPROP on COLUMNPROPS thereis (EQ CPROP SELECTEDCOLUMNPROP))) SELECTEDELTWIDTH)) (INSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) WINDOW) (WINDOWPROP WINDOW 'SELECTION (create TWOD.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM ROWPROP _ SELECTEDROWPROP COLUMNPROP _ SELECTEDCOLUMNPROP]) (TWODINSPECT.SELECTROWPROP [LAMBDA (WINDOW ROWPROP) (* ; "Edited 6-Apr-87 12:07 by jop") (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW 'RIGHTWINDOW] (if (WINDOWPROP RIGHTWINDOW 'SELECTION) then (INSPECT.INVERTSELECTION RIGHTWINDOW)) (PROG ((ROWPROPSPACE (WINDOWPROP WINDOW 'ROWPROPSPACE)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) SELECTEDROWPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (SETQ SELECTEDROWPROP (for RPROP on ROWPROPS thereis (EQUAL (CAR RPROP) ROWPROP))) (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as RPROP on ROWPROPS thereis (EQ RPROP SELECTEDROWPROP))) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (CAR SELECTEDROWPROP) WINDOW T))) (SETQ SELECTEDELTLEFT (STRINGWIDTH ROWPROPSPACE WINDOW)) (INSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) RIGHTWINDOW) (WINDOWPROP RIGHTWINDOW 'SELECTION (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDROWPROP]) (TWODINSPECT.SELECTCOLUMNPROP [LAMBDA (WINDOW COLUMNPROP) (* ; "Edited 6-Apr-87 12:08 by jop") (PROG [(TOPWINDOW (WINDOWPROP WINDOW 'TOPWINDOW] (if (WINDOWPROP TOPWINDOW 'SELECTION) then (INSPECT.INVERTSELECTION TOPWINDOW)) (PROG ((COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (SETQ SELECTEDCOLUMNPROP (for CPROP on COLUMNPROPS thereis (EQUAL (CAR CPROP) COLUMNPROP))) (SETQ SELECTEDELTBOTTOM 0) (SETQ SELECTEDELTWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (CAR SELECTEDCOLUMNPROP) WINDOW T))) (SETQ SELECTEDELTLEFT (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as CPROP on COLUMNPROPS thereis (EQ CPROP SELECTEDCOLUMNPROP) )) SELECTEDELTWIDTH)) (INSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH (FONTPROP WINDOW 'HEIGHT) TOPWINDOW) (WINDOWPROP TOPWINDOW 'SELECTION (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDCOLUMNPROP]) (TWODINSPECT.ADJUSTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 12:06 by jop") (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (if SELECTION then (PROG ((DATUM (WINDOWPROP WINDOW 'DATUM)) (FETCHFN (WINDOWPROP WINDOW 'FETCHFN)) (ROWPROPS (WINDOWPROP WINDOW 'ROWPROPS)) (COLUMNPROPS (WINDOWPROP WINDOW 'COLUMNPROPS)) (VERTMARKS (WINDOWPROP WINDOW 'VERTMARKS)) (HORZMARKS (WINDOWPROP WINDOW 'HORZMARKS)) (SELROWPROP (fetch (TWOD.SELECTION ROWPROP) of SELECTION)) (SELCOLPROP (fetch (TWOD.SELECTION COLUMNPROP) of SELECTION)) SELBOTTOM SELWIDTH SELLEFT) (SETQ SELBOTTOM (for VMARK in VERTMARKS as ROWPROP on ROWPROPS thereis (EQ ROWPROP SELROWPROP))) (SETQ SELWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (STRINGWIDTH (APPLY* FETCHFN DATUM (CAR SELROWPROP ) (CAR SELCOLPROP)) WINDOW T))) (SETQ SELLEFT (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as COLPROP on COLUMNPROPS thereis (EQ COLPROP SELCOLPROP))) SELWIDTH)) (WINDOWPROP WINDOW 'SELECTION (create TWOD.SELECTION ELTBOTTOM _ SELBOTTOM ELTWIDTH _ SELWIDTH ELTLEFT _ SELLEFT ROWPROP _ SELROWPROP COLUMNPROP _ SELCOLPROP]) (TWODINSPECT.DEFAULT.TITLECOMMANDFN [LAMBDA (WINDOW) (* ; "Edited 20-Jul-90 20:54 by yabu") (if (MOUSESTATE MIDDLE) then (PROG [(TITLEMENU (CONSTANT (\CREATE.TWODINSPECTOR.TITLEMENU))) (* ; "Original was (create MENU ITEMS _ '((%"Refetch%" 'REFETCH %"Refetch the datum%") (%"IT _ Datum%" 'IT %"Bind IT to the inspected datum%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") (DATUM (WINDOWPROP WINDOW 'DATUM] (SELECTQ (MENU TITLEMENU) (REFETCH (TWODINSPECT.REDISPLAY WINDOW)) (IT (SETQ IT DATUM) (PROMPTPRINT "IT bound to " DATUM)) NIL]) (TWODINSPECT.DEFAULT.VALUECOMMANDFN [LAMBDA (VALUE ROWPROP COLUMNPROP DATUM WINDOW) (* ; "Edited 20-Jul-90 21:03 by yabu") (PROG ((SETMENU (CONSTANT (\CREATE.TWODINSPECTOR.SETMENU))) (* ; "Original was (create MENU ITEMS _ '((%"IT _ Selection%" 'IT %"Bind IT to the value of the selected entry%") (%"Set%" 'SET %"Set the selected entry%"))).") (* ;  "Changed by yabu.fx, for SUNLOADUP without DWIM.") (INSPECTMENU (CONSTANT (\CREATE.TWODINSPECTOR.INSPECTMENU))) (* ; "Original was (create MENU ITEMS _ '((%"Inspect%" 'INSPECT %"Inspect the value of the selected entry%") (%"IT _ Selection%" 'IT %"Bind IT to the value of the selected entry%") (%"Set%" 'SET %"Set the selected entry%"))).") (* ;  " Changed by yabu.fx, for SUNLOADUP without DWIM.") ) (SELECTQ (if (OR (NULL VALUE) (NUMBERP VALUE)) then (MENU SETMENU) else (MENU INSPECTMENU)) (INSPECT (INSPECT VALUE)) (IT (SETQ IT VALUE) (PROMPTPRINT "IT bound to " IT)) (SET (TWODINSPECT.SETELT ROWPROP COLUMNPROP WINDOW)) NIL]) (TWODINSPECT.SETELT [LAMBDA (ROWPROP COLUMNPROP WINDOW) (* ; "Edited 5-Apr-87 16:41 by jop") (PROG ((PRTWINDOW (GETPROMPTWINDOW WINDOW)) (NEWVALUE (APPLY* (WINDOWPROP WINDOW 'FETCHFN) (WINDOWPROP WINDOW 'DATUM) ROWPROP COLUMNPROP))) (WITH-INSPECTOR-ENV (WINDOWPROP WINDOW 'PROFILE) (RESETLST (RESETSAVE (TTYDISPLAYSTREAM PRTWINDOW)) (RESETSAVE (TTY.PROCESS (THIS.PROCESS))) (CLEARBUF T T) (printout T "Eval> ") (SETQ NEWVALUE (CL:FUNCALL XCL:*EVAL-FUNCTION* (LISPXREAD T T))) (* ;  "clear tty buffer because it sometimes has stuff left.") (CLEARBUF T T))) (REMOVEPROMPTWINDOW WINDOW) (TWODINSPECT.REPLACE WINDOW ROWPROP COLUMNPROP NEWVALUE]) (TWODINSPECT.ROWPROPWIDTH [LAMBDA (ROWPROPS FONT) (* ; "Edited 5-Apr-87 16:33 by jop") (for ROWPROP in ROWPROPS largest (STRINGWIDTH ROWPROP FONT T) finally (RETURN $$EXTREME]) (TWODINSPECT.COLUMNWIDTHS [LAMBDA (DATUM ROWPROPS COLUMNPROPS FETCHFN FONT) (* ; "Edited 5-Apr-87 15:38 by jop") (* ;; "Computes the MIN fieldwidth for the jth column of SLICE") (for COLUMNPROP in COLUMNPROPS collect (TWODINSPECT.COLUMNWIDTH DATUM ROWPROPS COLUMNPROP FETCHFN FONT]) (TWODINSPECT.COLUMNWIDTH [LAMBDA (DATUM ROWPROPS COLUMNPROP FETCHFN FONT) (* ; "Edited 5-Apr-87 16:29 by jop") (* ;; "Computes the MIN fieldwidth for the COLUMNPROP column of SLICE") (IMAX (STRINGWIDTH COLUMNPROP FONT T) (for ROWPROP in ROWPROPS largest (STRINGWIDTH (APPLY* FETCHFN DATUM ROWPROP COLUMNPROP) FONT T) finally (RETURN $$EXTREME]) (TWODINSPECT.TOTALWIDTH [LAMBDA (COLUMNWIDTHS SPACE FONT) (* jop%: "25-Sep-85 13:21") (IPLUS (ITIMES (LENGTH COLUMNWIDTHS) (STRINGWIDTH SPACE FONT)) (for COLUMN in COLUMNWIDTHS sum COLUMN]) ) (* ;; "Right window fns") (DEFINEQ (GET-RIGHTW [LAMBDA (DISPLAYWINDOW FONT) (* ; "Edited 19-Feb-2021 12:16 by rmk:") (* ; "Edited 6-Apr-87 12:14 by jop") (LET [(RIGHTWINDOW (OR (WINDOWPROP DISPLAYWINDOW 'RIGHTWINDOW) (CREATEW (CREATEREGION 0 0 100 100) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER) T] (WINDOWPROP RIGHTWINDOW 'REPAINTFN (FUNCTION RIGHTW.REPAINTFN)) (WINDOWPROP RIGHTWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP RIGHTWINDOW 'BUTTONEVENTFN (FUNCTION RIGHTW.BUTTONEVENTFN)) (* ;; "RMK: The rightwindow should only scroll as a consequence of left-window scrolling. If it were to scroll on its own, the parallelism would be lost. The left-window scroller knows to do the SCROLLBYREPAINTFN on the right window") (* (WINDOWPROP RIGHTWINDOW  (QUOTE SCROLLFN) (FUNCTION  SCROLLBYREPAINTFN))) (WINDOWPROP RIGHTWINDOW 'NOSCROLLBARS T) (DSPFONT FONT RIGHTWINDOW) (WINDOWPROP DISPLAYWINDOW 'RIGHTWINDOW RIGHTWINDOW) RIGHTWINDOW]) (RIGHTW.REPAINTFN [LAMBDA (WINDOW WINDOWREGION) (* ; "Edited 19-Feb-2021 13:37 by rmk:") (* ; "Edited 22-May-92 17:37 by jds") (* ;; "RMK: Right justify the PROP in its window (assuming its a numeric index)") (* ;;  "REPAINT the right-hand window of a two-d inspector. This window contains the element indices.") [COND ((NULL WINDOWREGION) (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW] (LET [(DISPLAYW (MAINWINDOW WINDOW)) (TOP (fetch (REGION TOP) of WINDOWREGION)) (BOTTOM (fetch (REGION BOTTOM) of WINDOWREGION)) (ROWPROPWIDTH (WINDOWPROP WINDOW 'ROWPROPWIDTH] (LET ((VERTMARKS (WINDOWPROP DISPLAYW 'VERTMARKS)) (ROWPROPS (WINDOWPROP DISPLAYW 'ROWPROPS)) (SPACE (STRINGWIDTH (WINDOWPROP DISPLAYW 'ROWPROPSPACE) WINDOW)) STARTROWPROPS LASTROWPROP STARTVERTMARKS) (for ROWPROP on ROWPROPS as MARK on VERTMARKS until (ILESSP (CAR MARK) TOP) finally (SETQ STARTROWPROPS ROWPROP) (SETQ STARTVERTMARKS MARK)) (for ROWPROP on STARTROWPROPS as MARK in STARTVERTMARKS until (ILESSP MARK BOTTOM) finally (SETQ LASTROWPROP ROWPROP)) [COND (STARTROWPROPS (WITH-INSPECTOR-ENV (WINDOWPROP DISPLAYW 'PROFILE) (bind [FDESCENT _ (SUB1 (FONTPROP WINDOW 'DESCENT] for ROWPROP on STARTROWPROPS as VERTMARK in STARTVERTMARKS repeatuntil (EQ ROWPROP LASTROWPROP) do (MOVETO (- ROWPROPWIDTH (STRINGWIDTH (CAR ROWPROP) WINDOW)) (IPLUS VERTMARK FDESCENT) WINDOW) (PRIN2 (CAR ROWPROP) WINDOW] (INSPECT.INVERTSELECTION WINDOW]) (RIGHTW.RESHAPEFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 10:37 by jop") (CLEARW WINDOW) (RIGHTW.ADJUSTSELECTION WINDOW) (RIGHTW.REPAINTFN WINDOW]) (RIGHTW.BUTTONEVENTFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:48 by jop") (TOTOPW WINDOW) (LET* [(SELECTION (WINDOWPROP WINDOW 'SELECTION)) (MAINWINDOW (MAINWINDOW WINDOW)) (ROWPROPCOMMANDFN (WINDOWPROP MAINWINDOW 'ROWPROPCOMMANDFN] (if ROWPROPCOMMANDFN then (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (if (MOUSESTATE LEFT) then (WINDOWPROP WINDOW 'SELECTION (ONED.TRACKCURSOR WINDOW SELECTION (WINDOWPROP MAINWINDOW 'ROWPROPS) (WINDOWPROP MAINWINDOW 'VERTMARKS) (STRINGWIDTH (WINDOWPROP MAINWINDOW 'ROWPROPSPACE) WINDOW) NIL (FONTPROP WINDOW 'HEIGHT) [FUNCTION (LAMBDA (P W) P] (FUNCTION INSPECT.INVERTREGION))) else (* ; "MOUSESTATE MIDDLE") (if SELECTION then (CL:FUNCALL ROWPROPCOMMANDFN (CAR (fetch (ONED.SELECTION PROP) of SELECTION )) (WINDOWPROP MAINWINDOW 'DATUM) MAINWINDOW]) (RIGHTW.ADJUSTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 10:31 by jop") (PROG ((SELECTION (WINDOWPROP WINDOW 'SELECTION)) (MAINWINDOW (MAINWINDOW WINDOW))) (if SELECTION then (PROG ((ROWPROPSPACE (WINDOWPROP MAINWINDOW 'ROWPROPSPACE)) (ROWPROPS (WINDOWPROP MAINWINDOW 'ROWPROPS)) (VERTMARKS (WINDOWPROP MAINWINDOW 'VERTMARKS)) (SELROWPROP (fetch (ONED.SELECTION PROP) of SELECTION)) SELBOTTOM SELWIDTH SELLEFT) (SETQ SELBOTTOM (for VMARK in VERTMARKS as ROWPROP on ROWPROPS thereis (EQ ROWPROP SELROWPROP))) (SETQ SELWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (STRINGWIDTH (CAR SELROWPROP) WINDOW T))) (SETQ SELLEFT (STRINGWIDTH ROWPROPSPACE WINDOW)) (WINDOWPROP WINDOW 'SELECTION (create ONED.SELECTION ELTBOTTOM _ SELBOTTOM ELTWIDTH _ SELWIDTH ELTLEFT _ SELLEFT PROP _ SELROWPROP smashing SELECTION]) ) (* ;; "Top window fns") (DEFINEQ (GET-TOPW [LAMBDA (DISPLAYWINDOW FONT) (* ; "Edited 6-Apr-87 14:43 by jop") (LET [(TOPWINDOW (OR (WINDOWPROP DISPLAYWINDOW 'TOPWINDOW) (CREATEW (CREATEREGION 0 0 100 100) NIL (WINDOWPROP DISPLAYWINDOW 'BORDER) T] (WINDOWPROP TOPWINDOW 'REPAINTFN (FUNCTION TOPW.REPAINTFN)) (WINDOWPROP TOPWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP TOPWINDOW 'BUTTONEVENTFN (FUNCTION TOPW.BUTTONEVENTFN)) (WINDOWPROP TOPWINDOW 'SCROLLFN (FUNCTION SCROLLBYREPAINTFN)) (DSPRIGHTMARGIN MAX.SMALLP TOPWINDOW) (* ;  "TOPWINDOW will scroll under program control") (WINDOWPROP TOPWINDOW 'NOSCROLLBARS T) (DSPFONT FONT TOPWINDOW) (WINDOWPROP DISPLAYWINDOW 'TOPWINDOW TOPWINDOW) TOPWINDOW]) (TOPW.REPAINTFN [LAMBDA (WINDOW WINDOWREGION) (* ; "Edited 6-Apr-87 11:12 by jop") (if (NULL WINDOWREGION) then (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW))) @@ -204,4 +114,4 @@ BOTTOM WINDOW) (PRIN2 (CAR COLUMNPROP) WINDOW] - (INSPECT.INVERTSELECTION WINDOW]) (TOPW.RESHAPEFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:55 by jop") (CLEARW WINDOW) (TOPW.ADJUSTSELECTION WINDOW) (TOPW.REPAINTFN WINDOW (DSPCLIPPINGREGION NIL WINDOW]) (TOPW.ADJUSTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:54 by jop") (PROG ((SELECTION (WINDOWPROP WINDOW 'SELECTION)) (MAINWINDOW (MAINWINDOW WINDOW))) (if SELECTION then (PROG ((COLUMNPROPS (WINDOWPROP MAINWINDOW 'COLUMNPROPS)) (HORZMARKS (WINDOWPROP MAINWINDOW 'HORZMARKS)) (SELCOLPROP (fetch (ONED.SELECTION PROP) of SELECTION)) SELBOTTOM SELWIDTH SELLEFT) (SETQ SELBOTTOM 0) (SETQ SELWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (STRINGWIDTH (CAR SELCOLPROP) WINDOW T))) (SETQ SELLEFT (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as COLPROP on COLUMNPROPS thereis (EQ COLPROP SELCOLPROP))) SELWIDTH)) (WINDOWPROP WINDOW 'SELECTION (create ONED.SELECTION ELTBOTTOM _ SELBOTTOM ELTWIDTH _ SELWIDTH ELTLEFT _ SELLEFT PROP _ SELCOLPROP]) (TOPW.BUTTONEVENTFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:43 by jop") (TOTOPW WINDOW) (LET* [(SELECTION (WINDOWPROP WINDOW 'SELECTION)) (MAINWINDOW (MAINWINDOW WINDOW)) (COLUMNPROPCOMMANDFN (WINDOWPROP MAINWINDOW 'COLUMNPROPCOMMANDFN] (if COLUMNPROPCOMMANDFN then (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (if (MOUSESTATE LEFT) then (WINDOWPROP WINDOW 'SELECTION (ONED.TRACKCURSOR WINDOW SELECTION (WINDOWPROP MAINWINDOW 'COLUMNPROPS) (WINDOWPROP MAINWINDOW 'HORZMARKS) NIL 0 (FONTPROP WINDOW 'HEIGHT) [FUNCTION (LAMBDA (P W) P] (FUNCTION INSPECT.INVERTREGION) T)) else (* ; "MOUSESTATE MIDDLE") (if SELECTION then (CL:FUNCALL COLUMNPROPCOMMANDFN (CAR (fetch (ONED.SELECTION PROP) of SELECTION)) (WINDOWPROP MAINWINDOW 'DATUM) MAINWINDOW]) ) (* ;; "Title window fns") (DEFINEQ (GET-TITLEW [LAMBDA (DISPLAYWINDOW TITLE TITLEFONT DATUM) (* ; "Edited 6-Apr-87 17:02 by jop") (LET [(TITLEWINDOW (OR (WINDOWPROP DISPLAYWINDOW 'TITLEWINDOW) (CREATEW (CREATEREGION 0 0 100 100) NIL 1 T] (WINDOWPROP TITLEWINDOW 'REPAINTFN (FUNCTION TITLEW.REPAINTFN)) (WINDOWPROP TITLEWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP TITLEWINDOW 'BUTTONEVENTFN (FUNCTION TITLEW.BUTTONEVENTFN)) (DSPFONT TITLEFONT TITLEWINDOW) (DSPOPERATION 'INVERT TITLEWINDOW) (WINDOWPROP TITLEWINDOW 'INSPECTTITLE (OR TITLE (CONCAT DATUM " Inspector"))) (WINDOWPROP DISPLAYWINDOW 'TITLEWINDOW TITLEWINDOW) TITLEWINDOW]) (TITLEW.REPAINTFN [LAMBDA (WINDOW) (* ; "Edited 5-Apr-87 14:50 by jop") (BITBLT NIL NIL NIL WINDOW NIL NIL NIL NIL 'TEXTURE 'REPLACE BLACKSHADE) (MOVETOUPPERLEFT WINDOW) (PRINTOUT WINDOW (WINDOWPROP WINDOW 'INSPECTTITLE]) (TITLEW.BUTTONEVENTFN [LAMBDA (TITLEWINDOW) (* ; "Edited 5-Apr-87 16:41 by jop") (PROG ((MAINWINDOW (MAINWINDOW TITLEWINDOW)) TITLECOMMANDFN) (SETQ TITLECOMMANDFN (WINDOWPROP MAINWINDOW 'TITLECOMMANDFN)) (if TITLECOMMANDFN then (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (APPLY* TITLECOMMANDFN MAINWINDOW]) ) (* ;; "Utilites ") (DEFINEQ (ONED.TRACKCURSOR [LAMBDA (WINDOW SELECTION PROPS MARKS LEFT BOTTOM HEIGHT NEW-ITEM-FN HIGHLIGHT-FN HORIZONTAL-P) (* ; "Edited 6-Apr-87 17:41 by jop") (LET (SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH SELECTEDPROP) (if SELECTION then (SETQ SELECTEDELTBOTTOM (fetch (ONED.SELECTION ELTBOTTOM) of SELECTION)) (SETQ SELECTEDELTLEFT (fetch (ONED.SELECTION ELTLEFT) of SELECTION)) (SETQ SELECTEDELTWIDTH (fetch (ONED.SELECTION ELTWIDTH) of SELECTION)) (SETQ SELECTEDPROP (fetch (ONED.SELECTION PROP) of SELECTION))) (bind X Y NEWPROP WIDTH while (MOUSESTATE LEFT) do (SETQ X (LASTMOUSEX WINDOW)) (SETQ Y (LASTMOUSEY WINDOW)) [if (NOT HORIZONTAL-P) then [for PROP on PROPS as MARK in MARKS until (ILESSP MARK Y) finally (if PROP then (SETQ WIDTH (STRINGWIDTH (CL:FUNCALL NEW-ITEM-FN (CAR PROP) WINDOW) WINDOW T)) (SETQ BOTTOM MARK) (* ;  "Select the new region only if the cursor is inside the element box") (SETQ NEWPROP (AND [NOT (OR (ILESSP X LEFT) (IGREATERP X (IPLUS LEFT WIDTH] PROP] else (for PROP on PROPS as MARK in MARKS until (IGREATERP MARK X) finally (if PROP then (SETQ WIDTH (STRINGWIDTH (CL:FUNCALL NEW-ITEM-FN (CAR PROP) WINDOW) WINDOW T)) (SETQ LEFT (ADD1 (IDIFFERENCE MARK WIDTH))) (SETQ NEWPROP (AND (NOT (ILESSP X LEFT)) PROP] (if (NEQ NEWPROP SELECTEDPROP) then (* ;  "We need to consider highlighting a new region") (if SELECTEDPROP then (* ; "Lowlight the old region") (CL:FUNCALL HIGHLIGHT-FN SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH HEIGHT WINDOW) (SETQ SELECTEDPROP NIL)) (if NEWPROP then (* ;  "cursor inside element box, highlight that box") (CL:FUNCALL HIGHLIGHT-FN LEFT BOTTOM WIDTH HEIGHT WINDOW) (SETQ SELECTEDPROP NEWPROP) (SETQ SELECTEDELTWIDTH WIDTH) (SETQ SELECTEDELTLEFT LEFT) (SETQ SELECTEDELTBOTTOM BOTTOM))) finally (if SELECTEDPROP then (if (NULL SELECTION) then (SETQ SELECTION (create ONED.SELECTION))) (RETURN (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDPROP smashing SELECTION]) (TWOD.TRACKCURSOR [LAMBDA (WINDOW SELECTION ROWPROPS VERTMARKS COLUMNPROPS HORZMARKS HEIGHT NEW-ITEM-FN HIGHLIGHT-FN) (* ; "Edited 6-Apr-87 18:36 by jop") (TOTOPW WINDOW) (LET (SELECTEDROWPROP SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (if SELECTION then (SETQ SELECTEDROWPROP (fetch (TWOD.SELECTION ROWPROP) of SELECTION)) (SETQ SELECTEDCOLUMNPROP (fetch (TWOD.SELECTION COLUMNPROP) of SELECTION)) (SETQ SELECTEDELTBOTTOM (fetch (TWOD.SELECTION ELTBOTTOM) of SELECTION)) (SETQ SELECTEDELTLEFT (fetch (TWOD.SELECTION ELTLEFT) of SELECTION)) (SETQ SELECTEDELTWIDTH (fetch (TWOD.SELECTION ELTWIDTH) of SELECTION))) (bind NEWROWPROP NEWCOLUMNPROP NEWHORZMARK LEFT BOTTOM WIDTH X Y while (MOUSESTATE LEFT) do (SETQ X (LASTMOUSEX WINDOW)) (SETQ Y (LASTMOUSEY WINDOW)) (for ROWPROP on ROWPROPS as VERTMARK in VERTMARKS until (ILESSP VERTMARK Y) finally (SETQ NEWROWPROP ROWPROP) (SETQ BOTTOM VERTMARK)) (for COLUMNPROP on COLUMNPROPS as HORZMARK in HORZMARKS until (IGREATERP HORZMARK X) finally (SETQ NEWCOLUMNPROP COLUMNPROP) (SETQ NEWHORZMARK HORZMARK)) (if (AND NEWROWPROP NEWCOLUMNPROP) then (SETQ WIDTH (STRINGWIDTH (CL:FUNCALL NEW-ITEM-FN (CAR NEWROWPROP) (CAR NEWCOLUMNPROP) WINDOW) WINDOW T)) (SETQ LEFT (ADD1 (IDIFFERENCE NEWHORZMARK WIDTH))) (* ;  "Select the new region only if the cursor is inside the element box") (if (ILESSP X LEFT) then (SETQ NEWROWPROP NIL) (SETQ NEWCOLUMNPROP NIL))) (if (OR (NEQ NEWROWPROP SELECTEDROWPROP) (NEQ NEWCOLUMNPROP SELECTEDCOLUMNPROP)) then (* ;  "We need to consider highlighting a new region") (if (AND SELECTEDROWPROP SELECTEDCOLUMNPROP) then (* ; "Lowlight the old region") (CL:FUNCALL HIGHLIGHT-FN SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH HEIGHT WINDOW) (SETQ SELECTEDROWPROP NIL) (SETQ SELECTEDCOLUMNPROP NIL)) (if (AND NEWROWPROP NEWCOLUMNPROP) then (* ;  "cursor inside element box, highlight that box") (CL:FUNCALL HIGHLIGHT-FN LEFT BOTTOM WIDTH HEIGHT WINDOW) (SETQ SELECTEDROWPROP NEWROWPROP) (SETQ SELECTEDCOLUMNPROP NEWCOLUMNPROP) (SETQ SELECTEDELTWIDTH WIDTH) (SETQ SELECTEDELTLEFT LEFT) (SETQ SELECTEDELTBOTTOM BOTTOM))) finally (if (AND SELECTEDROWPROP SELECTEDCOLUMNPROP) then (if (NULL SELECTION) then (SETQ SELECTION (create TWOD.SELECTION))) (RETURN (create TWOD.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM ROWPROP _ SELECTEDROWPROP COLUMNPROP _ SELECTEDCOLUMNPROP smashing SELECTION]) (INSPECT.INVERTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:11 by jop") (* ;; "Inverts SELECTION if non-NIL") (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (if SELECTION then (INSPECT.INVERTREGION (fetch (INSPECT.SELECTION ELTLEFT) of SELECTION ) (fetch (INSPECT.SELECTION ELTBOTTOM) of SELECTION) (fetch (INSPECT.SELECTION ELTWIDTH) of SELECTION) (FONTPROP WINDOW 'HEIGHT) WINDOW]) (INSPECT.INVERTREGION [LAMBDA (LEFT BOTTOM WIDTH HEIGHT WINDOW) (* ; "Edited 6-Apr-87 16:38 by jop") (BLTSHADE BLACKSHADE WINDOW LEFT BOTTOM WIDTH HEIGHT 'INVERT]) (INSPECT.FLIPSELECTION [LAMBDA (LEFT BOTTOM WIDTH HEIGHT WINDOW) (* ; "Edited 6-Apr-87 16:45 by jop") (BLTSHADE GRAYSHADE WINDOW LEFT BOTTOM WIDTH HEIGHT 'INVERT]) ) (RPAQ? INSPECTORFONT NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS INSPECTORFONT) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (BLOCKRECORD INSPECT.SELECTION (ELTBOTTOM ELTLEFT ELTWIDTH)) (DATATYPE ONED.SELECTION (ELTBOTTOM ELTLEFT ELTWIDTH PROP)) (DATATYPE TWOD.SELECTION (ELTBOTTOM ELTLEFT ELTWIDTH ROWPROP COLUMNPROP)) ) (/DECLAREDATATYPE 'ONED.SELECTION '(POINTER POINTER POINTER POINTER) '((ONED.SELECTION 0 POINTER) (ONED.SELECTION 2 POINTER) (ONED.SELECTION 4 POINTER) (ONED.SELECTION 6 POINTER)) '8) (/DECLAREDATATYPE 'TWOD.SELECTION '(POINTER POINTER POINTER POINTER POINTER) '((TWOD.SELECTION 0 POINTER) (TWOD.SELECTION 2 POINTER) (TWOD.SELECTION 4 POINTER) (TWOD.SELECTION 6 POINTER) (TWOD.SELECTION 8 POINTER)) '10) ) (/DECLAREDATATYPE 'ONED.SELECTION '(POINTER POINTER POINTER POINTER) '((ONED.SELECTION 0 POINTER) (ONED.SELECTION 2 POINTER) (ONED.SELECTION 4 POINTER) (ONED.SELECTION 6 POINTER)) '8) (/DECLAREDATATYPE 'TWOD.SELECTION '(POINTER POINTER POINTER POINTER POINTER) '((TWOD.SELECTION 0 POINTER) (TWOD.SELECTION 2 POINTER) (TWOD.SELECTION 4 POINTER) (TWOD.SELECTION 6 POINTER) (TWOD.SELECTION 8 POINTER)) '10) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) ) (PUTPROPS TWODINSPECTOR COPYRIGHT ("Venue & Xerox Corporation" 1985 1900 1987 1990 1992 1993 2020)) (DECLARE%: DONTCOPY (FILEMAP (NIL (3520 4267 (\CREATE.TWODINSPECTOR.TITLEMENU 3530 . 3737) (\CREATE.TWODINSPECTOR.SETMENU 3739 . 3957) (\CREATE.TWODINSPECTOR.INSPECTMENU 3959 . 4265)) (4301 37441 (ONEDINSPECTW.CREATE 4311 . 8038) (GET-ONED-DISPLAYW 8040 . 10127) (ONEDINSPECT.ARRANGEWINDOWS 10129 . 15403) ( ONEDINSPECT.REPAINTFN 15405 . 17099) (ONEDINSPECT.PRINTELEMENT 17101 . 17319) (ONEDINSPECT.RESHAPEFN 17321 . 17657) (ONEDINSPECT.MAKEREGIONS 17659 . 19607) (ONEDINSPECT.BUTTONEVENTFN 19609 . 21622) ( ONEDINSPECT.COPYBUTTONFN 21624 . 23463) (ONEDINSPECT.SCROLLFN 23465 . 23881) (ONEDINSPECT.CLOSEFN 23883 . 24146) (ONEDINSPECT.REDISPLAY 24148 . 26904) (ONEDINSPECT.REPLACE 26906 . 27216) ( ONEDINSPECT.SELECTITEM 27218 . 29057) (ONEDINSPECT.SELECTPROP 29059 . 30803) ( ONEDINSPECT.ADJUSTSELECTION 30805 . 32345) (ONEDINSPECT.PROPWIDTH 32347 . 32964) ( ONEDINSPECT.VALUEWIDTH 32966 . 33352) (ONEDINSPECT.DEFAULT.TITLECOMMANDFN 33354 . 34329) ( ONEDINSPECT.DEFAULT.VALUECOMMANDFN 34331 . 35893) (ONEDINSPECT.SETELT 35895 . 37439)) (37474 83543 ( TWODINSPECTW.CREATE 37484 . 42117) (GET-TWOD-DISPLAYW 42119 . 44769) (GET-CORNERW 44771 . 45476) ( TWODINSPECT.ARRANGEWINDOWS 45478 . 51599) (TWODINSPECT.REPAINTFN 51601 . 54786) ( TWODINSPECT.PRINTELEMENT 54788 . 55063) (TWODINSPECT.RESHAPEFN 55065 . 55401) (TWODINSPECT.MAKEREGIONS 55403 . 58204) (TWODINSPECT.BUTTONEVENTFN 58206 . 60835) (TWODINSPECT.COPYBUTTONFN 60837 . 63128) ( TWODINSPECT.DOWINDOWCOMFN 63130 . 63740) (TWODINSPECT.SCROLLFN 63742 . 64401) (TWODINSPECT.CLOSEFN 64403 . 64796) (TWODINSPECT.REDISPLAY 64798 . 69035) (TWODINSPECT.REPLACE 69037 . 69375) ( TWODINSPECT.SELECTITEM 69377 . 72298) (TWODINSPECT.SELECTROWPROP 72300 . 74078) ( TWODINSPECT.SELECTCOLUMNPROP 74080 . 76114) (TWODINSPECT.ADJUSTSELECTION 76116 . 78484) ( TWODINSPECT.DEFAULT.TITLECOMMANDFN 78486 . 79461) (TWODINSPECT.DEFAULT.VALUECOMMANDFN 79463 . 81039) ( TWODINSPECT.SETELT 81041 . 82077) (TWODINSPECT.ROWPROPWIDTH 82079 . 82328) (TWODINSPECT.COLUMNWIDTHS 82330 . 82725) (TWODINSPECT.COLUMNWIDTH 82727 . 83270) (TWODINSPECT.TOTALWIDTH 83272 . 83541)) (83578 91324 (GET-RIGHTW 83588 . 84440) (RIGHTW.REPAINTFN 84442 . 86941) (RIGHTW.RESHAPEFN 86943 . 87162) ( RIGHTW.BUTTONEVENTFN 87164 . 89759) (RIGHTW.ADJUSTSELECTION 89761 . 91322)) (91357 98194 (GET-TOPW 91367 . 92359) (TOPW.REPAINTFN 92361 . 94220) (TOPW.RESHAPEFN 94222 . 94465) (TOPW.ADJUSTSELECTION 94467 . 96086) (TOPW.BUTTONEVENTFN 96088 . 98192)) (98229 99746 (GET-TITLEW 98239 . 99003) ( TITLEW.REPAINTFN 99005 . 99291) (TITLEW.BUTTONEVENTFN 99293 . 99744)) (99774 110379 (ONED.TRACKCURSOR 99784 . 104485) (TWOD.TRACKCURSOR 104487 . 109193) (INSPECT.INVERTSELECTION 109195 . 109983) ( INSPECT.INVERTREGION 109985 . 110180) (INSPECT.FLIPSELECTION 110182 . 110377))))) STOP \ No newline at end of file + (INSPECT.INVERTSELECTION WINDOW]) (TOPW.RESHAPEFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:55 by jop") (CLEARW WINDOW) (TOPW.ADJUSTSELECTION WINDOW) (TOPW.REPAINTFN WINDOW (DSPCLIPPINGREGION NIL WINDOW]) (TOPW.ADJUSTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:54 by jop") (PROG ((SELECTION (WINDOWPROP WINDOW 'SELECTION)) (MAINWINDOW (MAINWINDOW WINDOW))) (if SELECTION then (PROG ((COLUMNPROPS (WINDOWPROP MAINWINDOW 'COLUMNPROPS)) (HORZMARKS (WINDOWPROP MAINWINDOW 'HORZMARKS)) (SELCOLPROP (fetch (ONED.SELECTION PROP) of SELECTION)) SELBOTTOM SELWIDTH SELLEFT) (SETQ SELBOTTOM 0) (SETQ SELWIDTH (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (STRINGWIDTH (CAR SELCOLPROP) WINDOW T))) (SETQ SELLEFT (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as COLPROP on COLUMNPROPS thereis (EQ COLPROP SELCOLPROP))) SELWIDTH)) (WINDOWPROP WINDOW 'SELECTION (create ONED.SELECTION ELTBOTTOM _ SELBOTTOM ELTWIDTH _ SELWIDTH ELTLEFT _ SELLEFT PROP _ SELCOLPROP]) (TOPW.BUTTONEVENTFN [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 18:43 by jop") (TOTOPW WINDOW) (LET* [(SELECTION (WINDOWPROP WINDOW 'SELECTION)) (MAINWINDOW (MAINWINDOW WINDOW)) (COLUMNPROPCOMMANDFN (WINDOWPROP MAINWINDOW 'COLUMNPROPCOMMANDFN] (if COLUMNPROPCOMMANDFN then (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (if (MOUSESTATE LEFT) then (WINDOWPROP WINDOW 'SELECTION (ONED.TRACKCURSOR WINDOW SELECTION (WINDOWPROP MAINWINDOW 'COLUMNPROPS) (WINDOWPROP MAINWINDOW 'HORZMARKS) NIL 0 (FONTPROP WINDOW 'HEIGHT) [FUNCTION (LAMBDA (P W) P] (FUNCTION INSPECT.INVERTREGION) T)) else (* ; "MOUSESTATE MIDDLE") (if SELECTION then (CL:FUNCALL COLUMNPROPCOMMANDFN (CAR (fetch (ONED.SELECTION PROP) of SELECTION)) (WINDOWPROP MAINWINDOW 'DATUM) MAINWINDOW]) ) (* ;; "Title window fns") (DEFINEQ (GET-TITLEW [LAMBDA (DISPLAYWINDOW TITLE TITLEFONT DATUM) (* ; "Edited 6-Apr-87 17:02 by jop") (LET [(TITLEWINDOW (OR (WINDOWPROP DISPLAYWINDOW 'TITLEWINDOW) (CREATEW (CREATEREGION 0 0 100 100) NIL 1 T] (WINDOWPROP TITLEWINDOW 'REPAINTFN (FUNCTION TITLEW.REPAINTFN)) (WINDOWPROP TITLEWINDOW 'RESHAPEFN (FUNCTION CLEARW)) (WINDOWPROP TITLEWINDOW 'BUTTONEVENTFN (FUNCTION TITLEW.BUTTONEVENTFN)) (DSPFONT TITLEFONT TITLEWINDOW) (DSPOPERATION 'INVERT TITLEWINDOW) (WINDOWPROP TITLEWINDOW 'INSPECTTITLE (OR TITLE (CONCAT DATUM " Inspector"))) (WINDOWPROP DISPLAYWINDOW 'TITLEWINDOW TITLEWINDOW) TITLEWINDOW]) (TITLEW.REPAINTFN [LAMBDA (WINDOW) (* ; "Edited 5-Apr-87 14:50 by jop") (BITBLT NIL NIL NIL WINDOW NIL NIL NIL NIL 'TEXTURE 'REPLACE BLACKSHADE) (MOVETOUPPERLEFT WINDOW) (PRINTOUT WINDOW (WINDOWPROP WINDOW 'INSPECTTITLE]) (TITLEW.BUTTONEVENTFN [LAMBDA (TITLEWINDOW) (* ; "Edited 5-Apr-87 16:41 by jop") (PROG ((MAINWINDOW (MAINWINDOW TITLEWINDOW)) TITLECOMMANDFN) (SETQ TITLECOMMANDFN (WINDOWPROP MAINWINDOW 'TITLECOMMANDFN)) (if TITLECOMMANDFN then (WITH-INSPECTOR-ENV (WINDOWPROP MAINWINDOW 'PROFILE) (APPLY* TITLECOMMANDFN MAINWINDOW]) ) (* ;; "Utilites ") (DEFINEQ (ONED.TRACKCURSOR [LAMBDA (WINDOW SELECTION PROPS MARKS LEFT BOTTOM HEIGHT NEW-ITEM-FN HIGHLIGHT-FN HORIZONTAL-P) (* ; "Edited 6-Apr-87 17:41 by jop") (LET (SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH SELECTEDPROP) (if SELECTION then (SETQ SELECTEDELTBOTTOM (fetch (ONED.SELECTION ELTBOTTOM) of SELECTION)) (SETQ SELECTEDELTLEFT (fetch (ONED.SELECTION ELTLEFT) of SELECTION)) (SETQ SELECTEDELTWIDTH (fetch (ONED.SELECTION ELTWIDTH) of SELECTION)) (SETQ SELECTEDPROP (fetch (ONED.SELECTION PROP) of SELECTION))) (bind X Y NEWPROP WIDTH while (MOUSESTATE LEFT) do (SETQ X (LASTMOUSEX WINDOW)) (SETQ Y (LASTMOUSEY WINDOW)) [if (NOT HORIZONTAL-P) then [for PROP on PROPS as MARK in MARKS until (ILESSP MARK Y) finally (if PROP then (SETQ WIDTH (STRINGWIDTH (CL:FUNCALL NEW-ITEM-FN (CAR PROP) WINDOW) WINDOW T)) (SETQ BOTTOM MARK) (* ;  "Select the new region only if the cursor is inside the element box") (SETQ NEWPROP (AND [NOT (OR (ILESSP X LEFT) (IGREATERP X (IPLUS LEFT WIDTH] PROP] else (for PROP on PROPS as MARK in MARKS until (IGREATERP MARK X) finally (if PROP then (SETQ WIDTH (STRINGWIDTH (CL:FUNCALL NEW-ITEM-FN (CAR PROP) WINDOW) WINDOW T)) (SETQ LEFT (ADD1 (IDIFFERENCE MARK WIDTH))) (SETQ NEWPROP (AND (NOT (ILESSP X LEFT)) PROP] (if (NEQ NEWPROP SELECTEDPROP) then (* ;  "We need to consider highlighting a new region") (if SELECTEDPROP then (* ; "Lowlight the old region") (CL:FUNCALL HIGHLIGHT-FN SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH HEIGHT WINDOW) (SETQ SELECTEDPROP NIL)) (if NEWPROP then (* ;  "cursor inside element box, highlight that box") (CL:FUNCALL HIGHLIGHT-FN LEFT BOTTOM WIDTH HEIGHT WINDOW) (SETQ SELECTEDPROP NEWPROP) (SETQ SELECTEDELTWIDTH WIDTH) (SETQ SELECTEDELTLEFT LEFT) (SETQ SELECTEDELTBOTTOM BOTTOM))) finally (if SELECTEDPROP then (if (NULL SELECTION) then (SETQ SELECTION (create ONED.SELECTION))) (RETURN (create ONED.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM PROP _ SELECTEDPROP smashing SELECTION]) (TWOD.TRACKCURSOR [LAMBDA (WINDOW SELECTION ROWPROPS VERTMARKS COLUMNPROPS HORZMARKS HEIGHT NEW-ITEM-FN HIGHLIGHT-FN) (* ; "Edited 6-Apr-87 18:36 by jop") (TOTOPW WINDOW) (LET (SELECTEDROWPROP SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH) (if SELECTION then (SETQ SELECTEDROWPROP (fetch (TWOD.SELECTION ROWPROP) of SELECTION)) (SETQ SELECTEDCOLUMNPROP (fetch (TWOD.SELECTION COLUMNPROP) of SELECTION)) (SETQ SELECTEDELTBOTTOM (fetch (TWOD.SELECTION ELTBOTTOM) of SELECTION)) (SETQ SELECTEDELTLEFT (fetch (TWOD.SELECTION ELTLEFT) of SELECTION)) (SETQ SELECTEDELTWIDTH (fetch (TWOD.SELECTION ELTWIDTH) of SELECTION))) (bind NEWROWPROP NEWCOLUMNPROP NEWHORZMARK LEFT BOTTOM WIDTH X Y while (MOUSESTATE LEFT) do (SETQ X (LASTMOUSEX WINDOW)) (SETQ Y (LASTMOUSEY WINDOW)) (for ROWPROP on ROWPROPS as VERTMARK in VERTMARKS until (ILESSP VERTMARK Y) finally (SETQ NEWROWPROP ROWPROP) (SETQ BOTTOM VERTMARK)) (for COLUMNPROP on COLUMNPROPS as HORZMARK in HORZMARKS until (IGREATERP HORZMARK X) finally (SETQ NEWCOLUMNPROP COLUMNPROP) (SETQ NEWHORZMARK HORZMARK)) (if (AND NEWROWPROP NEWCOLUMNPROP) then (SETQ WIDTH (STRINGWIDTH (CL:FUNCALL NEW-ITEM-FN (CAR NEWROWPROP) (CAR NEWCOLUMNPROP) WINDOW) WINDOW T)) (SETQ LEFT (ADD1 (IDIFFERENCE NEWHORZMARK WIDTH))) (* ;  "Select the new region only if the cursor is inside the element box") (if (ILESSP X LEFT) then (SETQ NEWROWPROP NIL) (SETQ NEWCOLUMNPROP NIL))) (if (OR (NEQ NEWROWPROP SELECTEDROWPROP) (NEQ NEWCOLUMNPROP SELECTEDCOLUMNPROP)) then (* ;  "We need to consider highlighting a new region") (if (AND SELECTEDROWPROP SELECTEDCOLUMNPROP) then (* ; "Lowlight the old region") (CL:FUNCALL HIGHLIGHT-FN SELECTEDELTLEFT SELECTEDELTBOTTOM SELECTEDELTWIDTH HEIGHT WINDOW) (SETQ SELECTEDROWPROP NIL) (SETQ SELECTEDCOLUMNPROP NIL)) (if (AND NEWROWPROP NEWCOLUMNPROP) then (* ;  "cursor inside element box, highlight that box") (CL:FUNCALL HIGHLIGHT-FN LEFT BOTTOM WIDTH HEIGHT WINDOW) (SETQ SELECTEDROWPROP NEWROWPROP) (SETQ SELECTEDCOLUMNPROP NEWCOLUMNPROP) (SETQ SELECTEDELTWIDTH WIDTH) (SETQ SELECTEDELTLEFT LEFT) (SETQ SELECTEDELTBOTTOM BOTTOM))) finally (if (AND SELECTEDROWPROP SELECTEDCOLUMNPROP) then (if (NULL SELECTION) then (SETQ SELECTION (create TWOD.SELECTION))) (RETURN (create TWOD.SELECTION ELTWIDTH _ SELECTEDELTWIDTH ELTLEFT _ SELECTEDELTLEFT ELTBOTTOM _ SELECTEDELTBOTTOM ROWPROP _ SELECTEDROWPROP COLUMNPROP _ SELECTEDCOLUMNPROP smashing SELECTION]) (INSPECT.INVERTSELECTION [LAMBDA (WINDOW) (* ; "Edited 6-Apr-87 11:11 by jop") (* ;; "Inverts SELECTION if non-NIL") (PROG [(SELECTION (WINDOWPROP WINDOW 'SELECTION] (if SELECTION then (INSPECT.INVERTREGION (fetch (INSPECT.SELECTION ELTLEFT) of SELECTION ) (fetch (INSPECT.SELECTION ELTBOTTOM) of SELECTION) (fetch (INSPECT.SELECTION ELTWIDTH) of SELECTION) (FONTPROP WINDOW 'HEIGHT) WINDOW]) (INSPECT.INVERTREGION [LAMBDA (LEFT BOTTOM WIDTH HEIGHT WINDOW) (* ; "Edited 6-Apr-87 16:38 by jop") (BLTSHADE BLACKSHADE WINDOW LEFT BOTTOM WIDTH HEIGHT 'INVERT]) (INSPECT.FLIPSELECTION [LAMBDA (LEFT BOTTOM WIDTH HEIGHT WINDOW) (* ; "Edited 6-Apr-87 16:45 by jop") (BLTSHADE GRAYSHADE WINDOW LEFT BOTTOM WIDTH HEIGHT 'INVERT]) ) (RPAQ? INSPECTORFONT NIL) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS INSPECTORFONT) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE (BLOCKRECORD INSPECT.SELECTION (ELTBOTTOM ELTLEFT ELTWIDTH)) (DATATYPE ONED.SELECTION (ELTBOTTOM ELTLEFT ELTWIDTH PROP)) (DATATYPE TWOD.SELECTION (ELTBOTTOM ELTLEFT ELTWIDTH ROWPROP COLUMNPROP)) ) (/DECLAREDATATYPE 'ONED.SELECTION '(POINTER POINTER POINTER POINTER) '((ONED.SELECTION 0 POINTER) (ONED.SELECTION 2 POINTER) (ONED.SELECTION 4 POINTER) (ONED.SELECTION 6 POINTER)) '8) (/DECLAREDATATYPE 'TWOD.SELECTION '(POINTER POINTER POINTER POINTER POINTER) '((TWOD.SELECTION 0 POINTER) (TWOD.SELECTION 2 POINTER) (TWOD.SELECTION 4 POINTER) (TWOD.SELECTION 6 POINTER) (TWOD.SELECTION 8 POINTER)) '10) ) (/DECLAREDATATYPE 'ONED.SELECTION '(POINTER POINTER POINTER POINTER) '((ONED.SELECTION 0 POINTER) (ONED.SELECTION 2 POINTER) (ONED.SELECTION 4 POINTER) (ONED.SELECTION 6 POINTER)) '8) (/DECLAREDATATYPE 'TWOD.SELECTION '(POINTER POINTER POINTER POINTER POINTER) '((TWOD.SELECTION 0 POINTER) (TWOD.SELECTION 2 POINTER) (TWOD.SELECTION 4 POINTER) (TWOD.SELECTION 6 POINTER) (TWOD.SELECTION 8 POINTER)) '10) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) ) (PUTPROPS TWODINSPECTOR COPYRIGHT ("Venue & Xerox Corporation" 1985 1900 1987 1990 1992 1993 2020 2021 )) (DECLARE%: DONTCOPY (FILEMAP (NIL (3566 4313 (\CREATE.TWODINSPECTOR.TITLEMENU 3576 . 3783) (\CREATE.TWODINSPECTOR.SETMENU 3785 . 4003) (\CREATE.TWODINSPECTOR.INSPECTMENU 4005 . 4311)) (4347 37661 (ONEDINSPECTW.CREATE 4357 . 8084) (GET-ONED-DISPLAYW 8086 . 10173) (ONEDINSPECT.ARRANGEWINDOWS 10175 . 15449) ( ONEDINSPECT.REPAINTFN 15451 . 17145) (ONEDINSPECT.PRINTELEMENT 17147 . 17365) (ONEDINSPECT.RESHAPEFN 17367 . 17703) (ONEDINSPECT.MAKEREGIONS 17705 . 19653) (ONEDINSPECT.BUTTONEVENTFN 19655 . 21668) ( ONEDINSPECT.COPYBUTTONFN 21670 . 23509) (ONEDINSPECT.SCROLLFN 23511 . 24101) (ONEDINSPECT.CLOSEFN 24103 . 24366) (ONEDINSPECT.REDISPLAY 24368 . 27124) (ONEDINSPECT.REPLACE 27126 . 27436) ( ONEDINSPECT.SELECTITEM 27438 . 29277) (ONEDINSPECT.SELECTPROP 29279 . 31023) ( ONEDINSPECT.ADJUSTSELECTION 31025 . 32565) (ONEDINSPECT.PROPWIDTH 32567 . 33184) ( ONEDINSPECT.VALUEWIDTH 33186 . 33572) (ONEDINSPECT.DEFAULT.TITLECOMMANDFN 33574 . 34549) ( ONEDINSPECT.DEFAULT.VALUECOMMANDFN 34551 . 36113) (ONEDINSPECT.SETELT 36115 . 37659)) (37694 84172 ( TWODINSPECTW.CREATE 37704 . 42337) (GET-TWOD-DISPLAYW 42339 . 44989) (GET-CORNERW 44991 . 45696) ( TWODINSPECT.ARRANGEWINDOWS 45698 . 52054) (TWODINSPECT.REPAINTFN 52056 . 55241) ( TWODINSPECT.PRINTELEMENT 55243 . 55518) (TWODINSPECT.RESHAPEFN 55520 . 55856) (TWODINSPECT.MAKEREGIONS 55858 . 58659) (TWODINSPECT.BUTTONEVENTFN 58661 . 61290) (TWODINSPECT.COPYBUTTONFN 61292 . 63583) ( TWODINSPECT.DOWINDOWCOMFN 63585 . 64195) (TWODINSPECT.SCROLLFN 64197 . 65030) (TWODINSPECT.CLOSEFN 65032 . 65425) (TWODINSPECT.REDISPLAY 65427 . 69664) (TWODINSPECT.REPLACE 69666 . 70004) ( TWODINSPECT.SELECTITEM 70006 . 72927) (TWODINSPECT.SELECTROWPROP 72929 . 74707) ( TWODINSPECT.SELECTCOLUMNPROP 74709 . 76743) (TWODINSPECT.ADJUSTSELECTION 76745 . 79113) ( TWODINSPECT.DEFAULT.TITLECOMMANDFN 79115 . 80090) (TWODINSPECT.DEFAULT.VALUECOMMANDFN 80092 . 81668) ( TWODINSPECT.SETELT 81670 . 82706) (TWODINSPECT.ROWPROPWIDTH 82708 . 82957) (TWODINSPECT.COLUMNWIDTHS 82959 . 83354) (TWODINSPECT.COLUMNWIDTH 83356 . 83899) (TWODINSPECT.TOTALWIDTH 83901 . 84170)) (84207 92503 (GET-RIGHTW 84217 . 85619) (RIGHTW.REPAINTFN 85621 . 88120) (RIGHTW.RESHAPEFN 88122 . 88341) ( RIGHTW.BUTTONEVENTFN 88343 . 90938) (RIGHTW.ADJUSTSELECTION 90940 . 92501)) (92536 99373 (GET-TOPW 92546 . 93538) (TOPW.REPAINTFN 93540 . 95399) (TOPW.RESHAPEFN 95401 . 95644) (TOPW.ADJUSTSELECTION 95646 . 97265) (TOPW.BUTTONEVENTFN 97267 . 99371)) (99408 100925 (GET-TITLEW 99418 . 100182) ( TITLEW.REPAINTFN 100184 . 100470) (TITLEW.BUTTONEVENTFN 100472 . 100923)) (100953 111558 ( ONED.TRACKCURSOR 100963 . 105664) (TWOD.TRACKCURSOR 105666 . 110372) (INSPECT.INVERTSELECTION 110374 . 111162) (INSPECT.INVERTREGION 111164 . 111359) (INSPECT.FLIPSELECTION 111361 . 111556))))) STOP \ No newline at end of file diff --git a/sources/TWODINSPECTOR.LCOM b/sources/TWODINSPECTOR.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..465a97cd0ccec2ef232d3cb99e99e73e07947ab1 GIT binary patch literal 55515 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 Date: Sun, 21 Feb 2021 13:41:15 -0800 Subject: [PATCH 32/37] PRETTY: Fix PRINTCOPYRIGHT1 to avoid line overflow --- sources/PRETTY | 2 +- sources/PRETTY.LCOM | Bin 30039 -> 30075 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/PRETTY b/sources/PRETTY index 82e15fa7..4caf08e6 100644 --- a/sources/PRETTY +++ b/sources/PRETTY @@ -1 +1 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "16-Apr-2018 21:37:09" {DSK}kaplan>Local>medley3.5>lispcore>sources>PRETTY.;6 56513 changes to%: (FNS PRINTDEF1) previous date%: "16-Apr-2018 10:21:19" {DSK}kaplan>Local>medley3.5>lispcore>sources>PRETTY.;5) (* ; " Copyright (c) 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1999, 2018 by Venue & Xerox Corporation. All rights reserved. The following program was created in 1984 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT PRETTYCOMS) (RPAQQ PRETTYCOMS [(FNS PRETTYDEF PRETTYDEFCOMS PRETTYDEF0 PRETTYDEF1 PRINTDATE PRINTDATE1 PRINTFNS PRETTYCOM PRETTYVAR PRETTYVAR1 PRETTYCOM1 ENDFILE MAKEDEFLIST PP PP* PPT PRETTYPRINT PRETTYPRINT1 PRETTYPRINT2 PRETTYPRINT3 PRINTDEF1 SUPERPRINTEQ SUPERPRINTGETPROP CHANGEFONT) (FNS READARRAY PRINTARRAY READARRAY-FROM-LIST PRINTARRAY-TO-LIST) (COMS (DECLARE%: DONTCOPY (MACROS CHANGFONT))) (COMS (* ; "COPYRIGHT") (FNS PRINTCOPYRIGHT PRINTCOPYRIGHT1 SAVECOPYRIGHT) (BLOCKS (NIL PRINTCOPYRIGHT PRINTCOPYRIGHT1 SAVECOPYRIGHT (LOCALVARS . T) (NOLINKFNS PRINTCOPYRIGHT1))) (GLOBALVARS COPYRIGHTFLG COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST DEFAULTCOPYRIGHTOWNER COPYRIGHTSRESERVED) (INITVARS (COPYRIGHTFLG) (DEFAULTCOPYRIGHTOWNER) (COPYRIGHTPRETTYFLG T) (COPYRIGHTOWNERS) [DEFAULTCOPYRIGHTKEYLST '((NONE " " EXPLAINSTRING "NONE - No copyright ever on this file" CONFIRM T RETURN 'NONE) [%[ "owner: " EXPLAINSTRING "[ - new copyright owner -- type one line of text" NOECHOFLG T KEYLST (( " " RETURN (SUBSTRING (CADR ANSWER) 2 -2] (%] "No copyright notice now " EXPLAINSTRING "] - no copyright notice now" NOECHOFLG T RETURN NIL] (COPYRIGHTSRESERVED T) (*NEW-INTERLISP-MAKEFILE-ENVIRONMENT* '(:READTABLE "INTERLISP" :PACKAGE "INTERLISP")) (*DEFAULT-MAKEFILE-ENVIRONMENT*)) (GLOBALVARS COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST COPYRIGHTPRETTYFLG COMMENTFLG *DEFAULT-MAKEFILE-ENVIRONMENT* *NEW-INTERLISP-MAKEFILE-ENVIRONMENT*)) (INITVARS (COMMENTFLG '*) (**COMMENT**FLG '" **COMMENT** ") (PRETTYFLG T) (%#RPARS 4) (CLISPIFYPRETTYFLG) (PRETTYTRANFLG) (FONTCHANGEFLG) (CHANGECHARTABSTR) (PRETTYTABFLG T) (DECLARETAGSLST '(COMPILERVARS COPY COPYWHEN DOCOPY DOEVAL@COMPILE DOEVAL@LOAD DONTCOPY DONTEVAL@COMPILE DONTEVAL@LOAD EVAL@COMPILE EVAL@COMPILEWHEN EVAL@LOAD EVAL@LOADWHEN FIRST NOTFIRST)) (AVERAGEVARLENGTH 4) (AVERAGEFNLENGTH 5) (%#CAREFULCOLUMNS 0) (CHANGECHAR '%|) (ENDLINEUSERFN)) [INITVARS (PRETTYDEFMACROS) (PRETTYPRINTMACROS) (PRETTYEQUIVLST) (PRETTYPRINTYPEMACROS) (FILEPKGCOMSPLST '(DECLARE%: SPECVARS LOCALVARS GLOBALVARS PROP IFPROP P VARS INITVARS ADDVARS APPENDVARS FNS ARRAY E COMS ORIGINAL BLOCKS *)) (SYSPROPS '(PROPTYPE ALISTTYPE DELDEF EDITDEF PUTDEF GETDEF WHENCHANGED NOTICEFN NEWCOMFN PRETTYTYPE DELFROMPRETTYCOM ADDTOPRETTYCOM ACCESSFN ACS AMAC ARGNAMES BLKLIBRARYDEF BROADSCOPE CLISPCLASS CLISPCLASSDEF CLISPFORM CLISPIFYISPROP CLISPINFIX CLISPISFORM CLISPISPROP CLISPNEG CLISPTYPE CLISPWORD CLMAPS CODE CONVERT COREVAL CROPS CTYPE EDIT-SAVE EXPR FILE FILECHANGES FILEDATES FILEDEF FILEGROUP FILEHISTORY FILEMAP FILETYPE GLOBALVAR HISTORY I.S.OPR I.S.TYPE INFO LASTVALUE LISPFN MACRO MAKE NAMESCHANGED NARGS OLDVALUE OPD SETFN SUBR UBOX UNARYOP VALUE \DEF CLISPBRACKET TRYHARDER] (BLOCKS (PRETTYPRINTBLOCK PRETTYPRINT PRETTYPRINT1 PRETTYPRINT2 (ENTRIES PRETTYPRINT) (SPECVARS FNSLST FILEFLG))) (GLOBALVARS DECLARETAGSLST LISPXPRINTFLG SYSPROPS FILEPKGCOMSPLST DWIMLOADFNSFLG PRETTYHEADER FILERDTBL PRETTYEQUIVLST PRETTYTRANFLG CLISPIFYPRETTYFLG LISPXHISTORY DWIMFLG USERWORDS COMMENTFLG) [DECLARE%: EVAL@COMPILE DOCOPY (P (CL:PROCLAIM '(CL:SPECIAL DEFAULTFONT LAMBDAFONT PRETTYCOMFONT COMMENTFONT **COMMENT**FLG PRETTYPRINTMACROS] (DECLARE%: DOEVAL@COMPILE DONTCOPY (* ;  "IMPORT because FILEPKG has records EXPORTed but is not a member of EXPORTFILES") (FILES (IMPORT) FILEPKG)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA PPT PP* PP) (NLAML) (LAMA]) (DEFINEQ (PRETTYDEF (LAMBDA (PRTTYFNS PRTTYFILE PRTTYCOMS REPRINTFNS SOURCEFILE CHANGES) (* ; "Edited 16-Feb-88 11:46 by raf") (DECLARE (SPECVARS PRTTYFILE REPRINTFNS SOURCEFILE CHANGES)) (RESETLST (RESETSAVE (RESETUNDO) (QUOTE (AND RESETSTATE (RESETUNDO OLDVALUE)))) (* ;; "Says undo everything if there is an error or control-D This is particularly necessary if user is using the PRINT* prettyprintmacro which updates comments to point to the newest version.") (PROG ((NEWFILEMAP (AND BUILDMAPFLG (LIST NIL))) (%#RPARS %#RPARS) (*PRINT-ARRAY* T) (XCL:*PRINT-STRUCTURE* T) (*PRINT-LEVEL* NIL) (*PRINT-LENGTH* NIL) FILEFLG FNSLST PRTTYTEM PRETTYCOMSLST PRTTYSPELLFLG OLDFILEMAP MAPADR NLAMALST NLAMLST LAMALST LAM?LST FILEDATES ORIGFLG ROOTNAME DESTINATIONENV SOURCEFILENV SOURCEFC FCLOCATION) (DECLARE (SPECVARS *PRINT-ARRAY* XCL:*PRINT-STRUCTURE* *PRINT-LEVEL* *PRINT-LENGTH* NEWFILEMAP ORIGFLG FILEFLG NLAMALST PRTTYSPELLFLG PRETTYCOMSLST PRTTYCOMS LAM?LST FNSLST OLDFILEMAP LAMALST MAPADR ORIGFLG NLAMLST DESTINATIONENV SOURCEFILENV %#RPARS)) (* ; "NEWFILEMAP corresponds to the map being built for the file being written. OLDFILEMAP corresponds to the map that exists for SOURCEFILE, if any.") (COND ((OR (NULL (\DTEST PRTTYFILE (QUOTE LITATOM))) (EQ PRTTYFILE T)) (* ; "we no longer support any of the crufty alternatives to writing a brand new file") (\ILLEGAL.ARG PRTTYFILE))) (SETQ ROOTNAME (ROOTFILENAME PRTTYFILE)) (if (OR (EQ SOURCEFILE T) (AND REPRINTFNS (NULL SOURCEFILE))) then (* ;; "SOURCEFILE plays the role of CFILE for recompiling. It permits PRETTYPRINT to obtain the definitions from the file withou having to reprettyprint them, or even having them loaded into core. T (or NIL if REPRINTFNS is specified) is the same as PRETTYFILE.") (* ;; "REPRINTFNS specifies those functions to be printed anew. REPRINTFNS=T means reprint all EXPRS, a la recompile. For example, if you have an entire file loaded in, but only change a few functions, using this option can speed up dumping the file by a factor of two. If REPRINTFNS=ALL, all functions that contain in core exprs, whether on function definition cell or property lists, are reprinted. REPRINTFNS can also be a list. MAKEFILE uses this for the REMAKE option by specifying as REPRINTFNS the list CHANGES. In any case, if the function does not contain an in core defnition, prettyprint will try to find one on the file. i.e., act as though REPRINTFNS were NIL.") (SETQ SOURCEFILE ROOTNAME)) (if (SETQ DESTINATIONENV (GET ROOTNAME (QUOTE MAKEFILE-ENVIRONMENT))) then (* ; "use this explicit environment. Copy it in case user later on destructively edits it") (SETQ DESTINATIONENV (\DO-DEFINE-FILE-INFO NIL (COPY DESTINATIONENV))) else (* ; "see if we already know the environment of the source") (CL:MULTIPLE-VALUE-SETQ (SOURCEFILENV OLDFILEMAP SOURCEFC) (LOOKUP-ENVIRONMENT-AND-FILEMAP (OR SOURCEFILE ROOTNAME) (OR (NULL SOURCEFILE) (EQ SOURCEFILE ROOTNAME))))) (if SOURCEFILE then (if (NULL (NLSETQ (SETQ SOURCEFILE (OPENSTREAM SOURCEFILE (QUOTE INPUT))))) then (* ; "can't find file to reprint from.") (* ; "OPENSTREAM is called in order that 'correction' take place.") (SETQ SOURCEFILE NIL) (PRIN1 PRTTYFILE T) (PRIN1 (QUOTE " not found, so it will be written anew. ") T) elseif (RANDACCESSP SOURCEFILE) then (RESETSAVE NIL (LIST (QUOTE CLOSEF) SOURCEFILE)) (RESETSAVE (INPUT SOURCEFILE)) (if (EQ REPRINTFNS (QUOTE EXPRS)) then (SETQ REPRINTFNS T) elseif (EQ REPRINTFNS (QUOTE CHANGES)) then (SETQ REPRINTFNS (UNION (FILEPKG.CHANGEDFNS CHANGES) (FILEPKG.CHANGEDFNS (fetch FILECHANGES of ROOTNAME))))) (if (NULL SOURCEFILENV) then (* ; "if we didn't have environment cached, look it up from the actual stream now") (CL:MULTIPLE-VALUE-SETQ (SOURCEFILENV OLDFILEMAP SOURCEFC) (GET-ENVIRONMENT-AND-FILEMAP SOURCEFILE))) (if (NULL OLDFILEMAP) then (* ; "no map on file, so we will build one as needed") (SETFILEPTR SOURCEFILE (OR SOURCEFC 0)) elseif (NULL (CAR OLDFILEMAP)) then (* ; "complete map.") elseif (LISTP (CAR OLDFILEMAP)) then (* ; "only partial map built up. should only happen for files that were made with BUILDMAPFLG=NIL, since otherwise there would be a coplete map on the file.") (SETFILEPTR SOURCEFILE (CAAR OLDFILEMAP)) else (* ; "Redundancy check. Should only occur if there was a compiled function in the file. and a partial map was formed that stopped after that function.") (HELP)) else (* ; "Can't copy from non-randaccessp source") (SETQ SOURCEFILE NIL))) (* ;; "Now figure out what environment to write the new file in.") (if DESTINATIONENV then (* ; "have explicit env, ok") elseif SOURCEFILENV then (* ; "use same as source") (SETQ DESTINATIONENV (if (EQUAL-READER-ENVIRONMENT SOURCEFILENV *OLD-INTERLISP-READ-ENVIRONMENT*) then (* ; "write the new style") (\DO-DEFINE-FILE-INFO NIL *NEW-INTERLISP-MAKEFILE-ENVIRONMENT*) else (* ; "use same env on new file as old") SOURCEFILENV)) else (* ; "new file, use default") (SETQ DESTINATIONENV (\DO-DEFINE-FILE-INFO NIL (COPY *DEFAULT-MAKEFILE-ENVIRONMENT*)))) (if (NULL SOURCEFILE) then (* ; "get rid of anything we knew about source") (SETQ OLDFILEMAP NIL) (SETQ SOURCEFC NIL) (SETQ SOURCEFILENV NIL) elseif (AND SOURCEFILENV (EQUAL-READER-ENVIRONMENT SOURCEFILENV DESTINATIONENV)) then (* ; "source and destination compatible, so we won't need to worry about it in PRETTYPRINT1/2") (SETQ SOURCEFILENV NIL)) (RESETSAVE NIL (LIST (FUNCTION PRETTYDEF0) (SETQ PRTTYFILE (OPENSTREAM PRTTYFILE (QUOTE OUTPUT))))) (* ; "Cleans up by closing and deleting file if aborted.") (RESETSAVE (OUTPUT PRTTYFILE)) (PRINT-READER-ENVIRONMENT DESTINATIONENV) (SETQ FCLOCATION (GETFILEPTR PRTTYFILE)) (WITH-READER-ENVIRONMENT DESTINATIONENV (if (NOT (SYNTAXP (CHARCODE "[") (QUOTE LEFTBRACKET))) then (* ; "can't use brackets on this read table") (SETQ %#RPARS NIL)) (SETQ FILEDATES (PRINTDATE PRTTYFILE CHANGES)) (AND (NEQ COPYRIGHTFLG (QUOTE NEVER)) ROOTNAME (PRINTCOPYRIGHT ROOTNAME)) (SETQ FILEFLG T) (SETQ CHANGES (FILEPKG.CHANGEDFNS CHANGES)) (* ; "Used freely by PRETTYPRINT to decide clispifying.") (if (NOT (RANDACCESSP PRTTYFILE)) then (* ; "No point building a map, since we won't be able to go back to the start to point at it") (SETQ NEWFILEMAP NIL)) (if FONTCHANGEFLG then (* ; "this is expensive in that it costs as many conses as there are functions, but you can afford it for a makefile.") (SETQ FNSLST (OR (for FL in (GETPROP ROOTNAME (QUOTE FILEGROUP)) when (fetch FILEPROP of FL) join (FILEFNSLST FL)) (FILEFNSLST ROOTNAME)))) (if (OR (LISTP PRTTYFNS) (LISTP (GETTOPVAL PRTTYFNS))) then (* ; "Ancient cruft from before the days of MAKEFILE.") (PRINTFNS PRTTYFNS T) (PRETTYCOM PRTTYFNS T)) (if (SETQ PRETTYCOMSLST (OR (LISTP PRTTYCOMS) (AND (LITATOM PRTTYCOMS) (LISTP (GETTOPVAL PRTTYCOMS))))) then (PRETTYCOM PRTTYCOMS T) (* ; "PRTTYCOMS is just like the argument to a COMS command. see comment in prettycom1") (for L on PRETTYCOMSLST do (PRETTYCOM (CAR L) NIL L)) (* ; "The original value of PRTTYCOMS is saved so that it can be rewritten if a spelling correction occurs. The list PRTTYCOMSLST is searched by PRETTYCOM1 for * commands to see if the variable has be dumped out as well.")) (if (PRETTYDEF1) then (* ; "The coms were reprinted by PRETTYDEF1 due to a change to nlama and or nlaml") elseif PRTTYSPELLFLG then (* ; "A correction on prettycoms was performed, so dump it out aain to get the corrected version on the file.") (PRETTYCOM PRTTYCOMS T)) (if (NEQ COPYRIGHTFLG (QUOTE NEVER)) then (SAVECOPYRIGHT ROOTNAME)) (if NEWFILEMAP then (PRIN1 "(") (PRIN2 (QUOTE DECLARE%:)) (SPACES 1) (PRIN2 (QUOTE DONTCOPY)) (TERPRI) (SPACES 2) (for ADR in MAPADR do (SETQ PRTTYTEM (GETFILEPTR PRTTYFILE)) (SETFILEPTR PRTTYFILE ADR) (* ; "Write the current file positon into the filecreated expression, and then restores the file pointer.") (PRIN2 PRTTYTEM) (SETFILEPTR PRTTYFILE PRTTYTEM)) (PRIN2 (LIST (QUOTE FILEMAP) NEWFILEMAP)) (* ; "printed instead of prettyprinted, so wont take up two pages of listing.") (PRIN1 (QUOTE ") ")) (PUTFILEMAP (FULLNAME PRTTYFILE) NEWFILEMAP NIL DESTINATIONENV NIL FCLOCATION) (* ; "Also save map, so can be used for subsequent makefiles.")) (ENDFILE PRTTYFILE) (if (AND FILEDATES ROOTNAME) then (/replace FILEDATES of ROOTNAME with FILEDATES))) (RETURN (FULLNAME PRTTYFILE))))) ) (PRETTYDEFCOMS (LAMBDA (PRTTYCOMS FNSLST) (* ; "Edited 19-Aug-88 16:07 by raf") (DECLARE (SPECVARS FNSLST)) (PROG ((%#RPARS %#RPARS) (*PRINT-ARRAY* T) (XCL:*PRINT-STRUCTURE* T) (*PRINT-LEVEL* NIL) (*PRINT-LENGTH* NIL) BUILDMAPFLG PRTTYSPELLFLG ORIGFLG SOURCEFILE) (DECLARE (SPECVARS *PRINT-ARRAY* XCL:*PRINT-STRUCTURE* *PRINT-LEVEL* *PRINT-LENGTH* BUILDMAPFLG NEWFILEMAP ORIGFLG PRTTYSPELLFLG LAM?LST ORIGFLG SOURCEFILE %#RPARS)) (if (NOT (SYNTAXP (CHARCODE "[") (QUOTE LEFTBRACKET))) then (* ; "can't use brackets on this read table") (SETQ %#RPARS NIL)) (for L on (OR (LISTP PRTTYCOMS) (AND (LITATOM PRTTYCOMS) (LISTP (GETTOPVAL PRTTYCOMS)))) do (PRETTYCOM (CAR L) NIL L)))) ) (PRETTYDEF0 (LAMBDA (MADEFILE) (* bvm%: " 2-Aug-86 16:24") (* ;; "Cleans up after prettydef in case of control-d.") (COND ((OPENP MADEFILE (QUOTE OUTPUT)) (DELFILE (CLOSEF MADEFILE))))) ) (PRETTYDEF1 (LAMBDA NIL (* wt%: " 9-SEP-78 16:05") (* ; "Updates the DECLARE: for NLAMA/NLAML") (PROG (PRTTYCOM PRTTYTEM PRTTYNEW) (COND ((NULL (SOME PRETTYCOMSLST (FUNCTION (LAMBDA (X) (AND (EQ (CAR X) (QUOTE DECLARE%:)) (SETQ PRTTYTEM (MEMB (QUOTE COMPILERVARS) (SETQ PRTTYCOM X))) (EQ (CAAR (SETQ PRTTYTEM (CDR PRTTYTEM))) (QUOTE ADDVARS))))))) (AND (NULL NLAMALST) (NULL NLAMLST) (NULL LAMALST) (RETURN NIL)) (* ;; "If thee is no DECLARE: and no nlambdas, dont bother to add any. note tha if thee is IS a DECLARE:, then we must check even if there are no nlambdas, because consider what happens when user changes the only nlambda to a lambda must replace the declare: by a nop addvars.") (SETQ PRTTYCOM (SUBPAIR (QUOTE (NLAMALST NLAMLST LAMALST)) (LIST NLAMALST NLAMLST LAMALST) (QUOTE (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA . NLAMALST) (NLAML . NLAMLST) (LAMA . LAMALST)))))) (COND ((AND (LISTP PRETTYCOMSLST) (NLISTP PRTTYCOMS)) (/NCONC1 PRETTYCOMSLST PRTTYCOM) (PRETTYCOM PRTTYCOMS T)))) ((NOT (EQUAL (CAR PRTTYTEM) (SETQ PRTTYNEW (LIST (QUOTE ADDVARS) (CONS (QUOTE NLAMA) (UNION NLAMALST (INTERSECTION LAM?LST (CDADAR PRTTYTEM)))) (CONS (QUOTE NLAML) (UNION NLAMLST (INTERSECTION LAM?LST (CDR (CADDAR PRTTYTEM))))) (CONS (QUOTE LAMA) (UNION LAMALST (INTERSECTION LAM?LST (CDR (CADDDR (CAR PRTTYTEM)))))))))) (* ;; "The reason for the unions and intersections is that prettydef simply may not know the fntyps of some of the functions in the file, namely those on lam?lst, and theefore tese should not be removed from NLAMA and NLAML if they are there from a previous makefile.") (/RPLACA PRTTYTEM PRTTYNEW) (AND (NLISTP PRTTYCOMS) (PRETTYCOM PRTTYCOMS T))) (T (RETURN NIL))) (PRETTYCOM PRTTYCOM) (RETURN T))) ) (PRINTDATE (LAMBDA (OUTSTREAM CHANGES) (* bvm%: " 1-Aug-86 15:51") (* ;;; "assumes that OUTSTREAM is a file open for output, and prints the date information for that file on it") (PROG ((DAT (DATE)) (ROOTNAME (ROOTFILENAME OUTSTREAM)) PREVPAIR FILEDATES) (if FILEPKGFLG then (if ROOTNAME then (/replace FILECHANGES of ROOTNAME with (SETQ CHANGES (FILEPKG.MERGECHANGES CHANGES (fetch FILECHANGES of ROOTNAME))))) (* ;; "The reason for the order of arguments in UNION is so that the changes will be listed in roughly the order made.") (SETQ FILEDATES (CONS (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ (FULLNAME OUTSTREAM)) (SETQ PREVPAIR (LAST (fetch FILEDATES of ROOTNAME))))) (* ;;; "Right now, FILEDATES simply keeps latest version and date, and original version and date. Latter for integrity checks on makefile remake, as described in filepackage. Note that don't want to change FILEDATES property until PRETTDEF completes. In case of control-d, the file will be deleted automatically.")) (PRINTDATE1 OUTSTREAM CHANGES DAT (fetch FILEDATE of (CAR PREVPAIR)) (fetch DATEFILENAME of (CAR PREVPAIR))) (* ; "PRINTDATE1 does the actual printing. It is a separate function so that it can be advised.") (RETURN FILEDATES))) ) (PRINTDATE1 (LAMBDA (OUTSTREAM CHANGES DAT PREVDATE PREVERS TERMINATING.STRING) (* bvm%: "18-Sep-86 19:08") (* ;;; "does the printing for PRINTDATE") (printout OUTSTREAM .FONT DEFAULTFONT "(" |.P2| (QUOTE FILECREATED) %, |.P2| DAT %, .FONT LAMBDAFONT |.P2| (FULLNAME OUTSTREAM) .FONT DEFAULTFONT) (* ;; "note that CHANGEFONT checks for FONTCHANGEFLG explicitly so that it won't do anything if FONTCHANGEFLG is NIL") (if (AND BUILDMAPFLG (NOT (DISPLAYP OUTSTREAM))) then (push MAPADR (ADD1 (GETFILEPTR OUTSTREAM))) (PRIN3 " " OUTSTREAM) (* ;; "The address of where the map begins will be stored in this slot. 8 spaces left because when radix is 8, can overflow seven spaces by a file of 300000 characters (Alice did it). The push is because of a feature no longer used where there could be two FILECREATED expressions at the head of a file font")) (if FILEPKGFLG then (if CHANGES then (printout OUTSTREAM T T 6 |.P2| (QUOTE changes) %, |.P2| (QUOTE to%:) %,, .PPVTL CHANGES)) (if PREVDATE then (printout OUTSTREAM T T 6 |.P2| (QUOTE previous) %, |.P2| (QUOTE date%:) %, |.P2| PREVDATE) (if PREVERS then (printout OUTSTREAM %, |.P2| PREVERS)))) (PRIN1 (OR TERMINATING.STRING ") ") OUTSTREAM))) (PRINTFNS (LAMBDA (X PRETTYDEFLG) (* lmm "13-OCT-82 16:44") (* ; "prettydeflg=T when called from prettydef.") (AND X (PROG (FNADRLST) (COND ((AND PRETTYDEFLG NEWFILEMAP) (SETQ FNADRLST (TCONC NIL (GETFILEPTR PRTTYFILE))) (TCONC FNADRLST NIL) (NCONC1 NEWFILEMAP (CAR FNADRLST)))) (PRIN1 (QUOTE %()) (PRINT (QUOTE DEFINEQ)) (PRETTYPRINT X (AND PRETTYDEFLG (OR FNADRLST T)) FNSLST) (* ; "FNSLST bound in prettydef to list of functions on this file. used for font stuff.") (PRIN1 (QUOTE %))) (AND FNADRLST (RPLACA (CDAR FNADRLST) (GETFILEPTR PRTTYFILE))) (TERPRI)))) ) (PRETTYCOM (LAMBDA (PRTTYCOM PRTTYFLG PRETTYCOMSTAIL) (* ; "Edited 14-Apr-88 18:26 by bvm") (PROG (PRTTYTEM) (COND ((NULL PRTTYCOM) (* ; "So that RECOMPILE and BRECOMPILE do not have to check before calling PRETTYCOM.") (RETURN)) ((AND PRTTYFLG (NEQ PRTTYFILE T)) (PRINT (COND (LISPXPRINTFLG (* ;; "PRETTYCOMPRINT is an nlambda that does a lispxprint, except when prettyheader is NIL, in hich case it does nothing.") (LIST (QUOTE PRETTYCOMPRINT) PRTTYCOM)) (T (LIST (QUOTE PRINT) (LIST (QUOTE QUOTE) PRTTYCOM) T T)))))) (COND ((LITATOM PRTTYCOM) (COND ((AND (NULL PRTTYFLG) (NOT (BOUNDP PRTTYCOM)) DWIMFLG (SETQ PRTTYTEM (FIXSPELL PRTTYCOM 70 USERWORDS T PRETTYCOMSTAIL (FUNCTION BOUNDP))) (SETQ PRTTYSPELLFLG T)) (SETQ PRTTYCOM PRTTYTEM))) (PRETTYVAR PRTTYCOM PRTTYFLG) (* ;; "FNS and VARS are printed as (RPAQQ atom value T) so that LOAD ALLPROP will still stre them in the value cell.") (RETURN PRTTYCOM)) (PRTTYFLG (* ; "PRETTYDEF called with a list for FNS or VARS,") (RETURN PRTTYCOM))) TOP (COND ((AND (NULL ORIGFLG) (SETQ PRTTYTEM (fetch (FILEPKGCOM MACRO) of (CAR PRTTYCOM)))) (for X on (SUBPAIR (CAR PRTTYTEM) (PRETTYCOM1 PRTTYCOM T T) (CDR PRTTYTEM)) do (PRETTYCOM (CAR X) NIL (AND PRETTYCOMSTAIL X)))) (T (SELECTQ (CAR PRTTYCOM) (FNS (PROG (PRTTYSPELLFLG) (PRINTFNS (PRETTYCOM1 PRTTYCOM T T) (NOT (NULL PRETTYCOMSTAIL))) (AND PRTTYSPELLFLG (EQ (CADR PRTTYCOM) (QUOTE *)) (LITATOM (SETQ PRTTYTEM (CADDR PRTTYCOM))) (PRETTYCOM PRTTYTEM)) (* ; "The FNSlst had an error in it that was corrected."))) ((VARS ARRAY) (for X in (PRETTYCOM1 PRTTYCOM T T) do (PRETTYVAR X))) (DECLARE%: (* ;; "Normally, expressions appearing in a symbolic file are (1) evaluated upon loading the file, (2) not evaluated when compiling the file, and (3) copied to the compile file. DECLARE: can be used to change state around any PRETTYCOM. The atomic symbols DONTCOPY, DOCOPY, DONTEVAL@COMPILE, DOEVAL@COMPILE, DONTEVAL@LOAD, and DOEVAL@LOAD have the obvious meaning. DECLARE: eliminates the pretty commands DECLARE, COMPROP, COMPROP*, PD, PC, and PC*. DECLARE: is defined as a functionthat evaluates all list expressions except when under a DONTEVAL@LOAD state.") (PRIN1 "(") (PRIN2 (QUOTE DECLARE%:)) (SPACES 1) (for LST on (PRETTYCOM1 PRTTYCOM T T) do (COND ((NLISTP (CAR LST)) (COND ((NOT (MEMB (CAR LST) DECLARETAGSLST)) (COND ((AND DWIMFLG (FIXSPELL (CAR LST) 70 DECLARETAGSLST T LST)) (SETQ PRTTYSPELLFLG T)) (T (GO ERROR))))) (PRIN2 (CAR LST)) (SPACES 1)) (T (TERPRI) (PRETTYCOM (CAR LST) NIL LST))) (SELECTQ (CAR LST) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (COND ((SETQ LST (CDR LST)) (PRINTDEF (CAR LST)) (SPACES 1)))) NIL)) (PRIN1 (QUOTE ") "))) ((CL:EVAL-WHEN) (* ;; "Has the syntax (EVAL-WHEN (times ...) coms ...). Dumps an EVAL-WHEN form on the file containing whatever is dumped by the given COMS.") (CL:ASSERT (AND (CL:CONSP (CADR PRTTYCOM)) (CL:SUBSETP (CADR PRTTYCOM) (QUOTE (EVAL CL:EVAL COMPILE CL:COMPILE LOAD CL:LOAD)))) NIL "The first argument to the ~S command must be a list of times") (CL:FORMAT T "(~S ~S" (QUOTE CL:EVAL-WHEN) (CADR PRTTYCOM)) (for LST on (PRETTYCOM1 (CDR PRTTYCOM) T NIL) do (CL:TERPRI) (PRETTYCOM (CAR LST) NIL LST)) (CL:FORMAT T "~&)~%%")) ((SPECVARS LOCALVARS GLOBALVARS) (SETQ PRTTYTEM (CONS (CAR PRTTYCOM) (PRETTYCOM1 PRTTYCOM T T))) (PRIN1 "(") (MAPRINT (QUOTE (DECLARE%: DOEVAL@COMPILE DONTCOPY)) NIL NIL NIL NIL (FUNCTION PRIN2)) (TERPRI) (PRINTDEF1 PRTTYTEM) (PRIN1 ") ")) ((PROP IFPROP) (PROG ((PRTTYFLG (EQ (CAR PRTTYCOM) (QUOTE IFPROP))) (PRTTYTEM (CADR PRTTYCOM)) (PRTTYX (PRETTYCOM1 (CDR PRTTYCOM) T T))) (* ; "IFPROP only dumps those property values that are non-NIL.") (COND ((LISTP PRTTYTEM) (for X in PRTTYTEM do (MAKEDEFLIST PRTTYX X PRTTYFLG))) ((NEQ PRTTYTEM (QUOTE ALL)) (MAKEDEFLIST PRTTYX PRTTYTEM PRTTYFLG PRTTYCOM)) ((ASSOC (QUOTE PUTPROPS) PRETTYPRINTMACROS) (for ATM in PRTTYX do (PRINTDEF1 (CONS (QUOTE PUTPROPS) (CONS ATM (CONS (for X on (GETPROPLIST ATM) by (CDDR X) unless (MEMB (CAR X) SYSPROPS) join (LIST (CAR X) (CADR X))))))))) (T (for ATM in PRTTYX do (printout NIL %,, "(" |.P2| (QUOTE PUTPROPS) %, |.P2| ATM) (SETQ PRTTYTEM (ADD1 (POSITION))) (for X on (GETPROPLIST ATM) by (CDDR X) unless (MEMB (CAR X) SYSPROPS) do (printout NIL .TAB PRTTYTEM .PPV (CAR X) %, .PPV (CADR X))) (PRIN1 (QUOTE ") "))))))) (P (* ; "Arbitrary expression to evaluate when loaded. Be sure to prettyprint as code") (for X in (SETQ PRTTYTEM (PRETTYCOM1 PRTTYCOM T)) do (PRINTDEF1 X T))) (INITVARS (for X in (PRETTYCOM1 PRTTYCOM T T) do (COND ((LISTP X) (OR (EQ (CAR X) COMMENTFLG) (PRETTYVAR1 (QUOTE RPAQ?) (CAR X) (CDR X) NIL T))) (T (PRETTYVAR1 (QUOTE RPAQ?) X NIL))))) (ADDVARS (for X in (PRETTYCOM1 PRTTYCOM T T) do (PRETTYVAR1 (QUOTE ADDTOVAR) (CAR (OR (LISTP X) (ERRORX (LIST 4 X)))) (CDR X) NIL T))) (APPENDVARS (for X in (PRETTYCOM1 PRTTYCOM T T) do (PRETTYVAR1 (QUOTE APPENDTOVAR) (CAR (OR (LISTP X) (ERRORX (LIST 4 X)))) (CDR X) NIL T))) (E (for X in (PRETTYCOM1 PRTTYCOM T) do (EVAL X))) (COMS (for X on (PRETTYCOM1 PRTTYCOM T) do (PRETTYCOM (CAR X) NIL (AND PRETTYCOMSTAIL X)))) (ORIGINAL (LET ((ORIGFLG T)) (DECLARE (SPECVARS ORIGFLG)) (for X on (PRETTYCOM1 PRTTYCOM T) do (PRETTYCOM (CAR X) NIL (AND PRETTYCOMSTAIL X))))) (BLOCKS (SETQ PRTTYTEM (PRETTYCOM1 PRTTYCOM T T)) (PRIN1 "(") (MAPRINT (QUOTE (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY)) NIL NIL NIL NIL (FUNCTION PRIN2)) (TERPRI) (for X in PRTTYTEM do (PRINTDEF1 (CONS (QUOTE BLOCK%:) X))) (PRIN1 ") ")) ((*) (COND ((EQ (CADR PRTTYCOM) (QUOTE *)) (* ; "Form-feed if super-comment indicated. Use * no matter what current COMMENTFLG is.") (printout NIL .PAGE)) (T (RPTQ 3 (TERPRI)))) (COND ((AND (COND (FILEFLG FONTCHANGEFLG) (T (EQ FONTCHANGEFLG (QUOTE ALL)))) LAMBDAFONT) (CHANGEFONT LAMBDAFONT) (PRIN2 PRTTYCOM) (CHANGEFONT DEFAULTFONT)) (T (PRIN2 PRTTYCOM))) (RPTQ 2 (TERPRI))) (COND ((AND (LITATOM (CAR PRTTYCOM)) (fetch (FILEPKGTYPE GETDEF) of (CAR PRTTYCOM))) (* ; "If its the name of a type with a GETDEF, put out PUTDEF expressions.") (for X in (PRETTYCOM1 PRTTYCOM T T) do (printout NIL "(" |.P2| (QUOTE PUTDEF) %, |.P2| (KWOTE X) %, |.P2| (KWOTE (CAR PRTTYCOM)) %, .PPV (KWOTE (GETDEF X (CAR PRTTYCOM))) ")" T))) ((FIXSPELL (CAR PRTTYCOM) 70 FILEPKGCOMSPLST T PRTTYCOM) (SETQ PRTTYSPELLFLG T) (GO TOP)) (T (GO ERROR)))))) (RETURN PRTTYCOM) ERROR (ERROR "bad file package command" PRTTYCOM))) ) (PRETTYVAR (LAMBDA (VAR FLG) (* lmm "27-Aug-84 20:15") (* ; "I don't see what FLG is used for--rmk") (PROG (VAL TEM) (* ;; "Dumps value of VAR for reloading. If VAR is non-atomic, of form (var form) where VAR is to be dumped so as to be set to value of form, computed at LOAD time.") (COND ((LITATOM VAR) (AND (EQ (SETQ VAL (GETTOPVAL VAR)) (QUOTE NOBIND)) (printout T T "****WARNING: " |.P2| VAR " is unbound" T T)) (PRETTYVAR1 (QUOTE RPAQQ) VAR VAL)) ((LISTP VAR) (SETQ VAL (CDR VAR)) (SETQ VAR (CAR VAR)) (COND ((AND (EQ (CAR (SETQ TEM (LISTP (CAR (LISTP VAL))))) (QUOTE QUOTE)) (LISTP (CDR TEM))) (PRETTYVAR1 (QUOTE RPAQQ) VAR (CADR TEM))) ((EQ VAR COMMENTFLG) (* ; "don't print out comments")) ((OR (NULL VAL) (AND (LISTP VAL) (OR (NUMBERP (CAR VAL)) (EQ T (CAR VAL)) (NULL (CAR VAL))) (NULL (CDR VAL)))) (* ; "A minor optimization for RPAQQ's to suppresses unnecessary load-time eval's.") (PRETTYVAR1 (QUOTE RPAQQ) VAR (CAR VAL))) (T (PRETTYVAR1 (QUOTE RPAQ) VAR VAL NIL T)))) (T (ERROR "Bad variable specification" VAR))))) ) (PRETTYVAR1 (LAMBDA (OP VAR E DEF TAILFLG) (* ; "Edited 10-Feb-87 18:01 by Pavel") (* ;; "does printing for VAR, ADDVAR, and PROP commands. OP is the name of the function, VAR the operand, and E the rest of the expression to be printed, either as an element, or as a tail if TAILFLG=T. VAR is printed in LAMBDAFONT. If VAR is a list, each element is printed in LAMBDAFONT. This option is used to print both the name of the atom and its property for PROP commands.") (PROG ((LASTCOL (LINELENGTH)) TEM (*PRINT-ARRAY* T)) (* ; "This is supposed to be bound above here but isn't in some case I can't find. --Pavel") (TERPRI) (* ;; "because if you have a really bold font, it lines up the bottoms, but you can get crowded into the line above.") (COND ((AND (MEMB OP (QUOTE (RPAQQ RPAQ RPAQ?))) (EQ (TYPENAME (SETQ TEM (COND (TAILFLG (CAR E)) (T E)))) (QUOTE ARRAYP))) (* ;; "dump arrays and bitmaps specially. This really ought to be handled by having *PRINT-ARRAY* say how to dump these, so that only a single expression ends up on the file.") (* ;; "1 December 1986, Pavel: Well, I fixed bitmaps for this. Maybe I'll fix arrays as well...") (* ;; "10 February 1987, Pavel: ARRAYP's are now fixed as well, but not by using *PRINT-ARRAY*. Rather than invent another non-standard reader macro, I simply store the elements in a list and use a non-READing version of READARRAY.") (COND ((EQ OP (QUOTE RPAQQ)) (SETQQ OP RPAQ))) (printout NIL "(" |.P2| OP %, |.P2| VAR %,) (PRIN2 (BQUOTE (READARRAY-FROM-LIST (\, (ARRAYSIZE TEM)) (QUOTE (\, (ARRAYTYP TEM))) (\, (ARRAYORIG TEM)) (QUOTE (\, (PRINTARRAY-TO-LIST TEM)))))) (printout NIL (QUOTE %)) T)) ((ASSOC OP PRETTYPRINTMACROS) (OR TAILFLG (SETQ E (CONS E))) (PRINTDEF (CONS OP (COND ((LISTP VAR) (APPEND VAR E)) (T (CONS VAR E)))) 0 DEF)) (T (PRIN1 (QUOTE %()) (PRIN2 OP) (SPACES 1) (SETQ TEM (POSITION)) (COND ((AND FONTCHANGEFLG PRETTYCOMFONT) (CHANGEFONT PRETTYCOMFONT))) (COND ((LISTP VAR) (MAPRINT VAR NIL NIL NIL NIL (FUNCTION PRIN2))) (T (PRIN2 VAR))) (COND ((AND FONTCHANGEFLG PRETTYCOMFONT) (CHANGEFONT DEFAULTFONT))) (SPACES 1) (PRINTDEF E (COND ((OR (NLISTP E) (FITP E NIL NIL LASTCOL)) (POSITION)) (T TEM)) DEF TAILFLG) (PRIN1 (QUOTE %))))) (TERPRI))) ) (PRETTYCOM1 (LAMBDA (PRTYCOM PRTYFLG REMOVECOMMENTS) (* rmk%: "13-Feb-85 22:54") (PROG (PRTYX) (COND ((AND (EQ (CAR (LISTP (SETQ PRTYX (CDR PRTYCOM)))) (QUOTE *)) (CDR PRTYX)) (COND ((AND (LITATOM (SETQ PRTYX (CADR PRTYX))) PRTYFLG) (* ; "Checks to see if the variable is already being dumped and dumps it if not.") (PRETTYCOM PRTYX))) (SETQ PRTYX (COND (PRTYFLG (EVAL PRTYX)) ((LITATOM PRTYX) (AND (NEQ (SETQ PRTYX (GETTOPVAL PRTYX)) (QUOTE NOBIND)) PRTYX)) (T (RESETVARS (DWIMLOADFNSFLG) (RETURN (AND (ERSETQ (SETQ PRTYX (EVAL PRTYX))) PRTYX)))))))) (RETURN (if (AND REMOVECOMMENTS (LISTP PRTYX)) then (SUBSET PRTYX (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG))))) else PRTYX)))) ) (ENDFILE (LAMBDA (FILE) (* wt%: "10-SEP-78 13:54") (PRINT (QUOTE STOP) FILE) (CLOSEF FILE))) (MAKEDEFLIST (LAMBDA (X PROP FLG) (* ; "Edited 11-Feb-87 11:10 by bvm:") (for Z in X bind TEM do (COND ((AND (LITATOM Z) (SETQ TEM (SOME (GETPROPLIST Z) (FUNCTION (LAMBDA (X) (EQ X PROP))) (QUOTE CDDR)))) (PRETTYVAR1 (QUOTE PUTPROPS) (LIST Z PROP) (CADR TEM) (OR (EQ PROP (QUOTE EXPR)) (MEMB PROP MACROPROPS)))) ((NULL FLG) (* ; "PROP command") (EXEC-FORMAT "(no ~S property for ~S)~%%" PROP Z))))) ) (PP (NLAMBDA X (* lmm "15-Nov-86 00:54") (DECLARE (LOCALVARS . T)) (MAPC (NLAMBDA.ARGS X) (FUNCTION (LAMBDA (NAME) (for TYPE in (TYPESOF NAME NIL (QUOTE (FIELDS)) (QUOTE CURRENT)) do (CL:FORMAT *TERMINAL-IO* "~A definition for ~S:~%%" TYPE NAME) (SHOWDEF NAME TYPE)))))) ) (PP* (NLAMBDA X (* lmm "14-Aug-84 19:11") (DECLARE (LOCALVARS . T)) (* ;; "Prettyprints definitions to terminal with comments not suppressed.") (LET ((**COMMENT**FLG NIL) (*STANDARD-OUTPUT* (GETSTREAM T (QUOTE OUTPUT)))) (DECLARE (SPECVARS **COMMENT**FLG *STANDARD-OUTPUT*)) (PRETTYPRINT (NLAMBDA.ARGS X)))) ) (PPT (NLAMBDA X (* lmm "14-Aug-84 19:12") (DECLARE (LOCALVARS . T)) (* ;; "Prettyprints definitions to terminal with clisp translations shown.") (LET ((*STANDARD-OUTPUT* (GETSTREAM T (QUOTE OUTPUT)))) (DECLARE (SPECVARS *STANDARD-OUTPUT*)) (RESETVARS ((PRETTYTRANFLG T)) (RETURN (PRETTYPRINT (NLAMBDA.ARGS X)))))) ) (PRETTYPRINT (LAMBDA (FNS PRETTYDEFLG FNSLST) (* ; "Edited 11-Feb-87 11:11 by bvm:") (* ;; "PRETTYDEFLG is supplied when called from PRINTFNS. it is either a paatial file map or T, so that it is also used as a flag for whether you are being called from prettydef.") (* ;; "Note that prettyprint does all of its printing to standard output file and using current readtable. it assumes that higher functions have set these appropriately, as is the case when called from prettydef, pp, pp*,") (RESETLST (RESETSAVE NIL (LIST (FUNCTION DSPFONT) (DSPFONT) (GETSTREAM NIL (QUOTE OUTPUT)))) (PROG ((CLK (CLOCK 0)) (NEWADRLST (LISTP PRETTYDEFLG)) (FILEFLG (NOT (DISPLAYP (OUTPUT)))) FN DEF ADR LST SKIPPEDLST TEM) (* ; "NEWADRLST Corresponds to the current entry on NEWFILEMAP. Is in TCONC format.") (COND ((ATOM (SETQ LST FNS)) (SETQ LST (EVALV FNS)))) LP (COND ((NLISTP LST) (RETURN FNS)) ((AND FILEFLG (IGREATERP (CLOCKDIFFERENCE CLK) 30000)) (* ; "Every 30 seconds say what function we're working on") (SETQ CLK (CLOCK 0)) (PRIN2 (CAR LST) T T) (PRIN1 (QUOTE ", ") T))) (SETQ FN (CAR LST)) (TERPRI) (* ; "The initial TERPRI is not in map") (AND NEWADRLST (TCONC NEWADRLST (LIST FN (GETFILEPTR PRTTYFILE)))) (* ; "Address of start.") LP1 (SETQ DEF (VIRGINFN FN)) (AND PRETTYDEFLG (SELECTQ (ARGTYPE DEF) (1 (SETQ NLAMLST (CONS FN NLAMLST))) (2 (SETQ LAMALST (CONS FN LAMALST))) (3 (SETQ NLAMALST (CONS FN NLAMALST))) (NIL (SETQ LAM?LST (CONS FN LAM?LST))) NIL)) (* ; "So prettydef can add the appropriate DECLARE:") (COND ((NULL DEF) (COND ((AND (NULL PRETTYDEFLG) FN (BOUNDP FN)) (* ; "No fn definition, but is a variable. Only make this check when called via PP or PP*") (PRINTDEF (EVALV FN) 2)) (T (GO NOPRINT)))) ((NULL (EXPRP DEF)) (GO NOPRINT)) (T (AND ADDSPELLFLG (ADDSPELL FN)) (COND ((AND PRETTYDEFLG SOURCEFILE (NULL SOURCEFILENV) (NULL (SELECTQ REPRINTFNS (ALL T) ((T EXPRS) (EXPRP FN)) (AND (LISTP REPRINTFNS) (FMEMB FN REPRINTFNS)))) (PRETTYPRINT1 FN)) (* ; "Was a fn to be copied from old file, and we succeeded")) (T (* ; "Prettyprint afresh") (PRETTYPRINT3 FN DEF PRETTYDEFLG))))) DEFPRINTED (* ;;; "At this point we have prettyprinted FN one way or another") (AND NEWADRLST (RPLACD (CDADR NEWADRLST) (GETFILEPTR PRTTYFILE))) (* ; "Store end address") (TERPRI) (* ; "TERPRI is not included in map address") (SETQ LST (CDR LST)) (GO LP) NOPRINT (COND ((AND FILEFLG SOURCEFILE (PRETTYPRINT1 FN)) (GO DEFPRINTED)) ((AND (NULL PRETTYDEFLG) (SETQ TEM (EDITLOADFNS? FN))) (* ; "only make this check when called from PP or PP*") (LOADFNS FN TEM (QUOTE PROP)) (COND ((GETPROP FN (QUOTE EXPR)) (GO LP1))) (PRINT (CONS FN (QUOTE (not found))) T T)) ((AND DWIMFLG (NULL DEF) (SETQ TEM (MISSPELLED? FN 70 USERWORDS (AND PRETTYDEFLG T) LST)) (NEQ TEM FN)) (/RPLACA LST (SETQ FN TEM)) (AND NEWADRLST (FRPLACA (CADR NEWADRLST) FN)) (* ; "Fixes filemap.") (AND PRETTYDEFLG (SETQ PRTTYSPELLFLG T)) (GO LP1))) (EXEC-FORMAT "(~S not printable)~%%" FN) (AND LISPXHISTORY (LISPXPUT (QUOTE *ERROR*) FN NIL (CAAR LISPXHISTORY))) (COND (NEWADRLST (SETQ TEM (NLEFT (CAR NEWADRLST) 2)) (RPLACD TEM) (RPLACD NEWADRLST TEM))) LP3 (SETQ LST (CDR LST)) (GO LP)))) ) (PRETTYPRINT1 (LAMBDA (FN) (* bvm%: "30-Aug-86 17:25") (* ;;; "Like BRECOMPILE1. Obtains FN from SOURCEFILE. works whether the file has previously been mapped by PRETTYDEF, LOAD, or LOADFNS (or patially mapped)") (WITH-READER-ENVIRONMENT (OR SOURCEFILENV DESTINATIONENV) (PROG (ADR TEM) (COND ((NULL OLDFILEMAP) (GO DEFQLP)) ((PRETTYPRINT2 FN) (RETURN FN)) ((NULL (CAR OLDFILEMAP)) (RETURN NIL) (* ; "The entire file has been scanned.")) (T (GO FNLP) (* ; "Already inside of DEFINEQ."))) DEFQLP (* ; "Find DEFINEQ") (SELECTQ (SETQ TEM (RATOM SOURCEFILE)) ((STOP NIL) (* ; "End of file reached.") (SETQ OLDFILEMAP (CONS NIL OLDFILEMAP)) (* ; "Just to inform future calls to PRETTYPRINT1 not to bother scanning.") (RETURN NIL)) (%( (COND ((EQ (SETQ TEM (RATOM SOURCEFILE)) (QUOTE DEFINEQ)) (COND ((NULL OLDFILEMAP) (SETQ OLDFILEMAP (LIST T)) (* ;; "In case functionis found right off, OLDFILEMAP must not be left as NIL or else next call to PRETTYPRINT1 will not realize are alredy inside of DEFINEQ."))) (GO FNLP)) (T (SKREAD SOURCEFILE (QUOTE %())))) (SKREAD SOURCEFILE TEM)) (GO DEFQLP) FNLP (SELECTQ (SETQ TEM (RATOM SOURCEFILE)) (%) (* ; "End of DEFINEQ.") (GO DEFQLP)) ((%( %[) NIL) (SCANFILEHELP)) (SETQ ADR (SUB1 (GETFILEPTR SOURCEFILE))) (SETQ TEM (RATOM SOURCEFILE)) (SETFILEPTR SOURCEFILE ADR) (SKREAD SOURCEFILE) (COND ((EQ TEM FN) (PRETTYPRINT2 FN ADR (GETFILEPTR SOURCEFILE)) (* ; "copies the bytes.") (RETURN FN)) (T (SETQ OLDFILEMAP (CONS (CONS TEM (CONS ADR (GETFILEPTR SOURCEFILE))) OLDFILEMAP)) (* ;; "Note that this situation only occurs when (a) the entire file was not peviously scanned, e.g. if loaded with buildmapflg off, and (b) user is doing a remake, and (c) this functio was either dumped directly because it was changed, or else it has been deleted from the FNS. The function is added to OLDFILEMAP just in case it is out of order.") (GO FNLP)))))) ) (PRETTYPRINT2 (LAMBDA (FN FROM TO) (* bvm%: "30-Aug-86 18:13") (* ;; "Copies function from sourcefile to prettyfile. looking it up on the map when not already given address. returns nil if not there") (PROG (TEM) (COND (FROM) ((for X in OLDFILEMAP thereis (COND ((NLISTP X) NIL) ((EQ (CAR X) FN) (* ;; "occurs when remaking a file without a map, and a function is previously skipped that later is needed.") (SETQ TEM X)) ((LISTP (CDDR X)) (SETQ TEM (FASSOC FN (CDDR X)))))) (SETQ FROM (CADR TEM)) (SETQ TO (CDDR TEM))) (T (RETURN NIL))) (SETFILEPTR SOURCEFILE FROM) (RATOM SOURCEFILE) (* ;; "The RATOM skips the paren. the reason for the RATOM instead of simply setting file ptr to (ADD1 FROM) is that there may be font info there.") (COND ((NEQ FN (SETQ TEM (READ SOURCEFILE))) (* ; "Consistency check.") (LISPXPRINT (CONS FN TEM) T) (ERROR (QUOTE "filemap does not agree with contents of") SOURCEFILE T))) (if (NULL SOURCEFILENV) then (* ; "compatible environments, just copy characters") (COPYCHARS SOURCEFILE PRTTYFILE FROM TO) else (* ; "incompatible, have to read old def and reprettyprint") (SETQ TEM (READ SOURCEFILE)) (* ; "old definition") (WITH-READER-ENVIRONMENT DESTINATIONENV (PRETTYPRINT3 FN TEM T))) (* ; "Initial and final TERPRI's are done by callers; they are not in map.") (RETURN FN))) ) (PRETTYPRINT3 (LAMBDA (FN DEF PRETTYDEFLG) (* bvm%: "30-Aug-86 17:18") (LET (TEM) (AND (OR (SELECTQ CLISPIFYPRETTYFLG ((T EXPRS) (EXPRP FN)) (ALL T) (CHANGES (AND PRETTYDEFLG (MEMB FN CHANGES))) (MEMB FN CLISPIFYPRETTYFLG)) (AND (SUPERPRINTEQ (CAR (SETQ TEM (CADDR DEF))) COMMENTFLG) (EQ (CADR TEM) (QUOTE DECLARATIONS%:)) (MEMB (QUOTE CLISPIFY) TEM))) (SETQ DEF (CLISPIFY DEF))) (* ;; "If the function is stored on property list, only clispify if user specifically said MAKEFILE (file CLISPIFY), otherwise, assume that functions on property list have already been clispified") (COND ((AND LAMBDAFONT FONTCHANGEFLG) (PRIN1 (QUOTE %()) (* ;; "The font change is after the paren because of problems with updating filemaps when moving back and forth between -10 and -D systems--rmk") (CHANGEFONT LAMBDAFONT) (PRIN2 FN) (CHANGEFONT DEFAULTFONT) (TERPRI)) (T (PRIN1 (QUOTE %()) (PRINT FN))) (PRINTDEF DEF 2 (QUOTE FNS) NIL FNSLST) (PRIN1 (QUOTE %))) FN)) ) (PRINTDEF1 [LAMBDA (EXPR FORMFLG) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ; "Edited 16-Apr-2018 10:14 by rmk:") (* ; "Edited 14-Apr-88 18:21 by bvm") (* ;; "RMK: Special for DEFUNs: build filemap as per PRINTFNS") (* ;; "Used by MAKEFILE to print P, etc expressions. ") (TERPRI) (LET (STARTPOS ENDPOS) (IF (AND FORMFLG NEWFILEMAP (EQ (CAR EXPR) 'CL:DEFUN)) THEN (SETQ STARTPOS (GETFILEPTR PRTTYFILE))) (PRINTDEF EXPR NIL FORMFLG NIL FNSLST) [IF STARTPOS THEN (SETQ ENDPOS (GETFILEPTR PRTTYFILE)) (NCONC1 NEWFILEMAP (LIST STARTPOS ENDPOS (CONS (CADR EXPR) (CONS STARTPOS ENDPOS] (TERPRI]) (SUPERPRINTEQ (LAMBDA (X Y) (OR (EQ X Y) (AND Y (EQ (CDR (FASSOC X PRETTYEQUIVLST)) Y))))) (SUPERPRINTGETPROP (LAMBDA (ATM PROP) (* wt%: "17-SEP-79 15:57") (OR (GETPROP (CDR (FASSOC ATM PRETTYEQUIVLST)) PROP) (GETPROP ATM PROP))) ) (CHANGEFONT (LAMBDA (FONTCLASS FILE) (* lmm "17-Jan-86 20:59") (* ;; "for calls to changefont when not under prettyprin prettydef. This is only for non-D systems. For D, DSPFONT is moved'ed in.") (* ;; "Don't bother testing for FONTCHANGEFLG=ALL, because presumably the FONTCLASS will have a NULL entry if display printing isn't wanted. FONTCHANGEFLG=ALL tests are really only needed if something expensive can be avoided by advance knowledge.") (AND FONTCHANGEFLG FONTCLASS (DSPFONT FONTCLASS FILE))) ) ) (DEFINEQ (READARRAY (LAMBDA (SIZE TYPE ORIG) (* rrb " 4-JUL-80 17:07") (* ;; "type is one of: POINTER, FIXP, SMALLPOSP BYTE DOUBLEPOINTER or a number which is the place (between 0 and SIZE) where FIXPs stop and POINTERs begin.") (PROG (X (A (ARRAY SIZE TYPE NIL ORIG)) M DELTA) LP (COND ((NEQ (READC) (QUOTE %()) (GO LP))) (SETQ M 1) (SETQ DELTA (SUB1 (OR ORIG 1))) LP1 (COND ((NOT (IGREATERP M SIZE)) (SETA A (IPLUS M DELTA) (READ)) (SETQ M (ADD1 M)) (GO LP1)) ((NULL (READ)) (* ;; "PRINTARRAY writes a NIL if there are no elements in the array for which the left half must be set using SETD, otherwise it writes a T.") (GO OUT))) (SETQ M (COND ((NUMBERP TYPE) (ADD1 TYPE)) ((EQ TYPE (QUOTE DOUBLEPOINTER)) 1) (T (SHOULDNT)))) LP2 (COND ((NOT (IGREATERP M SIZE)) (SETD A (IPLUS M DELTA) (READ)) (SETQ M (ADD1 M)) (GO LP2))) OUT (READ) (* ; "Reads the final right parentheses surrounding the elements of the array.") (RETURN A))) ) (PRINTARRAY (LAMBDA (V) (* bvm%: " 3-Oct-86 12:57") (* ; "Used by prettydef. Included in ABASIC because it uses LOC and VAG on the 10") (PROG (A N M TYPE FLG DOUBLEFLG ORIG) (COND ((AND (LITATOM V) (ARRAYP (SETQ A (EVALV V (QUOTE PRINTARRAY))))) (PRINT (BQUOTE (SETQ (\, V) (READARRAY (\, (SETQ N (ARRAYSIZE A))) (QUOTE (\, (SETQ TYPE (ARRAYTYP A)))) (\, (SETQ ORIG (ARRAYORIG A)))))))) ((ARRAYP V) (* ; "Just dumps the element expression--assumes that READARRAY has already been written") (SETQ A V) (SETQ N (ARRAYSIZE A)) (SETQ TYPE (ARRAYTYP A)) (SETQ ORIG (ARRAYORIG A))) (T (RETURN (HELP V "not array")))) (PRIN1 (QUOTE %()) (SETQ DOUBLEFLG (OR (EQ TYPE (QUOTE DOUBLEPOINTER)) (NUMBERP TYPE))) (* ; "note if this array has different ELTD.") (SETQ M 1) LP (COND ((NOT (IGREATERP M N)) (COND ((OR (EQ TYPE (QUOTE POINTER)) DOUBLEFLG) (PRINT (ELT A (SUB1 (IPLUS M ORIG))))) (T (* ; "changed from PRINT to PRIN2 so would look better in file.") (PRIN2 (ELT A (SUB1 (IPLUS M ORIG)))) (SPACES 1))) (* ;; "check for any non-NIL entries in the ELTD part of the double arrays. If there are none, format for print out avoids lots of NILs.") (AND DOUBLEFLG (COND ((NUMBERP TYPE) (* ; "check for M being in the double pointer part of the array") (IGREATERP M TYPE)) (T T)) (ELTD A (SUB1 (IPLUS M ORIG))) (SETQ FLG T)) (SETQ M (ADD1 M)) (GO LP)) ((NULL (PRINT FLG)) (* ; "if FLG is NULL, there are non-NIL double word entries.") (GO OUT))) (SETQ M (COND ((EQ TYPE (QUOTE DOUBLEPOINTER)) (* ; "all entries are double") 1) ((NUMBERP TYPE) (* ; "first TYPE elements in the array are numbers") (ADD1 TYPE)))) LP1 (COND ((NOT (IGREATERP M N)) (PRINT (ELTD A (SUB1 (IPLUS M ORIG)))) (SETQ M (ADD1 M)) (GO LP1))) OUT (PRIN1 (QUOTE %))) (RETURN A))) ) (READARRAY-FROM-LIST (LAMBDA (SIZE TYPE ORIG ELEMENTS) (* ; "Edited 10-Feb-87 17:59 by Pavel") (* ;;; "This is not written in the most straightforward way possible. Rather, in order to minimize the possibility of destabilization, we have kept this as much like READARRAY as possible. In essence, the only change is to use POP instead of READ.") (* ;; "type is one of: POINTER, FIXP, SMALLPOSP BYTE DOUBLEPOINTER or a number which is the place (between 0 and SIZE) where FIXPs stop and POINTERs begin.") (PROG (X (A (ARRAY SIZE TYPE NIL ORIG)) M DELTA) LP (SETQ M 1) (SETQ DELTA (SUB1 (OR ORIG 1))) LP1 (COND ((NOT (IGREATERP M SIZE)) (SETA A (IPLUS M DELTA) (pop ELEMENTS)) (SETQ M (ADD1 M)) (GO LP1)) ((NULL (pop ELEMENTS)) (* ;; "PRINTARRAY writes a NIL if there are no elements in the array for which the left half must be set using SETD, otherwise it writes a T.") (GO OUT))) (SETQ M (COND ((NUMBERP TYPE) (ADD1 TYPE)) ((EQ TYPE (QUOTE DOUBLEPOINTER)) 1) (T (SHOULDNT)))) LP2 (COND ((NOT (IGREATERP M SIZE)) (SETD A (IPLUS M DELTA) (pop ELEMENTS)) (SETQ M (ADD1 M)) (GO LP2))) OUT (RETURN A))) ) (PRINTARRAY-TO-LIST (LAMBDA (V) (* ; "Edited 10-Feb-87 18:09 by Pavel") (* ;;; "This code is not written in the most straighforward way possible. Rather, to minimize the possibility of destabilization, we attempt to make it as much like PRINTARRAY as we can. In essence, the only changes are to PUSH the elements onto RESULT instead of printing them. At the end, we return the reversal of RESULT.") (PROG ((RESULT NIL) A N M TYPE FLG DOUBLEFLG ORIG) (COND ((ARRAYP V) (SETQ A V) (SETQ N (ARRAYSIZE A)) (SETQ TYPE (ARRAYTYP A)) (SETQ ORIG (ARRAYORIG A))) (T (RETURN (HELP V "not array")))) (SETQ DOUBLEFLG (OR (EQ TYPE (QUOTE DOUBLEPOINTER)) (NUMBERP TYPE))) (* ; "note if this array has different ELTD.") (SETQ M 1) LP (COND ((NOT (IGREATERP M N)) (push RESULT (ELT A (SUB1 (IPLUS M ORIG)))) (* ;; "check for any non-NIL entries in the ELTD part of the double arrays. If there are none, format for print out avoids lots of NILs.") (AND DOUBLEFLG (COND ((NUMBERP TYPE) (* ; "check for M being in the double pointer part of the array") (IGREATERP M TYPE)) (T T)) (ELTD A (SUB1 (IPLUS M ORIG))) (SETQ FLG T)) (SETQ M (ADD1 M)) (GO LP))) (push RESULT FLG) (COND ((NULL FLG) (* ; "if FLG is NULL, there are non-NIL double word entries.") (GO OUT))) (SETQ M (COND ((EQ TYPE (QUOTE DOUBLEPOINTER)) (* ; "all entries are double") 1) ((NUMBERP TYPE) (* ; "first TYPE elements in the array are numbers") (ADD1 TYPE)))) LP1 (COND ((NOT (IGREATERP M N)) (push RESULT (ELTD A (SUB1 (IPLUS M ORIG)))) (SETQ M (ADD1 M)) (GO LP1))) OUT (RETURN (REVERSE RESULT)))) ) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS CHANGFONT MACRO (= . DSPFONT)) ) ) (* ; "COPYRIGHT") (DEFINEQ (PRINTCOPYRIGHT [LAMBDA (FILENAME) (* ; "Edited 31-Aug-99 09:06 by rmk:") (* ; "Edited 31-Aug-99 09:01 by rmk:") (* edited%: " 1-Jan-85 20:16") (* ;;; "CALLED BY PRETTYDEF TO PUT a copyright notice on a file. The globalvar COPYRIGHTOWNERS is used to determine the possible copyright owners when it is determined the file doesn't have a copyright yet and has never been asked if the programmer wanted one. The whole copyright mechanism can be turned off by setting COPYRIGHTFLG to NEVER -- originaly NIL. If the file is copyrighted, any year the file is editted the new year is tacked on to the list of copyright years. The copyright notice comes immediately after the FILECREATED expression * *") (PROG [(OWNER (GETPROP FILENAME 'COPYRIGHT] (AND [OR OWNER (AND COPYRIGHTFLG (SETQ OWNER (ASKUSER (if (EQ COPYRIGHTFLG 'DEFAULT) then 0 else DWIMWAIT) (CONSTANT (CHARACTER (CHARCODE LF))) (CONCAT "Copyright owner for file " FILENAME ": ") (NCONC [MAPCAR COPYRIGHTOWNERS (FUNCTION (LAMBDA (X) (LIST (CAR X) "" 'EXPLAINSTRING (CONCAT (CAR X) " - " (CADR X)) 'RETURN (CADR X) 'CONFIRMFLG T] (CONS (if (SETQ OWNER (ASSOC DEFAULTCOPYRIGHTOWNER COPYRIGHTOWNERS)) then (LIST (CONSTANT (CHARACTER (CHARCODE LF))) (CONCAT DEFAULTCOPYRIGHTOWNER " ") 'EXPLAINSTRING (CONCAT " - " (CADR OWNER) " [Default]") 'NOECHOFLG T 'RETURN (CADR OWNER)) else '(% "No copyright notice now " EXPLAINSTRING " - no copyright notice now [Default]" NOECHOFLG T RETURN NIL)) DEFAULTCOPYRIGHTKEYLST)) T T)) (/PUTPROP FILENAME 'COPYRIGHT (SETQ OWNER (LIST OWNER] (COND ((NEQ (CAR OWNER) 'NONE) (PROG ((CURRENTYEAR (SUBATOM (DATE (DATEFORMAT YEAR.LONG NO.TIME)) -4 -1))) (OR (MEMBER CURRENTYEAR (CDR OWNER)) (NCONC1 OWNER CURRENTYEAR))) (PRINTCOPYRIGHT1 OWNER]) (PRINTCOPYRIGHT1 [LAMBDA (OWNER) (* ; "Edited 6-Apr-90 10:36 by jds") (PROG ((DATES (CDR OWNER)) (SEMICOLON (AND (READTABLEPROP *READTABLE* 'COMMONLISP) "; ")) (PRIVATE NIL)) (COND ((EQ (CAR DATES) T) (SETQ PRIVATE T) (pop DATES))) (COND (SEMICOLON (* ; "do CommonLisp style comment") (PRIN1 SEMICOLON)) (T (* ; "Print IL-style comment, with a ; in it so the pretty printer will render it as a CL-style comment.") (printout NIL "(" |.P2| '* '% '; " %" "))) (PRIN3 "Copyright (c) ") [for Y on DATES do (* ;  "print years of copyright, e.g., 1985, 1986") (PRINTNUM '(FIX 4) (CAR Y)) (COND ((CDR Y) (PRIN3 ", "] (PRIN3 " by ") (PRIN3 (CAR OWNER)) (PRIN3 ".") (AND COPYRIGHTSRESERVED (PRIN3 " All rights reserved.")) (TERPRI) [COND (PRIVATE (for LINE in (CONS (CONCAT "The following program was created in " (CAR DATES) " but has not been published") '( "within the meaning of the copyright law, is furnished under license," "and may not be used, copied and/or disclosed except in accordance" "with the terms of said license.")) do (COND (SEMICOLON (PRIN1 SEMICOLON))) (printout NIL LINE T] (COND ((NOT SEMICOLON) (PRIN1 "%") "))) (TERPRI]) (SAVECOPYRIGHT (LAMBDA (FILENAME) (* lmm "25-DEC-82 16:48") (* ;; "Called from PRETTYDEF to save copyright info on end of file") (AND (NEQ COPYRIGHTFLG (QUOTE NEVER)) (PROG (X) (COND ((SETQ X (GETPROP FILENAME (QUOTE COPYRIGHT))) (PRINT (LIST (QUOTE PUTPROPS) FILENAME (QUOTE COPYRIGHT) X))))))) ) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: NIL PRINTCOPYRIGHT PRINTCOPYRIGHT1 SAVECOPYRIGHT (LOCALVARS . T) (NOLINKFNS PRINTCOPYRIGHT1)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS COPYRIGHTFLG COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST DEFAULTCOPYRIGHTOWNER COPYRIGHTSRESERVED) ) (RPAQ? COPYRIGHTFLG ) (RPAQ? DEFAULTCOPYRIGHTOWNER ) (RPAQ? COPYRIGHTPRETTYFLG T) (RPAQ? COPYRIGHTOWNERS ) (RPAQ? DEFAULTCOPYRIGHTKEYLST '((NONE " " EXPLAINSTRING "NONE - No copyright ever on this file" CONFIRM T RETURN 'NONE) [%[ "owner: " EXPLAINSTRING "[ - new copyright owner -- type one line of text" NOECHOFLG T KEYLST (( " " RETURN (SUBSTRING (CADR ANSWER) 2 -2] (%] "No copyright notice now " EXPLAINSTRING "] - no copyright notice now" NOECHOFLG T RETURN NIL))) (RPAQ? COPYRIGHTSRESERVED T) (RPAQ? *NEW-INTERLISP-MAKEFILE-ENVIRONMENT* '(:READTABLE "INTERLISP" :PACKAGE "INTERLISP")) (RPAQ? *DEFAULT-MAKEFILE-ENVIRONMENT* ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST COPYRIGHTPRETTYFLG COMMENTFLG *DEFAULT-MAKEFILE-ENVIRONMENT* *NEW-INTERLISP-MAKEFILE-ENVIRONMENT*) ) (RPAQ? COMMENTFLG '*) (RPAQ? **COMMENT**FLG '" **COMMENT** ") (RPAQ? PRETTYFLG T) (RPAQ? %#RPARS 4) (RPAQ? CLISPIFYPRETTYFLG ) (RPAQ? PRETTYTRANFLG ) (RPAQ? FONTCHANGEFLG ) (RPAQ? CHANGECHARTABSTR ) (RPAQ? PRETTYTABFLG T) (RPAQ? DECLARETAGSLST '(COMPILERVARS COPY COPYWHEN DOCOPY DOEVAL@COMPILE DOEVAL@LOAD DONTCOPY DONTEVAL@COMPILE DONTEVAL@LOAD EVAL@COMPILE EVAL@COMPILEWHEN EVAL@LOAD EVAL@LOADWHEN FIRST NOTFIRST)) (RPAQ? AVERAGEVARLENGTH 4) (RPAQ? AVERAGEFNLENGTH 5) (RPAQ? %#CAREFULCOLUMNS 0) (RPAQ? CHANGECHAR '%|) (RPAQ? ENDLINEUSERFN ) (RPAQ? PRETTYDEFMACROS ) (RPAQ? PRETTYPRINTMACROS ) (RPAQ? PRETTYEQUIVLST ) (RPAQ? PRETTYPRINTYPEMACROS ) (RPAQ? FILEPKGCOMSPLST '(DECLARE%: SPECVARS LOCALVARS GLOBALVARS PROP IFPROP P VARS INITVARS ADDVARS APPENDVARS FNS ARRAY E COMS ORIGINAL BLOCKS *)) (RPAQ? SYSPROPS '(PROPTYPE ALISTTYPE DELDEF EDITDEF PUTDEF GETDEF WHENCHANGED NOTICEFN NEWCOMFN PRETTYTYPE DELFROMPRETTYCOM ADDTOPRETTYCOM ACCESSFN ACS AMAC ARGNAMES BLKLIBRARYDEF BROADSCOPE CLISPCLASS CLISPCLASSDEF CLISPFORM CLISPIFYISPROP CLISPINFIX CLISPISFORM CLISPISPROP CLISPNEG CLISPTYPE CLISPWORD CLMAPS CODE CONVERT COREVAL CROPS CTYPE EDIT-SAVE EXPR FILE FILECHANGES FILEDATES FILEDEF FILEGROUP FILEHISTORY FILEMAP FILETYPE GLOBALVAR HISTORY I.S.OPR I.S.TYPE INFO LASTVALUE LISPFN MACRO MAKE NAMESCHANGED NARGS OLDVALUE OPD SETFN SUBR UBOX UNARYOP VALUE \DEF CLISPBRACKET TRYHARDER)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: PRETTYPRINTBLOCK PRETTYPRINT PRETTYPRINT1 PRETTYPRINT2 (ENTRIES PRETTYPRINT) (SPECVARS FNSLST FILEFLG)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DECLARETAGSLST LISPXPRINTFLG SYSPROPS FILEPKGCOMSPLST DWIMLOADFNSFLG PRETTYHEADER FILERDTBL PRETTYEQUIVLST PRETTYTRANFLG CLISPIFYPRETTYFLG LISPXHISTORY DWIMFLG USERWORDS COMMENTFLG) ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL DEFAULTFONT LAMBDAFONT PRETTYCOMFONT COMMENTFONT **COMMENT**FLG PRETTYPRINTMACROS)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (FILESLOAD (IMPORT) FILEPKG) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA PPT PP* PP) (ADDTOVAR NLAML ) (ADDTOVAR LAMA ) ) (PUTPROPS PRETTY COPYRIGHT ("Venue & Xerox Corporation" T 1984 1985 1986 1987 1988 1989 1990 1999 2018 )) (DECLARE%: DONTCOPY (FILEMAP (NIL (5962 40703 (PRETTYDEF 5972 . 14235) (PRETTYDEFCOMS 14237 . 14919) (PRETTYDEF0 14921 . 15112) (PRETTYDEF1 15114 . 16877) (PRINTDATE 16879 . 18115) (PRINTDATE1 18117 . 19322) (PRINTFNS 19324 . 19893) (PRETTYCOM 19895 . 26236) (PRETTYVAR 26238 . 27276) (PRETTYVAR1 27278 . 29496) (PRETTYCOM1 29498 . 30202) (ENDFILE 30204 . 30300) (MAKEDEFLIST 30302 . 30706) (PP 30708 . 30984) (PP* 30986 . 31299) (PPT 31301 . 31620) (PRETTYPRINT 31622 . 34774) (PRETTYPRINT1 34776 . 36662) (PRETTYPRINT2 36664 . 37980) (PRETTYPRINT3 37982 . 38937) (PRINTDEF1 38939 . 39947) (SUPERPRINTEQ 39949 . 40043) ( SUPERPRINTGETPROP 40045 . 40189) (CHANGEFONT 40191 . 40701)) (40704 46050 (READARRAY 40714 . 41640) ( PRINTARRAY 41642 . 43382) (READARRAY-FROM-LIST 43384 . 44489) (PRINTARRAY-TO-LIST 44491 . 46048)) ( 46177 52632 (PRINTCOPYRIGHT 46187 . 49959) (PRINTCOPYRIGHT1 49961 . 52327) (SAVECOPYRIGHT 52329 . 52630))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "21-Feb-2021 10:59:08"  {DSK}kaplan>Local>medley3.5>git-medley>sources>PRETTY.;10 57241 changes to%: (FNS PRINTCOPYRIGHT1) previous date%: "16-Apr-2018 21:37:09" {DSK}kaplan>Local>medley3.5>git-medley>sources>PRETTY.;6) (* ; " Copyright (c) 1984-1990, 1999, 2018, 2021 by Venue & Xerox Corporation. The following program was created in 1984 but has not been published within the meaning of the copyright law, is furnished under license, and may not be used, copied and/or disclosed except in accordance with the terms of said license. ") (PRETTYCOMPRINT PRETTYCOMS) (RPAQQ PRETTYCOMS [(FNS PRETTYDEF PRETTYDEFCOMS PRETTYDEF0 PRETTYDEF1 PRINTDATE PRINTDATE1 PRINTFNS PRETTYCOM PRETTYVAR PRETTYVAR1 PRETTYCOM1 ENDFILE MAKEDEFLIST PP PP* PPT PRETTYPRINT PRETTYPRINT1 PRETTYPRINT2 PRETTYPRINT3 PRINTDEF1 SUPERPRINTEQ SUPERPRINTGETPROP CHANGEFONT) (FNS READARRAY PRINTARRAY READARRAY-FROM-LIST PRINTARRAY-TO-LIST) (COMS (DECLARE%: DONTCOPY (MACROS CHANGFONT))) (COMS (* ; "COPYRIGHT") (FNS PRINTCOPYRIGHT PRINTCOPYRIGHT1 SAVECOPYRIGHT) (BLOCKS (NIL PRINTCOPYRIGHT PRINTCOPYRIGHT1 SAVECOPYRIGHT (LOCALVARS . T) (NOLINKFNS PRINTCOPYRIGHT1))) (GLOBALVARS COPYRIGHTFLG COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST DEFAULTCOPYRIGHTOWNER COPYRIGHTSRESERVED) (INITVARS (COPYRIGHTFLG) (DEFAULTCOPYRIGHTOWNER) (COPYRIGHTPRETTYFLG T) (COPYRIGHTOWNERS) [DEFAULTCOPYRIGHTKEYLST '((NONE " " EXPLAINSTRING "NONE - No copyright ever on this file" CONFIRM T RETURN 'NONE) [%[ "owner: " EXPLAINSTRING "[ - new copyright owner -- type one line of text" NOECHOFLG T KEYLST (( " " RETURN (SUBSTRING (CADR ANSWER) 2 -2] (%] "No copyright notice now " EXPLAINSTRING "] - no copyright notice now" NOECHOFLG T RETURN NIL] (COPYRIGHTSRESERVED T) (*NEW-INTERLISP-MAKEFILE-ENVIRONMENT* '(:READTABLE "INTERLISP" :PACKAGE "INTERLISP")) (*DEFAULT-MAKEFILE-ENVIRONMENT*)) (GLOBALVARS COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST COPYRIGHTPRETTYFLG COMMENTFLG *DEFAULT-MAKEFILE-ENVIRONMENT* *NEW-INTERLISP-MAKEFILE-ENVIRONMENT*)) (INITVARS (COMMENTFLG '*) (**COMMENT**FLG '" **COMMENT** ") (PRETTYFLG T) (%#RPARS 4) (CLISPIFYPRETTYFLG) (PRETTYTRANFLG) (FONTCHANGEFLG) (CHANGECHARTABSTR) (PRETTYTABFLG T) (DECLARETAGSLST '(COMPILERVARS COPY COPYWHEN DOCOPY DOEVAL@COMPILE DOEVAL@LOAD DONTCOPY DONTEVAL@COMPILE DONTEVAL@LOAD EVAL@COMPILE EVAL@COMPILEWHEN EVAL@LOAD EVAL@LOADWHEN FIRST NOTFIRST)) (AVERAGEVARLENGTH 4) (AVERAGEFNLENGTH 5) (%#CAREFULCOLUMNS 0) (CHANGECHAR '%|) (ENDLINEUSERFN)) [INITVARS (PRETTYDEFMACROS) (PRETTYPRINTMACROS) (PRETTYEQUIVLST) (PRETTYPRINTYPEMACROS) (FILEPKGCOMSPLST '(DECLARE%: SPECVARS LOCALVARS GLOBALVARS PROP IFPROP P VARS INITVARS ADDVARS APPENDVARS FNS ARRAY E COMS ORIGINAL BLOCKS *)) (SYSPROPS '(PROPTYPE ALISTTYPE DELDEF EDITDEF PUTDEF GETDEF WHENCHANGED NOTICEFN NEWCOMFN PRETTYTYPE DELFROMPRETTYCOM ADDTOPRETTYCOM ACCESSFN ACS AMAC ARGNAMES BLKLIBRARYDEF BROADSCOPE CLISPCLASS CLISPCLASSDEF CLISPFORM CLISPIFYISPROP CLISPINFIX CLISPISFORM CLISPISPROP CLISPNEG CLISPTYPE CLISPWORD CLMAPS CODE CONVERT COREVAL CROPS CTYPE EDIT-SAVE EXPR FILE FILECHANGES FILEDATES FILEDEF FILEGROUP FILEHISTORY FILEMAP FILETYPE GLOBALVAR HISTORY I.S.OPR I.S.TYPE INFO LASTVALUE LISPFN MACRO MAKE NAMESCHANGED NARGS OLDVALUE OPD SETFN SUBR UBOX UNARYOP VALUE \DEF CLISPBRACKET TRYHARDER] (BLOCKS (PRETTYPRINTBLOCK PRETTYPRINT PRETTYPRINT1 PRETTYPRINT2 (ENTRIES PRETTYPRINT) (SPECVARS FNSLST FILEFLG))) (GLOBALVARS DECLARETAGSLST LISPXPRINTFLG SYSPROPS FILEPKGCOMSPLST DWIMLOADFNSFLG PRETTYHEADER FILERDTBL PRETTYEQUIVLST PRETTYTRANFLG CLISPIFYPRETTYFLG LISPXHISTORY DWIMFLG USERWORDS COMMENTFLG) [DECLARE%: EVAL@COMPILE DOCOPY (P (CL:PROCLAIM '(CL:SPECIAL DEFAULTFONT LAMBDAFONT PRETTYCOMFONT COMMENTFONT **COMMENT**FLG PRETTYPRINTMACROS] (DECLARE%: DOEVAL@COMPILE DONTCOPY (* ;  "IMPORT because FILEPKG has records EXPORTed but is not a member of EXPORTFILES") (FILES (IMPORT) FILEPKG)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA PPT PP* PP) (NLAML) (LAMA]) (DEFINEQ (PRETTYDEF (LAMBDA (PRTTYFNS PRTTYFILE PRTTYCOMS REPRINTFNS SOURCEFILE CHANGES) (* ; "Edited 16-Feb-88 11:46 by raf") (DECLARE (SPECVARS PRTTYFILE REPRINTFNS SOURCEFILE CHANGES)) (RESETLST (RESETSAVE (RESETUNDO) (QUOTE (AND RESETSTATE (RESETUNDO OLDVALUE)))) (* ;; "Says undo everything if there is an error or control-D This is particularly necessary if user is using the PRINT* prettyprintmacro which updates comments to point to the newest version.") (PROG ((NEWFILEMAP (AND BUILDMAPFLG (LIST NIL))) (%#RPARS %#RPARS) (*PRINT-ARRAY* T) (XCL:*PRINT-STRUCTURE* T) (*PRINT-LEVEL* NIL) (*PRINT-LENGTH* NIL) FILEFLG FNSLST PRTTYTEM PRETTYCOMSLST PRTTYSPELLFLG OLDFILEMAP MAPADR NLAMALST NLAMLST LAMALST LAM?LST FILEDATES ORIGFLG ROOTNAME DESTINATIONENV SOURCEFILENV SOURCEFC FCLOCATION) (DECLARE (SPECVARS *PRINT-ARRAY* XCL:*PRINT-STRUCTURE* *PRINT-LEVEL* *PRINT-LENGTH* NEWFILEMAP ORIGFLG FILEFLG NLAMALST PRTTYSPELLFLG PRETTYCOMSLST PRTTYCOMS LAM?LST FNSLST OLDFILEMAP LAMALST MAPADR ORIGFLG NLAMLST DESTINATIONENV SOURCEFILENV %#RPARS)) (* ; "NEWFILEMAP corresponds to the map being built for the file being written. OLDFILEMAP corresponds to the map that exists for SOURCEFILE, if any.") (COND ((OR (NULL (\DTEST PRTTYFILE (QUOTE LITATOM))) (EQ PRTTYFILE T)) (* ; "we no longer support any of the crufty alternatives to writing a brand new file") (\ILLEGAL.ARG PRTTYFILE))) (SETQ ROOTNAME (ROOTFILENAME PRTTYFILE)) (if (OR (EQ SOURCEFILE T) (AND REPRINTFNS (NULL SOURCEFILE))) then (* ;; "SOURCEFILE plays the role of CFILE for recompiling. It permits PRETTYPRINT to obtain the definitions from the file withou having to reprettyprint them, or even having them loaded into core. T (or NIL if REPRINTFNS is specified) is the same as PRETTYFILE.") (* ;; "REPRINTFNS specifies those functions to be printed anew. REPRINTFNS=T means reprint all EXPRS, a la recompile. For example, if you have an entire file loaded in, but only change a few functions, using this option can speed up dumping the file by a factor of two. If REPRINTFNS=ALL, all functions that contain in core exprs, whether on function definition cell or property lists, are reprinted. REPRINTFNS can also be a list. MAKEFILE uses this for the REMAKE option by specifying as REPRINTFNS the list CHANGES. In any case, if the function does not contain an in core defnition, prettyprint will try to find one on the file. i.e., act as though REPRINTFNS were NIL.") (SETQ SOURCEFILE ROOTNAME)) (if (SETQ DESTINATIONENV (GET ROOTNAME (QUOTE MAKEFILE-ENVIRONMENT))) then (* ; "use this explicit environment. Copy it in case user later on destructively edits it") (SETQ DESTINATIONENV (\DO-DEFINE-FILE-INFO NIL (COPY DESTINATIONENV))) else (* ; "see if we already know the environment of the source") (CL:MULTIPLE-VALUE-SETQ (SOURCEFILENV OLDFILEMAP SOURCEFC) (LOOKUP-ENVIRONMENT-AND-FILEMAP (OR SOURCEFILE ROOTNAME) (OR (NULL SOURCEFILE) (EQ SOURCEFILE ROOTNAME))))) (if SOURCEFILE then (if (NULL (NLSETQ (SETQ SOURCEFILE (OPENSTREAM SOURCEFILE (QUOTE INPUT))))) then (* ; "can't find file to reprint from.") (* ; "OPENSTREAM is called in order that 'correction' take place.") (SETQ SOURCEFILE NIL) (PRIN1 PRTTYFILE T) (PRIN1 (QUOTE " not found, so it will be written anew. ") T) elseif (RANDACCESSP SOURCEFILE) then (RESETSAVE NIL (LIST (QUOTE CLOSEF) SOURCEFILE)) (RESETSAVE (INPUT SOURCEFILE)) (if (EQ REPRINTFNS (QUOTE EXPRS)) then (SETQ REPRINTFNS T) elseif (EQ REPRINTFNS (QUOTE CHANGES)) then (SETQ REPRINTFNS (UNION (FILEPKG.CHANGEDFNS CHANGES) (FILEPKG.CHANGEDFNS (fetch FILECHANGES of ROOTNAME))))) (if (NULL SOURCEFILENV) then (* ; "if we didn't have environment cached, look it up from the actual stream now") (CL:MULTIPLE-VALUE-SETQ (SOURCEFILENV OLDFILEMAP SOURCEFC) (GET-ENVIRONMENT-AND-FILEMAP SOURCEFILE))) (if (NULL OLDFILEMAP) then (* ; "no map on file, so we will build one as needed") (SETFILEPTR SOURCEFILE (OR SOURCEFC 0)) elseif (NULL (CAR OLDFILEMAP)) then (* ; "complete map.") elseif (LISTP (CAR OLDFILEMAP)) then (* ; "only partial map built up. should only happen for files that were made with BUILDMAPFLG=NIL, since otherwise there would be a coplete map on the file.") (SETFILEPTR SOURCEFILE (CAAR OLDFILEMAP)) else (* ; "Redundancy check. Should only occur if there was a compiled function in the file. and a partial map was formed that stopped after that function.") (HELP)) else (* ; "Can't copy from non-randaccessp source") (SETQ SOURCEFILE NIL))) (* ;; "Now figure out what environment to write the new file in.") (if DESTINATIONENV then (* ; "have explicit env, ok") elseif SOURCEFILENV then (* ; "use same as source") (SETQ DESTINATIONENV (if (EQUAL-READER-ENVIRONMENT SOURCEFILENV *OLD-INTERLISP-READ-ENVIRONMENT*) then (* ; "write the new style") (\DO-DEFINE-FILE-INFO NIL *NEW-INTERLISP-MAKEFILE-ENVIRONMENT*) else (* ; "use same env on new file as old") SOURCEFILENV)) else (* ; "new file, use default") (SETQ DESTINATIONENV (\DO-DEFINE-FILE-INFO NIL (COPY *DEFAULT-MAKEFILE-ENVIRONMENT*)))) (if (NULL SOURCEFILE) then (* ; "get rid of anything we knew about source") (SETQ OLDFILEMAP NIL) (SETQ SOURCEFC NIL) (SETQ SOURCEFILENV NIL) elseif (AND SOURCEFILENV (EQUAL-READER-ENVIRONMENT SOURCEFILENV DESTINATIONENV)) then (* ; "source and destination compatible, so we won't need to worry about it in PRETTYPRINT1/2") (SETQ SOURCEFILENV NIL)) (RESETSAVE NIL (LIST (FUNCTION PRETTYDEF0) (SETQ PRTTYFILE (OPENSTREAM PRTTYFILE (QUOTE OUTPUT))))) (* ; "Cleans up by closing and deleting file if aborted.") (RESETSAVE (OUTPUT PRTTYFILE)) (PRINT-READER-ENVIRONMENT DESTINATIONENV) (SETQ FCLOCATION (GETFILEPTR PRTTYFILE)) (WITH-READER-ENVIRONMENT DESTINATIONENV (if (NOT (SYNTAXP (CHARCODE "[") (QUOTE LEFTBRACKET))) then (* ; "can't use brackets on this read table") (SETQ %#RPARS NIL)) (SETQ FILEDATES (PRINTDATE PRTTYFILE CHANGES)) (AND (NEQ COPYRIGHTFLG (QUOTE NEVER)) ROOTNAME (PRINTCOPYRIGHT ROOTNAME)) (SETQ FILEFLG T) (SETQ CHANGES (FILEPKG.CHANGEDFNS CHANGES)) (* ; "Used freely by PRETTYPRINT to decide clispifying.") (if (NOT (RANDACCESSP PRTTYFILE)) then (* ; "No point building a map, since we won't be able to go back to the start to point at it") (SETQ NEWFILEMAP NIL)) (if FONTCHANGEFLG then (* ; "this is expensive in that it costs as many conses as there are functions, but you can afford it for a makefile.") (SETQ FNSLST (OR (for FL in (GETPROP ROOTNAME (QUOTE FILEGROUP)) when (fetch FILEPROP of FL) join (FILEFNSLST FL)) (FILEFNSLST ROOTNAME)))) (if (OR (LISTP PRTTYFNS) (LISTP (GETTOPVAL PRTTYFNS))) then (* ; "Ancient cruft from before the days of MAKEFILE.") (PRINTFNS PRTTYFNS T) (PRETTYCOM PRTTYFNS T)) (if (SETQ PRETTYCOMSLST (OR (LISTP PRTTYCOMS) (AND (LITATOM PRTTYCOMS) (LISTP (GETTOPVAL PRTTYCOMS))))) then (PRETTYCOM PRTTYCOMS T) (* ; "PRTTYCOMS is just like the argument to a COMS command. see comment in prettycom1") (for L on PRETTYCOMSLST do (PRETTYCOM (CAR L) NIL L)) (* ; "The original value of PRTTYCOMS is saved so that it can be rewritten if a spelling correction occurs. The list PRTTYCOMSLST is searched by PRETTYCOM1 for * commands to see if the variable has be dumped out as well.")) (if (PRETTYDEF1) then (* ; "The coms were reprinted by PRETTYDEF1 due to a change to nlama and or nlaml") elseif PRTTYSPELLFLG then (* ; "A correction on prettycoms was performed, so dump it out aain to get the corrected version on the file.") (PRETTYCOM PRTTYCOMS T)) (if (NEQ COPYRIGHTFLG (QUOTE NEVER)) then (SAVECOPYRIGHT ROOTNAME)) (if NEWFILEMAP then (PRIN1 "(") (PRIN2 (QUOTE DECLARE%:)) (SPACES 1) (PRIN2 (QUOTE DONTCOPY)) (TERPRI) (SPACES 2) (for ADR in MAPADR do (SETQ PRTTYTEM (GETFILEPTR PRTTYFILE)) (SETFILEPTR PRTTYFILE ADR) (* ; "Write the current file positon into the filecreated expression, and then restores the file pointer.") (PRIN2 PRTTYTEM) (SETFILEPTR PRTTYFILE PRTTYTEM)) (PRIN2 (LIST (QUOTE FILEMAP) NEWFILEMAP)) (* ; "printed instead of prettyprinted, so wont take up two pages of listing.") (PRIN1 (QUOTE ") ")) (PUTFILEMAP (FULLNAME PRTTYFILE) NEWFILEMAP NIL DESTINATIONENV NIL FCLOCATION) (* ; "Also save map, so can be used for subsequent makefiles.")) (ENDFILE PRTTYFILE) (if (AND FILEDATES ROOTNAME) then (/replace FILEDATES of ROOTNAME with FILEDATES))) (RETURN (FULLNAME PRTTYFILE))))) ) (PRETTYDEFCOMS (LAMBDA (PRTTYCOMS FNSLST) (* ; "Edited 19-Aug-88 16:07 by raf") (DECLARE (SPECVARS FNSLST)) (PROG ((%#RPARS %#RPARS) (*PRINT-ARRAY* T) (XCL:*PRINT-STRUCTURE* T) (*PRINT-LEVEL* NIL) (*PRINT-LENGTH* NIL) BUILDMAPFLG PRTTYSPELLFLG ORIGFLG SOURCEFILE) (DECLARE (SPECVARS *PRINT-ARRAY* XCL:*PRINT-STRUCTURE* *PRINT-LEVEL* *PRINT-LENGTH* BUILDMAPFLG NEWFILEMAP ORIGFLG PRTTYSPELLFLG LAM?LST ORIGFLG SOURCEFILE %#RPARS)) (if (NOT (SYNTAXP (CHARCODE "[") (QUOTE LEFTBRACKET))) then (* ; "can't use brackets on this read table") (SETQ %#RPARS NIL)) (for L on (OR (LISTP PRTTYCOMS) (AND (LITATOM PRTTYCOMS) (LISTP (GETTOPVAL PRTTYCOMS)))) do (PRETTYCOM (CAR L) NIL L)))) ) (PRETTYDEF0 (LAMBDA (MADEFILE) (* bvm%: " 2-Aug-86 16:24") (* ;; "Cleans up after prettydef in case of control-d.") (COND ((OPENP MADEFILE (QUOTE OUTPUT)) (DELFILE (CLOSEF MADEFILE))))) ) (PRETTYDEF1 (LAMBDA NIL (* wt%: " 9-SEP-78 16:05") (* ; "Updates the DECLARE: for NLAMA/NLAML") (PROG (PRTTYCOM PRTTYTEM PRTTYNEW) (COND ((NULL (SOME PRETTYCOMSLST (FUNCTION (LAMBDA (X) (AND (EQ (CAR X) (QUOTE DECLARE%:)) (SETQ PRTTYTEM (MEMB (QUOTE COMPILERVARS) (SETQ PRTTYCOM X))) (EQ (CAAR (SETQ PRTTYTEM (CDR PRTTYTEM))) (QUOTE ADDVARS))))))) (AND (NULL NLAMALST) (NULL NLAMLST) (NULL LAMALST) (RETURN NIL)) (* ;; "If thee is no DECLARE: and no nlambdas, dont bother to add any. note tha if thee is IS a DECLARE:, then we must check even if there are no nlambdas, because consider what happens when user changes the only nlambda to a lambda must replace the declare: by a nop addvars.") (SETQ PRTTYCOM (SUBPAIR (QUOTE (NLAMALST NLAMLST LAMALST)) (LIST NLAMALST NLAMLST LAMALST) (QUOTE (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA . NLAMALST) (NLAML . NLAMLST) (LAMA . LAMALST)))))) (COND ((AND (LISTP PRETTYCOMSLST) (NLISTP PRTTYCOMS)) (/NCONC1 PRETTYCOMSLST PRTTYCOM) (PRETTYCOM PRTTYCOMS T)))) ((NOT (EQUAL (CAR PRTTYTEM) (SETQ PRTTYNEW (LIST (QUOTE ADDVARS) (CONS (QUOTE NLAMA) (UNION NLAMALST (INTERSECTION LAM?LST (CDADAR PRTTYTEM)))) (CONS (QUOTE NLAML) (UNION NLAMLST (INTERSECTION LAM?LST (CDR (CADDAR PRTTYTEM))))) (CONS (QUOTE LAMA) (UNION LAMALST (INTERSECTION LAM?LST (CDR (CADDDR (CAR PRTTYTEM)))))))))) (* ;; "The reason for the unions and intersections is that prettydef simply may not know the fntyps of some of the functions in the file, namely those on lam?lst, and theefore tese should not be removed from NLAMA and NLAML if they are there from a previous makefile.") (/RPLACA PRTTYTEM PRTTYNEW) (AND (NLISTP PRTTYCOMS) (PRETTYCOM PRTTYCOMS T))) (T (RETURN NIL))) (PRETTYCOM PRTTYCOM) (RETURN T))) ) (PRINTDATE (LAMBDA (OUTSTREAM CHANGES) (* bvm%: " 1-Aug-86 15:51") (* ;;; "assumes that OUTSTREAM is a file open for output, and prints the date information for that file on it") (PROG ((DAT (DATE)) (ROOTNAME (ROOTFILENAME OUTSTREAM)) PREVPAIR FILEDATES) (if FILEPKGFLG then (if ROOTNAME then (/replace FILECHANGES of ROOTNAME with (SETQ CHANGES (FILEPKG.MERGECHANGES CHANGES (fetch FILECHANGES of ROOTNAME))))) (* ;; "The reason for the order of arguments in UNION is so that the changes will be listed in roughly the order made.") (SETQ FILEDATES (CONS (create FILEDATEPAIR FILEDATE _ DAT DATEFILENAME _ (FULLNAME OUTSTREAM)) (SETQ PREVPAIR (LAST (fetch FILEDATES of ROOTNAME))))) (* ;;; "Right now, FILEDATES simply keeps latest version and date, and original version and date. Latter for integrity checks on makefile remake, as described in filepackage. Note that don't want to change FILEDATES property until PRETTDEF completes. In case of control-d, the file will be deleted automatically.")) (PRINTDATE1 OUTSTREAM CHANGES DAT (fetch FILEDATE of (CAR PREVPAIR)) (fetch DATEFILENAME of (CAR PREVPAIR))) (* ; "PRINTDATE1 does the actual printing. It is a separate function so that it can be advised.") (RETURN FILEDATES))) ) (PRINTDATE1 (LAMBDA (OUTSTREAM CHANGES DAT PREVDATE PREVERS TERMINATING.STRING) (* bvm%: "18-Sep-86 19:08") (* ;;; "does the printing for PRINTDATE") (printout OUTSTREAM .FONT DEFAULTFONT "(" |.P2| (QUOTE FILECREATED) %, |.P2| DAT %, .FONT LAMBDAFONT |.P2| (FULLNAME OUTSTREAM) .FONT DEFAULTFONT) (* ;; "note that CHANGEFONT checks for FONTCHANGEFLG explicitly so that it won't do anything if FONTCHANGEFLG is NIL") (if (AND BUILDMAPFLG (NOT (DISPLAYP OUTSTREAM))) then (push MAPADR (ADD1 (GETFILEPTR OUTSTREAM))) (PRIN3 " " OUTSTREAM) (* ;; "The address of where the map begins will be stored in this slot. 8 spaces left because when radix is 8, can overflow seven spaces by a file of 300000 characters (Alice did it). The push is because of a feature no longer used where there could be two FILECREATED expressions at the head of a file font")) (if FILEPKGFLG then (if CHANGES then (printout OUTSTREAM T T 6 |.P2| (QUOTE changes) %, |.P2| (QUOTE to%:) %,, .PPVTL CHANGES)) (if PREVDATE then (printout OUTSTREAM T T 6 |.P2| (QUOTE previous) %, |.P2| (QUOTE date%:) %, |.P2| PREVDATE) (if PREVERS then (printout OUTSTREAM %, |.P2| PREVERS)))) (PRIN1 (OR TERMINATING.STRING ") ") OUTSTREAM))) (PRINTFNS (LAMBDA (X PRETTYDEFLG) (* lmm "13-OCT-82 16:44") (* ; "prettydeflg=T when called from prettydef.") (AND X (PROG (FNADRLST) (COND ((AND PRETTYDEFLG NEWFILEMAP) (SETQ FNADRLST (TCONC NIL (GETFILEPTR PRTTYFILE))) (TCONC FNADRLST NIL) (NCONC1 NEWFILEMAP (CAR FNADRLST)))) (PRIN1 (QUOTE %()) (PRINT (QUOTE DEFINEQ)) (PRETTYPRINT X (AND PRETTYDEFLG (OR FNADRLST T)) FNSLST) (* ; "FNSLST bound in prettydef to list of functions on this file. used for font stuff.") (PRIN1 (QUOTE %))) (AND FNADRLST (RPLACA (CDAR FNADRLST) (GETFILEPTR PRTTYFILE))) (TERPRI)))) ) (PRETTYCOM (LAMBDA (PRTTYCOM PRTTYFLG PRETTYCOMSTAIL) (* ; "Edited 14-Apr-88 18:26 by bvm") (PROG (PRTTYTEM) (COND ((NULL PRTTYCOM) (* ; "So that RECOMPILE and BRECOMPILE do not have to check before calling PRETTYCOM.") (RETURN)) ((AND PRTTYFLG (NEQ PRTTYFILE T)) (PRINT (COND (LISPXPRINTFLG (* ;; "PRETTYCOMPRINT is an nlambda that does a lispxprint, except when prettyheader is NIL, in hich case it does nothing.") (LIST (QUOTE PRETTYCOMPRINT) PRTTYCOM)) (T (LIST (QUOTE PRINT) (LIST (QUOTE QUOTE) PRTTYCOM) T T)))))) (COND ((LITATOM PRTTYCOM) (COND ((AND (NULL PRTTYFLG) (NOT (BOUNDP PRTTYCOM)) DWIMFLG (SETQ PRTTYTEM (FIXSPELL PRTTYCOM 70 USERWORDS T PRETTYCOMSTAIL (FUNCTION BOUNDP))) (SETQ PRTTYSPELLFLG T)) (SETQ PRTTYCOM PRTTYTEM))) (PRETTYVAR PRTTYCOM PRTTYFLG) (* ;; "FNS and VARS are printed as (RPAQQ atom value T) so that LOAD ALLPROP will still stre them in the value cell.") (RETURN PRTTYCOM)) (PRTTYFLG (* ; "PRETTYDEF called with a list for FNS or VARS,") (RETURN PRTTYCOM))) TOP (COND ((AND (NULL ORIGFLG) (SETQ PRTTYTEM (fetch (FILEPKGCOM MACRO) of (CAR PRTTYCOM)))) (for X on (SUBPAIR (CAR PRTTYTEM) (PRETTYCOM1 PRTTYCOM T T) (CDR PRTTYTEM)) do (PRETTYCOM (CAR X) NIL (AND PRETTYCOMSTAIL X)))) (T (SELECTQ (CAR PRTTYCOM) (FNS (PROG (PRTTYSPELLFLG) (PRINTFNS (PRETTYCOM1 PRTTYCOM T T) (NOT (NULL PRETTYCOMSTAIL))) (AND PRTTYSPELLFLG (EQ (CADR PRTTYCOM) (QUOTE *)) (LITATOM (SETQ PRTTYTEM (CADDR PRTTYCOM))) (PRETTYCOM PRTTYTEM)) (* ; "The FNSlst had an error in it that was corrected."))) ((VARS ARRAY) (for X in (PRETTYCOM1 PRTTYCOM T T) do (PRETTYVAR X))) (DECLARE%: (* ;; "Normally, expressions appearing in a symbolic file are (1) evaluated upon loading the file, (2) not evaluated when compiling the file, and (3) copied to the compile file. DECLARE: can be used to change state around any PRETTYCOM. The atomic symbols DONTCOPY, DOCOPY, DONTEVAL@COMPILE, DOEVAL@COMPILE, DONTEVAL@LOAD, and DOEVAL@LOAD have the obvious meaning. DECLARE: eliminates the pretty commands DECLARE, COMPROP, COMPROP*, PD, PC, and PC*. DECLARE: is defined as a functionthat evaluates all list expressions except when under a DONTEVAL@LOAD state.") (PRIN1 "(") (PRIN2 (QUOTE DECLARE%:)) (SPACES 1) (for LST on (PRETTYCOM1 PRTTYCOM T T) do (COND ((NLISTP (CAR LST)) (COND ((NOT (MEMB (CAR LST) DECLARETAGSLST)) (COND ((AND DWIMFLG (FIXSPELL (CAR LST) 70 DECLARETAGSLST T LST)) (SETQ PRTTYSPELLFLG T)) (T (GO ERROR))))) (PRIN2 (CAR LST)) (SPACES 1)) (T (TERPRI) (PRETTYCOM (CAR LST) NIL LST))) (SELECTQ (CAR LST) ((EVAL@LOADWHEN EVAL@COMPILEWHEN COPYWHEN) (COND ((SETQ LST (CDR LST)) (PRINTDEF (CAR LST)) (SPACES 1)))) NIL)) (PRIN1 (QUOTE ") "))) ((CL:EVAL-WHEN) (* ;; "Has the syntax (EVAL-WHEN (times ...) coms ...). Dumps an EVAL-WHEN form on the file containing whatever is dumped by the given COMS.") (CL:ASSERT (AND (CL:CONSP (CADR PRTTYCOM)) (CL:SUBSETP (CADR PRTTYCOM) (QUOTE (EVAL CL:EVAL COMPILE CL:COMPILE LOAD CL:LOAD)))) NIL "The first argument to the ~S command must be a list of times") (CL:FORMAT T "(~S ~S" (QUOTE CL:EVAL-WHEN) (CADR PRTTYCOM)) (for LST on (PRETTYCOM1 (CDR PRTTYCOM) T NIL) do (CL:TERPRI) (PRETTYCOM (CAR LST) NIL LST)) (CL:FORMAT T "~&)~%%")) ((SPECVARS LOCALVARS GLOBALVARS) (SETQ PRTTYTEM (CONS (CAR PRTTYCOM) (PRETTYCOM1 PRTTYCOM T T))) (PRIN1 "(") (MAPRINT (QUOTE (DECLARE%: DOEVAL@COMPILE DONTCOPY)) NIL NIL NIL NIL (FUNCTION PRIN2)) (TERPRI) (PRINTDEF1 PRTTYTEM) (PRIN1 ") ")) ((PROP IFPROP) (PROG ((PRTTYFLG (EQ (CAR PRTTYCOM) (QUOTE IFPROP))) (PRTTYTEM (CADR PRTTYCOM)) (PRTTYX (PRETTYCOM1 (CDR PRTTYCOM) T T))) (* ; "IFPROP only dumps those property values that are non-NIL.") (COND ((LISTP PRTTYTEM) (for X in PRTTYTEM do (MAKEDEFLIST PRTTYX X PRTTYFLG))) ((NEQ PRTTYTEM (QUOTE ALL)) (MAKEDEFLIST PRTTYX PRTTYTEM PRTTYFLG PRTTYCOM)) ((ASSOC (QUOTE PUTPROPS) PRETTYPRINTMACROS) (for ATM in PRTTYX do (PRINTDEF1 (CONS (QUOTE PUTPROPS) (CONS ATM (CONS (for X on (GETPROPLIST ATM) by (CDDR X) unless (MEMB (CAR X) SYSPROPS) join (LIST (CAR X) (CADR X))))))))) (T (for ATM in PRTTYX do (printout NIL %,, "(" |.P2| (QUOTE PUTPROPS) %, |.P2| ATM) (SETQ PRTTYTEM (ADD1 (POSITION))) (for X on (GETPROPLIST ATM) by (CDDR X) unless (MEMB (CAR X) SYSPROPS) do (printout NIL .TAB PRTTYTEM .PPV (CAR X) %, .PPV (CADR X))) (PRIN1 (QUOTE ") "))))))) (P (* ; "Arbitrary expression to evaluate when loaded. Be sure to prettyprint as code") (for X in (SETQ PRTTYTEM (PRETTYCOM1 PRTTYCOM T)) do (PRINTDEF1 X T))) (INITVARS (for X in (PRETTYCOM1 PRTTYCOM T T) do (COND ((LISTP X) (OR (EQ (CAR X) COMMENTFLG) (PRETTYVAR1 (QUOTE RPAQ?) (CAR X) (CDR X) NIL T))) (T (PRETTYVAR1 (QUOTE RPAQ?) X NIL))))) (ADDVARS (for X in (PRETTYCOM1 PRTTYCOM T T) do (PRETTYVAR1 (QUOTE ADDTOVAR) (CAR (OR (LISTP X) (ERRORX (LIST 4 X)))) (CDR X) NIL T))) (APPENDVARS (for X in (PRETTYCOM1 PRTTYCOM T T) do (PRETTYVAR1 (QUOTE APPENDTOVAR) (CAR (OR (LISTP X) (ERRORX (LIST 4 X)))) (CDR X) NIL T))) (E (for X in (PRETTYCOM1 PRTTYCOM T) do (EVAL X))) (COMS (for X on (PRETTYCOM1 PRTTYCOM T) do (PRETTYCOM (CAR X) NIL (AND PRETTYCOMSTAIL X)))) (ORIGINAL (LET ((ORIGFLG T)) (DECLARE (SPECVARS ORIGFLG)) (for X on (PRETTYCOM1 PRTTYCOM T) do (PRETTYCOM (CAR X) NIL (AND PRETTYCOMSTAIL X))))) (BLOCKS (SETQ PRTTYTEM (PRETTYCOM1 PRTTYCOM T T)) (PRIN1 "(") (MAPRINT (QUOTE (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY)) NIL NIL NIL NIL (FUNCTION PRIN2)) (TERPRI) (for X in PRTTYTEM do (PRINTDEF1 (CONS (QUOTE BLOCK%:) X))) (PRIN1 ") ")) ((*) (COND ((EQ (CADR PRTTYCOM) (QUOTE *)) (* ; "Form-feed if super-comment indicated. Use * no matter what current COMMENTFLG is.") (printout NIL .PAGE)) (T (RPTQ 3 (TERPRI)))) (COND ((AND (COND (FILEFLG FONTCHANGEFLG) (T (EQ FONTCHANGEFLG (QUOTE ALL)))) LAMBDAFONT) (CHANGEFONT LAMBDAFONT) (PRIN2 PRTTYCOM) (CHANGEFONT DEFAULTFONT)) (T (PRIN2 PRTTYCOM))) (RPTQ 2 (TERPRI))) (COND ((AND (LITATOM (CAR PRTTYCOM)) (fetch (FILEPKGTYPE GETDEF) of (CAR PRTTYCOM))) (* ; "If its the name of a type with a GETDEF, put out PUTDEF expressions.") (for X in (PRETTYCOM1 PRTTYCOM T T) do (printout NIL "(" |.P2| (QUOTE PUTDEF) %, |.P2| (KWOTE X) %, |.P2| (KWOTE (CAR PRTTYCOM)) %, .PPV (KWOTE (GETDEF X (CAR PRTTYCOM))) ")" T))) ((FIXSPELL (CAR PRTTYCOM) 70 FILEPKGCOMSPLST T PRTTYCOM) (SETQ PRTTYSPELLFLG T) (GO TOP)) (T (GO ERROR)))))) (RETURN PRTTYCOM) ERROR (ERROR "bad file package command" PRTTYCOM))) ) (PRETTYVAR (LAMBDA (VAR FLG) (* lmm "27-Aug-84 20:15") (* ; "I don't see what FLG is used for--rmk") (PROG (VAL TEM) (* ;; "Dumps value of VAR for reloading. If VAR is non-atomic, of form (var form) where VAR is to be dumped so as to be set to value of form, computed at LOAD time.") (COND ((LITATOM VAR) (AND (EQ (SETQ VAL (GETTOPVAL VAR)) (QUOTE NOBIND)) (printout T T "****WARNING: " |.P2| VAR " is unbound" T T)) (PRETTYVAR1 (QUOTE RPAQQ) VAR VAL)) ((LISTP VAR) (SETQ VAL (CDR VAR)) (SETQ VAR (CAR VAR)) (COND ((AND (EQ (CAR (SETQ TEM (LISTP (CAR (LISTP VAL))))) (QUOTE QUOTE)) (LISTP (CDR TEM))) (PRETTYVAR1 (QUOTE RPAQQ) VAR (CADR TEM))) ((EQ VAR COMMENTFLG) (* ; "don't print out comments")) ((OR (NULL VAL) (AND (LISTP VAL) (OR (NUMBERP (CAR VAL)) (EQ T (CAR VAL)) (NULL (CAR VAL))) (NULL (CDR VAL)))) (* ; "A minor optimization for RPAQQ's to suppresses unnecessary load-time eval's.") (PRETTYVAR1 (QUOTE RPAQQ) VAR (CAR VAL))) (T (PRETTYVAR1 (QUOTE RPAQ) VAR VAL NIL T)))) (T (ERROR "Bad variable specification" VAR))))) ) (PRETTYVAR1 (LAMBDA (OP VAR E DEF TAILFLG) (* ; "Edited 10-Feb-87 18:01 by Pavel") (* ;; "does printing for VAR, ADDVAR, and PROP commands. OP is the name of the function, VAR the operand, and E the rest of the expression to be printed, either as an element, or as a tail if TAILFLG=T. VAR is printed in LAMBDAFONT. If VAR is a list, each element is printed in LAMBDAFONT. This option is used to print both the name of the atom and its property for PROP commands.") (PROG ((LASTCOL (LINELENGTH)) TEM (*PRINT-ARRAY* T)) (* ; "This is supposed to be bound above here but isn't in some case I can't find. --Pavel") (TERPRI) (* ;; "because if you have a really bold font, it lines up the bottoms, but you can get crowded into the line above.") (COND ((AND (MEMB OP (QUOTE (RPAQQ RPAQ RPAQ?))) (EQ (TYPENAME (SETQ TEM (COND (TAILFLG (CAR E)) (T E)))) (QUOTE ARRAYP))) (* ;; "dump arrays and bitmaps specially. This really ought to be handled by having *PRINT-ARRAY* say how to dump these, so that only a single expression ends up on the file.") (* ;; "1 December 1986, Pavel: Well, I fixed bitmaps for this. Maybe I'll fix arrays as well...") (* ;; "10 February 1987, Pavel: ARRAYP's are now fixed as well, but not by using *PRINT-ARRAY*. Rather than invent another non-standard reader macro, I simply store the elements in a list and use a non-READing version of READARRAY.") (COND ((EQ OP (QUOTE RPAQQ)) (SETQQ OP RPAQ))) (printout NIL "(" |.P2| OP %, |.P2| VAR %,) (PRIN2 (BQUOTE (READARRAY-FROM-LIST (\, (ARRAYSIZE TEM)) (QUOTE (\, (ARRAYTYP TEM))) (\, (ARRAYORIG TEM)) (QUOTE (\, (PRINTARRAY-TO-LIST TEM)))))) (printout NIL (QUOTE %)) T)) ((ASSOC OP PRETTYPRINTMACROS) (OR TAILFLG (SETQ E (CONS E))) (PRINTDEF (CONS OP (COND ((LISTP VAR) (APPEND VAR E)) (T (CONS VAR E)))) 0 DEF)) (T (PRIN1 (QUOTE %()) (PRIN2 OP) (SPACES 1) (SETQ TEM (POSITION)) (COND ((AND FONTCHANGEFLG PRETTYCOMFONT) (CHANGEFONT PRETTYCOMFONT))) (COND ((LISTP VAR) (MAPRINT VAR NIL NIL NIL NIL (FUNCTION PRIN2))) (T (PRIN2 VAR))) (COND ((AND FONTCHANGEFLG PRETTYCOMFONT) (CHANGEFONT DEFAULTFONT))) (SPACES 1) (PRINTDEF E (COND ((OR (NLISTP E) (FITP E NIL NIL LASTCOL)) (POSITION)) (T TEM)) DEF TAILFLG) (PRIN1 (QUOTE %))))) (TERPRI))) ) (PRETTYCOM1 (LAMBDA (PRTYCOM PRTYFLG REMOVECOMMENTS) (* rmk%: "13-Feb-85 22:54") (PROG (PRTYX) (COND ((AND (EQ (CAR (LISTP (SETQ PRTYX (CDR PRTYCOM)))) (QUOTE *)) (CDR PRTYX)) (COND ((AND (LITATOM (SETQ PRTYX (CADR PRTYX))) PRTYFLG) (* ; "Checks to see if the variable is already being dumped and dumps it if not.") (PRETTYCOM PRTYX))) (SETQ PRTYX (COND (PRTYFLG (EVAL PRTYX)) ((LITATOM PRTYX) (AND (NEQ (SETQ PRTYX (GETTOPVAL PRTYX)) (QUOTE NOBIND)) PRTYX)) (T (RESETVARS (DWIMLOADFNSFLG) (RETURN (AND (ERSETQ (SETQ PRTYX (EVAL PRTYX))) PRTYX)))))))) (RETURN (if (AND REMOVECOMMENTS (LISTP PRTYX)) then (SUBSET PRTYX (FUNCTION (LAMBDA (X) (OR (NLISTP X) (NEQ (CAR X) COMMENTFLG))))) else PRTYX)))) ) (ENDFILE (LAMBDA (FILE) (* wt%: "10-SEP-78 13:54") (PRINT (QUOTE STOP) FILE) (CLOSEF FILE))) (MAKEDEFLIST (LAMBDA (X PROP FLG) (* ; "Edited 11-Feb-87 11:10 by bvm:") (for Z in X bind TEM do (COND ((AND (LITATOM Z) (SETQ TEM (SOME (GETPROPLIST Z) (FUNCTION (LAMBDA (X) (EQ X PROP))) (QUOTE CDDR)))) (PRETTYVAR1 (QUOTE PUTPROPS) (LIST Z PROP) (CADR TEM) (OR (EQ PROP (QUOTE EXPR)) (MEMB PROP MACROPROPS)))) ((NULL FLG) (* ; "PROP command") (EXEC-FORMAT "(no ~S property for ~S)~%%" PROP Z))))) ) (PP (NLAMBDA X (* lmm "15-Nov-86 00:54") (DECLARE (LOCALVARS . T)) (MAPC (NLAMBDA.ARGS X) (FUNCTION (LAMBDA (NAME) (for TYPE in (TYPESOF NAME NIL (QUOTE (FIELDS)) (QUOTE CURRENT)) do (CL:FORMAT *TERMINAL-IO* "~A definition for ~S:~%%" TYPE NAME) (SHOWDEF NAME TYPE)))))) ) (PP* (NLAMBDA X (* lmm "14-Aug-84 19:11") (DECLARE (LOCALVARS . T)) (* ;; "Prettyprints definitions to terminal with comments not suppressed.") (LET ((**COMMENT**FLG NIL) (*STANDARD-OUTPUT* (GETSTREAM T (QUOTE OUTPUT)))) (DECLARE (SPECVARS **COMMENT**FLG *STANDARD-OUTPUT*)) (PRETTYPRINT (NLAMBDA.ARGS X)))) ) (PPT (NLAMBDA X (* lmm "14-Aug-84 19:12") (DECLARE (LOCALVARS . T)) (* ;; "Prettyprints definitions to terminal with clisp translations shown.") (LET ((*STANDARD-OUTPUT* (GETSTREAM T (QUOTE OUTPUT)))) (DECLARE (SPECVARS *STANDARD-OUTPUT*)) (RESETVARS ((PRETTYTRANFLG T)) (RETURN (PRETTYPRINT (NLAMBDA.ARGS X)))))) ) (PRETTYPRINT (LAMBDA (FNS PRETTYDEFLG FNSLST) (* ; "Edited 11-Feb-87 11:11 by bvm:") (* ;; "PRETTYDEFLG is supplied when called from PRINTFNS. it is either a paatial file map or T, so that it is also used as a flag for whether you are being called from prettydef.") (* ;; "Note that prettyprint does all of its printing to standard output file and using current readtable. it assumes that higher functions have set these appropriately, as is the case when called from prettydef, pp, pp*,") (RESETLST (RESETSAVE NIL (LIST (FUNCTION DSPFONT) (DSPFONT) (GETSTREAM NIL (QUOTE OUTPUT)))) (PROG ((CLK (CLOCK 0)) (NEWADRLST (LISTP PRETTYDEFLG)) (FILEFLG (NOT (DISPLAYP (OUTPUT)))) FN DEF ADR LST SKIPPEDLST TEM) (* ; "NEWADRLST Corresponds to the current entry on NEWFILEMAP. Is in TCONC format.") (COND ((ATOM (SETQ LST FNS)) (SETQ LST (EVALV FNS)))) LP (COND ((NLISTP LST) (RETURN FNS)) ((AND FILEFLG (IGREATERP (CLOCKDIFFERENCE CLK) 30000)) (* ; "Every 30 seconds say what function we're working on") (SETQ CLK (CLOCK 0)) (PRIN2 (CAR LST) T T) (PRIN1 (QUOTE ", ") T))) (SETQ FN (CAR LST)) (TERPRI) (* ; "The initial TERPRI is not in map") (AND NEWADRLST (TCONC NEWADRLST (LIST FN (GETFILEPTR PRTTYFILE)))) (* ; "Address of start.") LP1 (SETQ DEF (VIRGINFN FN)) (AND PRETTYDEFLG (SELECTQ (ARGTYPE DEF) (1 (SETQ NLAMLST (CONS FN NLAMLST))) (2 (SETQ LAMALST (CONS FN LAMALST))) (3 (SETQ NLAMALST (CONS FN NLAMALST))) (NIL (SETQ LAM?LST (CONS FN LAM?LST))) NIL)) (* ; "So prettydef can add the appropriate DECLARE:") (COND ((NULL DEF) (COND ((AND (NULL PRETTYDEFLG) FN (BOUNDP FN)) (* ; "No fn definition, but is a variable. Only make this check when called via PP or PP*") (PRINTDEF (EVALV FN) 2)) (T (GO NOPRINT)))) ((NULL (EXPRP DEF)) (GO NOPRINT)) (T (AND ADDSPELLFLG (ADDSPELL FN)) (COND ((AND PRETTYDEFLG SOURCEFILE (NULL SOURCEFILENV) (NULL (SELECTQ REPRINTFNS (ALL T) ((T EXPRS) (EXPRP FN)) (AND (LISTP REPRINTFNS) (FMEMB FN REPRINTFNS)))) (PRETTYPRINT1 FN)) (* ; "Was a fn to be copied from old file, and we succeeded")) (T (* ; "Prettyprint afresh") (PRETTYPRINT3 FN DEF PRETTYDEFLG))))) DEFPRINTED (* ;;; "At this point we have prettyprinted FN one way or another") (AND NEWADRLST (RPLACD (CDADR NEWADRLST) (GETFILEPTR PRTTYFILE))) (* ; "Store end address") (TERPRI) (* ; "TERPRI is not included in map address") (SETQ LST (CDR LST)) (GO LP) NOPRINT (COND ((AND FILEFLG SOURCEFILE (PRETTYPRINT1 FN)) (GO DEFPRINTED)) ((AND (NULL PRETTYDEFLG) (SETQ TEM (EDITLOADFNS? FN))) (* ; "only make this check when called from PP or PP*") (LOADFNS FN TEM (QUOTE PROP)) (COND ((GETPROP FN (QUOTE EXPR)) (GO LP1))) (PRINT (CONS FN (QUOTE (not found))) T T)) ((AND DWIMFLG (NULL DEF) (SETQ TEM (MISSPELLED? FN 70 USERWORDS (AND PRETTYDEFLG T) LST)) (NEQ TEM FN)) (/RPLACA LST (SETQ FN TEM)) (AND NEWADRLST (FRPLACA (CADR NEWADRLST) FN)) (* ; "Fixes filemap.") (AND PRETTYDEFLG (SETQ PRTTYSPELLFLG T)) (GO LP1))) (EXEC-FORMAT "(~S not printable)~%%" FN) (AND LISPXHISTORY (LISPXPUT (QUOTE *ERROR*) FN NIL (CAAR LISPXHISTORY))) (COND (NEWADRLST (SETQ TEM (NLEFT (CAR NEWADRLST) 2)) (RPLACD TEM) (RPLACD NEWADRLST TEM))) LP3 (SETQ LST (CDR LST)) (GO LP)))) ) (PRETTYPRINT1 (LAMBDA (FN) (* bvm%: "30-Aug-86 17:25") (* ;;; "Like BRECOMPILE1. Obtains FN from SOURCEFILE. works whether the file has previously been mapped by PRETTYDEF, LOAD, or LOADFNS (or patially mapped)") (WITH-READER-ENVIRONMENT (OR SOURCEFILENV DESTINATIONENV) (PROG (ADR TEM) (COND ((NULL OLDFILEMAP) (GO DEFQLP)) ((PRETTYPRINT2 FN) (RETURN FN)) ((NULL (CAR OLDFILEMAP)) (RETURN NIL) (* ; "The entire file has been scanned.")) (T (GO FNLP) (* ; "Already inside of DEFINEQ."))) DEFQLP (* ; "Find DEFINEQ") (SELECTQ (SETQ TEM (RATOM SOURCEFILE)) ((STOP NIL) (* ; "End of file reached.") (SETQ OLDFILEMAP (CONS NIL OLDFILEMAP)) (* ; "Just to inform future calls to PRETTYPRINT1 not to bother scanning.") (RETURN NIL)) (%( (COND ((EQ (SETQ TEM (RATOM SOURCEFILE)) (QUOTE DEFINEQ)) (COND ((NULL OLDFILEMAP) (SETQ OLDFILEMAP (LIST T)) (* ;; "In case functionis found right off, OLDFILEMAP must not be left as NIL or else next call to PRETTYPRINT1 will not realize are alredy inside of DEFINEQ."))) (GO FNLP)) (T (SKREAD SOURCEFILE (QUOTE %())))) (SKREAD SOURCEFILE TEM)) (GO DEFQLP) FNLP (SELECTQ (SETQ TEM (RATOM SOURCEFILE)) (%) (* ; "End of DEFINEQ.") (GO DEFQLP)) ((%( %[) NIL) (SCANFILEHELP)) (SETQ ADR (SUB1 (GETFILEPTR SOURCEFILE))) (SETQ TEM (RATOM SOURCEFILE)) (SETFILEPTR SOURCEFILE ADR) (SKREAD SOURCEFILE) (COND ((EQ TEM FN) (PRETTYPRINT2 FN ADR (GETFILEPTR SOURCEFILE)) (* ; "copies the bytes.") (RETURN FN)) (T (SETQ OLDFILEMAP (CONS (CONS TEM (CONS ADR (GETFILEPTR SOURCEFILE))) OLDFILEMAP)) (* ;; "Note that this situation only occurs when (a) the entire file was not peviously scanned, e.g. if loaded with buildmapflg off, and (b) user is doing a remake, and (c) this functio was either dumped directly because it was changed, or else it has been deleted from the FNS. The function is added to OLDFILEMAP just in case it is out of order.") (GO FNLP)))))) ) (PRETTYPRINT2 (LAMBDA (FN FROM TO) (* bvm%: "30-Aug-86 18:13") (* ;; "Copies function from sourcefile to prettyfile. looking it up on the map when not already given address. returns nil if not there") (PROG (TEM) (COND (FROM) ((for X in OLDFILEMAP thereis (COND ((NLISTP X) NIL) ((EQ (CAR X) FN) (* ;; "occurs when remaking a file without a map, and a function is previously skipped that later is needed.") (SETQ TEM X)) ((LISTP (CDDR X)) (SETQ TEM (FASSOC FN (CDDR X)))))) (SETQ FROM (CADR TEM)) (SETQ TO (CDDR TEM))) (T (RETURN NIL))) (SETFILEPTR SOURCEFILE FROM) (RATOM SOURCEFILE) (* ;; "The RATOM skips the paren. the reason for the RATOM instead of simply setting file ptr to (ADD1 FROM) is that there may be font info there.") (COND ((NEQ FN (SETQ TEM (READ SOURCEFILE))) (* ; "Consistency check.") (LISPXPRINT (CONS FN TEM) T) (ERROR (QUOTE "filemap does not agree with contents of") SOURCEFILE T))) (if (NULL SOURCEFILENV) then (* ; "compatible environments, just copy characters") (COPYCHARS SOURCEFILE PRTTYFILE FROM TO) else (* ; "incompatible, have to read old def and reprettyprint") (SETQ TEM (READ SOURCEFILE)) (* ; "old definition") (WITH-READER-ENVIRONMENT DESTINATIONENV (PRETTYPRINT3 FN TEM T))) (* ; "Initial and final TERPRI's are done by callers; they are not in map.") (RETURN FN))) ) (PRETTYPRINT3 (LAMBDA (FN DEF PRETTYDEFLG) (* bvm%: "30-Aug-86 17:18") (LET (TEM) (AND (OR (SELECTQ CLISPIFYPRETTYFLG ((T EXPRS) (EXPRP FN)) (ALL T) (CHANGES (AND PRETTYDEFLG (MEMB FN CHANGES))) (MEMB FN CLISPIFYPRETTYFLG)) (AND (SUPERPRINTEQ (CAR (SETQ TEM (CADDR DEF))) COMMENTFLG) (EQ (CADR TEM) (QUOTE DECLARATIONS%:)) (MEMB (QUOTE CLISPIFY) TEM))) (SETQ DEF (CLISPIFY DEF))) (* ;; "If the function is stored on property list, only clispify if user specifically said MAKEFILE (file CLISPIFY), otherwise, assume that functions on property list have already been clispified") (COND ((AND LAMBDAFONT FONTCHANGEFLG) (PRIN1 (QUOTE %()) (* ;; "The font change is after the paren because of problems with updating filemaps when moving back and forth between -10 and -D systems--rmk") (CHANGEFONT LAMBDAFONT) (PRIN2 FN) (CHANGEFONT DEFAULTFONT) (TERPRI)) (T (PRIN1 (QUOTE %()) (PRINT FN))) (PRINTDEF DEF 2 (QUOTE FNS) NIL FNSLST) (PRIN1 (QUOTE %))) FN)) ) (PRINTDEF1 [LAMBDA (EXPR FORMFLG) (* ; "Edited 16-Apr-2018 21:35 by rmk:") (* ; "Edited 16-Apr-2018 10:14 by rmk:") (* ; "Edited 14-Apr-88 18:21 by bvm") (* ;; "RMK: Special for DEFUNs: build filemap as per PRINTFNS") (* ;; "Used by MAKEFILE to print P, etc expressions. ") (TERPRI) (LET (STARTPOS ENDPOS) (IF (AND FORMFLG NEWFILEMAP (EQ (CAR EXPR) 'CL:DEFUN)) THEN (SETQ STARTPOS (GETFILEPTR PRTTYFILE))) (PRINTDEF EXPR NIL FORMFLG NIL FNSLST) [IF STARTPOS THEN (SETQ ENDPOS (GETFILEPTR PRTTYFILE)) (NCONC1 NEWFILEMAP (LIST STARTPOS ENDPOS (CONS (CADR EXPR) (CONS STARTPOS ENDPOS] (TERPRI]) (SUPERPRINTEQ (LAMBDA (X Y) (OR (EQ X Y) (AND Y (EQ (CDR (FASSOC X PRETTYEQUIVLST)) Y))))) (SUPERPRINTGETPROP (LAMBDA (ATM PROP) (* wt%: "17-SEP-79 15:57") (OR (GETPROP (CDR (FASSOC ATM PRETTYEQUIVLST)) PROP) (GETPROP ATM PROP))) ) (CHANGEFONT (LAMBDA (FONTCLASS FILE) (* lmm "17-Jan-86 20:59") (* ;; "for calls to changefont when not under prettyprin prettydef. This is only for non-D systems. For D, DSPFONT is moved'ed in.") (* ;; "Don't bother testing for FONTCHANGEFLG=ALL, because presumably the FONTCLASS will have a NULL entry if display printing isn't wanted. FONTCHANGEFLG=ALL tests are really only needed if something expensive can be avoided by advance knowledge.") (AND FONTCHANGEFLG FONTCLASS (DSPFONT FONTCLASS FILE))) ) ) (DEFINEQ (READARRAY (LAMBDA (SIZE TYPE ORIG) (* rrb " 4-JUL-80 17:07") (* ;; "type is one of: POINTER, FIXP, SMALLPOSP BYTE DOUBLEPOINTER or a number which is the place (between 0 and SIZE) where FIXPs stop and POINTERs begin.") (PROG (X (A (ARRAY SIZE TYPE NIL ORIG)) M DELTA) LP (COND ((NEQ (READC) (QUOTE %()) (GO LP))) (SETQ M 1) (SETQ DELTA (SUB1 (OR ORIG 1))) LP1 (COND ((NOT (IGREATERP M SIZE)) (SETA A (IPLUS M DELTA) (READ)) (SETQ M (ADD1 M)) (GO LP1)) ((NULL (READ)) (* ;; "PRINTARRAY writes a NIL if there are no elements in the array for which the left half must be set using SETD, otherwise it writes a T.") (GO OUT))) (SETQ M (COND ((NUMBERP TYPE) (ADD1 TYPE)) ((EQ TYPE (QUOTE DOUBLEPOINTER)) 1) (T (SHOULDNT)))) LP2 (COND ((NOT (IGREATERP M SIZE)) (SETD A (IPLUS M DELTA) (READ)) (SETQ M (ADD1 M)) (GO LP2))) OUT (READ) (* ; "Reads the final right parentheses surrounding the elements of the array.") (RETURN A))) ) (PRINTARRAY (LAMBDA (V) (* bvm%: " 3-Oct-86 12:57") (* ; "Used by prettydef. Included in ABASIC because it uses LOC and VAG on the 10") (PROG (A N M TYPE FLG DOUBLEFLG ORIG) (COND ((AND (LITATOM V) (ARRAYP (SETQ A (EVALV V (QUOTE PRINTARRAY))))) (PRINT (BQUOTE (SETQ (\, V) (READARRAY (\, (SETQ N (ARRAYSIZE A))) (QUOTE (\, (SETQ TYPE (ARRAYTYP A)))) (\, (SETQ ORIG (ARRAYORIG A)))))))) ((ARRAYP V) (* ; "Just dumps the element expression--assumes that READARRAY has already been written") (SETQ A V) (SETQ N (ARRAYSIZE A)) (SETQ TYPE (ARRAYTYP A)) (SETQ ORIG (ARRAYORIG A))) (T (RETURN (HELP V "not array")))) (PRIN1 (QUOTE %()) (SETQ DOUBLEFLG (OR (EQ TYPE (QUOTE DOUBLEPOINTER)) (NUMBERP TYPE))) (* ; "note if this array has different ELTD.") (SETQ M 1) LP (COND ((NOT (IGREATERP M N)) (COND ((OR (EQ TYPE (QUOTE POINTER)) DOUBLEFLG) (PRINT (ELT A (SUB1 (IPLUS M ORIG))))) (T (* ; "changed from PRINT to PRIN2 so would look better in file.") (PRIN2 (ELT A (SUB1 (IPLUS M ORIG)))) (SPACES 1))) (* ;; "check for any non-NIL entries in the ELTD part of the double arrays. If there are none, format for print out avoids lots of NILs.") (AND DOUBLEFLG (COND ((NUMBERP TYPE) (* ; "check for M being in the double pointer part of the array") (IGREATERP M TYPE)) (T T)) (ELTD A (SUB1 (IPLUS M ORIG))) (SETQ FLG T)) (SETQ M (ADD1 M)) (GO LP)) ((NULL (PRINT FLG)) (* ; "if FLG is NULL, there are non-NIL double word entries.") (GO OUT))) (SETQ M (COND ((EQ TYPE (QUOTE DOUBLEPOINTER)) (* ; "all entries are double") 1) ((NUMBERP TYPE) (* ; "first TYPE elements in the array are numbers") (ADD1 TYPE)))) LP1 (COND ((NOT (IGREATERP M N)) (PRINT (ELTD A (SUB1 (IPLUS M ORIG)))) (SETQ M (ADD1 M)) (GO LP1))) OUT (PRIN1 (QUOTE %))) (RETURN A))) ) (READARRAY-FROM-LIST (LAMBDA (SIZE TYPE ORIG ELEMENTS) (* ; "Edited 10-Feb-87 17:59 by Pavel") (* ;;; "This is not written in the most straightforward way possible. Rather, in order to minimize the possibility of destabilization, we have kept this as much like READARRAY as possible. In essence, the only change is to use POP instead of READ.") (* ;; "type is one of: POINTER, FIXP, SMALLPOSP BYTE DOUBLEPOINTER or a number which is the place (between 0 and SIZE) where FIXPs stop and POINTERs begin.") (PROG (X (A (ARRAY SIZE TYPE NIL ORIG)) M DELTA) LP (SETQ M 1) (SETQ DELTA (SUB1 (OR ORIG 1))) LP1 (COND ((NOT (IGREATERP M SIZE)) (SETA A (IPLUS M DELTA) (pop ELEMENTS)) (SETQ M (ADD1 M)) (GO LP1)) ((NULL (pop ELEMENTS)) (* ;; "PRINTARRAY writes a NIL if there are no elements in the array for which the left half must be set using SETD, otherwise it writes a T.") (GO OUT))) (SETQ M (COND ((NUMBERP TYPE) (ADD1 TYPE)) ((EQ TYPE (QUOTE DOUBLEPOINTER)) 1) (T (SHOULDNT)))) LP2 (COND ((NOT (IGREATERP M SIZE)) (SETD A (IPLUS M DELTA) (pop ELEMENTS)) (SETQ M (ADD1 M)) (GO LP2))) OUT (RETURN A))) ) (PRINTARRAY-TO-LIST (LAMBDA (V) (* ; "Edited 10-Feb-87 18:09 by Pavel") (* ;;; "This code is not written in the most straighforward way possible. Rather, to minimize the possibility of destabilization, we attempt to make it as much like PRINTARRAY as we can. In essence, the only changes are to PUSH the elements onto RESULT instead of printing them. At the end, we return the reversal of RESULT.") (PROG ((RESULT NIL) A N M TYPE FLG DOUBLEFLG ORIG) (COND ((ARRAYP V) (SETQ A V) (SETQ N (ARRAYSIZE A)) (SETQ TYPE (ARRAYTYP A)) (SETQ ORIG (ARRAYORIG A))) (T (RETURN (HELP V "not array")))) (SETQ DOUBLEFLG (OR (EQ TYPE (QUOTE DOUBLEPOINTER)) (NUMBERP TYPE))) (* ; "note if this array has different ELTD.") (SETQ M 1) LP (COND ((NOT (IGREATERP M N)) (push RESULT (ELT A (SUB1 (IPLUS M ORIG)))) (* ;; "check for any non-NIL entries in the ELTD part of the double arrays. If there are none, format for print out avoids lots of NILs.") (AND DOUBLEFLG (COND ((NUMBERP TYPE) (* ; "check for M being in the double pointer part of the array") (IGREATERP M TYPE)) (T T)) (ELTD A (SUB1 (IPLUS M ORIG))) (SETQ FLG T)) (SETQ M (ADD1 M)) (GO LP))) (push RESULT FLG) (COND ((NULL FLG) (* ; "if FLG is NULL, there are non-NIL double word entries.") (GO OUT))) (SETQ M (COND ((EQ TYPE (QUOTE DOUBLEPOINTER)) (* ; "all entries are double") 1) ((NUMBERP TYPE) (* ; "first TYPE elements in the array are numbers") (ADD1 TYPE)))) LP1 (COND ((NOT (IGREATERP M N)) (push RESULT (ELTD A (SUB1 (IPLUS M ORIG)))) (SETQ M (ADD1 M)) (GO LP1))) OUT (RETURN (REVERSE RESULT)))) ) ) (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS CHANGFONT MACRO (= . DSPFONT)) ) ) (* ; "COPYRIGHT") (DEFINEQ (PRINTCOPYRIGHT [LAMBDA (FILENAME) (* ; "Edited 31-Aug-99 09:06 by rmk:") (* ; "Edited 31-Aug-99 09:01 by rmk:") (* edited%: " 1-Jan-85 20:16") (* ;;; "CALLED BY PRETTYDEF TO PUT a copyright notice on a file. The globalvar COPYRIGHTOWNERS is used to determine the possible copyright owners when it is determined the file doesn't have a copyright yet and has never been asked if the programmer wanted one. The whole copyright mechanism can be turned off by setting COPYRIGHTFLG to NEVER -- originaly NIL. If the file is copyrighted, any year the file is editted the new year is tacked on to the list of copyright years. The copyright notice comes immediately after the FILECREATED expression * *") (PROG [(OWNER (GETPROP FILENAME 'COPYRIGHT] (AND [OR OWNER (AND COPYRIGHTFLG (SETQ OWNER (ASKUSER (if (EQ COPYRIGHTFLG 'DEFAULT) then 0 else DWIMWAIT) (CONSTANT (CHARACTER (CHARCODE LF))) (CONCAT "Copyright owner for file " FILENAME ": ") (NCONC [MAPCAR COPYRIGHTOWNERS (FUNCTION (LAMBDA (X) (LIST (CAR X) "" 'EXPLAINSTRING (CONCAT (CAR X) " - " (CADR X)) 'RETURN (CADR X) 'CONFIRMFLG T] (CONS (if (SETQ OWNER (ASSOC DEFAULTCOPYRIGHTOWNER COPYRIGHTOWNERS)) then (LIST (CONSTANT (CHARACTER (CHARCODE LF))) (CONCAT DEFAULTCOPYRIGHTOWNER " ") 'EXPLAINSTRING (CONCAT " - " (CADR OWNER) " [Default]") 'NOECHOFLG T 'RETURN (CADR OWNER)) else '(% "No copyright notice now " EXPLAINSTRING " - no copyright notice now [Default]" NOECHOFLG T RETURN NIL)) DEFAULTCOPYRIGHTKEYLST)) T T)) (/PUTPROP FILENAME 'COPYRIGHT (SETQ OWNER (LIST OWNER] (COND ((NEQ (CAR OWNER) 'NONE) (PROG ((CURRENTYEAR (SUBATOM (DATE (DATEFORMAT YEAR.LONG NO.TIME)) -4 -1))) (OR (MEMBER CURRENTYEAR (CDR OWNER)) (NCONC1 OWNER CURRENTYEAR))) (PRINTCOPYRIGHT1 OWNER]) (PRINTCOPYRIGHT1 [LAMBDA (OWNER) (* ; "Edited 21-Feb-2021 10:58 by rmk:") (* ; "Edited 6-Apr-90 10:36 by jds") (PROG ((DATES (CDR OWNER)) (SEMICOLON (AND (READTABLEPROP *READTABLE* 'COMMONLISP) "; ")) (PRIVATE NIL)) (COND ((EQ (CAR DATES) T) (SETQ PRIVATE T) (pop DATES))) (COND (SEMICOLON (* ; "do CommonLisp style comment") (PRIN1 SEMICOLON)) (T (* ; "Print IL-style comment, with a ; in it so the pretty printer will render it as a CL-style comment.") (printout NIL "(* ; %"" T))) (PRIN3 "Copyright (c) ") [for Y START END on DATES do (* ;  "print years of copyright, e.g., 1985, 1986. Print intervals for successive years") (SETQ START (SETQ END (CAR Y))) (FOR NEXT IN (CDR Y) WHILE (EQ (ADD1 END) NEXT) DO (SETQ END NEXT) (POP Y)) (PRIN3 START) (CL:UNLESS (EQ START END) (PRIN3 "-") (PRIN3 END)) (COND ((CDR Y) (PRIN3 ", "] (PRIN3 " by ") (PRIN3 (CAR OWNER)) (PRIN3 ".") (AND COPYRIGHTSRESERVED (PRIN3 " All rights reserved.")) (TERPRI) [COND (PRIVATE (for LINE in (CONS (CONCAT "The following program was created in " (CAR DATES) " but has not been published") '( "within the meaning of the copyright law, is furnished under license," "and may not be used, copied and/or disclosed except in accordance" "with the terms of said license.")) do (COND (SEMICOLON (PRIN1 SEMICOLON))) (PRIN3 LINE) (TERPRI] (COND ((NOT SEMICOLON) (PRIN3 "%")") (TERPRI))) (TERPRI]) (SAVECOPYRIGHT (LAMBDA (FILENAME) (* lmm "25-DEC-82 16:48") (* ;; "Called from PRETTYDEF to save copyright info on end of file") (AND (NEQ COPYRIGHTFLG (QUOTE NEVER)) (PROG (X) (COND ((SETQ X (GETPROP FILENAME (QUOTE COPYRIGHT))) (PRINT (LIST (QUOTE PUTPROPS) FILENAME (QUOTE COPYRIGHT) X))))))) ) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: NIL PRINTCOPYRIGHT PRINTCOPYRIGHT1 SAVECOPYRIGHT (LOCALVARS . T) (NOLINKFNS PRINTCOPYRIGHT1)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS COPYRIGHTFLG COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST DEFAULTCOPYRIGHTOWNER COPYRIGHTSRESERVED) ) (RPAQ? COPYRIGHTFLG ) (RPAQ? DEFAULTCOPYRIGHTOWNER ) (RPAQ? COPYRIGHTPRETTYFLG T) (RPAQ? COPYRIGHTOWNERS ) (RPAQ? DEFAULTCOPYRIGHTKEYLST '((NONE " " EXPLAINSTRING "NONE - No copyright ever on this file" CONFIRM T RETURN 'NONE) [%[ "owner: " EXPLAINSTRING "[ - new copyright owner -- type one line of text" NOECHOFLG T KEYLST (( " " RETURN (SUBSTRING (CADR ANSWER) 2 -2] (%] "No copyright notice now " EXPLAINSTRING "] - no copyright notice now" NOECHOFLG T RETURN NIL))) (RPAQ? COPYRIGHTSRESERVED T) (RPAQ? *NEW-INTERLISP-MAKEFILE-ENVIRONMENT* '(:READTABLE "INTERLISP" :PACKAGE "INTERLISP")) (RPAQ? *DEFAULT-MAKEFILE-ENVIRONMENT* ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST COPYRIGHTPRETTYFLG COMMENTFLG *DEFAULT-MAKEFILE-ENVIRONMENT* *NEW-INTERLISP-MAKEFILE-ENVIRONMENT*) ) (RPAQ? COMMENTFLG '*) (RPAQ? **COMMENT**FLG '" **COMMENT** ") (RPAQ? PRETTYFLG T) (RPAQ? %#RPARS 4) (RPAQ? CLISPIFYPRETTYFLG ) (RPAQ? PRETTYTRANFLG ) (RPAQ? FONTCHANGEFLG ) (RPAQ? CHANGECHARTABSTR ) (RPAQ? PRETTYTABFLG T) (RPAQ? DECLARETAGSLST '(COMPILERVARS COPY COPYWHEN DOCOPY DOEVAL@COMPILE DOEVAL@LOAD DONTCOPY DONTEVAL@COMPILE DONTEVAL@LOAD EVAL@COMPILE EVAL@COMPILEWHEN EVAL@LOAD EVAL@LOADWHEN FIRST NOTFIRST)) (RPAQ? AVERAGEVARLENGTH 4) (RPAQ? AVERAGEFNLENGTH 5) (RPAQ? %#CAREFULCOLUMNS 0) (RPAQ? CHANGECHAR '%|) (RPAQ? ENDLINEUSERFN ) (RPAQ? PRETTYDEFMACROS ) (RPAQ? PRETTYPRINTMACROS ) (RPAQ? PRETTYEQUIVLST ) (RPAQ? PRETTYPRINTYPEMACROS ) (RPAQ? FILEPKGCOMSPLST '(DECLARE%: SPECVARS LOCALVARS GLOBALVARS PROP IFPROP P VARS INITVARS ADDVARS APPENDVARS FNS ARRAY E COMS ORIGINAL BLOCKS *)) (RPAQ? SYSPROPS '(PROPTYPE ALISTTYPE DELDEF EDITDEF PUTDEF GETDEF WHENCHANGED NOTICEFN NEWCOMFN PRETTYTYPE DELFROMPRETTYCOM ADDTOPRETTYCOM ACCESSFN ACS AMAC ARGNAMES BLKLIBRARYDEF BROADSCOPE CLISPCLASS CLISPCLASSDEF CLISPFORM CLISPIFYISPROP CLISPINFIX CLISPISFORM CLISPISPROP CLISPNEG CLISPTYPE CLISPWORD CLMAPS CODE CONVERT COREVAL CROPS CTYPE EDIT-SAVE EXPR FILE FILECHANGES FILEDATES FILEDEF FILEGROUP FILEHISTORY FILEMAP FILETYPE GLOBALVAR HISTORY I.S.OPR I.S.TYPE INFO LASTVALUE LISPFN MACRO MAKE NAMESCHANGED NARGS OLDVALUE OPD SETFN SUBR UBOX UNARYOP VALUE \DEF CLISPBRACKET TRYHARDER)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (BLOCK%: PRETTYPRINTBLOCK PRETTYPRINT PRETTYPRINT1 PRETTYPRINT2 (ENTRIES PRETTYPRINT) (SPECVARS FNSLST FILEFLG)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS DECLARETAGSLST LISPXPRINTFLG SYSPROPS FILEPKGCOMSPLST DWIMLOADFNSFLG PRETTYHEADER FILERDTBL PRETTYEQUIVLST PRETTYTRANFLG CLISPIFYPRETTYFLG LISPXHISTORY DWIMFLG USERWORDS COMMENTFLG) ) (DECLARE%: EVAL@COMPILE DOCOPY (CL:PROCLAIM '(CL:SPECIAL DEFAULTFONT LAMBDAFONT PRETTYCOMFONT COMMENTFONT **COMMENT**FLG PRETTYPRINTMACROS)) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (FILESLOAD (IMPORT) FILEPKG) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA PPT PP* PP) (ADDTOVAR NLAML ) (ADDTOVAR LAMA ) ) (PUTPROPS PRETTY COPYRIGHT ("Venue & Xerox Corporation" T 1984 1985 1986 1987 1988 1989 1990 1999 2018 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (5927 40668 (PRETTYDEF 5937 . 14200) (PRETTYDEFCOMS 14202 . 14884) (PRETTYDEF0 14886 . 15077) (PRETTYDEF1 15079 . 16842) (PRINTDATE 16844 . 18080) (PRINTDATE1 18082 . 19287) (PRINTFNS 19289 . 19858) (PRETTYCOM 19860 . 26201) (PRETTYVAR 26203 . 27241) (PRETTYVAR1 27243 . 29461) (PRETTYCOM1 29463 . 30167) (ENDFILE 30169 . 30265) (MAKEDEFLIST 30267 . 30671) (PP 30673 . 30949) (PP* 30951 . 31264) (PPT 31266 . 31585) (PRETTYPRINT 31587 . 34739) (PRETTYPRINT1 34741 . 36627) (PRETTYPRINT2 36629 . 37945) (PRETTYPRINT3 37947 . 38902) (PRINTDEF1 38904 . 39912) (SUPERPRINTEQ 39914 . 40008) ( SUPERPRINTGETPROP 40010 . 40154) (CHANGEFONT 40156 . 40666)) (40669 46015 (READARRAY 40679 . 41605) ( PRINTARRAY 41607 . 43347) (READARRAY-FROM-LIST 43349 . 44454) (PRINTARRAY-TO-LIST 44456 . 46013)) ( 46142 53355 (PRINTCOPYRIGHT 46152 . 49924) (PRINTCOPYRIGHT1 49926 . 53050) (SAVECOPYRIGHT 53052 . 53353))))) STOP \ No newline at end of file diff --git a/sources/PRETTY.LCOM b/sources/PRETTY.LCOM index 0e727c762c855adf59011dd3b187efd7074ccd7e..9bdeb6e7ce2e49cccf6978aa9c9005cbe34b55dd 100644 GIT binary patch delta 971 zcmaJ=&u`LT7^X$D!GvsVUi`7WehUepkbYlV+OlN2u}&I+lCGIqOk^7nz^RxG55$=L z3obPtOm^{Z!bB3Y%n(n;i&y;{whMO;`n82^2eTgD@9FcrKfk{Hb3atvBP(D&?n@*8EQ6<#wsEGhZ-N(_Bl;VQ%k`_oem1nxWm# zn0x){f^wE5kw_pYZ!{}qK=>Swg_M9(f`X!f$g-AI(}ucWs!M?W*Maqz3G)}W00B`V z0)|p;<9W5R1I3oWA5K+0^zqx~^GL%!CKfMen0o(h{V>CR(Yh^%tT`UN zn$Py=Ig|r46WEt82EE<2N$b`K+5K?fdGDwh#yQ4pe+OM_zjh+p@0en!INsBPZ0+cg zw>zhgyGiwNJ=E`9JdBD-!tyX0Cta1Us31XF&!-nmz(gF@!B`o_aBfFDC_^A82U=1b z08wxP%d}aV&K-bGa{9>&hF+jsiaD9q8f^KBp{}ULDqUEc%;ofaR$H;XfXE7W4wI)PLQOeOBN0AuJK^V~rTu1QV*t%lh5{^a#c`Y0G2ewu0)c^nh delta 873 zcmZ`%U279T6wM~pCeeV>f}x0BM^c(#!`|85*=z!(G1;0WpQc+;e9|T~(LhR41qJC} zXjq@bU*J=;MnshQ7sLmB_RWImtMtX$NwyZH3%hgX&N=6vVei4d^krY#xiO1uF}vAY zq%x*}Vp`GDC=c$jxlX&kx!&zHm-^iYz4c~)sa7{_`&Kf;1|O6_-dq{{zED4+O(v5B z8h5su4Iuw`qLD@<@yNo8RWfsRGi#gq|46*CY!DbcxqRvP))3K{hKe(kqHYA|lLSGO z(>ymCgU9p7ht_s8{_9hQ1_|CiZ)dNT%tRcdb0;L9wCrEo@bM??eqK*^-Q_HuDoE{L zPuuSb{g0vfV7R{$rb9I>%IN1E=Ps?b5SrRexWF9Q_Oc@w%Apt9 Date: Sun, 21 Feb 2021 17:34:42 -0800 Subject: [PATCH 33/37] WHEELSCROLL: a little tuning, plus a WHEELSCROLL.TXT file --- lispusers/WHEELSCROLL | 2 +- lispusers/WHEELSCROLL.LCOM | Bin 2587 -> 3526 bytes lispusers/WHEELSCROLL.TXT | Bin 0 -> 1415 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 lispusers/WHEELSCROLL.TXT diff --git a/lispusers/WHEELSCROLL b/lispusers/WHEELSCROLL index 5cb1b473..baf31632 100644 --- a/lispusers/WHEELSCROLL +++ b/lispusers/WHEELSCROLL @@ -1 +1 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "17-Feb-2021 22:37:01"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;31 5760 changes to%: (FNS WHEELSCROLL) previous date%: "17-Feb-2021 22:22:29" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;28) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL) [VARS (WHEELSCROLLINTERRUPTS '((520 (WHEELSCROLL 'VERTICAL WHEELSCROLLDELTA) T) (521 (WHEELSCROLL 'VERTICAL (IMINUS WHEELSCROLLDELTA)) T] (GLOBALVARS WHEELSCROLLDELTA WHEELSCROLLSETTLETIME) (INITVARS (WHEELSCROLLDELTA 10) (WHEELSCROLLSETTLETIME 50)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (DIRECTION DELTA) (* ; "Edited 17-Feb-2021 22:35 by rmk:") (* ;; "The wheel may accidentally turn (giving the interrupt) when the users intention is simply to push the middle button. And there may be another accidental turn (also giving an interrupt) when the user is releasing the middle button. Here we try to detect and ignore wheel motions in the first case, we don't yet have the information to solve the second. (This should not be an issue with a trackpad)") (* ;; "") (* ;; "Below we ignore a motion interrupt if it is received when a mouse button is down. We also ignore if the MIDDLE shows up within an interval of WHEELSCROLLSETTLETIME milliseconds.") (CL:WHEN (LET ((W (WHICHW))) (* ;; "Returns the window that should be wheel scrolled, skipping windows that have no SCROLLFN or are pop-up scrollbar window for some other window. ") (* ;; "The behavior of pop-up scrollbars (via IN/SCROLL/BAR? in WINDOWSCROLL) is inconsistent with a direct call to SCROLLW in that SCROLLW uses SCROLLBYREPAINTFN for a window without a SCROLLFN while the pop-up does nothing. We implement th pop-up behavior, otherwise odd windows like those holding menus would scroll in a funky way.") (CL:WHEN [AND W (WINDOWPROP W 'SCROLLFN) (NOT (WINDOWPROP W (CL:IF (EQ DIRECTION 'VERTICAL) 'VERTICALSCROLLBARFOR 'HORIZONTALSCROLLBARFOR)] (CL:WHEN [OR T (AND (MOUSESTATE UP) (NOT (UNTILMOUSESTATE (ONLY MIDDLE) WHEELSCROLLSETTLETIME] (* ;; "Always scroll from the MOUSE process. Need the KWOTE because PROCESS.EVAL uses CL:EVAL which doesn't like raw windows") [PROCESS.EVAL (FIND.PROCESS 'MOUSE) (CL:IF (EQ DIRECTION 'VERTICAL) `(SCROLLW ,(KWOTE W) 0 ,DELTA) `(SCROLLW ,(KWOTE W) ,DELTA 0))]))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 17-Feb-2021 11:53 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (FOR I IN WHEELSCROLLINTERRUPTS DO (INTERRUPTCHAR (CAR I) (CADR I) (CADDR I)) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;; "These actions are invoked when the caret is in the Tedit window, because TEDIT disables the interrupts") (TEDIT.SETFUNCTION (CAR I) `[LAMBDA NIL ,(CADR I] TEDIT.READTABLE))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 17-Feb-2021 11:09 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND WHEELSCROLLINTERRUPTS (LISPINTERRUPTS.WSORIG]) ) (RPAQQ WHEELSCROLLINTERRUPTS ((520 (WHEELSCROLL 'VERTICAL WHEELSCROLLDELTA) T) (521 (WHEELSCROLL 'VERTICAL (IMINUS WHEELSCROLLDELTA)) T))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS WHEELSCROLLDELTA WHEELSCROLLSETTLETIME) ) (RPAQ? WHEELSCROLLDELTA 10) (RPAQ? WHEELSCROLLSETTLETIME 50) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (1046 5231 (ENABLEWHEELSCROLL 1056 . 1481) (WHEELSCROLL 1483 . 3887) ( INSTALL-WHEELSCROLL 3889 . 4952) (LISPINTERRUPTS.WHEELSCROLL 4954 . 5229))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "21-Feb-2021 09:39:06"  {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;42 6734 changes to%: (VARS WHEELSCROLLCOMS) (FNS WHEELSCROLL) previous date%: "20-Feb-2021 17:34:35" {DSK}kaplan>Local>medley3.5>git-medley>lispusers>WHEELSCROLL.;39) (PRETTYCOMPRINT WHEELSCROLLCOMS) (RPAQQ WHEELSCROLLCOMS [(FNS ENABLEWHEELSCROLL WHEELSCROLL WHEELSCROLL.DOIT INSTALL-WHEELSCROLL LISPINTERRUPTS.WHEELSCROLL) [VARS (WHEELSCROLLINTERRUPTS '((520 (WHEELSCROLL 'VERTICAL WHEELSCROLLDELTA) T) (521 (WHEELSCROLL 'VERTICAL (IMINUS WHEELSCROLLDELTA)) T] (GLOBALVARS WHEELSCROLLDELTA WHEELSCROLLSETTLETIME \WHEELSCROLLINPROGRESS) (INITVARS (WHEELSCROLLDELTA 20) (WHEELSCROLLSETTLETIME 50) (\WHEELSCROLLINPROGRESS NIL)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T]) (DEFINEQ (ENABLEWHEELSCROLL [LAMBDA (ON) (* ; "Edited 15-Feb-2021 18:17 by rmk:") (* ;; "So we can toggle this scrolling, for experimentation.") (IF ON THEN [KEYACTION 'PAD1 '((520 520) . IGNORE] [KEYACTION 'PAD2 '((521 521) . IGNORE] ELSE (KEYACTION 'PAD1 '(IGNORE . IGNORE)) (KEYACTION 'PAD2 '(IGNORE . IGNORE]) (WHEELSCROLL [LAMBDA (DIRECTION DELTA) (* ; "Edited 21-Feb-2021 09:38 by rmk:") (* ;; "The wheel may accidentally turn (giving the interrupt) when the users intention is simply to push the middle button. And there may be another accidental turn (also giving an interrupt) when the user is releasing the middle button. We don't yet have a good solution to this problem. (This is not an issue with a trackpad)") (* ;; "") (CL:WHEN (MOUSESTATE UP) (* ;  "Ignore interrupt if a button is down") [LET ((W (WHICHW))) (* Unsuccessful a ttempt to suppress scroll if middlebutton comes down within  the setetle time (NOT (UNTILMOUSESTATE (ONLY MIDDLE) WHEELSCROLLSETTLETIME))) (CL:WHEN W (* ;; "We scroll only if the window has a scrollfn. Our behavior is thus different from a direct call to SCROLLW, which defaults to SCROLLBYREPAINTFN in that case, but conforms to what happens with IN/SCROLL/BAR? and SCROLL.HANDLER in WINDOWSCROLL. Menus and scrollbars typically do not have scrollfns, so this suppresses otherwise funky behavior. ") (IF (WINDOWPROP W 'SCROLLFN) THEN [PROCESS.EVAL (FIND.PROCESS 'MOUSE) (CL:IF (EQ DIRECTION 'VERTICAL) `(WHEELSCROLL.DOIT ,(KWOTE W) 0 ,DELTA) `(WHEELSCROLL.DOIT ,(KWOTE W) ,DELTA 0))] ELSEIF (EQ DIRECTION 'VERTICAL) THEN (* ;; "We are in a pop-up scrollbar. This moves the cursor there, the user has to click to scroll the main window.") (CL:WHEN (WINDOWPROP W 'VERTICALSCROLLBARFOR) (\CURSORPOSITION LASTMOUSEX (IPLUS LASTMOUSEY DELTA)) (GETMOUSESTATE)) ELSEIF (EQ DIRECTION 'HORIZONTAL) THEN (CL:WHEN (WINDOWPROP W 'HORIZONTALSCROLLBARFOR) (\CURSORPOSITION (IPLUS DELTA LASTMOUSEX) LASTMOUSEY) (GETMOUSESTATE))))])]) (WHEELSCROLL.DOIT [LAMBDA (WINDOW DX DY) (* ; "Edited 20-Feb-2021 17:34 by rmk:") (* ;; "This does the actual wheel scrolling, runing in the mouse process.") (* ;; "There have been instances where the window gets garbled as the wheel moves. The hypothesis is that this is because the wheel moves so fast that another scroll starts before a previous one completes.") (* ;; "The global variable \WHEELSCROLLINPROGRESS is set to prevent that interference.") (CL:UNLESS \WHEELSCROLLINPROGRESS (RESETVAR \WHEELSCROLLINPROGRESS T (SCROLLW WINDOW DX DY)))]) (INSTALL-WHEELSCROLL [LAMBDA NIL (* ; "Edited 17-Feb-2021 11:53 by rmk:") (CL:WHEN (GETD 'LISPINTERRUPTS.WHEELSCROLL) (MOVD? 'LISPINTERRUPTS 'LISPINTERRUPTS.WSORIG) (MOVD 'LISPINTERRUPTS.WHEELSCROLL 'LISPINTERRUPTS)) (FOR I IN WHEELSCROLLINTERRUPTS DO (INTERRUPTCHAR (CAR I) (CADR I) (CADDR I)) (CL:WHEN (BOUNDP 'TEDIT.READTABLE) (* ;; "These actions are invoked when the caret is in the Tedit window, because TEDIT disables the interrupts") (TEDIT.SETFUNCTION (CAR I) `[LAMBDA NIL ,(CADR I] TEDIT.READTABLE))]) (LISPINTERRUPTS.WHEELSCROLL [LAMBDA NIL (* ; "Edited 17-Feb-2021 11:09 by rmk:") (* ;; "So wheelscroll interrupts will be installed in every process") (APPEND WHEELSCROLLINTERRUPTS (LISPINTERRUPTS.WSORIG]) ) (RPAQQ WHEELSCROLLINTERRUPTS ((520 (WHEELSCROLL 'VERTICAL WHEELSCROLLDELTA) T) (521 (WHEELSCROLL 'VERTICAL (IMINUS WHEELSCROLLDELTA)) T))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS WHEELSCROLLDELTA WHEELSCROLLSETTLETIME \WHEELSCROLLINPROGRESS) ) (RPAQ? WHEELSCROLLDELTA 20) (RPAQ? WHEELSCROLLSETTLETIME 50) (RPAQ? \WHEELSCROLLINPROGRESS NIL) (DECLARE%: DONTEVAL@LOAD DOCOPY (INSTALL-WHEELSCROLL) (ENABLEWHEELSCROLL T) ) (DECLARE%: DONTCOPY (FILEMAP (NIL (1187 6142 (ENABLEWHEELSCROLL 1197 . 1622) (WHEELSCROLL 1624 . 4160) (WHEELSCROLL.DOIT 4162 . 4798) (INSTALL-WHEELSCROLL 4800 . 5863) (LISPINTERRUPTS.WHEELSCROLL 5865 . 6140))))) STOP \ No newline at end of file diff --git a/lispusers/WHEELSCROLL.LCOM b/lispusers/WHEELSCROLL.LCOM index f3c48249f5b7fd0308ab6d52cb58f4996952a6cd..97812037d1609f8a787cad5ce2aae88c1e6bf51a 100644 GIT binary patch literal 3526 zcmb_eOK;mo5TQNyuvrOnL}OGymN4f2O0*DO3ffO%ftg79rhJh+VTu&8}wO%>nPr zU?`O>8y@fPJ%7?ag5wcdrEfb?3~9xl-7EB@jBi5VD;=;>toLS>}>UySK8lV-KVJ(>;3vl`$I_nx^?=U@SLDF z#OK9nR=ip7^hR%R@td{w`nqK7XEINn{mjcN7xeqxk z@o?S)wc`vR2bg+lEb=w1ZAe;{-bmm{t{b8=WW)qA-Y=h`ebU zd{vkEZqUV*Q5XdwU}u=yORB|%y`)@PvX}52iGl`=;{x4wJSdxhz0xg=nLI;wnICr| zDo+Ij+HJ8$s|%QVyUhobLzn}PsbyjndrmAZ+QHPTOv(FTk|MN%h&>4W#2L4{x)U{n z2(2k8BJ6m|#vLRrRSzi>*rrj!8gp7mX(|9>6=ACrpi>E{s2!u=1}p($SYvUev?wiC zCMRHT0udqHGDT7EBuU`Myqt(#1l`EZB)>Sr!RAe58Td|{Ld@K6un6vm zf)Ij+M;*Tt=FuJP_zpC&P{z)0^6I&d9249fteMZXRV^iwaUjwu+={MaHfq>1&{BDg zbUE6XBFGQ}j4*B3RXP^)5x{1I34o$SjwWMVOrVezeP5uLC=r*P(zMlw z2t@n+YXPq(iZZjG!IBmXL5qhdm-8<_Os(xBY-~RKAaRa#5N}_*?QOiF6R@m>07=(k z=flF7n26anuZ56H%*N!s!XKFXn4w-?@z~TQ3?qR}ZF*&kSt9C$Ni1T70|QG6lUV~D z^DKp3Zt8$>dlC#0z;p4b&|5ESy%g_*sn!bqR#GCqa+z@7>CKkRfPGwmT`eOs;QYqQ z>gzwbN2^tkIC$hbzPv-Q8PtQ0?}kt+!UT1rt`d z*48{9Z%#hKEDjN>iHtS0w!1^f^6O)scB-ol_KCj|vL?_(ZK81~RhiWX-VpCt<> zOHF)6(bdsJ(O2ZMljA6vu4?qO`FTL>F8UJq1;AhM2pv9XFXU?pbHa^|f{qR~14EIBGy@qpF>{ zWa+|2WFZDNW(H_rVn<@(6R@x|^doR~s;EVrPIvG9?*IPp>AtVMUwyN+ik+rEeBLC8 zU?8MpIvs?kgI&eM({KHqE02a@)FB(33^P#cSF5nuv9Z|ohN}BPNWGZ4UAhU^L<{R9 zwq|0mofd)@qru_+@EA_U>mAVjC;>J9CD;BPNtBZI^oS{BW45axSw{Km8xJN^S(20` zNvylF#Ig^crL#Ll_M`UYls(=r!i%@%byl9s1(`i7<5GC3Ij@(9W#{*@mlq$+>erPy z7-`xoccgv#|NBH@Lg0=IS54DO_v)xB>DWTB9dnN+i9!2r2zDF%Alfu8Ay^KiBIl_9 z+kiLVX%Hp7n9dtMeHwQIuV`q& z7Vjk#ECP(j!5)vgZa6Q0;>JFY!E7z$*Ene}xabeqB%q^4LlqMWi?Eq8O6N|qXlbm> nelFjZ^FJ%KTNpJ!&#RUDH^r^yLFHk7Q28z6oU7~kJN40Dy%Uxf diff --git a/lispusers/WHEELSCROLL.TXT b/lispusers/WHEELSCROLL.TXT new file mode 100644 index 0000000000000000000000000000000000000000..8cab8ba864d0260197d41a26ba0c4cd0083c3fcb GIT binary patch literal 1415 zcmZ`(T~FIE6b)<>+N3=0{XVu*`KrVVZ(ZpIT7U_Vx>q;3X{;u8WIILOPusuRFJR|7 z1v-gUZR6PYh+2Bz& zy}c#`)K(QNxmQ76gIz8qUH}+8$`XCkbTGS_e92}z1?cu>NHow!2aU~d=#7wv;ZO+T zEdc`Ew~Xp&lv@*o6}(|%LfBe4Enva@s}L8n>|wIoW_&VCKT1v0H4An?NUhZ-2=r&7 zOR&W%uPCoIxIu{2k8~apUFv0p#I>qB_O#S%rc(KUsa_wz6grx==7x<(W6gP*X7C9) z&KU_F>Z};BoiZK-fGvD~OfF98=_yHU;+_(D9g{#=vkN*`^=tiJju%k91EeY_H+MdcAr5GJWnZCrqXz)oH%cm*5vbT&ST&CbTBqc{ka zMbJ(}Y|L;P1X7;BFgw?^!gHly6|=T0R7KMl)~N6OHq@J|YzS|{%f2T{_8KVyvIUb~ z8tbAFr=4@)oeVF*y{N+~bdJx7=Hg=M+32Fc{uW&bAYObcN;Gn0BV38;j}O)gZXJ7% z6;Y#4J=~^pS#lm|@PFoqLJ+o=>q6X6Z;z`;zT+z@Iw$^?#@o_6<`{IXuzZa6BIXdn zY Date: Sun, 21 Feb 2021 17:47:34 -0800 Subject: [PATCH 34/37] TABLEBROWSER uses newer TABLEBROWSERDECLS, older TBDECLS is deprecated TABLEBROWSER uses newer TABLEBROWSERDECLS, older TBDECLS is deprecated --- library/TABLEBROWSER | 2 +- library/TABLEBROWSER.LCOM | Bin 27980 -> 28318 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/library/TABLEBROWSER b/library/TABLEBROWSER index 090b2b1b..f9abe13e 100644 --- a/library/TABLEBROWSER +++ b/library/TABLEBROWSER @@ -1 +1 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED " 1-Dec-2018 17:25:13"  {DSK}kaplan>Local>medley3.5>lispcore>library>TABLEBROWSER.;3 57302 changes to%: (FNS TB.REDISPLAY.ITEMS) previous date%: "26-Jun-99 00:30:27" {DSK}kaplan>Local>medley3.5>lispcore>library>TABLEBROWSER.;2) (* ; " Copyright (c) 1985, 1986, 1987, 1988, 1990, 1993, 1994, 1995, 1999, 2018 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT TABLEBROWSERCOMS) (RPAQQ TABLEBROWSERCOMS ((COMS (* ; "Entries") (FNS TB.MAKE.BROWSER TB.REPLACE.ITEMS) (FNS TB.DELETE.ITEM TB.UNDELETE.ITEM TB.INSERT.ITEM TB.REMOVE.ITEM TB.NORMALIZE.ITEM TB.REDISPLAY.ITEMS TB.SELECT.ITEM TB.UNSELECT.ITEM TB.UNSELECT.ALL.ITEMS) (FNS TB.NUMBER.OF.ITEMS TB.NTH.ITEM TB.COLLECT.ITEMS TB.MAP.ITEMS TB.MAP.DELETED.ITEMS TB.MAP.SELECTED.ITEMS TB.FIND.ITEM TB.ITEM.SELECTED? TB.ITEM.DELETED?) (FNS TB.CLEAR.LINE TB.USERDATA TB.WINDOW)) (COMS (* ; "Display") (FNS TB.REPAINTFN TB.RESHAPEFN TB.SCROLLFN TB.DISPLAY.LINES TB.PRINT.LINE TB.FIRST.VISIBLE.ITEM# TB.LAST.VISIBLE.ITEM# TB.ITEM.VISIBLE? TB.ITEM.FROM.YCOORD TB.BOTTOM.OF.ITEM TB.SHOW.DELETION TB.SHOW.SELECTION TB.UPDATE.DISPLAY TB.ITEM.UPDATABLE?)) (COMS (* ; "Selection") (FNS TB.BUTTONEVENTFN TB.DO.UNLESS.BUSY TB.DO.ITEM.SELECTION TB.CONTIGUOUS.SELP TB.DECONSIDERRANGE TB.CONSIDERRANGE TB.DESELECTRANGE TB.RECONSIDERRANGE TB.SELECTRANGE TB.UNDOSELECTION TB.FIND.SELECTED.ITEM TB.REV.FIND.SELECTED.ITEM) (FNS TB.COPYBUTTONEVENTFN TB.SHOW.COPY.SELECTION)) (COMS (* ; "Misc state change") (FNS TB.BROWSER.BUSY TB.CLOSE/SHRINK TB.CLOSEFN TB.FINISH.CLOSE TB.FLUSH.WINDOW TB.SET.FONT TB.SHRINKFN TB.EXPANDFN TB.FIND.PREVIOUS.TAIL TB.RENUMBER.TAIL)) (COMS (* ; "Misc") (FNS TB.PROCESS) (INITVARS (TB.DELETEDLINEHEIGHT 1)) (VARS TB.SELECTION.BITMAP) (CURSORS TB.CROSSCURSOR) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (SOURCE) TBDECLS) (CONSTANTS * TOCSTATES) (MACROS .COPYKEYDOWNP.) (GLOBALVARS TB.CROSSCURSOR TB.SELECTION.BITMAP TB.DELETEDLINEHEIGHT) (LOCALVARS . T))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA TB.USERDATA))) (INITRECORDS TABLEBROWSER TABLEITEM) (SYSRECORDS TABLEBROWSER TABLEITEM))) (* ; "Entries") (DEFINEQ (TB.MAKE.BROWSER (LAMBDA (ITEMS WINDOWSPEC PROPS) (* ; "Edited 28-Jan-88 04:37 by bvm") (* ;;; "Build a browser window, which consists of three attached windows: the main BROWSERWINDOW, the BROWSERMENUWINDOW containing the menu, and a BROWSERPROMPTWINDOW for displaying random info") (PROG ((LINESPERITEM 1) FONT PRINTFN COPYFN CLOSEFN AFTERCLOSEFN TITLE COLUMNS USERDATA WINDOW USERPROPS BROWSER ITEMHEIGHT BASELINE HEADINGWINDOW LINETHICKNESS) (DECLARE (SPECVARS FONT PRINTFN COPYFN CLOSEFN AFTERCLOSEFN TITLE COLUMNS USERDATA LINESPERITEM ITEMHEIGHT BASELINE HEADINGWINDOW LINETHICKNESS)) (* ; "For SET below") (for TAIL on PROPS by (CDDR TAIL) do (SELECTQ (CAR TAIL) ((FONT PRINTFN COPYFN CLOSEFN AFTERCLOSEFN TITLE COLUMNS USERDATA LINESPERITEM ITEMHEIGHT BASELINE HEADINGWINDOW LINETHICKNESS) (SET (CAR TAIL) (CADR TAIL))) (push USERPROPS (LIST (CAR TAIL) (CADR TAIL))))) (SETQ WINDOW (DECODE.WINDOW.ARG WINDOWSPEC NIL NIL TITLE)) (WINDOWPROP WINDOW (QUOTE TABLEBROWSER) (SETQ BROWSER (create TABLEBROWSER TBWINDOW _ WINDOW TBFONT _ FONT TBLOCK _ (CREATE.MONITORLOCK (OR (WINDOWPROP WINDOW (QUOTE TITLE)) "Table Browser")) TB#LINESPERITEM _ (OR LINESPERITEM 1) TBBASELINE _ (OR BASELINE 0) TBCOLUMNS _ COLUMNS TBPRINTFN _ PRINTFN TBCOPYFN _ COPYFN TBCLOSEFN _ CLOSEFN TBAFTERCLOSEFN _ AFTERCLOSEFN TBUSERDATA _ USERDATA TBHEADINGWINDOW _ HEADINGWINDOW TBLINETHICKNESS _ (OR LINETHICKNESS TB.DELETEDLINEHEIGHT)))) (if ITEMHEIGHT then (* ; "User explicitly controlling height variables.") (replace (TABLEBROWSER TBITEMHEIGHT) of BROWSER with ITEMHEIGHT) (replace (TABLEBROWSER TBHEIGHTEXPLICIT) of BROWSER with T)) (DSPLEFTMARGIN TB.LEFT.MARGIN WINDOW) (TB.REPLACE.ITEMS BROWSER ITEMS) (WINDOWPROP WINDOW (QUOTE SCROLLFN) (FUNCTION TB.SCROLLFN)) (WINDOWPROP WINDOW (QUOTE REPAINTFN) (FUNCTION TB.REPAINTFN)) (WINDOWPROP WINDOW (QUOTE BUTTONEVENTFN) (FUNCTION TB.BUTTONEVENTFN)) (WINDOWPROP WINDOW (QUOTE RIGHTBUTTONFN) (FUNCTION TB.BUTTONEVENTFN)) (WINDOWPROP WINDOW (QUOTE COPYBUTTONEVENTFN) (FUNCTION TB.COPYBUTTONEVENTFN)) (for PROP in (QUOTE (CLOSEFN SHRINKFN RESHAPEFN)) do (* ;; "This used to be (progn (windowaddprop window 'closefn (function tb.closefn)) (windowaddprop window 'shrinkfn (function tb.shrinkfn)) (windowaddprop window 'reshapefn (function tb.reshapefn))). However, we want to be careful to put our stuff on before any attached window stuff, so that we can reject a CLOSE, for example, before CLOSEATTACHEDWINDOWS has already closed them. Could always put on front, but it's probably better to put our functions after any the user might have explicitly put there already.") (LET ((OLDP (WINDOWPROP WINDOW PROP)) (FN (PACK* "TB." PROP))) (if (NULL OLDP) then (SETQ OLDP (LIST FN)) else (for TAIL on (OR (LISTP OLDP) (SETQ OLDP (LIST OLDP))) do (if (EQ (CAR TAIL) FN) then (* ; "Window already has our fn!") (RETURN) elseif (STRPOS "ATTACHED" (CAR TAIL)) then (* ; "Insert before this attached window hacker") (RETURN (ATTACH FN TAIL))) finally (* ; "Put at end") (NCONC1 OLDP FN))) (WINDOWPROP WINDOW PROP OLDP))) (replace (TABLEBROWSER TBREADY) of BROWSER with T) (RETURN BROWSER))) ) (TB.REPLACE.ITEMS (LAMBDA (BROWSER NEWITEMS) (* ; "Edited 27-Jan-88 16:27 by bvm") (* ;; "Completely replace the current items with the specified items") (LET ((N 0) FIRSTSEL) (SETQ BROWSER (\DTEST BROWSER (QUOTE TABLEBROWSER))) (for ITEM in NEWITEMS do (* ; "Number the items") (freplace TI# of (\DTEST ITEM (QUOTE TABLEITEM)) with (add N 1))) (freplace (TABLEBROWSER TBTAILHINT) of BROWSER with NIL) (freplace (TABLEBROWSER TBITEMS) of BROWSER with NEWITEMS) (freplace (TABLEBROWSER TB#ITEMS) of BROWSER with N) (freplace (TABLEBROWSER TB#DELETED) of BROWSER with (for ITEM in NEWITEMS count (ffetch TIDELETED of ITEM))) (COND ((SETQ FIRSTSEL (TB.FIND.SELECTED.ITEM BROWSER 1 N)) (freplace (TABLEBROWSER TBFIRSTSELECTEDITEM) of BROWSER with FIRSTSEL) (freplace (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER with (TB.REV.FIND.SELECTED.ITEM BROWSER FIRSTSEL N))) (T (freplace (TABLEBROWSER TBFIRSTSELECTEDITEM) of BROWSER with (ADD1 N)) (freplace (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER with 0))) (TB.SET.FONT BROWSER) (LET ((REGION (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of BROWSER)))) (TB.DISPLAY.LINES BROWSER (TB.FIRST.VISIBLE.ITEM# BROWSER REGION) (TB.LAST.VISIBLE.ITEM# BROWSER REGION))))) ) ) (DEFINEQ (TB.DELETE.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 29-Jan-88 12:08 by bvm") (COND ((NOT (ffetch (TABLEITEM TIDELETED) of (\DTEST ITEM (QUOTE TABLEITEM)))) (freplace (TABLEITEM TIDELETED) of ITEM with T) (add (ffetch (TABLEBROWSER TB#DELETED) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) 1) (if (TB.ITEM.UPDATABLE? BROWSER ITEM T) then (TB.SHOW.DELETION BROWSER ITEM (ffetch (TABLEBROWSER TBWINDOW) of BROWSER) (QUOTE REPLACE)))))) ) (TB.UNDELETE.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 29-Jan-88 12:08 by bvm") (COND ((ffetch (TABLEITEM TIDELETED) of (\DTEST ITEM (QUOTE TABLEITEM))) (freplace (TABLEITEM TIDELETED) of ITEM with NIL) (add (ffetch (TABLEBROWSER TB#DELETED) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) -1) (COND ((TB.ITEM.UPDATABLE? BROWSER ITEM T) (LET ((WINDOW (ffetch (TABLEBROWSER TBWINDOW) of BROWSER))) (TB.SHOW.DELETION BROWSER ITEM WINDOW (QUOTE ERASE)) (* ; "reprint the line sans deletion mark") (TB.PRINT.LINE BROWSER ITEM WINDOW (ffetch (TABLEBROWSER TBPRINTFN) of BROWSER)))))))) ) (TB.INSERT.ITEM (LAMBDA (BROWSER NEWITEM BEFOREITEM) (* ; "Edited 27-Jan-88 16:08 by bvm") (* ;;; "Inserts NEWITEM in TABLEBROWSER before item BEFOREITEM or at the end if BEFOREITEM is NIL") (LET ((LASTITEM# (ffetch (TABLEBROWSER TB#ITEMS) of (SETQ BROWSER (\DTEST BROWSER (QUOTE TABLEBROWSER))))) BEFORE# TAIL N) (SETQ NEWITEM (\DTEST NEWITEM (QUOTE TABLEITEM))) (if BEFOREITEM then (SETQ BEFORE# (OR (FIXP BEFOREITEM) (ffetch TI# of (\DTEST BEFOREITEM (QUOTE TABLEITEM))))) (COND ((OR (> BEFORE# LASTITEM#) (< BEFORE# 1)) (* ; "Check for bad values") (\ILLEGAL.ARG BEFOREITEM))) else (SETQ BEFORE# (ADD1 LASTITEM#))) (PROGN (* ;; "Need to change the following if TBITEMS representation changes") (if (EQ BEFORE# 1) then (* ; "Goes at the beginning (or at the end of a null list)") (freplace (TABLEBROWSER TBITEMS) of BROWSER with (SETQ TAIL (CONS NEWITEM (ffetch (TABLEBROWSER TBITEMS) of BROWSER)))) else (* ; "Somewhere else--find the tail") (SETQ TAIL (if (NULL BEFOREITEM) then (* ; "Insert at end") (FLAST (OR (ffetch (TABLEBROWSER TBTAILHINT) of BROWSER) (ffetch (TABLEBROWSER TBITEMS) of BROWSER))) else (TB.FIND.PREVIOUS.TAIL BROWSER BEFORE#))) (RPLACD TAIL (SETQ TAIL (CONS NEWITEM (CDR TAIL))))) (* ;; "Now (CAR TAIL) is the new item") (TB.RENUMBER.TAIL BROWSER TAIL BEFORE#)) (freplace (TABLEBROWSER TB#ITEMS) of BROWSER with (ADD1 LASTITEM#)) (COND ((ffetch TIDELETED of NEWITEM) (add (ffetch (TABLEBROWSER TB#DELETED) of BROWSER) 1))) (* ;; "Update first & last selected item if they fall after the insertion, or if the new item is selected") (COND ((>= (SETQ N (ffetch TBFIRSTSELECTEDITEM of BROWSER)) BEFORE#) (freplace TBFIRSTSELECTEDITEM of BROWSER with (COND ((ffetch TISELECTED of NEWITEM) BEFORE#) (T (ADD1 N)))))) (COND ((>= (SETQ N (ffetch TBLASTSELECTEDITEM of BROWSER)) BEFORE#) (freplace TBLASTSELECTEDITEM of BROWSER with (ADD1 N))) ((ffetch TISELECTED of NEWITEM) (freplace TBLASTSELECTEDITEM of BROWSER with BEFORE#))) (TB.UPDATE.DISPLAY BROWSER BEFORE# (QUOTE INSERT)))) ) (TB.REMOVE.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 27-Jan-88 16:09 by bvm") (* ;;; "Removes ITEM from TABLEBROWSER") (LET ((LASTITEM# (fetch (TABLEBROWSER TB#ITEMS) of (\DTEST BROWSER (QUOTE TABLEBROWSER)))) (ITEM# (ffetch TI# of (\DTEST ITEM (QUOTE TABLEITEM)))) N TAIL) (PROGN (* ;; "Need to change the following if TBITEMS representation changes") (COND ((EQ ITEM# 1) (freplace (TABLEBROWSER TBITEMS) of BROWSER with (SETQ TAIL (CDR (ffetch (TABLEBROWSER TBITEMS) of BROWSER))))) (T (RPLACD (SETQ TAIL (TB.FIND.PREVIOUS.TAIL BROWSER ITEM#)) (SETQ TAIL (CDDR TAIL))))) (TB.RENUMBER.TAIL BROWSER TAIL ITEM#)) (freplace (TABLEBROWSER TB#ITEMS) of BROWSER with (SUB1 LASTITEM#)) (COND ((ffetch TIDELETED of ITEM) (add (ffetch (TABLEBROWSER TB#DELETED) of BROWSER) -1))) (* ;; "Update first & last selected item if they fall after the deletion or if the old item is selected") (COND ((>= (SETQ N (ffetch TBFIRSTSELECTEDITEM of BROWSER)) ITEM#) (freplace TBFIRSTSELECTEDITEM of BROWSER with (COND ((EQ N ITEM#) (* ; "removed item was the first selected, so look for next one after it") (OR (TB.FIND.SELECTED.ITEM BROWSER ITEM#) LASTITEM#)) (T (* ; "Item numbers are decremented") (SUB1 N)))))) (COND ((>= (SETQ N (ffetch TBLASTSELECTEDITEM of BROWSER)) ITEM#) (freplace TBLASTSELECTEDITEM of BROWSER with (COND ((EQ N ITEM#) (* ; "removed item was the last selected, so look for next one before it") (OR (TB.REV.FIND.SELECTED.ITEM BROWSER NIL (SUB1 ITEM#)) 0)) (T (SUB1 N)))))) (TB.UPDATE.DISPLAY BROWSER ITEM# (QUOTE REMOVE)))) ) (TB.NORMALIZE.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 22-Jan-88 16:22 by bvm") (* ;; "Scroll, if necessary, so that ITEM is visible in browser.") (LET* ((WINDOW (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER (QUOTE TABLEBROWSER)))) (BOT (TB.BOTTOM.OF.ITEM BROWSER ITEM)) (CLIP (DSPCLIPPINGREGION NIL WINDOW))) (COND ((OR (> (fetch (REGION BOTTOM) of CLIP) BOT) (< (fetch (REGION PTOP) of CLIP) (+ BOT (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)))) (* ; "Scroll so that item's midline is at midline of window") (SCROLLBYREPAINTFN WINDOW 0 (- (+ (fetch (REGION BOTTOM) of CLIP) (IQUOTIENT (fetch (REGION HEIGHT) of CLIP) 2)) (+ BOT (IQUOTIENT (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) 2)))))))) ) (TB.REDISPLAY.ITEMS [LAMBDA (BROWSER FIRSTITEM LASTITEM) (* ; "Edited 1-Dec-2018 17:25 by rmk:") (* ; "Edited 2-Feb-88 11:53 by bvm:") (* ;; "Force redisplay of all items from FIRSTITEM to LASTITEM, e.g., because their content or format changed. We'll only redisplay the visible ones, of course. Also, if browser isn't open, we'll save the change until browser is expanded") (LET [(REGION (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER 'TABLEBROWSER] (if (AND (NULL FIRSTITEM) (NULL LASTITEM)) then (* ; "We're being told to redisplay the whole browser, so recompute the extent while we're at it (it might have gotten smaller).") (replace (TABLEBROWSER TBMAXXPOS) of BROWSER with 0)) (SETQ FIRSTITEM (IMAX [COND ((NULL FIRSTITEM) 1) ((FIXP FIRSTITEM)) (T (ffetch TI# of (\DTEST FIRSTITEM 'TABLEITEM] (TB.FIRST.VISIBLE.ITEM# BROWSER REGION))) (SETQ LASTITEM (IMIN [COND ((NULL LASTITEM) (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER)) ((FIXP LASTITEM)) (T (ffetch TI# of (\DTEST LASTITEM 'TABLEITEM] (TB.LAST.VISIBLE.ITEM# BROWSER REGION))) (if (AND (>= LASTITEM FIRSTITEM) (TB.ITEM.UPDATABLE? BROWSER FIRSTITEM)) then (* ;; "RMK: For whatever reason, on an FB recompute, this gets called after the items have first been displayed but not in proper alignment. This redisplays them to get the alignment, but the window is garbled if the old stuff isn't cleared first. So, added the CLEARW") (CLEARW (ffetch (TABLEBROWSER TBWINDOW) of BROWSER)) (TB.DISPLAY.LINES BROWSER FIRSTITEM LASTITEM]) (TB.SELECT.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 29-Jan-88 12:08 by bvm") (LET ((N (ffetch (TABLEITEM TI#) of (\DTEST ITEM (QUOTE TABLEITEM))))) (TB.SELECTRANGE (\DTEST BROWSER (QUOTE TABLEBROWSER)) N N T) (if (TB.ITEM.UPDATABLE? BROWSER N T) then (TB.SHOW.SELECTION BROWSER N (QUOTE REPLACE))))) ) (TB.UNSELECT.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 29-Jan-88 12:09 by bvm") (if (ffetch (TABLEITEM TISELECTED) of (\DTEST ITEM (QUOTE TABLEITEM))) then (LET ((N (ffetch (TABLEITEM TI#) of ITEM))) (TB.DESELECTRANGE (\DTEST BROWSER (QUOTE TABLEBROWSER)) N N) (if (TB.ITEM.UPDATABLE? BROWSER N T) then (TB.SHOW.SELECTION BROWSER N (QUOTE ERASE)))))) ) (TB.UNSELECT.ALL.ITEMS (LAMBDA (BROWSER) (* ; "Edited 29-Jan-88 12:14 by bvm") (* ;; "User entry for unselecting all items in the browser. ") (LET ((START (ffetch (TABLEBROWSER TBFIRSTSELECTEDITEM) of (\DTEST BROWSER (QUOTE TABLEBROWSER)))) (END (ffetch (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER))) (if (<= START END) then (for I from START to END bind (UPDATABLE _ (TB.ITEM.UPDATABLE? BROWSER START)) ITEM when (ffetch (TABLEITEM TISELECTED) of (SETQ ITEM (TB.NTH.ITEM BROWSER I))) do (freplace TISELECTED of ITEM with NIL) (if UPDATABLE then (TB.SHOW.SELECTION BROWSER I (QUOTE ERASE)))) (freplace TBFIRSTSELECTEDITEM of BROWSER with (ADD1 (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER))) (freplace TBLASTSELECTEDITEM of BROWSER with 0)))) ) ) (DEFINEQ (TB.NUMBER.OF.ITEMS (LAMBDA (BROWSER TYPE) (* ; "Edited 27-Jan-88 16:16 by bvm") (SETQ BROWSER (\DTEST BROWSER (QUOTE TABLEBROWSER))) (SELECTQ TYPE (NIL (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER)) (DELETED (ffetch (TABLEBROWSER TB#DELETED) of BROWSER)) (SELECTED (for I from (ffetch (TABLEBROWSER TBFIRSTSELECTEDITEM) of BROWSER) to (ffetch (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER) count (ffetch (TABLEITEM TISELECTED) of (TB.NTH.ITEM BROWSER I)))) (\ILLEGAL.ARG TYPE))) ) (TB.NTH.ITEM (LAMBDA (BROWSER N) (* ; "Edited 27-Jan-88 16:18 by bvm") (* ;; "Return the Nth item of BROWSER, or NIL if N is out of range.") (* ;; "Browser items are currently stored as a simple list. To make most accesses reasonable, we save a hint to a recent tail of the list to speed up the search.") (\DTEST BROWSER (QUOTE TABLEBROWSER)) (LET (TAIL TAILN) (if (AND (> N 0) (OR (AND (SETQ TAIL (ffetch (TABLEBROWSER TBTAILHINT) of BROWSER)) (>= N (SETQ TAILN (ffetch (TABLEITEM TI#) of (CAR TAIL))))) (PROG1 (SETQ TAIL (ffetch (TABLEBROWSER TBITEMS) of BROWSER)) (* ; "Item is not in hint tail, have to search whole list") (SETQ TAILN 1)))) then (while (< TAILN N) do (if (NULL (SETQ TAIL (CDR TAIL))) then (* ; "Greater than last item. I could have done a comparison against #items, but it is rare to ask for this (and we never do internally).") (RETURN NIL)) (add TAILN 1) finally (freplace (TABLEBROWSER TBTAILHINT) of BROWSER with TAIL) (* ; "Store away the new hint. This makes ascending iterations constant time, rather than n^2.") (RETURN (CAR TAIL)))))) ) (TB.COLLECT.ITEMS (LAMBDA (BROWSER PREDFN) (* ; "Edited 27-Jan-88 16:18 by bvm") (SELECTQ PREDFN (DELETED (SETQ PREDFN (FUNCTION TB.ITEM.DELETED?))) (SELECTED (SETQ PREDFN (FUNCTION TB.ITEM.SELECTED?))) NIL) (for ITEM in (ffetch (TABLEBROWSER TBITEMS) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) collect ITEM when (OR (NULL PREDFN) (CL:FUNCALL PREDFN BROWSER ITEM)))) ) (TB.MAP.ITEMS (LAMBDA (BROWSER MAPFN NULLFN) (* ; "Edited 27-Jan-88 16:18 by bvm") (* ;;; "Apply MAPFN to each item in TABLEBROWSER -- args (TABLEBROWSER ITEM)") (LET ((ITEMS (ffetch (TABLEBROWSER TBITEMS) of (\DTEST BROWSER (QUOTE TABLEBROWSER))))) (COND (ITEMS (for ITEM in ITEMS do (CL:FUNCALL MAPFN BROWSER ITEM))) (NULLFN (CL:FUNCALL NULLFN BROWSER))))) ) (TB.MAP.DELETED.ITEMS (LAMBDA (BROWSER MAPFN NULLFN) (* ; "Edited 27-Jan-88 16:18 by bvm") (* ;;; "Apply MAPFN to each deleted item in TABLEBROWSER -- args (TABLEBROWSER ITEM)") (COND ((NEQ (ffetch TB#DELETED of (\DTEST BROWSER (QUOTE TABLEBROWSER))) 0) (for ITEM in (ffetch (TABLEBROWSER TBITEMS) of BROWSER) when (ffetch TIDELETED of ITEM) do (CL:FUNCALL MAPFN BROWSER ITEM))) (NULLFN (* ; "Nothing deleted") (CL:FUNCALL NULLFN BROWSER)))) ) (TB.MAP.SELECTED.ITEMS (LAMBDA (BROWSER MAPFN NULLFN) (* ; "Edited 27-Jan-88 16:19 by bvm") (* ;;; "Apply MAPFN to each selected item in TABLEBROWSER -- args (TABLEBROWSER ITEM)") (LET ((ITEM# (SUB1 (ffetch (TABLEBROWSER TBFIRSTSELECTEDITEM) of (\DTEST BROWSER (QUOTE TABLEBROWSER))))) (LASTITEM# (ffetch (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER)) ITEM) (COND ((< ITEM# LASTITEM#) (until (> (add ITEM# 1) LASTITEM#) when (ffetch (TABLEITEM TISELECTED) of (SETQ ITEM (TB.NTH.ITEM BROWSER ITEM#))) do (CL:FUNCALL MAPFN BROWSER ITEM))) (NULLFN (* ; "Nothing selected") (CL:FUNCALL NULLFN BROWSER))))) ) (TB.FIND.ITEM (LAMBDA (BROWSER PREDFN FIRST# LAST# BACKWARDSFLG) (* ; "Edited 27-Jan-88 16:20 by bvm") (* ;;; "Returns the first item in the designated range satisfying (PREDFN browser item); range defaults to whole browser") (\DTEST BROWSER (QUOTE TABLEBROWSER)) (LET ((LO (COND (FIRST# (IMAX FIRST# 1)) (T 1))) (HI (COND (LAST# (IMIN LAST# (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER))) (T (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER)))) I END INCREMENT ITEM) (COND ((<= LO HI) (COND (BACKWARDSFLG (SETQ I (ADD1 HI)) (SETQ END LO) (SETQ INCREMENT -1)) (T (SETQ I (SUB1 LO)) (SETQ END HI) (SETQ INCREMENT 1))) (SELECTQ PREDFN (DELETED (SETQ PREDFN (FUNCTION TB.ITEM.DELETED?))) (SELECTED (SETQ PREDFN (FUNCTION TB.ITEM.SELECTED?))) NIL) (when (CL:FUNCALL PREDFN BROWSER (SETQ ITEM (TB.NTH.ITEM BROWSER (add I INCREMENT)))) do (RETURN ITEM) repeatuntil (EQ I END)))))) ) (TB.ITEM.SELECTED? (LAMBDA (BROWSER ITEM) (* ; "Edited 27-Jan-88 16:20 by bvm") (ffetch TISELECTED of (\DTEST ITEM (QUOTE TABLEITEM)))) ) (TB.ITEM.DELETED? (LAMBDA (BROWSER ITEM) (* ; "Edited 27-Jan-88 16:20 by bvm") (ffetch TIDELETED of (\DTEST ITEM (QUOTE TABLEITEM)))) ) ) (DEFINEQ (TB.CLEAR.LINE (LAMBDA (BROWSER ITEM LEFT WIDTH) (* ; "Edited 22-Jan-88 16:06 by bvm") (* ;;; "Clears the contents of ITEM's line starting at xpos LEFT for width WIDTH. Defaults to whole line") (BLTSHADE WHITESHADE (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) (OR LEFT 0) (TB.BOTTOM.OF.ITEM BROWSER ITEM) WIDTH (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) (QUOTE REPLACE))) ) (TB.USERDATA (CL:LAMBDA (BROWSER &OPTIONAL (NEWDATA NIL NEWP)) (* ; "Edited 27-Jan-88 16:25 by bvm") (PROG1 (ffetch (TABLEBROWSER TBUSERDATA) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) (COND (NEWP (freplace (TABLEBROWSER TBUSERDATA) of BROWSER with NEWDATA))))) ) (TB.WINDOW (LAMBDA (BROWSER) (* ; "Edited 27-Jan-88 16:25 by bvm") (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER (QUOTE TABLEBROWSER)))) ) ) (* ; "Display") (DEFINEQ (TB.REPAINTFN (LAMBDA (WINDOW REGION) (* bvm%: "10-Sep-85 13:00") (PROG ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER)))) (AND (NEQ (fetch (TABLEBROWSER TB#ITEMS) of BROWSER) 0) (RESETLST (COND ((OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T) (TB.DISPLAY.LINES BROWSER (TB.FIRST.VISIBLE.ITEM# BROWSER REGION) (TB.LAST.VISIBLE.ITEM# BROWSER REGION))) (T (TB.BROWSER.BUSY BROWSER))))))) ) (TB.RESHAPEFN (LAMBDA (WINDOW OLDIMAGEBM OLDREGION) (* ; "Edited 22-Jan-88 10:21 by bvm") (RESETLST (PROG ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) (REGION (DSPCLIPPINGREGION NIL WINDOW)) ITEM#) (COND ((NOT (OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T)) (* ; "Browser is busy, have to wait until it is ready. But don't tie up mouse!") (ALLOW.BUTTON.EVENTS) (OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) NIL T)) ((NOT (fetch (TABLEBROWSER TBREADY) of BROWSER)) (* ; "Browser not functional") (RETURN (RESHAPEBYREPAINTFN WINDOW OLDIMAGEBM OLDREGION)))) (SETQ ITEM# (TB.FIRST.VISIBLE.ITEM# BROWSER REGION)) (TB.SET.FONT BROWSER) (WYOFFSET (TIMES (SUB1 ITEM#) (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)) WINDOW) (TB.DISPLAY.LINES BROWSER ITEM# (TB.LAST.VISIBLE.ITEM# BROWSER REGION))))) ) (TB.SCROLLFN (LAMBDA (WINDOW DX DY CONTINUOUSFLG) (* ; "Edited 22-Jan-88 17:32 by bvm") (* ;; "only scroll if can get the monitor lock") (RESETLST (LET ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) HW) (COND ((OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T) (SCROLLBYREPAINTFN WINDOW DX DY CONTINUOUSFLG) (if (AND (EQ DY 0) (SETQ HW (fetch (TABLEBROWSER TBHEADINGWINDOW) of BROWSER))) then (* ; "Horizontally scroll the header window together with it.") (SCROLLW HW DX DY CONTINUOUSFLG))) (T (TB.BROWSER.BUSY BROWSER)))))) ) (TB.DISPLAY.LINES (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 25-Jan-88 18:34 by bvm") (for ITEM# from (IMAX FIRST# 1) to (IMIN LAST# (fetch (TABLEBROWSER TB#ITEMS) of BROWSER)) bind (WINDOW _ (fetch (TABLEBROWSER TBWINDOW) of BROWSER)) (MAXXPOS _ (fetch (TABLEBROWSER TBMAXXPOS) of BROWSER)) (PRINTFN _ (fetch (TABLEBROWSER TBPRINTFN) of BROWSER)) EXTENTCHANGED ITEM HERE EXTENT HWINDOW do (SETQ ITEM (TB.NTH.ITEM BROWSER ITEM#)) (TB.PRINT.LINE BROWSER ITEM WINDOW PRINTFN) (* ; "keep track of maximum width printed to, so window's EXTENT is always right") (COND ((< MAXXPOS (SETQ HERE (DSPXPOSITION NIL WINDOW))) (SETQ MAXXPOS HERE) (SETQ EXTENTCHANGED T))) finally (COND (EXTENTCHANGED (replace (TABLEBROWSER TBMAXXPOS) of BROWSER with MAXXPOS) (replace (REGION WIDTH) of (SETQ EXTENT (fetch (TABLEBROWSER TBEXTENT) of BROWSER)) with MAXXPOS) (WINDOWPROP WINDOW (QUOTE EXTENT) EXTENT) (if (SETQ HWINDOW (fetch (TABLEBROWSER TBHEADINGWINDOW) of BROWSER)) then (* ; "Update heading window extent, too. Width has to account for the difference, if any, in borders.") (replace (REGION WIDTH) of (SETQ EXTENT (WINDOWPROP HWINDOW (QUOTE EXTENT))) with (+ MAXXPOS (TIMES 2 (- (WINDOWPROP WINDOW (QUOTE BORDER)) (WINDOWPROP HWINDOW (QUOTE BORDER))))))))))) ) (TB.PRINT.LINE (LAMBDA (BROWSER ITEM WINDOW PRINTFN) (* ; "Edited 22-Jan-88 17:16 by bvm") (MOVETO TB.LEFT.MARGIN (+ (TB.BOTTOM.OF.ITEM BROWSER ITEM) (fetch (TABLEBROWSER TBBASELINE) of BROWSER)) WINDOW) (* ; "Move to item's baseline") (POSITION WINDOW 0) (CL:FUNCALL PRINTFN BROWSER ITEM WINDOW) (TB.SHOW.SELECTION BROWSER ITEM (COND ((fetch (TABLEITEM TISELECTED) of ITEM) (QUOTE REPLACE)) (T (QUOTE ERASE)))) (COND ((fetch (TABLEITEM TIDELETED) of ITEM) (TB.SHOW.DELETION BROWSER ITEM WINDOW (QUOTE REPLACE))))) ) (TB.FIRST.VISIBLE.ITEM# (LAMBDA (BROWSER REGION) (* ; "Edited 22-Jan-88 16:59 by bvm") (* ;; "Computes number of the first item in TABLEBROWSER that is visible in REGION") (IMAX 1 (ADD1 (IQUOTIENT (- (ffetch (TABLEBROWSER TBORIGIN) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) (fetch (REGION PTOP) of (OR REGION (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of BROWSER))))) (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER))))) ) (TB.LAST.VISIBLE.ITEM# (LAMBDA (BROWSER REGION) (* ; "Edited 22-Jan-88 17:00 by bvm") (* ;; "Computes number of the last item in TABLEBROWSER that is visible in REGION") (IMIN (ffetch (TABLEBROWSER TB#ITEMS) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) (CL:CEILING (- (ffetch (TABLEBROWSER TBORIGIN) of BROWSER) (fetch (REGION BOTTOM) of (OR REGION (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of BROWSER))))) (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)))) ) (TB.ITEM.VISIBLE? (LAMBDA (BROWSER ITEM) (* ; "Edited 22-Jan-88 16:12 by bvm") (* ;;; "True if any part of ITEM is visible in window of BROWSER") (LET ((CLIP (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER (QUOTE TABLEBROWSER))))) (BOT (TB.BOTTOM.OF.ITEM BROWSER ITEM))) (* ;; "Check bottom of line is below top, and top of line is above the bottom") (AND (< BOT (fetch (REGION PTOP) of CLIP)) (< (fetch (REGION BOTTOM) of CLIP) (+ BOT (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)))))) ) (TB.ITEM.FROM.YCOORD (LAMBDA (BROWSER YPOS) (* ; "Edited 22-Jan-88 16:41 by bvm") (LET ((N (CL:CEILING (- (fetch (TABLEBROWSER TBORIGIN) of BROWSER) YPOS) (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)))) (TB.NTH.ITEM BROWSER (COND ((<= N 0) 1) (T (IMIN N (fetch (TABLEBROWSER TB#ITEMS) of BROWSER))))))) ) (TB.BOTTOM.OF.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 27-Jan-88 16:11 by bvm") (* ;; "Returns the y position of the bottom of specified item (number or tableitem). Add the font descent to get the baseline of the first line.") (- (fetch (TABLEBROWSER TBORIGIN) of BROWSER) (TIMES (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) (OR (FIXP ITEM) (ffetch (TABLEITEM TI#) of (\DTEST ITEM (QUOTE TABLEITEM))))))) ) (TB.SHOW.DELETION (LAMBDA (BROWSER ITEM WINDOW OPERATION) (* ; "Edited 27-Jan-88 17:00 by bvm") (* ;;; "Draws or erases, for OPERATION = REPLACE or ERASE, the line indicating that ITEM is deleted") (LET ((THICKNESS (fetch (TABLEBROWSER TBLINETHICKNESS) of BROWSER)) (BASELINE (fetch (TABLEBROWSER TBBASELINE) of BROWSER))) (BLTSHADE BLACKSHADE WINDOW TB.LEFT.MARGIN (PROGN (* ;; "Center the deletion line between the baseline and the top of the item") (+ (SUB1 BASELINE) (IQUOTIENT (- (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) BASELINE THICKNESS) 2) (TB.BOTTOM.OF.ITEM BROWSER ITEM))) NIL THICKNESS OPERATION))) ) (TB.SHOW.SELECTION (LAMBDA (BROWSER ITEM OPERATION) (* ; "Edited 27-Jan-88 15:42 by bvm") (* ;;; "Displays or erases, per OPERATION = REPLACE or ERASE, the mark indicating that ITEM is selected") (LET ((BASELINE (fetch (TABLEBROWSER TBBASELINE) of BROWSER)) (BM TB.SELECTION.BITMAP)) (BITBLT BM 0 0 (fetch (TABLEBROWSER TBWINDOW) of BROWSER) 0 (PROGN (* ;; "Center the selection bitmap between the baseline and the top of the item, rounding down slightly on the grounds that the top pixel of the line tends to be blank, so the center of gravity is lower than it might be.") (+ (SUB1 BASELINE) (IQUOTIENT (- (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) BASELINE (fetch BITMAPHEIGHT of BM)) 2) (TB.BOTTOM.OF.ITEM BROWSER ITEM))) NIL NIL (QUOTE INPUT) OPERATION))) ) (TB.UPDATE.DISPLAY (LAMBDA (BROWSER FROMITEM# TYPE) (* ; "Edited 11-Feb-88 11:34 by bvm") (* ;;; "Updates the display window appropriately after a TYPE operation (REMOVE or INSERT) on TABLEBROWSER that affects items starting at FROMITEM#") (PROG ((WINDOW (fetch (TABLEBROWSER TBWINDOW) of BROWSER)) (EXTENT (fetch (TABLEBROWSER TBEXTENT) of BROWSER)) (LASTITEM# (fetch (TABLEBROWSER TB#ITEMS) of BROWSER)) (ITEMHEIGHT (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)) (ITEMBOTTOM (TB.BOTTOM.OF.ITEM BROWSER FROMITEM#)) DELTA HEIGHT LAST# CLIP WBOTTOM EXTENTBOTTOM) (* ; "YPOS is the bottom of the line corresponding to FROMITEM#") (add (fetch (REGION HEIGHT) of EXTENT) (SETQ DELTA (SELECTQ TYPE (REMOVE (- ITEMHEIGHT)) (INSERT ITEMHEIGHT) (SHOULDNT)))) (SETQ CLIP (DSPCLIPPINGREGION NIL WINDOW)) (COND ((>= ITEMBOTTOM (fetch (REGION PTOP) of CLIP)) (* ; "Changed item above top of window, so no visible change -- just cheat the origin appropriately") (add (fetch (TABLEBROWSER TBORIGIN) of BROWSER) DELTA)) (T (* ; "Changed item visible or below bottom of window, so bottom of extent changes") (replace (REGION BOTTOM) of EXTENT with (SETQ EXTENTBOTTOM (- (fetch (REGION BOTTOM) of EXTENT) DELTA))) (COND ((<= (+ ITEMBOTTOM ITEMHEIGHT) (SETQ WBOTTOM (fetch (REGION BOTTOM) of CLIP))) (* ; "Below bottom of window, so we're done")) ((TB.ITEM.UPDATABLE? BROWSER FROMITEM#) (* ; "If window is visible, update it now") (SELECTQ TYPE (INSERT (* ; "Push everything from line FROMITEM# down one line, then redisplay item FROMITEM#") (BITBLT WINDOW 0 (+ WBOTTOM ITEMHEIGHT) WINDOW 0 WBOTTOM NIL (- ITEMBOTTOM WBOTTOM) (QUOTE INPUT) (QUOTE REPLACE)) (TB.DISPLAY.LINES BROWSER FROMITEM# FROMITEM#)) (REMOVE (* ; "Pull everything below line FROMITEM# up one line, then redisplay last visible item(s)") (BITBLT WINDOW 0 WBOTTOM WINDOW 0 (+ WBOTTOM ITEMHEIGHT) NIL (- ITEMBOTTOM WBOTTOM) (QUOTE INPUT) (QUOTE REPLACE)) (TB.DISPLAY.LINES BROWSER (SETQ LAST# (+ FROMITEM# (IQUOTIENT (- ITEMBOTTOM WBOTTOM) ITEMHEIGHT))) (ADD1 LAST#)) (* ; "May have to display two lines if the bottom line of window was a half line") (COND ((> EXTENTBOTTOM WBOTTOM) (* ; "Clear everything below the extent") (BLTSHADE WHITESHADE WINDOW 0 WBOTTOM NIL (- EXTENTBOTTOM WBOTTOM) (QUOTE REPLACE))))) (SHOULDNT)))))))) ) (TB.ITEM.UPDATABLE? (LAMBDA (BROWSER ITEM ONLYIFVISIBLE) (* ; "Edited 29-Jan-88 12:08 by bvm") (* ;;; "True if window of BROWSER is open. If false, we update the TBUPDATEFROMHERE field, denoting that we should repaint window when it is opened. If ONLYIFVISIBLE is true, we do nothing and return NIL if the item is not currently visible.") (OR (FIXP ITEM) (SETQ ITEM (fetch TI# of ITEM))) (COND ((AND ONLYIFVISIBLE (NOT (TB.ITEM.VISIBLE? BROWSER ITEM))) (* ; "Item not visible, so no need to change display") NIL) ((OPENWP (fetch (TABLEBROWSER TBWINDOW) of BROWSER))) (T (LET ((OLDN (fetch (TABLEBROWSER TBUPDATEFROMHERE) of BROWSER))) (COND ((OR (NULL OLDN) (< ITEM OLDN)) (* ; "Mark browser for display update after being unshrunk") (replace (TABLEBROWSER TBUPDATEFROMHERE) of BROWSER with ITEM)))) NIL))) ) ) (* ; "Selection") (DEFINEQ (TB.BUTTONEVENTFN (LAMBDA (WINDOW) (* bvm%: " 6-Sep-85 15:23") (TOTOPW WINDOW) (LET (FN) (COND ((INSIDEP (DSPCLIPPINGREGION NIL WINDOW) (LASTMOUSEX WINDOW) (LASTMOUSEY WINDOW)) (TB.DO.UNLESS.BUSY WINDOW (FUNCTION TB.DO.ITEM.SELECTION))) ((LASTMOUSESTATE (ONLY RIGHT)) (DOWINDOWCOM WINDOW)) ((AND (LASTMOUSESTATE (ONLY MIDDLE)) (SETQ FN (fetch (TABLEBROWSER TBTITLEEVENTFN) of (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))))) (TB.DO.UNLESS.BUSY WINDOW FN))))) ) (TB.DO.UNLESS.BUSY (LAMBDA (WINDOW FN) (* ; "Edited 20-Jan-88 23:30 by bvm") (RESETLST (LET ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER)))) (COND ((AND (fetch (TABLEBROWSER TBREADY) of BROWSER) (OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T)) (CL:FUNCALL FN WINDOW BROWSER)))))) ) (TB.DO.ITEM.SELECTION (LAMBDA (WINDOW) (* ; "Edited 20-Jan-88 22:17 by bvm") (DECLARE (GLOBALVARS LASTMOUSEBUTTONS) (SPECVARS SELECTIONSTATE BROWSER FIRSTVISIBLE# LASTVISIBLE#)) (PROG ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) SELECTIONREGION FIRST# LAST# FIRSTVISIBLE# LASTVISIBLE# SELECTIONSTATE NEWSELECTION OLDSELECTION SEL# OLDSEL# CTRLDOWN OLDLASTMOUSEBUTTONS ITEM LASTX LASTY) (COND ((EQ (fetch (TABLEBROWSER TB#ITEMS) of BROWSER) 0) (* ; "Nothing to select") (RETURN))) (SETQ SELECTIONREGION (DSPCLIPPINGREGION NIL WINDOW)) (SETQ LAST# (fetch TBLASTSELECTEDITEM of BROWSER)) (SETQ FIRST# (fetch TBFIRSTSELECTEDITEM of BROWSER)) (SETQ FIRSTVISIBLE# (TB.FIRST.VISIBLE.ITEM# BROWSER SELECTIONREGION)) (SETQ LASTVISIBLE# (TB.LAST.VISIBLE.ITEM# BROWSER SELECTIONREGION)) (* ;; "keep looping until all mouse buttons are up") (do (GETMOUSESTATE) (COND ((NOT (INSIDEP SELECTIONREGION (SETQ LASTX (LASTMOUSEX WINDOW)) (SETQ LASTY (LASTMOUSEY WINDOW)))) (* ;; "I would like to just return here and let the next window take over, but current mouse arrangement means I'll never get control back unless user lets up on mouse") (COND ((NEQ SELECTIONSTATE TS.IDLE) (TB.UNDOSELECTION) (* ; "Forget what we were doing") (SETQ OLDSELECTION))) (COND ((LASTMOUSESTATE UP) (RETURN)) (T (BLOCK)))) ((LASTMOUSESTATE UP) (* ; "Make selection permanent") (AND OLDSELECTION (SETQ OLDSEL# (fetch TI# of OLDSELECTION))) (SELECTC SELECTIONSTATE (TS.REPLACING (for I from FIRST# to LAST# do (replace TISELECTED of (TB.NTH.ITEM BROWSER I) with NIL)) (replace TISELECTED of OLDSELECTION with T) (replace TBFIRSTSELECTEDITEM of BROWSER with (replace TBLASTSELECTEDITEM of BROWSER with OLDSEL#))) (TS.ADDING (TB.SELECTRANGE BROWSER OLDSEL# OLDSEL# T)) (TS.REMOVING (TB.DESELECTRANGE BROWSER OLDSEL# OLDSEL#)) (TS.EXTENDING.HI (TB.SELECTRANGE BROWSER (ADD1 LAST#) OLDSEL# CTRLDOWN)) (TS.EXTENDING.LO (TB.SELECTRANGE BROWSER OLDSEL# (SUB1 FIRST#) CTRLDOWN)) (TS.SHRINKING.HI (TB.DESELECTRANGE BROWSER (ADD1 OLDSEL#) LAST#)) (TS.SHRINKING.LO (TB.DESELECTRANGE BROWSER FIRST# (SUB1 OLDSEL#))) NIL) (RETURN)) ((AND NIL (* ; "In a special column")) (COND ((NEQ SELECTIONSTATE TS.IDLE) (TB.UNDOSELECTION) (SETQ OLDSELECTION)))) ((OR (NEQ (SETQ NEWSELECTION (TB.ITEM.FROM.YCOORD BROWSER LASTY)) OLDSELECTION) (NEQ LASTMOUSEBUTTONS OLDLASTMOUSEBUTTONS)) (* ; "Something changed") (COND ((AND (fetch TIUNSELECTABLE of NEWSELECTION) (NOT (LASTMOUSESTATE RIGHT))) (* ; "Can't select that item, so revert to idle") (COND ((NEQ SELECTIONSTATE TS.IDLE) (TB.UNDOSELECTION)))) ((AND (LASTMOUSESTATE (OR LEFT MIDDLE)) (SHIFTDOWNP (QUOTE CTRL))) (* ; "Deselect this item") (SELECTC SELECTIONSTATE (TS.REMOVING (* ; "we were deselecting, so reselect that guy") (TB.SHOW.SELECTION BROWSER OLDSELECTION (QUOTE REPLACE))) (TS.IDLE (* ; "nothing going on")) (TB.UNDOSELECTION)) (SETQ SELECTIONSTATE (COND ((fetch TISELECTED of NEWSELECTION) (TB.SHOW.SELECTION BROWSER NEWSELECTION (QUOTE ERASE)) TS.REMOVING) (T TS.IDLE)))) ((LASTMOUSESTATE LEFT) (* ; "Set (change) the selection to this single item") (COND ((EQ SELECTIONSTATE TS.REPLACING) (TB.SHOW.SELECTION BROWSER OLDSELECTION (QUOTE ERASE))) (T (TB.DECONSIDERRANGE FIRSTVISIBLE# LASTVISIBLE#) (SETQ SELECTIONSTATE TS.REPLACING))) (TB.SHOW.SELECTION BROWSER NEWSELECTION (QUOTE REPLACE))) ((LASTMOUSESTATE MIDDLE) (* ; "Add this item to the selection") (SELECTC SELECTIONSTATE (TS.ADDING (TB.SHOW.SELECTION BROWSER OLDSELECTION (QUOTE ERASE))) (TS.IDLE) (TB.UNDOSELECTION)) (SETQ SELECTIONSTATE (COND ((NOT (fetch TISELECTED of NEWSELECTION)) (TB.SHOW.SELECTION BROWSER NEWSELECTION (QUOTE REPLACE)) TS.ADDING) (T TS.IDLE)))) ((LASTMOUSESTATE RIGHT) (* ; "Extend: either up or down, or shrink a selection. This is messy") (SETQ SEL# (fetch TI# of NEWSELECTION)) (SETQ OLDSEL# (AND OLDSELECTION (fetch TI# of OLDSELECTION))) (SELECTC SELECTIONSTATE (TS.EXTENDING.HI (COND ((> SEL# OLDSEL#) (* ; "Extend further") (TB.CONSIDERRANGE (ADD1 OLDSEL#) SEL# CTRLDOWN)) (T (* ; "Shrinking back") (TB.RECONSIDERRANGE (ADD1 (COND ((> SEL# LAST#) SEL#) (T (SETQ SELECTIONSTATE TS.IDLE) LAST#))) OLDSEL#)))) (TS.EXTENDING.LO (COND ((< SEL# OLDSEL#) (* ; "Extend further") (TB.CONSIDERRANGE SEL# (SUB1 OLDSEL#) CTRLDOWN)) (T (* ; "Shrinking back") (TB.RECONSIDERRANGE OLDSEL# (SUB1 (COND ((< SEL# FIRST#) SEL#) (T (SETQ SELECTIONSTATE TS.IDLE) FIRST#))))))) (TS.SHRINKING.HI (COND ((>= SEL# OLDSEL#) (* ; "Shrinking less") (TB.RECONSIDERRANGE (ADD1 OLDSEL#) (COND ((< SEL# LAST#) SEL#) (T (SETQ SELECTIONSTATE TS.IDLE) LAST#)))) ((>= SEL# FIRST#) (* ; "Shrinking further") (TB.DECONSIDERRANGE (ADD1 SEL#) OLDSEL#)) (T (* ; "Too far to shrink") (TB.RECONSIDERRANGE FIRST# LAST#) (SETQ SELECTIONSTATE TS.IDLE)))) (TS.SHRINKING.LO (COND ((<= SEL# OLDSEL#) (* ; "Shrinking less") (TB.RECONSIDERRANGE (COND ((> SEL# FIRST#) SEL#) (T (SETQ SELECTIONSTATE TS.IDLE) FIRST#)) (SUB1 OLDSEL#))) ((<= SEL# LAST#) (* ; "Shrinking further") (TB.DECONSIDERRANGE OLDSEL# (SUB1 SEL#))) (T (* ; "Too far to shrink") (TB.RECONSIDERRANGE FIRST# LAST#) (SETQ SELECTIONSTATE TS.IDLE)))) (COND ((<= FIRST# LAST#) (* ; "Something is already selected, so we can think about extending.") (COND ((NEQ SELECTIONSTATE TS.IDLE) (* ; "Cancel any selection we were thinking about") (TB.UNDOSELECTION))) (SETQ CTRLDOWN (SHIFTDOWNP (QUOTE CTRL))) (SETQ SELECTIONSTATE (COND ((> SEL# LAST#) (TB.CONSIDERRANGE (ADD1 LAST#) SEL# CTRLDOWN) TS.EXTENDING.HI) ((< SEL# FIRST#) (TB.CONSIDERRANGE SEL# (SUB1 FIRST#) CTRLDOWN) TS.EXTENDING.LO) ((> SEL# (LRSH (+ LAST# FIRST#) 1)) (* ; "we are closer to the high end, but inside. Shrink from the top, but only if we are pointing at a contigous selection") (if (TB.CONTIGUOUS.SELP BROWSER SEL# (SUB1 LAST#)) then (TB.DECONSIDERRANGE (ADD1 SEL#) LAST#) TS.SHRINKING.HI else TS.IDLE)) (T (* ; "We are closer to the low end, so shrink from bottom") (if (TB.CONTIGUOUS.SELP BROWSER (ADD1 FIRST#) SEL#) then (TB.DECONSIDERRANGE FIRST# (SUB1 SEL#)) TS.SHRINKING.LO else TS.IDLE))))))))) (SETQ OLDLASTMOUSEBUTTONS LASTMOUSEBUTTONS) (SETQ OLDSELECTION NEWSELECTION)))))) ) (TB.CONTIGUOUS.SELP (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 20-Jan-88 22:16 by bvm") (* ;; "true if all the elements of ITEMS from FIRST# to LAST# are selected (or deleted or unselectable)") (for I from FIRST# to LAST# bind ITEM always (OR (fetch TISELECTED of (SETQ ITEM (TB.NTH.ITEM BROWSER I))) (fetch TIDELETED of ITEM) (fetch TIUNSELECTABLE of ITEM)))) ) (TB.DECONSIDERRANGE (LAMBDA (FIRST# LAST#) (* ; "Edited 20-Jan-88 22:08 by bvm") (* ;;; "Change display so that items from FIRST# to LAST# are marked as unselected.") (DECLARE (USEDFREE BROWSER FIRSTVISIBLE# LASTVISIBLE#)) (for I from (IMAX FIRST# FIRSTVISIBLE#) to (IMIN LAST# LASTVISIBLE#) do (TB.SHOW.SELECTION BROWSER (TB.NTH.ITEM BROWSER I) (QUOTE ERASE)))) ) (TB.CONSIDERRANGE (LAMBDA (FIRST# LAST# EVENIFDELETED) (* ; "Edited 20-Jan-88 22:08 by bvm") (* ;;; "Change display so that items from FIRST# to LAST# are marked as selected. Deleted items are not selected unless EVENIFDELETED is true") (DECLARE (USEDFREE BROWSER FIRSTVISIBLE# LASTVISIBLE#)) (for I from (IMAX FIRST# FIRSTVISIBLE#) to (IMIN LAST# LASTVISIBLE#) bind ITEM do (SETQ ITEM (TB.NTH.ITEM BROWSER I)) (COND ((AND (NOT (fetch TIUNSELECTABLE of ITEM)) (OR EVENIFDELETED (NOT (fetch TIDELETED of ITEM)))) (TB.SHOW.SELECTION BROWSER ITEM (QUOTE REPLACE)))))) ) (TB.DESELECTRANGE (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 20-Jan-88 22:09 by bvm") (* ;;; "Mark internally items FIRST# thru LAST# as unselected. Keeps TBFIRSTSELECTEDITEM and TBLASTSELECTEDITEM up to date. Assumes display has already been appropriately modified--use TB.UNSELECT.ALL.ITEMS to do both") (LET ((FIRSTSEL (fetch TBFIRSTSELECTEDITEM of BROWSER)) (LASTSEL (fetch TBLASTSELECTEDITEM of BROWSER))) (if (< FIRST# FIRSTSEL) then (SETQ FIRST# FIRSTSEL)) (if (> LAST# LASTSEL) then (SETQ LAST# LASTSEL)) (if (<= FIRST# LAST#) then (for I from FIRST# to LAST# do (replace TISELECTED of (TB.NTH.ITEM BROWSER I) with NIL)) (COND ((EQ FIRST# FIRSTSEL) (replace TBFIRSTSELECTEDITEM of BROWSER with (COND ((TB.FIND.SELECTED.ITEM BROWSER (ADD1 LAST#) LASTSEL)) (T (replace TBLASTSELECTEDITEM of BROWSER with 0) (* ; "Null selection indicated by first GT last.") (ADD1 (fetch (TABLEBROWSER TB#ITEMS) of BROWSER)))))) ((EQ LAST# LASTSEL) (replace TBLASTSELECTEDITEM of BROWSER with (OR (TB.REV.FIND.SELECTED.ITEM BROWSER FIRSTSEL (SUB1 FIRST#)) 1))))))) ) (TB.RECONSIDERRANGE (LAMBDA (FIRST# LAST#) (* ; "Edited 20-Jan-88 22:09 by bvm") (* ;;; "Change display so that messages from FIRST# to LAST# are marked as selected or unselected according to the truth of the matter.") (DECLARE (USEDFREE BROWSER FIRSTVISIBLE# LASTVISIBLE#)) (for I from (IMAX FIRST# FIRSTVISIBLE#) to (IMIN LAST# LASTVISIBLE#) bind ITEM do (TB.SHOW.SELECTION BROWSER (SETQ ITEM (TB.NTH.ITEM BROWSER I)) (COND ((fetch TISELECTED of ITEM) (QUOTE REPLACE)) (T (QUOTE ERASE)))))) ) (TB.SELECTRANGE (LAMBDA (BROWSER FIRST# LAST# EVENIFDELETED) (* ; "Edited 20-Jan-88 22:10 by bvm") (* ;;; "Mark internally items FIRST# thru LAST# as selected. Do not select deleted messages unless EVENIFDELETED is true. Keeps TBFIRSTSELECTEDITEM and TBLASTSELECTEDITEM up to date. Assumes display has already been appropriately modified") (PROG ((FIRSTSEL (fetch TBFIRSTSELECTEDITEM of BROWSER)) (LASTSEL (fetch TBLASTSELECTEDITEM of BROWSER)) ITEM) (for I from FIRST# to LAST# do (SETQ ITEM (TB.NTH.ITEM BROWSER I)) (COND ((AND (NOT (fetch TIUNSELECTABLE of ITEM)) (OR EVENIFDELETED (NOT (fetch TIDELETED of ITEM)))) (replace TISELECTED of ITEM with T)))) (COND ((OR (> FIRSTSEL LASTSEL) (< FIRST# (fetch TBFIRSTSELECTEDITEM of BROWSER))) (replace TBFIRSTSELECTEDITEM of BROWSER with FIRST#))) (COND ((OR (> FIRSTSEL LASTSEL) (> LAST# (fetch TBLASTSELECTEDITEM of BROWSER))) (replace TBLASTSELECTEDITEM of BROWSER with LAST#))))) ) (TB.UNDOSELECTION (LAMBDA NIL (* bvm%: " 6-Sep-85 15:04") (* ;;; "Restore browser to state before any selections were attempted") (DECLARE (USEDFREE FIRSTVISIBLE# LASTVISIBLE# SELECTIONSTATE)) (TB.RECONSIDERRANGE FIRSTVISIBLE# LASTVISIBLE#) (SETQ SELECTIONSTATE TS.IDLE)) ) (TB.FIND.SELECTED.ITEM (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 20-Jan-88 22:11 by bvm") (find I from (OR FIRST# 1) to (OR LAST# (fetch TB#ITEMS of BROWSER)) suchthat (fetch TISELECTED of (TB.NTH.ITEM BROWSER I)))) ) (TB.REV.FIND.SELECTED.ITEM (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 20-Jan-88 22:11 by bvm") (find I from (OR LAST# (fetch TB#ITEMS of BROWSER)) to (OR FIRST# 1) by -1 suchthat (fetch TISELECTED of (TB.NTH.ITEM BROWSER I)))) ) ) (DEFINEQ (TB.COPYBUTTONEVENTFN (LAMBDA (WINDOW) (* ; "Edited 22-Jan-88 12:08 by bvm") (* ;;; "copy select an item from the window.") (PROG ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) SELECTIONREGION COPYFN CURRENTITEM NEWITEM LASTX LASTY) (COND ((OR (NULL (SETQ COPYFN (fetch (TABLEBROWSER TBCOPYFN) of BROWSER))) (NULL (fetch (TABLEBROWSER TBITEMS) of BROWSER))) (RETURN (TOTOPW WINDOW)))) (SETQ SELECTIONREGION (DSPCLIPPINGREGION NIL WINDOW)) LP (TOTOPW WINDOW) (COND ((AND (SETQ NEWITEM (AND (INSIDEP SELECTIONREGION (SETQ LASTX (LASTMOUSEX WINDOW)) (SETQ LASTY (LASTMOUSEY WINDOW))) (TB.ITEM.FROM.YCOORD BROWSER LASTY))) (fetch TIUNCOPYSELECTABLE of NEWITEM)) (SETQ NEWITEM NIL))) (COND ((NEQ CURRENTITEM NEWITEM) (COND (CURRENTITEM (* ; "turn off old selection.") (TB.SHOW.COPY.SELECTION BROWSER CURRENTITEM))) (COND ((SETQ CURRENTITEM NEWITEM) (TB.SHOW.COPY.SELECTION BROWSER CURRENTITEM))))) (* ; "wait for a button up or move out of region") LP2 (BLOCK) (COND ((NOT (.COPYKEYDOWNP.)) (* ; "Finished, copy selected item") (COND (CURRENTITEM (TB.SHOW.COPY.SELECTION BROWSER CURRENTITEM) (CL:FUNCALL COPYFN BROWSER CURRENTITEM))) (RETURN)) ((MOUSESTATE UP) (* ; "button up, no action") (GO LP2)) (T (GO LP))))) ) (TB.SHOW.COPY.SELECTION (LAMBDA (BROWSER ITEM) (* ; "Edited 22-Jan-88 16:38 by bvm") (* ;;; "underline this item in browser") (BLTSHADE GRAYSHADE (fetch (TABLEBROWSER TBWINDOW) of BROWSER) TB.LEFT.MARGIN (TB.BOTTOM.OF.ITEM BROWSER ITEM) NIL 2 (QUOTE INVERT))) ) ) (* ; "Misc state change") (DEFINEQ (TB.BROWSER.BUSY (LAMBDA (BROWSER) (* bvm%: " 8-Sep-85 16:42") (RESETFORM (CURSOR TB.CROSSCURSOR) (BLOCK 1000)))) (TB.CLOSE/SHRINK (LAMBDA (WINDOW FLG) (* ; "Edited 20-Jan-88 23:36 by bvm") (RESETLST (LET ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) HOW?) (COND ((OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T) (COND ((AND (SETQ HOW? (fetch (TABLEBROWSER TBCLOSEFN) of BROWSER)) (SETQ HOW? (CL:FUNCALL HOW? BROWSER WINDOW FLG))) (COND ((NEQ HOW? (QUOTE DON'T)) (TB.PROCESS (BQUOTE ((\, HOW?) (QUOTE (\, BROWSER)) (QUOTE (\, WINDOW)) (QUOTE (\, FLG)))) (QUOTE TB.UPDATE)))) (QUOTE DON'T)) (T (TB.FINISH.CLOSE BROWSER WINDOW FLG T) NIL))) (T (printout PROMPTWINDOW T "Browser is busy, can't close") (QUOTE DON'T)))))) ) (TB.CLOSEFN (LAMBDA (WINDOW) (* bvm%: " 6-Sep-85 12:25") (TB.CLOSE/SHRINK WINDOW (QUOTE CLOSE)))) (TB.FINISH.CLOSE (LAMBDA (BROWSER WINDOW CLOSEFLG DONTCLOSE) (* bvm%: " 9-Sep-85 00:42") (* ;;; "Takes care of closing/shrinking WINDOW after an update or expunge. DONTCLOSE is true if neither occurred, in which case we are being called directly from the CLOSEFN and should not close/shrink the window ourselves") (WITH.MONITOR (fetch (TABLEBROWSER TBLOCK) of BROWSER) (SELECTQ CLOSEFLG (CLOSE (SETQ WINDOW (TB.FLUSH.WINDOW BROWSER WINDOW)) (OR DONTCLOSE (CLOSEW WINDOW))) (SHRINK (WINDOWADDPROP WINDOW (QUOTE EXPANDFN) (FUNCTION TB.EXPANDFN)) (WINDOWDELPROP WINDOW (QUOTE SHRINKFN) (FUNCTION TB.SHRINKFN)) (OR DONTCLOSE (SHRINKW WINDOW))) NIL))) ) (TB.FLUSH.WINDOW (LAMBDA (BROWSER WINDOW) (* ; "Edited 20-Jan-88 22:42 by bvm") (WINDOWDELPROP WINDOW (QUOTE CLOSEFN) (FUNCTION TB.CLOSEFN)) (ERSETQ (LET ((FN (fetch (TABLEBROWSER TBAFTERCLOSEFN) of BROWSER))) (AND FN (CL:FUNCALL FN BROWSER WINDOW)))) (replace (TABLEBROWSER TBITEMS) of BROWSER with (replace (TABLEBROWSER TBWINDOW) of BROWSER with (replace (TABLEBROWSER TBTAILHINT) of BROWSER with NIL))) (WINDOWPROP WINDOW (QUOTE TABLEBROWSER) NIL) (OR (OPENWP WINDOW) (OPENWP (WINDOWPROP WINDOW (QUOTE ICONWINDOW))))) ) (TB.SET.FONT (LAMBDA (BROWSER FONT) (* ; "Edited 10-Feb-88 11:07 by bvm:") (* ;;; "Sets/changes font of TABLEBROWSER to be FONT. Clears window. Caller is responsible for repainting window") (LET ((FONTGIVEN FONT) (WINDOW (fetch (TABLEBROWSER TBWINDOW) of BROWSER)) WIDTH HEIGHT ASCENT TOTALHEIGHT ORIGIN FN EXTENT HW) (CLEARW WINDOW) (SETQ FONT (FONTCREATE (OR FONT (fetch (TABLEBROWSER TBFONT) of BROWSER) (DSPFONT NIL WINDOW)))) (DSPFONT FONT WINDOW) (DSPRIGHTMARGIN MAX.SMALLP WINDOW) (LINELENGTH T WINDOW) (replace (TABLEBROWSER TBFONT) of BROWSER with FONT) (replace (TABLEBROWSER TBFONTHEIGHT) of BROWSER with (SETQ HEIGHT (FONTPROP FONT (QUOTE HEIGHT)))) (if (NOT (fetch (TABLEBROWSER TBHEIGHTEXPLICIT) of BROWSER)) then (* ; "Compute item heights. Don't do this if user gave an explicit height.") (replace (TABLEBROWSER TBITEMHEIGHT) of BROWSER with (SETQ HEIGHT (TIMES HEIGHT (fetch (TABLEBROWSER TB#LINESPERITEM) of BROWSER)))) (replace (TABLEBROWSER TBFONTASCENT) of BROWSER with (SETQ ASCENT (FONTPROP FONT (QUOTE ASCENT)))) (replace (TABLEBROWSER TBBASELINE) of BROWSER with (- HEIGHT ASCENT)) else (SETQ HEIGHT (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER))) (replace (TABLEBROWSER TBORIGIN) of BROWSER with (SETQ ORIGIN (fetch (REGION PTOP) of (DSPCLIPPINGREGION NIL WINDOW)))) (SETQ TOTALHEIGHT (TIMES (fetch (TABLEBROWSER TB#ITEMS) of BROWSER) HEIGHT)) (WINDOWPROP WINDOW (QUOTE EXTENT) (replace (TABLEBROWSER TBEXTENT) of BROWSER with (create REGION LEFT _ 0 BOTTOM _ (- ORIGIN TOTALHEIGHT) WIDTH _ 0 HEIGHT _ TOTALHEIGHT))) (* ; "Let extent width be zero until we print something") (replace (TABLEBROWSER TBMAXXPOS) of BROWSER with 0) (if (SETQ HW (fetch (TABLEBROWSER TBHEADINGWINDOW) of BROWSER)) then (* ; "Fix extent of header window, too. Be sure to account for different size of borders, if any") (LET ((HWIDTH (TIMES 2 (- (WINDOWPROP WINDOW (QUOTE BORDER)) (WINDOWPROP HW (QUOTE BORDER)))))) (if (SETQ EXTENT (WINDOWPROP HW (QUOTE EXTENT))) then (replace (REGION WIDTH) of EXTENT with HWIDTH) else (WINDOWPROP HW (QUOTE EXTENT) (create REGION LEFT _ 0 BOTTOM _ 0 WIDTH _ HWIDTH HEIGHT _ -1))))) (COND ((AND FONTGIVEN (SETQ FN (fetch (TABLEBROWSER TBFONTCHANGEFN) of BROWSER))) (* ; "Notify application program of font change") (CL:FUNCALL FN BROWSER WINDOW))))) ) (TB.SHRINKFN (LAMBDA (WINDOW) (* bvm%: " 6-Sep-85 12:14") (TB.CLOSE/SHRINK WINDOW (QUOTE SHRINK)))) (TB.EXPANDFN (LAMBDA (WINDOW) (* ; "Edited 27-Jan-88 16:53 by bvm") (* ;;; "If browser changed while it was shrunk, update display accordingly") (LET ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER)))) (WITH.MONITOR (fetch (TABLEBROWSER TBLOCK) of BROWSER) (LET ((FIRSTCHANGEDITEM# (fetch (TABLEBROWSER TBUPDATEFROMHERE) of BROWSER)) REGION FN) (* ; "Restore SHRINKFN prop if necessary") (WINDOWADDPROP WINDOW (QUOTE SHRINKFN) (FUNCTION TB.SHRINKFN) T) (COND (FIRSTCHANGEDITEM# (* ; "Browser has changed since shrinking") (TB.DISPLAY.LINES BROWSER (IMAX FIRSTCHANGEDITEM# (TB.FIRST.VISIBLE.ITEM# BROWSER (SETQ REGION (DSPCLIPPINGREGION NIL WINDOW)))) (TB.LAST.VISIBLE.ITEM# BROWSER REGION)) (replace (TABLEBROWSER TBUPDATEFROMHERE) of BROWSER with NIL))))))) ) (TB.FIND.PREVIOUS.TAIL (LAMBDA (BROWSER ITEM#) (* ; "Edited 20-Jan-88 23:23 by bvm") (* ;; "Return the tail of BROWSER's items whose CADR is ITEM#. Assumes ITEM# at least 2 and not greater than number of items") (LET (TAIL TAILN) (if (OR (NULL (SETQ TAIL (fetch (TABLEBROWSER TBTAILHINT) of BROWSER))) (< ITEM# (SETQ TAILN (ADD1 (fetch (TABLEITEM TI#) of (CAR TAIL)))))) then (* ; "Can't use the hint") (SETQ TAIL (fetch (TABLEBROWSER TBITEMS) of BROWSER)) (SETQ TAILN 2)) (* ;; "TAILN is the number of (CADR TAIL). Want to get TAIL pointing to one before the requested number") (while (< TAILN ITEM#) do (SETQ TAIL (CDR TAIL)) (add TAILN 1)) (if (OR (NULL TAIL) (NEQ TAILN ITEM#)) then (HELP "Failed to find item tail" ITEM#)) TAIL)) ) (TB.RENUMBER.TAIL (LAMBDA (BROWSER TAIL FIRST#) (* ; "Edited 20-Jan-88 23:22 by bvm") (* ;; "Renumbers all of BROWSER's items from TAIL onward, giving (CAR TAIL) the number FIRST#. Also updates tail hint.") (for ITEM in TAIL as I from FIRST# do (replace TI# of ITEM with I)) (replace (TABLEBROWSER TBTAILHINT) of BROWSER with TAIL)) ) ) (* ; "Misc") (DEFINEQ (TB.PROCESS (LAMBDA (FORM NAME ALLOWLOGOUT RESTARTABLE) (* bvm%: "25-Mar-84 17:16") (* ;;; "Creates a process running FORM which by default is not restartable and will not permit LOGOUT while it is running") (ADD.PROCESS FORM (QUOTE NAME) NAME (QUOTE RESTARTABLE) (OR RESTARTABLE (QUOTE NO)) (QUOTE BEFOREEXIT) (COND (ALLOWLOGOUT NIL) (T (QUOTE DON'T))))) ) ) (RPAQ? TB.DELETEDLINEHEIGHT 1) (RPAQQ TB.SELECTION.BITMAP #*(8 9)L@@@N@@@O@@@OH@@OL@@OH@@O@@@N@@@L@@@) (RPAQ TB.CROSSCURSOR (CURSORCREATE (QUOTE #*(16 16)L@@CN@@GG@@NCHALALCH@NG@@GN@@CL@@CL@@GN@@NG@ALCHCHALG@@NN@@GL@@C ) (QUOTE NIL) 8 8)) (DECLARE%: EVAL@COMPILE DONTCOPY (FILESLOAD (SOURCE) TBDECLS) (RPAQQ TOCSTATES ((TS.IDLE 0) (TS.REPLACING 1) (TS.ADDING 2) (TS.REMOVING 3) (TS.EXTENDING.HI 4) (TS.EXTENDING.LO 5) (TS.SHRINKING.HI 6) (TS.SHRINKING.LO 7))) (DECLARE%: EVAL@COMPILE (RPAQQ TS.IDLE 0) (RPAQQ TS.REPLACING 1) (RPAQQ TS.ADDING 2) (RPAQQ TS.REMOVING 3) (RPAQQ TS.EXTENDING.HI 4) (RPAQQ TS.EXTENDING.LO 5) (RPAQQ TS.SHRINKING.HI 6) (RPAQQ TS.SHRINKING.LO 7) (CONSTANTS (TS.IDLE 0) (TS.REPLACING 1) (TS.ADDING 2) (TS.REMOVING 3) (TS.EXTENDING.HI 4) (TS.EXTENDING.LO 5) (TS.SHRINKING.HI 6) (TS.SHRINKING.LO 7)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS .COPYKEYDOWNP. MACRO [NIL (OR (KEYDOWNP 'LSHIFT) (KEYDOWNP 'RSHIFT) (KEYDOWNP 'COPY]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS TB.CROSSCURSOR TB.SELECTION.BITMAP TB.DELETEDLINEHEIGHT) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA TB.USERDATA) ) (/DECLAREDATATYPE 'TABLEBROWSER '(FLAG FLAG POINTER WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER) '((TABLEBROWSER 0 (FLAGBITS . 0)) (TABLEBROWSER 0 (FLAGBITS . 16)) (TABLEBROWSER 0 POINTER) (TABLEBROWSER 2 (BITS . 15)) (TABLEBROWSER 3 (BITS . 15)) (TABLEBROWSER 4 (BITS . 15)) (TABLEBROWSER 5 (BITS . 15)) (TABLEBROWSER 6 (BITS . 15)) (TABLEBROWSER 7 (BITS . 15)) (TABLEBROWSER 8 (BITS . 15)) (TABLEBROWSER 9 (BITS . 15)) (TABLEBROWSER 10 (BITS . 15)) (TABLEBROWSER 11 (BITS . 15)) (TABLEBROWSER 12 POINTER) (TABLEBROWSER 14 POINTER) (TABLEBROWSER 16 POINTER) (TABLEBROWSER 18 POINTER) (TABLEBROWSER 20 POINTER) (TABLEBROWSER 22 POINTER) (TABLEBROWSER 24 POINTER) (TABLEBROWSER 26 POINTER) (TABLEBROWSER 28 POINTER) (TABLEBROWSER 30 POINTER) (TABLEBROWSER 32 POINTER) (TABLEBROWSER 34 POINTER) (TABLEBROWSER 36 POINTER) (TABLEBROWSER 38 POINTER) (TABLEBROWSER 40 POINTER) (TABLEBROWSER 42 POINTER) (TABLEBROWSER 44 POINTER) (TABLEBROWSER 46 POINTER)) '48) (/DECLAREDATATYPE 'TABLEITEM '(FLAG FLAG FLAG FLAG FLAG POINTER WORD) '((TABLEITEM 0 (FLAGBITS . 0)) (TABLEITEM 0 (FLAGBITS . 16)) (TABLEITEM 0 (FLAGBITS . 32)) (TABLEITEM 0 (FLAGBITS . 48)) (TABLEITEM 0 (FLAGBITS . 64)) (TABLEITEM 2 POINTER) (TABLEITEM 1 (BITS . 15))) '4) (ADDTOVAR SYSTEMRECLST (DATATYPE TABLEBROWSER ((TBREADY FLAG) (TBHEIGHTEXPLICIT FLAG) (TBITEMS POINTER) (TB#ITEMS WORD) (TB#DELETED WORD) (TB#LINESPERITEM WORD) (TBFIRSTSELECTEDITEM WORD) (TBLASTSELECTEDITEM WORD) (TBITEMHEIGHT WORD) (TBMAXXPOS WORD) (TBFONTHEIGHT WORD) (TBFONTASCENT WORD) (TBBASELINE WORD) (TBWINDOW POINTER) (TBLOCK POINTER) (TBUSERDATA POINTER) (TBFONT POINTER) (TBEXTENT POINTER) (TBUPDATEFROMHERE POINTER) (TBCOLUMNS POINTER) (TBPRINTFN POINTER) (TBCOPYFN POINTER) (TBFONTCHANGEFN POINTER) (TBCLOSEFN POINTER) (TBAFTERCLOSEFN POINTER) (TBTITLEEVENTFN POINTER) (TBLINETHICKNESS POINTER) (TBORIGIN POINTER) (TBTAILHINT POINTER) (TBHEADINGWINDOW POINTER) (NIL POINTER))) (DATATYPE TABLEITEM ((TISELECTED FLAG) (TIDELETED FLAG) (TIUNDELETABLE FLAG) (TIUNSELECTABLE FLAG) (TIUNCOPYSELECTABLE FLAG) (TIDATA POINTER) (TI# WORD))) ) (PUTPROPS TABLEBROWSER COPYRIGHT ("Venue & Xerox Corporation" 1985 1986 1987 1988 1990 1993 1994 1995 1999 2018)) (DECLARE%: DONTCOPY (FILEMAP (NIL (3215 7566 (TB.MAKE.BROWSER 3225 . 6341) (TB.REPLACE.ITEMS 6343 . 7564)) (7567 16586 ( TB.DELETE.ITEM 7577 . 8011) (TB.UNDELETE.ITEM 8013 . 8592) (TB.INSERT.ITEM 8594 . 10601) ( TB.REMOVE.ITEM 10603 . 12135) (TB.NORMALIZE.ITEM 12137 . 12850) (TB.REDISPLAY.ITEMS 12852 . 15171) ( TB.SELECT.ITEM 15173 . 15478) (TB.UNSELECT.ITEM 15480 . 15835) (TB.UNSELECT.ALL.ITEMS 15837 . 16584)) (16587 21113 (TB.NUMBER.OF.ITEMS 16597 . 17079) (TB.NTH.ITEM 17081 . 18155) (TB.COLLECT.ITEMS 18157 . 18528) (TB.MAP.ITEMS 18530 . 18894) (TB.MAP.DELETED.ITEMS 18896 . 19343) (TB.MAP.SELECTED.ITEMS 19345 . 19952) (TB.FIND.ITEM 19954 . 20827) (TB.ITEM.SELECTED? 20829 . 20970) (TB.ITEM.DELETED? 20972 . 21111)) (21114 21955 (TB.CLEAR.LINE 21124 . 21536) (TB.USERDATA 21538 . 21804) (TB.WINDOW 21806 . 21953)) (21980 32238 (TB.REPAINTFN 21990 . 22401) (TB.RESHAPEFN 22403 . 23241) (TB.SCROLLFN 23243 . 23794) (TB.DISPLAY.LINES 23796 . 25053) (TB.PRINT.LINE 25055 . 25575) (TB.FIRST.VISIBLE.ITEM# 25577 . 26014) (TB.LAST.VISIBLE.ITEM# 26016 . 26489) (TB.ITEM.VISIBLE? 26491 . 27011) (TB.ITEM.FROM.YCOORD 27013 . 27323) (TB.BOTTOM.OF.ITEM 27325 . 27738) (TB.SHOW.DELETION 27740 . 28362) (TB.SHOW.SELECTION 28364 . 29133) (TB.UPDATE.DISPLAY 29135 . 31420) (TB.ITEM.UPDATABLE? 31422 . 32236)) (32265 43678 ( TB.BUTTONEVENTFN 32275 . 32734) (TB.DO.UNLESS.BUSY 32736 . 33043) (TB.DO.ITEM.SELECTION 33045 . 39119) (TB.CONTIGUOUS.SELP 39121 . 39488) (TB.DECONSIDERRANGE 39490 . 39858) (TB.CONSIDERRANGE 39860 . 40431 ) (TB.DESELECTRANGE 40433 . 41495) (TB.RECONSIDERRANGE 41497 . 41995) (TB.SELECTRANGE 41997 . 42937) ( TB.UNDOSELECTION 42939 . 43216) (TB.FIND.SELECTED.ITEM 43218 . 43441) (TB.REV.FIND.SELECTED.ITEM 43443 . 43676)) (43679 45178 (TB.COPYBUTTONEVENTFN 43689 . 44909) (TB.SHOW.COPY.SELECTION 44911 . 45176)) ( 45213 51520 (TB.BROWSER.BUSY 45223 . 45340) (TB.CLOSE/SHRINK 45342 . 45974) (TB.CLOSEFN 45976 . 46077) (TB.FINISH.CLOSE 46079 . 46732) (TB.FLUSH.WINDOW 46734 . 47261) (TB.SET.FONT 47263 . 49561) ( TB.SHRINKFN 49563 . 49666) (TB.EXPANDFN 49668 . 50433) (TB.FIND.PREVIOUS.TAIL 50435 . 51177) ( TB.RENUMBER.TAIL 51179 . 51518)) (51542 51915 (TB.PROCESS 51552 . 51913))))) STOP \ No newline at end of file +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "20-Feb-2021 23:02:39"  {DSK}kaplan>Local>medley3.5>git-medley>library>TABLEBROWSER.;4 57889 changes to%: (VARS TABLEBROWSERCOMS) previous date%: " 1-Dec-2018 17:25:13" {DSK}kaplan>Local>medley3.5>git-medley>library>TABLEBROWSER.;3) (* ; " Copyright (c) 1985, 1986, 1987, 1988, 1990, 1993, 1994, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT TABLEBROWSERCOMS) (RPAQQ TABLEBROWSERCOMS ((COMS (* ; "Entries") (FNS TB.MAKE.BROWSER TB.REPLACE.ITEMS) (FNS TB.DELETE.ITEM TB.UNDELETE.ITEM TB.INSERT.ITEM TB.REMOVE.ITEM TB.NORMALIZE.ITEM TB.REDISPLAY.ITEMS TB.SELECT.ITEM TB.UNSELECT.ITEM TB.UNSELECT.ALL.ITEMS) (FNS TB.NUMBER.OF.ITEMS TB.NTH.ITEM TB.COLLECT.ITEMS TB.MAP.ITEMS TB.MAP.DELETED.ITEMS TB.MAP.SELECTED.ITEMS TB.FIND.ITEM TB.ITEM.SELECTED? TB.ITEM.DELETED?) (FNS TB.CLEAR.LINE TB.USERDATA TB.WINDOW)) (COMS (* ; "Display") (FNS TB.REPAINTFN TB.RESHAPEFN TB.SCROLLFN TB.DISPLAY.LINES TB.PRINT.LINE TB.FIRST.VISIBLE.ITEM# TB.LAST.VISIBLE.ITEM# TB.ITEM.VISIBLE? TB.ITEM.FROM.YCOORD TB.BOTTOM.OF.ITEM TB.SHOW.DELETION TB.SHOW.SELECTION TB.UPDATE.DISPLAY TB.ITEM.UPDATABLE?)) (COMS (* ; "Selection") (FNS TB.BUTTONEVENTFN TB.DO.UNLESS.BUSY TB.DO.ITEM.SELECTION TB.CONTIGUOUS.SELP TB.DECONSIDERRANGE TB.CONSIDERRANGE TB.DESELECTRANGE TB.RECONSIDERRANGE TB.SELECTRANGE TB.UNDOSELECTION TB.FIND.SELECTED.ITEM TB.REV.FIND.SELECTED.ITEM) (FNS TB.COPYBUTTONEVENTFN TB.SHOW.COPY.SELECTION)) (COMS (* ; "Misc state change") (FNS TB.BROWSER.BUSY TB.CLOSE/SHRINK TB.CLOSEFN TB.FINISH.CLOSE TB.FLUSH.WINDOW TB.SET.FONT TB.SHRINKFN TB.EXPANDFN TB.FIND.PREVIOUS.TAIL TB.RENUMBER.TAIL)) (COMS (* ; "Misc") (FNS TB.PROCESS) (INITVARS (TB.DELETEDLINEHEIGHT 1)) (VARS TB.SELECTION.BITMAP) (CURSORS TB.CROSSCURSOR) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (SOURCE) TABLEBROWSERDECLS) (CONSTANTS * TOCSTATES) (MACROS .COPYKEYDOWNP.) (GLOBALVARS TB.CROSSCURSOR TB.SELECTION.BITMAP TB.DELETEDLINEHEIGHT) (LOCALVARS . T))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA TB.USERDATA))) (INITRECORDS TABLEBROWSER TABLEITEM) (SYSRECORDS TABLEBROWSER TABLEITEM))) (* ; "Entries") (DEFINEQ (TB.MAKE.BROWSER (LAMBDA (ITEMS WINDOWSPEC PROPS) (* ; "Edited 28-Jan-88 04:37 by bvm") (* ;;; "Build a browser window, which consists of three attached windows: the main BROWSERWINDOW, the BROWSERMENUWINDOW containing the menu, and a BROWSERPROMPTWINDOW for displaying random info") (PROG ((LINESPERITEM 1) FONT PRINTFN COPYFN CLOSEFN AFTERCLOSEFN TITLE COLUMNS USERDATA WINDOW USERPROPS BROWSER ITEMHEIGHT BASELINE HEADINGWINDOW LINETHICKNESS) (DECLARE (SPECVARS FONT PRINTFN COPYFN CLOSEFN AFTERCLOSEFN TITLE COLUMNS USERDATA LINESPERITEM ITEMHEIGHT BASELINE HEADINGWINDOW LINETHICKNESS)) (* ; "For SET below") (for TAIL on PROPS by (CDDR TAIL) do (SELECTQ (CAR TAIL) ((FONT PRINTFN COPYFN CLOSEFN AFTERCLOSEFN TITLE COLUMNS USERDATA LINESPERITEM ITEMHEIGHT BASELINE HEADINGWINDOW LINETHICKNESS) (SET (CAR TAIL) (CADR TAIL))) (push USERPROPS (LIST (CAR TAIL) (CADR TAIL))))) (SETQ WINDOW (DECODE.WINDOW.ARG WINDOWSPEC NIL NIL TITLE)) (WINDOWPROP WINDOW (QUOTE TABLEBROWSER) (SETQ BROWSER (create TABLEBROWSER TBWINDOW _ WINDOW TBFONT _ FONT TBLOCK _ (CREATE.MONITORLOCK (OR (WINDOWPROP WINDOW (QUOTE TITLE)) "Table Browser")) TB#LINESPERITEM _ (OR LINESPERITEM 1) TBBASELINE _ (OR BASELINE 0) TBCOLUMNS _ COLUMNS TBPRINTFN _ PRINTFN TBCOPYFN _ COPYFN TBCLOSEFN _ CLOSEFN TBAFTERCLOSEFN _ AFTERCLOSEFN TBUSERDATA _ USERDATA TBHEADINGWINDOW _ HEADINGWINDOW TBLINETHICKNESS _ (OR LINETHICKNESS TB.DELETEDLINEHEIGHT)))) (if ITEMHEIGHT then (* ; "User explicitly controlling height variables.") (replace (TABLEBROWSER TBITEMHEIGHT) of BROWSER with ITEMHEIGHT) (replace (TABLEBROWSER TBHEIGHTEXPLICIT) of BROWSER with T)) (DSPLEFTMARGIN TB.LEFT.MARGIN WINDOW) (TB.REPLACE.ITEMS BROWSER ITEMS) (WINDOWPROP WINDOW (QUOTE SCROLLFN) (FUNCTION TB.SCROLLFN)) (WINDOWPROP WINDOW (QUOTE REPAINTFN) (FUNCTION TB.REPAINTFN)) (WINDOWPROP WINDOW (QUOTE BUTTONEVENTFN) (FUNCTION TB.BUTTONEVENTFN)) (WINDOWPROP WINDOW (QUOTE RIGHTBUTTONFN) (FUNCTION TB.BUTTONEVENTFN)) (WINDOWPROP WINDOW (QUOTE COPYBUTTONEVENTFN) (FUNCTION TB.COPYBUTTONEVENTFN)) (for PROP in (QUOTE (CLOSEFN SHRINKFN RESHAPEFN)) do (* ;; "This used to be (progn (windowaddprop window 'closefn (function tb.closefn)) (windowaddprop window 'shrinkfn (function tb.shrinkfn)) (windowaddprop window 'reshapefn (function tb.reshapefn))). However, we want to be careful to put our stuff on before any attached window stuff, so that we can reject a CLOSE, for example, before CLOSEATTACHEDWINDOWS has already closed them. Could always put on front, but it's probably better to put our functions after any the user might have explicitly put there already.") (LET ((OLDP (WINDOWPROP WINDOW PROP)) (FN (PACK* "TB." PROP))) (if (NULL OLDP) then (SETQ OLDP (LIST FN)) else (for TAIL on (OR (LISTP OLDP) (SETQ OLDP (LIST OLDP))) do (if (EQ (CAR TAIL) FN) then (* ; "Window already has our fn!") (RETURN) elseif (STRPOS "ATTACHED" (CAR TAIL)) then (* ; "Insert before this attached window hacker") (RETURN (ATTACH FN TAIL))) finally (* ; "Put at end") (NCONC1 OLDP FN))) (WINDOWPROP WINDOW PROP OLDP))) (replace (TABLEBROWSER TBREADY) of BROWSER with T) (RETURN BROWSER))) ) (TB.REPLACE.ITEMS (LAMBDA (BROWSER NEWITEMS) (* ; "Edited 27-Jan-88 16:27 by bvm") (* ;; "Completely replace the current items with the specified items") (LET ((N 0) FIRSTSEL) (SETQ BROWSER (\DTEST BROWSER (QUOTE TABLEBROWSER))) (for ITEM in NEWITEMS do (* ; "Number the items") (freplace TI# of (\DTEST ITEM (QUOTE TABLEITEM)) with (add N 1))) (freplace (TABLEBROWSER TBTAILHINT) of BROWSER with NIL) (freplace (TABLEBROWSER TBITEMS) of BROWSER with NEWITEMS) (freplace (TABLEBROWSER TB#ITEMS) of BROWSER with N) (freplace (TABLEBROWSER TB#DELETED) of BROWSER with (for ITEM in NEWITEMS count (ffetch TIDELETED of ITEM))) (COND ((SETQ FIRSTSEL (TB.FIND.SELECTED.ITEM BROWSER 1 N)) (freplace (TABLEBROWSER TBFIRSTSELECTEDITEM) of BROWSER with FIRSTSEL) (freplace (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER with (TB.REV.FIND.SELECTED.ITEM BROWSER FIRSTSEL N))) (T (freplace (TABLEBROWSER TBFIRSTSELECTEDITEM) of BROWSER with (ADD1 N)) (freplace (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER with 0))) (TB.SET.FONT BROWSER) (LET ((REGION (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of BROWSER)))) (TB.DISPLAY.LINES BROWSER (TB.FIRST.VISIBLE.ITEM# BROWSER REGION) (TB.LAST.VISIBLE.ITEM# BROWSER REGION))))) ) ) (DEFINEQ (TB.DELETE.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 29-Jan-88 12:08 by bvm") (COND ((NOT (ffetch (TABLEITEM TIDELETED) of (\DTEST ITEM (QUOTE TABLEITEM)))) (freplace (TABLEITEM TIDELETED) of ITEM with T) (add (ffetch (TABLEBROWSER TB#DELETED) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) 1) (if (TB.ITEM.UPDATABLE? BROWSER ITEM T) then (TB.SHOW.DELETION BROWSER ITEM (ffetch (TABLEBROWSER TBWINDOW) of BROWSER) (QUOTE REPLACE)))))) ) (TB.UNDELETE.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 29-Jan-88 12:08 by bvm") (COND ((ffetch (TABLEITEM TIDELETED) of (\DTEST ITEM (QUOTE TABLEITEM))) (freplace (TABLEITEM TIDELETED) of ITEM with NIL) (add (ffetch (TABLEBROWSER TB#DELETED) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) -1) (COND ((TB.ITEM.UPDATABLE? BROWSER ITEM T) (LET ((WINDOW (ffetch (TABLEBROWSER TBWINDOW) of BROWSER))) (TB.SHOW.DELETION BROWSER ITEM WINDOW (QUOTE ERASE)) (* ; "reprint the line sans deletion mark") (TB.PRINT.LINE BROWSER ITEM WINDOW (ffetch (TABLEBROWSER TBPRINTFN) of BROWSER)))))))) ) (TB.INSERT.ITEM (LAMBDA (BROWSER NEWITEM BEFOREITEM) (* ; "Edited 27-Jan-88 16:08 by bvm") (* ;;; "Inserts NEWITEM in TABLEBROWSER before item BEFOREITEM or at the end if BEFOREITEM is NIL") (LET ((LASTITEM# (ffetch (TABLEBROWSER TB#ITEMS) of (SETQ BROWSER (\DTEST BROWSER (QUOTE TABLEBROWSER))))) BEFORE# TAIL N) (SETQ NEWITEM (\DTEST NEWITEM (QUOTE TABLEITEM))) (if BEFOREITEM then (SETQ BEFORE# (OR (FIXP BEFOREITEM) (ffetch TI# of (\DTEST BEFOREITEM (QUOTE TABLEITEM))))) (COND ((OR (> BEFORE# LASTITEM#) (< BEFORE# 1)) (* ; "Check for bad values") (\ILLEGAL.ARG BEFOREITEM))) else (SETQ BEFORE# (ADD1 LASTITEM#))) (PROGN (* ;; "Need to change the following if TBITEMS representation changes") (if (EQ BEFORE# 1) then (* ; "Goes at the beginning (or at the end of a null list)") (freplace (TABLEBROWSER TBITEMS) of BROWSER with (SETQ TAIL (CONS NEWITEM (ffetch (TABLEBROWSER TBITEMS) of BROWSER)))) else (* ; "Somewhere else--find the tail") (SETQ TAIL (if (NULL BEFOREITEM) then (* ; "Insert at end") (FLAST (OR (ffetch (TABLEBROWSER TBTAILHINT) of BROWSER) (ffetch (TABLEBROWSER TBITEMS) of BROWSER))) else (TB.FIND.PREVIOUS.TAIL BROWSER BEFORE#))) (RPLACD TAIL (SETQ TAIL (CONS NEWITEM (CDR TAIL))))) (* ;; "Now (CAR TAIL) is the new item") (TB.RENUMBER.TAIL BROWSER TAIL BEFORE#)) (freplace (TABLEBROWSER TB#ITEMS) of BROWSER with (ADD1 LASTITEM#)) (COND ((ffetch TIDELETED of NEWITEM) (add (ffetch (TABLEBROWSER TB#DELETED) of BROWSER) 1))) (* ;; "Update first & last selected item if they fall after the insertion, or if the new item is selected") (COND ((>= (SETQ N (ffetch TBFIRSTSELECTEDITEM of BROWSER)) BEFORE#) (freplace TBFIRSTSELECTEDITEM of BROWSER with (COND ((ffetch TISELECTED of NEWITEM) BEFORE#) (T (ADD1 N)))))) (COND ((>= (SETQ N (ffetch TBLASTSELECTEDITEM of BROWSER)) BEFORE#) (freplace TBLASTSELECTEDITEM of BROWSER with (ADD1 N))) ((ffetch TISELECTED of NEWITEM) (freplace TBLASTSELECTEDITEM of BROWSER with BEFORE#))) (TB.UPDATE.DISPLAY BROWSER BEFORE# (QUOTE INSERT)))) ) (TB.REMOVE.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 27-Jan-88 16:09 by bvm") (* ;;; "Removes ITEM from TABLEBROWSER") (LET ((LASTITEM# (fetch (TABLEBROWSER TB#ITEMS) of (\DTEST BROWSER (QUOTE TABLEBROWSER)))) (ITEM# (ffetch TI# of (\DTEST ITEM (QUOTE TABLEITEM)))) N TAIL) (PROGN (* ;; "Need to change the following if TBITEMS representation changes") (COND ((EQ ITEM# 1) (freplace (TABLEBROWSER TBITEMS) of BROWSER with (SETQ TAIL (CDR (ffetch (TABLEBROWSER TBITEMS) of BROWSER))))) (T (RPLACD (SETQ TAIL (TB.FIND.PREVIOUS.TAIL BROWSER ITEM#)) (SETQ TAIL (CDDR TAIL))))) (TB.RENUMBER.TAIL BROWSER TAIL ITEM#)) (freplace (TABLEBROWSER TB#ITEMS) of BROWSER with (SUB1 LASTITEM#)) (COND ((ffetch TIDELETED of ITEM) (add (ffetch (TABLEBROWSER TB#DELETED) of BROWSER) -1))) (* ;; "Update first & last selected item if they fall after the deletion or if the old item is selected") (COND ((>= (SETQ N (ffetch TBFIRSTSELECTEDITEM of BROWSER)) ITEM#) (freplace TBFIRSTSELECTEDITEM of BROWSER with (COND ((EQ N ITEM#) (* ; "removed item was the first selected, so look for next one after it") (OR (TB.FIND.SELECTED.ITEM BROWSER ITEM#) LASTITEM#)) (T (* ; "Item numbers are decremented") (SUB1 N)))))) (COND ((>= (SETQ N (ffetch TBLASTSELECTEDITEM of BROWSER)) ITEM#) (freplace TBLASTSELECTEDITEM of BROWSER with (COND ((EQ N ITEM#) (* ; "removed item was the last selected, so look for next one before it") (OR (TB.REV.FIND.SELECTED.ITEM BROWSER NIL (SUB1 ITEM#)) 0)) (T (SUB1 N)))))) (TB.UPDATE.DISPLAY BROWSER ITEM# (QUOTE REMOVE)))) ) (TB.NORMALIZE.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 22-Jan-88 16:22 by bvm") (* ;; "Scroll, if necessary, so that ITEM is visible in browser.") (LET* ((WINDOW (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER (QUOTE TABLEBROWSER)))) (BOT (TB.BOTTOM.OF.ITEM BROWSER ITEM)) (CLIP (DSPCLIPPINGREGION NIL WINDOW))) (COND ((OR (> (fetch (REGION BOTTOM) of CLIP) BOT) (< (fetch (REGION PTOP) of CLIP) (+ BOT (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)))) (* ; "Scroll so that item's midline is at midline of window") (SCROLLBYREPAINTFN WINDOW 0 (- (+ (fetch (REGION BOTTOM) of CLIP) (IQUOTIENT (fetch (REGION HEIGHT) of CLIP) 2)) (+ BOT (IQUOTIENT (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) 2)))))))) ) (TB.REDISPLAY.ITEMS [LAMBDA (BROWSER FIRSTITEM LASTITEM) (* ; "Edited 1-Dec-2018 17:25 by rmk:") (* ; "Edited 2-Feb-88 11:53 by bvm:") (* ;; "Force redisplay of all items from FIRSTITEM to LASTITEM, e.g., because their content or format changed. We'll only redisplay the visible ones, of course. Also, if browser isn't open, we'll save the change until browser is expanded") (LET [(REGION (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER 'TABLEBROWSER] (if (AND (NULL FIRSTITEM) (NULL LASTITEM)) then (* ; "We're being told to redisplay the whole browser, so recompute the extent while we're at it (it might have gotten smaller).") (replace (TABLEBROWSER TBMAXXPOS) of BROWSER with 0)) (SETQ FIRSTITEM (IMAX [COND ((NULL FIRSTITEM) 1) ((FIXP FIRSTITEM)) (T (ffetch TI# of (\DTEST FIRSTITEM 'TABLEITEM] (TB.FIRST.VISIBLE.ITEM# BROWSER REGION))) (SETQ LASTITEM (IMIN [COND ((NULL LASTITEM) (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER)) ((FIXP LASTITEM)) (T (ffetch TI# of (\DTEST LASTITEM 'TABLEITEM] (TB.LAST.VISIBLE.ITEM# BROWSER REGION))) (if (AND (>= LASTITEM FIRSTITEM) (TB.ITEM.UPDATABLE? BROWSER FIRSTITEM)) then (* ;; "RMK: For whatever reason, on an FB recompute, this gets called after the items have first been displayed but not in proper alignment. This redisplays them to get the alignment, but the window is garbled if the old stuff isn't cleared first. So, added the CLEARW") (CLEARW (ffetch (TABLEBROWSER TBWINDOW) of BROWSER)) (TB.DISPLAY.LINES BROWSER FIRSTITEM LASTITEM]) (TB.SELECT.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 29-Jan-88 12:08 by bvm") (LET ((N (ffetch (TABLEITEM TI#) of (\DTEST ITEM (QUOTE TABLEITEM))))) (TB.SELECTRANGE (\DTEST BROWSER (QUOTE TABLEBROWSER)) N N T) (if (TB.ITEM.UPDATABLE? BROWSER N T) then (TB.SHOW.SELECTION BROWSER N (QUOTE REPLACE))))) ) (TB.UNSELECT.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 29-Jan-88 12:09 by bvm") (if (ffetch (TABLEITEM TISELECTED) of (\DTEST ITEM (QUOTE TABLEITEM))) then (LET ((N (ffetch (TABLEITEM TI#) of ITEM))) (TB.DESELECTRANGE (\DTEST BROWSER (QUOTE TABLEBROWSER)) N N) (if (TB.ITEM.UPDATABLE? BROWSER N T) then (TB.SHOW.SELECTION BROWSER N (QUOTE ERASE)))))) ) (TB.UNSELECT.ALL.ITEMS (LAMBDA (BROWSER) (* ; "Edited 29-Jan-88 12:14 by bvm") (* ;; "User entry for unselecting all items in the browser. ") (LET ((START (ffetch (TABLEBROWSER TBFIRSTSELECTEDITEM) of (\DTEST BROWSER (QUOTE TABLEBROWSER)))) (END (ffetch (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER))) (if (<= START END) then (for I from START to END bind (UPDATABLE _ (TB.ITEM.UPDATABLE? BROWSER START)) ITEM when (ffetch (TABLEITEM TISELECTED) of (SETQ ITEM (TB.NTH.ITEM BROWSER I))) do (freplace TISELECTED of ITEM with NIL) (if UPDATABLE then (TB.SHOW.SELECTION BROWSER I (QUOTE ERASE)))) (freplace TBFIRSTSELECTEDITEM of BROWSER with (ADD1 (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER))) (freplace TBLASTSELECTEDITEM of BROWSER with 0)))) ) ) (DEFINEQ (TB.NUMBER.OF.ITEMS (LAMBDA (BROWSER TYPE) (* ; "Edited 27-Jan-88 16:16 by bvm") (SETQ BROWSER (\DTEST BROWSER (QUOTE TABLEBROWSER))) (SELECTQ TYPE (NIL (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER)) (DELETED (ffetch (TABLEBROWSER TB#DELETED) of BROWSER)) (SELECTED (for I from (ffetch (TABLEBROWSER TBFIRSTSELECTEDITEM) of BROWSER) to (ffetch (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER) count (ffetch (TABLEITEM TISELECTED) of (TB.NTH.ITEM BROWSER I)))) (\ILLEGAL.ARG TYPE))) ) (TB.NTH.ITEM (LAMBDA (BROWSER N) (* ; "Edited 27-Jan-88 16:18 by bvm") (* ;; "Return the Nth item of BROWSER, or NIL if N is out of range.") (* ;; "Browser items are currently stored as a simple list. To make most accesses reasonable, we save a hint to a recent tail of the list to speed up the search.") (\DTEST BROWSER (QUOTE TABLEBROWSER)) (LET (TAIL TAILN) (if (AND (> N 0) (OR (AND (SETQ TAIL (ffetch (TABLEBROWSER TBTAILHINT) of BROWSER)) (>= N (SETQ TAILN (ffetch (TABLEITEM TI#) of (CAR TAIL))))) (PROG1 (SETQ TAIL (ffetch (TABLEBROWSER TBITEMS) of BROWSER)) (* ; "Item is not in hint tail, have to search whole list") (SETQ TAILN 1)))) then (while (< TAILN N) do (if (NULL (SETQ TAIL (CDR TAIL))) then (* ; "Greater than last item. I could have done a comparison against #items, but it is rare to ask for this (and we never do internally).") (RETURN NIL)) (add TAILN 1) finally (freplace (TABLEBROWSER TBTAILHINT) of BROWSER with TAIL) (* ; "Store away the new hint. This makes ascending iterations constant time, rather than n^2.") (RETURN (CAR TAIL)))))) ) (TB.COLLECT.ITEMS (LAMBDA (BROWSER PREDFN) (* ; "Edited 27-Jan-88 16:18 by bvm") (SELECTQ PREDFN (DELETED (SETQ PREDFN (FUNCTION TB.ITEM.DELETED?))) (SELECTED (SETQ PREDFN (FUNCTION TB.ITEM.SELECTED?))) NIL) (for ITEM in (ffetch (TABLEBROWSER TBITEMS) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) collect ITEM when (OR (NULL PREDFN) (CL:FUNCALL PREDFN BROWSER ITEM)))) ) (TB.MAP.ITEMS (LAMBDA (BROWSER MAPFN NULLFN) (* ; "Edited 27-Jan-88 16:18 by bvm") (* ;;; "Apply MAPFN to each item in TABLEBROWSER -- args (TABLEBROWSER ITEM)") (LET ((ITEMS (ffetch (TABLEBROWSER TBITEMS) of (\DTEST BROWSER (QUOTE TABLEBROWSER))))) (COND (ITEMS (for ITEM in ITEMS do (CL:FUNCALL MAPFN BROWSER ITEM))) (NULLFN (CL:FUNCALL NULLFN BROWSER))))) ) (TB.MAP.DELETED.ITEMS (LAMBDA (BROWSER MAPFN NULLFN) (* ; "Edited 27-Jan-88 16:18 by bvm") (* ;;; "Apply MAPFN to each deleted item in TABLEBROWSER -- args (TABLEBROWSER ITEM)") (COND ((NEQ (ffetch TB#DELETED of (\DTEST BROWSER (QUOTE TABLEBROWSER))) 0) (for ITEM in (ffetch (TABLEBROWSER TBITEMS) of BROWSER) when (ffetch TIDELETED of ITEM) do (CL:FUNCALL MAPFN BROWSER ITEM))) (NULLFN (* ; "Nothing deleted") (CL:FUNCALL NULLFN BROWSER)))) ) (TB.MAP.SELECTED.ITEMS (LAMBDA (BROWSER MAPFN NULLFN) (* ; "Edited 27-Jan-88 16:19 by bvm") (* ;;; "Apply MAPFN to each selected item in TABLEBROWSER -- args (TABLEBROWSER ITEM)") (LET ((ITEM# (SUB1 (ffetch (TABLEBROWSER TBFIRSTSELECTEDITEM) of (\DTEST BROWSER (QUOTE TABLEBROWSER))))) (LASTITEM# (ffetch (TABLEBROWSER TBLASTSELECTEDITEM) of BROWSER)) ITEM) (COND ((< ITEM# LASTITEM#) (until (> (add ITEM# 1) LASTITEM#) when (ffetch (TABLEITEM TISELECTED) of (SETQ ITEM (TB.NTH.ITEM BROWSER ITEM#))) do (CL:FUNCALL MAPFN BROWSER ITEM))) (NULLFN (* ; "Nothing selected") (CL:FUNCALL NULLFN BROWSER))))) ) (TB.FIND.ITEM (LAMBDA (BROWSER PREDFN FIRST# LAST# BACKWARDSFLG) (* ; "Edited 27-Jan-88 16:20 by bvm") (* ;;; "Returns the first item in the designated range satisfying (PREDFN browser item); range defaults to whole browser") (\DTEST BROWSER (QUOTE TABLEBROWSER)) (LET ((LO (COND (FIRST# (IMAX FIRST# 1)) (T 1))) (HI (COND (LAST# (IMIN LAST# (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER))) (T (ffetch (TABLEBROWSER TB#ITEMS) of BROWSER)))) I END INCREMENT ITEM) (COND ((<= LO HI) (COND (BACKWARDSFLG (SETQ I (ADD1 HI)) (SETQ END LO) (SETQ INCREMENT -1)) (T (SETQ I (SUB1 LO)) (SETQ END HI) (SETQ INCREMENT 1))) (SELECTQ PREDFN (DELETED (SETQ PREDFN (FUNCTION TB.ITEM.DELETED?))) (SELECTED (SETQ PREDFN (FUNCTION TB.ITEM.SELECTED?))) NIL) (when (CL:FUNCALL PREDFN BROWSER (SETQ ITEM (TB.NTH.ITEM BROWSER (add I INCREMENT)))) do (RETURN ITEM) repeatuntil (EQ I END)))))) ) (TB.ITEM.SELECTED? (LAMBDA (BROWSER ITEM) (* ; "Edited 27-Jan-88 16:20 by bvm") (ffetch TISELECTED of (\DTEST ITEM (QUOTE TABLEITEM)))) ) (TB.ITEM.DELETED? (LAMBDA (BROWSER ITEM) (* ; "Edited 27-Jan-88 16:20 by bvm") (ffetch TIDELETED of (\DTEST ITEM (QUOTE TABLEITEM)))) ) ) (DEFINEQ (TB.CLEAR.LINE (LAMBDA (BROWSER ITEM LEFT WIDTH) (* ; "Edited 22-Jan-88 16:06 by bvm") (* ;;; "Clears the contents of ITEM's line starting at xpos LEFT for width WIDTH. Defaults to whole line") (BLTSHADE WHITESHADE (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) (OR LEFT 0) (TB.BOTTOM.OF.ITEM BROWSER ITEM) WIDTH (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) (QUOTE REPLACE))) ) (TB.USERDATA (CL:LAMBDA (BROWSER &OPTIONAL (NEWDATA NIL NEWP)) (* ; "Edited 27-Jan-88 16:25 by bvm") (PROG1 (ffetch (TABLEBROWSER TBUSERDATA) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) (COND (NEWP (freplace (TABLEBROWSER TBUSERDATA) of BROWSER with NEWDATA))))) ) (TB.WINDOW (LAMBDA (BROWSER) (* ; "Edited 27-Jan-88 16:25 by bvm") (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER (QUOTE TABLEBROWSER)))) ) ) (* ; "Display") (DEFINEQ (TB.REPAINTFN (LAMBDA (WINDOW REGION) (* bvm%: "10-Sep-85 13:00") (PROG ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER)))) (AND (NEQ (fetch (TABLEBROWSER TB#ITEMS) of BROWSER) 0) (RESETLST (COND ((OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T) (TB.DISPLAY.LINES BROWSER (TB.FIRST.VISIBLE.ITEM# BROWSER REGION) (TB.LAST.VISIBLE.ITEM# BROWSER REGION))) (T (TB.BROWSER.BUSY BROWSER))))))) ) (TB.RESHAPEFN (LAMBDA (WINDOW OLDIMAGEBM OLDREGION) (* ; "Edited 22-Jan-88 10:21 by bvm") (RESETLST (PROG ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) (REGION (DSPCLIPPINGREGION NIL WINDOW)) ITEM#) (COND ((NOT (OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T)) (* ; "Browser is busy, have to wait until it is ready. But don't tie up mouse!") (ALLOW.BUTTON.EVENTS) (OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) NIL T)) ((NOT (fetch (TABLEBROWSER TBREADY) of BROWSER)) (* ; "Browser not functional") (RETURN (RESHAPEBYREPAINTFN WINDOW OLDIMAGEBM OLDREGION)))) (SETQ ITEM# (TB.FIRST.VISIBLE.ITEM# BROWSER REGION)) (TB.SET.FONT BROWSER) (WYOFFSET (TIMES (SUB1 ITEM#) (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)) WINDOW) (TB.DISPLAY.LINES BROWSER ITEM# (TB.LAST.VISIBLE.ITEM# BROWSER REGION))))) ) (TB.SCROLLFN (LAMBDA (WINDOW DX DY CONTINUOUSFLG) (* ; "Edited 22-Jan-88 17:32 by bvm") (* ;; "only scroll if can get the monitor lock") (RESETLST (LET ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) HW) (COND ((OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T) (SCROLLBYREPAINTFN WINDOW DX DY CONTINUOUSFLG) (if (AND (EQ DY 0) (SETQ HW (fetch (TABLEBROWSER TBHEADINGWINDOW) of BROWSER))) then (* ; "Horizontally scroll the header window together with it.") (SCROLLW HW DX DY CONTINUOUSFLG))) (T (TB.BROWSER.BUSY BROWSER)))))) ) (TB.DISPLAY.LINES (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 25-Jan-88 18:34 by bvm") (for ITEM# from (IMAX FIRST# 1) to (IMIN LAST# (fetch (TABLEBROWSER TB#ITEMS) of BROWSER)) bind (WINDOW _ (fetch (TABLEBROWSER TBWINDOW) of BROWSER)) (MAXXPOS _ (fetch (TABLEBROWSER TBMAXXPOS) of BROWSER)) (PRINTFN _ (fetch (TABLEBROWSER TBPRINTFN) of BROWSER)) EXTENTCHANGED ITEM HERE EXTENT HWINDOW do (SETQ ITEM (TB.NTH.ITEM BROWSER ITEM#)) (TB.PRINT.LINE BROWSER ITEM WINDOW PRINTFN) (* ; "keep track of maximum width printed to, so window's EXTENT is always right") (COND ((< MAXXPOS (SETQ HERE (DSPXPOSITION NIL WINDOW))) (SETQ MAXXPOS HERE) (SETQ EXTENTCHANGED T))) finally (COND (EXTENTCHANGED (replace (TABLEBROWSER TBMAXXPOS) of BROWSER with MAXXPOS) (replace (REGION WIDTH) of (SETQ EXTENT (fetch (TABLEBROWSER TBEXTENT) of BROWSER)) with MAXXPOS) (WINDOWPROP WINDOW (QUOTE EXTENT) EXTENT) (if (SETQ HWINDOW (fetch (TABLEBROWSER TBHEADINGWINDOW) of BROWSER)) then (* ; "Update heading window extent, too. Width has to account for the difference, if any, in borders.") (replace (REGION WIDTH) of (SETQ EXTENT (WINDOWPROP HWINDOW (QUOTE EXTENT))) with (+ MAXXPOS (TIMES 2 (- (WINDOWPROP WINDOW (QUOTE BORDER)) (WINDOWPROP HWINDOW (QUOTE BORDER))))))))))) ) (TB.PRINT.LINE (LAMBDA (BROWSER ITEM WINDOW PRINTFN) (* ; "Edited 22-Jan-88 17:16 by bvm") (MOVETO TB.LEFT.MARGIN (+ (TB.BOTTOM.OF.ITEM BROWSER ITEM) (fetch (TABLEBROWSER TBBASELINE) of BROWSER)) WINDOW) (* ; "Move to item's baseline") (POSITION WINDOW 0) (CL:FUNCALL PRINTFN BROWSER ITEM WINDOW) (TB.SHOW.SELECTION BROWSER ITEM (COND ((fetch (TABLEITEM TISELECTED) of ITEM) (QUOTE REPLACE)) (T (QUOTE ERASE)))) (COND ((fetch (TABLEITEM TIDELETED) of ITEM) (TB.SHOW.DELETION BROWSER ITEM WINDOW (QUOTE REPLACE))))) ) (TB.FIRST.VISIBLE.ITEM# (LAMBDA (BROWSER REGION) (* ; "Edited 22-Jan-88 16:59 by bvm") (* ;; "Computes number of the first item in TABLEBROWSER that is visible in REGION") (IMAX 1 (ADD1 (IQUOTIENT (- (ffetch (TABLEBROWSER TBORIGIN) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) (fetch (REGION PTOP) of (OR REGION (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of BROWSER))))) (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER))))) ) (TB.LAST.VISIBLE.ITEM# (LAMBDA (BROWSER REGION) (* ; "Edited 22-Jan-88 17:00 by bvm") (* ;; "Computes number of the last item in TABLEBROWSER that is visible in REGION") (IMIN (ffetch (TABLEBROWSER TB#ITEMS) of (\DTEST BROWSER (QUOTE TABLEBROWSER))) (CL:CEILING (- (ffetch (TABLEBROWSER TBORIGIN) of BROWSER) (fetch (REGION BOTTOM) of (OR REGION (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of BROWSER))))) (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)))) ) (TB.ITEM.VISIBLE? (LAMBDA (BROWSER ITEM) (* ; "Edited 22-Jan-88 16:12 by bvm") (* ;;; "True if any part of ITEM is visible in window of BROWSER") (LET ((CLIP (DSPCLIPPINGREGION NIL (ffetch (TABLEBROWSER TBWINDOW) of (\DTEST BROWSER (QUOTE TABLEBROWSER))))) (BOT (TB.BOTTOM.OF.ITEM BROWSER ITEM))) (* ;; "Check bottom of line is below top, and top of line is above the bottom") (AND (< BOT (fetch (REGION PTOP) of CLIP)) (< (fetch (REGION BOTTOM) of CLIP) (+ BOT (ffetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)))))) ) (TB.ITEM.FROM.YCOORD (LAMBDA (BROWSER YPOS) (* ; "Edited 22-Jan-88 16:41 by bvm") (LET ((N (CL:CEILING (- (fetch (TABLEBROWSER TBORIGIN) of BROWSER) YPOS) (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)))) (TB.NTH.ITEM BROWSER (COND ((<= N 0) 1) (T (IMIN N (fetch (TABLEBROWSER TB#ITEMS) of BROWSER))))))) ) (TB.BOTTOM.OF.ITEM (LAMBDA (BROWSER ITEM) (* ; "Edited 27-Jan-88 16:11 by bvm") (* ;; "Returns the y position of the bottom of specified item (number or tableitem). Add the font descent to get the baseline of the first line.") (- (fetch (TABLEBROWSER TBORIGIN) of BROWSER) (TIMES (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) (OR (FIXP ITEM) (ffetch (TABLEITEM TI#) of (\DTEST ITEM (QUOTE TABLEITEM))))))) ) (TB.SHOW.DELETION (LAMBDA (BROWSER ITEM WINDOW OPERATION) (* ; "Edited 27-Jan-88 17:00 by bvm") (* ;;; "Draws or erases, for OPERATION = REPLACE or ERASE, the line indicating that ITEM is deleted") (LET ((THICKNESS (fetch (TABLEBROWSER TBLINETHICKNESS) of BROWSER)) (BASELINE (fetch (TABLEBROWSER TBBASELINE) of BROWSER))) (BLTSHADE BLACKSHADE WINDOW TB.LEFT.MARGIN (PROGN (* ;; "Center the deletion line between the baseline and the top of the item") (+ (SUB1 BASELINE) (IQUOTIENT (- (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) BASELINE THICKNESS) 2) (TB.BOTTOM.OF.ITEM BROWSER ITEM))) NIL THICKNESS OPERATION))) ) (TB.SHOW.SELECTION (LAMBDA (BROWSER ITEM OPERATION) (* ; "Edited 27-Jan-88 15:42 by bvm") (* ;;; "Displays or erases, per OPERATION = REPLACE or ERASE, the mark indicating that ITEM is selected") (LET ((BASELINE (fetch (TABLEBROWSER TBBASELINE) of BROWSER)) (BM TB.SELECTION.BITMAP)) (BITBLT BM 0 0 (fetch (TABLEBROWSER TBWINDOW) of BROWSER) 0 (PROGN (* ;; "Center the selection bitmap between the baseline and the top of the item, rounding down slightly on the grounds that the top pixel of the line tends to be blank, so the center of gravity is lower than it might be.") (+ (SUB1 BASELINE) (IQUOTIENT (- (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER) BASELINE (fetch BITMAPHEIGHT of BM)) 2) (TB.BOTTOM.OF.ITEM BROWSER ITEM))) NIL NIL (QUOTE INPUT) OPERATION))) ) (TB.UPDATE.DISPLAY (LAMBDA (BROWSER FROMITEM# TYPE) (* ; "Edited 11-Feb-88 11:34 by bvm") (* ;;; "Updates the display window appropriately after a TYPE operation (REMOVE or INSERT) on TABLEBROWSER that affects items starting at FROMITEM#") (PROG ((WINDOW (fetch (TABLEBROWSER TBWINDOW) of BROWSER)) (EXTENT (fetch (TABLEBROWSER TBEXTENT) of BROWSER)) (LASTITEM# (fetch (TABLEBROWSER TB#ITEMS) of BROWSER)) (ITEMHEIGHT (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER)) (ITEMBOTTOM (TB.BOTTOM.OF.ITEM BROWSER FROMITEM#)) DELTA HEIGHT LAST# CLIP WBOTTOM EXTENTBOTTOM) (* ; "YPOS is the bottom of the line corresponding to FROMITEM#") (add (fetch (REGION HEIGHT) of EXTENT) (SETQ DELTA (SELECTQ TYPE (REMOVE (- ITEMHEIGHT)) (INSERT ITEMHEIGHT) (SHOULDNT)))) (SETQ CLIP (DSPCLIPPINGREGION NIL WINDOW)) (COND ((>= ITEMBOTTOM (fetch (REGION PTOP) of CLIP)) (* ; "Changed item above top of window, so no visible change -- just cheat the origin appropriately") (add (fetch (TABLEBROWSER TBORIGIN) of BROWSER) DELTA)) (T (* ; "Changed item visible or below bottom of window, so bottom of extent changes") (replace (REGION BOTTOM) of EXTENT with (SETQ EXTENTBOTTOM (- (fetch (REGION BOTTOM) of EXTENT) DELTA))) (COND ((<= (+ ITEMBOTTOM ITEMHEIGHT) (SETQ WBOTTOM (fetch (REGION BOTTOM) of CLIP))) (* ; "Below bottom of window, so we're done")) ((TB.ITEM.UPDATABLE? BROWSER FROMITEM#) (* ; "If window is visible, update it now") (SELECTQ TYPE (INSERT (* ; "Push everything from line FROMITEM# down one line, then redisplay item FROMITEM#") (BITBLT WINDOW 0 (+ WBOTTOM ITEMHEIGHT) WINDOW 0 WBOTTOM NIL (- ITEMBOTTOM WBOTTOM) (QUOTE INPUT) (QUOTE REPLACE)) (TB.DISPLAY.LINES BROWSER FROMITEM# FROMITEM#)) (REMOVE (* ; "Pull everything below line FROMITEM# up one line, then redisplay last visible item(s)") (BITBLT WINDOW 0 WBOTTOM WINDOW 0 (+ WBOTTOM ITEMHEIGHT) NIL (- ITEMBOTTOM WBOTTOM) (QUOTE INPUT) (QUOTE REPLACE)) (TB.DISPLAY.LINES BROWSER (SETQ LAST# (+ FROMITEM# (IQUOTIENT (- ITEMBOTTOM WBOTTOM) ITEMHEIGHT))) (ADD1 LAST#)) (* ; "May have to display two lines if the bottom line of window was a half line") (COND ((> EXTENTBOTTOM WBOTTOM) (* ; "Clear everything below the extent") (BLTSHADE WHITESHADE WINDOW 0 WBOTTOM NIL (- EXTENTBOTTOM WBOTTOM) (QUOTE REPLACE))))) (SHOULDNT)))))))) ) (TB.ITEM.UPDATABLE? (LAMBDA (BROWSER ITEM ONLYIFVISIBLE) (* ; "Edited 29-Jan-88 12:08 by bvm") (* ;;; "True if window of BROWSER is open. If false, we update the TBUPDATEFROMHERE field, denoting that we should repaint window when it is opened. If ONLYIFVISIBLE is true, we do nothing and return NIL if the item is not currently visible.") (OR (FIXP ITEM) (SETQ ITEM (fetch TI# of ITEM))) (COND ((AND ONLYIFVISIBLE (NOT (TB.ITEM.VISIBLE? BROWSER ITEM))) (* ; "Item not visible, so no need to change display") NIL) ((OPENWP (fetch (TABLEBROWSER TBWINDOW) of BROWSER))) (T (LET ((OLDN (fetch (TABLEBROWSER TBUPDATEFROMHERE) of BROWSER))) (COND ((OR (NULL OLDN) (< ITEM OLDN)) (* ; "Mark browser for display update after being unshrunk") (replace (TABLEBROWSER TBUPDATEFROMHERE) of BROWSER with ITEM)))) NIL))) ) ) (* ; "Selection") (DEFINEQ (TB.BUTTONEVENTFN (LAMBDA (WINDOW) (* bvm%: " 6-Sep-85 15:23") (TOTOPW WINDOW) (LET (FN) (COND ((INSIDEP (DSPCLIPPINGREGION NIL WINDOW) (LASTMOUSEX WINDOW) (LASTMOUSEY WINDOW)) (TB.DO.UNLESS.BUSY WINDOW (FUNCTION TB.DO.ITEM.SELECTION))) ((LASTMOUSESTATE (ONLY RIGHT)) (DOWINDOWCOM WINDOW)) ((AND (LASTMOUSESTATE (ONLY MIDDLE)) (SETQ FN (fetch (TABLEBROWSER TBTITLEEVENTFN) of (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))))) (TB.DO.UNLESS.BUSY WINDOW FN))))) ) (TB.DO.UNLESS.BUSY (LAMBDA (WINDOW FN) (* ; "Edited 20-Jan-88 23:30 by bvm") (RESETLST (LET ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER)))) (COND ((AND (fetch (TABLEBROWSER TBREADY) of BROWSER) (OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T)) (CL:FUNCALL FN WINDOW BROWSER)))))) ) (TB.DO.ITEM.SELECTION (LAMBDA (WINDOW) (* ; "Edited 20-Jan-88 22:17 by bvm") (DECLARE (GLOBALVARS LASTMOUSEBUTTONS) (SPECVARS SELECTIONSTATE BROWSER FIRSTVISIBLE# LASTVISIBLE#)) (PROG ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) SELECTIONREGION FIRST# LAST# FIRSTVISIBLE# LASTVISIBLE# SELECTIONSTATE NEWSELECTION OLDSELECTION SEL# OLDSEL# CTRLDOWN OLDLASTMOUSEBUTTONS ITEM LASTX LASTY) (COND ((EQ (fetch (TABLEBROWSER TB#ITEMS) of BROWSER) 0) (* ; "Nothing to select") (RETURN))) (SETQ SELECTIONREGION (DSPCLIPPINGREGION NIL WINDOW)) (SETQ LAST# (fetch TBLASTSELECTEDITEM of BROWSER)) (SETQ FIRST# (fetch TBFIRSTSELECTEDITEM of BROWSER)) (SETQ FIRSTVISIBLE# (TB.FIRST.VISIBLE.ITEM# BROWSER SELECTIONREGION)) (SETQ LASTVISIBLE# (TB.LAST.VISIBLE.ITEM# BROWSER SELECTIONREGION)) (* ;; "keep looping until all mouse buttons are up") (do (GETMOUSESTATE) (COND ((NOT (INSIDEP SELECTIONREGION (SETQ LASTX (LASTMOUSEX WINDOW)) (SETQ LASTY (LASTMOUSEY WINDOW)))) (* ;; "I would like to just return here and let the next window take over, but current mouse arrangement means I'll never get control back unless user lets up on mouse") (COND ((NEQ SELECTIONSTATE TS.IDLE) (TB.UNDOSELECTION) (* ; "Forget what we were doing") (SETQ OLDSELECTION))) (COND ((LASTMOUSESTATE UP) (RETURN)) (T (BLOCK)))) ((LASTMOUSESTATE UP) (* ; "Make selection permanent") (AND OLDSELECTION (SETQ OLDSEL# (fetch TI# of OLDSELECTION))) (SELECTC SELECTIONSTATE (TS.REPLACING (for I from FIRST# to LAST# do (replace TISELECTED of (TB.NTH.ITEM BROWSER I) with NIL)) (replace TISELECTED of OLDSELECTION with T) (replace TBFIRSTSELECTEDITEM of BROWSER with (replace TBLASTSELECTEDITEM of BROWSER with OLDSEL#))) (TS.ADDING (TB.SELECTRANGE BROWSER OLDSEL# OLDSEL# T)) (TS.REMOVING (TB.DESELECTRANGE BROWSER OLDSEL# OLDSEL#)) (TS.EXTENDING.HI (TB.SELECTRANGE BROWSER (ADD1 LAST#) OLDSEL# CTRLDOWN)) (TS.EXTENDING.LO (TB.SELECTRANGE BROWSER OLDSEL# (SUB1 FIRST#) CTRLDOWN)) (TS.SHRINKING.HI (TB.DESELECTRANGE BROWSER (ADD1 OLDSEL#) LAST#)) (TS.SHRINKING.LO (TB.DESELECTRANGE BROWSER FIRST# (SUB1 OLDSEL#))) NIL) (RETURN)) ((AND NIL (* ; "In a special column")) (COND ((NEQ SELECTIONSTATE TS.IDLE) (TB.UNDOSELECTION) (SETQ OLDSELECTION)))) ((OR (NEQ (SETQ NEWSELECTION (TB.ITEM.FROM.YCOORD BROWSER LASTY)) OLDSELECTION) (NEQ LASTMOUSEBUTTONS OLDLASTMOUSEBUTTONS)) (* ; "Something changed") (COND ((AND (fetch TIUNSELECTABLE of NEWSELECTION) (NOT (LASTMOUSESTATE RIGHT))) (* ; "Can't select that item, so revert to idle") (COND ((NEQ SELECTIONSTATE TS.IDLE) (TB.UNDOSELECTION)))) ((AND (LASTMOUSESTATE (OR LEFT MIDDLE)) (SHIFTDOWNP (QUOTE CTRL))) (* ; "Deselect this item") (SELECTC SELECTIONSTATE (TS.REMOVING (* ; "we were deselecting, so reselect that guy") (TB.SHOW.SELECTION BROWSER OLDSELECTION (QUOTE REPLACE))) (TS.IDLE (* ; "nothing going on")) (TB.UNDOSELECTION)) (SETQ SELECTIONSTATE (COND ((fetch TISELECTED of NEWSELECTION) (TB.SHOW.SELECTION BROWSER NEWSELECTION (QUOTE ERASE)) TS.REMOVING) (T TS.IDLE)))) ((LASTMOUSESTATE LEFT) (* ; "Set (change) the selection to this single item") (COND ((EQ SELECTIONSTATE TS.REPLACING) (TB.SHOW.SELECTION BROWSER OLDSELECTION (QUOTE ERASE))) (T (TB.DECONSIDERRANGE FIRSTVISIBLE# LASTVISIBLE#) (SETQ SELECTIONSTATE TS.REPLACING))) (TB.SHOW.SELECTION BROWSER NEWSELECTION (QUOTE REPLACE))) ((LASTMOUSESTATE MIDDLE) (* ; "Add this item to the selection") (SELECTC SELECTIONSTATE (TS.ADDING (TB.SHOW.SELECTION BROWSER OLDSELECTION (QUOTE ERASE))) (TS.IDLE) (TB.UNDOSELECTION)) (SETQ SELECTIONSTATE (COND ((NOT (fetch TISELECTED of NEWSELECTION)) (TB.SHOW.SELECTION BROWSER NEWSELECTION (QUOTE REPLACE)) TS.ADDING) (T TS.IDLE)))) ((LASTMOUSESTATE RIGHT) (* ; "Extend: either up or down, or shrink a selection. This is messy") (SETQ SEL# (fetch TI# of NEWSELECTION)) (SETQ OLDSEL# (AND OLDSELECTION (fetch TI# of OLDSELECTION))) (SELECTC SELECTIONSTATE (TS.EXTENDING.HI (COND ((> SEL# OLDSEL#) (* ; "Extend further") (TB.CONSIDERRANGE (ADD1 OLDSEL#) SEL# CTRLDOWN)) (T (* ; "Shrinking back") (TB.RECONSIDERRANGE (ADD1 (COND ((> SEL# LAST#) SEL#) (T (SETQ SELECTIONSTATE TS.IDLE) LAST#))) OLDSEL#)))) (TS.EXTENDING.LO (COND ((< SEL# OLDSEL#) (* ; "Extend further") (TB.CONSIDERRANGE SEL# (SUB1 OLDSEL#) CTRLDOWN)) (T (* ; "Shrinking back") (TB.RECONSIDERRANGE OLDSEL# (SUB1 (COND ((< SEL# FIRST#) SEL#) (T (SETQ SELECTIONSTATE TS.IDLE) FIRST#))))))) (TS.SHRINKING.HI (COND ((>= SEL# OLDSEL#) (* ; "Shrinking less") (TB.RECONSIDERRANGE (ADD1 OLDSEL#) (COND ((< SEL# LAST#) SEL#) (T (SETQ SELECTIONSTATE TS.IDLE) LAST#)))) ((>= SEL# FIRST#) (* ; "Shrinking further") (TB.DECONSIDERRANGE (ADD1 SEL#) OLDSEL#)) (T (* ; "Too far to shrink") (TB.RECONSIDERRANGE FIRST# LAST#) (SETQ SELECTIONSTATE TS.IDLE)))) (TS.SHRINKING.LO (COND ((<= SEL# OLDSEL#) (* ; "Shrinking less") (TB.RECONSIDERRANGE (COND ((> SEL# FIRST#) SEL#) (T (SETQ SELECTIONSTATE TS.IDLE) FIRST#)) (SUB1 OLDSEL#))) ((<= SEL# LAST#) (* ; "Shrinking further") (TB.DECONSIDERRANGE OLDSEL# (SUB1 SEL#))) (T (* ; "Too far to shrink") (TB.RECONSIDERRANGE FIRST# LAST#) (SETQ SELECTIONSTATE TS.IDLE)))) (COND ((<= FIRST# LAST#) (* ; "Something is already selected, so we can think about extending.") (COND ((NEQ SELECTIONSTATE TS.IDLE) (* ; "Cancel any selection we were thinking about") (TB.UNDOSELECTION))) (SETQ CTRLDOWN (SHIFTDOWNP (QUOTE CTRL))) (SETQ SELECTIONSTATE (COND ((> SEL# LAST#) (TB.CONSIDERRANGE (ADD1 LAST#) SEL# CTRLDOWN) TS.EXTENDING.HI) ((< SEL# FIRST#) (TB.CONSIDERRANGE SEL# (SUB1 FIRST#) CTRLDOWN) TS.EXTENDING.LO) ((> SEL# (LRSH (+ LAST# FIRST#) 1)) (* ; "we are closer to the high end, but inside. Shrink from the top, but only if we are pointing at a contigous selection") (if (TB.CONTIGUOUS.SELP BROWSER SEL# (SUB1 LAST#)) then (TB.DECONSIDERRANGE (ADD1 SEL#) LAST#) TS.SHRINKING.HI else TS.IDLE)) (T (* ; "We are closer to the low end, so shrink from bottom") (if (TB.CONTIGUOUS.SELP BROWSER (ADD1 FIRST#) SEL#) then (TB.DECONSIDERRANGE FIRST# (SUB1 SEL#)) TS.SHRINKING.LO else TS.IDLE))))))))) (SETQ OLDLASTMOUSEBUTTONS LASTMOUSEBUTTONS) (SETQ OLDSELECTION NEWSELECTION)))))) ) (TB.CONTIGUOUS.SELP (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 20-Jan-88 22:16 by bvm") (* ;; "true if all the elements of ITEMS from FIRST# to LAST# are selected (or deleted or unselectable)") (for I from FIRST# to LAST# bind ITEM always (OR (fetch TISELECTED of (SETQ ITEM (TB.NTH.ITEM BROWSER I))) (fetch TIDELETED of ITEM) (fetch TIUNSELECTABLE of ITEM)))) ) (TB.DECONSIDERRANGE (LAMBDA (FIRST# LAST#) (* ; "Edited 20-Jan-88 22:08 by bvm") (* ;;; "Change display so that items from FIRST# to LAST# are marked as unselected.") (DECLARE (USEDFREE BROWSER FIRSTVISIBLE# LASTVISIBLE#)) (for I from (IMAX FIRST# FIRSTVISIBLE#) to (IMIN LAST# LASTVISIBLE#) do (TB.SHOW.SELECTION BROWSER (TB.NTH.ITEM BROWSER I) (QUOTE ERASE)))) ) (TB.CONSIDERRANGE (LAMBDA (FIRST# LAST# EVENIFDELETED) (* ; "Edited 20-Jan-88 22:08 by bvm") (* ;;; "Change display so that items from FIRST# to LAST# are marked as selected. Deleted items are not selected unless EVENIFDELETED is true") (DECLARE (USEDFREE BROWSER FIRSTVISIBLE# LASTVISIBLE#)) (for I from (IMAX FIRST# FIRSTVISIBLE#) to (IMIN LAST# LASTVISIBLE#) bind ITEM do (SETQ ITEM (TB.NTH.ITEM BROWSER I)) (COND ((AND (NOT (fetch TIUNSELECTABLE of ITEM)) (OR EVENIFDELETED (NOT (fetch TIDELETED of ITEM)))) (TB.SHOW.SELECTION BROWSER ITEM (QUOTE REPLACE)))))) ) (TB.DESELECTRANGE (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 20-Jan-88 22:09 by bvm") (* ;;; "Mark internally items FIRST# thru LAST# as unselected. Keeps TBFIRSTSELECTEDITEM and TBLASTSELECTEDITEM up to date. Assumes display has already been appropriately modified--use TB.UNSELECT.ALL.ITEMS to do both") (LET ((FIRSTSEL (fetch TBFIRSTSELECTEDITEM of BROWSER)) (LASTSEL (fetch TBLASTSELECTEDITEM of BROWSER))) (if (< FIRST# FIRSTSEL) then (SETQ FIRST# FIRSTSEL)) (if (> LAST# LASTSEL) then (SETQ LAST# LASTSEL)) (if (<= FIRST# LAST#) then (for I from FIRST# to LAST# do (replace TISELECTED of (TB.NTH.ITEM BROWSER I) with NIL)) (COND ((EQ FIRST# FIRSTSEL) (replace TBFIRSTSELECTEDITEM of BROWSER with (COND ((TB.FIND.SELECTED.ITEM BROWSER (ADD1 LAST#) LASTSEL)) (T (replace TBLASTSELECTEDITEM of BROWSER with 0) (* ; "Null selection indicated by first GT last.") (ADD1 (fetch (TABLEBROWSER TB#ITEMS) of BROWSER)))))) ((EQ LAST# LASTSEL) (replace TBLASTSELECTEDITEM of BROWSER with (OR (TB.REV.FIND.SELECTED.ITEM BROWSER FIRSTSEL (SUB1 FIRST#)) 1))))))) ) (TB.RECONSIDERRANGE (LAMBDA (FIRST# LAST#) (* ; "Edited 20-Jan-88 22:09 by bvm") (* ;;; "Change display so that messages from FIRST# to LAST# are marked as selected or unselected according to the truth of the matter.") (DECLARE (USEDFREE BROWSER FIRSTVISIBLE# LASTVISIBLE#)) (for I from (IMAX FIRST# FIRSTVISIBLE#) to (IMIN LAST# LASTVISIBLE#) bind ITEM do (TB.SHOW.SELECTION BROWSER (SETQ ITEM (TB.NTH.ITEM BROWSER I)) (COND ((fetch TISELECTED of ITEM) (QUOTE REPLACE)) (T (QUOTE ERASE)))))) ) (TB.SELECTRANGE (LAMBDA (BROWSER FIRST# LAST# EVENIFDELETED) (* ; "Edited 20-Jan-88 22:10 by bvm") (* ;;; "Mark internally items FIRST# thru LAST# as selected. Do not select deleted messages unless EVENIFDELETED is true. Keeps TBFIRSTSELECTEDITEM and TBLASTSELECTEDITEM up to date. Assumes display has already been appropriately modified") (PROG ((FIRSTSEL (fetch TBFIRSTSELECTEDITEM of BROWSER)) (LASTSEL (fetch TBLASTSELECTEDITEM of BROWSER)) ITEM) (for I from FIRST# to LAST# do (SETQ ITEM (TB.NTH.ITEM BROWSER I)) (COND ((AND (NOT (fetch TIUNSELECTABLE of ITEM)) (OR EVENIFDELETED (NOT (fetch TIDELETED of ITEM)))) (replace TISELECTED of ITEM with T)))) (COND ((OR (> FIRSTSEL LASTSEL) (< FIRST# (fetch TBFIRSTSELECTEDITEM of BROWSER))) (replace TBFIRSTSELECTEDITEM of BROWSER with FIRST#))) (COND ((OR (> FIRSTSEL LASTSEL) (> LAST# (fetch TBLASTSELECTEDITEM of BROWSER))) (replace TBLASTSELECTEDITEM of BROWSER with LAST#))))) ) (TB.UNDOSELECTION (LAMBDA NIL (* bvm%: " 6-Sep-85 15:04") (* ;;; "Restore browser to state before any selections were attempted") (DECLARE (USEDFREE FIRSTVISIBLE# LASTVISIBLE# SELECTIONSTATE)) (TB.RECONSIDERRANGE FIRSTVISIBLE# LASTVISIBLE#) (SETQ SELECTIONSTATE TS.IDLE)) ) (TB.FIND.SELECTED.ITEM (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 20-Jan-88 22:11 by bvm") (find I from (OR FIRST# 1) to (OR LAST# (fetch TB#ITEMS of BROWSER)) suchthat (fetch TISELECTED of (TB.NTH.ITEM BROWSER I)))) ) (TB.REV.FIND.SELECTED.ITEM (LAMBDA (BROWSER FIRST# LAST#) (* ; "Edited 20-Jan-88 22:11 by bvm") (find I from (OR LAST# (fetch TB#ITEMS of BROWSER)) to (OR FIRST# 1) by -1 suchthat (fetch TISELECTED of (TB.NTH.ITEM BROWSER I)))) ) ) (DEFINEQ (TB.COPYBUTTONEVENTFN (LAMBDA (WINDOW) (* ; "Edited 22-Jan-88 12:08 by bvm") (* ;;; "copy select an item from the window.") (PROG ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) SELECTIONREGION COPYFN CURRENTITEM NEWITEM LASTX LASTY) (COND ((OR (NULL (SETQ COPYFN (fetch (TABLEBROWSER TBCOPYFN) of BROWSER))) (NULL (fetch (TABLEBROWSER TBITEMS) of BROWSER))) (RETURN (TOTOPW WINDOW)))) (SETQ SELECTIONREGION (DSPCLIPPINGREGION NIL WINDOW)) LP (TOTOPW WINDOW) (COND ((AND (SETQ NEWITEM (AND (INSIDEP SELECTIONREGION (SETQ LASTX (LASTMOUSEX WINDOW)) (SETQ LASTY (LASTMOUSEY WINDOW))) (TB.ITEM.FROM.YCOORD BROWSER LASTY))) (fetch TIUNCOPYSELECTABLE of NEWITEM)) (SETQ NEWITEM NIL))) (COND ((NEQ CURRENTITEM NEWITEM) (COND (CURRENTITEM (* ; "turn off old selection.") (TB.SHOW.COPY.SELECTION BROWSER CURRENTITEM))) (COND ((SETQ CURRENTITEM NEWITEM) (TB.SHOW.COPY.SELECTION BROWSER CURRENTITEM))))) (* ; "wait for a button up or move out of region") LP2 (BLOCK) (COND ((NOT (.COPYKEYDOWNP.)) (* ; "Finished, copy selected item") (COND (CURRENTITEM (TB.SHOW.COPY.SELECTION BROWSER CURRENTITEM) (CL:FUNCALL COPYFN BROWSER CURRENTITEM))) (RETURN)) ((MOUSESTATE UP) (* ; "button up, no action") (GO LP2)) (T (GO LP))))) ) (TB.SHOW.COPY.SELECTION (LAMBDA (BROWSER ITEM) (* ; "Edited 22-Jan-88 16:38 by bvm") (* ;;; "underline this item in browser") (BLTSHADE GRAYSHADE (fetch (TABLEBROWSER TBWINDOW) of BROWSER) TB.LEFT.MARGIN (TB.BOTTOM.OF.ITEM BROWSER ITEM) NIL 2 (QUOTE INVERT))) ) ) (* ; "Misc state change") (DEFINEQ (TB.BROWSER.BUSY (LAMBDA (BROWSER) (* bvm%: " 8-Sep-85 16:42") (RESETFORM (CURSOR TB.CROSSCURSOR) (BLOCK 1000)))) (TB.CLOSE/SHRINK (LAMBDA (WINDOW FLG) (* ; "Edited 20-Jan-88 23:36 by bvm") (RESETLST (LET ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER))) HOW?) (COND ((OBTAIN.MONITORLOCK (fetch (TABLEBROWSER TBLOCK) of BROWSER) T T) (COND ((AND (SETQ HOW? (fetch (TABLEBROWSER TBCLOSEFN) of BROWSER)) (SETQ HOW? (CL:FUNCALL HOW? BROWSER WINDOW FLG))) (COND ((NEQ HOW? (QUOTE DON'T)) (TB.PROCESS (BQUOTE ((\, HOW?) (QUOTE (\, BROWSER)) (QUOTE (\, WINDOW)) (QUOTE (\, FLG)))) (QUOTE TB.UPDATE)))) (QUOTE DON'T)) (T (TB.FINISH.CLOSE BROWSER WINDOW FLG T) NIL))) (T (printout PROMPTWINDOW T "Browser is busy, can't close") (QUOTE DON'T)))))) ) (TB.CLOSEFN (LAMBDA (WINDOW) (* bvm%: " 6-Sep-85 12:25") (TB.CLOSE/SHRINK WINDOW (QUOTE CLOSE)))) (TB.FINISH.CLOSE (LAMBDA (BROWSER WINDOW CLOSEFLG DONTCLOSE) (* bvm%: " 9-Sep-85 00:42") (* ;;; "Takes care of closing/shrinking WINDOW after an update or expunge. DONTCLOSE is true if neither occurred, in which case we are being called directly from the CLOSEFN and should not close/shrink the window ourselves") (WITH.MONITOR (fetch (TABLEBROWSER TBLOCK) of BROWSER) (SELECTQ CLOSEFLG (CLOSE (SETQ WINDOW (TB.FLUSH.WINDOW BROWSER WINDOW)) (OR DONTCLOSE (CLOSEW WINDOW))) (SHRINK (WINDOWADDPROP WINDOW (QUOTE EXPANDFN) (FUNCTION TB.EXPANDFN)) (WINDOWDELPROP WINDOW (QUOTE SHRINKFN) (FUNCTION TB.SHRINKFN)) (OR DONTCLOSE (SHRINKW WINDOW))) NIL))) ) (TB.FLUSH.WINDOW (LAMBDA (BROWSER WINDOW) (* ; "Edited 20-Jan-88 22:42 by bvm") (WINDOWDELPROP WINDOW (QUOTE CLOSEFN) (FUNCTION TB.CLOSEFN)) (ERSETQ (LET ((FN (fetch (TABLEBROWSER TBAFTERCLOSEFN) of BROWSER))) (AND FN (CL:FUNCALL FN BROWSER WINDOW)))) (replace (TABLEBROWSER TBITEMS) of BROWSER with (replace (TABLEBROWSER TBWINDOW) of BROWSER with (replace (TABLEBROWSER TBTAILHINT) of BROWSER with NIL))) (WINDOWPROP WINDOW (QUOTE TABLEBROWSER) NIL) (OR (OPENWP WINDOW) (OPENWP (WINDOWPROP WINDOW (QUOTE ICONWINDOW))))) ) (TB.SET.FONT (LAMBDA (BROWSER FONT) (* ; "Edited 10-Feb-88 11:07 by bvm:") (* ;;; "Sets/changes font of TABLEBROWSER to be FONT. Clears window. Caller is responsible for repainting window") (LET ((FONTGIVEN FONT) (WINDOW (fetch (TABLEBROWSER TBWINDOW) of BROWSER)) WIDTH HEIGHT ASCENT TOTALHEIGHT ORIGIN FN EXTENT HW) (CLEARW WINDOW) (SETQ FONT (FONTCREATE (OR FONT (fetch (TABLEBROWSER TBFONT) of BROWSER) (DSPFONT NIL WINDOW)))) (DSPFONT FONT WINDOW) (DSPRIGHTMARGIN MAX.SMALLP WINDOW) (LINELENGTH T WINDOW) (replace (TABLEBROWSER TBFONT) of BROWSER with FONT) (replace (TABLEBROWSER TBFONTHEIGHT) of BROWSER with (SETQ HEIGHT (FONTPROP FONT (QUOTE HEIGHT)))) (if (NOT (fetch (TABLEBROWSER TBHEIGHTEXPLICIT) of BROWSER)) then (* ; "Compute item heights. Don't do this if user gave an explicit height.") (replace (TABLEBROWSER TBITEMHEIGHT) of BROWSER with (SETQ HEIGHT (TIMES HEIGHT (fetch (TABLEBROWSER TB#LINESPERITEM) of BROWSER)))) (replace (TABLEBROWSER TBFONTASCENT) of BROWSER with (SETQ ASCENT (FONTPROP FONT (QUOTE ASCENT)))) (replace (TABLEBROWSER TBBASELINE) of BROWSER with (- HEIGHT ASCENT)) else (SETQ HEIGHT (fetch (TABLEBROWSER TBITEMHEIGHT) of BROWSER))) (replace (TABLEBROWSER TBORIGIN) of BROWSER with (SETQ ORIGIN (fetch (REGION PTOP) of (DSPCLIPPINGREGION NIL WINDOW)))) (SETQ TOTALHEIGHT (TIMES (fetch (TABLEBROWSER TB#ITEMS) of BROWSER) HEIGHT)) (WINDOWPROP WINDOW (QUOTE EXTENT) (replace (TABLEBROWSER TBEXTENT) of BROWSER with (create REGION LEFT _ 0 BOTTOM _ (- ORIGIN TOTALHEIGHT) WIDTH _ 0 HEIGHT _ TOTALHEIGHT))) (* ; "Let extent width be zero until we print something") (replace (TABLEBROWSER TBMAXXPOS) of BROWSER with 0) (if (SETQ HW (fetch (TABLEBROWSER TBHEADINGWINDOW) of BROWSER)) then (* ; "Fix extent of header window, too. Be sure to account for different size of borders, if any") (LET ((HWIDTH (TIMES 2 (- (WINDOWPROP WINDOW (QUOTE BORDER)) (WINDOWPROP HW (QUOTE BORDER)))))) (if (SETQ EXTENT (WINDOWPROP HW (QUOTE EXTENT))) then (replace (REGION WIDTH) of EXTENT with HWIDTH) else (WINDOWPROP HW (QUOTE EXTENT) (create REGION LEFT _ 0 BOTTOM _ 0 WIDTH _ HWIDTH HEIGHT _ -1))))) (COND ((AND FONTGIVEN (SETQ FN (fetch (TABLEBROWSER TBFONTCHANGEFN) of BROWSER))) (* ; "Notify application program of font change") (CL:FUNCALL FN BROWSER WINDOW))))) ) (TB.SHRINKFN (LAMBDA (WINDOW) (* bvm%: " 6-Sep-85 12:14") (TB.CLOSE/SHRINK WINDOW (QUOTE SHRINK)))) (TB.EXPANDFN (LAMBDA (WINDOW) (* ; "Edited 27-Jan-88 16:53 by bvm") (* ;;; "If browser changed while it was shrunk, update display accordingly") (LET ((BROWSER (WINDOWPROP WINDOW (QUOTE TABLEBROWSER)))) (WITH.MONITOR (fetch (TABLEBROWSER TBLOCK) of BROWSER) (LET ((FIRSTCHANGEDITEM# (fetch (TABLEBROWSER TBUPDATEFROMHERE) of BROWSER)) REGION FN) (* ; "Restore SHRINKFN prop if necessary") (WINDOWADDPROP WINDOW (QUOTE SHRINKFN) (FUNCTION TB.SHRINKFN) T) (COND (FIRSTCHANGEDITEM# (* ; "Browser has changed since shrinking") (TB.DISPLAY.LINES BROWSER (IMAX FIRSTCHANGEDITEM# (TB.FIRST.VISIBLE.ITEM# BROWSER (SETQ REGION (DSPCLIPPINGREGION NIL WINDOW)))) (TB.LAST.VISIBLE.ITEM# BROWSER REGION)) (replace (TABLEBROWSER TBUPDATEFROMHERE) of BROWSER with NIL))))))) ) (TB.FIND.PREVIOUS.TAIL (LAMBDA (BROWSER ITEM#) (* ; "Edited 20-Jan-88 23:23 by bvm") (* ;; "Return the tail of BROWSER's items whose CADR is ITEM#. Assumes ITEM# at least 2 and not greater than number of items") (LET (TAIL TAILN) (if (OR (NULL (SETQ TAIL (fetch (TABLEBROWSER TBTAILHINT) of BROWSER))) (< ITEM# (SETQ TAILN (ADD1 (fetch (TABLEITEM TI#) of (CAR TAIL)))))) then (* ; "Can't use the hint") (SETQ TAIL (fetch (TABLEBROWSER TBITEMS) of BROWSER)) (SETQ TAILN 2)) (* ;; "TAILN is the number of (CADR TAIL). Want to get TAIL pointing to one before the requested number") (while (< TAILN ITEM#) do (SETQ TAIL (CDR TAIL)) (add TAILN 1)) (if (OR (NULL TAIL) (NEQ TAILN ITEM#)) then (HELP "Failed to find item tail" ITEM#)) TAIL)) ) (TB.RENUMBER.TAIL (LAMBDA (BROWSER TAIL FIRST#) (* ; "Edited 20-Jan-88 23:22 by bvm") (* ;; "Renumbers all of BROWSER's items from TAIL onward, giving (CAR TAIL) the number FIRST#. Also updates tail hint.") (for ITEM in TAIL as I from FIRST# do (replace TI# of ITEM with I)) (replace (TABLEBROWSER TBTAILHINT) of BROWSER with TAIL)) ) ) (* ; "Misc") (DEFINEQ (TB.PROCESS (LAMBDA (FORM NAME ALLOWLOGOUT RESTARTABLE) (* bvm%: "25-Mar-84 17:16") (* ;;; "Creates a process running FORM which by default is not restartable and will not permit LOGOUT while it is running") (ADD.PROCESS FORM (QUOTE NAME) NAME (QUOTE RESTARTABLE) (OR RESTARTABLE (QUOTE NO)) (QUOTE BEFOREEXIT) (COND (ALLOWLOGOUT NIL) (T (QUOTE DON'T))))) ) ) (RPAQ? TB.DELETEDLINEHEIGHT 1) (RPAQQ TB.SELECTION.BITMAP #*(8 9)L@@@N@@@O@@@OH@@OL@@OH@@O@@@N@@@L@@@) (RPAQ TB.CROSSCURSOR (CURSORCREATE (QUOTE #*(16 16)L@@CN@@GG@@NCHALALCH@NG@@GN@@CL@@CL@@GN@@NG@ALCHCHALG@@NN@@GL@@C ) (QUOTE NIL) 8 8)) (DECLARE%: EVAL@COMPILE DONTCOPY (FILESLOAD (SOURCE) TABLEBROWSERDECLS) (RPAQQ TOCSTATES ((TS.IDLE 0) (TS.REPLACING 1) (TS.ADDING 2) (TS.REMOVING 3) (TS.EXTENDING.HI 4) (TS.EXTENDING.LO 5) (TS.SHRINKING.HI 6) (TS.SHRINKING.LO 7))) (DECLARE%: EVAL@COMPILE (RPAQQ TS.IDLE 0) (RPAQQ TS.REPLACING 1) (RPAQQ TS.ADDING 2) (RPAQQ TS.REMOVING 3) (RPAQQ TS.EXTENDING.HI 4) (RPAQQ TS.EXTENDING.LO 5) (RPAQQ TS.SHRINKING.HI 6) (RPAQQ TS.SHRINKING.LO 7) (CONSTANTS (TS.IDLE 0) (TS.REPLACING 1) (TS.ADDING 2) (TS.REMOVING 3) (TS.EXTENDING.HI 4) (TS.EXTENDING.LO 5) (TS.SHRINKING.HI 6) (TS.SHRINKING.LO 7)) ) (DECLARE%: EVAL@COMPILE (PUTPROPS .COPYKEYDOWNP. MACRO [NIL (OR (KEYDOWNP 'LSHIFT) (KEYDOWNP 'RSHIFT) (KEYDOWNP 'COPY]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS TB.CROSSCURSOR TB.SELECTION.BITMAP TB.DELETEDLINEHEIGHT) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (LOCALVARS . T) ) ) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA TB.USERDATA) ) (/DECLAREDATATYPE 'TABLEBROWSER '(FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER WORD WORD WORD WORD WORD WORD WORD WORD WORD WORD POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER) '((TABLEBROWSER 0 (FLAGBITS . 0)) (TABLEBROWSER 0 (FLAGBITS . 16)) (TABLEBROWSER 0 (FLAGBITS . 32)) (TABLEBROWSER 0 (FLAGBITS . 48)) (TABLEBROWSER 0 (FLAGBITS . 64)) (TABLEBROWSER 0 (FLAGBITS . 80)) (TABLEBROWSER 0 (FLAGBITS . 96)) (TABLEBROWSER 0 (FLAGBITS . 112)) (TABLEBROWSER 2 POINTER) (TABLEBROWSER 1 (BITS . 15)) (TABLEBROWSER 4 (BITS . 15)) (TABLEBROWSER 5 (BITS . 15)) (TABLEBROWSER 6 (BITS . 15)) (TABLEBROWSER 7 (BITS . 15)) (TABLEBROWSER 8 (BITS . 15)) (TABLEBROWSER 9 (BITS . 15)) (TABLEBROWSER 10 (BITS . 15)) (TABLEBROWSER 11 (BITS . 15)) (TABLEBROWSER 12 (BITS . 15)) (TABLEBROWSER 14 POINTER) (TABLEBROWSER 16 POINTER) (TABLEBROWSER 18 POINTER) (TABLEBROWSER 20 POINTER) (TABLEBROWSER 22 POINTER) (TABLEBROWSER 24 POINTER) (TABLEBROWSER 26 POINTER) (TABLEBROWSER 28 POINTER) (TABLEBROWSER 30 POINTER) (TABLEBROWSER 32 POINTER) (TABLEBROWSER 34 POINTER) (TABLEBROWSER 36 POINTER) (TABLEBROWSER 38 POINTER) (TABLEBROWSER 40 POINTER) (TABLEBROWSER 42 POINTER) (TABLEBROWSER 44 POINTER) (TABLEBROWSER 46 POINTER) (TABLEBROWSER 48 POINTER)) '50) (/DECLAREDATATYPE 'TABLEITEM '(FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG POINTER WORD WORD) '((TABLEITEM 0 (FLAGBITS . 0)) (TABLEITEM 0 (FLAGBITS . 16)) (TABLEITEM 0 (FLAGBITS . 32)) (TABLEITEM 0 (FLAGBITS . 48)) (TABLEITEM 0 (FLAGBITS . 64)) (TABLEITEM 0 (FLAGBITS . 80)) (TABLEITEM 0 (FLAGBITS . 96)) (TABLEITEM 0 (FLAGBITS . 112)) (TABLEITEM 2 POINTER) (TABLEITEM 1 (BITS . 15)) (TABLEITEM 4 (BITS . 15))) '6) (ADDTOVAR SYSTEMRECLST (DATATYPE TABLEBROWSER ((TBREADY FLAG) (TBHEIGHTEXPLICIT FLAG) (NIL 6 FLAG) (TBITEMS POINTER) (TB#ITEMS WORD) (TB#DELETED WORD) (TB#LINESPERITEM WORD) (TBFIRSTSELECTEDITEM WORD) (TBLASTSELECTEDITEM WORD) (TBITEMHEIGHT WORD) (TBMAXXPOS WORD) (TBFONTHEIGHT WORD) (TBFONTASCENT WORD) (TBBASELINE WORD) (TBWINDOW POINTER) (TBLOCK POINTER) (TBUSERDATA POINTER) (TBFONT POINTER) (TBEXTENT POINTER) (TBUPDATEFROMHERE POINTER) (TBCOLUMNS POINTER) (TBPRINTFN POINTER) (TBCOPYFN POINTER) (TBFONTCHANGEFN POINTER) (TBCLOSEFN POINTER) (TBAFTERCLOSEFN POINTER) (TBTITLEEVENTFN POINTER) (TBLINETHICKNESS POINTER) (TBORIGIN POINTER) (TBTAILHINT POINTER) (TBHEADINGWINDOW POINTER) (NIL POINTER))) (DATATYPE TABLEITEM ((TISELECTED FLAG) (TIDELETED FLAG) (TIUNDELETABLE FLAG) (TIUNSELECTABLE FLAG) (TIUNCOPYSELECTABLE FLAG) (NIL 3 FLAG) (TIDATA POINTER) (TI# WORD) (NIL WORD))) ) (PUTPROPS TABLEBROWSER COPYRIGHT ("Venue & Xerox Corporation" 1985 1986 1987 1988 1990 1993 1994 1995 1999 2018 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (3214 7565 (TB.MAKE.BROWSER 3224 . 6340) (TB.REPLACE.ITEMS 6342 . 7563)) (7566 16585 ( TB.DELETE.ITEM 7576 . 8010) (TB.UNDELETE.ITEM 8012 . 8591) (TB.INSERT.ITEM 8593 . 10600) ( TB.REMOVE.ITEM 10602 . 12134) (TB.NORMALIZE.ITEM 12136 . 12849) (TB.REDISPLAY.ITEMS 12851 . 15170) ( TB.SELECT.ITEM 15172 . 15477) (TB.UNSELECT.ITEM 15479 . 15834) (TB.UNSELECT.ALL.ITEMS 15836 . 16583)) (16586 21112 (TB.NUMBER.OF.ITEMS 16596 . 17078) (TB.NTH.ITEM 17080 . 18154) (TB.COLLECT.ITEMS 18156 . 18527) (TB.MAP.ITEMS 18529 . 18893) (TB.MAP.DELETED.ITEMS 18895 . 19342) (TB.MAP.SELECTED.ITEMS 19344 . 19951) (TB.FIND.ITEM 19953 . 20826) (TB.ITEM.SELECTED? 20828 . 20969) (TB.ITEM.DELETED? 20971 . 21110)) (21113 21954 (TB.CLEAR.LINE 21123 . 21535) (TB.USERDATA 21537 . 21803) (TB.WINDOW 21805 . 21952)) (21979 32237 (TB.REPAINTFN 21989 . 22400) (TB.RESHAPEFN 22402 . 23240) (TB.SCROLLFN 23242 . 23793) (TB.DISPLAY.LINES 23795 . 25052) (TB.PRINT.LINE 25054 . 25574) (TB.FIRST.VISIBLE.ITEM# 25576 . 26013) (TB.LAST.VISIBLE.ITEM# 26015 . 26488) (TB.ITEM.VISIBLE? 26490 . 27010) (TB.ITEM.FROM.YCOORD 27012 . 27322) (TB.BOTTOM.OF.ITEM 27324 . 27737) (TB.SHOW.DELETION 27739 . 28361) (TB.SHOW.SELECTION 28363 . 29132) (TB.UPDATE.DISPLAY 29134 . 31419) (TB.ITEM.UPDATABLE? 31421 . 32235)) (32264 43677 ( TB.BUTTONEVENTFN 32274 . 32733) (TB.DO.UNLESS.BUSY 32735 . 33042) (TB.DO.ITEM.SELECTION 33044 . 39118) (TB.CONTIGUOUS.SELP 39120 . 39487) (TB.DECONSIDERRANGE 39489 . 39857) (TB.CONSIDERRANGE 39859 . 40430 ) (TB.DESELECTRANGE 40432 . 41494) (TB.RECONSIDERRANGE 41496 . 41994) (TB.SELECTRANGE 41996 . 42936) ( TB.UNDOSELECTION 42938 . 43215) (TB.FIND.SELECTED.ITEM 43217 . 43440) (TB.REV.FIND.SELECTED.ITEM 43442 . 43675)) (43678 45177 (TB.COPYBUTTONEVENTFN 43688 . 44908) (TB.SHOW.COPY.SELECTION 44910 . 45175)) ( 45212 51519 (TB.BROWSER.BUSY 45222 . 45339) (TB.CLOSE/SHRINK 45341 . 45973) (TB.CLOSEFN 45975 . 46076) (TB.FINISH.CLOSE 46078 . 46731) (TB.FLUSH.WINDOW 46733 . 47260) (TB.SET.FONT 47262 . 49560) ( TB.SHRINKFN 49562 . 49665) (TB.EXPANDFN 49667 . 50432) (TB.FIND.PREVIOUS.TAIL 50434 . 51176) ( TB.RENUMBER.TAIL 51178 . 51517)) (51541 51914 (TB.PROCESS 51551 . 51912))))) STOP \ No newline at end of file diff --git a/library/TABLEBROWSER.LCOM b/library/TABLEBROWSER.LCOM index 5e045bbc2feb56c18e33d14256bc86b69e917ea0..b3d5cc61d45ab4fbb22b0609cb956b64bbb23b61 100644 GIT binary patch delta 1714 zcmah~Pi)&%7_U>>ZY_ptEwpKe^ewD35lZIw>^N~KWohH2UJ^UlPP3G%qFda=RkoJ? zLFx*ckhpN70TsUoA3u6u=zWfz#%g`M!h(Gh0(ln?IeUE-jIH&R%?&`(DSado2|#6W!>T}_ zwT@^{l)$k-hz+KdoII_|NmEWiz^e@>cqstvcFM@UKT%w_*2p&FU-*Be5RJv-5?rq> z-mF^du(2|hfZ%LWH-K%OX@9!AK~J#uj5Z5rprv3?4;phwS#`nI*-QdEir0|#|V=dD0e%U zpF1uuA2#mQzI*WL87JR=+j-V|o-EMveYLCe{@y?Hs!K;B{lUi_L5w+=PtVD^R-ktC zkde*2Ry1V8q%Hyyd9sl4k3|t=<#I|ZsT9RaEeVdDBxE!5LkdX}}~j+CKyx zJHAfxa&~Lnbm!P#aYi(Iou_L`e@77UBHg5@h|&t=QMTNJAf>6}CdudCVYtSA?#FKG z?*~TdMVDjl*Rz)^O#}Ov55MNgp>e*;T_OYK!EGv`*z8ZW6adF#Ft4aaQJ0TY0gmzB ziYRz1eAL5(Vo^vLh3TA9C@5-1moti{QdeS-)>JcTOv|bX@mQam&d5q;#w2>tpn6(g zJit;Mw+kW-Yp(Zgz$e5 znCvc%5Y0MIKC&jLzJfJM9$Q!X+qEIig_M>qP{7DDEH#%fwPEtbQj*+RdXB-L)cjQ^eJ> delta 1529 zcmZWpPi)&{6tCT`&Dy#OVqK>W!PoFF0VTCRJBbq}wMpxwZc^K`opvo9q%?n=%uBMg zou~kn3wOqo5C^ow;EL1{juRaSp$TmVhPDF|$4MM}L5NfNoTM!=IXLh8z2E!2_r3S* z+ka3Gf2TfOhTo|3w`{>+&FwtlRG0U=u6XPrw=dlkl?=_2? z_3Mp_T`ZvD`;F$-t8ru|L%K9C8(KE88j?+E$v~AF@+}n$c5xT+p)gAA*fuhDx9U6F z2uFhI<~9-LL=*~ze5kOoO~e@AiDQy@Fv%B<3!*Q;_)~ILn$x9(Db2&L)TN$UbsmMI zJd4q$wNWb%%-Ej11KUFm?N;?;2Yll=cH}?cc;>t37Ba&Q`CuVq(~D!4 z*V8`bou@tY>>U#NiE^g@&fTLKW%{gx5;J`FsM+VoLJX~^)+Alk5XKm#C38v58Ioa= zP9n^TaR1#2SWka{1!ECq6Gq3K%$cT2+Q*3kT6fTlwAu;bBD@eL>SOklCHiI|a6@Jg7Tn-g&g|S9UCKpPv&1r0KH45j7FM&a4JvXkJxb zHxb9jh(}%0%oSOgS62vu?*U*SdxH{MH?uzsQddDVR^DoN|H1IuqqDPx?j*cqFyVvQ z_Gz*6_h8`Z+M}T^mgvNI;Ai9Uo`|$uHyg=Jx)|fox~v#EUFz0=qfs{!5#5MWc#jSj zC6_X^xvZ>dvXa)Nw5%#95l^d6_a!V4mV$>7#J(0p;mZ_SXT=od{Y>O zJH?CeL2(NHDvSedO;8v%N-y;Dh=IM*Mevj^!Hw!U*e`h?Us{AliRtH9#^J!z(v%Z1 z#*rQDWC#N_QL1o85p*_{Vb8ZY)!yXISQ@vL_foeKv@^SvIOj` z@u@^lqlL(cD?s!w=T!1K3L^YzEx=4=^!zF4_n*9643sJwJgJP6i$1Jyuv&d( Date: Mon, 22 Feb 2021 18:09:07 -0800 Subject: [PATCH 35/37] Restore fontprofile (#200) * restore FONTPROFILE and PATCH * extra (dup) version --- sources/FONTPROFILE | 1 + sources/FONTPROFILE.~1~ | 1 + sources/FONTPROFILEPATCH | 1 + sources/FONTPROFILEPATCH.LCOM | Bin 0 -> 10893 bytes 4 files changed, 3 insertions(+) create mode 100644 sources/FONTPROFILE create mode 100644 sources/FONTPROFILE.~1~ create mode 100644 sources/FONTPROFILEPATCH create mode 100644 sources/FONTPROFILEPATCH.LCOM diff --git a/sources/FONTPROFILE b/sources/FONTPROFILE new file mode 100644 index 00000000..23f0bb6a --- /dev/null +++ b/sources/FONTPROFILE @@ -0,0 +1 @@ +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "28-Jun-99 22:10:46" {DSK}medley3.5>sources>FONTPROFILE.;2 29960 changes to%: (VARS FONTPROFILECOMS) (ALISTS (FONTDEFS NS) (FONTDEFS BIGGERNS)) previous date%: " 9-Jul-91 18:38:04" {DSK}medley3.5>sources>FONTPROFILE.;1) (* ; " Copyright (c) 1986, 1988, 1990, 1991, 1999 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT FONTPROFILECOMS) (RPAQQ FONTPROFILECOMS ( (* ;; "FONT") (ALISTS (FONTDEFS HUGE BIG MEDIUM STANDARD BIGGER NS BIGGERNS)) (ADDVARS (CACHEDMENUS BreakMenu WindowMenu BackgroundMenu IconWindowMenu)) [VARS (FONTVARS '( (* ;; "standard size fonts. Assumes only DEFAULTFONT set") (BOLDFONT (FONTCOPY DEFAULTFONT 'FACE 'BOLD)) (* ; "default BOLD") (ITALICFONT (FONTCOPY DEFAULTFONT 'FACE 'ITALIC)) (LITTLEFONT DEFAULTFONT) (* ; " should usually be smaller") (TINYFONT LITTLEFONT) (* ; "and this one smaller still") (BIGFONT BOLDFONT) (* ; "should be bigger still") (TEXTFONT DEFAULTFONT) (* ; "default for text") (TEXTBOLDFONT BOLDFONT) (* ; "default for bold text") (* ;; "") (* ;; "Fonts for window system, processes") (* ;; "") (MENUFONT DEFAULTFONT T) (BOLDMENUFONT (FONTCOPY MENUFONT 'FACE 'BOLD)) (* ; "if not supplied") (INTERRUPTMENUFONT DEFAULTFONT T) (* ; "used by control-B") (DEFAULTICONFONT MENUFONT) (* ; "for shrinking windows") (BACKTRACEFONT TINYFONT T) (* ; " for backtrace in debugger") (WINDOWTITLEFONT MENUFONT) ((WINDOWTITLEFONT WINDOWTITLEFONT) NIL) (* ; " used for titles of all windows") (* ;; "") (* ;; "Fonts for Exec") (* ;; "") (PROMPTFONT LITTLEFONT) (* ; "for printing out prompts") (INPUTFONT BOLDFONT) (* ; "for user typein in Exec") (PRINTOUTFONT DEFAULTFONT) (* ; " for intermediate typin in Exec") (TTYINBOLDFONT (CONS DEFAULTFONT BOLDFONT)) (VALUEFONT DEFAULTFONT) (* ;  " for printing out values returned in Exec") (* ;; "") (* ;; "Fonts for prettyprinting") (* ;; "") (COMMENTFONT LITTLEFONT) (* ; "for comments ") (PRETTYCOMFONT BOLDFONT) (* ; " for words being defined") (CLISPFONT BOLDFONT) (* ; " for keywords & CLISP") (SYSTEMFONT DEFAULTFONT) (* ; " for %"system%" words(?)") (LAMBDAFONT BIGFONT) (* ; "for words being defined") (USERFONT BOLDFONT) (* ; " for %"user%" defined words")] (P (MOVD? 'NILL 'WINDOWTITLEFONT)) (FNS FONTSET FONTPROFILE FONTPROFILE.ADDDEVICE) (INITVARS (FONTESCAPECHAR (CHARACTER 6)) (FONTFNS) (FONTWORDS)) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (FONTSET 'STANDARD] (GLOBALVARS FONTPROFILE FONTESCAPECHAR FONTDEFS) (FNS FONTMAPARRAY) (INITVARS (\FONTMAPCACHE)) (P (SETSEPR '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) 1 FILERDTBL)))) (* ;; "FONT") (ADDTOVAR FONTDEFS [HUGE (FONTPROFILE (DEFAULTFONT 1 (MODERN 24) NIL (TERMINAL 8)) (BOLDFONT 2 (MODERN 24 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 18 MRR) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 36 BRR) NIL (MODERN 10 BRR)) (TEXTFONT 5 (CLASSIC 24) NIL (CLASSIC 10)) (TEXTBOLDFONT 7 (CLASSIC 24 BRR) NIL (CLASSIC 10 BRR] [BIG (FONTPROFILE (DEFAULTFONT 1 (MODERN 18) NIL (TERMINAL 8)) (TEXTFONT 5 (CLASSIC 18) NIL (CLASSIC 10)) (BOLDFONT 2 (MODERN 18 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 12 MRR) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 24 BRR) NIL (MODERN 10 BRR)) (TEXTBOLDFONT 7 (CLASSIC 18 BRR) NIL (CLASSIC 10 BRR] [MEDIUM (FONTPROFILE (DEFAULTFONT 1 (MODERN 14) NIL (TERMINAL 8)) (BOLDFONT 2 (MODERN 14 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 10) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 18) NIL (MODERN 10 BRR)) (TEXTFONT 5 (CLASSIC 14) NIL (CLASSIC 10)) (TEXTBOLDFONT 7 (CLASSIC 14 BRR) NIL (CLASSIC 10 BRR] [STANDARD (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (FONTPROFILE (DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8)) (ITALICFONT 1 (HELVETICA 10 MIR) (GACHA 8 MIR) (MODERN 8 MIR)) (BOLDFONT 2 (HELVETICA 10 BRR) (HELVETICA 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (HELVETICA 8) (HELVETICA 6 MIR) (MODERN 8 MIR)) (TINYFONT 6 (GACHA 8) (GACHA 6) (TERMINAL 6)) (BIGFONT 4 (HELVETICA 12 BRR) NIL (MODERN 10 BRR)) (MENUFONT 5 (HELVETICA 10)) (COMMENTFONT 6 (HELVETICA 10) (HELVETICA 8) (MODERN 8)) (TEXTFONT 7 (TIMESROMAN 10) NIL (CLASSIC 10] [BIGGER (FONTPROFILE (DEFAULTFONT 1 (GACHA 12) NIL (TERMINAL 8)) (ITALICFONT 1 (HELVETICA 12 MIR) (GACHA 8 MIR) (MODERN 8 MIR)) (BOLDFONT 2 (HELVETICA 12 BRR) (HELVETICA 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (HELVETICA 10) (HELVETICA 6 MIR) (MODERN 8 MIR)) (TINYFONT 6 (GACHA 10) (GACHA 6) (TERMINAL 6)) (BIGFONT 4 (HELVETICA 14 BRR) NIL (MODERN 10 BRR)) (MENUFONT 5 (HELVETICA 12)) (COMMENTFONT 6 (HELVETICA 12) (HELVETICA 8) (MODERN 8)) (TEXTFONT 7 (TIMESROMAN 12) NIL (CLASSIC 10] [NS (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (COMMENTLINELENGTH 116 . 126) (FIRSTCOL . 60) (PRETTYLCOM . 25) (FONTESCAPECHAR . %) (FONTPROFILE (DEFAULTFONT 1 (TERMINAL 10) (TERMINAL 8) (TERMINAL 8)) (ITALICFONT 1 (MODERN 10 BIR) (MODERN 8 BIR) (MODERN 8 BIR)) (BOLDFONT 2 (MODERN 10 BRR) (MODERN 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 8) (MODERN 6 MIR) (MODERN 8 MIR)) (BIGFONT 4 (MODERN 12 BRR) (MODERN 10 BRR) (MODERN 10 BRR] [BIGGERNS (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (COMMENTLINELENGTH 116 . 126) (FIRSTCOL . 60) (PRETTYLCOM . 25) (FONTESCAPECHAR . %) (FONTPROFILE (DEFAULTFONT 1 (TERMINAL 12) (TERMINAL 8) (TERMINAL 8)) (ITALICFONT 1 (MODERN 12 BIR) (MODERN 8 BIR) (MODERN 8 BIR)) (BOLDFONT 2 (MODERN 12 BRR) (MODERN 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 10) (MODERN 6 MIR) (MODERN 8 MIR)) (BIGFONT 4 (MODERN 14 BRR) (MODERN 10 BRR) (MODERN 10 BRR]) (ADDTOVAR CACHEDMENUS BreakMenu WindowMenu BackgroundMenu IconWindowMenu) (RPAQQ FONTVARS ( (* ;; "standard size fonts. Assumes only DEFAULTFONT set") (BOLDFONT (FONTCOPY DEFAULTFONT 'FACE 'BOLD)) (* ; "default BOLD") (ITALICFONT (FONTCOPY DEFAULTFONT 'FACE 'ITALIC)) (LITTLEFONT DEFAULTFONT) (* ; " should usually be smaller") (TINYFONT LITTLEFONT) (* ; "and this one smaller still") (BIGFONT BOLDFONT) (* ; "should be bigger still") (TEXTFONT DEFAULTFONT) (* ; "default for text") (TEXTBOLDFONT BOLDFONT) (* ; "default for bold text") (* ;; "") (* ;; "Fonts for window system, processes") (* ;; "") (MENUFONT DEFAULTFONT T) (BOLDMENUFONT (FONTCOPY MENUFONT 'FACE 'BOLD)) (* ; "if not supplied") (INTERRUPTMENUFONT DEFAULTFONT T) (* ; "used by control-B") (DEFAULTICONFONT MENUFONT) (* ; "for shrinking windows") (BACKTRACEFONT TINYFONT T) (* ; " for backtrace in debugger") (WINDOWTITLEFONT MENUFONT) ((WINDOWTITLEFONT WINDOWTITLEFONT) NIL) (* ; " used for titles of all windows") (* ;; "") (* ;; "Fonts for Exec") (* ;; "") (PROMPTFONT LITTLEFONT) (* ; "for printing out prompts") (INPUTFONT BOLDFONT) (* ; "for user typein in Exec") (PRINTOUTFONT DEFAULTFONT) (* ; " for intermediate typin in Exec") (TTYINBOLDFONT (CONS DEFAULTFONT BOLDFONT)) (VALUEFONT DEFAULTFONT) (* ;  " for printing out values returned in Exec") (* ;; "") (* ;; "Fonts for prettyprinting") (* ;; "") (COMMENTFONT LITTLEFONT) (* ; "for comments ") (PRETTYCOMFONT BOLDFONT) (* ; " for words being defined") (CLISPFONT BOLDFONT) (* ; " for keywords & CLISP") (SYSTEMFONT DEFAULTFONT) (* ; " for %"system%" words(?)") (LAMBDAFONT BIGFONT) (* ; "for words being defined") (USERFONT BOLDFONT) (* ; " for %"user%" defined words"))) (MOVD? 'NILL 'WINDOWTITLEFONT) (DEFINEQ (FONTSET [LAMBDA (NAME CHANGE-WINDOWS?) (* ; "Edited 23-Jun-88 10:46 by jds") (COND [NAME (LET [(TEM (FASSOC NAME FONTDEFS)) (OLDDEFAULT (FONTCREATE DEFAULTFONT NIL NIL NIL 'DISPLAY] (OR TEM (ERROR NAME "not a defined font configuration")) (* ;; "Looks up NAME on FONTSLST and sets apropriate parameters. entries are added to fontslst by FONTNAME.") (for X in FONTVARS when (AND (CL:SYMBOLP (CAR X)) (NEQ (CAR X) '*) (NEQ (CAR X) (CADR X))) do (SETTOPVAL (CAR X))) [MAPC (CDR TEM) (FUNCTION (LAMBDA (X) (/SETTOPVAL (CAR X) (CDR X] [PROG (BASICCLASSES) (for X in FONTPROFILE do (PROG (SEEN (NAME (CAR X)) (FONTS X)) LP [COND ((MEMB (CAR FONTS) SEEN) (ERROR "Circular font profile specification" X)) (T (push SEEN (CAR FONTS] [SETQ FONTS (CDR (COND ((OR (NULL (CADR FONTS)) (LISTP (CADR FONTS))) (*) (* ;  "This skips over the now-defunct NIL or list-of-escape sequence") (CDR FONTS)) (T FONTS] (COND ((OR (NLISTP FONTS) (LITATOM (CAR FONTS)))(* ;  "Indirect thru another's font spec") (AND (SETQ FONTS (ASSOC (SELECTQ (CAR (LISTP FONTS)) ((NIL DEFAULTFONT) (* ;  "Don't let DEFAULTFONT loop thru itself") (AND (NOT (MEMB 'DEFAULTFONT SEEN )) 'DEFAULTFONT)) (CAR FONTS)) FONTPROFILE)) (GO LP))) (T [push BASICCLASSES (SETQ FONTS (FONTCLASS NAME FONTS 'DISPLAY] (* ;  "Now we have a font class datastructure") )) (AND NAME (/SETTOPVAL NAME FONTS)) (* ;; "NIL for the class-name means just establish the font-correspondences but don't connect them up with a pretty class name.") )) (AND BASICCLASSES (FONTMAPARRAY BASICCLASSES 'DISPLAY] [for X in FONTVARS when (NEQ (CAR X) '*) do (COND ((LISTP (CAR X)) (EVAL (CAR X))) [(CADDR X) (SET (CAR X) (FONTCREATE (OR (GETTOPVAL (CAR X)) (EVAL (CADR X)) DEFAULTFONT) NIL NIL NIL 'DISPLAY] (T (OR (GETTOPVAL (CAR X)) (AND (CADR X) (SET (CAR X) (EVAL (CADR X] (CL:WHEN CHANGE-WINDOWS? (CL:WHEN (NEQ OLDDEFAULT (FONTCREATE DEFAULTFONT NIL NIL NIL 'DISPLAY)) (for X in (OPENWINDOWS) when (EQ OLDDEFAULT (DSPFONT NIL X)) do (DSPFONT DEFAULTFONT X))) (DSPFONT WINDOWTITLEFONT WindowTitleDisplayStream) (SETQ MaxValueLeftMargin (ITIMES 35 (STRINGWIDTH 'A DEFAULTFONT))) (MAPC CACHEDMENUS 'SET) [for W in (OPENWINDOWS) do [COND [(OR (EQ (WINDOWPROP W 'RESHAPEFN) 'DONT) (WINDOWPROP W 'MAINWINDOW] (T (* ;;  "don't reshape if can't or if this window is attached to another.") (SHAPEW W (WINDOWREGION W] (COND ((AND (NEQ (WINDOWPROP W 'WINDOWENTRYFN) (FUNCTION \TEDIT.PROCIDLEFN)) (WINDOWPROP W 'REPAINTFN)) (REDISPLAYW W]) (* ;; "Set the new font profile name, and return the old one, so he can restore later.") (PROG1 FONTNAME (SETQ FONTNAME NAME] (T (* ;  "He passed in NIL, so return font profile name in effect.") FONTNAME]) (FONTPROFILE [LAMBDA (PROFILE) (* lmm "10-Sep-86 12:33") [PROG (BASICCLASSES) (for X in PROFILE do (PROG (SEEN (NAME (CAR X)) (FONTS X)) LP [COND ((MEMB (CAR FONTS) SEEN) (ERROR "Circular font profile specification" X)) (T (push SEEN (CAR FONTS] [SETQ FONTS (CDR (COND ((OR (NULL (CADR FONTS)) (LISTP (CADR FONTS))) (* ; "This skips over the now-defunct NIL or list-of-escape sequence") (CDR FONTS)) (T FONTS] (COND ((OR (NLISTP FONTS) (LITATOM (CAR FONTS))) (* Indirect thru another's font spec) (AND (SETQ FONTS (ASSOC (SELECTQ (CAR (LISTP FONTS)) ((NIL DEFAULTFONT) (* Don't let DEFAULTFONT loop thru itself) (AND (NOT (MEMB 'DEFAULTFONT SEEN)) 'DEFAULTFONT)) (CAR FONTS)) PROFILE)) (GO LP))) (T [push BASICCLASSES (SETQ FONTS (FONTCLASS NAME FONTS 'DISPLAY] (* Now we have a font class datastructure) )) (AND NAME (/SETATOMVAL NAME FONTS)) (* NIL for the class-name means just establish the font-correspondences but don't connect them up with a pretty class name.) )) (AND BASICCLASSES (FONTMAPARRAY BASICCLASSES 'DISPLAY] T]) (FONTPROFILE.ADDDEVICE [LAMBDA (NEWDEVICE OLDDEVICE) (* ; "Edited 3-Mar-93 14:46 by rmk:") (* ;; "Fills in all fontprofile specifications so that an entry for NEWDEVICE is present for each fontclass. Nothing is changed if the entry is already there, otherwise the specification for the class currently provided for OLDDEVICE will be used for NEWDEVICE.") (DECLARE (USEDFREE FONTDEFS FONTNAME)) (SETQ NEWDEVICE (U-CASE NEWDEVICE)) (SETQ OLDDEVICE (U-CASE OLDDEVICE)) [FOR FD IN FONTDEFS DO (FOR FC OLDSPEC IN (CDR (ASSOC 'FONTPROFILE (CDR FD))) UNLESS (LITATOM (CADR FC)) DO (SETQ FC (CDR FC)) (* ; "Skip over name") (CL:WHEN [SETQ OLDSPEC (SELECTQ OLDDEVICE (DISPLAY (CADR FC)) (INTERPRESS (CADDDR FC)) (PRESS (CADDR FC)) (CADR (ASSOC OLDDEVICE (CDDDDR FC] [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (* ;  "Fill in NIL's for missing DISPLAY, PRESS, or INTERPRESS") [SELECTQ NEWDEVICE (DISPLAY (OR (CAR FC) (RPLACA FC OLDSPEC))) (INTERPRESS (OR (CADDR FC) (RPLACA [PROGN [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (OR (CDR FC) (CDR (RPLACD FC (CONS] OLDSPEC))) (PRESS (OR (CADDR FC) (RPLACA [OR (CDR FC) (CDR (RPLACD FC (CONS] OLDSPEC))) (OR (CADR (ASSOC NEWDEVICE (CDDDR FC))) (PROGN (PROGN [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (PUSH (CDR FC) (LIST NEWDEVICE OLDSPEC])] (FONTSET FONTNAME]) ) (RPAQ? FONTESCAPECHAR (CHARACTER 6)) (RPAQ? FONTFNS ) (RPAQ? FONTWORDS ) (DECLARE%: DONTEVAL@LOAD DOCOPY (FONTSET 'STANDARD) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS FONTPROFILE FONTESCAPECHAR FONTDEFS) ) (DEFINEQ (FONTMAPARRAY [LAMBDA (FONTCLASSES) (* lmm "28-Sep-86 14:23") (* ;; "Makes a font array from a font-mapping list of fontclasses. The array provides a fast map from font# to font classes/descriptors. This function caches the last array. If IMAGETYPES is given, then the FD's are pre-computed for the imagetypes it. Otherwise, the first use of the fontclass for that imagetype would cause the fontcreate to be done.") (PROG (FA (MAXFONT 0) (MINFONT 100)) [COND ((NULL \FONTMAPCACHE)) ((OR (NULL FONTCLASSES) (EQUAL FONTCLASSES (CAR \FONTMAPCACHE))) (RETURN (CDR \FONTMAPCACHE] [for F PRETTYFONT# in FONTCLASSES do (SETQ PRETTYFONT# (fetch (FONTCLASS PRETTYFONT#) of F)) (COND ((IGREATERP PRETTYFONT# MAXFONT) (SETQ MAXFONT PRETTYFONT#))) (COND ((ILESSP PRETTYFONT# 1) (ERROR "Invalid font number" PRETTYFONT# F)) ((ILESSP PRETTYFONT# MINFONT) (SETQ MINFONT PRETTYFONT#] (SETQ FA (ARRAY MAXFONT)) (for F in FONTCLASSES do (SETA FA (fetch (FONTCLASS PRETTYFONT#) of F) F)) (for I from 1 to MAXFONT unless (ELT FA I) do (SETA FA I (ELT FA MINFONT))) (SETQ \FONTMAPCACHE (CONS (COPY FONTCLASSES) FA)) (RETURN FA]) ) (RPAQ? \FONTMAPCACHE ) (SETSEPR '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) 1 FILERDTBL) (PUTPROPS FONTPROFILE COPYRIGHT ("Venue & Xerox Corporation" 1986 1988 1990 1991 1999)) (DECLARE%: DONTCOPY (FILEMAP (NIL (16000 27584 (FONTSET 16010 . 22351) (FONTPROFILE 22353 . 24702) (FONTPROFILE.ADDDEVICE 24704 . 27582)) (27820 29719 (FONTMAPARRAY 27830 . 29717))))) STOP \ No newline at end of file diff --git a/sources/FONTPROFILE.~1~ b/sources/FONTPROFILE.~1~ new file mode 100644 index 00000000..0d47afa2 --- /dev/null +++ b/sources/FONTPROFILE.~1~ @@ -0,0 +1 @@ +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED " 9-Jul-91 18:38:04" |{PELE:MV:ENVOS}SOURCES>FONTPROFILE.;3| 25066 changes to%: (VARS FONTPROFILECOMS) previous date%: "16-May-90 18:00:27" |{PELE:MV:ENVOS}SOURCES>FONTPROFILE.;2|) (* ; " Copyright (c) 1986, 1988, 1990, 1991 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT FONTPROFILECOMS) (RPAQQ FONTPROFILECOMS ( (* ;; "FONT") (ALISTS (FONTDEFS HUGE BIG MEDIUM STANDARD BIGGER)) (ADDVARS (CACHEDMENUS BreakMenu WindowMenu BackgroundMenu IconWindowMenu)) [VARS (FONTVARS '( (* ;; "standard size fonts. Assumes only DEFAULTFONT set") (BOLDFONT (FONTCOPY DEFAULTFONT 'FACE 'BOLD)) (* ; "default BOLD") (ITALICFONT (FONTCOPY DEFAULTFONT 'FACE 'ITALIC)) (LITTLEFONT DEFAULTFONT) (* ; " should usually be smaller") (TINYFONT LITTLEFONT) (* ; "and this one smaller still") (BIGFONT BOLDFONT) (* ; "should be bigger still") (TEXTFONT DEFAULTFONT) (* ; "default for text") (TEXTBOLDFONT BOLDFONT) (* ; "default for bold text") (* ;; "") (* ;; "Fonts for window system, processes") (* ;; "") (MENUFONT DEFAULTFONT T) (BOLDMENUFONT (FONTCOPY MENUFONT 'FACE 'BOLD)) (* ; "if not supplied") (INTERRUPTMENUFONT DEFAULTFONT T) (* ; "used by control-B") (DEFAULTICONFONT MENUFONT) (* ; "for shrinking windows") (BACKTRACEFONT TINYFONT T) (* ; " for backtrace in debugger") (WINDOWTITLEFONT MENUFONT) ((WINDOWTITLEFONT WINDOWTITLEFONT) NIL) (* ; " used for titles of all windows") (* ;; "") (* ;; "Fonts for Exec") (* ;; "") (PROMPTFONT LITTLEFONT) (* ; "for printing out prompts") (INPUTFONT BOLDFONT) (* ; "for user typein in Exec") (PRINTOUTFONT DEFAULTFONT) (* ; " for intermediate typin in Exec") (TTYINBOLDFONT (CONS DEFAULTFONT BOLDFONT)) (VALUEFONT DEFAULTFONT) (* ;  " for printing out values returned in Exec") (* ;; "") (* ;; "Fonts for prettyprinting") (* ;; "") (COMMENTFONT LITTLEFONT) (* ; "for comments ") (PRETTYCOMFONT BOLDFONT) (* ; " for words being defined") (CLISPFONT BOLDFONT) (* ; " for keywords & CLISP") (SYSTEMFONT DEFAULTFONT) (* ; " for %"system%" words(?)") (LAMBDAFONT BIGFONT) (* ; "for words being defined") (USERFONT BOLDFONT) (* ; " for %"user%" defined words")] (P (MOVD? 'NILL 'WINDOWTITLEFONT)) (FNS FONTSET FONTPROFILE) (INITVARS (FONTESCAPECHAR (CHARACTER 6)) (FONTFNS) (FONTWORDS)) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (FONTSET 'STANDARD] (GLOBALVARS FONTPROFILE FONTESCAPECHAR FONTDEFS) (FNS FONTMAPARRAY) (INITVARS (\FONTMAPCACHE)) (P (SETSEPR '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) 1 FILERDTBL)))) (* ;; "FONT") (ADDTOVAR FONTDEFS [HUGE (FONTPROFILE (DEFAULTFONT 1 (MODERN 24) NIL (TERMINAL 8)) (BOLDFONT 2 (MODERN 24 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 18 MRR) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 36 BRR) NIL (MODERN 10 BRR)) (TEXTFONT 5 (CLASSIC 24) NIL (CLASSIC 10)) (TEXTBOLDFONT 7 (CLASSIC 24 BRR) NIL (CLASSIC 10 BRR] [BIG (FONTPROFILE (DEFAULTFONT 1 (MODERN 18) NIL (TERMINAL 8)) (TEXTFONT 5 (CLASSIC 18) NIL (CLASSIC 10)) (BOLDFONT 2 (MODERN 18 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 12 MRR) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 24 BRR) NIL (MODERN 10 BRR)) (TEXTBOLDFONT 7 (CLASSIC 18 BRR) NIL (CLASSIC 10 BRR] [MEDIUM (FONTPROFILE (DEFAULTFONT 1 (MODERN 14) NIL (TERMINAL 8)) (BOLDFONT 2 (MODERN 14 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 10) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 18) NIL (MODERN 10 BRR)) (TEXTFONT 5 (CLASSIC 14) NIL (CLASSIC 10)) (TEXTBOLDFONT 7 (CLASSIC 14 BRR) NIL (CLASSIC 10 BRR] [STANDARD (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (FONTPROFILE (DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8)) (ITALICFONT 1 (HELVETICA 10 MIR) (GACHA 8 MIR) (MODERN 8 MIR)) (BOLDFONT 2 (HELVETICA 10 BRR) (HELVETICA 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (HELVETICA 8) (HELVETICA 6 MIR) (MODERN 8 MIR)) (TINYFONT 6 (GACHA 8) (GACHA 6) (TERMINAL 6)) (BIGFONT 4 (HELVETICA 12 BRR) NIL (MODERN 10 BRR)) (MENUFONT 5 (HELVETICA 10)) (COMMENTFONT 6 (HELVETICA 10) (HELVETICA 8) (MODERN 8)) (TEXTFONT 7 (TIMESROMAN 10) NIL (CLASSIC 10] [BIGGER (FONTPROFILE (DEFAULTFONT 1 (GACHA 12) NIL (TERMINAL 8)) (ITALICFONT 1 (HELVETICA 12 MIR) (GACHA 8 MIR) (MODERN 8 MIR)) (BOLDFONT 2 (HELVETICA 12 BRR) (HELVETICA 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (HELVETICA 10) (HELVETICA 6 MIR) (MODERN 8 MIR)) (TINYFONT 6 (GACHA 10) (GACHA 6) (TERMINAL 6)) (BIGFONT 4 (HELVETICA 14 BRR) NIL (MODERN 10 BRR)) (MENUFONT 5 (HELVETICA 12)) (COMMENTFONT 6 (HELVETICA 12) (HELVETICA 8) (MODERN 8)) (TEXTFONT 7 (TIMESROMAN 12) NIL (CLASSIC 10]) (ADDTOVAR CACHEDMENUS BreakMenu WindowMenu BackgroundMenu IconWindowMenu) (RPAQQ FONTVARS ( (* ;; "standard size fonts. Assumes only DEFAULTFONT set") (BOLDFONT (FONTCOPY DEFAULTFONT 'FACE 'BOLD)) (* ; "default BOLD") (ITALICFONT (FONTCOPY DEFAULTFONT 'FACE 'ITALIC)) (LITTLEFONT DEFAULTFONT) (* ; " should usually be smaller") (TINYFONT LITTLEFONT) (* ; "and this one smaller still") (BIGFONT BOLDFONT) (* ; "should be bigger still") (TEXTFONT DEFAULTFONT) (* ; "default for text") (TEXTBOLDFONT BOLDFONT) (* ; "default for bold text") (* ;; "") (* ;; "Fonts for window system, processes") (* ;; "") (MENUFONT DEFAULTFONT T) (BOLDMENUFONT (FONTCOPY MENUFONT 'FACE 'BOLD)) (* ; "if not supplied") (INTERRUPTMENUFONT DEFAULTFONT T) (* ; "used by control-B") (DEFAULTICONFONT MENUFONT) (* ; "for shrinking windows") (BACKTRACEFONT TINYFONT T) (* ; " for backtrace in debugger") (WINDOWTITLEFONT MENUFONT) ((WINDOWTITLEFONT WINDOWTITLEFONT) NIL) (* ; " used for titles of all windows") (* ;; "") (* ;; "Fonts for Exec") (* ;; "") (PROMPTFONT LITTLEFONT) (* ; "for printing out prompts") (INPUTFONT BOLDFONT) (* ; "for user typein in Exec") (PRINTOUTFONT DEFAULTFONT) (* ; " for intermediate typin in Exec") (TTYINBOLDFONT (CONS DEFAULTFONT BOLDFONT)) (VALUEFONT DEFAULTFONT) (* ;  " for printing out values returned in Exec") (* ;; "") (* ;; "Fonts for prettyprinting") (* ;; "") (COMMENTFONT LITTLEFONT) (* ; "for comments ") (PRETTYCOMFONT BOLDFONT) (* ; " for words being defined") (CLISPFONT BOLDFONT) (* ; " for keywords & CLISP") (SYSTEMFONT DEFAULTFONT) (* ; " for %"system%" words(?)") (LAMBDAFONT BIGFONT) (* ; "for words being defined") (USERFONT BOLDFONT) (* ; " for %"user%" defined words"))) (MOVD? 'NILL 'WINDOWTITLEFONT) (DEFINEQ (FONTSET [LAMBDA (NAME CHANGE-WINDOWS?) (* ; "Edited 23-Jun-88 10:46 by jds") (COND [NAME (LET [(TEM (FASSOC NAME FONTDEFS)) (OLDDEFAULT (FONTCREATE DEFAULTFONT NIL NIL NIL 'DISPLAY] (OR TEM (ERROR NAME "not a defined font configuration")) (* ;; "Looks up NAME on FONTSLST and sets apropriate parameters. entries are added to fontslst by FONTNAME.") (for X in FONTVARS when (AND (CL:SYMBOLP (CAR X)) (NEQ (CAR X) '*) (NEQ (CAR X) (CADR X))) do (SETTOPVAL (CAR X))) [MAPC (CDR TEM) (FUNCTION (LAMBDA (X) (/SETTOPVAL (CAR X) (CDR X] [PROG (BASICCLASSES) (for X in FONTPROFILE do (PROG (SEEN (NAME (CAR X)) (FONTS X)) LP [COND ((MEMB (CAR FONTS) SEEN) (ERROR "Circular font profile specification" X)) (T (push SEEN (CAR FONTS] [SETQ FONTS (CDR (COND ((OR (NULL (CADR FONTS)) (LISTP (CADR FONTS))) (*) (* ;  "This skips over the now-defunct NIL or list-of-escape sequence") (CDR FONTS)) (T FONTS] (COND ((OR (NLISTP FONTS) (LITATOM (CAR FONTS)))(* ;  "Indirect thru another's font spec") (AND (SETQ FONTS (ASSOC (SELECTQ (CAR (LISTP FONTS)) ((NIL DEFAULTFONT) (* ;  "Don't let DEFAULTFONT loop thru itself") (AND (NOT (MEMB 'DEFAULTFONT SEEN )) 'DEFAULTFONT)) (CAR FONTS)) FONTPROFILE)) (GO LP))) (T [push BASICCLASSES (SETQ FONTS (FONTCLASS NAME FONTS 'DISPLAY] (* ;  "Now we have a font class datastructure") )) (AND NAME (/SETTOPVAL NAME FONTS)) (* ;; "NIL for the class-name means just establish the font-correspondences but don't connect them up with a pretty class name.") )) (AND BASICCLASSES (FONTMAPARRAY BASICCLASSES 'DISPLAY] [for X in FONTVARS when (NEQ (CAR X) '*) do (COND ((LISTP (CAR X)) (EVAL (CAR X))) [(CADDR X) (SET (CAR X) (FONTCREATE (OR (GETTOPVAL (CAR X)) (EVAL (CADR X)) DEFAULTFONT) NIL NIL NIL 'DISPLAY] (T (OR (GETTOPVAL (CAR X)) (AND (CADR X) (SET (CAR X) (EVAL (CADR X] (CL:WHEN CHANGE-WINDOWS? (CL:WHEN (NEQ OLDDEFAULT (FONTCREATE DEFAULTFONT NIL NIL NIL 'DISPLAY)) (for X in (OPENWINDOWS) when (EQ OLDDEFAULT (DSPFONT NIL X)) do (DSPFONT DEFAULTFONT X))) (DSPFONT WINDOWTITLEFONT WindowTitleDisplayStream) (SETQ MaxValueLeftMargin (ITIMES 35 (STRINGWIDTH 'A DEFAULTFONT))) (MAPC CACHEDMENUS 'SET) [for W in (OPENWINDOWS) do [COND [(OR (EQ (WINDOWPROP W 'RESHAPEFN) 'DONT) (WINDOWPROP W 'MAINWINDOW] (T (* ;;  "don't reshape if can't or if this window is attached to another.") (SHAPEW W (WINDOWREGION W] (COND ((AND (NEQ (WINDOWPROP W 'WINDOWENTRYFN) (FUNCTION \TEDIT.PROCIDLEFN)) (WINDOWPROP W 'REPAINTFN)) (REDISPLAYW W]) (* ;; "Set the new font profile name, and return the old one, so he can restore later.") (PROG1 FONTNAME (SETQ FONTNAME NAME] (T (* ;  "He passed in NIL, so return font profile name in effect.") FONTNAME]) (FONTPROFILE [LAMBDA (PROFILE) (* lmm "10-Sep-86 12:33") [PROG (BASICCLASSES) (for X in PROFILE do (PROG (SEEN (NAME (CAR X)) (FONTS X)) LP [COND ((MEMB (CAR FONTS) SEEN) (ERROR "Circular font profile specification" X)) (T (push SEEN (CAR FONTS] [SETQ FONTS (CDR (COND ((OR (NULL (CADR FONTS)) (LISTP (CADR FONTS))) (* ; "This skips over the now-defunct NIL or list-of-escape sequence") (CDR FONTS)) (T FONTS] (COND ((OR (NLISTP FONTS) (LITATOM (CAR FONTS))) (* Indirect thru another's font spec) (AND (SETQ FONTS (ASSOC (SELECTQ (CAR (LISTP FONTS)) ((NIL DEFAULTFONT) (* Don't let DEFAULTFONT loop thru itself) (AND (NOT (MEMB 'DEFAULTFONT SEEN)) 'DEFAULTFONT)) (CAR FONTS)) PROFILE)) (GO LP))) (T [push BASICCLASSES (SETQ FONTS (FONTCLASS NAME FONTS 'DISPLAY] (* Now we have a font class datastructure) )) (AND NAME (/SETATOMVAL NAME FONTS)) (* NIL for the class-name means just establish the font-correspondences but don't connect them up with a pretty class name.) )) (AND BASICCLASSES (FONTMAPARRAY BASICCLASSES 'DISPLAY] T]) ) (RPAQ? FONTESCAPECHAR (CHARACTER 6)) (RPAQ? FONTFNS ) (RPAQ? FONTWORDS ) (DECLARE%: DONTEVAL@LOAD DOCOPY (FONTSET 'STANDARD) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS FONTPROFILE FONTESCAPECHAR FONTDEFS) ) (DEFINEQ (FONTMAPARRAY [LAMBDA (FONTCLASSES) (* lmm "28-Sep-86 14:23") (* ;; "Makes a font array from a font-mapping list of fontclasses. The array provides a fast map from font# to font classes/descriptors. This function caches the last array. If IMAGETYPES is given, then the FD's are pre-computed for the imagetypes it. Otherwise, the first use of the fontclass for that imagetype would cause the fontcreate to be done.") (PROG (FA (MAXFONT 0) (MINFONT 100)) [COND ((NULL \FONTMAPCACHE)) ((OR (NULL FONTCLASSES) (EQUAL FONTCLASSES (CAR \FONTMAPCACHE))) (RETURN (CDR \FONTMAPCACHE] [for F PRETTYFONT# in FONTCLASSES do (SETQ PRETTYFONT# (fetch (FONTCLASS PRETTYFONT#) of F)) (COND ((IGREATERP PRETTYFONT# MAXFONT) (SETQ MAXFONT PRETTYFONT#))) (COND ((ILESSP PRETTYFONT# 1) (ERROR "Invalid font number" PRETTYFONT# F)) ((ILESSP PRETTYFONT# MINFONT) (SETQ MINFONT PRETTYFONT#] (SETQ FA (ARRAY MAXFONT)) (for F in FONTCLASSES do (SETA FA (fetch (FONTCLASS PRETTYFONT#) of F) F)) (for I from 1 to MAXFONT unless (ELT FA I) do (SETA FA I (ELT FA MINFONT))) (SETQ \FONTMAPCACHE (CONS (COPY FONTCLASSES) FA)) (RETURN FA]) ) (RPAQ? \FONTMAPCACHE ) (SETSEPR '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) 1 FILERDTBL) (PUTPROPS FONTPROFILE COPYRIGHT ("Venue & Xerox Corporation" 1986 1988 1990 1991)) (DECLARE%: DONTCOPY (FILEMAP (NIL (13991 22695 (FONTSET 14001 . 20342) (FONTPROFILE 20344 . 22693)) (22931 24830 ( FONTMAPARRAY 22941 . 24828))))) STOP \ No newline at end of file diff --git a/sources/FONTPROFILEPATCH b/sources/FONTPROFILEPATCH new file mode 100644 index 00000000..5704dd91 --- /dev/null +++ b/sources/FONTPROFILEPATCH @@ -0,0 +1 @@ +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "12-Mar-93 11:02:28" {DSK}medley2.0>patches>FONTPROFILEPATCH.;4 30621 changes to%: (ALISTS (FONTDEFS HUGE) (FONTDEFS BIG) (FONTDEFS MEDIUM) (FONTDEFS STANDARD) (FONTDEFS BIGGER) (FONTDEFS BIGGERNS) (FONTDEFS NS)) previous date%: "11-Mar-93 11:51:49" {DSK}medley2.0>patches>FONTPROFILEPATCH.;3) (* ; " Copyright (c) 1993 by Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT FONTPROFILEPATCHCOMS) (RPAQQ FONTPROFILEPATCHCOMS ( (* ;; "FONT") (ALISTS (FONTDEFS HUGE BIG MEDIUM STANDARD BIGGER BIGGERNS NS)) (ADDVARS (CACHEDMENUS BreakMenu WindowMenu BackgroundMenu IconWindowMenu)) [VARS (FONTVARS '( (* ;; "standard size fonts. Assumes only DEFAULTFONT set") (BOLDFONT (FONTCOPY DEFAULTFONT 'FACE 'BOLD)) (* ; "default BOLD") (ITALICFONT (FONTCOPY DEFAULTFONT 'FACE 'ITALIC)) (LITTLEFONT DEFAULTFONT) (* ; " should usually be smaller") (TINYFONT LITTLEFONT) (* ; "and this one smaller still") (BIGFONT BOLDFONT) (* ; "should be bigger still") (TEXTFONT DEFAULTFONT) (* ; "default for text") (TEXTBOLDFONT BOLDFONT) (* ; "default for bold text") (* ;; "") (* ;; "Fonts for window system, processes") (* ;; "") (MENUFONT DEFAULTFONT T) (BOLDMENUFONT (FONTCOPY MENUFONT 'FACE 'BOLD)) (* ; "if not supplied") (INTERRUPTMENUFONT DEFAULTFONT T) (* ; "used by control-B") (DEFAULTICONFONT MENUFONT) (* ; "for shrinking windows") (BACKTRACEFONT TINYFONT T) (* ; " for backtrace in debugger") (WINDOWTITLEFONT MENUFONT) ((WINDOWTITLEFONT WINDOWTITLEFONT) NIL) (* ; " used for titles of all windows") (* ;; "") (* ;; "Fonts for Exec") (* ;; "") (PROMPTFONT LITTLEFONT) (* ; "for printing out prompts") (INPUTFONT BOLDFONT) (* ; "for user typein in Exec") (PRINTOUTFONT DEFAULTFONT) (* ; " for intermediate typin in Exec") (TTYINBOLDFONT (CONS DEFAULTFONT BOLDFONT)) (VALUEFONT DEFAULTFONT) (* ;  " for printing out values returned in Exec") (* ;; "") (* ;; "Fonts for prettyprinting") (* ;; "") (COMMENTFONT LITTLEFONT) (* ; "for comments ") (PRETTYCOMFONT BOLDFONT) (* ; " for words being defined") (CLISPFONT BOLDFONT) (* ; " for keywords & CLISP") (SYSTEMFONT DEFAULTFONT) (* ; " for %"system%" words(?)") (LAMBDAFONT BIGFONT) (* ; "for words being defined") (USERFONT BOLDFONT) (* ; " for %"user%" defined words")] (P (MOVD? 'NILL 'WINDOWTITLEFONT)) (FNS FONTSET FONTPROFILE FONTPROFILE.ADDDEVICE) (INITVARS (FONTESCAPECHAR (CHARACTER 6)) (FONTFNS) (FONTWORDS)) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (FONTSET 'STANDARD] (GLOBALVARS FONTPROFILE FONTESCAPECHAR FONTDEFS) (FNS FONTMAPARRAY) (INITVARS (\FONTMAPCACHE)) (P (SETSEPR '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) 1 FILERDTBL)))) (* ;; "FONT") (ADDTOVAR FONTDEFS [HUGE (FONTPROFILE (DEFAULTFONT 1 (MODERN 24) NIL (TERMINAL 8)) (BOLDFONT 2 (MODERN 24 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 18 MRR) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 36 BRR) NIL (MODERN 10 BRR)) (TEXTFONT 5 (CLASSIC 24) NIL (CLASSIC 10)) (TEXTBOLDFONT 7 (CLASSIC 24 BRR) NIL (CLASSIC 10 BRR] [BIG (FONTPROFILE (DEFAULTFONT 1 (MODERN 18) NIL (TERMINAL 8)) (TEXTFONT 5 (CLASSIC 18) NIL (CLASSIC 10)) (BOLDFONT 2 (MODERN 18 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 12 MRR) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 24 BRR) NIL (MODERN 10 BRR)) (TEXTBOLDFONT 7 (CLASSIC 18 BRR) NIL (CLASSIC 10 BRR] [MEDIUM (FONTPROFILE (DEFAULTFONT 1 (MODERN 14) NIL (TERMINAL 8)) (BOLDFONT 2 (MODERN 14 BRR) NIL (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 10) NIL (MODERN 8 MIR)) (BIGFONT 4 (MODERN 18) NIL (MODERN 10 BRR)) (TEXTFONT 5 (CLASSIC 14) NIL (CLASSIC 10)) (TEXTBOLDFONT 7 (CLASSIC 14 BRR) NIL (CLASSIC 10 BRR] [STANDARD (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (FONTPROFILE (DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8)) (ITALICFONT 1 (HELVETICA 10 MIR) (GACHA 8 MIR) (MODERN 8 MIR)) (BOLDFONT 2 (HELVETICA 10 BRR) (HELVETICA 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (HELVETICA 8) (HELVETICA 6 MIR) (MODERN 8 MIR)) (TINYFONT 6 (GACHA 8) (GACHA 6) (TERMINAL 6)) (BIGFONT 4 (HELVETICA 12 BRR) NIL (MODERN 10 BRR)) (MENUFONT 5 (HELVETICA 10)) (COMMENTFONT 6 (HELVETICA 10) (HELVETICA 8) (MODERN 8)) (TEXTFONT 7 (TIMESROMAN 10) NIL (CLASSIC 10] [BIGGER (FONTPROFILE (DEFAULTFONT 1 (GACHA 12) NIL (TERMINAL 8)) (ITALICFONT 1 (HELVETICA 12 MIR) (GACHA 8 MIR) (MODERN 8 MIR)) (BOLDFONT 2 (HELVETICA 12 BRR) (HELVETICA 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (HELVETICA 10) (HELVETICA 6 MIR) (MODERN 8 MIR)) (TINYFONT 6 (GACHA 10) (GACHA 6) (TERMINAL 6)) (BIGFONT 4 (HELVETICA 14 BRR) NIL (MODERN 10 BRR)) (MENUFONT 5 (HELVETICA 12)) (COMMENTFONT 6 (HELVETICA 12) (HELVETICA 8) (MODERN 8)) (TEXTFONT 7 (TIMESROMAN 12) NIL (CLASSIC 10] [BIGGERNS (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (COMMENTLINELENGTH 116 . 126) (FIRSTCOL . 60) (PRETTYLCOM . 25) (FONTESCAPECHAR . %) (FONTPROFILE (DEFAULTFONT 1 (TERMINAL 12) (TERMINAL 8) (TERMINAL 8)) (ITALICFONT 1 (MODERN 12 BIR) (MODERN 8 BIR) (MODERN 8 BIR)) (BOLDFONT 2 (MODERN 12 BRR) (MODERN 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 10) (MODERN 6 MIR) (MODERN 8 MIR)) (BIGFONT 4 (MODERN 14 BRR) (MODERN 10 BRR) (MODERN 10 BRR] [NS (FONTCHANGEFLG . ALL) (FILELINELENGTH . 102) (COMMENTLINELENGTH 116 . 126) (FIRSTCOL . 60) (PRETTYLCOM . 25) (FONTESCAPECHAR . %) (FONTPROFILE (DEFAULTFONT 1 (TERMINAL 10) (TERMINAL 8) (TERMINAL 8)) (ITALICFONT 1 (MODERN 10 BIR) (MODERN 8 BIR) (MODERN 8 BIR)) (BOLDFONT 2 (MODERN 10 BRR) (MODERN 8 BRR) (MODERN 8 BRR)) (LITTLEFONT 3 (MODERN 8) (MODERN 6 MIR) (MODERN 8 MIR)) (BIGFONT 4 (MODERN 12 BRR) (MODERN 10 BRR) (MODERN 10 BRR]) (ADDTOVAR CACHEDMENUS BreakMenu WindowMenu BackgroundMenu IconWindowMenu) (RPAQQ FONTVARS ( (* ;; "standard size fonts. Assumes only DEFAULTFONT set") (BOLDFONT (FONTCOPY DEFAULTFONT 'FACE 'BOLD)) (* ; "default BOLD") (ITALICFONT (FONTCOPY DEFAULTFONT 'FACE 'ITALIC)) (LITTLEFONT DEFAULTFONT) (* ; " should usually be smaller") (TINYFONT LITTLEFONT) (* ; "and this one smaller still") (BIGFONT BOLDFONT) (* ; "should be bigger still") (TEXTFONT DEFAULTFONT) (* ; "default for text") (TEXTBOLDFONT BOLDFONT) (* ; "default for bold text") (* ;; "") (* ;; "Fonts for window system, processes") (* ;; "") (MENUFONT DEFAULTFONT T) (BOLDMENUFONT (FONTCOPY MENUFONT 'FACE 'BOLD)) (* ; "if not supplied") (INTERRUPTMENUFONT DEFAULTFONT T) (* ; "used by control-B") (DEFAULTICONFONT MENUFONT) (* ; "for shrinking windows") (BACKTRACEFONT TINYFONT T) (* ; " for backtrace in debugger") (WINDOWTITLEFONT MENUFONT) ((WINDOWTITLEFONT WINDOWTITLEFONT) NIL) (* ; " used for titles of all windows") (* ;; "") (* ;; "Fonts for Exec") (* ;; "") (PROMPTFONT LITTLEFONT) (* ; "for printing out prompts") (INPUTFONT BOLDFONT) (* ; "for user typein in Exec") (PRINTOUTFONT DEFAULTFONT) (* ; " for intermediate typin in Exec") (TTYINBOLDFONT (CONS DEFAULTFONT BOLDFONT)) (VALUEFONT DEFAULTFONT) (* ;  " for printing out values returned in Exec") (* ;; "") (* ;; "Fonts for prettyprinting") (* ;; "") (COMMENTFONT LITTLEFONT) (* ; "for comments ") (PRETTYCOMFONT BOLDFONT) (* ; " for words being defined") (CLISPFONT BOLDFONT) (* ; " for keywords & CLISP") (SYSTEMFONT DEFAULTFONT) (* ; " for %"system%" words(?)") (LAMBDAFONT BIGFONT) (* ; "for words being defined") (USERFONT BOLDFONT) (* ; " for %"user%" defined words"))) (MOVD? 'NILL 'WINDOWTITLEFONT) (DEFINEQ (FONTSET [LAMBDA (NAME CHANGE-WINDOWS?) (* ; "Edited 23-Jun-88 10:46 by jds") (COND [NAME (LET [(TEM (FASSOC NAME FONTDEFS)) (OLDDEFAULT (FONTCREATE DEFAULTFONT NIL NIL NIL 'DISPLAY] (OR TEM (ERROR NAME "not a defined font configuration")) (* ;; "Looks up NAME on FONTSLST and sets apropriate parameters. entries are added to fontslst by FONTNAME.") (for X in FONTVARS when (AND (CL:SYMBOLP (CAR X)) (NEQ (CAR X) '*) (NEQ (CAR X) (CADR X))) do (SETTOPVAL (CAR X))) [MAPC (CDR TEM) (FUNCTION (LAMBDA (X) (/SETTOPVAL (CAR X) (CDR X] [PROG (BASICCLASSES) (for X in FONTPROFILE do (PROG (SEEN (NAME (CAR X)) (FONTS X)) LP [COND ((MEMB (CAR FONTS) SEEN) (ERROR "Circular font profile specification" X)) (T (push SEEN (CAR FONTS] [SETQ FONTS (CDR (COND ((OR (NULL (CADR FONTS)) (LISTP (CADR FONTS))) (*) (* ;  "This skips over the now-defunct NIL or list-of-escape sequence") (CDR FONTS)) (T FONTS] (COND ((OR (NLISTP FONTS) (LITATOM (CAR FONTS)))(* ;  "Indirect thru another's font spec") (AND (SETQ FONTS (ASSOC (SELECTQ (CAR (LISTP FONTS)) ((NIL DEFAULTFONT) (* ;  "Don't let DEFAULTFONT loop thru itself") (AND (NOT (MEMB 'DEFAULTFONT SEEN )) 'DEFAULTFONT)) (CAR FONTS)) FONTPROFILE)) (GO LP))) (T [push BASICCLASSES (SETQ FONTS (FONTCLASS NAME FONTS 'DISPLAY] (* ;  "Now we have a font class datastructure") )) (AND NAME (/SETTOPVAL NAME FONTS)) (* ;; "NIL for the class-name means just establish the font-correspondences but don't connect them up with a pretty class name.") )) (AND BASICCLASSES (FONTMAPARRAY BASICCLASSES 'DISPLAY] [for X in FONTVARS when (NEQ (CAR X) '*) do (COND ((LISTP (CAR X)) (EVAL (CAR X))) [(CADDR X) (SET (CAR X) (FONTCREATE (OR (GETTOPVAL (CAR X)) (EVAL (CADR X)) DEFAULTFONT) NIL NIL NIL 'DISPLAY] (T (OR (GETTOPVAL (CAR X)) (AND (CADR X) (SET (CAR X) (EVAL (CADR X] (CL:WHEN CHANGE-WINDOWS? (CL:WHEN (NEQ OLDDEFAULT (FONTCREATE DEFAULTFONT NIL NIL NIL 'DISPLAY)) (for X in (OPENWINDOWS) when (EQ OLDDEFAULT (DSPFONT NIL X)) do (DSPFONT DEFAULTFONT X))) (DSPFONT WINDOWTITLEFONT WindowTitleDisplayStream) (SETQ MaxValueLeftMargin (ITIMES 35 (STRINGWIDTH 'A DEFAULTFONT))) (MAPC CACHEDMENUS 'SET) [for W in (OPENWINDOWS) do [COND [(OR (EQ (WINDOWPROP W 'RESHAPEFN) 'DONT) (WINDOWPROP W 'MAINWINDOW] (T (* ;;  "don't reshape if can't or if this window is attached to another.") (SHAPEW W (WINDOWREGION W] (COND ((AND (NEQ (WINDOWPROP W 'WINDOWENTRYFN) (FUNCTION \TEDIT.PROCIDLEFN)) (WINDOWPROP W 'REPAINTFN)) (REDISPLAYW W]) (* ;; "Set the new font profile name, and return the old one, so he can restore later.") (PROG1 FONTNAME (SETQ FONTNAME NAME] (T (* ;  "He passed in NIL, so return font profile name in effect.") FONTNAME]) (FONTPROFILE [LAMBDA (PROFILE) (* lmm "10-Sep-86 12:33") [PROG (BASICCLASSES) (for X in PROFILE do (PROG (SEEN (NAME (CAR X)) (FONTS X)) LP [COND ((MEMB (CAR FONTS) SEEN) (ERROR "Circular font profile specification" X)) (T (push SEEN (CAR FONTS] [SETQ FONTS (CDR (COND ((OR (NULL (CADR FONTS)) (LISTP (CADR FONTS))) (* ;  "This skips over the now-defunct NIL or list-of-escape sequence") (CDR FONTS)) (T FONTS] (COND ((OR (NLISTP FONTS) (LITATOM (CAR FONTS))) (* Indirect thru another's font spec) (AND (SETQ FONTS (ASSOC (SELECTQ (CAR (LISTP FONTS)) ((NIL DEFAULTFONT) (* Don't let DEFAULTFONT loop thru  itself) (AND (NOT (MEMB 'DEFAULTFONT SEEN)) 'DEFAULTFONT)) (CAR FONTS)) PROFILE)) (GO LP))) (T [push BASICCLASSES (SETQ FONTS (FONTCLASS NAME FONTS 'DISPLAY] (* Now we have a font class  datastructure) )) (AND NAME (/SETATOMVAL NAME FONTS)) (* NIL for the class-name means just establish the font-correspondences but  don't connect them up with a pretty class name.) )) (AND BASICCLASSES (FONTMAPARRAY BASICCLASSES 'DISPLAY] T]) (FONTPROFILE.ADDDEVICE [LAMBDA (NEWDEVICE OLDDEVICE) (* ; "Edited 3-Mar-93 14:46 by rmk:") (* ;; "Fills in all fontprofile specifications so that an entry for NEWDEVICE is present for each fontclass. Nothing is changed if the entry is already there, otherwise the specification for the class currently provided for OLDDEVICE will be used for NEWDEVICE.") (DECLARE (USEDFREE FONTDEFS FONTNAME)) (SETQ NEWDEVICE (U-CASE NEWDEVICE)) (SETQ OLDDEVICE (U-CASE OLDDEVICE)) [FOR FD IN FONTDEFS DO (FOR FC OLDSPEC IN (CDR (ASSOC 'FONTPROFILE (CDR FD))) UNLESS (LITATOM (CADR FC)) DO (SETQ FC (CDR FC)) (* ; "Skip over name") (CL:WHEN [SETQ OLDSPEC (SELECTQ OLDDEVICE (DISPLAY (CADR FC)) (INTERPRESS (CADDDR FC)) (PRESS (CADDR FC)) (CADR (ASSOC OLDDEVICE (CDDDDR FC] [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (* ;  "Fill in NIL's for missing DISPLAY, PRESS, or INTERPRESS") [SELECTQ NEWDEVICE (DISPLAY (OR (CAR FC) (RPLACA FC OLDSPEC))) (INTERPRESS (OR (CADDR FC) (RPLACA [PROGN [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (OR (CDR FC) (CDR (RPLACD FC (CONS] OLDSPEC))) (PRESS (OR (CADDR FC) (RPLACA [OR (CDR FC) (CDR (RPLACD FC (CONS] OLDSPEC))) (OR (CADR (ASSOC NEWDEVICE (CDDDR FC))) (PROGN (PROGN [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] [SETQ FC (OR (CDR FC) (CDR (RPLACD FC (CONS] (PUSH (CDR FC) (LIST NEWDEVICE OLDSPEC])] (FONTSET FONTNAME]) ) (RPAQ? FONTESCAPECHAR (CHARACTER 6)) (RPAQ? FONTFNS ) (RPAQ? FONTWORDS ) (DECLARE%: DONTEVAL@LOAD DOCOPY (FONTSET 'STANDARD) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS FONTPROFILE FONTESCAPECHAR FONTDEFS) ) (DEFINEQ (FONTMAPARRAY [LAMBDA (FONTCLASSES) (* lmm "28-Sep-86 14:23") (* ;; "Makes a font array from a font-mapping list of fontclasses. The array provides a fast map from font# to font classes/descriptors. This function caches the last array. If IMAGETYPES is given, then the FD's are pre-computed for the imagetypes it. Otherwise, the first use of the fontclass for that imagetype would cause the fontcreate to be done.") (PROG (FA (MAXFONT 0) (MINFONT 100)) [COND ((NULL \FONTMAPCACHE)) ((OR (NULL FONTCLASSES) (EQUAL FONTCLASSES (CAR \FONTMAPCACHE))) (RETURN (CDR \FONTMAPCACHE] [for F PRETTYFONT# in FONTCLASSES do (SETQ PRETTYFONT# (fetch (FONTCLASS PRETTYFONT#) of F)) (COND ((IGREATERP PRETTYFONT# MAXFONT) (SETQ MAXFONT PRETTYFONT#))) (COND ((ILESSP PRETTYFONT# 1) (ERROR "Invalid font number" PRETTYFONT# F)) ((ILESSP PRETTYFONT# MINFONT) (SETQ MINFONT PRETTYFONT#] (SETQ FA (ARRAY MAXFONT)) (for F in FONTCLASSES do (SETA FA (fetch (FONTCLASS PRETTYFONT#) of F) F)) (for I from 1 to MAXFONT unless (ELT FA I) do (SETA FA I (ELT FA MINFONT))) (SETQ \FONTMAPCACHE (CONS (COPY FONTCLASSES) FA)) (RETURN FA]) ) (RPAQ? \FONTMAPCACHE ) (SETSEPR '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26) 1 FILERDTBL) (PUTPROPS FONTPROFILEPATCH COPYRIGHT ("Xerox Corporation" 1993)) (DECLARE%: DONTCOPY (FILEMAP (NIL (16158 27897 (FONTSET 16168 . 22509) (FONTPROFILE 22511 . 25015) (FONTPROFILE.ADDDEVICE 25017 . 27895)) (28133 30403 (FONTMAPARRAY 28143 . 30401))))) STOP \ No newline at end of file diff --git a/sources/FONTPROFILEPATCH.LCOM b/sources/FONTPROFILEPATCH.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..df5b65550e3248ca1333e5ef53d87b513f5c90c7 GIT binary patch literal 10893 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 Date: Wed, 24 Feb 2021 11:33:14 -0800 Subject: [PATCH 36/37] set makesysname --- sources/YREM.CM | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/YREM.CM b/sources/YREM.CM index 5536f3d0..157ca98e 100644 --- a/sources/YREM.CM +++ b/sources/YREM.CM @@ -1,6 +1,6 @@ " (PROGN(LOAD(CONCAT (QUOTE {DSK}) (UNIX-GETENV (QUOTE MEDLEYDIR)) (QUOTE /sources/LOADUP.LISP)))(HARDRESET)) -SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /loadups/lisp.sysout))))) +SHH(PROGN(IL:ENDLOADUP)(SETQ IL:MAKESYSNAME ':MEDLEY)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /loadups/lisp.sysout))))) (IL:LOGOUT T) " From 7ec7f4cf5c54ab2e53f6da47a9118c841762ca61 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Sat, 27 Feb 2021 10:18:37 -0800 Subject: [PATCH 37/37] rem.cm no longer used --- scripts/loadup-init.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 4e2525e4..94c894a6 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -10,7 +10,6 @@ fi scr="-sc 1024x768 -g 1042x790" mkdir -p "$MEDLEYDIR/tmp" -rm -f ~/rem.cm ./run-medley $scr -greet "$MEDLEYDIR"/sources/LOADUP-INIT.LISP -full

  • nWgr5$Xi;zz%rwIB=E?U(6u>U_MLrAMjPEBX0>B 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 b$&6=8h* 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 fK@h{PFCvcwpwvqSRMP$68^>7`U z==lSivThUZQhZ%l?Yv3UxjZmC`+tsZss~%D=55~Pcn`fK;uB*im;O)tRP|Wvg+=p* zYd&9meOB!?^9^eO`QB-D3XnX^slPgrKF4{TYWj7x$ET{Rr7XXyo=kj(q{;k3xnV7P zwe;<)y8YF2JTI(02H&g*d62{M(JtgDlJCicY0F|=N7_8X3siM^hIRkUxIa}F*{V8^ z{EG2I_JbKis;k5vV8)DU&i{xls%@_`E>z?ILZnN9_S-|o=)PJ06KZgTY{$}6$d4sX1@I|tjU`l{!J?`DwxUbphP zLb3i+{ej2oC+Q!dQs??C1BvPXmwS#MJ4V33_^|_j*)br(Tuxr*(j7@M*HcDo7VVU8 zct9J9{qVCLyf<(h-RzKXa5kurleGMO+&?3hmb(94dj z>6EMeVaI$AYY%91#2=`?b2j|&osn`Q=*ts0-cEWhGF&sfg&p+OFboSM-SFCK$10E7 zjvwqO1(xZ#U`IwTd7X0M-3(7Tb(;BLM>XZQ)e+yIcASpS2RoYJ+aIDXKlQ}dLpwy= zZtI~Pt?;z~HDTlz9T4VYMf?VY+Hu9Fwx^l)o`>FP%6pGKmT&Y=kCpSVJM4BRzx;m2 zj!VeYs{LsP?`<5%7q<`0%HP%;UyoNaj63%H2>w|A|J=t>`)@}-RTC^#mFT5ycA(-K zVUJ(zN_;qV5ywtdycZ_^T!kN1jZV_^!SHwL`m0i)_XkFL0`k3uD&Gi4_f^=lit)XQ z??1|TSJCF7T;hJf3rr@C-&Cbd)b#1Ioc4)6s}^&HeS<#ZS~Zt5u1yQz%~VyTUR8CA zJoA96p6lbPGTq*)Jkk{FHFI97s)%pt@|+=hKB~$leNC2A*Zp6^9*j9v#mLu+{1L(- zAXVS{RJF$KT~!a=ng9K&>SWyBRSiidpRCGZlBa*l z8nxkG#I@$dg^PsBg2(?1wrwx`6uU$%W1@gd~L9@|IBH%mRv zd9m$YNaBxYfgAK|Y`#6&4jlJkPwczh$AaSVaccW?$(y0JPt@ZPV_S5de_>&582QBB z@Q+D#{9wBW8LEl%{WtNK<6iAw+vm=~pXO`cdH8w~JPY9M0P{VxZDzdKUPwGo>g-h8 zVmO{4!|x`y_I;2y#MuvF8f4CZEu6dz2f%k;Py7! z7hZn2>m7JPgze==q-}4LehaL>|FZlrcHe%7@4swk9^TFzQS}hG>zb4osOb7AT3(>y z7HV;>LDzKu$0xEN;4kt%;5ocNHTa{k&G5+#?qw1pX zRHgvQ@k!ylMSD@S@%CAO@bJBD(#9V>Hs`gUDF{e9nU zSM>LyhHe>DpE|lx_$q(vJp9x;9cvP5>8uwAJ^bHIe*@#5=8( z59W42)Axdvm#NQ!jvrNC@Tjdma2N1CWj?Nbx$>4B2*vC_@S<7&scqP2TN1h%rRSe* zL)b$^$J+*ymolr~7$CM&+e(P>ZMF*Zv~2=qlD5rfct=I&TjUExd2O|A^my2Ys%>-N z9ihk4ZL`@wO^uItx?Fg%|2EEkRM_BRz?(|F^B6nlsBN~7JVrkH?Y8+L%Jn0Y^f?cG z5E|xk{PCagp9{o;z%o5vK0KLl5l}GK(eJj2A?x8MiDUn5iO72uEbYobe(rx|JlGbp zd)R-QV}HGWv#mbb-Wsi&^HR61w(TdM_y_vm7BM>N=sA9Di}K=g+fHivl`vZ>nL#W>-i$^_q6WUO(nq^6x z@aQCH5`M_=Kx3@f;`OL4%pqHRBjIJO-9b1_=6-FzEz`8mY?&C*<&5zMLai~MS(&#O ze(dm>E?aGxZFrxJ>bs5iKx4dW%Y3OHK^bqiWXb!X;ANlgUt3m@R_Fl(}w;O7{cMSiTR;RD&@@1?iZ&=Egxq&e20UFh z&6K}22|r`49lAz%^k7I{zE@?b-1mv6aQ+9`w+;ooKDG612H#zX@Lek6tg+C6+PaqT zIQjM!-^@Bg*bfxx?`LhD6CV$@&bO>SZ^A!|^vTTM=Kg5wT>P1Pxvk9ovbVG~3s@Cl zABg#uvr=2p+13R>nkR5y5G=qv5$XhcfC8^$yRG91+wA2&&H{Io%=b2Jfwr!MFzsi| z-dfqgcO}s07{ZKa6{3?WU~Gi%Sx~;n9<~GbrGe{sr;T^Fwl>i2+hEDl2t<4oD`g|Y zMdBxXfe?M1OKm+4oGv9uU#TU04mkCO$fC9~7Hw_LKt6B4(@FmneP5)EHt=QA#U7&w ze*j#F1Uw-UubN{bGL#$Pg=Tateg%acX z4tcb`LxXr9o_qNa_76?dYw^(NxV=JC$jR6jdWiI)k=XOWkk96~Q6l`t2W4lFmI{oq z0#Cp1AIMKks1SAtc^UKC!D&9{URCy2LiD!~^Rs1zRcNtSesg^J?~9==(Ec6DLB{WO zkj^^tyR0*c!Oppy5d4OBF22`a%AmYjU{z?@R|_bE=SvT}J*(ITR3Y0AJQo5N>-Acw zl;el`i(|*Q&8Cyct?DhO6DYsz`&6^*^4ZhS0Uv&J`^MA!DTfK#ERj{^e9}WK4hmDMW7=J6S z8vQb6-M1`e8)wd{IM1`XE_m?Y3VeF=K)!Ev#gf@Tt{&$HHV-51L@cfQ`2n>VTbHK9 z(t74gCEv%fw4V8<-6bD={f_w-@ZGKW*^r*~1xed{hx*ptB_HGX9rM-jU9XX`GJDq7 zK)yS*kForY`4~^`nC~3T^I`vr&RCf}+lT!t z;y%^0KJ0(TeAxev`LKWJ?K{*b^GWuO4_2*G1;RQZbo?BpjX-X~-AHU1%ZB@Q% z-Ll6zgYYtE{XO$NYx#2a|L^|^xELr!9wrt?o=W1*`roh0Yt|x!GncC_N1i(3`vG`1 zu(SG^Mpb^RS(P{Vmpyhf47mZYmpyi!^cL?jb~IIa6Ttpqbi6LdC(2Km_O>&Z&g(v2 zpCkWy;DRdeh=4Dt@{c?C{zNx@{+{O`S+**Fm*4+>PUd;$c%DI(UvuUo)s;i|x<_^8 zfp3JDP3(V_atPz60rw|PUw_#H&|hAb?|)GK%liF~ zz`X^8hZ>&Y%>Ac`%k$Xhz^ug|9ts}Yfi6XUlXr@(UY-k#Gx?^8+!59$CVe(*CiL=h zDshoz4&XQGBGU%;YYM^G`Q;3FM7}JqmWy%Xn8fzZJt-JC7!ayy!##3_se0Lf&ac-g$zI8xy-DP^|=(s zW`TP*@TRrZWF;DpCSK6;JA_9`7T5x-v0BZ{qlZ+wEqIoX3}YY z`4H3oc4)@lFL%Pz0YCRd<^9>?%q4yexT4qVFL(K^2Y(Bly^Qii=pO*L5!1P%zyA}l zQeN{|DQ(PC@ND`xV*S};#7`2({$SxRHKEQq0 zp)7fY8JlE|8 z&IVOhPP}j(--RhtWyR%4x*4!lS$GS5tm(gN6#JH4VO&eFRarCknW61p)&>0}!#w^e?;U?0 ze<}NbsB;av9Nquhk4o!e!sQpCh;5E9%U)r>~TwU065nGW)T_xBP$=t^*D2R zDgA%r#~!tQIP3M{=#>6e+TSbpS&~C>d#oxrPZ8q&Xz=p5d?jtRDt(Cb5fRvED{U;D zz&%(Yzk@W}o7@BhhoP-@Nq zmD2YUrW4NzkvHr-&neB4K0utlU;3=axd$v|EH6zJ9Uuqa9dE{WOJ)7?IQC5Eo{RCN z)E1us2g_L(tke05%T#G|*4mb5=VP*=vOs0r>XU zlQ(sLE4`|Hy!2hs_htC~flv@1r|GgsS;`nu+I5Y*nt#&(!~aqD{U7f+ZU6pclC@vl zo*PHmYU98m1FicL)y9X=7h^->Z}5#I{k{2(L$&{H^bS@VM~@`;Lu%t-(v$6h)@OOn z^VV4QFvh8kz7)da)y6RstiJb5R2x%$)H8XYm7JI=yC z?KfsfeY40*II|mnuHm0Ad--}U{?d3Ex9t4y&*%F;Uo2D``K>?R4O1Ka!R3EA+sRna zE&mpie;sv(BIGgcDYXNmQ#wi1WhQbqYGauP8-c?fwegITkKbR-TKUL^Zu+`LIs4(M z2I#jk{(cUB*ofUW)Id3ZQERTckQYl- zKhVKXPaA11yp)|4zH-vSv9zA~m`m@Nui-BFjpORse4Tg6$6R*D z{X6{e4*Pd8BkMr_uIT!&WQ4Wm=@ywh&}ky$S32Vr>$egQ&k|=v7+>^!T#^J$?gg2< zOGbg2%S$AUxwd39FjUXyC0=OE=OsR17BGf5Yl0Ge{x`s*BULhDV~pf2Yf6(Ka{*-s}g*qq>i%8{YuG4#2aiYISbrGUe+!p?LO8q zge5=Yc}WNIJV#qam&`#WZv&SB&WOu56-qk8n)f2%D>vw~h1_p_zaf~8)P=Rb0gfEFq9`#a}wdOhR4J-NaPNy8~O@3!RL|GqO z$zyIq|2_HMhmS1I^@Vp$|7T6i?_$s=-#QOm;kV`cSXScucHWDrUS~~QjBSdOh6|sL zd*pdPv?2Pe?_2CO70)4_k_dc6YrnJ^|mVBuo<3WRa_f!#y{B~Dh`S7fwy4W)8J~kPXOn7 zRdENH`Jy;XeW{F>tQCtJYQfE#r_qzQPW09SaQ($~L*yFaXiZ95$0rIgP7k?<`+3>xrBa2T^z88EAxMJt6?lSUpg&h67 zG(-BACvSD9rB)6URm$aM$5;A4bL@5aY0vsZ>ggEh$g{pb&!Tdn4U##S`y2GIJ_+Ew zXDCa{zuqf2jI3gB(vlx?^t^s3{Mc%}Pxgl4p9`Nw-1+{)M9n*%^0CeO$-o%+8OPVB z0aM^lGv#OaP5JuF-}=lsy8P+zm%^LneE&5N@|*H=7gJ51E`J&2r@~VJa7J)_E4Tl^ozRtvpZ=dJMvLMip? z$?Nj`kMuCm(ttk0fsi)>Eu?ka1bqwTOL=Wx>PMa=!tH+QK0*9~&i@9qbMHX&sJ9qv z*I(_>^t14Dzxl2C(6Hxv{Br#j+L{Qyb{RVSqQ~C@*Kd#qe#^A?7PO0B`|gydzxllh zx%q)b6IFIW!Rm=i)zTHgiGf8qYSHS6YUzT4Y>2a`PD!7gmj3kYr!t=zJ>$uzW>&neya}(N8><`p3yXEq%t+$(c`mn`(MgZ%r`uuUJ&DV&e1J zL6x01aYp{aY-Kbc^@~Cl<`FKo5Pe|ol1^I>9g-i4EybD%)^9yq+zc4pD z&l^~&3YP}eq7@?9*L>cbMN0}65zEUj^ezpM5LlE~xG0AgARnc&Lg7luUa+8G(JJp~ zZ;(Rs7v`&ny^Hgacf}&_(maY?VRmql7fCYm3knOemlk@TDp-p6y4~K`^c03vFu!o| z$~;}D%FoX6u2@uvH41c5rhvfs2_|G&OCB#~vbU_jwpu~AYz&H9Ns>G=|$=w7gZ}PtyFdPp9*$Q&)9)>1SfJ zXdv))hc6s>*bm9bcd1B{?Le(hX!pp!z=K`x=OwrzoSSyL>_(2hfsdYsFl<@vG4I%#t^+Q0g^2fghO)PV(B=J7t_F8}fg z4Se&pLDRl|*3jyqUDUKo(g5MB<{P8K4XwYSg`hoTXe<#OzH(^eH0@{C42}8vK$@n# zzC~z&a~Zx)B0Xt&k?WtJ1-5+(U&WM9@|~9U_be|kcEl%X6FwGNC*O7lYkMfWQ)m*G z%L(M&DvbvDeWf9e%=xR{>qa}}(A2+n#%V`ZY1(Z^2hdpqMJ5_rCox@zic~tZK&tFp ziSM?7qrQ>r(D>blIPG`Zch#GvaoTOCy>?(;T8x(WuU^8g&b2Q~U)1GEz-PJn@3&a1 zSOX+@F9Y+iVV3ooL9l;TSmd%r772hg(*ON^h3hS!zn`VPJ^wzp%fG}@vp-IUJYdpW zeGKlKJ9OyK{=y-AnO*)gBD1xKG+!BPXdp{7Xl>Whj;-aC_nsehTjwpS>4R zTjQBx%on5iKLZ2LGCt)RXCb4;Oa)|+A zZ4g4N9S=rjAM}&l6O$?@J??p>&r;8_4_j_)mA+bjj#q#ipo3%9Mirkzju_`h%Dl#_W%h%cfDGRaD?Zx?|U#oJW?F?MD95fmnHvKK%_Vnp^UuO6<W(||0ZpE zSH&bx+FRCh+h@+`s>m%~YUj2L{pJ#jpRnrMI`b`S{mkdTIdIa<&+vBtN@-C?>nE&l zJgRE#re_QH!erX=-oWsgtIp&-w;J7A_oZ&1Pwozj!e# z8S+nErB{GcSZYeuw*~%5NkQS{vf+_9AVt(rx@2YIIGFI|}{KCTgKvWeD zw`AcAd z*~bY>NT=OHyyu_Lg*y>?Kk`QZ`VvYs`TLTRNL*<0zpoS1+gW9LOUY8JNH3t}5a~5fKa;NWN=~h@dmMSROcL(r zloFRv@_+iD)T{qA&%KT$QJUyahokKkOU27&bs~Pyc+l0yc|JLi?(qLExTs&Cw;WM= z6uS*iG#=&uw7inmogNKG^G4&*GJ5lWTD&`N_w-LIt2=Kry*vJ&g}dkfW5dxh@5cYf z@Z2r`|BkeOk4(ZF^@HA6WQ)?Ga{e)83r`dzUo?-D6%9vmwA}7#QCj!B-D!VnxVvnB zYFVF}pShurj0p*||Fl1PZ~|k`XRJZi7pw=YKjSpOXzu6#!um^VG9P?T=WX4;vgYvY zILlhZ54h#?;Ci*S&icMpVwGE!)-LNuR-<*qYPDXo-mrdV{iAisx?)|m{=4;|^*>y0 zSAW-it}nQTyT0Oj#Pyi#Yc9Vl-Id|`w(B`pwkyY#>k7D5xz@N|bd|U^x;DGEx~g5f zU3*&fM_7Vx8coFUlO;$C=ONURh?~MCYzqr^!6n z^H1n{oe-Tx^-LzS*S$`Dz3z}1PS0pE^GZz5g!jNBHA(L7CF{9g(u70Gh^NZzt>qM2 zG=F?H{f~#F{qiUCwbY>Fx_z>8(lX0`;StTmrHV@wr|FeLv}Gcfq(x`@Ps*vw7kZQ@ zPU*fL5bfyF?lmD@mhlDGr|;AJyH?TuPv!PnvW?UIx|cXxDSzzc)mvzZ_O@9G z@`S)`xlBm|e4U<+ofSMU$gqBGljI*@xozuSyWiAdU4D+RS`R%|{^jbcK9c%AFktPU zfB0{2{IvC#m$Q#qZzuKbn;2<>O$(X0#oFNV{5L=Pbq)5o zI;}}5eLVhtpYNNUVq4+Q4}R(!H-7!*ds5e%)b(ISI8@4OGJ`S~j5v^HW%cdnEl-}Y zaZq}NCq41;FWxs|TONPBu25oG+K>AA6Z?Okx~7Jmx*n8d zx%&On)YnH$c`JqeUe}-5{r-AK?nPcd<`+7r{5a*IXCC~)uf9KP%Y-Q#UoU;YGd=O~ z&r{czwuhiWz*I%WD`uF?ht+xKsF3Xb= zrY+M_vtxA)_V@eBwDhl}CcpCFpV?Ob)U=D#_5Ep2oL!ML?J;jwU+byI*M9B8f4ldm zKiU1yfg=NhD~@g+mNa7V*FKQCUjO3d#g~u&Ca~kp&ib*FAn~ zO4#zd%Tnr`x^PST*Y=nG^#?!r&1)~T{&ESXhUBpk%DG%#^yIajaP%LRb*_ZI8i!;f z+2wK~;lxlsEA3Zp;`0giT8p~)UB;U*$o9YHkv&`z?zO22cQI6ges~@bTKtmUqpy2! z3C@xtTk1F|8E$Ls7pFxN{uBSF2L4k6 z|7U67f7#xXtj}bvcc;Cl_!>yoH+qfJbMHxZm}JjM??CB&5sAtAOR)Tx^^&IPov7&E zk?cK54Z3XkFY6_}QtR)e=v2L)jIT+f`Qy_4$3uGWN#_>{y6-)Se0qha|0mEYogU{G zd82z|-S?hkO|11LyzzBnZ%N~OPrAjj=N09Nufs)0dd(@8ilz(x|JvTur``{9-`|@a zz5kEmXnOB>l>TWrdLRF3d3w`&$9tC-O^@Q<>354q^9YWH@5X<(wBGr9$Ghi^rbTi0 zwEw?^qq0Z$nW9+a?;aMuDDU0c7Uk=Xqh)o^ufw0?*|;vZds?*oPoqWC{-gMRN0~ij ziS0eDP56`k=&^Dy{8{Vs)=(>%ou@~w$E-iM#NPubQID_|8^MZB4^ z-rC5%(+{of)*kD}ye$2S^*7cT>+hU>r(aputS;;Svi@&Z0{c$)yT0W5vTLMkjB7l* zPTz1n<(lLAYu93SoL0DAV9#ltYrU)76>?R%cDa7Uj#HECi0f6?DR!LRV8^M$b;;G~ zy6Sr0^?~c(T({Ze=<6Qf9_$|K_PW2~e%L+A?fcW(u5-Kp+@0$Fy8B6Ydcs=wQ^0KZ zx82XWv)#+w1@7;ea_i!>U95$`?~uE zln>pv+_w|%Nf?lDpHs(>gkcHEca(KxEah=0^!0?PG0H4L-!if15*9e2r3rZnt705$ zV|z~e?(^R|H$5xp1q>~WuA}jGwC&f{MRc0Su2QKJ@=kuHkCXw z_e)qm8B2gSKKn+~^xP{ky?6D;w(@R#@x3I`!rk|tWX~}Xa)t0ezij6|+e&cmvJJZ{ ze$dHPqG|tim@Bck&&C;6LYC`IheVBEa%%kS(S>^kJoXLS>htT(sS9^~xS3?v>%aQJ z>wmrHwV^kD`^$H~_RBZ-d~V|K-~Hwnzxls`;096#-qtIkkB>QRc zOBJQYBZO3uzgIl1S3ILvd~UCJR>+}|sn)+?UTD?YbZJgZkcw^uyaD_+zqZug3p_KJsk#jAV8!@c4Sz2cEx@z!4P zwqEh}Uh$4z@r%9UoxS4Mdc-FzseOBpM|&%K%)pS&-29(DXPE`2IC-932xYxlVlbnKh1!9z^Q?HW8L8gx6CYjFP_ z1lQmJ-QupneY?fTo!C8U3P}D04MtxtqHFM|UKF=$-r&*GJ+bzf^P03j^C|;vobLP- zwblW|*l@pW(ucKv^(ZGZ?>Y0@vPnN*;C@Z@pY&mkf0FWDbf}(uYi-toNguX+C#oxb z_Bd5E*Y_<;-GAR8cUt-+)&DYC-h7R~FBZ6$b?r|N{NemhBLCH&maYb;|NOo_eZQ%7 z-5=EF##{aq-<&aXmg+Nopoi0<)__%!`*V2mY5CJQ$n4a7zdPZT8@b)u*1a`%3XgW$ zChhOC65WiynHjz8AK$&D3_qs7&lvoz5yujWk616uk?+h5MCfzznY6ctKToLd-?n(u zTRtymk^6V0%l~T}Lrr)tGQ%NtMy5CzjX7t&)86u?wLke!I+ot@pp)34ypplq$=)Wx z@Mlp)!gDV<$<-#WIg^`~J9xyux9y^nv8-lj7PkKz*(i@+_x_XyeIEKr=yit9eC#mA z{Nc%CBPUJ1`25c&aiTdr?Zcx({OKGjSAY0zW%?_hS-K(p`SZ_2uICQQ?aJ+Xa+`k= zX~q6Yr(vG_d{@ik={ay7ee|^~s`=ZN5$Wn{zpZh?>8k(FJ3Pvl{@eO=<@>ou6FWS@ z(a6c_Cz;moeeIRO5=`IJMVW6ciufL95lpvKeDht{Ar|nhdS>UW_RfKO$$>V;{DgrnwR&!voFFk z21tfK51a~&rTk7)zTaocpQZCmo~Fwm4}TH7=Jy}6vP}8>{zKv)^t+&id;>bmhGzkg z34bj(7s#;#S>hEUe-J%6@~_k77p&6dFN42e^$_x&o`kG|FBu}mU#lRLh$g; zO<^(o?|`d;N;^0Vd7Scjhg+B5tn<|E*X7s1FKsu!|Mf+^fKrA0{+DH)(!3`;f&Y>P z5ASal@;&!L-q$Q_2hP}m|*bhvw z^NLJ+SEeD@<5Ir%hn3SwPX;E#kF8hE1;)YOY0A&agm3g00hjvGpB>2V()wH(f>uqNQovg%KMl+~-z&@DzW|o@ z?4o?*4=Wq|>It7Ie=})~KnqX@e`T7{IM0NJZ44bx186_ z`*maMW3)xhtDM0u!0%2(`4)RmY1-)#LbE4(BG%Hm?`Yb#(=om!{yCcVrY}az-Ev*i z-k1=hEjcsAFoplF-^F6<)TMetVrmQ~&yYjPLn#MwV^w#Ar)%_M7r@ zAp;{rRbmIL(&+!Mm5D+9=-<*`ao_SnBU4>hjW4W3*@>@U!Y@5Nzr=;^wPRN zn;4A?HngNq(k6sINgFTija@qL1ji2?qI!OSDesyU_@c<|T$=VX2|K}9An>!)PtYXM zT%V@|`Tm2)`Y%4--yLMDp!99Fl`YFwE6)0@J|Fs3u+9p6_cG~>m%*U` zCOjD6`vk%H;ITH}#pk;e?W0w22KgD&mVe||!8IPWqLp;!lVA!k!B)XEk6PECu%B=y z-$B`L=UH7c=8Ms0h!83`8A$f2;3dkhC%hQQ15#}j^hu{K{&#!`vl`GDYwi%cUl-Md5GV+uXt`2K?7&n7k!q)J4@RWrH zS_4As{_%R7C`SbudxHglZCic6Wvd|Vc68X_r(NiPxhHrEdK;MUeYh-7o|Q_t6`IH$ z3FTR7;1flkIr2rr37*L|ZM#N0yHT z^F2J#$#QJBd^-BLhCWJ(`@N2BmJcI59x&^_<)iidzue~!d@C6`>xJbXfU(!|wYFN` z@6VCEm_y3r*5aB}THduw!@)G>XCLZ)!L-*R&J+DG9q8;!0dE=dMF6|0~R{_Pg zmGqCuBl4H}#FTqkXn zH^_SauRrjpJldHz&Qkfeh~M(5ye4S5&>jNDLjQl*dl%@aj`Uo#^gzfmmK#|%GG_2L z!+;EWv|2(4ESQ#%uml1WA!EVFSW zUyoh8s&;kN1Y}p?8A6`>kVgNdf`WDcm=c{bXfMad?(<33A7co*Wg|&;-P#SK)M+2m#ew& zQ=~Tl_Xk0~odvn?6x^plIRE?Gb8sKVnG)ZS&yVk2_+JC>BJS_W=f^h+_ZWC@;~DA; za&I#DmB<4-cq1U3KjW>3u4=eHXWW~D`>1MA?mSzC)~aJ;nxGdLoGQdTmK9DkZ}VzKP1Tg{lMFihCbH%wL+uy zkwNIZ##(YN;C>y1=XW~t-#>7G&1iTPdQ_U>??*lKqrB;P@ef6$Pqg)eh~pv^5ci)s z&;27RKT%Koqwj(}0^a48oHu|kUE%&QdN*J!^bzocU9gW;>-WZ!DL-4kcMEOPUj|viAHjXi!g(F^%?!3a zG6J^^Zo}Yr6AyKlXXZdh8p0PKEG8E3WB~_ToM?;qEXW6OF9OXA^1JQ8cviXH=%DkV zcqypDjxcyW@v{ICj%=@4OZITSax>Y(c~!NPM|;CZf#v>Bt&a=1`P;UN_Yn8(lKMKjB)`ehx(E5idv=g)>m$R^cL})H-r`C`e(sXbA4fgl z$AGtC&%Zx`yU*ahK#=p}aHCG(&@jkTo8QMCT7ftdgJOSSegyU5Hv9+e+*gfy^B&yi zgWOMb<+LmpegXLC0PK5{Y(Raqi#ozlPxyY&FzD?O=zLe&ei3@m2657L8TP%4`&G(A z@F~pa(DyR#H*haP9ry(9n{aPK_KGX*rYwKPeJCSeALtD`+Q(kmb`GK~=|CGY3w)%{ zn}PPM%Mk6PHx<~B?V2}7wLwqK!*3?dG}`8xpxQJOW1=>KldTM-eTwp$~Mz$ zxAMn&z)J_A4tQ7D>75|kG$Y8p)!^02w%qH6d!?Ow@$P>Jd-ZvJphA!nwALc++6vuh zx4dNUc2FItA;`Tw%GNI6B0O`IxVNC)#JSYoci=|d^lk?2ru5^!O~u&@_aRUKv=_P$ zsPw-8+^2NDqU>ehy%gl${vh5NDi03Zd28}(+>5gFUIO9y^S%x}eXy6}8A5%}dXwSe z-cz7+gD8Kw|8v5TOQ|ez7-8S$-obaJjx!_NI|{j1Exfe|ck2Hgxx&3SptE1;y!J8F z-QcaMpSJ#&EmvX7ILGuX_kN)A=oUpsSK@iy{y#Pdlhz$iSXzr*=4x3@GGijQ&6TY6(B3fhJCf)z`X`k)*#-WEttWd@~^;~K=q^p zcbxa}*i{vO9q?AN3;CY}cfc;=MZId-0z!Rh*=FZ0Be>7)l{!(sTf`o4LF5PW0OioK zTip-9)^Xr{pgjii1?hbgZqz>^*AI6u=rHI|1G~$QdkD^@sTZOK$k(7E38FbZy5z2{g>ioxW{^1 zzh%L_k7WC({(H6%|6S1AkY9!SxE;F&S$J^<^VTK@y|oX37t{Yk-I&08>|?y!p6&Hq zNio>060|?vm>1b&<*j|yytM!_@1cBWT1EVi4Zw}}e5(QZbPMDmdk8vi8oYHS_!%H; zZ(HFzq)XV=`VgMUR=k&5QMX#1xL?J+sn>G@{ZkSCH1Y(`L~8^5P*$yVy=>~SzUMM- z1$k>da5eCsjq~M2{OyEw_fW2Z+DCL9dB=g%nQf^;EeAE$Ufd$HH1EApBQJh zZh;@kyo7XL9D^JB&Ozo?1?KxPd0i$UH>&l}3WbqG|7^b8Gn zu4JNbI1D_j!hZ_)Q9EzFf&2MtQBPW5hx;AK+HgmmX?>6KcYr@O!dhphTU*O1p0`1l zK;y8b*e-3y*_tg~;Gs`Ha~7(LxEe%D@ci_YZpY)SG81kDs+!H+85ZtNn*)q7AohHB8yVb<^M9xi7|Y@AOoO}U*x)Vz6>_&Vle-rz zg}WHEoV$yx+-)mGd}Y8ZK}FoXbQSyB@hbMUAFSnW^Z~y17d0&9=e1b$uz|a)E4X{r zCT6@}&(cnB=I**`?yhNKX@Bix2^+U?cS9X_WB*slxVvo!W7#{Iadj7W2fMg?+iqt3^B#8Bxfi&*C&=A9_9Ffs z?%qAb())WmOHmiMO!RL39|w^)N3r*R9LAIJ!Oo4VK=y;o^7;`xw`g}5!X9PCo}i`M zx|4A?&bUMZQxkrBpgS)aJUq+p!C-eD+Oe;r&2YclFYnm@HErX0(3`yd#%aF2TDJe` zPhJ8ZhVHld_Lc8|Mxf5X{WAEBzq<7b?xT>u2AS(1J0G7t2K*`9R@@QC$5#=CJ)6-r z!CR9*2Y;Nfx*oy%ABVrCTDZqR+Gh3w34-0d?N6WRby{WZ(nLWL;j%7H6MiEo76`~`*hWU-~K?}D%&>?>Z_+{Ie0m!$7tWiS3(ZF z!eZPZi|5{hKEJ0I_sunkvlg^r>)<%f3W(d(`CLzZ=Z>*z@DRsMC-$;M95=ThTpg+& zhmJnn8>G$(=%|9OQQQM|zRc3gmn8@JGL(-8&w!^}owKSbFhH z0H33@$v&Uw&@1$)anF7WcaaV9`ww4+wquzU_^KWD!(GI5Pj$dI%Ke;yK%Jlw|; zaHn_WyrV-b_db@lzhU0HaY@9R_eyRW*~PlEZ-npYBc$dET_i(S*p}qsJO9Q~?|hCS zNmLkwr!cq>&%3beHJ0~%@roxNY)I2~iSi&OU2*f!EhZaYnc1hy|BK2)1Q7qi<rFS8*l;UFi3y@<2B-{l`Hze<|#qpz@f%Ij(GeaRw(bZFe{ih@1XnRUR|L z<^8wr`Ca&?qRNBfp%8Ql9jO`Um>?e~SR(Re5AhLq*AV;qH>qsqACqM> zzx(UUMOcx~&>{01k4?QSbfdPU$p<-!sIM6kyv|+ev`hOS&T8`xkvIOTYK6NAR9W#jZlI zN4#e!ZkB!?w)uwG0xP{|7VM2HTM+ot_x^eDo*|)&-q_J+DCDOKeHOo`tsfVP+k!TJR35 zgY8MAk1i38<}Ps#9PvR@|DE@QkQ~{7_~<4s$IX@6$vW$7(k3xh9g(rd{(rMU_N|0X z?XUHbKJ-P{oe$aEJGWUTC<{0TWChtk1)xGu5ojr>80UTAJh0EMu+GxiLAKC#iY++9 z@=CiFzKdVm#Vzb!ScTo7Qdv4E3sf%R`VRV6kf(Pnqw(<KQb=P;}C&!DUD$j1E>&<(hAL3wch0`w{B@3-s$O4)UN&~?lmJYff z^Z;lECuf%^w6?w#!{dnx+t3vQ}-gq@$w67ft>90*Sr>L%h^ImEK&uqC$Q ztk>dyD){7|ir>RU$O-pdJ#goyd|qHjx3C8SNaJfrV;x(vq(1B2IMh3wrH%ZQ zF~$C0*dgP{`j`cTe#fmcx6m&2{{qwtNwMa82lm; zQn#=rI-SJR?H$^LIVj6{h)+C&L6*G$c3o#%oksRbv<3eQWlWdyr?7N|;&a?;AUDFT z970uLOR}ulJLCQkc{dIDh+0M0)D`j`eji9Jzuf<)N9p;N7nKogYG9q~HiOWX3mbOA zh7Bxl>51$ktW!$jKgrOg@QFWgi3`0=*>5M(BjUE)S$HQ{}>Ic-kdJ>vz)zC`Y2BPGNeb! zBtE3=ioCP$u-xOLITzTjoV_eg*okt~`oHR~^+R_a>4(k> z&^gF*7w=)-pN)YxMa1W07fF}EkQ3!b^(E);yC_@;KldKy%zySCc%;upVMRD{fOqE> zo=*xVDUXqSD&E7A7OObPS6rd6K=h2VbPLHZ2IWzk4*UNe?j%w7KgT?bYerXyWS_B|X@>1Gh#hU3Ya9f2w*NpFwzT6k4^pTjju&#*g_;p=ct;jPcI|%z; zz#L8kz5R1fus;@V>-+u8dv}ADg-te;Z6?{koa_MTps*J*sB@I3^T}V!L+1(TIYf0M zcZ}^4eA0(B|9jIR;-lv?75i$6x{*5uoo8g-7$g2XsW(N;kqI1G7gXI4GNk6FjC&xJ zb>dqUzSq$A z7q|@gIk@{k2Z84R8*ul7UItzdyb&z8GrBrn{nVe-*RJ&eSPQ0+>?9* z<@+hsz1#Qz?*;{h5Q`2-JmAm4q%Ee0BQjy{isjPT_Dtx=54^FKWLX_ zMd^46v;(vU-}u-*(0&k}A=V3mJoOiX@ZU8c>l4}A2kHT)=Vv9{{h*hDX>Ang8~_~! zruvEc-aH7R@~8UfgnJ0|8Zf1A4cx<^Q^2Y|HID$FQ@8`}QP2foijT@`4D>dzF0ZS= z?H4eH4O!1MuH$fkZ!pFaFj*-i8V;XN?h3|#<6iVM@pFsY&Zax6Fojb7+0Il10 z)unM~GU`T#fp4Dp{uzYZn8}@`c80z^`U`Wpb1rzZL0LAI_J;)+9~43s4PX|1;{|`7 zRqA}bls&kph}mkug}z8-wD?1j6+F8Qkv&r@rmAH3>K;MH>HTKV19>1<+CE^Xn? zI{4MpK@MRLz>Oamra##L``dW?=B+Z$dd_fhr@I@s?cfKvbK4HkPS7sy#P9#6uGo$H z9_~aRA>oLfJKux+@_opY9`4)=ckdzY+y#5`_j2bR;3F?{=Z?b&e}FstV0+(Dr1ur1 z*N(LIL5|jYLJsQ%oX7jYdyPB$>HJ6FV|M?BvQw~skUP%gRV%LNx1>PNG+FK_W6yQad-%RwgmSmQJq~;9A`b4#NJdy@PG0S=BD?3U;Nk*}HxJXy1cA#S7fk1Kn8vVOhA( z_m8{wb60N>>z0nRD&RL2K5c3LegW_$h0m+|h`L`? z_fbp7?8A_I+tPku6!+_jf7#Oc7Rt=^slp#v0zdTuf3ENiltmZHJw@S(P~Xrs@W;$M zb|2a}>dW4ZB#6EU`V_YaoBD<+jO1nCgZdw+S@IHnAnlIq6Ka89)BWGmPm)nh{g*q} znQ>>FEeF+uwt)`Z`GgISe~?+XBaKH{UfeWo8hAT|+sXQ@{cIar=a)o(4jAsfP-;`z z!y>)7Gwi`7@~CxdFZ>^dj{YHL-7orMq>N-gW>|Z7x9pEeUbt_L{;zdZ+9cwp9F5Sg z`jfff(Oh8YLOi30=RC`qaEm@Pg`vK84oK?AXVNA-uJTeg3lPz7&lfs$yfHeSp>##* zK;4;3N}_b&*$QId3!AQfL7zSjQ(FH3U2(!r*Rm(!PC}Rk2y>j-M%fU{D`eK)m-9BU z%Dh0_gCZT>-{@tndFV^WAC!3h$5>A_4mYI}We1(?o`u3sCX@0niM3+ptNC&d+yw}G zP0@#x2Xv92bjAK>t^ZIho(~F7apQuWdto24{r6ekK->)Iy_fjr(5!p@F!4zT<_n)E zC&CUO>|v3%Vf5*`AMD565Y2mv=S|2#9&*EwJH>LoTd$u_tzYPqb%5%Dl{vmoW2Gsi zpDvPPotHC(JN*1%F7?cQp&xgV@16g>5b;ciK=?NUE)kYHuJ(!kiesF4p8gbs_k`n! zy?uNW^NjC!fMqNJ#=EI$Ci6HZGEk0iW8`^HsihlvQAK+``87%`|)mXs)6hc+|h4oviG`QSQ%`6^i`6#xOeOU&li9g zxPF9lYsauX{%y?p;Cmv6LWe zHd@Xfg|0WiL%*o$1-tu&Orv!()@3&B2GRXZlC`*xrNcd7Z+{JGIfi$4)2U$VX1vpy z&LEHG;eH(S`GDu_s$fTTG2DY7^g)|~1*N zo30G;rW<|evs_0U!H)a8gB@u{-to9+f9!dD^Hr3Ylp9X5@L?QvQcQS04N7+VK z+MBZc#rt2Zr*AsDAr?fs1Wsdcq>k}>9u?g0>?pY+k97NL0-vP zsZSunbBB?Ia6@d`<7A&r@b7m7xuX!_uvX16fqT^e{CnXaZ2#y6{E#<}4CD>kg=r*L zy#eMt?$07Yz%<6!;s;+;qI}s`Jo)@?S_N`Z7RYKLO=QljuB8l=mNr%zENxI+6}l5gWhJXYg6pJX&U@U?gqjU{{#FUf%Jb4 zx!Qrbl|);S7S#f4t&FTbN+yfPAD@P z4Ts<7bBQDBa@dn4HEVGS-%_K@@93n%pvkub$G^4X$hB6V{}~_7iKgTJ{7o$g)1HI$ z(Y1p6+i{MxIMyw!4~G}ybU>W27wC{@#Wfl}*E8b0Xc>%E__-6oa5|yCQ=IH9G^n%c zI(;1;ZanMnG@3e_4IJ>?*bGZV$o1kpHgR+t&R-TsFu2Rt+~GEG zczoltkPkddWhYF^N6Hmg-WK<%DwsJD&|aU|qc0|%J<+BrR|6dPlCUw-}{9sAuG zXcs5K=d?eI;{ZkNmSO2X`WYXizff( z0oEz{ALIcY=$}6j(ghacTZ{Pc4gCnSwc+;?`f?QyQMkw}?+kQOcwD0Y1Q~KeM;mlB zux-7}wu`N>9b-3yZS>nzk`Z##n@EcfJ^{2@!tACFCj*0YdCtZ|J_+DgSJ=+(4$A`>vkR3$dcgjSXDG!kLAj>z9PlwpH z*I9lk`$Mup=v8;yyRw{#PnQUbaL^Mk@=@j=@;kqDh~;B#<=-9455(`wZ;G2CL;Q08 zsgI5F!1tq&eF5mLW!5nx|8U$tBc5%*9lxB`J9qMJEY9|3I4#gWV9JNX(2McG&t~Oc zihE`<{i@z9SM?j;v;Xg2$}7h1{_Pm~n+(6jM?TSAK3~gW`z6G2g5?hM=YPy9y6xVwh1}xOQ4vC73?q`uU|WOO&5g-KA{gf2lu`6XniZ z8c`mwgVz4wy9-Vk6ZWY%5rpi6KkW0tzCxD!=d;KjV9Ws&G_cgEXMjc8ai=_UVvKne zyCDrwxI3RAyi5c65j`l!u*LVnZ5o#spdJ()pfNS(8|vJXpAzRRdTO>wIWeoqKY-?qd4RkWTa$QGpyu|@IF)xBsH+e>odO8wZ&x@)#Y z$!ou_xvmzSH0e~A%zIe|nuoi#Ti?CA!)rB&2b+B)F1|-blnL^B zH`3a!h#`;OW;x%F&>Yqc9lL}F@~v=f%0?ZR=BfN|N1hH!`n^@k?@{Ovjnku)Yk+S( zqD%o@`O70RlhrD@V zo_AlN_QqYxd2e@-GsvrlLp*+aT=LHJhj|;v1aEn~n3qs-T$8+{oe^?31kd+*Lx|`7 ziCyscnXw4oO~G4sdnAJA7CioVFwCQ*!M^2*Jz?HY@O+TXvfnCf@fOoFMd@&c<%-iK zZ!57>dW&b{i%f%Hgm@D>+17J=qIr*58J{&8%`1L~f&`b}P4P>8z7Gc&ze#y0E@jIF z*7`qtqj@i80t;{AOSyfb+@j^q2%DpLz9!0ZQ`kk5gncZ7R!-=`qfCxF~{!(*D4+ z9d5sGId@`shjE?5-$o8;d)b;56(zM~Jgzb|X%J|`;q4+4zfpzR3d{loTt>uH0tw?X z)aX0eWmzsn$NV2^76U1X-zZ#A09{^!J;#q&mPd%)kZMHeFtKxt~o z(bz#l;C86@BJItt4&3wP9Yb(0M!k}kAL6xlHVOMN^ml!`)8%tKYiz+tzRlI{=barM zOigWdIn?BX6A2MxX~S4!aF5SL)u*$q4HHwcBrwC_Z*>{X2#uk%%UGl4L2_3b&yiL! z)!^!)!a~K7GY@LMC3?mL+lYMCynrVVF&_XWWY04mCkhHP4HBaEgh7iRHB{&Sf3UoY zCVVSGKQ^9OS^L8`STc1_XwPH%Iey$dBoqV#w@`E8XZMablzjAq!V;%1@bpJN$USK< z@!i`uI(<$;OY2|0wrce!KUh>z*|K_UZ0xOnmK#&YIZm#|*4BSHaJl3zY>TvKdR(HN z$5-7Acb~mP-1oaJ6d7Fwum+o2vzD?=Y+3@?3G2aKjv1gJYbi&&He(Hm1@YS@5ZNVc z8-gI*tmKCY>uGOtXP+hEzg7Imy|W_jM-}mdm2RgK( zYsMrFO<9}AlXOAB#b@GSD_n$0* zX>JRjHom{adnY~KV<|ZsU&WMK2elZvZrI_ zO4k0u71lAc7)#v$mr4bdQIuWSz#8Aa?%$3*#9KVw$T7>G(f;Dj{URUFW^B9*qmr=` z4_4Csy;mwB=5klKXHuYtE#YdT^kYma(wqrdtkKVV zIs;!ya3y_!VnNSdK3`x&5@h8KQi$hmn=Upq6H(7 z@SafR{(Rd{OueXJfk?`XYE<&9l^3ug|G1 zUsGLDQ&Y0Bs(dZv(kjZUHk8*^t|+nQWtY~}WUsI?i^Jd9=5e)w)6~|M?XW`bzD*_7 zE7AX0yP~{iWA>WzvdSmcSk{(5xuSe+?GrT{*RQCkDy31GC8RHVEuvXR19$N?g5HD< z7iO!`WB3AITK&q(x~j^x+KQa&^(z?Ozxjn$WSxUP2H;hRuxa%xYRXG$%VAE< z`tn*W*QVdE^eIR5ImFvHI$m@!ns`ThBRYEOm5UafAawx^!I$rA#A{@$&jiR)D!8=g z)~+k7tXZ+Hru_N!D{4w=S5z=d^}6-70F~9X$l9_>G{$WDigjx@l-JZ|m#kcqy|S{Z z9B+#0NX*K0Yio0!tf{OmCl~Z--imeQH7m+VGAy^gy1c4Nu-Nqavh~$s`8b!Yf5S!uatuK5wE85@rnqhMaUtaSC*HTNp%donvy3GWo7mHa>bio zzkWqYRe4!yWo>Dd%w`#H?YioSD42+2eRT0= zZ4ExyJy}_%N*ozTmv>?={$qTzKtS=r@O?N$Ji*Woe!H6SucO_Pm+<7b>+mh{NEFX| za2z-~tj|X6Pc+ZFZ`vfhv{>HnZ;0jX%ZTM2ygUi->Lk1yvAh?-GTZkez1N~`=C|pQ zj|(olk{JrXH!9vgb%%J~C9|a5w}%DK`~ohSdf7}rP4lZSPO=E)1YhghMT=E)0>M9q`G!5lQ78#7N%V-zO7 zfrkCnJbB>}=-N;7&XZ64znIhJ5&ELi7fPtffpnjz`FAl-uH%yP%7{>W6q!fNJLOG8VQL?yT#V)YgB`t&PqjHBz_WKUNN#BPRC>NtU7qr`c7}NT zwh_bgE*T?#eF=TO>*K8LoOlL^FL>T%G{%Y>S~ebTOZn|g;-T%M_@$ihMb(!68`X2g zyH-uk;IdD;LOkzdqzAkkJz?IG>&P=x9vmDcIg+7E+P5>Pow!S$cd5vO;Ieb-T9U&RIWY{H5i(rF|Y zT=p+jxU2LQT^Bs>3VVp>vvKVm;&~5#5X;*q>ITWsCG&5}n07|+uEg;8ZEFnAmvA74 z=RMdr39o+=-mzHTl#gS1ONxjWTy`}g4-QUNz7R8)(Y~Y@9>*C7q_6vTNj@CFdoVVA z-YFfCA}YUvF+BcOAMt|AevyT{)XCq9%^Ut!uaNT=219b*DdN3Pm@XN|L3-~BXNc#s z6~yqo2OB2gIVa(XIt{+KR2&>2Iu7r_z$Cm$^59Ht{pAxkDQs}rzlHO_doWhcXPXui zhtC$9_xv_v+gb-8D=umClsy0@n?Efg-q5m-C@$&AZzl^L-x>_@ypIhLFUV;`tmM2C z=LOIAc?56DUhPdx74HGJRmX ziozmU zeYJwe|3<_m78AZgE z@GWLZKpjne8tzS)D{U0Ny=61-p2D-W>c+$B(J?Z3nOhje<4o!VJD}Oq3>d7?clc_(s`=ry)I(<#)87G}BKS`l~ z$@K58ll)HWs3!$l|5^q~pM5fIdR+Xfv$M~#KWSOz!35xp)!05&Uvl0Lp+pCxT+;n89OoP-0p6%Ewb5 zw>+Nqc>3cHJf89R%+`DEg?;B^3xPtYOMV|gd8}W>rco4G-K>3VSlXGm8g9|n1Q9nV z0Yq1*Oqvmp&d1!GN!ee8PZL1xV@{x%AN>etcg9!Vn>u}ZVvBQi-0Ju^QBz(o5doSh zu1G#SQR|bc>Q+-R;a^+@;b)-{ze*DtUn7mH?oB;eK~?wfzBFahQjXsZ!QP9O92h@Hq~Pl%Z0;;1f}dC8OTs7{*YDC5n%^htOblkjFu z!kaq@kIKs&M^-E^QIt`TuNs1%4B(9`*3Jl?eG*>TB)p1AcvZ2yM6_Eb`*@}7!}IbX z_-R|JwKK%yb+?E&#Lo~*$t7OU&IsPMNqCdgje<~+ki%OrN%BsaSI;7$M%G%i2kNQKf4O>r1n%O~ zOXy?0utaOsQr^a{(24-8st}(TBD68~4SY`0e=F&?6Ie%(jc@K^Z3kJNMJrF*I|Bhf z(ul8A;#0oS1PLr*(IK-#I-G`6>Untk-^8u_c3GOQGVy;xvFt6bLMXZPj!X60#jXBkh_ z`tjwg!@o3A*)Qp~eD=w-Ay)L07v=xNAmcxIaVq|Q_6gpppa1x`@&C+^fBWZOruJKv zK0|!si1_@l)X=MXkg(F4C)QU`cIixZIdh&$`PLKk`OV0zS@*=+G6M@-gxFJzh4e*y zGWqrETZ>8{qyAF!B1B-CxI*@=c%o*5_@MK@V_iggSKtF!)vrO}mlYQIWzl|Pw7$Vb zZE3_cL-ddpBhgXqahK|;Xw($dE6#`$;ZBdS0;WX&{;VZB{hBRWG1)K4* z(oMIJ?F34k3CAxcXKG5XJ1zh_5g z^P0YsC1>YJcdZld%oBGBk9F4~w3A6+eudJvIYq{wgt^Nvj$e;2l5lXl?d-IY+wgj9(9Bx3EBT-x3HhD z%hI}4!b7?VYyHyx)L8pd!>UF2u>I~|&Hkha`;)%J{>|yXeEz4z+Mi;wUuD7<-5y%A zuB^OfZJsTAO(iW#$SJGDx9yUR^yNJ4Cl@SC?zcuPW|+*+`XxH8Y7xX2g!>|$)}rh$ zjF0?c(jeA=U>QiGQ6+v``K0`bCB4<<`Vir_2CH8>y+(v*I9w_E7Lh(`U5N-+<7)22 z&jXG19KVtkU4>9MpHbP-$UTk-KO^7|2=e;3(gH>Kb4=>TFsA!mViiuF6-zl}_XS=I zy(b+~ufD|3II*M^YglrzE)rb@(KUJw{U@IzypBiz)Dqnd;h$M=EzDQH8`brpSuDjs zH%ctzpr2qW;~
    qwyl@slg87=GcOV`}YK(^wwdOx;cD54QO6Q&^|r_4uSitSCje z$c0w9-j22|$Rc1D{X908ewAxH*Mz00qy}qFl?&lK-T?Qw+N0Mu8DiBEQ_m>se(W>) zV12}*8Cp~HxL(QwrTQwwe2G|Z=~=}R6OysSjlL7GA-qI|NQ=iV*6)SaI!3)u(VmJ$ zahTXBJ&~~EFW63+c}V{UTDEq7y7YCY&mlPdnX{Qc!qf(SSzlV|XD!WLSc1tCXVAY? z-F-;^(McJI)&tHV>4YPtnD`J5I~-z$graygJwrvF;(T%ari34+xUrP5#gk=;b7E?w zbo}tiRq+G=5+65kO(f(C{uLti@eFCi{O2^97Nfb(ghsh$@qP;wx^>7QyjVc-pac+& z9~tbj>}kNe{{MkZmOaA2-p(u=a9YupGH`5pwtU;8n+_l?dO*wtC!jnE1s9qpH^VRfI+0P`L@Rav9Zi%VW ze=Didc`hESD!&iEsXzJda6;=_uSc@ZfA=i=?^TsN5%TfvqkkFc_vVgs@xQ~%#y6j= zY8|a#{m~C*to{8pRU^Y}$C|2Bui00Ln6cP6x*rmq>M$xp`lm1qayECdS;$jfvmdkv zw1fFK?T26m=rQ0f5cX24abntYj_SvtA1L!EDED^03-@HuR8SIV3Mdhj0E!32f#{0O z&p+0)$i+W$Z~9jKQ=6YoecJML+SBPLOMaMGX;Gb_;_)B+!Zasa962Y8>DtZ3CkOsk z#`2s0zsZ5G%7IeUeyZaw^(!N)C0Kf1{{BD5Jp2-B<&`RG_vqaa4+_`gvq@+Yu*$xI zCfd;|CB21z_bhZ%*s1tSb>)Jj43) zr!comS*xya{s~4no_kdc_TlNUe)^Qeipo_Lm8&nVf(ey>xB6mLOnjBAR#%1M)8mtt zr_d&avW=O33lQ>9`G!cRU!*o1k=*{|c)GpfC-S5 zirE767mOCC6W^yWr-&BB;ceeG4T~3KD?ie7Wba0_*!<;d;-1+$vA_i_=Z$r%lPn?iJQ8=2Df`Z*iEq~ z-k`U{1xFGhPL7IL_J^uj%kE-)55=7Q6wK=;G~)i2>=1mO8 z@~%-EX^OXQ61l&fh?V=>n=w3ZVr>kM*P%T#$MLr}VtI9#4~vl-kL67aPQn|A;dxon zB)sAn9-rus;dz-ohQ}xRVt8KcEn>FWEBaxkJe@cYEBDBuSRSo!Fy(ev5nT`E)GPl$^CgwXuk-k&}&=Kj(o}96^jGV)j(@<7xzc5$)&w3 zR*XgHtAfgZ-=){&PP%sm=~P$5nq1AIyS7{3&1Di~i_Z%=I!EG5_pVr6^u>EuEWRw_ z#8=6pV_&v+#m_e}2ho4>y(>gweuaO(wzca;G(P;Q{Y0n}7*&sg$bEcgi>K$L=E z6!As;o*=9{R3=Lf53wb^qDzxqAFk~b0l z4JwnRNs(pJ^jpkXfcHa4UsU=K+ZSKDOmtYe-;(@2fzYXf{>o*tbOCAjiZY?jZcbfebRpk#8~H_d=E@cCxQH^5xy=!{eRJr*L8gMW}c_5kd}sc%Vc=6+yImq#eP(2HL6Hn)lzMJ3iL+r7mWbaozCk%4f+wA*MNz*z}CYOWB^^MNi5QxPiiEF-A_!WN7#!!7(;R*KPmfEIH8x!lsI3MJ0)LXk^XSJ_zB0l z$>Onze4*+j!`Vc>g!S5FIfng3Ifc`Q8b#$8@<&ayW{K(~^&y8VCyUog@rY`ynf;X+nENqx17`YNicltccPPZA%#x|04-zFP}L{2{xog_O>`P<~lOxrywS zdPTX3Y*JX{KP6jY)Yp

    kaKOsl0l)SD&B>en7N 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

    GYW2rc)8SHzJLRh1szZFKKo-fgr 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