From defd68a89208660f4d3e72f9a25ef37d657e9acc Mon Sep 17 00:00:00 2001 From: Matt Heffron Date: Mon, 17 Nov 2025 10:44:23 -0800 Subject: [PATCH] READ-BDF initial changes for XCCS to MCCS (#2360) * Verbose mode (READ-BDF) was implemented incorrectly - fixed * Cleanup DEFPACKAGE in source file using :IMPORT-FROM, and fewer imports. * Various renaming for consistency with XCCS -> MCCS changes. * Use IL:FONTSPEC record instead of using FIRST, SECOND, etc. * Fix the parsing of IL:FONTSPEC to use COMPRESSED instead of incorrect CONDENSED. * Zero-width "image" with zero-width "escapement" GLYPHS now get put into NOMAPPINGCHARSET. * Add (FILES (SYSLOAD) SYSEDIT) under existing (DECLARE: EVAL@COMPILE DONTCOPY ...) --- lispusers/READ-BDF | 197 ++++++++++++++++++++++----------------- lispusers/READ-BDF.DFASL | Bin 20898 -> 21485 bytes lispusers/READ-BDF.TEDIT | Bin 9640 -> 9819 bytes 3 files changed, 111 insertions(+), 86 deletions(-) diff --git a/lispusers/READ-BDF b/lispusers/READ-BDF index 229d59d0..a4c28123 100644 --- a/lispusers/READ-BDF +++ b/lispusers/READ-BDF @@ -1,17 +1,19 @@ (DEFINE-FILE-INFO PACKAGE (DEFPACKAGE "BDF" (USE "XCL" "LISP") (EXPORT "READ-BDF" -"WRITE-BDF-TO-DISPLAYFONT-FILES") (IMPORT \AVGCHARWIDTH \FGETWIDTH \FONTFACE \FONTFILENAME -\FSETOFFSET \FSETWIDTH \FONTSYMBOL \GETSTREAM \INSTALLCHARSETINFO \PUTBASE BITBLT BITMAPCREATE -BITMAPHEIGHT BITMAPWIDTH BLACKSHADE BLTSHADE BOLD CONDENSED CHARSETINFO DISPLAY FONTDESCRIPTOR FONTP -FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITESTRIKEFONTFILE)) -READTABLE "XCL" BASE 10) +"WRITE-BDF-TO-DISPLAYFONT-FILES") (IMPORT-FROM "IL" "BITBLT" "BITMAPCREATE" "BITMAPHEIGHT" +"BITMAPWIDTH" "BLACKSHADE" "BLTSHADE" "BOLD" "COMPRESSED" "CHARSETINFO" "DISPLAY" "FONTDESCRIPTOR" +"FONTP" "FONTPROP" "INPUT" "ITALIC" "LIGHT" "LRSH" "MEDIUM" "REGULAR" "TCONC" "UTOMCODE" "UTOMCODE?" +"WRITESTRIKEFONTFILE")) READTABLE "XCL" BASE 10) -(IL:FILECREATED "30-Apr-2025 13:20:10" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;61| 47500 +(IL:FILECREATED " 6-Nov-2025 23:10:51" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;13| 49101 :EDIT-BY "mth" - :CHANGES-TO (IL:FUNCTIONS GET-FAMILY-FACE-SIZE-FROM-NAME) + :CHANGES-TO (IL:FUNCTIONS BDF-TO-FONTDESCRIPTOR BDF-TO-CHARSETINFO READ-GLYPH + WRITE-BDF-TO-DISPLAYFONT-FILES) + (FILE-ENVIRONMENTS "READ-BDF") + (IL:VARS IL:READ-BDFCOMS) - :PREVIOUS-DATE "25-Apr-2025 10:10:08" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;60| + :PREVIOUS-DATE " 6-Nov-2025 22:43:21" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;9| ) @@ -23,8 +25,10 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (IL:FUNCTIONS BDF-TO-CHARSETINFO BDF-TO-FONTDESCRIPTOR GET-FAMILY-FACE-SIZE-FROM-NAME GLYPHS-BY-CHARSET PACKFILENAME.STRING READ-BDF READ-DELIMITED-LIST-FROM-STRING READ-GLYPH SPLIT-FONT-NAME WRITE-BDF-TO-DISPLAYFONT-FILES) - (IL:DECLARE\: IL:EVAL@COMPILE IL:DONTCOPY (IL:FILES (IL:LOADCOMP) - IL:FONT)) + (IL:DECLARE\: IL:EVAL@COMPILE IL:DONTCOPY (IL:FILES (IL:SYSLOAD) + IL:SYSEDIT) + (IL:FILES (IL:LOADCOMP) + IL:FONT)) (FILE-ENVIRONMENTS "READ-BDF") (IL:PROP (IL:DATABASE) IL:READ-BDF))) @@ -40,10 +44,10 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SLUG NIL :TYPE GLYPH)) (DEFSTRUCT GLYPH - "This is an individual BDF glyph. Includes some values calculted for creating CHARSETINFO" + "This is an individual BDF glyph. Includes some values calculated for creating CHARSETINFO" (NAME NIL :TYPE STRING) ENCODING SWIDTH DWIDTH SWIDTH1 DWIDTH1 VVECTOR BBW BBH BBXOFF0 BBYOFF0 BITMAP - (XCODE 0 :TYPE INTEGER) + (MCODE 0 :TYPE INTEGER) (WIDTH 0 :TYPE INTEGER) (ASCENT 0 :TYPE INTEGER) (DESCENT 0 :TYPE INTEGER)) @@ -55,6 +59,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (DEFCONSTANT NOMAPPINGCHARSET (1+ MAXCHARSET)) (DEFUN BDF-TO-CHARSETINFO (FONT CSET SLUG-OR-WIDTH &OPTIONAL MAP-UNKNOWN-TO-PRIVATE) + (IL:* IL:\; "Edited 6-Nov-2025 17:30 by mth") (IL:* IL:\; "Edited 23-Apr-2025 17:53 by mth") (IL:* IL:\; "Edited 21-Apr-2025 16:23 by mth") (IL:* IL:\; "Edited 30-Jan-2025 16:40 by mth") @@ -98,7 +103,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST ((INTEGERP SLUG-OR-WIDTH) (SETQ SLUGWIDTH SLUG-OR-WIDTH)) (T (ERROR "Invalid SLUG-OR-WIDTH: ~S" SLUG-OR-WIDTH))) - (SETQ CSGLYPHS (LOOP :FOR XGL :IN CSGLYPHS :COLLECT (LET* ((XCODE (CAR XGL)) + (SETQ CSGLYPHS (LOOP :FOR XGL :IN CSGLYPHS :COLLECT (LET* ((MCODE (CAR XGL)) (GL (CDR XGL)) (GWIDTH (GLYPH-WIDTH GL)) @@ -112,13 +117,13 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST    "Is the above statement actually true?") - (SETF (GLYPH-XCODE GL) - XCODE) + (SETF (GLYPH-MCODE GL) + MCODE) (SETQ FIRSTCHAR - (MIN FIRSTCHAR XCODE + (MIN FIRSTCHAR MCODE )) (SETQ LASTCHAR - (MAX LASTCHAR XCODE) + (MAX LASTCHAR MCODE) ) (INCF TOTAL-WIDTH GWIDTH) (SETQ ASCENT @@ -133,13 +138,13 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (IL:* IL:|;;|  "Initialize the offsets to the TOTAL-WIDTH (without the SLUG. It will be added later)") - (IL:|for| I IL:|from| 0 IL:|to| (+ MAXTHINCHAR 2) IL:|do| (\\FSETOFFSET OFFSETS I + (IL:|for| I IL:|from| 0 IL:|to| (+ MAXTHINCHAR 2) IL:|do| (IL:\\FSETOFFSET OFFSETS I TOTAL-WIDTH)) (SETQ WIDTHS (IL:|fetch| (CHARSETINFO IL:WIDTHS) IL:|of| CSINFO)) (IL:* IL:|;;| "Initialize the widths to SLUGWIDTH") - (IL:|for| I IL:|from| 0 IL:|to| (+ MAXTHINCHAR 2) IL:|do| (\\FSETWIDTH WIDTHS I + (IL:|for| I IL:|from| 0 IL:|to| (+ MAXTHINCHAR 2) IL:|do| (IL:\\FSETWIDTH WIDTHS I SLUGWIDTH)) (IL:|replace| (CHARSETINFO IL:IMAGEWIDTHS) IL:|of| CSINFO IL:|with| WIDTHS) @@ -151,19 +156,19 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SETQ BMAP (BITMAPCREATE (+ TOTAL-WIDTH SLUGWIDTH) HEIGHT 1)) (IL:|replace| (CHARSETINFO IL:CHARSETBITMAP) IL:|of| CSINFO IL:|with| BMAP) - (LOOP :FOR GL :IN CSGLYPHS :WITH GLBM :WITH GLW :WITH XCODE :DO (SETQ GLBM + (LOOP :FOR GL :IN CSGLYPHS :WITH GLBM :WITH GLW :WITH MCODE :DO (SETQ GLBM (GLYPH-BITMAP GL)) (SETQ GLW (GLYPH-WIDTH GL)) - (SETQ XCODE (GLYPH-XCODE GL)) + (SETQ MCODE (GLYPH-MCODE GL)) (BITBLT GLBM 0 0 BMAP (+ DLEFT (MAX 0 (GLYPH-BBXOFF0 GL))) (+ DESCENT (GLYPH-BBYOFF0 GL)) (BITMAPWIDTH GLBM) (BITMAPHEIGHT GLBM) 'INPUT 'IL:REPLACE) - (\\FSETOFFSET OFFSETS XCODE DLEFT) - (\\FSETOFFSET WIDTHS XCODE GLW) + (IL:\\FSETOFFSET OFFSETS MCODE DLEFT) + (IL:\\FSETOFFSET WIDTHS MCODE GLW) (INCF DLEFT GLW)) (IL:* IL:|;;| "Now insert the SLUG glyph into the BMAP, or make a slug (block)") @@ -185,6 +190,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (DEFUN BDF-TO-FONTDESCRIPTOR (BDFONT FAMILY SIZE FACE ROTATION DEVICE &OPTIONAL MAP-UNKNOWN-TO-PRIVATE RAW-UNICODE-MAPPING) + (IL:* IL:\; "Edited 5-Nov-2025 16:09 by mth") (IL:* IL:\; "Edited 21-Apr-2025 16:03 by mth") (IL:* IL:\; "Edited 30-Jan-2025 21:27 by mth") (WHEN (AND (BDF-FONT-P BDFONT) @@ -200,18 +206,22 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (OR DEVICE (FONTPROP FAMILY 'IL:DEVICE)) MAP-UNKNOWN-TO-PRIVATE))) (WHEN (LISTP FAMILY) - (RETURN (BDF-TO-FONTDESCRIPTOR BDFONT (FIRST FAMILY) - (OR (SECOND FAMILY) + + (IL:* IL:|;;| "Assume this is a FONTSPEC") + + (RETURN (BDF-TO-FONTDESCRIPTOR BDFONT (IL:|fetch| (IL:FONTSPEC IL:FSFAMILY) + IL:|of| FAMILY) + (OR (IL:|fetch| (IL:FONTSPEC IL:FSSIZE) IL:|of| FAMILY) SIZE) - (OR (THIRD FAMILY) + (OR (IL:|fetch| (IL:FONTSPEC IL:FSFACE) IL:|of| FAMILY) FACE "MRR") - (OR (FOURTH FAMILY) + (OR (IL:|fetch| (IL:FONTSPEC IL:FSROTATION) IL:|of| FAMILY) ROTATION 0) - (OR (FIFTH FAMILY) + (OR (IL:|fetch| (IL:FONTSPEC IL:FSDEVICE) IL:|of| FAMILY) DEVICE 'DISPLAY) MAP-UNKNOWN-TO-PRIVATE))) - (SETQ FAMILY (\\FONTSYMBOL FAMILY)) + (SETQ FAMILY (IL:\\FONTSYMBOL FAMILY)) (UNLESS (AND (INTEGERP SIZE) (PLUSP SIZE)) (ERROR "Invalid SIZE: ~S~%" SIZE)) @@ -236,7 +246,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (INTERN (STRING-UPCASE DEVICE) "IL")) (T (IL:\\ILLEGAL.ARG DEVICE)))) - (SETQ FACE (\\FONTFACE FACE NIL DEV)) + (SETQ FACE (IL:\\FONTFACE FACE NIL DEV)) (SETQ GBCSL (GLYPHS-BY-CHARSET BDFONT MAP-UNKNOWN-TO-PRIVATE RAW-UNICODE-MAPPING)) (UNLESS SLUGWIDTH @@ -268,15 +278,16 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST GBCS CSET (OR SLUG (1+ SLUGWIDTH )))) - (\\INSTALLCHARSETINFO FONTDESC CSINFO CSET) + (IL:\\INSTALLCHARSETINFO FONTDESC CSINFO CSET + ) (LIST CSET))))) (LIST FONTDESC CHARSETS)))) (RETURN (VALUES-LIST (NCONC (GBCS-TO-FONTDESC (FIRST GBCSL) FAMILY) (GBCS-TO-FONTDESC (SECOND GBCSL) - (\\FONTSYMBOL (CONCATENATE 'STRING - (SYMBOL-NAME FAMILY) - "-UNMAPPED"))) + (IL:\\FONTSYMBOL (CONCATENATE 'STRING + (SYMBOL-NAME FAMILY) + "-UNMAPPED"))) (LIST (ASSOC NOMAPPINGCHARSET (FIRST GBCSL) :TEST #'EQL))))))))) @@ -311,8 +322,8 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST '((#\R . REGULAR) (#\N . REGULAR) (#\B . BOLD) - (#\S . CONDENSED) - (#\C . CONDENSED))))) + (#\S . COMPRESSED) + (#\C . COMPRESSED))))) 'REGULAR)) (IL:* IL:\;  "S is for \"SemiCondensed\", Assuming \"Condensed\"") @@ -336,17 +347,19 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (FIRST (BF-SIZE BDFONT)))))) (DEFUN GLYPHS-BY-CHARSET (FONT &OPTIONAL MAP-UNKNOWN-TO-PRIVATE RAW-UNICODE-MAPPING) + (IL:* IL:\; "Edited 6-Nov-2025 18:11 by mth") + (IL:* IL:\; "Edited 5-Nov-2025 16:18 by mth") (IL:* IL:\; "Edited 21-Apr-2025 15:48 by mth") (IL:* IL:\; "Edited 9-Jan-2025 11:23 by mth") (LET* ((NCSETS (+ MAXCHARSET 2)) (CSETS (MAKE-ARRAY NCSETS :INITIAL-CONTENTS (LOOP :REPEAT NCSETS :COLLECT (CONS NIL)))) - (UTOXFN (COND + (UTOMFN (COND (RAW-UNICODE-MAPPING #'IDENTITY) - (MAP-UNKNOWN-TO-PRIVATE #'UTOXCODE) - (T #'UTOXCODE?))) + (MAP-UNKNOWN-TO-PRIVATE #'UTOMCODE) + (T #'UTOMCODE?))) (SLUG (BF-SLUG FONT)) (SLUGWIDTH (AND SLUG (GLYPH-WIDTH SLUG))) - NOMAPPINGCSETS ENC XCODE XCS) + NOMAPPINGCSETS ENC MCODE MCS) (UNLESS (OR MAP-UNKNOWN-TO-PRIVATE RAW-UNICODE-MAPPING) (SETQ NOMAPPINGCSETS (MAKE-ARRAY NCSETS :INITIAL-CONTENTS (LOOP :REPEAT NCSETS :COLLECT (CONS NIL))))) @@ -358,7 +371,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST :UNLESS (EQ GL SLUG) :DO - (SETQ XCS NIL) + (SETQ MCS NIL) (SETQ ENC (GLYPH-ENCODING GL)) (WHEN (LISTP ENC) @@ -372,9 +385,9 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST  "The -1 case of the (OR ...) shouldn't happen. The (EQ GL SLUG) test above should have caught it") ) - (SETQ XCODE (AND (INTEGERP ENC) + (SETQ MCODE (AND (INTEGERP ENC) (PLUSP ENC) - (FUNCALL UTOXFN ENC))) + (FUNCALL UTOMFN ENC))) (IF RAW-UNICODE-MAPPING (COND ((> ENC 65535) @@ -394,7 +407,15 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (CONS ENC GL))) (T (PUT-GLYPH-IN-CHARSET-ARRAY ENC GL CSETS))) (COND - ((NULL XCODE) + ((AND (ZEROP (GLYPH-BBW GL)) + (ZEROP (FIRST (GLYPH-DWIDTH GL)))) + + (IL:* IL:|;;| + "This has zero-width \"image\" with zero-width \"escapement\", put it in the NOMAPPINGCHARSET") + + (TCONC (AREF CSETS NOMAPPINGCHARSET) + (CONS ENC GL))) + ((NULL MCODE) (IL:* IL:|;;| "These assoc with the Unicode encoding") @@ -408,37 +429,37 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (TCONC (AREF CSETS NOMAPPINGCHARSET) (CONS ENC GL))) (T (PUT-GLYPH-IN-CHARSET-ARRAY ENC GL NOMAPPINGCSETS)))) - ((AND (INTEGERP XCODE) - (<= 0 XCODE 65535)) + ((AND (INTEGERP MCODE) + (<= 0 MCODE 65535)) (IL:* IL:|;;|  "These assoc with the 8 bit character code within the charset") - (PUT-GLYPH-IN-CHARSET-ARRAY XCODE GL CSETS) + (PUT-GLYPH-IN-CHARSET-ARRAY MCODE GL CSETS) (IL:* IL:|;;| "Default SLUG width is width of A.") (WHEN (AND (NOT SLUGWIDTH) (= ENC (CHAR-CODE #\A))) - (IL:* IL:|;;| "A is the same code in XCCS and UNICODE ") + (IL:* IL:|;;| "A is the same code in MCCS and UNICODE ") (IL:* IL:|;;| - "Comparing with ENC, not XCODE, to look only in charset 0") + "Comparing with ENC, not MCODE, to look only in charset 0") (SETQ SLUGWIDTH (GLYPH-WIDTH GL)))) - ((LISTP XCODE) + ((LISTP MCODE) (IL:* IL:|;;|  "These assoc with the 8 bit character code within the charset (like above)") - (LOOP :FOR XC :IN XCODE :WITH CS :UNLESS (MEMBER (SETQ CS - (LRSH XC 8)) - XCS) + (LOOP :FOR MC :IN MCODE :WITH CS :UNLESS (MEMBER (SETQ CS + (LRSH MC 8)) + MCS) :DO - (PUSH CS XCS) - (PUT-GLYPH-IN-CHARSET-ARRAY XC GL CSETS))) - (T (ERROR "Invalid XCODE: ~A~%")))))) + (PUSH CS MCS) + (PUT-GLYPH-IN-CHARSET-ARRAY MC GL CSETS))) + (T (ERROR "Invalid MCODE: ~A~%")))))) (IL:* IL:|;;| "Extract the lists from the TCONC pointers") @@ -488,7 +509,8 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST X)) Y)))) -(DEFUN READ-BDF (PATH &OPTIONAL VERBOSE) (IL:* IL:\; "Edited 24-Apr-2025 00:44 by mth") +(DEFUN READ-BDF (PATH &OPTIONAL VERBOSE) (IL:* IL:\; "Edited 30-Apr-2025 13:37 by mth") + (IL:* IL:\; "Edited 24-Apr-2025 00:44 by mth") (IL:* IL:\; "Edited 17-Apr-2025 15:10 by mth") (IL:* IL:\; "Edited 12-Jul-2024 23:02 by mth") (LET @@ -603,15 +625,15 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SETF (BF-SLUG FONT) GL)))))) (ENDFONT (SETQ FONT-COMPLETE T)))))))) - (WHEN VERBOSE - (DESTRUCTURING-BIND (FAMILY (WEIGHT SLANT EXPANSION) - SIZE) - (GET-FAMILY-FACE-SIZE-FROM-NAME FONT) + (DESTRUCTURING-BIND (FAMILY (WEIGHT SLANT EXPANSION) + SIZE) + (GET-FAMILY-FACE-SIZE-FROM-NAME FONT) + (WHEN VERBOSE (FORMAT *STANDARD-OUTPUT* "Name: ~A~%Family: ~A~%Size: ~A~%Weight: ~A~%Slant: ~A~%Expansion: ~A~%" (BF-NAME FONT) - FAMILY SIZE WEIGHT SLANT EXPANSION))) - FONT))) + FAMILY SIZE WEIGHT SLANT EXPANSION)) + (VALUES FONT FAMILY WEIGHT SLANT EXPANSION SIZE))))) (DEFUN READ-DELIMITED-LIST-FROM-STRING (INPUT-STRING &OPTIONAL (DELIMIT #\])) (IL:* IL:\; "Edited 20-Aug-2024 16:46 by mth") @@ -699,7 +721,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SETQ WORDINDEX (* BITROW BM.RASTERWIDTH)) (SETQ BYTEPOS (* 16 (1- NWORDS))) (LOOP :REPEAT NWORDS :DO - (\\PUTBASE BM.BASE WORDINDEX + (IL:\\PUTBASE BM.BASE WORDINDEX (LDB (BYTE 16 BYTEPOS) BITS)) (INCF WORDINDEX) @@ -744,12 +766,13 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (CHAR-SETS T) MAP-UNKNOWN-TO-PRIVATE WRITE-UNMAPPED RAW-UNICODE-MAPPING) + (IL:* IL:\; "Edited 5-Nov-2025 23:06 by mth") (IL:* IL:\; "Edited 25-Apr-2025 10:08 by mth") (IL:* IL:\; "Edited 24-Apr-2025 00:09 by mth") (IL:* IL:\; "Edited 21-Apr-2025 16:03 by mth") (IL:* IL:\; "Edited 3-Feb-2025 23:18 by mth") (UNLESS (TYPEP BDFONT 'BDF-FONT) - (ERROR "Not a BDF-FONT: ~S~%" BDFONT)) + (ERROR "Not a BDF-FONT: ~S ~%" BDFONT)) (COND ((EQ CHAR-SETS T) (IL:* IL:\; "This means ALL charsets") ) @@ -769,7 +792,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (GET-FAMILY-FACE-SIZE-FROM-NAME BDFONT) (SETQ FAMILY (OR FAMILY FN-FAMILY)) (WHEN RAW-UNICODE-MAPPING - (SETQ FAMILY (\\FONTSYMBOL (CONCATENATE 'STRING "RAW-" (STRING FAMILY))))) + (SETQ FAMILY (IL:\\FONTSYMBOL (CONCATENATE 'STRING "RAW-" (STRING FAMILY))))) (SETQ FACE (OR FACE FN-FACE)) (SETQ SIZE (OR SIZE FN-SIZE)) (MULTIPLE-VALUE-BIND (FONTDESC CSETS UNMAPPED-FONTDESC UNICODE-CSETS UNMAPPEDGLYPHS) @@ -780,16 +803,16 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SETQ UNICODE-CSETS (INTERSECTION CHAR-SETS UNICODE-CSETS))) (LOOP :FOR CS :IN CSETS :DO (WRITESTRIKEFONTFILE FONTDESC CS (PACKFILENAME.STRING :BODY DEST-DIR :NAME - (\\FONTFILENAME FAMILY SIZE FACE + (IL:\\FONTFILENAME FAMILY SIZE FACE "DISPLAYFONT" CS)))) (IF WRITE-UNMAPPED (LOOP :FOR CS :IN UNICODE-CSETS :DO (WRITESTRIKEFONTFILE UNMAPPED-FONTDESC CS (PACKFILENAME.STRING :BODY DEST-DIR :NAME - (\\FONTFILENAME (FONTPROP - UNMAPPED-FONTDESC - 'IL:FAMILY) + (IL:\\FONTFILENAME (FONTPROP + UNMAPPED-FONTDESC + 'IL:FAMILY) SIZE FACE "DISPLAYFONT" CS)))) (SETQ UNICODE-CSETS NIL)) @@ -801,6 +824,10 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (VALUES FONTDESC CSETS UNMAPPED-FONTDESC UNICODE-CSETS UNMAPPEDGLYPHS)))) (IL:DECLARE\: IL:EVAL@COMPILE IL:DONTCOPY +(IL:FILESLOAD (IL:SYSLOAD) + IL:SYSEDIT) + + (IL:FILESLOAD (IL:LOADCOMP) IL:FONT) ) @@ -808,25 +835,23 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (DEFINE-FILE-ENVIRONMENT "READ-BDF" :PACKAGE (DEFPACKAGE "BDF" (:USE "XCL" "LISP") (:EXPORT "READ-BDF" "WRITE-BDF-TO-DISPLAYFONT-FILES") - (:IMPORT \\AVGCHARWIDTH \\FGETWIDTH \\FONTFACE - \\FONTFILENAME \\FSETOFFSET \\FSETWIDTH - \\FONTSYMBOL \\GETSTREAM - \\INSTALLCHARSETINFO \\PUTBASE BITBLT - BITMAPCREATE BITMAPHEIGHT BITMAPWIDTH - BLACKSHADE BLTSHADE BOLD CONDENSED - CHARSETINFO DISPLAY FONTDESCRIPTOR FONTP - FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM - REGULAR TCONC UTOXCODE UTOXCODE? - WRITESTRIKEFONTFILE)) + (:IMPORT-FROM "IL" "BITBLT" "BITMAPCREATE" + "BITMAPHEIGHT" "BITMAPWIDTH" "BLACKSHADE" + "BLTSHADE" "BOLD" "COMPRESSED" + "CHARSETINFO" "DISPLAY" "FONTDESCRIPTOR" + "FONTP" "FONTPROP" "INPUT" "ITALIC" + "LIGHT" "LRSH" "MEDIUM" "REGULAR" "TCONC" + "UTOMCODE" "UTOMCODE?" + "WRITESTRIKEFONTFILE")) :READTABLE "XCL" :COMPILER :COMPILE-FILE) (IL:PUTPROPS IL:READ-BDF IL:DATABASE IL:NO) (IL:DECLARE\: IL:DONTCOPY - (IL:FILEMAP (NIL (2316 10275 (BDF-TO-CHARSETINFO 2316 . 10275)) (10277 16147 (BDF-TO-FONTDESCRIPTOR -10277 . 16147)) (16149 19687 (GET-FAMILY-FACE-SIZE-FROM-NAME 16149 . 19687)) (19689 26500 ( -GLYPHS-BY-CHARSET 19689 . 26500)) (26502 27927 (PACKFILENAME.STRING 26502 . 27927)) (27929 34733 ( -READ-BDF 27929 . 34733)) (34735 35058 (READ-DELIMITED-LIST-FROM-STRING 34735 . 35058)) (35060 41548 ( -READ-GLYPH 35060 . 41548)) (41550 42291 (SPLIT-FONT-NAME 41550 . 42291)) (42293 46075 ( -WRITE-BDF-TO-DISPLAYFONT-FILES 42293 . 46075))))) + (IL:FILEMAP (NIL (2497 10576 (BDF-TO-CHARSETINFO 2497 . 10576)) (10578 16996 (BDF-TO-FONTDESCRIPTOR +10578 . 16996)) (16998 20538 (GET-FAMILY-FACE-SIZE-FROM-NAME 16998 . 20538)) (20540 27970 ( +GLYPHS-BY-CHARSET 20540 . 27970)) (27972 29397 (PACKFILENAME.STRING 27972 . 29397)) (29399 36358 ( +READ-BDF 29399 . 36358)) (36360 36683 (READ-DELIMITED-LIST-FROM-STRING 36360 . 36683)) (36685 43176 ( +READ-GLYPH 36685 . 43176)) (43178 43919 (SPLIT-FONT-NAME 43178 . 43919)) (43921 47827 ( +WRITE-BDF-TO-DISPLAYFONT-FILES 43921 . 47827))))) IL:STOP diff --git a/lispusers/READ-BDF.DFASL b/lispusers/READ-BDF.DFASL index 1974ed35938ba59ce1aee8f097126b0f96dea634..927778eaf9838aafa5ba0d1b7cc9d57d42e6156d 100644 GIT binary patch delta 7924 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 diff --git a/lispusers/READ-BDF.TEDIT b/lispusers/READ-BDF.TEDIT index 8f6e2ec54277d7d0aa52a6e7c53c832eb004d43b..891c14cc161b6a178923a02d5d7af4e2a55e0467 100644 GIT binary patch delta 2044 zcmbtVO-~bH5T2K{C77cQPnJel|pd}rF3@=etqcBjugGxN+x+IO?x^B-R*8X6$opl@q zFb1*dv|%*CHpxy-UTtJ=ir=80YbJez-f}oSepIjL0iME4G#XD>L7<~AgT3R0T;9?4 zT;`re%V}-|Wtfee%Q~jL|4LKSGNk@hiL_HsQT_X7%=S;-XJgtZc3pscH z!Bh{suRRygVZI%Ij(b+xdLrErZbAD(&dbgRe%wnJAbDg=R7s@TOb6!E0`1Ya#GtaG zUx}nVFX+eJ?2j2%3aM7~N)IP@!75EKy3jyk8yZ%$qerWVAp~Z!wPQl$G$Pmyq7+94 zj^ivNs0t&;890Ro@)jBCL<8X-Mo0ptaB9d%qm~+A66wLmAR*D)p{@HENaMuqBq0+GzacT>X_x$x|h}tA~YCGL_@`I6uw9AZO$`{1}0l( zgtREA0`xH?>yTn~62K&Ly3xR5qzsD*M`kUEaAXu)7*5^Sm*}y2rT4ooB4Bz_wW~2- z7y*qgOhe;GIUfj#RI<-p=|HmY4tjZd>Nk1KgMQ|bFJh(XDdI%a$syXwB@Usx!w{KM z99@{Z7Y!^V{arbL(7?E3e4BzT6jWv|X+a%f4KX`m<#3frqMU|sXhNBjNS2Ebfpn%A zEf;Z(E66M>?-`P?4MtczccEm*=)uFmQGsRK^jDfKxPB&Am^QzRp6kv#jzfR06NWO9 UNiSq49_{>mZnn__pPqgG0~Z delta 1879 zcmb_bO>0w85S^RaYHM4yN^I1mH}zHWVp}S>5JBPf+e zyqmwivvTbBY+RFd*jpO%^<7>BZ*^5 zDxxyQV^u#6>R8Oo*vu0|PpM;`7xJc8$cCk43i{H9@9Wa7$_<@H{Eb^??`NtaXMRCg=!F+i^-WJ`hb_;#ixRAX=ko83M(l z-rHc~v-`cwT^pa;k7@7LX{K9iMz=fd=3>wyZ!fy}v9zj``M2cRv#JN@BmHo}_G>>G znzZLCLS_EwWiJJ*fMI*sj){rWjF^pLIR+8Ae9034au^7_vkndp(DzaMO@8&OUU9%7 z1gNp)kU0c^PdS7wKmvbYD|3EOOPzHj_JiXbBj#_h$3A(OPzW7Uka>ql$(BQoAVAg` zhe&roxfgC6V%!5ti(oR`I2i})*aat9((o`MbK_B?4qF8*o-aF{Wdsnr?+|u~tXv<7 z2TPJ-Lb~SC77!qfouQa;WCMZ-M+VeGIy>*L)|pqDSE5Yb%dLQr1rv>E1VDIRDE)~M zv+d>9(o)i6vQtZP)5|bTneSeax4g&#_TZP69s(6`g}l=UkSE?R3?V!WX8|&{hYTk@ zaaT6>iscFX({z~&bBOi%tjmLdjaw_=B%A+n|Ki%E&pq&_%AvNj((2v*acm23+) ZcmixqRf2AG^}){