From 71894e9b542f07796d0c8c803d404a2b17594811 Mon Sep 17 00:00:00 2001 From: Matt Heffron Date: Mon, 8 Dec 2025 12:18:35 -0800 Subject: [PATCH] Make CHARSETENCODING and FONTCHARENCODING values of CHARSETINFO and FONTDESCRIPTOR, respectively, explicitly be MCCS --- lispusers/READ-BDF | 45 ++++++++++++++++++++++----------------- lispusers/READ-BDF.DFASL | Bin 24636 -> 24873 bytes 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/lispusers/READ-BDF b/lispusers/READ-BDF index 062419e4..3a1d3bdf 100644 --- a/lispusers/READ-BDF +++ b/lispusers/READ-BDF @@ -1,17 +1,18 @@ (DEFINE-FILE-INFO PACKAGE (DEFPACKAGE "BDF" (USE "XCL" "LISP") (EXPORT "READ-BDF" "BUILD-COMPOSITE" "WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE") (IMPORT-FROM "IL" "BITBLT" "BITMAPBIT" "BITMAPCREATE" -"BITMAPHEIGHT" "BITMAPWIDTH" "BLACKSHADE" "BLTSHADE" "BOLD" "COMPRESSED" "CHARSETINFO" "DISPLAY" -"FONTDESCRIPTOR" "FONTP" "FONTPROP" "INPUT" "ITALIC" "LIGHT" "LRSH" "MEDIUM" "REGULAR" "TCONC" -"UTOMCODE?" "MEDLEYFONT.FILENAME" "MEDLEYFONT.WRITE.FONT")) READTABLE "XCL" BASE 10) +"BITMAPHEIGHT" "BITMAPWIDTH" "BLACKSHADE" "BLTSHADE" "BOLD" "COMPRESSED" "CHARSETINFO" "CHARSETPROP" +"DISPLAY" "FONTDESCRIPTOR" "FONTP" "FONTPROP" "INPUT" "ITALIC" "LIGHT" "LRSH" "MCCS" "MEDIUM" +"REGULAR" "TCONC" "UTOMCODE?" "MEDLEYFONT.FILENAME" "MEDLEYFONT.WRITE.FONT")) READTABLE "XCL" BASE +10) -(IL:FILECREATED " 2-Dec-2025 16:10:25" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;6| 50944 +(IL:FILECREATED " 8-Dec-2025 12:13:40" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;9| 51309 :EDIT-BY "mth" - :CHANGES-TO (IL:FUNCTIONS BDF-TO-FONTDESCRIPTOR WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE - BUILD-COMPOSITE READ-BDF) + :CHANGES-TO (IL:FUNCTIONS BDF-TO-CHARSETINFO BDF-TO-FONTDESCRIPTOR) + (FILE-ENVIRONMENTS "READ-BDF") - :PREVIOUS-DATE "30-Nov-2025 17:43:25" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;1| + :PREVIOUS-DATE " 8-Dec-2025 12:12:47" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;8| ) @@ -76,7 +77,8 @@ (DEFCONSTANT NOMAPPINGCHARSET (1+ MAXCHARSET)) -(DEFUN BDF-TO-CHARSETINFO (FONT CSET SLUGWIDTH) (IL:* IL:\; "Edited 30-Nov-2025 00:12 by mth") +(DEFUN BDF-TO-CHARSETINFO (FONT CSET SLUGWIDTH) (IL:* IL:\; "Edited 8-Dec-2025 12:13 by mth") + (IL:* IL:\; "Edited 30-Nov-2025 00:12 by mth") (IL:* IL:\; "Edited 28-Nov-2025 16:37 by mth") (IL:* IL:\; "Edited 26-Nov-2025 21:18 by mth") (IL:* IL:\; "Edited 20-Nov-2025 12:19 by mth") @@ -124,6 +126,7 @@ (IMAGEWIDTHS (IL:\\CREATECSINFOELEMENT)) (DLEFT 0) GLYPHS-LIMITS BMAP OFFSETS HEIGHT WIDTHS) + (CHARSETPROP CSINFO 'IL:CSCHARENCODING 'MCCS) (LOOP :FOR XGL :IN CSGLYPHS :DO (LET* ((MCODE (CAR XGL)) (GL (CDR XGL)) (GWIDTH (GLYPH-WIDTH GL)) @@ -199,6 +202,7 @@ CSINFO)))) (DEFUN BDF-TO-FONTDESCRIPTOR (BDFONT FAMILY SIZE FACE ROTATION DEVICE) + (IL:* IL:\; "Edited 8-Dec-2025 12:11 by mth") (IL:* IL:\; "Edited 2-Dec-2025 16:10 by mth") (IL:* IL:\; "Edited 30-Nov-2025 15:59 by mth") (IL:* IL:\; "Edited 28-Nov-2025 18:03 by mth") @@ -295,7 +299,8 @@ IL:|\\SFHeight| IL:_ 0 IL:ROTATION IL:_ ROTATION IL:FONTDEVICESPEC IL:_ (LIST FAMILY SIZE FACE ROTATION DEVICE) - IL:FONTSLUGWIDTH IL:_ SLUGWIDTH)) + IL:FONTSLUGWIDTH IL:_ SLUGWIDTH + IL:FONTCHARENCODING IL:_ 'MCCS)) (SETQ CHARSETS (LOOP :FOR CS :IN GBCSL :WITH CSET :WITH CSINFO :NCONC (WHEN (<= 0 (SETQ CSET (FIRST CS)) MAXCHARSET) @@ -875,21 +880,21 @@ "BITMAPCREATE" "BITMAPHEIGHT" "BITMAPWIDTH" "BLACKSHADE" "BLTSHADE" "BOLD" "COMPRESSED" "CHARSETINFO" - "DISPLAY" "FONTDESCRIPTOR" "FONTP" - "FONTPROP" "INPUT" "ITALIC" "LIGHT" "LRSH" - "MEDIUM" "REGULAR" "TCONC" "UTOMCODE?" - "MEDLEYFONT.FILENAME" + "CHARSETPROP" "DISPLAY" "FONTDESCRIPTOR" + "FONTP" "FONTPROP" "INPUT" "ITALIC" + "LIGHT" "LRSH" "MCCS" "MEDIUM" "REGULAR" + "TCONC" "UTOMCODE?" "MEDLEYFONT.FILENAME" "MEDLEYFONT.WRITE.FONT")) :READTABLE "XCL" :COMPILER :COMPILE-FILE) (IL:PUTPROPS IL:READ-BDF IL:DATABASE IL:NO) (IL:DECLARE\: IL:DONTCOPY - (IL:FILEMAP (NIL (3113 10051 (BDF-TO-CHARSETINFO 3113 . 10051)) (10053 16503 (BDF-TO-FONTDESCRIPTOR -10053 . 16503)) (16505 20438 (BUILD-COMPOSITE 16505 . 20438)) (20440 21189 (CHAR-PRESENT-BIT 20440 . -21189)) (21191 21475 (COUNT-MCHARS 21191 . 21475)) (21477 24512 (GLYPHS-BY-CHARSET 21477 . 24512)) ( -24514 25939 (PACKFILENAME.STRING 24514 . 25939)) (25941 35416 (READ-BDF 25941 . 35416)) (35418 35741 ( -READ-DELIMITED-LIST-FROM-STRING 35418 . 35741)) (35743 42741 (READ-GLYPH 35743 . 42741)) (42743 44128 -(WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE 42743 . 44128)) (44130 46547 (XLFD-SPLIT-FONT-NAME 44130 . 46547) -) (46549 49561 (XLFD-TO-FACE 46549 . 49561))))) + (IL:FILEMAP (NIL (3116 10226 (BDF-TO-CHARSETINFO 3116 . 10226)) (10228 16847 (BDF-TO-FONTDESCRIPTOR +10228 . 16847)) (16849 20782 (BUILD-COMPOSITE 16849 . 20782)) (20784 21533 (CHAR-PRESENT-BIT 20784 . +21533)) (21535 21819 (COUNT-MCHARS 21535 . 21819)) (21821 24856 (GLYPHS-BY-CHARSET 21821 . 24856)) ( +24858 26283 (PACKFILENAME.STRING 24858 . 26283)) (26285 35760 (READ-BDF 26285 . 35760)) (35762 36085 ( +READ-DELIMITED-LIST-FROM-STRING 35762 . 36085)) (36087 43085 (READ-GLYPH 36087 . 43085)) (43087 44472 +(WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE 43087 . 44472)) (44474 46891 (XLFD-SPLIT-FONT-NAME 44474 . 46891) +) (46893 49905 (XLFD-TO-FACE 46893 . 49905))))) IL:STOP diff --git a/lispusers/READ-BDF.DFASL b/lispusers/READ-BDF.DFASL index 81ccb5771c9f8ccf0b0f5c1157d7f8d5b71b1a12..d112551a33a34cb55bdf139532ba2581acd4bb7f 100644 GIT binary patch delta 9083 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