1
0
mirror of synced 2026-04-27 04:37:42 +00:00

Rmk103 font and related code updates (#2216)

This PR contains a large number of changes in support of the implementation of the  Medley Dsplay Fon file format.

The changes are documented in the docs/internal/FONTCHANGES.TEDIT file.
This commit is contained in:
rmkaplan
2025-08-13 09:59:37 -07:00
committed by GitHub
parent 9c93b27d79
commit a9618e4aaf
55 changed files with 5051 additions and 4016 deletions

View File

@@ -1,239 +0,0 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "29-Jan-2025 19:34:13" {WMEDLEY}<lispusers>MULTI-ALIST.;15 12223
:EDIT-BY rmk
:CHANGES-TO (FNS MAPMULTI)
:PREVIOUS-DATE "25-Jan-2025 15:04:13" {WMEDLEY}<lispusers>MULTI-ALIST.;14)
(PRETTYCOMPRINT MULTI-ALISTCOMS)
(RPAQQ MULTI-ALISTCOMS
((MACROS GETMULTI PUTMULTI PUTMULTI-D PUTMULTI-NEW PUTMULTI-COUNT PUTMULTI-SUM REMOVEMULTI
REMOVEMULTIALL)
(MACROS FGETMULTI FPUTMULTI FPUTMULTI-D FPUTMULTI-NEW)
(FNS MAPMULTI MAPMULTI1 COLLECTMULTI)
(FNS GETMULTI.EXPAND PUTMULTI.EXPAND REMOVEMULTI.EXPAND)
(MACROS ADDTOMULTI)
(FNS ADDTOMULTI1)
(LOCALVARS . T)))
(DECLARE%: EVAL@COMPILE
(PUTPROPS GETMULTI MACRO (ARGS (GETMULTI.EXPAND 'SASSOC ARGS)))
(PUTPROPS PUTMULTI MACRO (ARGS (PUTMULTI.EXPAND 'SASSOC ARGS)))
(PUTPROPS PUTMULTI-D MACRO (ARGS (PUTMULTI.EXPAND 'SASSOC ARGS NIL T)))
(PUTPROPS PUTMULTI-NEW MACRO (ARGS (PUTMULTI.EXPAND 'SASSOC ARGS)))
(PUTPROPS PUTMULTI-COUNT MACRO (ARGS (PUTMULTI.EXPAND 'SASSOC (APPEND ARGS '(1))
NIL NIL T)))
(PUTPROPS PUTMULTI-SUM MACRO (ARGS (PUTMULTI.EXPAND 'SASSOC ARGS NIL NIL T)))
(PUTPROPS REMOVEMULTI MACRO (ARGS (REMOVEMULTI.EXPAND ARGS)))
(PUTPROPS REMOVEMULTIALL MACRO (ARGS (REMOVEMULTI.EXPAND ARGS T)))
)
(DECLARE%: EVAL@COMPILE
(PUTPROPS FGETMULTI MACRO (ARGS (GETMULTI.EXPAND 'FASSOC ARGS)))
(PUTPROPS FPUTMULTI MACRO (ARGS (PUTMULTI.EXPAND 'FASSOC ARGS)))
(PUTPROPS FPUTMULTI-D MACRO (ARGS (PUTMULTI.EXPAND 'FASSOC ARGS NIL T)))
(PUTPROPS FPUTMULTI-NEW MACRO (ARGS (PUTMULTI.EXPAND 'FASSOC ARGS)))
)
(DEFINEQ
(MAPMULTI
[LAMBDA (MULTIALIST MAPFN) (* ; "Edited 29-Jan-2025 19:33 by rmk")
(* ; "Edited 25-Jan-2025 14:51 by rmk")
(* ; "Edited 16-Jan-2025 10:32 by rmk")
(* ; "Edited 6-Jan-2020 10:15 by rmk:")
(* ;; "MAPMULTI applies a mapping function of N args to each item in an N-way item in the multi-alist at MULTIALIST. If an item C is inserted by (PUTMULTI FOO A B C), then MAPFN should be a 3 argument function and it will be applied to A B C. The caller is responsible for making sure the arities of the index and the mapfn correspond.")
(DECLARE (SPECVARS MAPFN))
(LET ($$LISTFORARGS$$)
(DECLARE (SPECVARS $$LISTFORARGS$$))
(SETQ $$LISTFORARGS$$ (FOR I FROM 1 TO (NARGS MAPFN) COLLECT NIL))
(MAPMULTI1 MULTIALIST $$LISTFORARGS$$ (NARGS MAPFN])
(MAPMULTI1
[LAMBDA (SUBALIST ARGLIST NREMAINING) (* ; "Edited 25-Jan-2025 15:03 by rmk")
(* ; "Edited 22-Jan-2025 23:42 by rmk")
(* ; "Edited 16-Jan-2025 10:29 by rmk")
(* ; "Edited 6-Jan-2020 10:21 by rmk:")
(DECLARE (USEDFREE $$LISTFORARGS$$ MAPFN))
(if [AND (IGREATERP NREMAINING 1)
(LISTP (CAR (LISTP SUBALIST]
then
(* ;; "Still a list of alists.")
(for SI in SUBALIST do (RPLACA ARGLIST (CAR SI))
(MAPMULTI1 (CDR SI)
(CDR ARGLIST)
(SUB1 NREMAINING)))
else (for ITEM inside SUBALIST do (RPLACA ARGLIST ITEM)
(APPLY MAPFN $$LISTFORARGS$$])
(COLLECTMULTI
[LAMBDA (MULTIALIST MAPFN) (* ; "Edited 25-Jan-2025 15:00 by rmk")
(* ; "Edited 22-Jan-2025 23:44 by rmk")
(* ; "Edited 6-Jan-2020 10:15 by rmk:")
(LET ($$COLLECT)
(DECLARE (SPECVARS $$COLLECT))
(MAPMULTI MULTIALIST MAPFN)
$$COLLECT])
)
(DEFINEQ
(GETMULTI.EXPAND
[LAMBDA (ASSOCFN ARGS) (* ; "Edited 16-Jan-2025 10:27 by rmk")
(* ; "Edited 19-Jul-2020 00:38 by rmk:")
(* ; "Edited 22-Mar-2020 13:21 by rmk:")
(* ; "Edited 27-Feb-2020 13:44 by rmk:")
(* ; "Edited 30-Dec-2019 20:50 by rmk:")
(* ;; "If SUM, returns the value after the last argument, paired with PUTMULTISUM")
(IF (CDR ARGS)
THEN `(LET ($$CELL$$)
(DECLARE (LOCALVARS $$CELL$$))
,@[FOR ATAIL (HEAD _ (CAR ARGS)) ON (CDR ARGS)
COLLECT (PROG1 `[SETQ $$CELL$$ (CDR (,ASSOCFN ,(CAR ATAIL)
,HEAD]
(SETQ HEAD '$$CELL$$))]
$$CELL$$)
ELSE (CAR ARGS])
(PUTMULTI.EXPAND
[LAMBDA (ASSOCFN ARGS ALLOWREPEATS SINGLEVALUE SUM) (* ; "Edited 23-Jan-2025 09:40 by rmk")
(* ; "Edited 16-Jan-2025 10:18 by rmk")
(* ; "Edited 17-Aug-2020 14:09 by rmk:")
(* ;; "If ALLOWREPEATS, doesn't test (MEMBER) for preexisting values, just accumulates")
(* ;; "If SINGLEVALUE, new value smashes out old")
(* ;; "For SUM, the last argument is the increment to be added to the current value, and the incremented value is returned for PUTMULTISUM and for GETMULT")
(* ;; "")
(* ;; "We get the setf method so that any expressions in the form will be evaluated only once.")
(CL:MULTIPLE-VALUE-BIND
(TEMPVARS VALFORMS STOREVARS STOREFORM ACCESSFORM)
(CL:GET-SETF-METHOD (CAR ARGS))
(CL:IF (CDR ARGS)
`(LET*
,(FOR VF IN VALFORMS AS TV IN TEMPVARS COLLECT (LIST TV VF))
(DECLARE (LOCALVARS ,@TEMPVARS))
(LET
($$ARG1$$ $$ARG2$$)
(DECLARE (LOCALVARS $$ARG1$$ $$ARG2$$))
,@[FOR ATAIL (HEAD _ ACCESSFORM) ON ARGS WHILE (CDR ATAIL)
JOIN
(IF (AND SUM (NULL (CDDR ATAIL)))
THEN (POP ATAIL)
`[(CL:UNLESS ,HEAD (RPLACD $$ARG1$$ 0))
(SETQ $$ARG2$$ (ADD ,HEAD ,(CAR ATAIL]
ELSE
(PROG1 `[(SETQ $$ARG2$$ ,(CADR ATAIL))
,(IF (CDDR ATAIL)
THEN `[SETQ $$ARG1$$ (OR (,ASSOCFN $$ARG2$$ ,HEAD)
(CAR (CL:PUSH (CONS $$ARG2$$)
,HEAD]
ELSEIF ALLOWREPEATS
THEN `(push ,HEAD $$ARG2$$)
ELSEIF SINGLEVALUE
THEN `(RPLACD $$ARG2$$)
ELSE `(OR (MEMBER $$ARG2$$ ,HEAD)
(push ,HEAD $$ARG2$$]
(SETQ HEAD '(CDR $$ARG1$$)))]
$$ARG2$$))
(CAR ARGS))])
(REMOVEMULTI.EXPAND
[LAMBDA (ARGS ALLFLAG) (* ; "Edited 16-Jan-2025 10:34 by rmk")
(* ; "Edited 17-Aug-2020 15:12 by rmk:")
(* ; "Edited 17-May-2020 17:25 by rmk:")
(* ; "Edited 14-Feb-2020 11:24 by rmk:")
(* ; "Edited 25-Dec-2019 09:57 by rmk:")
(* ;; "If ALLFLAG, then all data after the last of ARGS, if any, is removed. That is, if there are 3 keys to the index, and REMOVEMULTIALL is invoked with 2 keys, then it's as if no entries were made for any of the third keys after those first two. In the case of REMOVEMULTIALL, it returns the previous tail.")
(* ;; "No point in distinguishing FASSOC from SASSOC here.")
(CL:MULTIPLE-VALUE-BIND
(TEMPVARS VALFORMS STOREVARS STOREFORM ACCESSFORM)
(CL:GET-SETF-METHOD (CAR ARGS))
(CL:IF (CDR ARGS)
`(LET*
,(FOR VF IN VALFORMS AS TV IN TEMPVARS COLLECT (LIST TV VF))
(DECLARE (LOCALVARS ,@TEMPVARS))
(LET
($$ARG1$$ $$ARG2$$)
(DECLARE (LOCALVARS $$ARG1$$ $$ARG2$$))
,@[FOR ATAIL (HEAD _ ACCESSFORM) ON ARGS WHILE (CDR ATAIL)
JOIN (PROG1 `[(SETQ $$ARG2$$ ,(CADR ATAIL))
,(IF (CDDR ATAIL)
THEN `(SETQ $$ARG1$$ (SASSOC $$ARG2$$ ,HEAD))
ELSEIF ALLFLAG
THEN `(CL:WHEN (SETQ $$ARG1$$ (SASSOC $$ARG2$$ ,HEAD))
(SETQ $$ARG2$$ (CDR $$ARG1$$))
(RPLACD $$ARG1$$))
ELSE `(AND (SETQ $$ARG2$$ (MEMBER $$ARG2$$ ,HEAD))
(RPLACD $$ARG1$$ (DREMOVE (SETQ $$ARG2$$ (CAR $$ARG2$$))
,HEAD]
(SETQ HEAD '(CDR $$ARG1$$)))]
$$ARG2$$))
(CAR ARGS))])
)
(DECLARE%: EVAL@COMPILE
(PUTPROPS ADDTOMULTI MACRO [ARGS (CL:MULTIPLE-VALUE-BIND
(TEMPVARS VALFORMS STOREVARS STOREFORM ACCESSFORM)
(CL:GET-SETF-METHOD (CAR ARGS))
`(LET* [,@(FOR VF IN VALFORMS AS TV IN TEMPVARS
COLLECT (LIST TV VF))
($$KEYS ,(CADR ARGS]
(DECLARE (LOCALVARS $$KEYS ,@TEMPVARS))
(COND
[(LISTP $$KEYS)
(CL:UNLESS (SASSOC (CAR $$KEYS)
,ACCESSFORM)
(CL:PUSH (CONS (CAR $$KEYS))
,ACCESSFORM))
(ADDTOMULTI1 ,ACCESSFORM $$KEYS ,(CADDR ARGS]
(T (CL:SETF ,ACCESSFORM ,(CADDR ARGS])
)
(DEFINEQ
(ADDTOMULTI1
[LAMBDA (PLACE KEYS VAL) (* ; "Edited 22-Jan-2025 23:47 by rmk")
(* ; "Edited 17-Aug-2020 15:05 by rmk:")
(* ;; "This allows the keys to be provided in a single list rather than as separate arguments.")
(FOR I (P _ PLACE) IN KEYS DO [SETQ P (OR (SASSOC I P)
(CAR (PUSH (CDR P)
(CONS I] FINALLY (PUSH (CDR P)
VAL))
VAL])
)
(DECLARE%: DOEVAL@COMPILE DONTCOPY
(LOCALVARS . T)
)
(DECLARE%: DONTCOPY
(FILEMAP (NIL (1837 4449 (MAPMULTI 1847 . 2915) (MAPMULTI1 2917 . 3974) (COLLECTMULTI 3976 . 4447)) (
4450 10311 (GETMULTI.EXPAND 4460 . 5581) (PUTMULTI.EXPAND 5583 . 7995) (REMOVEMULTI.EXPAND 7997 .
10309)) (11461 12146 (ADDTOMULTI1 11471 . 12144)))))
STOP

Binary file not shown.

Binary file not shown.

View File

@@ -1,19 +1,18 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "10-Apr-2024 09:49:11" {WMEDLEY}<lispusers>NSDISPLAYSIZES.;5 9232
(FILECREATED "15-Jul-2025 10:25:11" {WMEDLEY}<lispusers>NSDISPLAYSIZES.;7 7757
:EDIT-BY rmk
:CHANGES-TO (FNS NSDISPLAYSIZE)
:CHANGES-TO (FNS PURGENSFONTS)
:PREVIOUS-DATE " 8-Apr-2024 11:48:01" {WMEDLEY}<lispusers>NSDISPLAYSIZES.;4)
:PREVIOUS-DATE " 9-Jun-2025 19:52:26" {WMEDLEY}<lispusers>NSDISPLAYSIZES.;6)
(PRETTYCOMPRINT NSDISPLAYSIZESCOMS)
(RPAQQ NSDISPLAYSIZESCOMS
[(FNS NSDISPLAYSIZE NS\FONTFILENAME NS\FONTFILENAME.OLD PURGENSFONTS)
(ADDVARS (NSFONTFAMILIES CLASSIC MODERN TERMINAL OPTIMA TITAN))
(INITVARS (*SMALLSCREEN* (ILESSP SCREENWIDTH 700)))
[COMS (* ;
 "VirtualKeyboard font needs adjusting so that real Classic 12 still appears")
@@ -90,44 +89,19 @@
FACE EXTENSION CHARACTERSET])
(PURGENSFONTS
[LAMBDA (TYPES) (* ; "Edited 14-Sep-96 09:27 by rmk:")
(* ; "Edited 14-Dec-87 14:53 by bvm:")
(/SETTOPVAL
'\FONTSINCORE
(FOR ENTRY IN \FONTSINCORE BIND BADTYPES TMP
COLLECT
(SETQ BADTYPES (IF (AND (MEMB (CAR ENTRY)
NSFONTFAMILIES)
(OR (NULL TYPES)
(EQMEMB 'NS TYPES)))
THEN (CONS 'DISPLAY TYPES)
ELSE (MKLIST TYPES)))
(CONS
(CAR ENTRY)
(FOR SIZES IN (CDR ENTRY)
WHEN [SETQ TMP
(IF (AND (NULL TYPES)
(> (CAR SIZES)
12))
THEN (* ;
 "Only have to get rid of sizes smaller than 14")
(CDR SIZES)
ELSE (FOR FACE IN (CDR SIZES)
WHEN (SETQ TMP
(FOR ROT IN (CDR FACE)
WHEN (SETQ TMP (FOR DEV
IN (CDR ROT) COLLECT
DEV
UNLESS (MEMB (CAR DEV)
BADTYPES)))
COLLECT (CONS (CAR ROT)
TMP)))
COLLECT (CONS (CAR FACE)
TMP] COLLECT (CONS (CAR SIZES)
TMP])
)
[LAMBDA (TYPES) (* ; "Edited 15-Jul-2025 09:47 by rmk")
(* ; "Edited 14-Sep-96 09:27 by rmk:")
(* ; "Edited 14-Dec-87 14:53 by bvm:")
(ADDTOVAR NSFONTFAMILIES CLASSIC MODERN TERMINAL OPTIMA TITAN)
(* ;; "Removes current NS display fonts with sizes LEQ 12. No need to be undoable, cache entries will be recreated on demand.")
(DECLARE (GLOBALVARS \FONTSINCORE))
(MAPMULTI \FONTSINCORE (FUNCTION (LAMBDA (FM S FC R TAIL)
(CL:WHEN (AND (MEMB FM NSFONTFAMILIES)
(ILEQ S 12)
(EQ 'DISPLAY (CAR TAIL)))
(RPLACD TAIL])
)
(RPAQ? *SMALLSCREEN* (ILESSP SCREENWIDTH 700))
@@ -170,7 +144,7 @@
(VKBD.FIX.FONT)
)
(DECLARE%: DONTCOPY
(FILEMAP (NIL (1522 7564 (NSDISPLAYSIZE 1532 . 4862) (NS\FONTFILENAME 4864 . 5105) (
NS\FONTFILENAME.OLD 5107 . 5356) (PURGENSFONTS 5358 . 7562)) (7776 8814 (VKBD.FIX.FONT 7786 . 8812))))
(FILEMAP (NIL (1449 6157 (NSDISPLAYSIZE 1459 . 4789) (NS\FONTFILENAME 4791 . 5032) (
NS\FONTFILENAME.OLD 5034 . 5283) (PURGENSFONTS 5285 . 6155)) (6301 7339 (VKBD.FIX.FONT 6311 . 7337))))
)
STOP

Binary file not shown.

View File

@@ -1,66 +1,61 @@
(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED " 9-Mar-88 15:54:25" {IVY}<HOGG>LISP>MEDLEY>PRESSFROMNS.;13 81335
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
changes to%: (VARS PRESSFROMNSCOMS)
(FNS \CREATECHARSET.PRESS \CREATECHARSETZERO.PRESS \CREATEPRESSFONT \COERCEFONT)
(RECORDS PRESSDATA)
(FILECREATED "14-Jul-2025 23:24:28" 
{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>PRESSFROMNS.;3 80159
previous date%: " 4-Mar-88 12:52:46" {IVY}<HOGG>LISP>MEDLEY>PRESSFROMNS.;9)
:EDIT-BY rmk
:CHANGES-TO (FNS GETCHARPRESSTRANSLATION PUTCHARPRESSTRANSLATION)
:PREVIOUS-DATE " 5-Jul-2025 18:52:47"
{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>PRESSFROMNS.;2)
(* "
Copyright (c) 1986, 1988 by Xerox Corporation. All rights reserved.
")
(PRETTYCOMPRINT PRESSFROMNSCOMS)
(RPAQQ PRESSFROMNSCOMS [(* This file uses CONSTANTS defined in PRESS, so it is necessary to
LOADFROM PRESS before changing this file.)
(FNS \SMASHPRESSFONTS)
(FNS GETCHARPRESSTRANSLATION PRESS.NSARRAY PUTCHARPRESSTRANSLATION)
(FNS \DSPFONT.PRESS \DSPSPACEFACTOR.PRESS \ENTITYSTART.PRESS
\SETSPACE.PRESS \STARTPAGE.PRESS \PRESS.COERCEFONT
\DSPFONT.PRESSFONT SETUPFONTS.PRESS)
(FNS \CREATEPRESSFONT \CREATECHARSET.PRESS \CREATECHARSETZERO.PRESS)
(FNS \PRESSCURVE2)
(COMS (* Generic utility for coercing fonts, could be used by other
devices)
(FNS \COERCEFONT))
(ALISTS (FONTCOERCIONS PRESS)
(MISSINGFONTCOERCIONS PRESS))
(GLOBALVARS FONTCOERCIONS MISSINGFONTCOERCIONS)
(FNS \STRINGWIDTH.PRESS \CHARWIDTH.PRESS \OUTCHARFN.PRESS)
(* * new declaration for PRESSDATA)
(DECLARE%: DONTCOPY (RECORDS PRESSDATA))
(INITRECORDS PRESSDATA)
(* * NSTOASCIITRANSLATIONS is a list with elements of the form
(charset translationArrayName)
%, where translationArrayName is bound to a translation array for
charset which contains (fontFamily charcode)
lists)
(FNS \NSTOASCIIARRAY \NSTOASCIITRANSLATION)
(GLOBALVARS NSTOASCIITRANSLATIONS PRESSFONTFAMILIES)
[INITVARS (PRESSFONTFAMILIES '((GACHA)
(TIMESROMAN)
(HELVETICA)
(SYMBOL)
(MATH)
(HIPPO)
(CYRILLIC)
(NEWVEC)
(SNEWVEC)
(HNEWVEC)
(VNEWVEC]
(INITVARS (NSTOASCIITRANSLATIONS))
(ADDVARS (NSTOASCIITRANSLATIONS (0 ASCIIFROM0ARRAY)
(38 ASCIIFROM38ARRAY)
(39 ASCIIFROM39ARRAY)
(239 ASCIIFROM239ARRAY)))
(UGLYVARS ASCIIFROM0ARRAY ASCIIFROM38ARRAY ASCIIFROM39ARRAY
ASCIIFROM239ARRAY)
(P (\SMASHPRESSFONTS))
(DECLARE%: DONTCOPY (CONSTANTS (unknownCharTranslation
'(MATH 59])
(RPAQQ PRESSFROMNSCOMS
[(* This file uses CONSTANTS defined in PRESS, so it is necessary to LOADFROM PRESS before
changing this file.)
(FNS \SMASHPRESSFONTS)
(FNS GETCHARPRESSTRANSLATION PRESS.NSARRAY PUTCHARPRESSTRANSLATION)
(FNS \DSPFONT.PRESS \DSPSPACEFACTOR.PRESS \ENTITYSTART.PRESS \SETSPACE.PRESS \STARTPAGE.PRESS
\PRESS.COERCEFONT \DSPFONT.PRESSFONT SETUPFONTS.PRESS)
(FNS \CREATEPRESSFONT \CREATECHARSET.PRESS \CREATECHARSETZERO.PRESS)
(FNS \PRESSCURVE2)
(COMS (* Generic utility for coercing fonts, could be used by other devices)
(FNS \COERCEFONT))
(ALISTS (FONTCOERCIONS PRESS)
(MISSINGFONTCOERCIONS PRESS))
(GLOBALVARS FONTCOERCIONS MISSINGFONTCOERCIONS)
(FNS \STRINGWIDTH.PRESS \CHARWIDTH.PRESS \OUTCHARFN.PRESS)
(* * new declaration for PRESSDATA)
(DECLARE%: DONTCOPY (RECORDS PRESSDATA))
(INITRECORDS PRESSDATA)
(* * NSTOASCIITRANSLATIONS is a list with elements of the form (charset translationArrayName)
%, where translationArrayName is bound to a translation array for charset which contains
(fontFamily charcode)
lists)
(FNS \NSTOASCIIARRAY \NSTOASCIITRANSLATION)
(GLOBALVARS NSTOASCIITRANSLATIONS PRESSFONTFAMILIES)
[INITVARS (PRESSFONTFAMILIES '((GACHA)
(TIMESROMAN)
(HELVETICA)
(SYMBOL)
(MATH)
(HIPPO)
(CYRILLIC)
(NEWVEC)
(SNEWVEC)
(HNEWVEC)
(VNEWVEC]
(INITVARS (NSTOASCIITRANSLATIONS))
(ADDVARS (NSTOASCIITRANSLATIONS (0 ASCIIFROM0ARRAY)
(38 ASCIIFROM38ARRAY)
(39 ASCIIFROM39ARRAY)
(239 ASCIIFROM239ARRAY)))
(UGLYVARS ASCIIFROM0ARRAY ASCIIFROM38ARRAY ASCIIFROM39ARRAY ASCIIFROM239ARRAY)
(P (\SMASHPRESSFONTS))
(DECLARE%: DONTCOPY (CONSTANTS (unknownCharTranslation '(MATH 59])
@@ -79,30 +74,28 @@ this file.)
(DEFINEQ
(GETCHARPRESSTRANSLATION
[LAMBDA (CHARCODE FONT) (* thh%: "28-Feb-86 12:03")
(* returns the Press translation for a character in a font)
[LAMBDA (CHARCODE FONT) (* ; "Edited 14-Jul-2025 23:23 by rmk")
(* ; "Edited 5-Jul-2025 18:51 by rmk")
(* thh%: "28-Feb-86 12:03")
(* ;
 "returns the Press translation for a character in a font")
(COND
((OR (CHARCODEP CHARCODE)
(EQ CHARCODE 256))
(* bitmap for char 256 is what gets printed if char not found)
(EQ CHARCODE 256)) (* ;
 "bitmap for char 256 is what gets printed if char not found")
)
((OR (STRINGP CHARCODE)
(LITATOM CHARCODE))
(SETQ CHARCODE (CHCON1 CHARCODE)))
(T (\ILLEGAL.ARG CHARCODE)))
(LET [TR CSINFO (FONTDESC (\GETFONTDESC FONT 'PRESS]
(* fetch the csinfo for the character set of this character.)
(LET [TR CSINFO (FONTDESC (FONTCOPY FONT NIL NIL NIL 'PRESS]
(* ;
 "fetch the csinfo for the character set of this character.")
(SETQ CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE)
FONTDESC))
(SETQ TR (\GETBASEPTR (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)
(UNFOLD (\CHAR8CODE CHARCODE)
2))) (* Return a copy)
2))) (* ; "Return a copy")
(LIST (CAR TR)
(CDR TR])
@@ -135,17 +128,18 @@ this file.)
array])
(PUTCHARPRESSTRANSLATION
[LAMBDA (CHARCODE FONT NEWTRANSLATION) (* ; "Edited 29-Feb-88 10:28 by thh:")
[LAMBDA (CHARCODE FONT NEWTRANSLATION) (* ; "Edited 14-Jul-2025 23:24 by rmk")
(* ; "Edited 5-Jul-2025 18:51 by rmk")
(* ; "Edited 29-Feb-88 10:28 by thh:")
(* ;
 "Changes the Press translation for a character in a font")
 "Changes the Press translation for a character in a font")
(COND
((CHARCODEP CHARCODE))
((OR (STRINGP CHARCODE)
(LITATOM CHARCODE))
(SETQ CHARCODE (CHCON1 CHARCODE)))
(T (\ILLEGAL.ARG CHARCODE)))
(PROG* ((FONTDESC (\GETFONTDESC FONT 'PRESS))
(PROG* ((FONTDESC (FONTCREATE FONT NIL NIL NIL 'PRESS))
(CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE)
FONTDESC))
(CHAR8CODE (\CHAR8CODE CHARCODE))
@@ -162,11 +156,12 @@ this file.)
(MAX DATUM (ffetch \SFAscent of (CAR TR]
[change (ffetch CHARSETDESCENT of CSINFO)
(MAX DATUM (ffetch \SFDescent of (CAR TR]
[freplace \SFHeight of FONTDESC
with (PLUS (change (ffetch \SFAscent of FONTDESC)
(MAX DATUM (ffetch CHARSETASCENT of CSINFO)))
(change (ffetch \SFDescent of FONTDESC)
(MAX DATUM (ffetch CHARSETDESCENT of CSINFO])
[freplace \SFHeight of FONTDESC with (PLUS (change (ffetch \SFAscent of FONTDESC)
(MAX DATUM (ffetch CHARSETASCENT
of CSINFO)))
(change (ffetch \SFDescent of FONTDESC)
(MAX DATUM (ffetch CHARSETDESCENT
of CSINFO])
(RETURN NEWTRANSLATION])
)
(DEFINEQ
@@ -1000,16 +995,16 @@ this file.)
)
(ADDTOVAR FONTCOERCIONS (PRESS ((SYMBOL (< 10))
(SYMBOL 10))
((SYMBOL (> 12))
(SYMBOL 12))))
(SYMBOL 10))
((SYMBOL (> 12))
(SYMBOL 12))))
(ADDTOVAR MISSINGFONTCOERCIONS (PRESS (MODERN HELVETICA)
(CLASSIC TIMESROMAN)
(LOGOTYPE LOGO)
(TERMINAL GACHA)
(MODERN FRUTIGER)
(CLASSIC CENTURY)))
(CLASSIC TIMESROMAN)
(LOGOTYPE LOGO)
(TERMINAL GACHA)
(MODERN FRUTIGER)
(CLASSIC CENTURY)))
(DECLARE%: DOEVAL@COMPILE DONTCOPY
(GLOBALVARS FONTCOERCIONS MISSINGFONTCOERCIONS)
@@ -1112,90 +1107,83 @@ this file.)
(DECLARE%: DONTCOPY
(DECLARE%: EVAL@COMPILE
(DATATYPE PRESSDATA (PRHEADING (* ;
 "The string to be printed atop each page.")
PRHEADINGFONT (* ; "Font to print the heading in")
PRXPOS (* ; "Current X position")
PRYPOS (* ; "Current Y position")
PRFONT (* ; "Current font")
PRCURRFDE PRESSFONTDIR (PRWIDTHSCACHE POINTER
(DATATYPE PRESSDATA (PRHEADING (* ;
 "The string to be printed atop each page.")
PRHEADINGFONT (* ; "Font to print the heading in")
PRXPOS (* ; "Current X position")
PRYPOS (* ; "Current Y position")
PRFONT (* ; "Current font")
PRCURRFDE PRESSFONTDIR (PRWIDTHSCACHE POINTER
(* ;
 "Widths table for the current logical character set")
)
PRCOLOR PRLINEFEED PRPAGESTATE PDSTREAM ELSTREAM XPRPAGEREGION
PRDOCNAME (PRLEFT WORD) (* ; "Page left margin")
(PRBOTTOM WORD) (* ; "Page bottom margin")
(PRRIGHT WORD) (* ; "Page right margin")
(PRTOP WORD) (* ; "Page top margin")
(PRPAGENUM WORD) (* ; "Current Page number")
(PRNEXTFONT# BYTE)
(PRMAXFONTSET BYTE)
(PRPARTSTART INTEGER)
(DLSTARTBYTE INTEGER)
(ELSTARTBYTE INTEGER)
(STARTCHARBYTE INTEGER)
(VECMOVINGRIGHT FLAG) (* ;
 "If we're drawing a curve with vector fonts, are we moving to the right?")
(VECWASDISPLAYING FLAG)
(* ;; "Used during curve/line clipping to remember whether we were on-screen or not, so we know when to force a SETXY.")
 "Widths table for the current logical character set")
)
PRCOLOR PRLINEFEED PRPAGESTATE PDSTREAM ELSTREAM XPRPAGEREGION PRDOCNAME
(PRLEFT WORD) (* ; "Page left margin")
(PRBOTTOM WORD) (* ; "Page bottom margin")
(PRRIGHT WORD) (* ; "Page right margin")
(PRTOP WORD) (* ; "Page top margin")
(PRPAGENUM WORD) (* ; "Current Page number")
(PRNEXTFONT# BYTE)
(PRMAXFONTSET BYTE)
(PRPARTSTART INTEGER)
(DLSTARTBYTE INTEGER)
(ELSTARTBYTE INTEGER)
(STARTCHARBYTE INTEGER)
(VECMOVINGRIGHT FLAG) (* ;
 "If we're drawing a curve with vector fonts, are we moving to the right?")
(VECWASDISPLAYING FLAG)
VECSEGCHARS (* ;
 "Cache for vector characters while we're moving to the left.")
VECCURX (* ;
 "Current X position within vector code, in Dover spots")
VECCURY (* ;
 "Current Y position with vector code, in Dover spots")
PRSPACEFACTOR PRSPACEWIDTH (CHARWASDISPLAYING FLAG)
(* ;
 "Says whether we have been printing characters inside the clipping region")
PRClippingRegion
(* ;; "The edges of the paper, as far as PRESS is concerned. Used to protect SPRUCE users who get killed when the image goes off-paper")
(* ;; "Used during curve/line clipping to remember whether we were on-screen or not, so we know when to force a SETXY.")
PRLOGICALFONT (* ; "Current logical font")
PRLOGICALCHARSET (* ;
 "Current logical character set, whose info is cached. NIL if cache is invalid")
(PRTRANSLATIONCACHE POINTER (* ;
 "Translation table for the current logical character set")
))
PRSPACEFACTOR _ 1 PRXPOS _ 0 PRYPOS _ 0
VECSEGCHARS (* ;
 "Cache for vector characters while we're moving to the left.")
VECCURX (* ;
 "Current X position within vector code, in Dover spots")
VECCURY (* ;
 "Current Y position with vector code, in Dover spots")
PRSPACEFACTOR PRSPACEWIDTH (CHARWASDISPLAYING FLAG)
(* ;
 "We assume that the origin is translated to the bottom-left of the page region")
PRClippingRegion _ (create REGION
LEFT _ SPRUCEPAPERLEFTMICAS
BOTTOM _ SPRUCEPAPERBOTTOMMICAS
WIDTH _ (DIFFERENCE SPRUCEPAPERRIGHTMICAS
SPRUCEPAPERLEFTMICAS)
HEIGHT _ 29210)
[ACCESSFNS ((PRWIDTH (IDIFFERENCE (fetch (PRESSDATA PRRIGHT) of
DATUM)
(fetch (PRESSDATA PRLEFT) of DATUM)))
(PRHEIGHT (IDIFFERENCE (fetch (PRESSDATA PRTOP) of DATUM)
(fetch (PRESSDATA PRBOTTOM) of DATUM)))
(PRPAGEREGION (fetch (PRESSDATA XPRPAGEREGION) of DATUM)
(PROGN (replace (PRESSDATA XPRPAGEREGION) of
DATUM
with NEWVALUE)
(replace (PRESSDATA PRLEFT) of DATUM
with (fetch (REGION LEFT) of
NEWVALUE
))
(replace (PRESSDATA PRBOTTOM) of DATUM
with (fetch (REGION BOTTOM) of
NEWVALUE))
(replace (PRESSDATA PRRIGHT) of DATUM
with (IPLUS (fetch (REGION LEFT)
of NEWVALUE)
(fetch (REGION WIDTH)
of NEWVALUE)))
(replace (PRESSDATA PRTOP) of DATUM
with (IPLUS (fetch (REGION BOTTOM)
of NEWVALUE)
(fetch (REGION HEIGHT)
of NEWVALUE])
 "Says whether we have been printing characters inside the clipping region")
PRClippingRegion
(* ;; "The edges of the paper, as far as PRESS is concerned. Used to protect SPRUCE users who get killed when the image goes off-paper")
PRLOGICALFONT (* ; "Current logical font")
PRLOGICALCHARSET (* ;
 "Current logical character set, whose info is cached. NIL if cache is invalid")
(PRTRANSLATIONCACHE POINTER (* ;
 "Translation table for the current logical character set")
))
PRSPACEFACTOR _ 1 PRXPOS _ 0 PRYPOS _ 0 (* ;
 "We assume that the origin is translated to the bottom-left of the page region")
PRClippingRegion _ (create REGION
LEFT _ SPRUCEPAPERLEFTMICAS
BOTTOM _ SPRUCEPAPERBOTTOMMICAS
WIDTH _ (DIFFERENCE SPRUCEPAPERRIGHTMICAS
SPRUCEPAPERLEFTMICAS)
HEIGHT _ 29210)
[ACCESSFNS ((PRWIDTH (IDIFFERENCE (fetch (PRESSDATA PRRIGHT) of DATUM)
(fetch (PRESSDATA PRLEFT) of DATUM)))
(PRHEIGHT (IDIFFERENCE (fetch (PRESSDATA PRTOP) of DATUM)
(fetch (PRESSDATA PRBOTTOM) of DATUM)))
(PRPAGEREGION (fetch (PRESSDATA XPRPAGEREGION) of DATUM)
(PROGN (replace (PRESSDATA XPRPAGEREGION) of DATUM
with NEWVALUE)
(replace (PRESSDATA PRLEFT) of DATUM
with (fetch (REGION LEFT) of NEWVALUE))
(replace (PRESSDATA PRBOTTOM) of DATUM
with (fetch (REGION BOTTOM) of NEWVALUE))
(replace (PRESSDATA PRRIGHT) of DATUM
with (IPLUS (fetch (REGION LEFT) of NEWVALUE)
(fetch (REGION WIDTH) of NEWVALUE)))
(replace (PRESSDATA PRTOP) of DATUM
with (IPLUS (fetch (REGION BOTTOM) of NEWVALUE)
(fetch (REGION HEIGHT) of NEWVALUE])
)
(/DECLAREDATATYPE 'PRESSDATA
'(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER
POINTER POINTER POINTER POINTER WORD WORD WORD WORD WORD BYTE BYTE FIXP FIXP FIXP FIXP
POINTER POINTER POINTER POINTER WORD WORD WORD WORD WORD BYTE BYTE FIXP FIXP FIXP FIXP
FLAG FLAG POINTER POINTER POINTER POINTER POINTER FLAG POINTER POINTER POINTER POINTER
)
'((PRESSDATA 0 POINTER)
@@ -1218,14 +1206,14 @@ this file.)
(PRESSDATA 32 (BITS . 15))
(PRESSDATA 33 (BITS . 15))
(PRESSDATA 34 (BITS . 15))
(PRESSDATA 28 (BITS . 7))
(PRESSDATA 26 (BITS . 7))
(PRESSDATA 35 FIXP)
(PRESSDATA 37 FIXP)
(PRESSDATA 39 FIXP)
(PRESSDATA 41 FIXP)
(PRESSDATA 24 (FLAGBITS . 0))
(PRESSDATA 24 (FLAGBITS . 16))
(PRESSDATA 35 (BITS . 7))
(PRESSDATA 35 (BITS . 135))
(PRESSDATA 36 FIXP)
(PRESSDATA 38 FIXP)
(PRESSDATA 40 FIXP)
(PRESSDATA 42 FIXP)
(PRESSDATA 28 (FLAGBITS . 0))
(PRESSDATA 28 (FLAGBITS . 16))
(PRESSDATA 44 POINTER)
(PRESSDATA 46 POINTER)
(PRESSDATA 48 POINTER)
@@ -1238,9 +1226,10 @@ this file.)
(PRESSDATA 60 POINTER))
'62)
)
(/DECLAREDATATYPE 'PRESSDATA
'(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER
POINTER POINTER POINTER POINTER WORD WORD WORD WORD WORD BYTE BYTE FIXP FIXP FIXP FIXP
POINTER POINTER POINTER POINTER WORD WORD WORD WORD WORD BYTE BYTE FIXP FIXP FIXP FIXP
FLAG FLAG POINTER POINTER POINTER POINTER POINTER FLAG POINTER POINTER POINTER POINTER
)
'((PRESSDATA 0 POINTER)
@@ -1263,14 +1252,14 @@ this file.)
(PRESSDATA 32 (BITS . 15))
(PRESSDATA 33 (BITS . 15))
(PRESSDATA 34 (BITS . 15))
(PRESSDATA 28 (BITS . 7))
(PRESSDATA 26 (BITS . 7))
(PRESSDATA 35 FIXP)
(PRESSDATA 37 FIXP)
(PRESSDATA 39 FIXP)
(PRESSDATA 41 FIXP)
(PRESSDATA 24 (FLAGBITS . 0))
(PRESSDATA 24 (FLAGBITS . 16))
(PRESSDATA 35 (BITS . 7))
(PRESSDATA 35 (BITS . 135))
(PRESSDATA 36 FIXP)
(PRESSDATA 38 FIXP)
(PRESSDATA 40 FIXP)
(PRESSDATA 42 FIXP)
(PRESSDATA 28 (FLAGBITS . 0))
(PRESSDATA 28 (FLAGBITS . 16))
(PRESSDATA 44 POINTER)
(PRESSDATA 46 POINTER)
(PRESSDATA 48 POINTER)
@@ -1282,9 +1271,9 @@ this file.)
(PRESSDATA 58 POINTER)
(PRESSDATA 60 POINTER))
'62)
(* * NSTOASCIITRANSLATIONS is a list with elements of the form (charset translationArrayName) %,
where translationArrayName is bound to a translation array for charset which contains (fontFamily
charcode) lists)
(* * NSTOASCIITRANSLATIONS is a list with elements of the form (charset translationArrayName) %, where
translationArrayName is bound to a translation array for charset which contains (fontFamily charcode)
lists)
(DEFINEQ
@@ -1322,24 +1311,26 @@ charcode) lists)
)
(RPAQ? PRESSFONTFAMILIES '((GACHA)
(TIMESROMAN)
(HELVETICA)
(SYMBOL)
(MATH)
(HIPPO)
(CYRILLIC)
(NEWVEC)
(SNEWVEC)
(HNEWVEC)
(VNEWVEC)))
(TIMESROMAN)
(HELVETICA)
(SYMBOL)
(MATH)
(HIPPO)
(CYRILLIC)
(NEWVEC)
(SNEWVEC)
(HNEWVEC)
(VNEWVEC)))
(RPAQ? NSTOASCIITRANSLATIONS )
(ADDTOVAR NSTOASCIITRANSLATIONS (0 ASCIIFROM0ARRAY)
(38 ASCIIFROM38ARRAY)
(39 ASCIIFROM39ARRAY)
(239 ASCIIFROM239ARRAY))
(READVARS-FROM-STRINGS '(ASCIIFROM0ARRAY ASCIIFROM38ARRAY ASCIIFROM39ARRAY ASCIIFROM239ARRAY) "({Y256 POINTER 0 {R163 NIL} (SYMBOL 126) (SYMBOL 127) NIL NIL (SYMBOL 120) NIL 96 NIL NIL (SYMBOL
(38 ASCIIFROM38ARRAY)
(39 ASCIIFROM39ARRAY)
(239 ASCIIFROM239ARRAY))
(READVARS-FROM-STRINGS '(ASCIIFROM0ARRAY ASCIIFROM38ARRAY ASCIIFROM39ARRAY ASCIIFROM239ARRAY)
"({Y256 POINTER 0 {R163 NIL} (SYMBOL 126) (SYMBOL 127) NIL NIL (SYMBOL 120) NIL 96 NIL NIL (SYMBOL
55) (SYMBOL 34) (SYMBOL 33) (SYMBOL 35) NIL (SYMBOL 6) NIL NIL (SYMBOL 2) NIL (SYMBOL 123) NIL
(SYMBOL 13) 39 {R25 NIL} (SYMBOL 125) {R44 NIL} } {Y256 POINTER 0 (HIPPO 118) {R64 NIL} (HIPPO 65)
(HIPPO 66) NIL (HIPPO 71) (HIPPO 68) (HIPPO 69) NIL NIL (HIPPO 90) (HIPPO 72) (HIPPO 81) (
@@ -1372,24 +1363,25 @@ MATH 7) (SYMBOL 39) NIL (SYMBOL 25) (MATH 19) (MATH 1) (SYMBOL 112) (SYMBO
SYMBOL 59) {R6 NIL} (MATH 82) NIL (SYMBOL 100) (SYMBOL 101) (SYMBOL 98) (SYMBOL 99) (SYMBOL 57)
(SYMBOL 56) (SYMBOL 94) (SYMBOL 95) (MATH 90) (MATH 68) (MATH 100) {R69 NIL} })
")
(\SMASHPRESSFONTS)
(\SMASHPRESSFONTS)
(DECLARE%: DONTCOPY
(DECLARE%: EVAL@COMPILE
(RPAQQ unknownCharTranslation (MATH 59))
[CONSTANTS (unknownCharTranslation '(MATH 59]
)
)
(PUTPROPS PRESSFROMNS COPYRIGHT ("Xerox Corporation" 1986 1988))
(DECLARE%: DONTCOPY
(FILEMAP (NIL (3994 4370 (\SMASHPRESSFONTS 4004 . 4368)) (4371 8600 (GETCHARPRESSTRANSLATION 4381 .
5419) (PRESS.NSARRAY 5421 . 6744) (PUTCHARPRESSTRANSLATION 6746 . 8598)) (8601 19311 (\DSPFONT.PRESS
8611 . 10062) (\DSPSPACEFACTOR.PRESS 10064 . 10916) (\ENTITYSTART.PRESS 10918 . 12640) (
\SETSPACE.PRESS 12642 . 13344) (\STARTPAGE.PRESS 13346 . 15454) (\PRESS.COERCEFONT 15456 . 16922) (
\DSPFONT.PRESSFONT 16924 . 18298) (SETUPFONTS.PRESS 18300 . 19309)) (19312 41000 (\CREATEPRESSFONT
19322 . 20520) (\CREATECHARSET.PRESS 20522 . 25622) (\CREATECHARSETZERO.PRESS 25624 . 40998)) (41001
55544 (\PRESSCURVE2 41011 . 55542)) (55624 59376 (\COERCEFONT 55634 . 59374)) (60032 65529 (
\STRINGWIDTH.PRESS 60042 . 60535) (\CHARWIDTH.PRESS 60537 . 61002) (\OUTCHARFN.PRESS 61004 . 65527)) (
75785 76950 (\NSTOASCIIARRAY 75795 . 76147) (\NSTOASCIITRANSLATION 76149 . 76948)))))
(FILEMAP (NIL (2898 3274 (\SMASHPRESSFONTS 2908 . 3272)) (3275 8422 (GETCHARPRESSTRANSLATION 3285 .
4793) (PRESS.NSARRAY 4795 . 6118) (PUTCHARPRESSTRANSLATION 6120 . 8420)) (8423 19133 (\DSPFONT.PRESS
8433 . 9884) (\DSPSPACEFACTOR.PRESS 9886 . 10738) (\ENTITYSTART.PRESS 10740 . 12462) (\SETSPACE.PRESS
12464 . 13166) (\STARTPAGE.PRESS 13168 . 15276) (\PRESS.COERCEFONT 15278 . 16744) (\DSPFONT.PRESSFONT
16746 . 18120) (SETUPFONTS.PRESS 18122 . 19131)) (19134 40822 (\CREATEPRESSFONT 19144 . 20342) (
\CREATECHARSET.PRESS 20344 . 25444) (\CREATECHARSETZERO.PRESS 25446 . 40820)) (40823 55366 (
\PRESSCURVE2 40833 . 55364)) (55446 59198 (\COERCEFONT 55456 . 59196)) (59822 65319 (
\STRINGWIDTH.PRESS 59832 . 60325) (\CHARWIDTH.PRESS 60327 . 60792) (\OUTCHARFN.PRESS 60794 . 65317)) (
74712 75877 (\NSTOASCIIARRAY 74722 . 75074) (\NSTOASCIITRANSLATION 75076 . 75875)))))
STOP