From b5ccfdc4e741181ad235b78ce04c58723dce47e2 Mon Sep 17 00:00:00 2001 From: Matt Heffron Date: Mon, 1 Dec 2025 23:39:59 -0800 Subject: [PATCH] Fixed incomplete description in documentation. Changed parameters for BUILD-COMPOSITE to simplify, and enable keyword :VERBOSE parameter. Added some VERBOSE progress messages. --- lispusers/READ-BDF | 129 ++++++++++++++++++++------------------- lispusers/READ-BDF.DFASL | Bin 24256 -> 24645 bytes lispusers/READ-BDF.TEDIT | Bin 12137 -> 12957 bytes 3 files changed, 67 insertions(+), 62 deletions(-) diff --git a/lispusers/READ-BDF b/lispusers/READ-BDF index 77bf8c04..b4ee9fbe 100644 --- a/lispusers/READ-BDF +++ b/lispusers/READ-BDF @@ -4,16 +4,13 @@ "FONTDESCRIPTOR" "FONTP" "FONTPROP" "INPUT" "ITALIC" "LIGHT" "LRSH" "MEDIUM" "REGULAR" "TCONC" "UTOMCODE?" "MEDLEYFONT.FILENAME" "MEDLEYFONT.WRITE.FONT")) READTABLE "XCL" BASE 10) -(IL:FILECREATED "30-Nov-2025 17:43:25" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;75| 50310 +(IL:FILECREATED " 1-Dec-2025 23:07:52" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;3| 50528 :EDIT-BY "mth" - :CHANGES-TO (IL:FUNCTIONS GLYPHS-BY-CHARSET BDF-TO-FONTDESCRIPTOR - WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE BUILD-COMPOSITE READ-BDF - BDF-TO-CHARSETINFO COUNT-MCHARS) - (IL:VARS IL:READ-BDFCOMS) + :CHANGES-TO (IL:FUNCTIONS BUILD-COMPOSITE READ-BDF) - :PREVIOUS-DATE "30-Nov-2025 16:05:42" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;74| + :PREVIOUS-DATE "30-Nov-2025 17:43:25" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;1| ) @@ -305,65 +302,72 @@ (LIST CSET))))) (LIST FONTDESC CHARSETS)))) -(DEFUN BUILD-COMPOSITE (BASE-FONT &REST FILL-FROM) (IL:* IL:\; "Edited 30-Nov-2025 12:32 by mth") +(DEFUN BUILD-COMPOSITE (FONTS &KEY VERBOSE) (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") (IL:* IL:\; "Edited 16-Nov-2025 18:25 by mth") (IL:* IL:\; "Edited 14-Nov-2025 17:04 by mth") - (LET (MCHAR-PRESENT FONT) - (UNLESS (AND FILL-FROM (LISTP FILL-FROM)) - (ERROR "FILL-FROM is not a list.")) - (WHEN (LISTP BASE-FONT) + (LET* ((BASE-FONT (FIRST (SETQ FONTS (IL:MKLIST FONTS)))) + (FILL-FROM (REST FONTS)) + MCHAR-PRESENT CHAR-COUNT FONT) + (COND + ((OR (STRINGP BASE-FONT) + (PATHNAMEP BASE-FONT)) + (UNLESS (IL:INFILEP BASE-FONT) + (ERROR "Initial font file ~S doesn't exist or is unreadable." (NAMESTRING BASE-FONT) + )) + (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))) + ((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))) - (IL:* IL:|;;| "Allow specifying both BASE-FONT and FILL-FROM in a single LIST.") - - (SETQ FONT (FIRST BASE-FONT)) - (SETQ FILL-FROM (APPEND (REST BASE-FONT) - FILL-FROM)) - (SETQ BASE-FONT FONT)) - (COND - ((OR (STRINGP BASE-FONT) - (PATHNAMEP BASE-FONT)) - (UNLESS (IL:INFILEP BASE-FONT) - (ERROR "BASE-FONT ~S doesn't exist or is unreadable." BASE-FONT)) - (SETQ BASE-FONT (READ-BDF BASE-FONT :MCCS-ONLY T))) - ((NOT (TYPEP BASE-FONT 'BDF-FONT)) - (ERROR "BASE-FONT is not a BDF-FONT, nor string, nor pathname."))) - (SETQ MCHAR-PRESENT (BF-MCHAR-PRESENT BASE-FONT)) - (LOOP :FOR FILL-FONT :IN FILL-FROM :WHEN FILL-FONT :DO (COND - ((OR (STRINGP FILL-FONT) - (PATHNAMEP FILL-FONT)) - (UNLESS (IL:INFILEP FILL-FONT) - (ERROR - "Element of FILL-FROM (~S) doesn't exist or is unreadable." - FILL-FONT)) - (SETQ FILL-FONT - (READ-BDF FILL-FONT - :MCCS-ONLY T))) - ((NOT (BDF-FONT-P FILL-FONT)) - (ERROR - "Element of FILL-FROM (~S) is not a BDF-FONT, nor string, nor pathname." - FILL-FONT))) - (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))) - - (IL:* IL:|;;| + (IL:* IL:|;;|  "Need to change this use of UTOMCODE? based on the CHARSET¬REGISTRY 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))))) - BASE-FONT)) + (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)))) + BASE-FONT)) (DEFUN CHAR-PRESENT-BIT (BM MCODE &OPTIONAL (NEWBIT -1 SBIT) &AUX CS CC) (IL:* IL:\; "Edited 26-Nov-2025 09:29 by mth") @@ -461,6 +465,7 @@ Y)))) (DEFUN READ-BDF (PATH &KEY VERBOSE MCCS-ONLY (EXTERNAL-FORMAT :ISO8859/1)) + (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") (IL:* IL:\; "Edited 26-Nov-2025 22:47 by mth") @@ -877,11 +882,11 @@ (IL:PUTPROPS IL:READ-BDF IL:DATABASE IL:NO) (IL:DECLARE\: IL:DONTCOPY - (IL:FILEMAP (NIL (3235 10173 (BDF-TO-CHARSETINFO 3235 . 10173)) (10175 16397 (BDF-TO-FONTDESCRIPTOR -10175 . 16397)) (16399 20017 (BUILD-COMPOSITE 16399 . 20017)) (20019 20768 (CHAR-PRESENT-BIT 20019 . -20768)) (20770 21054 (COUNT-MCHARS 20770 . 21054)) (21056 24091 (GLYPHS-BY-CHARSET 21056 . 24091)) ( -24093 25518 (PACKFILENAME.STRING 24093 . 25518)) (25520 34886 (READ-BDF 25520 . 34886)) (34888 35211 ( -READ-DELIMITED-LIST-FROM-STRING 34888 . 35211)) (35213 42211 (READ-GLYPH 35213 . 42211)) (42213 43494 -(WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE 42213 . 43494)) (43496 45913 (XLFD-SPLIT-FONT-NAME 43496 . 45913) -) (45915 48927 (XLFD-TO-FACE 45915 . 48927))))) + (IL:FILEMAP (NIL (3029 9967 (BDF-TO-CHARSETINFO 3029 . 9967)) (9969 16191 (BDF-TO-FONTDESCRIPTOR 9969 + . 16191)) (16193 20126 (BUILD-COMPOSITE 16193 . 20126)) (20128 20877 (CHAR-PRESENT-BIT 20128 . 20877) +) (20879 21163 (COUNT-MCHARS 20879 . 21163)) (21165 24200 (GLYPHS-BY-CHARSET 21165 . 24200)) (24202 +25627 (PACKFILENAME.STRING 24202 . 25627)) (25629 35104 (READ-BDF 25629 . 35104)) (35106 35429 ( +READ-DELIMITED-LIST-FROM-STRING 35106 . 35429)) (35431 42429 (READ-GLYPH 35431 . 42429)) (42431 43712 +(WRITE-BDF-TO-MEDLEYDISPLAYFONT-FILE 42431 . 43712)) (43714 46131 (XLFD-SPLIT-FONT-NAME 43714 . 46131) +) (46133 49145 (XLFD-TO-FACE 46133 . 49145))))) IL:STOP diff --git a/lispusers/READ-BDF.DFASL b/lispusers/READ-BDF.DFASL index faa31f3d52c8e8996ca08918d24cf61612c2c854..57065cd10723b8746ff4fcf54e79596222de8de9 100644 GIT binary patch delta 2654 zcmah~Yitx%6rMZ#=!-rqOTk)UXn0v&EZZ(E1)!}*V5W}@o>CTxTKIvwc^|H%kc>% z3ko|%1CJ^1f;YaCBk85R5b}UiHjXd5zxW0;2MVSYHYq6x2^`p%>j3c5`DL8#bzXkG zzv!m^@H~MNT4swc@0yHH#Upvs0hDxVjQ9g&_se6XN<$!0a7r(DOq*B9v3ZqA9$g=E zT_#8Q6b<#=q;l%~GS0?TYP?-#3N$Xs6)BjGM+({BHLVxSs}hds1te0)E5wLvG(Mb2 zMv6}9MUU$)+h}4q{*3M-2j+erj=!M0M1rYD56l6F3pt*9=w980!{&zL<7F(^H@^~* zqG`QQnIB#pSuw2_VW6*YfdY}~8JipA&t#%;eAWDNYDwhfcv#Q-YzeIBbU>UOyLM42 z5Nx^D)8;K@M$o7Eea(Ki9tt*vf@LW!mx#ya*e_+XD6y!`G93-N7Bo_9I|-j#C(Vo& zxw%d^?x*11kutz614Iy(-2Yu*_O z$Xd`X(;q9G$vnnFK1tPqxx&r9R6Rrrk38IzBE{d3C}B&S6{xQ_+`6W=GDP^At!8GE zFW3kR3cv+y5}r!c9p!yTz=)1oG|pTOW*!ro1oDezRt&9c=+>V` zL0%ZG$Fc~0T3(wOabeJvo{&x3$`+B`E&_|HjV4v8m)%}ZCEcssncsZ}=DYdP@1id$ zuaNSzyh|dLM+jqI=pN>)Ck_%jVvh(y#4>Gl{ss^z{EXmnn!5Mg(n8D3@XM+aP=a<9 z@!hmty`9+Upjvrn3#0v)s7zQdx3|J;yA8|R@Ii@D`h{9m{l7A*ER#s@nX*TBh7 zq#FZE?aRYVoan>EA#k^$8=-yo8ODPk{CNbRj2(EWh=ThBx}A9b#Rw9Uj1~kt{M>lB z!Hq0-XWtdG?gDbIQ;#M@Jbj1U2*OuXP7pM5rmNl>!nuC33nuGk=Pvv86nH}!qyAi2& z#JzFEoi*YXL`=-k!dBmwg$>~_+So@#3I%zWNzQRiaehu{VdXB(N;7!_YZK&>74)o delta 2149 zcmah}du&rx7{BMXd$aDrDzLHbDr1AW>g?J*LE5b?EA8#Ay?4CYtsA4G1Gbql2pC}l zGJ;Z&?F6_bJc5#Fd~P%d~sheM0_i{VS*iRO{;P`7{7HKqp?7;z6bYeu?< z!jwPRN5yH7VFBTYYuEzevlcXA;hUk_#Z?=)xCLZ>D)@*dTqtGC8-3g$aV@N`WfP5c zXV51}8p~ti*Y9tXOoP|*FEw8dPr9J$=s5SI3k6;t=e}_R(K;dyyIGqO#*jAT=Vo2p z_jQ>Z(+@J~gA&#yZz}vjIH-$@P_ZkG9qq^3AMq`KWp zL!UtCHihrbl;F2{B;jtTIGCjDRr5uwA;Mrwwb zDT_8yFB3fOE;B!?Mz62HF$@&fR9;5UhKrf>3Cx9i`+|Y~4W9J+8BV@u$mMf?Z?_Tat zZK#KM1HQR@9GPOHPy100*=EXWyRT7_?GV)BzgN^{YSL)AuYqyl6&7!nYY7YIf>{+i zWBEa=CyUQ1mldnWX7$+&Qj6kkQOfa)_F{bnTvDV)G8!d?TsVWV%520__WUw>{0_+{ zS{2el3)hb~QkVgERLemFBfe`F5QhsKSCJpzbd+VaJwpTBNE5`{@FOc1r?%yRvmw^B zGNLI~c(OVmX1mK?x3kGky4O_UUsgSy)wvV|oqCpt%UrLZir96RfJ{3ODL<1wgysO= ziL_vMaa>T1Xc}z}o{n(`$bGn2d}ppsjilJ@Zl~x}v~J*A@h!0sX>dX`RVbwFLsO-> zow7n^sx@f}K);stYR7G!n%e)JqehJ&q3lR2A7DeU>ic7#dFE>8`N?#=6#~yvxC~$$ z{>vxJK|1*lffH{y1)wt;DeQ9r{a`6tVxlXa2mT?DFVsm1z?Ks>2(uj zrEv266x(g7gIw7pa_M{uJN>CF(3avo>*u35KC#|fH*@|;@_JeE@l1G@eO7+NW PM6Sj5x5jymK9Tqr=b&O4 diff --git a/lispusers/READ-BDF.TEDIT b/lispusers/READ-BDF.TEDIT index c2de2f3623180427e284063bca4a5bd76341660a..76027ebdff7471cd05e32e8a3caf9e4019603790 100644 GIT binary patch delta 2949 zcmb_dO>7%Q6duQIQadSxmhcnu^BOm5)wk$IGfl~vUa?i zq67(FkT^gk&~QZvE=au~lp9qKa6{ZVaD!VB65@o!f$+Y!o@o|yNyT9|Z@zi&ec$_L z)_L&Or|w67GVfO1oprZGb6>yv+v%aj(yhuWrC%+)K`*{uC@+*&3)zHzulKulrRGw& z+jLsajvH`|Uu*1bZ_v6+4lNZ|D>=#(1KM%+L&&dtTiY%zb?$vKQ+wO!HP|%=qVLm^@4Rcva z7B?xgSS+trLS0$?ci;Xw$J-~@3tIcs@IqXFer8jD7SD|YJVCS7*lM}HPmN9LtgF1t z>7K;=K;5ecb!VG48(yHtlBu&fnx}Y(_^C zB;8sLnX+joYsNDmfKZ{!20+0S;&T@5cI$j@0iHN9ypWf!)Cv z>7~(`SWF*`zNx<)y>nO{8;-~Cs15zch3nbOaw%UZ-=euIv|KFHm28$WEBQt0!u7}F zlf8pVg@xn#J`JC+_=*3e_>m=_uu#90n$&|6yPfBLZ|u?KXF7JD+_ig5zodU0ojshJ zJQX`nN-5T%)Hpv01aW;ceK8i-JLWwc2dsKzTT;dhpjXl(u`#5k4A#ecIqaLN(-zRz zE=^oK2FDgmo`Ai)>L@t4G}Q)%T9GFKkfcE*6L60~9!CH~=0UOqqa5_}6A^UH0H+Wj zkMB~L(m~ovtr_SH0^m;?1l`pLKWT$Ny)=rlV`Zgonq;VkQsF``VL)!tq_i!mjEp4d zgAz+&`dE9!18iS4eMA>t?;AwgJjbg!gIMvB~!7oYt}OZp2O{U($c;u@0s{0_K+ygkEsK zNL%4*KZMZ8{;(M1!=EFR*?FuWE4pI(;QEV+GO8s*XZuqloq;UdBf@i+p435+bFl zkz_O!1F}(qk2W$csx5=K2E-29mMTCpDY}mHBYIK@AmcIuY}j6rFL?HnxElN+?a*@X~yAY-+otsHlPk4zX1iC$$_4HmItTP85s82HT}F zQaei)Wr6g>0wKhXMOUr7L2Q8X8`#rDrB>>?J0$M8&b{Nwh=s@Rop|ZEo+hwsy=`v*(Y+-EQsfBCzN8O}}Hja-~kZ%9A;7n(dpRjyVwD z-|@|EtJgPMUB7v`@82|=1LGBIwbJ^k@wmp2E2PQfO{%gT%Gk$82U)*GY~2tvoi2$F zjNk5e2d2{w)9vo$ww+6UkW_BlN-m}vRLn}Hu~w|vACj|Ui+?2-Crqnn?9=4(T;7zL z@csbXx&(C~j_q>ArWwzkDw(aGIf6q=I8a`NpBE^Y(DhyXel$IF94e&zYuQ5(Az&2`6R$$($y#e=`fC@3gESj6+W$o0w%FH+FE0wA6hUOj*Wj&nnxNeocq>w<8>Cuz1M2&!kIs5%PQQnw`-Rbz$K zk-!Q-DiRW?D7TCt=7F+G2#?ys9$>aCJX{w(-w47qZ_w-=K~#MyM5upm`I$hh0ix4_ zKpg;=18Z1)Y8+v$6N0=(10*;wo0pE$;3XhPWu8|sBjNyh24lc##^o5YE(jCC(YIm< zc8Ym42FEmtsAHoT^v_2N@|va_CeCXJ7mu1Xwoa31@oKNe=&4f#9w93Td%hw>B04L8 z+JajgZHIk~SodBm=JObWV==1v6O3@!3K&F)^xSCCdYu$ml`KU@S@!$WywFSq%pmITqQjkJqORe^0oTiR&AS=uQK)+a~%dRrv;6hidAAY3Z4z7S;8*O=%f hS<$xs6oiaU@cBgnj%!=Xne>Zu^pH+{>N;Ql_8*G^)sg@J