Compare commits
7 Commits
mth68--Fix
...
mth63--Mis
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b2b6ef1f5 | ||
|
|
e78620c09b | ||
|
|
5bc81b8159 | ||
|
|
8474e63bc5 | ||
|
|
76be925e0a | ||
|
|
bb53e497ce | ||
|
|
a8a0313bd9 |
@@ -1,18 +1,17 @@
|
||||
(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" "CHARSETPROP"
|
||||
"DISPLAY" "FONTDESCRIPTOR" "FONTP" "FONTPROP" "INPUT" "ITALIC" "LIGHT" "LRSH" "MCCS" "MEDIUM"
|
||||
"REGULAR" "TCONC" "UTOMCODE?" "MEDLEYFONT.FILENAME" "MEDLEYFONT.WRITE.FONT")) READTABLE "XCL" BASE
|
||||
10)
|
||||
"BITMAPHEIGHT" "BITMAPWIDTH" "BLACKSHADE" "BLTSHADE" "BOLD" "COMPRESSED" "CHARSETINFO" "DISPLAY"
|
||||
"FONTDESCRIPTOR" "FONTP" "FONTPROP" "INPUT" "ITALIC" "LIGHT" "LRSH" "MCCS" "MEDIUM" "REGULAR" "TCONC"
|
||||
"UTOMCODE?" "MEDLEYFONT.FILENAME" "MEDLEYFONT.WRITE.FONT")) READTABLE "XCL" BASE 10)
|
||||
|
||||
(IL:FILECREATED " 8-Dec-2025 12:13:40" IL:|{DSK}<home>matt>Interlisp>medley>lispusers>READ-BDF.;9| 51309
|
||||
(IL:FILECREATED "16-Mar-2026 16:37:31" IL:|{DSK}<home>matt>Interlisp>medley>lispusers>READ-BDF.;22| 58094
|
||||
|
||||
:EDIT-BY "mth"
|
||||
|
||||
:CHANGES-TO (IL:FUNCTIONS BDF-TO-CHARSETINFO BDF-TO-FONTDESCRIPTOR)
|
||||
(FILE-ENVIRONMENTS "READ-BDF")
|
||||
:CHANGES-TO (IL:FUNCTIONS READ-GLYPH READ-BDF BDF-TO-FONTDESCRIPTOR GLYPHS-BY-CHARSET
|
||||
WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE BDF-TO-CHARSETINFO)
|
||||
|
||||
:PREVIOUS-DATE " 8-Dec-2025 12:12:47" IL:|{DSK}<home>matt>Interlisp>medley>lispusers>READ-BDF.;8|
|
||||
:PREVIOUS-DATE "23-Feb-2026 20:11:48" IL:|{DSK}<home>matt>Interlisp>medley>lispusers>READ-BDF.;21|
|
||||
)
|
||||
|
||||
|
||||
@@ -20,7 +19,7 @@
|
||||
|
||||
(IL:RPAQQ IL:READ-BDFCOMS
|
||||
((IL:STRUCTURES BDF-FONT GLYPH XLFD)
|
||||
(IL:VARIABLES MAXCHARSET MAXTHINCHAR NOMAPPINGCHARSET)
|
||||
(IL:VARIABLES GLYPH-PROCESSING-HOOK MAXCHARSET MAXTHINCHAR NOMAPPINGCHARSET)
|
||||
(IL:FUNCTIONS BDF-TO-CHARSETINFO BDF-TO-FONTDESCRIPTOR BUILD-COMPOSITE CHAR-PRESENT-BIT
|
||||
COUNT-MCHARS GLYPHS-BY-CHARSET PACKFILENAME.STRING READ-BDF
|
||||
READ-DELIMITED-LIST-FROM-STRING READ-GLYPH WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE
|
||||
@@ -71,13 +70,17 @@
|
||||
(CHARSET昱EGISTRY NIL :TYPE STRING)
|
||||
(CHARSET挂NCODING NIL :TYPE STRING))
|
||||
|
||||
(DEFVAR GLYPH-PROCESSING-HOOK NIL)
|
||||
|
||||
(DEFCONSTANT MAXCHARSET 255)
|
||||
|
||||
(DEFCONSTANT MAXTHINCHAR 255)
|
||||
|
||||
(DEFCONSTANT NOMAPPINGCHARSET (1+ MAXCHARSET))
|
||||
|
||||
(DEFUN BDF-TO-CHARSETINFO (FONT CSET SLUGWIDTH) (IL:* IL:\; "Edited 8-Dec-2025 12:13 by mth")
|
||||
(DEFUN BDF-TO-CHARSETINFO (FONT CSET SLUGWIDTH &KEY AS-UNICODE)
|
||||
(IL:* IL:\; "Edited 16-Mar-2026 16:35 by mth")
|
||||
(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")
|
||||
@@ -107,7 +110,7 @@
|
||||
(IL:* IL:|;;| "If passed a BDF-FONT, look only at glyphs in the mapped charsets")
|
||||
|
||||
(DESTRUCTURING-SETQ (GBCS SW)
|
||||
(GLYPHS-BY-CHARSET FONT)))
|
||||
(GLYPHS-BY-CHARSET FONT :AS-UNICODE AS-UNICODE)))
|
||||
(T (ERROR "Invalid FONT: ~S" FONT)))
|
||||
(UNLESS (AND (INTEGERP SLUGWIDTH)
|
||||
(PLUSP SLUGWIDTH))
|
||||
@@ -126,7 +129,9 @@
|
||||
(IMAGEWIDTHS (IL:\\CREATECSINFOELEMENT))
|
||||
(DLEFT 0)
|
||||
GLYPHS-LIMITS BMAP OFFSETS HEIGHT WIDTHS)
|
||||
(CHARSETPROP CSINFO 'IL:CSCHARENCODING 'MCCS)
|
||||
(IL:CHARSETPROP CSINFO 'IL:CSCHARENCODING (IF AS-UNICODE
|
||||
'IL:UNICODE
|
||||
'MCCS))
|
||||
(LOOP :FOR XGL :IN CSGLYPHS :DO (LET* ((MCODE (CAR XGL))
|
||||
(GL (CDR XGL))
|
||||
(GWIDTH (GLYPH-WIDTH GL))
|
||||
@@ -201,7 +206,8 @@
|
||||
'IL:REPLACE)
|
||||
CSINFO))))
|
||||
|
||||
(DEFUN BDF-TO-FONTDESCRIPTOR (BDFONT FAMILY SIZE FACE ROTATION DEVICE)
|
||||
(DEFUN BDF-TO-FONTDESCRIPTOR (BDFONT FAMILY SIZE FACE ROTATION DEVICE &KEY AS-UNICODE)
|
||||
(IL:* IL:\; "Edited 16-Mar-2026 16:16 by mth")
|
||||
(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")
|
||||
@@ -220,7 +226,8 @@
|
||||
(OR SIZE (FONTPROP FAMILY 'IL:SIZE))
|
||||
(OR FACE (FONTPROP FAMILY 'IL:FACE))
|
||||
(OR ROTATION (FONTPROP FAMILY 'IL:ROTATION))
|
||||
(OR DEVICE (FONTPROP FAMILY 'IL:DEVICE)))))
|
||||
(OR DEVICE (FONTPROP FAMILY 'IL:DEVICE))
|
||||
:AS-UNICODE AS-UNICODE)))
|
||||
(WHEN (CONSP FAMILY) (IL:* IL:\;
|
||||
"Because (LISTP NIL) == T !!!")
|
||||
|
||||
@@ -240,7 +247,8 @@
|
||||
0)
|
||||
(OR DEVICE (IL:|fetch| (IL:FONTSPEC IL:FSDEVICE)
|
||||
IL:|of| FAMILY)
|
||||
'DISPLAY))))
|
||||
'DISPLAY)
|
||||
:AS-UNICODE AS-UNICODE)))
|
||||
(LET ((XLFD (BF-XLFD BDFONT))
|
||||
FONTDESC GBCSL CHARSETS SLUGWIDTH)
|
||||
(SETQ FAMILY (IL:\\FONTSYMBOL (OR FAMILY (XLFD-FAMILY XLFD))))
|
||||
@@ -280,7 +288,7 @@
|
||||
'IL:MRR)
|
||||
NIL DEVICE))
|
||||
(DESTRUCTURING-SETQ (GBCSL SLUGWIDTH)
|
||||
(GLYPHS-BY-CHARSET BDFONT))
|
||||
(GLYPHS-BY-CHARSET BDFONT :AS-UNICODE AS-UNICODE))
|
||||
(UNLESS SLUGWIDTH
|
||||
|
||||
(IL:* IL:|;;|
|
||||
@@ -300,16 +308,21 @@
|
||||
IL:ROTATION IL:_ ROTATION
|
||||
IL:FONTDEVICESPEC IL:_ (LIST FAMILY SIZE FACE ROTATION DEVICE)
|
||||
IL:FONTSLUGWIDTH IL:_ SLUGWIDTH
|
||||
IL:FONTCHARENCODING IL:_ 'MCCS))
|
||||
IL:FONTCHARENCODING IL:_ (IF AS-UNICODE
|
||||
'IL:UNICODE
|
||||
'MCCS)))
|
||||
(SETQ CHARSETS (LOOP :FOR CS :IN GBCSL :WITH CSET :WITH CSINFO :NCONC
|
||||
(WHEN (<= 0 (SETQ CSET (FIRST CS))
|
||||
MAXCHARSET)
|
||||
(SETQ CSINFO (BDF-TO-CHARSETINFO GBCSL CSET (1+ SLUGWIDTH)))
|
||||
(SETQ CSINFO (BDF-TO-CHARSETINFO GBCSL CSET (1+ SLUGWIDTH)
|
||||
:AS-UNICODE AS-UNICODE))
|
||||
(IL:\\INSTALLCHARSETINFO FONTDESC CSINFO CSET)
|
||||
(LIST CSET)))))
|
||||
(LIST FONTDESC CHARSETS))))
|
||||
|
||||
(DEFUN BUILD-COMPOSITE (FONTS &KEY VERBOSE) (IL:* IL:\; "Edited 1-Dec-2025 23:07 by mth")
|
||||
(DEFUN BUILD-COMPOSITE (FONTS &KEY VERBOSE (BLOCKING T))
|
||||
(IL:* IL:\; "Edited 19-Feb-2026 21:45 by mth")
|
||||
(IL:* IL:\; "Edited 1-Dec-2025 23:07 by mth")
|
||||
(IL:* IL:\; "Edited 30-Nov-2025 12:32 by mth")
|
||||
(IL:* IL:\; "Edited 26-Nov-2025 21:23 by mth")
|
||||
(IL:* IL:\; "Edited 18-Nov-2025 21:22 by mth")
|
||||
@@ -327,53 +340,61 @@
|
||||
(WHEN VERBOSE
|
||||
(FORMAT *STANDARD-OUTPUT* "~&Loading initial font file: ~A~%" (NAMESTRING BASE-FONT)
|
||||
))
|
||||
(SETQ BASE-FONT (READ-BDF BASE-FONT :MCCS-ONLY T :VERBOSE VERBOSE)))
|
||||
(SETQ BASE-FONT (READ-BDF BASE-FONT :MCCS-ONLY T :VERBOSE VERBOSE))
|
||||
(WHEN BLOCKING (IL:BLOCK)))
|
||||
((NOT (BDF-FONT-P BASE-FONT))
|
||||
(ERROR "Initial font (~S) is not a BDF-FONT, nor string, nor pathname." BASE-FONT)))
|
||||
(WHEN VERBOSE
|
||||
(FORMAT *STANDARD-OUTPUT* "~&Initial font contains ~D MCCS characters.~%"
|
||||
(SETQ CHAR-COUNT (COUNT-MCHARS BASE-FONT))))
|
||||
(SETQ MCHAR-PRESENT (BF-MCHAR-PRESENT BASE-FONT))
|
||||
(LOOP :FOR FILL-FONT :IN FILL-FROM :WITH PREV-CC :WHEN FILL-FONT :DO
|
||||
(COND
|
||||
((OR (STRINGP FILL-FONT)
|
||||
(PATHNAMEP FILL-FONT))
|
||||
(UNLESS (IL:INFILEP FILL-FONT)
|
||||
(ERROR "Subsequent font ~S doesn't exist or is unreadable." (NAMESTRING
|
||||
FILL-FONT)))
|
||||
(WHEN VERBOSE
|
||||
(FORMAT *STANDARD-OUTPUT* "~&Loading subsequent font file: ~A~%" (NAMESTRING
|
||||
FILL-FONT)))
|
||||
(SETQ FILL-FONT (READ-BDF FILL-FONT :MCCS-ONLY T :VERBOSE VERBOSE)))
|
||||
((NOT (BDF-FONT-P FILL-FONT))
|
||||
(ERROR "Subsequent font (~S) is not a BDF-FONT, nor string, nor pathname."
|
||||
FILL-FONT)))
|
||||
(SETQ PREV-CC CHAR-COUNT)
|
||||
(LOOP :FOR GL :IN (BF-GLYPHS FILL-FONT)
|
||||
:WITH V :DO (SETQ V (GLYPH-ENCODING GL))
|
||||
(WHEN (AND (LISTP V)
|
||||
(EQ (FIRST V)
|
||||
-1))
|
||||
(SETQ V (OR (SECOND V)
|
||||
-1)))
|
||||
(LOOP :FOR FILL-FONT :IN FILL-FROM :WITH PREV-CC :WITH FF-NAME :WHEN FILL-FONT :DO
|
||||
(FLET ((MERGE-GLYPH (GL &AUX V)
|
||||
(SETQ V (GLYPH-ENCODING GL))
|
||||
(WHEN (AND (LISTP V)
|
||||
(EQ (FIRST V)
|
||||
-1))
|
||||
(SETQ V (OR (SECOND V)
|
||||
-1)))
|
||||
|
||||
(IL:* IL:|;;|
|
||||
(IL:* IL:|;;|
|
||||
"Need to change this use of UTOMCODE? based on the CHARSET昱EGISTRY of the XLFD of FILL-FONT")
|
||||
|
||||
(WHEN (AND (UTOMCODE? V)
|
||||
(ZEROP (CHAR-PRESENT-BIT MCHAR-PRESENT V)))
|
||||
(CHAR-PRESENT-BIT MCHAR-PRESENT V 1)
|
||||
(WHEN (AND (UTOMCODE? V)
|
||||
(ZEROP (CHAR-PRESENT-BIT MCHAR-PRESENT V)))
|
||||
(CHAR-PRESENT-BIT MCHAR-PRESENT V 1)
|
||||
|
||||
(IL:* IL:|;;|
|
||||
(IL:* IL:|;;|
|
||||
"What other bookkeping of BASE-FONT needs to be done when adding a glyph? Any?")
|
||||
|
||||
(PUSH GL (BF-GLYPHS BASE-FONT))))
|
||||
(SETQ CHAR-COUNT (COUNT-MCHARS BASE-FONT))
|
||||
(WHEN VERBOSE
|
||||
(FORMAT *STANDARD-OUTPUT* "~&Font ~A supplied ~D additional MCCS characters.~%"
|
||||
(NAMESTRING FILL-FONT)
|
||||
(- (SETQ CHAR-COUNT (COUNT-MCHARS BASE-FONT))
|
||||
PREV-CC))))
|
||||
(PUSH GL (BF-GLYPHS BASE-FONT)))
|
||||
NIL))
|
||||
(COND
|
||||
((OR (STRINGP FILL-FONT)
|
||||
(PATHNAMEP FILL-FONT))
|
||||
(SETQ FF-NAME (NAMESTRING FILL-FONT))
|
||||
(UNLESS (IL:INFILEP FILL-FONT)
|
||||
(ERROR "Subsequent font ~S doesn't exist or is unreadable." FF-NAME))
|
||||
(WHEN VERBOSE (FORMAT *STANDARD-OUTPUT*
|
||||
"~&Loading subsequent font file: ~A~%" FF-NAME))
|
||||
(LET ((GLYPH-PROCESSING-HOOK #'MERGE-GLYPH))
|
||||
(READ-BDF FILL-FONT :MCCS-ONLY T :VERBOSE VERBOSE)
|
||||
(SETQ FILL-FONT NIL))
|
||||
(WHEN BLOCKING (IL:BLOCK)))
|
||||
((NOT (BDF-FONT-P FILL-FONT))
|
||||
(ERROR "Subsequent font (~S) is not a BDF-FONT, nor string, nor pathname."
|
||||
FF-NAME)))
|
||||
(SETQ PREV-CC CHAR-COUNT)
|
||||
(WHEN FILL-FONT
|
||||
(LOOP :FOR GL :IN (BF-GLYPHS FILL-FONT)
|
||||
:DO
|
||||
(MERGE-GLYPH GL)))
|
||||
(SETQ CHAR-COUNT (COUNT-MCHARS BASE-FONT))
|
||||
(WHEN VERBOSE
|
||||
(FORMAT *STANDARD-OUTPUT*
|
||||
"~&Font ~A supplied ~D additional MCCS characters.~%" FF-NAME
|
||||
(- (SETQ CHAR-COUNT (COUNT-MCHARS BASE-FONT))
|
||||
PREV-CC)))))
|
||||
BASE-FONT))
|
||||
|
||||
(DEFUN CHAR-PRESENT-BIT (BM MCODE &OPTIONAL (NEWBIT -1 SBIT)
|
||||
@@ -401,7 +422,8 @@
|
||||
(LET ((MCPBM (BF-MCHAR-PRESENT BDFONT)))
|
||||
(LOOP :FOR MC :FROM 0 :TO 65535 :COUNT (PLUSP (CHAR-PRESENT-BIT MCPBM MC))))))
|
||||
|
||||
(DEFUN GLYPHS-BY-CHARSET (FONT) (IL:* IL:\; "Edited 30-Nov-2025 17:36 by mth")
|
||||
(DEFUN GLYPHS-BY-CHARSET (FONT &KEY AS-UNICODE) (IL:* IL:\; "Edited 16-Mar-2026 16:06 by mth")
|
||||
(IL:* IL:\; "Edited 30-Nov-2025 17:36 by mth")
|
||||
(IL:* IL:\; "Edited 28-Nov-2025 17:24 by mth")
|
||||
(IL:* IL:\; "Edited 26-Nov-2025 20:50 by mth")
|
||||
(IL:* IL:\; "Edited 20-Nov-2025 12:01 by mth")
|
||||
@@ -471,7 +493,9 @@
|
||||
X))
|
||||
Y))))
|
||||
|
||||
(DEFUN READ-BDF (PATH &KEY VERBOSE MCCS-ONLY (EXTERNAL-FORMAT :ISO8859/1))
|
||||
(DEFUN READ-BDF (PATH &KEY VERBOSE MCCS-ONLY AS-UNICODE (EXTERNAL-FORMAT :ISO8859/1))
|
||||
(IL:* IL:\; "Edited 16-Mar-2026 16:11 by mth")
|
||||
(IL:* IL:\; "Edited 19-Feb-2026 21:42 by mth")
|
||||
(IL:* IL:\; "Edited 1-Dec-2025 22:40 by mth")
|
||||
(IL:* IL:\; "Edited 30-Nov-2025 11:59 by mth")
|
||||
(IL:* IL:\; "Edited 28-Nov-2025 17:39 by mth")
|
||||
@@ -586,16 +610,43 @@
|
||||
(PLUSP NGLYPHS))
|
||||
(ERROR "Invalid BDF file - CHARS count (~A) is invalid or missing."
|
||||
NGLYPHS))
|
||||
(LOOP :REPEAT NGLYPHS :WITH ENC :WITH MC :DO (SETQ GL (READ-GLYPH
|
||||
FILE-STREAM
|
||||
FONT))
|
||||
(LOOP :REPEAT NGLYPHS :WITH ENC :WITH MC :DO
|
||||
(SETQ GL (READ-GLYPH FILE-STREAM FONT :MCCS-ONLY MCCS-ONLY :AS-UNICODE
|
||||
AS-UNICODE))
|
||||
(SETQ ENC (GLYPH-ENCODING GL))
|
||||
(WHEN (AND (LISTP ENC)
|
||||
(EQ (FIRST ENC)
|
||||
-1))
|
||||
(EQL (FIRST ENC)
|
||||
-1))
|
||||
(SETQ ENC (OR (SECOND ENC)
|
||||
-1)))
|
||||
(COND
|
||||
(AS-UNICODE
|
||||
|
||||
(IL:* IL:|;;|
|
||||
"IS THIS TRUE IF REMAINING IN UNICODE ENCODING?")
|
||||
|
||||
(IL:* IL:|;;| "This glyph must have either a non-zero-width \"image\" or a non-zero-width \"escapement\", otherwise it cannot be mapped, no matter the UTOMCODE? value.")
|
||||
|
||||
(IL:* IL:|;;| "For now, assuming NOT TRUE")
|
||||
|
||||
(WHEN (AND GLYPH-PROCESSING-HOOK (FUNCTIONP
|
||||
GLYPH-PROCESSING-HOOK
|
||||
))
|
||||
(SETQ GL (FUNCALL GLYPH-PROCESSING-HOOK GL)))
|
||||
(WHEN GL
|
||||
|
||||
(IL:* IL:|;;|
|
||||
"Everything is mappable if in 0000-FFFF range")
|
||||
|
||||
(IF (<= 0 ENC 65535)
|
||||
(PROGN (SETF (GLYPH-MCODE GL)
|
||||
ENC)
|
||||
(TCONC MAPPED-GLYPHS GL))
|
||||
(TCONC UNMAPPED-GLYPHS GL)))
|
||||
|
||||
(IL:* IL:|;;| "Don't bother with MCHAR-PRESENT bits")
|
||||
|
||||
)
|
||||
((AND (OR (PLUSP (GLYPH-BBW GL))
|
||||
(PLUSP (FIRST (GLYPH-DWIDTH GL))))
|
||||
(SETQ MC (UTOMCODE? ENC)))
|
||||
@@ -615,143 +666,200 @@
|
||||
|
||||
(IL:* IL:|;;| "It ought to be safe to share the bitmap")
|
||||
|
||||
(TCONC MAPPED-GLYPHS CGL)
|
||||
(WHEN (AND GLYPH-PROCESSING-HOOK (FUNCTIONP
|
||||
GLYPH-PROCESSING-HOOK
|
||||
))
|
||||
(SETQ CGL (FUNCALL GLYPH-PROCESSING-HOOK CGL)))
|
||||
(WHEN CGL (TCONC MAPPED-GLYPHS CGL))
|
||||
(CHAR-PRESENT-BIT MCHAR-PRESENT CC 1)))
|
||||
(T (TCONC UNMAPPED-GLYPHS GL))))
|
||||
((NOT MCCS-ONLY)
|
||||
(WHEN (AND GLYPH-PROCESSING-HOOK (FUNCTIONP GLYPH-PROCESSING-HOOK)
|
||||
)
|
||||
(SETQ GL (FUNCALL GLYPH-PROCESSING-HOOK GL)))
|
||||
(WHEN GL (TCONC UNMAPPED-GLYPHS GL)))))
|
||||
(SETF (BF-GLYPHS FONT)
|
||||
(CAR MAPPED-GLYPHS))
|
||||
(SETF (BF-UNMAPPED故LYPHS FONT)
|
||||
(CAR UNMAPPED-GLYPHS)))
|
||||
(ENDFONT (SETQ FONT-COMPLETE T))))))))
|
||||
(WHEN VERBOSE
|
||||
(ENDFONT (SETQ FONT-COMPLETE T)))))))))
|
||||
(WHEN VERBOSE
|
||||
|
||||
(IL:* IL:|;;| "The SIZE reported needs clarification:")
|
||||
(IL:* IL:|;;| "The SIZE reported needs clarification:")
|
||||
|
||||
(FORMAT *STANDARD-OUTPUT* "Name: ~A~%Family: ~A~%Sizes: Font: ~A Pixel: ~A Point: ~A (decipoints)~%Weight: ~A~%Slant: ~A~%Expansion: ~A~%"
|
||||
(BF-NAME FONT)
|
||||
(XLFD-FAMILY XLFD)
|
||||
(FIRST (BF-SIZE FONT))
|
||||
(XLFD-PIXEL昤IZE XLFD)
|
||||
(XLFD-POINT昤IZE XLFD)
|
||||
(XLFD-WEIGHT XLFD)
|
||||
(XLFD-SLANT XLFD)
|
||||
(XLFD-SETWIDTH昧AME XLFD)))
|
||||
FONT)))
|
||||
(FORMAT *STANDARD-OUTPUT* "Name: ~A~%Family: ~A~%Sizes: Font: ~A Pixel: ~A Point: ~A (decipoints)~%Weight: ~A~%Slant: ~A~%Expansion: ~A~%Glyphs: ~D~%Unmapped glyphs: ~D~%"
|
||||
(BF-NAME FONT)
|
||||
(XLFD-FAMILY XLFD)
|
||||
(FIRST (BF-SIZE FONT))
|
||||
(XLFD-PIXEL昤IZE XLFD)
|
||||
(XLFD-POINT昤IZE XLFD)
|
||||
(XLFD-WEIGHT XLFD)
|
||||
(XLFD-SLANT XLFD)
|
||||
(XLFD-SETWIDTH昧AME XLFD)
|
||||
(LENGTH (BF-GLYPHS FONT))
|
||||
(LENGTH (BF-UNMAPPED故LYPHS FONT))))
|
||||
FONT))
|
||||
|
||||
(DEFUN READ-DELIMITED-LIST-FROM-STRING (INPUT-STRING &OPTIONAL (DELIMIT #\]))
|
||||
(IL:* IL:\; "Edited 20-Aug-2024 16:46 by mth")
|
||||
(WITH-INPUT-FROM-STRING (SI (CONCATENATE 'STRING INPUT-STRING " " (STRING DELIMIT)))
|
||||
(READ-DELIMITED-LIST DELIMIT SI)))
|
||||
|
||||
(DEFUN READ-GLYPH (FILE-STREAM FONT) (IL:* IL:\; "Edited 26-Nov-2025 23:32 by mth")
|
||||
(DEFUN READ-GLYPH (FILE-STREAM FONT &KEY MCCS-ONLY AS-UNICODE)
|
||||
(IL:* IL:\; "Edited 16-Mar-2026 15:32 by mth")
|
||||
(IL:* IL:\; "Edited 23-Feb-2026 20:11 by mth")
|
||||
(IL:* IL:\; "Edited 19-Feb-2026 15:46 by mth")
|
||||
(IL:* IL:\; "Edited 26-Nov-2025 23:32 by mth")
|
||||
(IL:* IL:\; "Edited 17-Nov-2025 20:03 by mth")
|
||||
(IL:* IL:\; "Edited 23-Apr-2025 17:53 by mth")
|
||||
(IL:* IL:\; "Edited 21-Apr-2025 13:37 by mth")
|
||||
(IL:* IL:\; "Edited 19-Apr-2025 09:32 by mth")
|
||||
(IL:* IL:\; "Edited 17-Apr-2025 18:14 by mth")
|
||||
(IL:* IL:\; "Edited 21-Aug-2024 01:10 by mth")
|
||||
(LET ((GLYPH (MAKE-GLYPH :SWIDTH (COPY-LIST (BF-SWIDTH FONT))
|
||||
:DWIDTH
|
||||
(COPY-LIST (BF-DWIDTH FONT))
|
||||
:SWIDTH1
|
||||
(COPY-LIST (BF-SWIDTH1 FONT))
|
||||
:DWIDTH1
|
||||
(COPY-LIST (BF-DWIDTH1 FONT))
|
||||
:VVECTOR
|
||||
(COPY-LIST (BF-VVECTOR FONT))))
|
||||
CHAR-COMPLETE LINE ITEMS V KEY POS STARTED BBW BBH)
|
||||
(LOOP :UNTIL CHAR-COMPLETE :DO (SETQ LINE (READ-LINE FILE-STREAM))
|
||||
(WHEN LINE (IL:* IL:\; "Ignore blank lines")
|
||||
(MULTIPLE-VALUE-SETQ (KEY POS)
|
||||
(READ-FROM-STRING LINE))
|
||||
(WHEN (<= POS (LENGTH LINE))
|
||||
(SETQ LINE (SUBSEQ LINE POS)))
|
||||
(COND
|
||||
((EQ KEY 'COMMENT) (IL:* IL:\; "Ignore COMMENT lines")
|
||||
(LET
|
||||
((GLYPH (MAKE-GLYPH :SWIDTH (COPY-LIST (BF-SWIDTH FONT))
|
||||
:DWIDTH
|
||||
(COPY-LIST (BF-DWIDTH FONT))
|
||||
:SWIDTH1
|
||||
(COPY-LIST (BF-SWIDTH1 FONT))
|
||||
:DWIDTH1
|
||||
(COPY-LIST (BF-DWIDTH1 FONT))
|
||||
:VVECTOR
|
||||
(COPY-LIST (BF-VVECTOR FONT))))
|
||||
CHAR-COMPLETE ENC LINE ITEMS V KEY POS STARTED BBW BBH)
|
||||
(LOOP
|
||||
:UNTIL CHAR-COMPLETE :DO (SETQ LINE (READ-LINE FILE-STREAM))
|
||||
(WHEN LINE (IL:* IL:\; "Ignore blank lines")
|
||||
(MULTIPLE-VALUE-SETQ (KEY POS)
|
||||
(READ-FROM-STRING LINE))
|
||||
(WHEN (<= POS (LENGTH LINE))
|
||||
(SETQ LINE (SUBSEQ LINE POS)))
|
||||
(COND
|
||||
((EQ KEY 'COMMENT) (IL:* IL:\; "Ignore COMMENT lines")
|
||||
(IL:* IL:\;
|
||||
"Probably aren't \"legal\" here, anyway.")
|
||||
)
|
||||
((EQ KEY 'STARTCHAR)
|
||||
(WHEN STARTED (ERROR "Invalid BDF file - STARTCHAR inside glyph."))
|
||||
(SETF STARTED T)
|
||||
(SETF (GLYPH-NAME GLYPH)
|
||||
(STRING LINE)))
|
||||
(T (UNLESS STARTED (ERROR
|
||||
)
|
||||
((EQ KEY 'STARTCHAR)
|
||||
(WHEN STARTED (ERROR "Invalid BDF file - STARTCHAR inside glyph."))
|
||||
(SETF STARTED T)
|
||||
(SETF (GLYPH-NAME GLYPH)
|
||||
(STRING LINE)))
|
||||
(T
|
||||
(UNLESS STARTED (ERROR
|
||||
"Invalid BDF file - glyph has not been started. STARTCHAR missing."
|
||||
))
|
||||
(SETQ ITEMS (READ-DELIMITED-LIST-FROM-STRING LINE))
|
||||
(CASE KEY
|
||||
(ENCODING (SETF (GLYPH-ENCODING GLYPH)
|
||||
(IF (EQL -1 (FIRST ITEMS))
|
||||
ITEMS
|
||||
(FIRST ITEMS))))
|
||||
(SWIDTH (SETF (GLYPH-SWIDTH GLYPH)
|
||||
ITEMS))
|
||||
(DWIDTH (SETF (GLYPH-DWIDTH GLYPH)
|
||||
ITEMS))
|
||||
(SWIDTH1 (SETF (GLYPH-SWIDTH1 GLYPH)
|
||||
ITEMS))
|
||||
(DWIDTH1 (SETF (GLYPH-DWIDTH1 GLYPH)
|
||||
ITEMS))
|
||||
(VVECTOR (SETF (GLYPH-VVECTOR GLYPH)
|
||||
ITEMS))
|
||||
(BBX (SETF (GLYPH-BBW GLYPH)
|
||||
(SETQ BBW (FIRST ITEMS))
|
||||
(GLYPH-BBH GLYPH)
|
||||
(SETQ BBH (SECOND ITEMS))
|
||||
(GLYPH-BBXOFF0 GLYPH)
|
||||
(THIRD ITEMS)
|
||||
(GLYPH-BBYOFF0 GLYPH)
|
||||
(FOURTH ITEMS)))
|
||||
(BITMAP (UNLESS (ZEROP (* BBW BBH))
|
||||
))
|
||||
(SETQ ITEMS (READ-DELIMITED-LIST-FROM-STRING LINE))
|
||||
(CASE KEY
|
||||
(ENCODING (SETF (GLYPH-ENCODING GLYPH)
|
||||
(SETQ ENC (IF (EQL -1 (FIRST ITEMS))
|
||||
ITEMS
|
||||
(FIRST ITEMS)))))
|
||||
(SWIDTH (SETF (GLYPH-SWIDTH GLYPH)
|
||||
ITEMS))
|
||||
(DWIDTH (SETF (GLYPH-DWIDTH GLYPH)
|
||||
ITEMS))
|
||||
(SWIDTH1 (SETF (GLYPH-SWIDTH1 GLYPH)
|
||||
ITEMS))
|
||||
(DWIDTH1 (SETF (GLYPH-DWIDTH1 GLYPH)
|
||||
ITEMS))
|
||||
(VVECTOR (SETF (GLYPH-VVECTOR GLYPH)
|
||||
ITEMS))
|
||||
(BBX (SETF (GLYPH-BBW GLYPH)
|
||||
(SETQ BBW (FIRST ITEMS))
|
||||
(GLYPH-BBH GLYPH)
|
||||
(SETQ BBH (SECOND ITEMS))
|
||||
(GLYPH-BBXOFF0 GLYPH)
|
||||
(THIRD ITEMS)
|
||||
(GLYPH-BBYOFF0 GLYPH)
|
||||
(FOURTH ITEMS)))
|
||||
(BITMAP
|
||||
(UNLESS (ZEROP (* BBW BBH)) (IL:* IL:\;
|
||||
"Don't bother creating a BITMAP with no area")
|
||||
(IF (AND (NOT AS-UNICODE)
|
||||
MCCS-ONLY
|
||||
(NOT (UTOMCODE? ENC)))
|
||||
(PROGN
|
||||
(IL:* IL:|;;|
|
||||
"This is the case of skipping over non-MCCS encoded glyph when MCCS-ONLY")
|
||||
|
||||
(IL:* IL:|;;| "Don't bother creating a BITMAP with no area")
|
||||
(LOOP :REPEAT BBH :DO (READ-LINE FILE-STREAM)))
|
||||
(LET*
|
||||
((BM (BITMAPCREATE BBW BBH 1))
|
||||
(BM.BASE (IL:|fetch| IL:BITMAPBASE IL:|of| BM))
|
||||
(BM.RASTERWIDTH (IL:|fetch| IL:BITMAPRASTERWIDTH IL:|of| BM))
|
||||
(NBYTES (CEILING BBW 8))
|
||||
(NCHARS (* 2 NBYTES))
|
||||
(NWORDS (CEILING BBW 16))
|
||||
BITS WORDINDEX)
|
||||
(LABELS ((CHAR-HEX-VALUE (C)
|
||||
(IF (CHARACTERP C)
|
||||
(COND
|
||||
((CHAR<= #\0 C #\9)
|
||||
(- (CHAR-CODE C)
|
||||
(IL:CONSTANT (CHAR-CODE #\0))))
|
||||
((CHAR<= #\A C #\F)
|
||||
|
||||
(LET* ((BM (BITMAPCREATE BBW BBH 1))
|
||||
(BM.BASE (IL:|fetch| IL:BITMAPBASE IL:|of| BM))
|
||||
(BM.RASTERWIDTH (IL:|fetch| IL:BITMAPRASTERWIDTH
|
||||
IL:|of| BM))
|
||||
(NBYTES (CEILING BBW 8))
|
||||
(NCHARS (* 2 NBYTES))
|
||||
(NWORDS (CEILING BBW 16))
|
||||
BITS BYTEPOS WORDINDEX)
|
||||
(LOOP :WITH BITROW = 0 :REPEAT BBH :DO
|
||||
(SETQ LINE (STRING-TRIM '(#\Space #\Tab)
|
||||
(READ-LINE FILE-STREAM)))
|
||||
(UNLESS (AND (EQUAL NCHARS (LENGTH LINE))
|
||||
(SETQ BITS
|
||||
(PARSE-INTEGER LINE :RADIX 16
|
||||
:JUNK-ALLOWED T)))
|
||||
(ERROR
|
||||
"Invalid BDF file - bad line in BITMAP: ~A"
|
||||
LINE))
|
||||
(WHEN (ODDP NBYTES)
|
||||
(SETQ BITS (ASH BITS 8)))
|
||||
(SETQ WORDINDEX (* BITROW BM.RASTERWIDTH))
|
||||
(SETQ BYTEPOS (* 16 (1- NWORDS)))
|
||||
(LOOP :REPEAT NWORDS :DO
|
||||
(IL:\\PUTBASE BM.BASE WORDINDEX
|
||||
(LDB (BYTE 16 BYTEPOS)
|
||||
BITS))
|
||||
(INCF WORDINDEX)
|
||||
(DECF BYTEPOS 16))
|
||||
(INCF BITROW))
|
||||
(SETF (GLYPH-BITMAP GLYPH)
|
||||
BM))))
|
||||
(ENDCHAR (SETQ CHAR-COMPLETE T)))))))
|
||||
(SETF (GLYPH-ASCENT GLYPH)
|
||||
(+ (GLYPH-BBH GLYPH)
|
||||
(GLYPH-BBYOFF0 GLYPH)))
|
||||
(SETF (GLYPH-DESCENT GLYPH)
|
||||
(ABS (MIN 0 (GLYPH-BBYOFF0 GLYPH))))
|
||||
(SETF (GLYPH-WIDTH GLYPH)
|
||||
(MAX (+ (MAX 0 (GLYPH-BBXOFF0 GLYPH))
|
||||
(GLYPH-BBW GLYPH))
|
||||
(FIRST (GLYPH-DWIDTH GLYPH))))
|
||||
GLYPH))
|
||||
(IL:* IL:|;;|
|
||||
"The (- (CHAR-CODE #\\A) 10) accomplishes adding 10 after the outer subtraction")
|
||||
|
||||
(- (CHAR-CODE C)
|
||||
(IL:CONSTANT (- (CHAR-CODE #\A)
|
||||
10))))
|
||||
((CHAR<= #\a C #\f)
|
||||
|
||||
(IL:* IL:|;;|
|
||||
"The (- (CHAR-CODE #\\a) 10) accomplishes adding 10 after the outer subtraction")
|
||||
|
||||
(- (CHAR-CODE C)
|
||||
(IL:CONSTANT (- (CHAR-CODE #\a)
|
||||
10))))
|
||||
(T 0))
|
||||
0))
|
||||
(PARSE-WORDS
|
||||
NIL
|
||||
(LOOP :FOR I :FROM 0 :TO (1- NCHARS)
|
||||
:BY 4 :WITH C3LIMIT = (- NCHARS 3)
|
||||
:WITH C4LIMIT = (- NCHARS 4)
|
||||
:COLLECT
|
||||
(+ (ASH (CHAR-HEX-VALUE (CHAR LINE I))
|
||||
12)
|
||||
(ASH (CHAR-HEX-VALUE (CHAR LINE (+ 1 I)))
|
||||
8)
|
||||
(ASH (CHAR-HEX-VALUE (AND (<= I C3LIMIT)
|
||||
(CHAR LINE (+ 2 I))))
|
||||
4)
|
||||
(CHAR-HEX-VALUE (AND (<= I C4LIMIT)
|
||||
(CHAR LINE (+ 3 I))))))))
|
||||
(LOOP :WITH BITROW = 0 :REPEAT BBH :DO
|
||||
(SETQ LINE (STRING-TRIM '(#\Space #\Tab)
|
||||
(READ-LINE FILE-STREAM)))
|
||||
(UNLESS (EQUAL NCHARS (LENGTH LINE))
|
||||
(ERROR "Invalid BDF file - bad line in BITMAP: ~A"
|
||||
LINE))
|
||||
(SETQ BITS (PARSE-WORDS))
|
||||
(SETQ WORDINDEX (* BITROW BM.RASTERWIDTH))
|
||||
(LOOP :REPEAT NWORDS :DO (IL:\\PUTBASE BM.BASE WORDINDEX
|
||||
(POP BITS))
|
||||
(INCF WORDINDEX))
|
||||
(INCF BITROW)))
|
||||
(SETF (GLYPH-BITMAP GLYPH)
|
||||
BM)))))
|
||||
(ENDCHAR (SETQ CHAR-COMPLETE T)))))))
|
||||
(SETF (GLYPH-ASCENT GLYPH)
|
||||
(+ (GLYPH-BBH GLYPH)
|
||||
(GLYPH-BBYOFF0 GLYPH)))
|
||||
(SETF (GLYPH-DESCENT GLYPH)
|
||||
(ABS (MIN 0 (GLYPH-BBYOFF0 GLYPH))))
|
||||
(SETF (GLYPH-WIDTH GLYPH)
|
||||
(MAX (+ (MAX 0 (GLYPH-BBXOFF0 GLYPH))
|
||||
(GLYPH-BBW GLYPH))
|
||||
(FIRST (GLYPH-DWIDTH GLYPH))))
|
||||
GLYPH))
|
||||
|
||||
(DEFUN WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE (BDFONT DEST-DIR &KEY FAMILY SIZE FACE ROTATION DEVICE
|
||||
&AUX FULLFILENAME)
|
||||
AS-UNICODE TEST &AUX FULLFILENAME)
|
||||
(IL:* IL:\; "Edited 16-Mar-2026 16:12 by mth")
|
||||
(IL:* IL:\; "Edited 23-Feb-2026 15:57 by mth")
|
||||
(IL:* IL:\; "Edited 17-Feb-2026 14:17 by mth")
|
||||
(IL:* IL:\; "Edited 2-Dec-2025 14:47 by mth")
|
||||
(IL:* IL:\; "Edited 30-Nov-2025 16:03 by mth")
|
||||
(IL:* IL:\; "Edited 28-Nov-2025 17:56 by mth")
|
||||
@@ -760,7 +868,7 @@
|
||||
(UNLESS (BDF-FONT-P BDFONT)
|
||||
(ERROR "Not a BDF-FONT: ~S ~%" BDFONT))
|
||||
(DESTRUCTURING-BIND (FONTDESC CSETS)
|
||||
(BDF-TO-FONTDESCRIPTOR BDFONT FAMILY SIZE FACE ROTATION DEVICE)
|
||||
(BDF-TO-FONTDESCRIPTOR BDFONT FAMILY SIZE FACE ROTATION DEVICE :AS-UNICODE AS-UNICODE)
|
||||
(UNLESS FONTDESC
|
||||
|
||||
(IL:* IL:|;;| "Creation of the FONTDESCRIPTOR failed!")
|
||||
@@ -769,8 +877,10 @@
|
||||
|
||||
(IL:* IL:|;;| "CSETS correspond to the charsets actually present in the FONTDESC.")
|
||||
|
||||
(SETQ FULLFILENAME (MEDLEYFONT.WRITE.FONT FONTDESC (MEDLEYFONT.FILENAME FONTDESC NIL NIL
|
||||
DEST-DIR)))
|
||||
(SETQ FULLFILENAME (IF TEST
|
||||
"WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE TEST"
|
||||
(MEDLEYFONT.WRITE.FONT FONTDESC (MEDLEYFONT.FILENAME NIL FONTDESC
|
||||
NIL NIL DEST-DIR))))
|
||||
(LIST FULLFILENAME FONTDESC CSETS)))
|
||||
|
||||
(DEFUN XLFD-SPLIT-FONT-NAME (NAME) (IL:* IL:\; "Edited 26-Nov-2025 09:43 by mth")
|
||||
@@ -880,21 +990,21 @@
|
||||
"BITMAPCREATE" "BITMAPHEIGHT"
|
||||
"BITMAPWIDTH" "BLACKSHADE" "BLTSHADE"
|
||||
"BOLD" "COMPRESSED" "CHARSETINFO"
|
||||
"CHARSETPROP" "DISPLAY" "FONTDESCRIPTOR"
|
||||
"FONTP" "FONTPROP" "INPUT" "ITALIC"
|
||||
"LIGHT" "LRSH" "MCCS" "MEDIUM" "REGULAR"
|
||||
"TCONC" "UTOMCODE?" "MEDLEYFONT.FILENAME"
|
||||
"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 (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:FILEMAP (NIL (3216 10679 (BDF-TO-CHARSETINFO 3216 . 10679)) (10681 17828 (BDF-TO-FONTDESCRIPTOR
|
||||
10681 . 17828)) (17830 22409 (BUILD-COMPOSITE 17830 . 22409)) (22411 23160 (CHAR-PRESENT-BIT 22411 .
|
||||
23160)) (23162 23446 (COUNT-MCHARS 23162 . 23446)) (23448 26592 (GLYPHS-BY-CHARSET 23448 . 26592)) (
|
||||
26594 28019 (PACKFILENAME.STRING 26594 . 28019)) (28021 40051 (READ-BDF 28021 . 40051)) (40053 40376 (
|
||||
READ-DELIMITED-LIST-FROM-STRING 40053 . 40376)) (40378 49390 (READ-GLYPH 40378 . 49390)) (49392 51271
|
||||
(WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE 49392 . 51271)) (51273 53690 (XLFD-SPLIT-FONT-NAME 51273 . 53690)
|
||||
) (53692 56704 (XLFD-TO-FACE 53692 . 56704)))))
|
||||
IL:STOP
|
||||
|
||||
Binary file not shown.
Binary file not shown.
151
sources/FILEIO
151
sources/FILEIO
@@ -1,12 +1,12 @@
|
||||
(DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10)
|
||||
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
|
||||
|
||||
(FILECREATED "21-Apr-2026 20:57:55" {DSK}<home>matt>Interlisp>medley>sources>FILEIO.;17 166496
|
||||
(FILECREATED " 6-Feb-2026 23:22:00" {WMEDLEY}<sources>FILEIO.;142 166519
|
||||
|
||||
:EDIT-BY "mth"
|
||||
:EDIT-BY rmk
|
||||
|
||||
:CHANGES-TO (FNS \DO.PARAMS.AT.OPEN)
|
||||
:CHANGES-TO (FNS DIRECTORYNAME)
|
||||
|
||||
:PREVIOUS-DATE "21-Apr-2026 20:24:53" {DSK}<home>matt>Interlisp>medley>sources>FILEIO.;15)
|
||||
:PREVIOUS-DATE "12-Sep-2025 08:19:06" {WMEDLEY}<sources>FILEIO.;141)
|
||||
|
||||
|
||||
(PRETTYCOMPRINT FILEIOCOMS)
|
||||
@@ -1446,9 +1446,7 @@
|
||||
(GO RETRY])
|
||||
|
||||
(\DO.PARAMS.AT.OPEN
|
||||
[LAMBDA (STREAM ACCESS PARAMETERS) (* ; "Edited 21-Apr-2026 20:57 by mth")
|
||||
(* ; "Edited 20-Apr-2026 17:36 by mth")
|
||||
(* ; "Edited 25-Dec-2024 10:54 by rmk")
|
||||
[LAMBDA (STREAM ACCESS PARAMETERS) (* ; "Edited 25-Dec-2024 10:54 by rmk")
|
||||
(* ; "Edited 15-Jul-2024 22:29 by rmk")
|
||||
(* ; "Edited 25-Aug-2023 08:43 by rmk")
|
||||
(* ; "Edited 6-Jul-2022 00:00 by rmk")
|
||||
@@ -1471,49 +1469,40 @@
|
||||
|
||||
(DECLARE (USEDFREE STREAM-AFTER-OPEN-FNS))
|
||||
(\EXTERNALFORMAT STREAM :DEFAULT)
|
||||
(for X ATTR VAL EOL in PARAMETERS
|
||||
do (COND
|
||||
[(LISTP X)
|
||||
(SETQ ATTR (CAR X))
|
||||
(SETQ VAL (CAR (LISTP (CDR X]
|
||||
(T (SETQ ATTR X)
|
||||
(SETQ VAL T)))
|
||||
(SELECTQ ATTR
|
||||
(BUFFERS (SETFILEINFO STREAM 'BUFFERS VAL))
|
||||
(ENDOFSTREAMOP (SETFILEINFO STREAM 'ENDOFSTREAMOP VAL))
|
||||
(CHARSET (CHARSET STREAM VAL))
|
||||
((FORMAT EXTERNALFORMAT :EXTERNAL-FORMAT)
|
||||
(* ;;
|
||||
"Ignore the case of the non-LISTP X setting VAL to T")
|
||||
[for X ATTR VAL EOL in PARAMETERS do [(COND
|
||||
[(LISTP X)
|
||||
(SETQ ATTR (CAR X))
|
||||
(SETQ VAL (CAR (LISTP (CDR X]
|
||||
(T (SETQ ATTR X)
|
||||
(SETQ VAL T)))
|
||||
(SELECTQ ATTR
|
||||
(BUFFERS (SETFILEINFO STREAM 'BUFFERS VAL))
|
||||
(ENDOFSTREAMOP (SETFILEINFO STREAM 'ENDOFSTREAMOP VAL))
|
||||
(CHARSET (CHARSET STREAM VAL))
|
||||
((FORMAT EXTERNALFORMAT :EXTERNAL-FORMAT)
|
||||
|
||||
[if (LISTP X)
|
||||
then
|
||||
(* ;;
|
||||
"VAL can be :UTF-8, CR, (UTF:8 CR), i.e. specify either one or both")
|
||||
(* ;;
|
||||
"VAL can be :UTF-8, CR, (UTF:8 CR), i.e. specify either one or both")
|
||||
|
||||
(for V in (MKLIST VAL) do
|
||||
(* ;;
|
||||
"FIND-FORMAT doesn't know about :DEFAULT, so...")
|
||||
(if (LISTP VAL)
|
||||
then (* ;
|
||||
"VAL could be (:UTF-8 CR) e.g. from CL:OPEN")
|
||||
(\EXTERNALFORMAT STREAM (CAR VAL))
|
||||
(* ;
|
||||
"Can override the EOL of the format")
|
||||
(SETQ EOL (CADR VAL))
|
||||
elseif (SETQ EOL (CAR)
|
||||
VAL)
|
||||
else (\EXTERNALFORMAT STREAM VAL)))
|
||||
(CONVHANKAKU (CONVHANKAKU STREAM VAL))
|
||||
((EOL EOLCONVENTION EOLC)
|
||||
(SETQ EOL VAL] finally
|
||||
|
||||
(if (OR (EQ V :DEFAULT)
|
||||
(FIND-FORMAT V T))
|
||||
then (\EXTERNALFORMAT STREAM V)
|
||||
else (SETQ EOL V])
|
||||
(CONVHANKAKU (CONVHANKAKU STREAM VAL))
|
||||
((EOL EOLCONVENTION EOLC)
|
||||
(SETQ EOL VAL))
|
||||
NIL) finally
|
||||
|
||||
(* ;;
|
||||
(* ;;
|
||||
"If not specified, default EOL to ANY--SETFILEINFO checks for output streams")
|
||||
|
||||
(* ;;
|
||||
" Cannot depend on SETFILEINFO checking for ANY on output stream, because it ERRORs!")
|
||||
|
||||
(CL:WHEN (OR (NEQ (SETQ EOL (OR EOL 'ANY))
|
||||
'ANY)
|
||||
(EQ ACCESS 'INPUT))
|
||||
(SETFILEINFO STREAM 'EOL EOL)))
|
||||
(SETFILEINFO STREAM 'EOL
|
||||
(OR EOL 'ANY]
|
||||
(FOR FN IN STREAM-AFTER-OPEN-FNS DO (APPLY* FN STREAM ACCESS PARAMETERS])
|
||||
|
||||
(\RENAMEFILE
|
||||
@@ -3172,39 +3161,39 @@ update the map")
|
||||
(ADDTOVAR LAMA \IS.NOT.RANDACCESSP \ILLEGAL.DEVICEOP STREAMPROP)
|
||||
)
|
||||
(DECLARE%: DONTCOPY
|
||||
(FILEMAP (NIL (27757 31873 (STREAMPROP 27767 . 28201) (GETSTREAMPROP 28203 . 28952) (PUTSTREAMPROP
|
||||
28954 . 31721) (STREAMP 31723 . 31871)) (31916 35295 (\DEFPRINT.BY.NAME 31926 . 33078) (
|
||||
\STREAM.DEFPRINT 33080 . 34988) (\FDEV.DEFPRINT 34990 . 35293)) (35553 40594 (\GETACCESS 35563 . 36017
|
||||
) (\SETACCESS 36019 . 40592)) (60820 66789 (\DEFINEDEVICE 60830 . 63146) (\GETDEVICEFROMNAME 63148 .
|
||||
63621) (\GETDEVICEFROMHOSTNAME 63623 . 64667) (\REMOVEDEVICE 64669 . 65792) (\REMOVEDEVICE.NAMES 65794
|
||||
. 66787)) (66829 94486 (\CLOSEFILE 66839 . 67664) (\DELETEFILE 67666 . 67960) (\DEVICEEVENT 67962 .
|
||||
69732) (\GENERATEFILES 69734 . 70681) (\GENERATENEXTFILE 70683 . 71334) (\GENERATEFILEINFO 71336 .
|
||||
71797) (\GETFILENAME 71799 . 72188) (\GENERIC.OUTFILEP 72190 . 72660) (\OPENFILE 72662 . 75240) (
|
||||
\DO.PARAMS.AT.OPEN 75242 . 79364) (\RENAMEFILE 79366 . 80322) (\REVALIDATEFILE 80324 . 82926) (
|
||||
\PAGED.REVALIDATEFILELST 82928 . 84486) (\PAGED.REVALIDATEFILES 84488 . 86207) (\PAGED.REVALIDATEFILE
|
||||
86209 . 88492) (\BUFFERED.REVALIDATEFILE 88494 . 90780) (\BUFFERED.REVALIDATEFILELST 90782 . 91966) (
|
||||
\PRINT-REVALIDATION-RESULT 91968 . 92810) (\TRUNCATEFILE 92812 . 93203) (\FILE-CONFLICT 93205 . 94484)
|
||||
) (94522 99185 (\GENERATENOFILES 94532 . 96628) (\NULLFILEGENERATOR 96630 . 96874) (\NOFILESNEXTFILEFN
|
||||
96876 . 98867) (\NOFILESINFOFN 98869 . 99183)) (99304 101212 (\FILE.NOT.OPEN 99314 . 99827) (
|
||||
\FILE.WONT.OPEN 99829 . 100157) (\ILLEGAL.DEVICEOP 100159 . 100441) (\IS.NOT.RANDACCESSP 100443 .
|
||||
100889) (\STREAM.NOT.OPEN 100891 . 101210)) (101347 103645 (\FDEVINSTANCE 101357 . 103643)) (104847
|
||||
111818 (CNDIR 104857 . 106162) (DIRECTORYNAME 106164 . 109944) (DIRECTORYNAMEP 109946 . 110562) (
|
||||
HOSTNAMEP 110564 . 111371) (\ADD.CONNECTED.DIR 111373 . 111816)) (111863 140810 (\BACKFILEPTR 111873
|
||||
. 112061) (\BACKPEEKBIN 112063 . 112424) (\BACKBIN 112426 . 112777) (BIN 112779 . 112996) (\BIN
|
||||
112998 . 113275) (\BINS 113277 . 113563) (BOUT 113565 . 113927) (\BOUT 113929 . 114244) (\BOUTS 114246
|
||||
. 114557) (COPYBYTES 114559 . 117891) (COPYCHARS 117893 . 121691) (COPYFILE 121693 . 123053) (
|
||||
\COPYOPENFILE 123055 . 126254) (\INFER.FILE.TYPE 126256 . 127210) (EOFP 127212 . 127509) (FORCEOUTPUT
|
||||
127511 . 127758) (\FLUSH.OPEN.STREAMS 127760 . 128116) (CHARSET 128118 . 129477) (ACCESS-CHARSET
|
||||
129479 . 130116) (GETEOFPTR 130118 . 130368) (GETFILEINFO 130370 . 133563) (\TYPE.FROM.FILETYPE 133565
|
||||
. 134035) (\FILETYPE.FROM.TYPE 134037 . 134216) (GETFILEPTR 134218 . 134470) (SETFILEINFO 134472 .
|
||||
138709) (SETFILEPTR 138711 . 140430) (BOUT16 140432 . 140617) (BIN16 140619 . 140808)) (140913 148093
|
||||
(\GENERIC.BINS 140923 . 141203) (\GENERIC.BOUTS 141205 . 141470) (\GENERIC.RENAMEFILE 141472 . 143720)
|
||||
(\GENERIC.OPENP 143722 . 145037) (\GENERIC.READP 145039 . 146191) (\GENERIC.CHARSET 146193 . 148091))
|
||||
(148094 148433 (\MAP-OPEN-STREAMS 148104 . 148431)) (150288 152368 (\EOF.ACTION 150298 . 150549) (
|
||||
\EOSERROR 150551 . 150744) (\GETEOFPTR 150746 . 150928) (\INCFILEPTR 150930 . 151280) (\PEEKBIN 151282
|
||||
. 151473) (\SETCLOSEDFILELENGTH 151475 . 151809) (\SETEOFPTR 151811 . 151999) (\SETFILEPTR 152001 .
|
||||
152366)) (152369 152911 (\FIXPOUT 152379 . 152679) (\FIXPIN 152681 . 152909)) (152912 153478 (\BOUTEOL
|
||||
152922 . 153476)) (156374 166238 (\BUFFERED.BIN 156384 . 157236) (\BUFFERED.PEEKBIN 157238 . 158020)
|
||||
(\BUFFERED.BOUT 158022 . 158882) (\BUFFERED.BINS 158884 . 162569) (\BUFFERED.BOUTS 162571 . 164372) (
|
||||
\BUFFERED.COPYBYTES 164374 . 166236)))))
|
||||
(FILEMAP (NIL (27706 31822 (STREAMPROP 27716 . 28150) (GETSTREAMPROP 28152 . 28901) (PUTSTREAMPROP
|
||||
28903 . 31670) (STREAMP 31672 . 31820)) (31865 35244 (\DEFPRINT.BY.NAME 31875 . 33027) (
|
||||
\STREAM.DEFPRINT 33029 . 34937) (\FDEV.DEFPRINT 34939 . 35242)) (35502 40543 (\GETACCESS 35512 . 35966
|
||||
) (\SETACCESS 35968 . 40541)) (60769 66738 (\DEFINEDEVICE 60779 . 63095) (\GETDEVICEFROMNAME 63097 .
|
||||
63570) (\GETDEVICEFROMHOSTNAME 63572 . 64616) (\REMOVEDEVICE 64618 . 65741) (\REMOVEDEVICE.NAMES 65743
|
||||
. 66736)) (66778 94509 (\CLOSEFILE 66788 . 67613) (\DELETEFILE 67615 . 67909) (\DEVICEEVENT 67911 .
|
||||
69681) (\GENERATEFILES 69683 . 70630) (\GENERATENEXTFILE 70632 . 71283) (\GENERATEFILEINFO 71285 .
|
||||
71746) (\GETFILENAME 71748 . 72137) (\GENERIC.OUTFILEP 72139 . 72609) (\OPENFILE 72611 . 75189) (
|
||||
\DO.PARAMS.AT.OPEN 75191 . 79387) (\RENAMEFILE 79389 . 80345) (\REVALIDATEFILE 80347 . 82949) (
|
||||
\PAGED.REVALIDATEFILELST 82951 . 84509) (\PAGED.REVALIDATEFILES 84511 . 86230) (\PAGED.REVALIDATEFILE
|
||||
86232 . 88515) (\BUFFERED.REVALIDATEFILE 88517 . 90803) (\BUFFERED.REVALIDATEFILELST 90805 . 91989) (
|
||||
\PRINT-REVALIDATION-RESULT 91991 . 92833) (\TRUNCATEFILE 92835 . 93226) (\FILE-CONFLICT 93228 . 94507)
|
||||
) (94545 99208 (\GENERATENOFILES 94555 . 96651) (\NULLFILEGENERATOR 96653 . 96897) (\NOFILESNEXTFILEFN
|
||||
96899 . 98890) (\NOFILESINFOFN 98892 . 99206)) (99327 101235 (\FILE.NOT.OPEN 99337 . 99850) (
|
||||
\FILE.WONT.OPEN 99852 . 100180) (\ILLEGAL.DEVICEOP 100182 . 100464) (\IS.NOT.RANDACCESSP 100466 .
|
||||
100912) (\STREAM.NOT.OPEN 100914 . 101233)) (101370 103668 (\FDEVINSTANCE 101380 . 103666)) (104870
|
||||
111841 (CNDIR 104880 . 106185) (DIRECTORYNAME 106187 . 109967) (DIRECTORYNAMEP 109969 . 110585) (
|
||||
HOSTNAMEP 110587 . 111394) (\ADD.CONNECTED.DIR 111396 . 111839)) (111886 140833 (\BACKFILEPTR 111896
|
||||
. 112084) (\BACKPEEKBIN 112086 . 112447) (\BACKBIN 112449 . 112800) (BIN 112802 . 113019) (\BIN
|
||||
113021 . 113298) (\BINS 113300 . 113586) (BOUT 113588 . 113950) (\BOUT 113952 . 114267) (\BOUTS 114269
|
||||
. 114580) (COPYBYTES 114582 . 117914) (COPYCHARS 117916 . 121714) (COPYFILE 121716 . 123076) (
|
||||
\COPYOPENFILE 123078 . 126277) (\INFER.FILE.TYPE 126279 . 127233) (EOFP 127235 . 127532) (FORCEOUTPUT
|
||||
127534 . 127781) (\FLUSH.OPEN.STREAMS 127783 . 128139) (CHARSET 128141 . 129500) (ACCESS-CHARSET
|
||||
129502 . 130139) (GETEOFPTR 130141 . 130391) (GETFILEINFO 130393 . 133586) (\TYPE.FROM.FILETYPE 133588
|
||||
. 134058) (\FILETYPE.FROM.TYPE 134060 . 134239) (GETFILEPTR 134241 . 134493) (SETFILEINFO 134495 .
|
||||
138732) (SETFILEPTR 138734 . 140453) (BOUT16 140455 . 140640) (BIN16 140642 . 140831)) (140936 148116
|
||||
(\GENERIC.BINS 140946 . 141226) (\GENERIC.BOUTS 141228 . 141493) (\GENERIC.RENAMEFILE 141495 . 143743)
|
||||
(\GENERIC.OPENP 143745 . 145060) (\GENERIC.READP 145062 . 146214) (\GENERIC.CHARSET 146216 . 148114))
|
||||
(148117 148456 (\MAP-OPEN-STREAMS 148127 . 148454)) (150311 152391 (\EOF.ACTION 150321 . 150572) (
|
||||
\EOSERROR 150574 . 150767) (\GETEOFPTR 150769 . 150951) (\INCFILEPTR 150953 . 151303) (\PEEKBIN 151305
|
||||
. 151496) (\SETCLOSEDFILELENGTH 151498 . 151832) (\SETEOFPTR 151834 . 152022) (\SETFILEPTR 152024 .
|
||||
152389)) (152392 152934 (\FIXPOUT 152402 . 152702) (\FIXPIN 152704 . 152932)) (152935 153501 (\BOUTEOL
|
||||
152945 . 153499)) (156397 166261 (\BUFFERED.BIN 156407 . 157259) (\BUFFERED.PEEKBIN 157261 . 158043)
|
||||
(\BUFFERED.BOUT 158045 . 158905) (\BUFFERED.BINS 158907 . 162592) (\BUFFERED.BOUTS 162594 . 164395) (
|
||||
\BUFFERED.COPYBYTES 164397 . 166259)))))
|
||||
STOP
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user